/** * main function. Parses command-line arguments. */ int hisat2_build(int argc, const char **argv) { string outfile; try { // Reset all global state, including getopt state opterr = optind = 1; resetOptions(); string infile; EList<string> infiles(MISC_CAT); parseOptions(argc, argv); argv0 = argv[0]; if(showVersion) { cout << argv0 << " version " << string(HISAT2_VERSION).c_str() << endl; if(sizeof(void*) == 4) { cout << "32-bit" << endl; } else if(sizeof(void*) == 8) { cout << "64-bit" << endl; } else { cout << "Neither 32- nor 64-bit: sizeof(void*) = " << sizeof(void*) << endl; } cout << "Built on " << BUILD_HOST << endl; cout << BUILD_TIME << endl; cout << "Compiler: " << COMPILER_VERSION << endl; cout << "Options: " << COMPILER_OPTIONS << endl; cout << "Sizeof {int, long, long long, void*, size_t, off_t}: {" << sizeof(int) << ", " << sizeof(long) << ", " << sizeof(long long) << ", " << sizeof(void *) << ", " << sizeof(size_t) << ", " << sizeof(off_t) << "}" << endl; return 0; } // Get input filename if(optind >= argc) { cerr << "No input sequence or sequence file specified!" << endl; printUsage(cerr); return 1; } infile = argv[optind++]; // Get output filename if(optind >= argc) { cerr << "No output file specified!" << endl; printUsage(cerr); return 1; } outfile = argv[optind++]; tokenize(infile, ",", infiles); if(infiles.size() < 1) { cerr << "Tokenized input file list was empty!" << endl; printUsage(cerr); return 1; } if(!lineRate_provided) { if(snp_fname == "" && ss_fname == "" && exon_fname == "") { lineRate = GFM<TIndexOffU>::default_lineRate_fm; } else { lineRate = GFM<TIndexOffU>::default_lineRate_gfm; } } // Optionally summarize if(verbose) { cerr << "Settings:" << endl << " Output files: \"" << outfile.c_str() << ".*." << gfm_ext << "\"" << endl << " Line rate: " << lineRate << " (line is " << (1<<lineRate) << " bytes)" << endl << " Lines per side: " << linesPerSide << " (side is " << ((1<<lineRate)*linesPerSide) << " bytes)" << endl << " Offset rate: " << offRate << " (one in " << (1<<offRate) << ")" << endl << " FTable chars: " << ftabChars << endl << " Strings: " << (packed? "packed" : "unpacked") << endl << " Local offset rate: " << localOffRate << " (one in " << (1<<localOffRate) << ")" << endl << " Local fTable chars: " << localFtabChars << endl << " Local sequence length: " << local_index_size << endl << " Local sequence overlap between two consecutive indexes: " << local_index_overlap << endl; #if 0 if(bmax == OFF_MASK) { cerr << " Max bucket size: default" << endl; } else { cerr << " Max bucket size: " << bmax << endl; } if(bmaxMultSqrt == OFF_MASK) { cerr << " Max bucket size, sqrt multiplier: default" << endl; } else { cerr << " Max bucket size, sqrt multiplier: " << bmaxMultSqrt << endl; } if(bmaxDivN == 0xffffffff) { cerr << " Max bucket size, len divisor: default" << endl; } else { cerr << " Max bucket size, len divisor: " << bmaxDivN << endl; } cerr << " Difference-cover sample period: " << dcv << endl; #endif cerr << " Endianness: " << (bigEndian? "big":"little") << endl << " Actual local endianness: " << (currentlyBigEndian()? "big":"little") << endl << " Sanity checking: " << (sanityCheck? "enabled":"disabled") << endl; #ifdef NDEBUG cerr << " Assertions: disabled" << endl; #else cerr << " Assertions: enabled" << endl; #endif cerr << " Random seed: " << seed << endl; cerr << " Sizeofs: void*:" << sizeof(void*) << ", int:" << sizeof(int) << ", long:" << sizeof(long) << ", size_t:" << sizeof(size_t) << endl; cerr << "Input files DNA, " << file_format_names[format].c_str() << ":" << endl; for(size_t i = 0; i < infiles.size(); i++) { cerr << " " << infiles[i].c_str() << endl; } } // Seed random number generator srand(seed); { Timer timer(cerr, "Total time for call to driver() for forward index: ", verbose); try { driver<SString<char> >(infile, infiles, snp_fname, ht_fname, ss_fname, exon_fname, sv_fname, outfile, false, REF_READ_FORWARD); } catch(bad_alloc& e) { if(autoMem) { cerr << "Switching to a packed string representation." << endl; packed = true; } else { throw e; } } } return 0; } catch(std::exception& e) { cerr << "Error: Encountered exception: '" << e.what() << "'" << endl; cerr << "Command: "; for(int i = 0; i < argc; i++) cerr << argv[i] << " "; cerr << endl; deleteIdxFiles(outfile, writeRef || justRef, justRef); return 1; } catch(int e) { if(e != 0) { cerr << "Error: Encountered internal HISAT2 exception (#" << e << ")" << endl; cerr << "Command: "; for(int i = 0; i < argc; i++) cerr << argv[i] << " "; cerr << endl; } deleteIdxFiles(outfile, writeRef || justRef, justRef); return e; } }
/** * main function. Parses command-line arguments. */ int bowtie_build(int argc, const char **argv) { try { // Reset all global state, including getopt state opterr = optind = 1; resetOptions(); string infile; vector<string> infiles; string outfile; parseOptions(argc, argv); argv0 = argv[0]; if(showVersion) { cout << argv0 << " version " << BOWTIE_VERSION << endl; if(sizeof(void*) == 4) { cout << "32-bit" << endl; } else if(sizeof(void*) == 8) { cout << "64-bit" << endl; } else { cout << "Neither 32- nor 64-bit: sizeof(void*) = " << sizeof(void*) << endl; } cout << "Built on " << BUILD_HOST << endl; cout << BUILD_TIME << endl; cout << "Compiler: " << COMPILER_VERSION << endl; cout << "Options: " << COMPILER_OPTIONS << endl; cout << "Sizeof {int, long, long long, void*, size_t, off_t}: {" << sizeof(int) << ", " << sizeof(long) << ", " << sizeof(long long) << ", " << sizeof(void *) << ", " << sizeof(size_t) << ", " << sizeof(off_t) << "}" << endl; return 0; } // Get input filename if(optind >= argc) { cerr << "No input sequence or sequence file specified!" << endl; printUsage(cerr); return 1; } infile = argv[optind++]; // Get output filename if(optind >= argc) { cerr << "No output file specified!" << endl; printUsage(cerr); return 1; } outfile = argv[optind++]; tokenize(infile, ",", infiles); if(infiles.size() < 1) { cerr << "Tokenized input file list was empty!" << endl; printUsage(cerr); return 1; } // Optionally summarize if(verbose) { cout << "Settings:" << endl << " Output files: \"" << outfile << ".*." + gEbwt_ext + "\"" << endl << " Line rate: " << lineRate << " (line is " << (1<<lineRate) << " bytes)" << endl << " Lines per side: " << linesPerSide << " (side is " << ((1<<lineRate)*linesPerSide) << " bytes)" << endl << " Offset rate: " << offRate << " (one in " << (1<<offRate) << ")" << endl << " FTable chars: " << ftabChars << endl << " Strings: " << (packed? "packed" : "unpacked") << endl ; if(bmax == OFF_MASK) { cout << " Max bucket size: default" << endl; } else { cout << " Max bucket size: " << bmax << endl; } if(bmaxMultSqrt == OFF_MASK) { cout << " Max bucket size, sqrt multiplier: default" << endl; } else { cout << " Max bucket size, sqrt multiplier: " << bmaxMultSqrt << endl; } if(bmaxDivN == 0xffffffff) { cout << " Max bucket size, len divisor: default" << endl; } else { cout << " Max bucket size, len divisor: " << bmaxDivN << endl; } cout << " Difference-cover sample period: " << dcv << endl; cout << " Endianness: " << (bigEndian? "big":"little") << endl << " Actual local endianness: " << (currentlyBigEndian()? "big":"little") << endl << " Sanity checking: " << (sanityCheck? "enabled":"disabled") << endl; #ifdef NDEBUG cout << " Assertions: disabled" << endl; #else cout << " Assertions: enabled" << endl; #endif cout << " Random seed: " << seed << endl; cout << " Sizeofs: void*:" << sizeof(void*) << ", int:" << sizeof(int) << ", long:" << sizeof(long) << ", size_t:" << sizeof(size_t) << endl; cout << "Input files DNA, " << file_format_names[format] << ":" << endl; for(size_t i = 0; i < infiles.size(); i++) { cout << " " << infiles[i] << endl; } } // Seed random number generator srand(seed); { Timer timer(cout, "Total time for call to driver() for forward index: ", verbose); if(!packed) { try { driver<String<Dna, Alloc<> > >(infile, infiles, outfile); } catch(bad_alloc& e) { if(autoMem) { cerr << "Switching to a packed string representation." << endl; packed = true; } else { throw e; } } } if(packed) { driver<String<Dna, Packed<Alloc<> > > >(infile, infiles, outfile); } } if(doubleEbwt) { srand(seed); Timer timer(cout, "Total time for backward call to driver() for mirror index: ", verbose); if(!packed) { try { driver<String<Dna, Alloc<> > >(infile, infiles, outfile + ".rev", true); } catch(bad_alloc& e) { if(autoMem) { cerr << "Switching to a packed string representation." << endl; packed = true; } else { throw e; } } } if(packed) { driver<String<Dna, Packed<Alloc<> > > >(infile, infiles, outfile + ".rev", true); } } return 0; } catch(std::exception& e) { cerr << "Command: "; for(int i = 0; i < argc; i++) cerr << argv[i] << " "; cerr << endl; return 1; } catch(int e) { if(e != 0) { cerr << "Command: "; for(int i = 0; i < argc; i++) cerr << argv[i] << " "; cerr << endl; } return e; } }