/* * CORE functions */ void gt_stats_parallel_generate_stats() { // Stats info gt_stats_analysis stats_analysis = GT_STATS_ANALYSIS_DEFAULT(); gt_stats** stats = malloc(parameters.num_threads*sizeof(gt_stats*)); // Select analysis stats_analysis.best_map = parameters.best_map; stats_analysis.maps_profile = parameters.maps_profile|parameters.mismatch_quality|parameters.mismatch_transitions; stats_analysis.nucleotide_stats = true; stats_analysis.split_map_stats = parameters.splitmaps_profile; stats_analysis.indel_profile = parameters.indel_profile; // Open file gt_input_file* input_file = (parameters.name_input_file==NULL) ? gt_input_stream_open(stdin) : gt_input_file_open(parameters.name_input_file,parameters.mmap_input); gt_sequence_archive* sequence_archive = NULL; if (stats_analysis.indel_profile) { sequence_archive = gt_sequence_archive_new(); register gt_input_file* const reference_file = gt_input_file_open(parameters.name_reference_file,false); fprintf(stderr,"Loading reference file ..."); if (gt_input_multifasta_parser_get_archive(reference_file,sequence_archive)!=GT_IFP_OK) { fprintf(stderr,"\n"); gt_fatal_error_msg("Error parsing reference file '%s'\n",parameters.name_reference_file); } gt_input_file_close(reference_file); fprintf(stderr," done! \n"); } // Parallel reading+process #pragma omp parallel num_threads(parameters.num_threads) { uint64_t tid = omp_get_thread_num(); gt_buffered_input_file* buffered_input = gt_buffered_input_file_new(input_file); gt_status error_code; gt_template *template = gt_template_new();
gt_status parse_arguments(int argc,char** argv) { gt_status err=GT_STATUS_OK; struct option* gt_coverage_getopt = gt_options_adaptor_getopt(gt_coverage_options); gt_string* const gt_coverage_short_getopt = gt_options_adaptor_getopt_short(gt_coverage_options); int option, option_index; while (true) { if ((option=getopt_long(argc,argv, gt_string_get_string(gt_coverage_short_getopt),gt_coverage_getopt,&option_index))==-1) break; switch (option) { case 'c': parameters.combine=true; break; case 'd': parameters.detailed_output=true; break; case 'b': parameters.block_size = atol(optarg); break; case 'o': parameters.output_file = optarg; break; case 'p': parameters.prefix = optarg; break; case 'r': parameters.ranges_file = optarg; break; case 't': parameters.target_file = optarg; break; case 'x': parameters.extend = atol(optarg); break; case 'P': parameters.paired = true; break; case 'U': if(!strcasecmp("first",optarg)) parameters.unique=GT_UNIQUE_FIRST; else if(!strcasecmp("gem",optarg)) parameters.unique=GT_UNIQUE_GEM; else if(!strcasecmp("xt",optarg)) parameters.unique=GT_UNIQUE_XT; else if(!strncasecmp("mq:",optarg,3)) { parameters.unique=GT_UNIQUE_MQ; parameters.MQ_limit=atol(optarg+3); } else { gt_fatal_error_msg("Unique mode not recognized: '%s'",optarg); } break; case 'D': if(!strcasecmp("ignore",optarg)) parameters.duplicate=GT_DUPLICATE_IGNORE; else if(!strcasecmp("remove",optarg)) parameters.duplicate=GT_DUPLICATE_REMOVE; else { gt_fatal_error_msg("Duplicate mode not recognized: '%s'",optarg); } break; case 'q': parameters.min_quality = atol(optarg); break; case 'v': parameters.verbose=true; break; case 'T': #ifdef HAVE_OPENMP parameters.num_threads = atol(optarg); #endif break; case 'h': usage(gt_coverage_options,gt_coverage_groups,false); exit(1); break; case 'H': usage(gt_coverage_options,gt_coverage_groups,true); exit(1); case 'J': gt_options_fprint_json_menu(stderr,gt_coverage_options,gt_coverage_groups,true,false); exit(1); break; case '?': default: usage(gt_coverage_options,gt_coverage_groups,false); gt_fatal_error_msg("Option '%c' %d not recognized",option,option); break; } } if(!parameters.ranges_file) { fputs("No ranges file specified. Use -r or --ranges_file option\n",stderr); } return err; }