int main_vcfgtcheck(int argc, char *argv[]) { int c; args_t *args = (args_t*) calloc(1,sizeof(args_t)); args->files = bcf_sr_init(); args->argc = argc; args->argv = argv; set_cwd(args); char *regions = NULL, *targets = NULL; static struct option loptions[] = { {"GTs-only",1,0,'G'}, {"all-sites",0,0,'a'}, {"homs-only",0,0,'H'}, {"help",0,0,'h'}, {"genotypes",1,0,'g'}, {"plot",1,0,'p'}, {"target-sample",1,0,'S'}, {"query-sample",1,0,'s'}, {"regions",1,0,'r'}, {"targets",1,0,'t'}, {0,0,0,0} }; while ((c = getopt_long(argc, argv, "hg:p:s:S:Hr:at:G:",loptions,NULL)) >= 0) { switch (c) { case 'G': args->no_PLs = atoi(optarg); break; case 'a': args->all_sites = 1; break; case 'H': args->hom_only = 1; break; case 'g': args->gt_fname = optarg; break; case 'p': args->plot = optarg; break; case 'S': args->target_sample = optarg; break; case 's': args->query_sample = optarg; break; case 'r': regions = optarg; break; case 't': targets = optarg; break; case 'h': case '?': usage(); default: error("Unknown argument: %s\n", optarg); } } if ( argc==optind || argc>optind+1 ) usage(); // none or too many files given if ( !args->gt_fname ) args->cross_check = 1; // no genotype file, run in cross-check mode else args->files->require_index = 1; if ( regions && bcf_sr_set_regions(args->files, regions)<0 ) error("Failed to read the regions: %s\n", regions); if ( targets && bcf_sr_set_targets(args->files, targets,0)<0 ) error("Failed to read the targets: %s\n", targets); if ( !bcf_sr_add_reader(args->files, argv[optind]) ) error("Failed to open or the file not indexed: %s\n", argv[optind]); if ( args->gt_fname && !bcf_sr_add_reader(args->files, args->gt_fname) ) error("Failed to open or the file not indexed: %s\n", args->gt_fname); args->files->collapse = COLLAPSE_SNPS|COLLAPSE_INDELS; if ( args->plot ) args->plot = init_prefix(args->plot); init_data(args); if ( args->cross_check ) cross_check_gts(args); else check_gt(args); destroy_data(args); bcf_sr_destroy(args->files); if (args->plot) free(args->plot); free(args); return 0; }
int main_vcfgtcheck(int argc, char *argv[]) { int c; args_t *args = (args_t*) calloc(1,sizeof(args_t)); args->files = bcf_sr_init(); args->argc = argc; args->argv = argv; set_cwd(args); char *regions = NULL, *targets = NULL; int regions_is_file = 0, targets_is_file = 0; static struct option loptions[] = { {"GTs-only",1,0,'G'}, {"all-sites",0,0,'a'}, {"homs-only",0,0,'H'}, {"help",0,0,'h'}, {"genotypes",1,0,'g'}, {"plot",1,0,'p'}, {"target-sample",1,0,'S'}, {"query-sample",1,0,'s'}, {"regions",1,0,'r'}, {"regions-file",1,0,'R'}, {"targets",1,0,'t'}, {"targets-file",1,0,'T'}, {0,0,0,0} }; char *tmp; while ((c = getopt_long(argc, argv, "hg:p:s:S:Hr:R:at:T:G:",loptions,NULL)) >= 0) { switch (c) { case 'G': args->no_PLs = strtol(optarg,&tmp,10); if ( *tmp ) error("Could not parse argument: --GTs-only %s\n", optarg); break; case 'a': args->all_sites = 1; break; case 'H': args->hom_only = 1; break; case 'g': args->gt_fname = optarg; break; case 'p': args->plot = optarg; break; case 'S': args->target_sample = optarg; break; case 's': args->query_sample = optarg; break; case 'r': regions = optarg; break; case 'R': regions = optarg; regions_is_file = 1; break; case 't': targets = optarg; break; case 'T': targets = optarg; targets_is_file = 1; break; case 'h': case '?': usage(); default: error("Unknown argument: %s\n", optarg); } } char *fname = NULL; if ( optind==argc ) { if ( !isatty(fileno((FILE *)stdin)) ) fname = "-"; // reading from stdin else usage(); // no files given } else fname = argv[optind]; if ( argc>optind+1 ) usage(); // too many files given if ( !args->gt_fname ) args->cross_check = 1; // no genotype file, run in cross-check mode else args->files->require_index = 1; if ( regions && bcf_sr_set_regions(args->files, regions, regions_is_file)<0 ) error("Failed to read the regions: %s\n", regions); if ( targets && bcf_sr_set_targets(args->files, targets, targets_is_file, 0)<0 ) error("Failed to read the targets: %s\n", targets); if ( !bcf_sr_add_reader(args->files, fname) ) error("Failed to open %s: %s\n", fname,bcf_sr_strerror(args->files->errnum)); if ( args->gt_fname && !bcf_sr_add_reader(args->files, args->gt_fname) ) error("Failed to open %s: %s\n", args->gt_fname,bcf_sr_strerror(args->files->errnum)); args->files->collapse = COLLAPSE_SNPS|COLLAPSE_INDELS; if ( args->plot ) args->plot = init_prefix(args->plot); init_data(args); if ( args->cross_check ) cross_check_gts(args); else check_gt(args); destroy_data(args); bcf_sr_destroy(args->files); if (args->plot) free(args->plot); free(args); return 0; }