static inline int32_t tmap_refseq_supported(tmap_refseq_t *refseq) { int32_t i, j; char *refseq_v = refseq->package_version->s; char *tmap_v = PACKAGE_VERSION; // sanity check on version names for(i=j=0;i<strlen(refseq_v);i++) { if('.' == refseq_v[i]) j++; } if(2 != j) { tmap_error("did not find three version numbers", Exit, OutOfRange); } for(i=j=0;i<strlen(tmap_v);i++) { if('.' == tmap_v[i]) j++; } if(2 != j) { tmap_error("did not find three version numbers", Exit, OutOfRange); } // get the format ids if(0 == strcmp(tmap_refseq_get_version_format(refseq_v), tmap_refseq_get_version_format(tmap_v))) { return 1; } return 0; }
static inline void tmap_refseq_print_header(tmap_file_t *fp, tmap_refseq_t *refseq) { uint32_t i; tmap_file_fprintf(fp, "version id:\t%llu\n", (unsigned long long int)refseq->version_id); tmap_file_fprintf(fp, "format:\t%s\n", tmap_refseq_get_version_format(refseq->package_version->s)); tmap_file_fprintf(fp, "package version:\t%s\n", refseq->package_version->s); for(i=0;i<refseq->num_annos;i++) { tmap_file_fprintf(fp, "contig-%d:\t%s\t%u\n", i+1, refseq->annos[i].name->s, refseq->annos[i].len); } tmap_file_fprintf(fp, "length:\t%llu\n", (unsigned long long int)refseq->len); tmap_file_fprintf(fp, "supported:\t%s\n", (0 == tmap_refseq_supported(refseq)) ? "false" : "true"); }
int tmap_index(int argc, char *argv[]) { int c; tmap_index_opt_t opt; opt.fn_fasta = NULL; opt.occ_interval = TMAP_BWT_OCC_INTERVAL; opt.hash_width = INT32_MAX; opt.sa_interval = TMAP_SA_INTERVAL; opt.is_large = -1; opt.check_hash = 1; if(2 == argc && 0 == strcmp("--version", argv[1])) { tmap_file_stdout = tmap_file_fdopen(fileno(stdout), "wb", TMAP_FILE_NO_COMPRESSION); tmap_file_fprintf(tmap_file_stdout, "%s\n", tmap_refseq_get_version_format(PACKAGE_VERSION)); tmap_file_fclose(tmap_file_stdout); return 0; } while((c = getopt(argc, argv, "f:o:i:w:a:hvH")) >= 0) { switch(c) { case 'f': opt.fn_fasta = tmap_strdup(optarg); break; case 'o': opt.occ_interval = atoi(optarg); break; case 'i': opt.sa_interval = atoi(optarg); break; case 'w': opt.hash_width = atoi(optarg); break; case 'a': if(0 == strcmp("is", optarg)) opt.is_large = 0; else if(0 == strcmp("bwtsw", optarg)) opt.is_large = 1; else tmap_error("Option -a value not correct", Exit, CommandLineArgument); break; case 'v': tmap_progress_set_verbosity(1); break; case 'h': return usage(&opt); case 'H': opt.check_hash = 0; break; default: return usage(&opt); } } if(argc != optind || 1 == argc) { return usage(&opt); } if(NULL == opt.fn_fasta) { tmap_error("required option -f", Exit, CommandLineArgument); } if(opt.occ_interval < TMAP_BWT_OCC_MOD || 0 != (opt.occ_interval % 2) || 0 != (opt.occ_interval % TMAP_BWT_OCC_MOD)) { tmap_error("option -o out of range", Exit, CommandLineArgument); } if(opt.hash_width < 0) { tmap_error("option -w out of range", Exit, CommandLineArgument); } if(opt.sa_interval <= 0 || (1 < opt.sa_interval && 0 != (opt.sa_interval % 2))) { tmap_error("option -i out of range", Exit, CommandLineArgument); } tmap_index_core(&opt); free(opt.fn_fasta); tmap_progress_print2("terminating successfully"); return 0; }