diff --git a/MANUAL.markdown b/MANUAL.markdown index 095eddf6..fa4e40dd 100644 --- a/MANUAL.markdown +++ b/MANUAL.markdown @@ -828,8 +828,8 @@ With this mode, you can provide a list of known splice sites, which HISAT2 makes You can create such a list using `python extract_splice_sites.py genes.gtf > splicesites.txt`, where `extract_splice_sites.py` is included in the HISAT2 package, `genes.gtf` is a gene annotation file, and `splicesites.txt` is a list of splice sites with which you provide HISAT2 in this mode. -Note that it is better to use indexes built using annotated transcripts (such as genome_tran or genome_snp_tran), which works better -than using this option. It has no effect to provide splice sites that are already included in indexes. +Note that it is better to use indexes built using annotated transcripts (such as genome_tran or genome_snp_tran), which works better +than using this option. It has no effect to provide splice sites that are already included in the indexes. diff --git a/aligner_swsse_ee_i16.cpp b/aligner_swsse_ee_i16.cpp index 15538382..aed02355 100644 --- a/aligner_swsse_ee_i16.cpp +++ b/aligner_swsse_ee_i16.cpp @@ -1364,7 +1364,7 @@ bool SwAligner::backtraceNucleotidesEnd2EndSseI16( int readq = (*qu_)[row]; assert_leq(col, origCol); // Get score in this cell - bool empty, reportedThru, canMoveThru, branch = false; + bool empty = false, reportedThru, canMoveThru, branch = false; int cur = SSEMatrix::H; if(!d.mat_.reset_[row]) { d.mat_.resetRow(row); diff --git a/aligner_swsse_ee_u8.cpp b/aligner_swsse_ee_u8.cpp index d65003fd..89100a4b 100644 --- a/aligner_swsse_ee_u8.cpp +++ b/aligner_swsse_ee_u8.cpp @@ -1349,7 +1349,7 @@ bool SwAligner::backtraceNucleotidesEnd2EndSseU8( int readq = (*qu_)[row]; assert_leq(col, origCol); // Get score in this cell - bool empty, reportedThru, canMoveThru, branch = false; + bool empty = false, reportedThru, canMoveThru, branch = false; int cur = SSEMatrix::H; if(!d.mat_.reset_[row]) { d.mat_.resetRow(row); diff --git a/aligner_swsse_loc_i16.cpp b/aligner_swsse_loc_i16.cpp index 1887bd55..8a43e778 100644 --- a/aligner_swsse_loc_i16.cpp +++ b/aligner_swsse_loc_i16.cpp @@ -1721,7 +1721,7 @@ bool SwAligner::backtraceNucleotidesLocalSseI16( int readq = (*qu_)[row]; assert_leq(col, origCol); // Get score in this cell - bool empty, reportedThru, canMoveThru, branch = false; + bool empty = false, reportedThru, canMoveThru, branch = false; int cur = SSEMatrix::H; if(!d.mat_.reset_[row]) { d.mat_.resetRow(row); diff --git a/aligner_swsse_loc_u8.cpp b/aligner_swsse_loc_u8.cpp index 7697d6af..4b2186e4 100644 --- a/aligner_swsse_loc_u8.cpp +++ b/aligner_swsse_loc_u8.cpp @@ -1719,7 +1719,7 @@ bool SwAligner::backtraceNucleotidesLocalSseU8( int readq = (*qu_)[row]; assert_leq(col, origCol); // Get score in this cell - bool empty, reportedThru, canMoveThru, branch = false; + bool empty = false, reportedThru, canMoveThru, branch = false; int cur = SSEMatrix::H; if(!d.mat_.reset_[row]) { d.mat_.resetRow(row); diff --git a/aln_sink.h b/aln_sink.h index 005aecb5..2b67712d 100644 --- a/aln_sink.h +++ b/aln_sink.h @@ -2402,8 +2402,8 @@ bool AlnSinkWrap::report( // Tally overall alignment score TAlScore score = rsa->score().score(); if(rsb != NULL) score += rsb->score().score(); - index_t num_spliced = rsa->num_spliced(); - if(rsb != NULL) num_spliced += rsb->num_spliced(); + index_t num_spliced = (index_t)rsa->num_spliced(); + if(rsb != NULL) num_spliced += (index_t)rsb->num_spliced(); // Update best score so far if(paired) { if(score > bestPair_) { diff --git a/blockwise_sa.h b/blockwise_sa.h index 6402160f..724fb488 100644 --- a/blockwise_sa.h +++ b/blockwise_sa.h @@ -35,6 +35,7 @@ #include "timer.h" #include "ds.h" #include "mem_ids.h" +#include "word_io.h" using namespace std; @@ -86,23 +87,7 @@ class BlockwiseSA { /** * Get the next suffix; compute the next bucket if necessary. */ - TIndexOffU nextSuffix() { - if(_itrPushedBackSuffix != OFF_MASK) { - TIndexOffU tmp = _itrPushedBackSuffix; - _itrPushedBackSuffix = OFF_MASK; - return tmp; - } - while(_itrBucketPos >= _itrBucket.size() || - _itrBucket.size() == 0) - { - if(!hasMoreBlocks()) { - throw out_of_range("No more suffixes"); - } - nextBlock(); - _itrBucketPos = 0; - } - return _itrBucket[_itrBucketPos++]; - } + virtual TIndexOffU nextSuffix() = 0; /** * Return true iff the next call to nextSuffix will succeed. @@ -158,7 +143,7 @@ class BlockwiseSA { * Grab the next block of sorted suffixes. The block is guaranteed * to have at most _bucketSz elements. */ - virtual void nextBlock() = 0; + virtual void nextBlock(int cur_block, int tid = 0) = 0; /// Return true iff more blocks are available virtual bool hasMoreBlocks() const = 0; /// Optionally output a verbose message @@ -208,17 +193,28 @@ class KarkkainenBlockwiseSA : public InorderBlockwiseSA { KarkkainenBlockwiseSA(const TStr& __text, TIndexOffU __bucketSz, + int __nthreads, uint32_t __dcV, uint32_t __seed = 0, bool __sanityCheck = false, bool __passMemExc = false, bool __verbose = false, + string base_fname = "", ostream& __logger = cout) : InorderBlockwiseSA(__text, __bucketSz, __sanityCheck, __passMemExc, __verbose, __logger), - _sampleSuffs(EBWTB_CAT), _cur(0), _dcV(__dcV), _dc(EBWTB_CAT), _built(false) + _sampleSuffs(EBWTB_CAT), _nthreads(__nthreads), _itrBucketIdx(0), _cur(0), _dcV(__dcV), _dc(EBWTB_CAT), _built(false), _base_fname(base_fname), _bigEndian(currentlyBigEndian()) { _randomSrc.init(__seed); reset(); } - ~KarkkainenBlockwiseSA() { } + ~KarkkainenBlockwiseSA() + { + if(_threads.size() > 0) { + for (size_t tid = 0; tid < _threads.size(); tid++) { + _threads[tid]->join(); + delete _threads[tid]; + } + } + } + /** * Allocate an amount of memory that simulates the peak memory @@ -234,16 +230,112 @@ class KarkkainenBlockwiseSA : public InorderBlockwiseSA { AutoArray tmp(bsz + sssz + (1024 * 1024 /*out of caution*/), EBWT_CAT); return bsz; } - - /// Defined in blockwise_sa.cpp - virtual void nextBlock(); + + static void nextBlock_Worker(void *vp) { + pair param = *(pair*)vp; + KarkkainenBlockwiseSA* sa = param.first; + int tid = param.second; + while(true) { + size_t cur = 0; + { + ThreadSafe ts(&sa->_mutex, sa->_nthreads > 1); + cur = sa->_cur; + if(cur > sa->_sampleSuffs.size()) break; + sa->_cur++; + } + sa->nextBlock((int)cur, tid); + // Write suffixes into a file + std::ostringstream number; number << cur; + const string fname = sa->_base_fname + "." + number.str() + ".sa"; + ofstream sa_file(fname.c_str(), ios::binary); + if(!sa_file.good()) { + cerr << "Could not open file for writing a reference graph: \"" << fname << "\"" << endl; + throw 1; + } + const EList& bucket = sa->_itrBuckets[tid]; + writeIndex(sa_file, (TIndexOffU)bucket.size(), sa->_bigEndian); + for(size_t i = 0; i < bucket.size(); i++) { + writeIndex(sa_file, bucket[i], sa->_bigEndian); + } + sa_file.close(); + sa->_itrBuckets[tid].clear(); + sa->_done[cur] = true; + } + } + + /** + * Get the next suffix; compute the next bucket if necessary. + */ + virtual TIndexOffU nextSuffix() { + // Launch threads if not + if(this->_nthreads > 1) { + if(_threads.size() == 0) { + _done.resize(_sampleSuffs.size() + 1); + _done.fill(false); + _itrBuckets.resize(this->_nthreads); + for(int tid = 0; tid < this->_nthreads; tid++) { + _tparams.expand(); + _tparams.back().first = this; + _tparams.back().second = tid; + _threads.push_back(new tthread::thread(nextBlock_Worker, (void*)&_tparams.back())); + } + assert_eq(_threads.size(), (size_t)this->_nthreads); + } + } + if(this->_itrPushedBackSuffix != OFF_MASK) { + TIndexOffU tmp = this->_itrPushedBackSuffix; + this->_itrPushedBackSuffix = OFF_MASK; + return tmp; + } + while(this->_itrBucketPos >= this->_itrBucket.size() || + this->_itrBucket.size() == 0) + { + if(!hasMoreBlocks()) { + throw out_of_range("No more suffixes"); + } + if(this->_nthreads == 1) { + nextBlock((int)_cur); + _cur++; + } else { + while(!_done[this->_itrBucketIdx]) { +#if defined(_TTHREAD_WIN32_) + Sleep(1); +#elif defined(_TTHREAD_POSIX_) + const static timespec ts = {0, 1000000}; // 1 millisecond + nanosleep(&ts, NULL); +#endif + } + // Read suffixes from a file + std::ostringstream number; number << this->_itrBucketIdx; + const string fname = _base_fname + "." + number.str() + ".sa"; + ifstream sa_file(fname.c_str(), ios::binary); + if(!sa_file.good()) { + cerr << "Could not open file for reading a reference graph: \"" << fname << "\"" << endl; + throw 1; + } + size_t numSAs = readIndex(sa_file, _bigEndian); + this->_itrBucket.resizeExact(numSAs); + for(size_t i = 0; i < numSAs; i++) { + this->_itrBucket[i] = readIndex(sa_file, _bigEndian); + } + sa_file.close(); + std::remove(fname.c_str()); + } + this->_itrBucketIdx++; + this->_itrBucketPos = 0; + } + return this->_itrBucket[this->_itrBucketPos++]; + } + + /// Defined in blockwise_sa.cpp + virtual void nextBlock(int cur_block, int tid = 0); /// Defined in blockwise_sa.cpp virtual void qsort(EList& bucket); /// Return true iff more blocks are available virtual bool hasMoreBlocks() const { - return _cur <= _sampleSuffs.size(); + return this->_itrBucketIdx <= _sampleSuffs.size(); } /// Return the difference-cover period @@ -280,7 +372,7 @@ class KarkkainenBlockwiseSA : public InorderBlockwiseSA { assert(_dc.get() == NULL); if(_dcV != 0) { _dc.init(new TDC(this->text(), _dcV, this->verbose(), this->sanityCheck())); - _dc.get()->build(); + _dc.get()->build(this->_nthreads); } // Calculate sample suffixes if(this->bucketSz() <= this->text().length()) { @@ -319,11 +411,21 @@ class KarkkainenBlockwiseSA : public InorderBlockwiseSA { void buildSamples(); EList _sampleSuffs; /// sample suffixes + int _nthreads; /// # of threads + TIndexOffU _itrBucketIdx; TIndexOffU _cur; /// offset to 1st elt of next block const uint32_t _dcV; /// difference-cover periodicity PtrWrap _dc; /// queryable difference-cover data bool _built; /// whether samples/DC have been built RandomSource _randomSrc; /// source of pseudo-randoms + + MUTEX_T _mutex; /// synchronization of output message + string _base_fname; /// base file name for storing SA blocks + bool _bigEndian; /// bigEndian? + EList _threads; /// thread list + EList > _tparams; + ELList _itrBuckets; /// buckets + EList _done; /// is a block processed? }; /** @@ -383,6 +485,47 @@ inline void KarkkainenBlockwiseSA::qsort( } } +template +struct BinarySortingParam { + const TStr* t; + const EList* sampleSuffs; + EList bucketSzs; + EList bucketReps; + size_t begin; + size_t end; +}; + +template +static void BinarySorting_worker(void *vp) +{ + BinarySortingParam* param = (BinarySortingParam*)vp; + const TStr& t = *(param->t); + size_t len = t.length(); + const EList& sampleSuffs = *(param->sampleSuffs); + EList& bucketSzs = param->bucketSzs; + EList& bucketReps = param->bucketReps; + ASSERT_ONLY(size_t numBuckets = bucketSzs.size()); + size_t begin = param->begin; + size_t end = param->end; + // Iterate through every suffix in the text, determine which + // bucket it falls into by doing a binary search across the + // sorted list of samples, and increment a counter associated + // with that bucket. Also, keep one representative for each + // bucket so that we can split it later. We loop in ten + // stretches so that we can print out a helpful progress + // message. (This step can take a long time.) + for(TIndexOffU i = (TIndexOffU)begin; i < end && i < len; i++) { + TIndexOffU r = binarySASearch(t, i, sampleSuffs); + if(r == std::numeric_limits::max()) continue; // r was one of the samples + assert_lt(r, numBuckets); + bucketSzs[r]++; + assert_lt(bucketSzs[r], len); + if(bucketReps[r] == OFF_MASK || (i & 100) == 0) { + bucketReps[r] = i; // clobbers previous one, but that's OK + } + } +} + /** * Select a set of bucket-delineating sample suffixes such that no * bucket is greater than the requested upper limit. Some care is @@ -391,186 +534,186 @@ inline void KarkkainenBlockwiseSA::qsort( */ template void KarkkainenBlockwiseSA::buildSamples() { - const TStr& t = this->text(); - TIndexOffU bsz = this->bucketSz()-1; // subtract 1 to leave room for sample - size_t len = this->text().length(); - // Prepare _sampleSuffs array - _sampleSuffs.clear(); - TIndexOffU numSamples = (TIndexOffU)((len/bsz)+1)<<1; // ~len/bsz x 2 - assert_gt(numSamples, 0); - VMSG_NL("Reserving space for " << numSamples << " sample suffixes"); - if(this->_passMemExc) { - _sampleSuffs.resizeExact(numSamples); - // Randomly generate samples. Allow duplicates for now. - VMSG_NL("Generating random suffixes"); - for(size_t i = 0; i < numSamples; i++) { -#ifdef BOWTIE_64BIT_INDEX - _sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU64() % len); + const TStr& t = this->text(); + TIndexOffU bsz = this->bucketSz()-1; // subtract 1 to leave room for sample + size_t len = this->text().length(); + // Prepare _sampleSuffs array + _sampleSuffs.clear(); + TIndexOffU numSamples = (TIndexOffU)((len/bsz)+1)<<1; // ~len/bsz x 2 + assert_gt(numSamples, 0); + VMSG_NL("Reserving space for " << numSamples << " sample suffixes"); + if(this->_passMemExc) { + _sampleSuffs.resizeExact(numSamples); + // Randomly generate samples. Allow duplicates for now. + VMSG_NL("Generating random suffixes"); + for(size_t i = 0; i < numSamples; i++) { +#ifdef BOWTIE_64BIT_INDEX + _sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU64() % len); #else - _sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU32() % len); + _sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU32() % len); #endif - } - } else { - try { - _sampleSuffs.resizeExact(numSamples); - // Randomly generate samples. Allow duplicates for now. - VMSG_NL("Generating random suffixes"); - for(size_t i = 0; i < numSamples; i++) { + } + } else { + try { + _sampleSuffs.resizeExact(numSamples); + // Randomly generate samples. Allow duplicates for now. + VMSG_NL("Generating random suffixes"); + for(size_t i = 0; i < numSamples; i++) { #ifdef BOWTIE_64BIT_INDEX - _sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU64() % len); + _sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU64() % len); #else - _sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU32() % len); -#endif - } - } catch(bad_alloc &e) { - if(this->_passMemExc) { - throw e; // rethrow immediately - } else { - cerr << "Could not allocate sample suffix container of " << (numSamples * OFF_SIZE) << " bytes." << endl - << "Please try using a smaller number of blocks by specifying a larger --bmax or" << endl - << "a smaller --bmaxdivn" << endl; - throw 1; - } - } - } - // Remove duplicates; very important to do this before the call to - // mkeyQSortSuf so that it doesn't try to calculate lexicographical - // relationships between very long, identical strings, which takes - // an extremely long time in general, and causes the stack to grow - // linearly with the size of the input - { - Timer timer(cout, "QSorting sample offsets, eliminating duplicates time: ", this->verbose()); - VMSG_NL("QSorting " << _sampleSuffs.size() << " sample offsets, eliminating duplicates"); - _sampleSuffs.sort(); - size_t sslen = _sampleSuffs.size(); - for(size_t i = 0; i < sslen-1; i++) { - if(_sampleSuffs[i] == _sampleSuffs[i+1]) { - _sampleSuffs.erase(i--); - sslen--; - } - } - } - // Multikey quicksort the samples - { - Timer timer(cout, " Multikey QSorting samples time: ", this->verbose()); - VMSG_NL("Multikey QSorting " << _sampleSuffs.size() << " samples"); - this->qsort(_sampleSuffs); - } - // Calculate bucket sizes - VMSG_NL("Calculating bucket sizes"); - int limit = 5; - // Iterate until all buckets are less than - while(--limit >= 0) { - // Calculate bucket sizes by doing a binary search for each - // suffix and noting where it lands - TIndexOffU numBuckets = (TIndexOffU)_sampleSuffs.size()+1; - EList bucketSzs(EBWTB_CAT); // holds computed bucket sizes - EList bucketReps(EBWTB_CAT); // holds 1 member of each bucket (for splitting) - try { - // Allocate and initialize containers for holding bucket - // sizes and representatives. - bucketSzs.resizeExact(numBuckets); - bucketReps.resizeExact(numBuckets); - bucketSzs.fillZero(); - bucketReps.fill(OFF_MASK); - } catch(bad_alloc &e) { - if(this->_passMemExc) { - throw e; // rethrow immediately - } else { - cerr << "Could not allocate sizes, representatives (" << ((numBuckets*8)>>10) << " KB) for blocks." << endl - << "Please try using a smaller number of blocks by specifying a larger --bmax or a" << endl - << "smaller --bmaxdivn." << endl; - throw 1; - } - } - // Iterate through every suffix in the text, determine which - // bucket it falls into by doing a binary search across the - // sorted list of samples, and increment a counter associated - // with that bucket. Also, keep one representative for each - // bucket so that we can split it later. We loop in ten - // stretches so that we can print out a helpful progress - // message. (This step can take a long time.) - { - VMSG_NL(" Binary sorting into buckets"); - Timer timer(cout, " Binary sorting into buckets time: ", this->verbose()); - TIndexOffU lenDiv10 = (TIndexOffU)((len + 9) / 10); - for(TIndexOffU iten = 0, ten = 0; iten < len; iten += lenDiv10, ten++) { - TIndexOffU itenNext = iten + lenDiv10; - if(ten > 0) VMSG_NL(" " << (ten * 10) << "%"); - for(TIndexOffU i = iten; i < itenNext && i < len; i++) { - TIndexOffU r = binarySASearch(t, i, _sampleSuffs); - if(r == std::numeric_limits::max()) continue; // r was one of the samples - assert_lt(r, numBuckets); - bucketSzs[r]++; - assert_lt(bucketSzs[r], len); - if(bucketReps[r] == OFF_MASK || - (_randomSrc.nextU32() & 100) == 0) - { - bucketReps[r] = i; // clobbers previous one, but that's OK - } - } - } - VMSG_NL(" 100%"); - } - // Check for large buckets and mergeable pairs of small buckets - // and split/merge as necessary - TIndexOff added = 0; - TIndexOff merged = 0; - assert_eq(bucketSzs.size(), numBuckets); - assert_eq(bucketReps.size(), numBuckets); - { - Timer timer(cout, " Splitting and merging time: ", this->verbose()); - VMSG_NL("Splitting and merging"); - for(TIndexOffU i = 0; i < numBuckets; i++) { - TIndexOffU mergedSz = bsz + 1; - assert(bucketSzs[(size_t)i] == 0 || bucketReps[(size_t)i] != OFF_MASK); - if(i < numBuckets-1) { - mergedSz = bucketSzs[(size_t)i] + bucketSzs[(size_t)i+1] + 1; - } - // Merge? - if(mergedSz <= bsz) { - bucketSzs[(size_t)i+1] += (bucketSzs[(size_t)i]+1); - // The following may look strange, but it's necessary - // to ensure that the merged bucket has a representative - bucketReps[(size_t)i+1] = _sampleSuffs[(size_t)i+added]; - _sampleSuffs.erase((size_t)i+added); - bucketSzs.erase((size_t)i); - bucketReps.erase((size_t)i); - i--; // might go to -1 but ++ will overflow back to 0 - numBuckets--; - merged++; - assert_eq(numBuckets, _sampleSuffs.size()+1-added); - assert_eq(numBuckets, bucketSzs.size()); - } - // Split? - else if(bucketSzs[(size_t)i] > bsz) { - // Add an additional sample from the bucketReps[] - // set accumulated in the binarySASearch loop; this - // effectively splits the bucket - _sampleSuffs.insert(bucketReps[(size_t)i], (TIndexOffU)(i + (added++))); - } - } - } - if(added == 0) { - //if(this->verbose()) { - // cout << "Final bucket sizes:" << endl; - // cout << " (begin): " << bucketSzs[0] << " (" << (int)(bsz - bucketSzs[0]) << ")" << endl; - // for(uint32_t i = 1; i < numBuckets; i++) { - // cout << " " << bucketSzs[i] << " (" << (int)(bsz - bucketSzs[i]) << ")" << endl; - // } - //} - break; - } - // Otherwise, continue until no more buckets need to be - // split - VMSG_NL("Split " << added << ", merged " << merged << "; iterating..."); - } - // Do *not* force a do-over -// if(limit == 0) { -// VMSG_NL("Iterated too many times; trying again..."); -// buildSamples(); -// } - VMSG_NL("Avg bucket size: " << ((double)(len-_sampleSuffs.size()) / (_sampleSuffs.size()+1)) << " (target: " << bsz << ")"); + _sampleSuffs[i] = (TIndexOffU)(_randomSrc.nextU32() % len); +#endif + } + } catch(bad_alloc &e) { + if(this->_passMemExc) { + throw e; // rethrow immediately + } else { + cerr << "Could not allocate sample suffix container of " << (numSamples * OFF_SIZE) << " bytes." << endl + << "Please try using a smaller number of blocks by specifying a larger --bmax or" << endl + << "a smaller --bmaxdivn" << endl; + throw 1; + } + } + } + // Remove duplicates; very important to do this before the call to + // mkeyQSortSuf so that it doesn't try to calculate lexicographical + // relationships between very long, identical strings, which takes + // an extremely long time in general, and causes the stack to grow + // linearly with the size of the input + { + Timer timer(cout, "QSorting sample offsets, eliminating duplicates time: ", this->verbose()); + VMSG_NL("QSorting " << _sampleSuffs.size() << " sample offsets, eliminating duplicates"); + _sampleSuffs.sort(); + size_t sslen = _sampleSuffs.size(); + for(size_t i = 0; i < sslen-1; i++) { + if(_sampleSuffs[i] == _sampleSuffs[i+1]) { + _sampleSuffs.erase(i--); + sslen--; + } + } + } + // Multikey quicksort the samples + { + Timer timer(cout, " Multikey QSorting samples time: ", this->verbose()); + VMSG_NL("Multikey QSorting " << _sampleSuffs.size() << " samples"); + this->qsort(_sampleSuffs); + } + // Calculate bucket sizes + VMSG_NL("Calculating bucket sizes"); + int limit = 5; + // Iterate until all buckets are less than + while(--limit >= 0) { + TIndexOffU numBuckets = (TIndexOffU)_sampleSuffs.size()+1; + AutoArray threads(this->_nthreads); + EList > tparams; + for(int tid = 0; tid < this->_nthreads; tid++) { + // Calculate bucket sizes by doing a binary search for each + // suffix and noting where it lands + tparams.expand(); + try { + // Allocate and initialize containers for holding bucket + // sizes and representatives. + tparams.back().bucketSzs.resizeExact(numBuckets); + tparams.back().bucketReps.resizeExact(numBuckets); + tparams.back().bucketSzs.fillZero(); + tparams.back().bucketReps.fill(OFF_MASK); + } catch(bad_alloc &e) { + if(this->_passMemExc) { + throw e; // rethrow immediately + } else { + cerr << "Could not allocate sizes, representatives (" << ((numBuckets*8)>>10) << " KB) for blocks." << endl + << "Please try using a smaller number of blocks by specifying a larger --bmax or a" << endl + << "smaller --bmaxdivn." << endl; + throw 1; + } + } + tparams.back().t = &t; + tparams.back().sampleSuffs = &_sampleSuffs; + tparams.back().begin = (tid == 0 ? 0 : len / this->_nthreads * tid); + tparams.back().end = (tid + 1 == this->_nthreads ? len : len / this->_nthreads * (tid + 1)); + if(this->_nthreads == 1) { + BinarySorting_worker((void*)&tparams.back()); + } else { + threads[tid] = new tthread::thread(BinarySorting_worker, (void*)&tparams.back()); + } + } + + if(this->_nthreads > 1) { + for (int tid = 0; tid < this->_nthreads; tid++) { + threads[tid]->join(); + } + } + + EList& bucketSzs = tparams[0].bucketSzs; + EList& bucketReps = tparams[0].bucketReps; + for(int tid = 1; tid < this->_nthreads; tid++) { + for(size_t j = 0; j < numBuckets; j++) { + bucketSzs[j] += tparams[tid].bucketSzs[j]; + if(bucketReps[j] == OFF_MASK) { + bucketReps[j] = tparams[tid].bucketReps[j]; + } + } + } + // Check for large buckets and mergeable pairs of small buckets + // and split/merge as necessary + TIndexOff added = 0; + TIndexOff merged = 0; + assert_eq(bucketSzs.size(), numBuckets); + assert_eq(bucketReps.size(), numBuckets); + { + Timer timer(cout, " Splitting and merging time: ", this->verbose()); + VMSG_NL("Splitting and merging"); + for(TIndexOffU i = 0; i < numBuckets; i++) { + TIndexOffU mergedSz = bsz + 1; + assert(bucketSzs[(size_t)i] == 0 || bucketReps[(size_t)i] != OFF_MASK); + if(i < numBuckets-1) { + mergedSz = bucketSzs[(size_t)i] + bucketSzs[(size_t)i+1] + 1; + } + // Merge? + if(mergedSz <= bsz) { + bucketSzs[(size_t)i+1] += (bucketSzs[(size_t)i]+1); + // The following may look strange, but it's necessary + // to ensure that the merged bucket has a representative + bucketReps[(size_t)i+1] = _sampleSuffs[(size_t)i+added]; + _sampleSuffs.erase((size_t)i+added); + bucketSzs.erase((size_t)i); + bucketReps.erase((size_t)i); + i--; // might go to -1 but ++ will overflow back to 0 + numBuckets--; + merged++; + assert_eq(numBuckets, _sampleSuffs.size()+1-added); + assert_eq(numBuckets, bucketSzs.size()); + } + // Split? + else if(bucketSzs[(size_t)i] > bsz) { + // Add an additional sample from the bucketReps[] + // set accumulated in the binarySASearch loop; this + // effectively splits the bucket + _sampleSuffs.insert(bucketReps[(size_t)i], (TIndexOffU)(i + (added++))); + } + } + } + if(added == 0) { + //if(this->verbose()) { + // cout << "Final bucket sizes:" << endl; + // cout << " (begin): " << bucketSzs[0] << " (" << (int)(bsz - bucketSzs[0]) << ")" << endl; + // for(uint32_t i = 1; i < numBuckets; i++) { + // cout << " " << bucketSzs[i] << " (" << (int)(bsz - bucketSzs[i]) << ")" << endl; + // } + //} + break; + } + // Otherwise, continue until no more buckets need to be + // split + VMSG_NL("Split " << added << ", merged " << merged << "; iterating..."); + } + // Do *not* force a do-over + // if(limit == 0) { + // VMSG_NL("Iterated too many times; trying again..."); + // buildSamples(); + // } + VMSG_NL("Avg bucket size: " << ((double)(len-_sampleSuffs.size()) / (_sampleSuffs.size()+1)) << " (target: " << bsz << ")"); } /** @@ -774,166 +917,197 @@ bool KarkkainenBlockwiseSA::suffixCmp( * of the blockwise suffix sorting process. */ template -void KarkkainenBlockwiseSA::nextBlock() { - EList& bucket = this->_itrBucket; - VMSG_NL("Getting block " << (_cur+1) << " of " << _sampleSuffs.size()+1); - assert(_built); - assert_gt(_dcV, 3); - assert_leq(_cur, _sampleSuffs.size()); - const TStr& t = this->text(); - TIndexOffU len = (TIndexOffU)t.length(); - // Set up the bucket - bucket.clear(); - TIndexOffU lo = OFF_MASK, hi = OFF_MASK; - if(_sampleSuffs.size() == 0) { - // Special case: if _sampleSuffs is 0, then multikey-quicksort - // everything - VMSG_NL(" No samples; assembling all-inclusive block"); - assert_eq(0, _cur); - try { - if(bucket.capacity() < this->bucketSz()) { - bucket.reserveExact(len+1); - } - bucket.resize(len); - for(TIndexOffU i = 0; i < len; i++) { - bucket[i] = i; - } - } catch(bad_alloc &e) { - if(this->_passMemExc) { - throw e; // rethrow immediately - } else { - cerr << "Could not allocate a master suffix-array block of " << ((len+1) * 4) << " bytes" << endl - << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl - << "a larger --bmaxdivn" << endl; - throw 1; - } - } - } else { - try { - VMSG_NL(" Reserving size (" << this->bucketSz() << ") for bucket"); - // BTL: Add a +100 fudge factor; there seem to be instances - // where a bucket ends up having one more elt than bucketSz() - if(bucket.size() < this->bucketSz()+100) { - bucket.reserveExact(this->bucketSz()+100); - } - } catch(bad_alloc &e) { - if(this->_passMemExc) { - throw e; // rethrow immediately - } else { - cerr << "Could not allocate a suffix-array block of " << ((this->bucketSz()+1) * 4) << " bytes" << endl; - cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl - << "a larger --bmaxdivn" << endl; - throw 1; - } - } - // Select upper and lower bounds from _sampleSuffs[] and - // calculate the Z array up to the difference-cover periodicity - // for both. Be careful about first/last buckets. - EList zLo(EBWTB_CAT), zHi(EBWTB_CAT); - assert_geq(_cur, 0); - assert_leq(_cur, _sampleSuffs.size()); - bool first = (_cur == 0); - bool last = (_cur == _sampleSuffs.size()); - try { - Timer timer(cout, " Calculating Z arrays time: ", this->verbose()); - VMSG_NL(" Calculating Z arrays"); - if(!last) { - // Not the last bucket - assert_lt(_cur, _sampleSuffs.size()); - hi = _sampleSuffs[_cur]; - zHi.resizeExact(_dcV); - zHi.fillZero(); - assert_eq(zHi[0], 0); - calcZ(t, hi, zHi, this->verbose(), this->sanityCheck()); - } - if(!first) { - // Not the first bucket - assert_gt(_cur, 0); - assert_leq(_cur, _sampleSuffs.size()); - lo = _sampleSuffs[_cur-1]; - zLo.resizeExact(_dcV); - zLo.fillZero(); - assert_gt(_dcV, 3); - assert_eq(zLo[0], 0); - calcZ(t, lo, zLo, this->verbose(), this->sanityCheck()); - } - } catch(bad_alloc &e) { - if(this->_passMemExc) { - throw e; // rethrow immediately - } else { - cerr << "Could not allocate a z-array of " << (_dcV * 4) << " bytes" << endl; - cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl - << "a larger --bmaxdivn" << endl; - throw 1; - } - } - - // This is the most critical loop in the algorithm; this is where - // we iterate over all suffixes in the text and pick out those that - // fall into the current bucket. - // - // This loop is based on the SMALLERSUFFIXES function outlined on - // p7 of the "Fast BWT" paper - // - int64_t kHi = -1, kLo = -1; - int64_t jHi = -1, jLo = -1; - bool kHiSoft = false, kLoSoft = false; - assert_eq(0, bucket.size()); - { - Timer timer(cout, " Block accumulator loop time: ", this->verbose()); - VMSG_NL(" Entering block accumulator loop:"); - TIndexOffU lenDiv10 = (len + 9) / 10; - for(TIndexOffU iten = 0, ten = 0; iten < len; iten += lenDiv10, ten++) { - TIndexOffU itenNext = iten + lenDiv10; - if(ten > 0) VMSG_NL(" " << (ten * 10) << "%"); - for(TIndexOffU i = iten; i < itenNext && i < len; i++) { - assert_lt(jLo, (TIndexOff)i); assert_lt(jHi, (TIndexOff)i); - // Advance the upper-bound comparison by one character - if(i == hi || i == lo) continue; // equal to one of the bookends - if(hi != OFF_MASK && !suffixCmp(hi, i, jHi, kHi, kHiSoft, zHi)) { - continue; // not in the bucket - } - if(lo != OFF_MASK && suffixCmp(lo, i, jLo, kLo, kLoSoft, zLo)) { - continue; // not in the bucket - } - // In the bucket! - add it - assert_lt(i, len); - try { - bucket.push_back(i); - } catch(bad_alloc &e) { - cerr << "Could not append element to block of " << ((bucket.size()) * OFF_SIZE) << " bytes" << endl; - if(this->_passMemExc) { - throw e; // rethrow immediately - } else { - cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl - << "a larger --bmaxdivn" << endl; - throw 1; - } - } - // Not necessarily true; we allow overflowing buckets - // since we can't guarantee that a good set of sample - // suffixes can be found in a reasonable amount of time - //assert_lt(bucket.size(), this->bucketSz()); - } - } // end loop over all suffixes of t - VMSG_NL(" 100%"); - } - } // end else clause of if(_sampleSuffs.size() == 0) - // Sort the bucket - if(bucket.size() > 0) { - Timer timer(cout, " Sorting block time: ", this->verbose()); - VMSG_NL(" Sorting block of length " << bucket.size()); - this->qsort(bucket); - } - if(hi != OFF_MASK) { - // Not the final bucket; throw in the sample on the RHS - bucket.push_back(hi); - } else { - // Final bucket; throw in $ suffix - bucket.push_back(len); - } - VMSG_NL("Returning block of " << bucket.size()); - _cur++; // advance to next bucket +void KarkkainenBlockwiseSA::nextBlock(int cur_block, int tid) { +#ifndef NDEBUG + if(this->_nthreads > 1) { + assert_lt(tid, this->_itrBuckets.size()); + } +#endif + EList& bucket = (this->_nthreads > 1 ? this->_itrBuckets[tid] : this->_itrBucket); + { + ThreadSafe ts(&_mutex, this->_nthreads > 1); + VMSG_NL("Getting block " << (cur_block+1) << " of " << _sampleSuffs.size()+1); + } + assert(_built); + assert_gt(_dcV, 3); + assert_leq(cur_block, _sampleSuffs.size()); + const TStr& t = this->text(); + TIndexOffU len = (TIndexOffU)t.length(); + // Set up the bucket + bucket.clear(); + TIndexOffU lo = OFF_MASK, hi = OFF_MASK; + if(_sampleSuffs.size() == 0) { + // Special case: if _sampleSuffs is 0, then multikey-quicksort + // everything + { + ThreadSafe ts(&_mutex, this->_nthreads > 1); + VMSG_NL(" No samples; assembling all-inclusive block"); + } + assert_eq(0, cur_block); + try { + if(bucket.capacity() < this->bucketSz()) { + bucket.reserveExact(len+1); + } + bucket.resize(len); + for(TIndexOffU i = 0; i < len; i++) { + bucket[i] = i; + } + } catch(bad_alloc &e) { + if(this->_passMemExc) { + throw e; // rethrow immediately + } else { + cerr << "Could not allocate a master suffix-array block of " << ((len+1) * 4) << " bytes" << endl + << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl + << "a larger --bmaxdivn" << endl; + throw 1; + } + } + } else { + try { + { + ThreadSafe ts(&_mutex, this->_nthreads > 1); + VMSG_NL(" Reserving size (" << this->bucketSz() << ") for bucket " << (cur_block+1)); + } + // BTL: Add a +100 fudge factor; there seem to be instances + // where a bucket ends up having one more elt than bucketSz() + if(bucket.size() < this->bucketSz()+100) { + bucket.reserveExact(this->bucketSz()+100); + } + } catch(bad_alloc &e) { + if(this->_passMemExc) { + throw e; // rethrow immediately + } else { + cerr << "Could not allocate a suffix-array block of " << ((this->bucketSz()+1) * 4) << " bytes" << endl; + cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl + << "a larger --bmaxdivn" << endl; + throw 1; + } + } + // Select upper and lower bounds from _sampleSuffs[] and + // calculate the Z array up to the difference-cover periodicity + // for both. Be careful about first/last buckets. + EList zLo(EBWTB_CAT), zHi(EBWTB_CAT); + assert_geq(cur_block, 0); + assert_leq((size_t)cur_block, _sampleSuffs.size()); + bool first = (cur_block == 0); + bool last = ((size_t)cur_block == _sampleSuffs.size()); + try { + // Timer timer(cout, " Calculating Z arrays time: ", this->verbose()); + { + ThreadSafe ts(&_mutex, this->_nthreads > 1); + VMSG_NL(" Calculating Z arrays for bucket " << (cur_block+1)); + } + if(!last) { + // Not the last bucket + assert_lt(cur_block, _sampleSuffs.size()); + hi = _sampleSuffs[cur_block]; + zHi.resizeExact(_dcV); + zHi.fillZero(); + assert_eq(zHi[0], 0); + calcZ(t, hi, zHi, this->verbose(), this->sanityCheck()); + } + if(!first) { + // Not the first bucket + assert_gt(cur_block, 0); + assert_leq(cur_block, _sampleSuffs.size()); + lo = _sampleSuffs[cur_block-1]; + zLo.resizeExact(_dcV); + zLo.fillZero(); + assert_gt(_dcV, 3); + assert_eq(zLo[0], 0); + calcZ(t, lo, zLo, this->verbose(), this->sanityCheck()); + } + } catch(bad_alloc &e) { + if(this->_passMemExc) { + throw e; // rethrow immediately + } else { + cerr << "Could not allocate a z-array of " << (_dcV * 4) << " bytes" << endl; + cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl + << "a larger --bmaxdivn" << endl; + throw 1; + } + } + + // This is the most critical loop in the algorithm; this is where + // we iterate over all suffixes in the text and pick out those that + // fall into the current bucket. + // + // This loop is based on the SMALLERSUFFIXES function outlined on + // p7 of the "Fast BWT" paper + // + int64_t kHi = -1, kLo = -1; + int64_t jHi = -1, jLo = -1; + bool kHiSoft = false, kLoSoft = false; + assert_eq(0, bucket.size()); + { + // Timer timer(cout, " Block accumulator loop time: ", this->verbose()); + { + ThreadSafe ts(&_mutex, this->_nthreads > 1); + VMSG_NL(" Entering block accumulator loop for bucket " << (cur_block+1) << ":"); + } + TIndexOffU lenDiv10 = (len + 9) / 10; + for(TIndexOffU iten = 0, ten = 0; iten < len; iten += lenDiv10, ten++) { + TIndexOffU itenNext = iten + lenDiv10; + { + ThreadSafe ts(&_mutex, this->_nthreads > 1); + if(ten > 0) VMSG_NL(" bucket " << (cur_block+1) << ": " << (ten * 10) << "%"); + } + for(TIndexOffU i = iten; i < itenNext && i < len; i++) { + assert_lt(jLo, (TIndexOff)i); assert_lt(jHi, (TIndexOff)i); + // Advance the upper-bound comparison by one character + if(i == hi || i == lo) continue; // equal to one of the bookends + if(hi != OFF_MASK && !suffixCmp(hi, i, jHi, kHi, kHiSoft, zHi)) { + continue; // not in the bucket + } + if(lo != OFF_MASK && suffixCmp(lo, i, jLo, kLo, kLoSoft, zLo)) { + continue; // not in the bucket + } + // In the bucket! - add it + assert_lt(i, len); + try { + bucket.push_back(i); + } catch(bad_alloc &e) { + cerr << "Could not append element to block of " << ((bucket.size()) * OFF_SIZE) << " bytes" << endl; + if(this->_passMemExc) { + throw e; // rethrow immediately + } else { + cerr << "Please try using a larger number of blocks by specifying a smaller --bmax or" << endl + << "a larger --bmaxdivn" << endl; + throw 1; + } + } + // Not necessarily true; we allow overflowing buckets + // since we can't guarantee that a good set of sample + // suffixes can be found in a reasonable amount of time + //assert_lt(bucket.size(), this->bucketSz()); + } + } // end loop over all suffixes of t + { + ThreadSafe ts(&_mutex, this->_nthreads > 1); + VMSG_NL(" bucket " << (cur_block+1) << ": 100%"); + } + } + } // end else clause of if(_sampleSuffs.size() == 0) + // Sort the bucket + if(bucket.size() > 0) { + Timer timer(cout, " Sorting block time: ", this->verbose()); + { + ThreadSafe ts(&_mutex, this->_nthreads > 1); + VMSG_NL(" Sorting block of length " << bucket.size() << " for bucket " << (cur_block+1)); + } + this->qsort(bucket); + } + if(hi != OFF_MASK) { + // Not the final bucket; throw in the sample on the RHS + bucket.push_back(hi); + } else { + // Final bucket; throw in $ suffix + bucket.push_back(len); + } + { + ThreadSafe ts(&_mutex, this->_nthreads > 1); + VMSG_NL("Returning block of " << bucket.size() << " for bucket " << (cur_block+1)); + } } #endif /*BLOCKWISE_SA_H_*/ diff --git a/diff_sample.h b/diff_sample.h index a0ebd31f..92e24b46 100644 --- a/diff_sample.h +++ b/diff_sample.h @@ -496,7 +496,7 @@ class DifferenceCoverSample { const EList& dmap() const { return _dmap; } ostream& log() const { return _logger; } - void build(); + void build(int nthreads); uint32_t tieBreakOff(TIndexOffU i, TIndexOffU j) const; int64_t breakTie(TIndexOffU i, TIndexOffU j) const; bool isCovered(TIndexOffU i) const; @@ -635,7 +635,7 @@ void DifferenceCoverSample::buildSPrime( TIndexOffU i = 0; for(uint64_t ti = 0; ti <= tlen; ti += v) { for(uint32_t di = 0; di < d; di++) { - TIndexOffU tti = ti + ds[di]; + TIndexOffU tti = (TIndexOffU)ti + (TIndexOffU)ds[di]; if(tti > tlen) break; TIndexOffU spi = _doffs[di] + i; assert_lt(spi, _doffs[di+1]); @@ -670,126 +670,219 @@ static inline bool suffixSameUpTo( return true; } +template +struct VSortingParam { + DifferenceCoverSample* dcs; + TIndexOffU* sPrimeArr; + size_t sPrimeSz; + TIndexOffU* sPrimeOrderArr; + size_t depth; + const EList* boundaries; + size_t* cur; + MUTEX_T* mutex; +}; + +template +static void VSorting_worker(void *vp) +{ + VSortingParam* param = (VSortingParam*)vp; + DifferenceCoverSample* dcs = param->dcs; + const TStr& host = dcs->text(); + const size_t hlen = host.length(); + uint32_t v = dcs->v(); + while(true) { + size_t cur = 0; + { + ThreadSafe ts(param->mutex, true); + cur = *(param->cur); + (*param->cur)++; + } + if(cur >= param->boundaries->size()) return; + size_t begin = (cur == 0 ? 0 : (*param->boundaries)[cur-1]); + size_t end = (*param->boundaries)[cur]; + assert_leq(begin, end); + if(end - begin <= 1) continue; + mkeyQSortSuf2( + host, + hlen, + param->sPrimeArr, + param->sPrimeSz, + param->sPrimeOrderArr, + 4, + begin, + end, + param->depth, + v); + } +} + /** * Calculates a ranking of all suffixes in the sample and stores them, * packed according to the mu mapping, in _isaPrime. */ template -void DifferenceCoverSample::build() { - // Local names for relevant types - VMSG_NL("Building DifferenceCoverSample"); - // Local names for relevant data - const TStr& t = this->text(); - uint32_t v = this->v(); - assert_gt(v, 2); - // Build s' - EList sPrime; - // Need to allocate 2 extra elements at the end of the sPrime and _isaPrime - // arrays. One element that's less than all others, and another that acts - // as needed padding for the Larsson-Sadakane sorting code. - size_t padding = 1; - VMSG_NL(" Building sPrime"); - buildSPrime(sPrime, padding); - size_t sPrimeSz = sPrime.size() - padding; - assert_gt(sPrime.size(), padding); - assert_leq(sPrime.size(), t.length() + padding + 1); - TIndexOffU nextRank = 0; - { - VMSG_NL(" Building sPrimeOrder"); - EList sPrimeOrder; - sPrimeOrder.resizeExact(sPrimeSz); - for(TIndexOffU i = 0; i < sPrimeSz; i++) { - sPrimeOrder[i] = i; - } - // sPrime now holds suffix-offsets for DC samples. - { - Timer timer(cout, " V-Sorting samples time: ", this->verbose()); - VMSG_NL(" V-Sorting samples"); - // Extract backing-store array from sPrime and sPrimeOrder; - // the mkeyQSortSuf2 routine works on the array for maximum - // efficiency - TIndexOffU *sPrimeArr = (TIndexOffU*)sPrime.ptr(); - assert_eq(sPrimeArr[0], sPrime[0]); - assert_eq(sPrimeArr[sPrimeSz-1], sPrime[sPrimeSz-1]); - TIndexOffU *sPrimeOrderArr = (TIndexOffU*)sPrimeOrder.ptr(); - assert_eq(sPrimeOrderArr[0], sPrimeOrder[0]); - assert_eq(sPrimeOrderArr[sPrimeSz-1], sPrimeOrder[sPrimeSz-1]); - // Sort sample suffixes up to the vth character using a - // multikey quicksort. Sort time is proportional to the - // number of samples times v. It isn't quadratic. - // sPrimeOrder is passed in as a swapping partner for - // sPrimeArr, i.e., every time the multikey qsort swaps - // elements in sPrime, it swaps the same elements in - // sPrimeOrder too. This allows us to easily reconstruct - // what the sort did. - mkeyQSortSuf2(t, sPrimeArr, sPrimeSz, sPrimeOrderArr, 4, - this->verbose(), this->sanityCheck(), v); - // Make sure sPrime and sPrimeOrder are consistent with - // their respective backing-store arrays - assert_eq(sPrimeArr[0], sPrime[0]); - assert_eq(sPrimeArr[sPrimeSz-1], sPrime[sPrimeSz-1]); - assert_eq(sPrimeOrderArr[0], sPrimeOrder[0]); - assert_eq(sPrimeOrderArr[sPrimeSz-1], sPrimeOrder[sPrimeSz-1]); - } - // Now assign the ranking implied by the sorted sPrime/sPrimeOrder - // arrays back into sPrime. - VMSG_NL(" Allocating rank array"); - _isaPrime.resizeExact(sPrime.size()); - ASSERT_ONLY(_isaPrime.fill(OFF_MASK)); - assert_gt(_isaPrime.size(), 0); - { - Timer timer(cout, " Ranking v-sort output time: ", this->verbose()); - VMSG_NL(" Ranking v-sort output"); - for(size_t i = 0; i < sPrimeSz-1; i++) { - // Place the appropriate ranking - _isaPrime[sPrimeOrder[i]] = nextRank; - // If sPrime[i] and sPrime[i+1] are identical up to v, then we - // should give the next suffix the same rank - if(!suffixSameUpTo(t, sPrime[i], sPrime[i+1], v)) nextRank++; - } - _isaPrime[sPrimeOrder[sPrimeSz-1]] = nextRank; // finish off +void DifferenceCoverSample::build(int nthreads) { + // Local names for relevant types + VMSG_NL("Building DifferenceCoverSample"); + // Local names for relevant data + const TStr& t = this->text(); + uint32_t v = this->v(); + assert_gt(v, 2); + // Build s' + EList sPrime; + // Need to allocate 2 extra elements at the end of the sPrime and _isaPrime + // arrays. One element that's less than all others, and another that acts + // as needed padding for the Larsson-Sadakane sorting code. + size_t padding = 1; + VMSG_NL(" Building sPrime"); + buildSPrime(sPrime, padding); + size_t sPrimeSz = sPrime.size() - padding; + assert_gt(sPrime.size(), padding); + assert_leq(sPrime.size(), t.length() + padding + 1); + TIndexOffU nextRank = 0; + { + VMSG_NL(" Building sPrimeOrder"); + EList sPrimeOrder; + sPrimeOrder.resizeExact(sPrimeSz); + for(TIndexOffU i = 0; i < sPrimeSz; i++) { + sPrimeOrder[i] = i; + } + // sPrime now holds suffix-offsets for DC samples. + { + Timer timer(cout, " V-Sorting samples time: ", this->verbose()); + VMSG_NL(" V-Sorting samples"); + // Extract backing-store array from sPrime and sPrimeOrder; + // the mkeyQSortSuf2 routine works on the array for maximum + // efficiency + TIndexOffU *sPrimeArr = (TIndexOffU*)sPrime.ptr(); + assert_eq(sPrimeArr[0], sPrime[0]); + assert_eq(sPrimeArr[sPrimeSz-1], sPrime[sPrimeSz-1]); + TIndexOffU *sPrimeOrderArr = (TIndexOffU*)sPrimeOrder.ptr(); + assert_eq(sPrimeOrderArr[0], sPrimeOrder[0]); + assert_eq(sPrimeOrderArr[sPrimeSz-1], sPrimeOrder[sPrimeSz-1]); + // Sort sample suffixes up to the vth character using a + // multikey quicksort. Sort time is proportional to the + // number of samples times v. It isn't quadratic. + // sPrimeOrder is passed in as a swapping partner for + // sPrimeArr, i.e., every time the multikey qsort swaps + // elements in sPrime, it swaps the same elements in + // sPrimeOrder too. This allows us to easily reconstruct + // what the sort did. + if(nthreads == 1) { + mkeyQSortSuf2(t, sPrimeArr, sPrimeSz, sPrimeOrderArr, 4, + this->verbose(), this->sanityCheck(), v); + } else { + int query_depth = 0; + int tmp_nthreads = nthreads; + while(tmp_nthreads > 0) { + query_depth++; + tmp_nthreads >>= 1; + } + EList boundaries; // bucket boundaries for parallelization + TIndexOffU *sOrig = NULL; + if(this->sanityCheck()) { + sOrig = new TIndexOffU[sPrimeSz]; + memcpy(sOrig, sPrimeArr, OFF_SIZE * sPrimeSz); + } + mkeyQSortSuf2(t, sPrimeArr, sPrimeSz, sPrimeOrderArr, 4, + this->verbose(), false, query_depth, &boundaries); + if(boundaries.size() > 0) { + AutoArray threads(nthreads); + EList > tparams; + size_t cur = 0; + MUTEX_T mutex; + for(int tid = 0; tid < nthreads; tid++) { + // Calculate bucket sizes by doing a binary search for each + // suffix and noting where it lands + tparams.expand(); + tparams.back().dcs = this; + tparams.back().sPrimeArr = sPrimeArr; + tparams.back().sPrimeSz = sPrimeSz; + tparams.back().sPrimeOrderArr = sPrimeOrderArr; + tparams.back().depth = query_depth; + tparams.back().boundaries = &boundaries; + tparams.back().cur = &cur; + tparams.back().mutex = &mutex; + threads[tid] = new tthread::thread(VSorting_worker, (void*)&tparams.back()); + } + for (int tid = 0; tid < nthreads; tid++) { + threads[tid]->join(); + } + } + if(this->sanityCheck()) { + sanityCheckOrderedSufs(t, t.length(), sPrimeArr, sPrimeSz, v); + for(size_t i = 0; i < sPrimeSz; i++) { + assert_eq(sPrimeArr[i], sOrig[sPrimeOrderArr[i]]); + } + delete[] sOrig; + } + } + // Make sure sPrime and sPrimeOrder are consistent with + // their respective backing-store arrays + assert_eq(sPrimeArr[0], sPrime[0]); + assert_eq(sPrimeArr[sPrimeSz-1], sPrime[sPrimeSz-1]); + assert_eq(sPrimeOrderArr[0], sPrimeOrder[0]); + assert_eq(sPrimeOrderArr[sPrimeSz-1], sPrimeOrder[sPrimeSz-1]); + } + // Now assign the ranking implied by the sorted sPrime/sPrimeOrder + // arrays back into sPrime. + VMSG_NL(" Allocating rank array"); + _isaPrime.resizeExact(sPrime.size()); + ASSERT_ONLY(_isaPrime.fill(OFF_MASK)); + assert_gt(_isaPrime.size(), 0); + { + Timer timer(cout, " Ranking v-sort output time: ", this->verbose()); + VMSG_NL(" Ranking v-sort output"); + for(size_t i = 0; i < sPrimeSz-1; i++) { + // Place the appropriate ranking + _isaPrime[sPrimeOrder[i]] = nextRank; + // If sPrime[i] and sPrime[i+1] are identical up to v, then we + // should give the next suffix the same rank + if(!suffixSameUpTo(t, sPrime[i], sPrime[i+1], v)) nextRank++; + } + _isaPrime[sPrimeOrder[sPrimeSz-1]] = nextRank; // finish off #ifndef NDEBUG - for(size_t i = 0; i < sPrimeSz; i++) { - assert_neq(OFF_MASK, _isaPrime[i]); - assert_lt(_isaPrime[i], sPrimeSz); - } + for(size_t i = 0; i < sPrimeSz; i++) { + assert_neq(OFF_MASK, _isaPrime[i]); + assert_lt(_isaPrime[i], sPrimeSz); + } #endif - } - // sPrimeOrder is destroyed - // All the information we need is now in _isaPrime - } - _isaPrime[_isaPrime.size()-1] = (TIndexOffU)sPrimeSz; - sPrime[sPrime.size()-1] = (TIndexOffU)sPrimeSz; - // _isaPrime[_isaPrime.size()-1] and sPrime[sPrime.size()-1] are just - // spacer for the Larsson-Sadakane routine to use - { - Timer timer(cout, " Invoking Larsson-Sadakane on ranks time: ", this->verbose()); - VMSG_NL(" Invoking Larsson-Sadakane on ranks"); - if(sPrime.size() >= LS_SIZE) { - cerr << "Error; sPrime array has so many elements that it can't be converted to a signed array without overflow." << endl; - throw 1; - } - LarssonSadakane ls; - ls.suffixsort( - (TIndexOff*)_isaPrime.ptr(), - (TIndexOff*)sPrime.ptr(), - (TIndexOff)sPrimeSz, - (TIndexOff)sPrime.size(), - 0); - } - // chop off final character of _isaPrime - _isaPrime.resizeExact(sPrimeSz); - for(size_t i = 0; i < _isaPrime.size(); i++) { - _isaPrime[i]--; - } + } + // sPrimeOrder is destroyed + // All the information we need is now in _isaPrime + } + _isaPrime[_isaPrime.size()-1] = (TIndexOffU)sPrimeSz; + sPrime[sPrime.size()-1] = (TIndexOffU)sPrimeSz; + // _isaPrime[_isaPrime.size()-1] and sPrime[sPrime.size()-1] are just + // spacer for the Larsson-Sadakane routine to use + { + Timer timer(cout, " Invoking Larsson-Sadakane on ranks time: ", this->verbose()); + VMSG_NL(" Invoking Larsson-Sadakane on ranks"); + if(sPrime.size() >= LS_SIZE) { + cerr << "Error; sPrime array has so many elements that it can't be converted to a signed array without overflow." << endl; + throw 1; + } + LarssonSadakane ls; + ls.suffixsort( + (TIndexOff*)_isaPrime.ptr(), + (TIndexOff*)sPrime.ptr(), + (TIndexOff)sPrimeSz, + (TIndexOff)sPrime.size(), + 0); + } + // chop off final character of _isaPrime + _isaPrime.resizeExact(sPrimeSz); + for(size_t i = 0; i < _isaPrime.size(); i++) { + _isaPrime[i]--; + } #ifndef NDEBUG - for(size_t i = 0; i < sPrimeSz-1; i++) { - assert_lt(_isaPrime[i], sPrimeSz); - assert(i == 0 || _isaPrime[i] != _isaPrime[i-1]); - } + for(size_t i = 0; i < sPrimeSz-1; i++) { + assert_lt(_isaPrime[i], sPrimeSz); + assert(i == 0 || _isaPrime[i] != _isaPrime[i-1]); + } #endif - VMSG_NL(" Sanity-checking and returning"); - if(this->sanityCheck()) doBuiltSanityCheck(); + VMSG_NL(" Sanity-checking and returning"); + if(this->sanityCheck()) doBuiltSanityCheck(); } /** diff --git a/doc/manual.inc.html b/doc/manual.inc.html index 9c66e63c..d309269f 100644 --- a/doc/manual.inc.html +++ b/doc/manual.inc.html @@ -438,7 +438,7 @@

Spliced alignment options

--known-splicesite-infile <path>
-

With this mode, you can provide a list of known splice sites, which HISAT2 makes use of to align reads with small anchors.
You can create such a list using python extract_splice_sites.py genes.gtf > splicesites.txt, where extract_splice_sites.py is included in the HISAT2 package, genes.gtf is a gene annotation file, and splicesites.txt is a list of splice sites with which you provide HISAT2 in this mode.

+

With this mode, you can provide a list of known splice sites, which HISAT2 makes use of to align reads with small anchors.
You can create such a list using python extract_splice_sites.py genes.gtf > splicesites.txt, where extract_splice_sites.py is included in the HISAT2 package, genes.gtf is a gene annotation file, and splicesites.txt is a list of splice sites with which you provide HISAT2 in this mode. Note that it is better to use indexes built using annotated transcripts (such as genome_tran or genome_snp_tran), which works better than using this option. It has no effect to provide splice sites that are already included in the indexes.

diff --git a/endian_swap.h b/endian_swap.h index 4bd4f1b3..ff86f1cf 100644 --- a/endian_swap.h +++ b/endian_swap.h @@ -75,7 +75,7 @@ static inline uint64_t endianSwapU64(uint64_t u) { template static inline index_t endianSwapIndex(index_t u) { if(sizeof(index_t) == 8) { - return endianSwapU64(u); + return (index_t)endianSwapU64(u); } else if(sizeof(index_t) == 4) { return endianSwapU32(u); } else { diff --git a/evaluation/build_indexes.py b/evaluation/build_indexes.py index 1f71c70e..ae3763cf 100755 --- a/evaluation/build_indexes.py +++ b/evaluation/build_indexes.py @@ -9,7 +9,7 @@ def build_indexes(): if not os.path.exists("indexes"): os.mkdir("indexes") os.chdir("indexes") - aligners = ["HISAT2", "HISAT", "Bowtie", "STAR", "GSNAP"] + aligners = ["HISAT2", "HISAT", "Bowtie", "STAR", "GSNAP", "BWA"] for genome in ["genome", "22", "22_20-21M"]: for aligner in aligners: if genome == "genome": @@ -35,6 +35,8 @@ def build_indexes(): cmd = cmd + "; mkdir gtf; ../../aligners/bin/STAR --runMode genomeGenerate --genomeDir gtf --genomeFastaFiles ../../data/%s.fa --sjdbGTFfile ../../data/%s.gtf --sjdbOverhang 99 --runThreadN 4" % (genome, genome) elif aligner == "GSNAP": cmd = "../../aligners/bin/gmap_build -B ../../aligners/bin -D . -d %s ../../data/%s.fa" % (genome, genome) + elif aligner == "BWA": + cmd = "../../aligners/bin/bwa -p %s.fa ../../data/%s.fa" % (genome, genome) else: assert False print >> sys.stderr, cmd diff --git a/evaluation/get_data.py b/evaluation/get_data.py index 33a9d5cd..3e49e953 100755 --- a/evaluation/get_data.py +++ b/evaluation/get_data.py @@ -74,7 +74,8 @@ def get_data(small = False): else: files = ["108M_RNA_wgEncodeCshlLongRnaSeq", "62M_RNA_SRR353653", - "80M_DNA_SRR345300"] + "80M_DNA_SRR345300", + "5M_DNA_NA12878D"] for file in files: if small and file.find("20M") != -1: continue diff --git a/evaluation/real/calculate_read_cost.py b/evaluation/real/calculate_read_cost.py index 7c012e72..888c2b85 100755 --- a/evaluation/real/calculate_read_cost.py +++ b/evaluation/real/calculate_read_cost.py @@ -7,6 +7,8 @@ import re from datetime import datetime, date, time +MAX_EDIT = 51 + """ """ def reverse_complement(seq): @@ -448,7 +450,7 @@ def extract_reads_and_pairs(chr_dic, sam_filename, read_filename, pair_filename, NM = XM + gap if hisat2: XM, NM = HISAT2_XM, HISAT2_NM - if NM < 10: + if NM < MAX_EDIT: print >> temp_read_file, "%s\t%d\t%s\t%s\t%s\tXM:i:%d\tNM:i:%d" % \ (read_id, flag, chr, pos, cigar_str, XM, NM) @@ -522,9 +524,9 @@ def remove_redundant_junctions(junctions): def read_stat(read_filename, gtf_junctions, chr_dic = None, debug = False): - read_stat = [[0, 0, 0] for i in range(10)] - temp_junctions = [set() for i in range(10)] - temp_gtf_junctions = [set() for i in range(10)] + read_stat = [[0, 0, 0] for i in range(MAX_EDIT)] + temp_junctions = [set() for i in range(MAX_EDIT)] + temp_gtf_junctions = [set() for i in range(MAX_EDIT)] alignment = [] prev_read_id = "" @@ -592,10 +594,10 @@ def read_stat(read_filename, gtf_junctions, chr_dic = None, debug = False): def pair_stat(pair_filename, gtf_junctions, chr_dic): - pair_stat = [[0, 0, 0] for i in range(10)] - dis_pair_stat = [0 for i in range(10)] - temp_junctions = [set() for i in range(10)] - temp_gtf_junctions = [set() for i in range(10)] + pair_stat = [[0, 0, 0] for i in range(MAX_EDIT)] + dis_pair_stat = [0 for i in range(MAX_EDIT)] + temp_junctions = [set() for i in range(MAX_EDIT)] + temp_gtf_junctions = [set() for i in range(MAX_EDIT)] alignment, dis_alignments = [], [] prev_read_id = "" @@ -745,7 +747,7 @@ def write_analysis_data(sql_db, database_name, paired): print >> database_file, "aligner\tuse_annotation\tend_type\tedit_distance\tmapped_reads\tjunction_reads\tgtf_junction_reads\tjunctions\tgtf_junctions\truntime" for aligner in aligners: - for edit_distance in range(10): + for edit_distance in range(MAX_EDIT): sql_row = "SELECT aligner, use_annotation, end_type, edit_distance, mapped_reads, junction_reads, gtf_junction_reads, junctions, gtf_junctions, runtime FROM Mappings" sql_row += " WHERE reads = '%s' and aligner = '%s' and edit_distance = %d and end_type = '%s' ORDER BY created DESC LIMIT 1" % (database_name, aligner, edit_distance, paired) output = sql_execute(sql_db, sql_row) @@ -786,7 +788,8 @@ def calculate_read_cost(): ["star", "x2", "", ""], ["gsnap", "", "", ""], ["bowtie", "", "", ""], - ["bowtie2", "", "", ""] + ["bowtie2", "", "", ""], + ["bwa", "", "", ""] ] is_large_file = False assert os.path.exists("1.fq") @@ -794,11 +797,13 @@ def calculate_read_cost(): is_large_file = True aligners = [ - ["hisat", "", "", ""], - ["hisat2", "", "", ""], + # ["hisat", "", "", ""], + # ["hisat2", "", "", ""], # ["hisat2", "", "snp", ""], # ["hisat2", "", "tran", ""], - ["hisat2", "x1", "snp_tran", ""], + ["hisat2", "x1", "snp", ""], + ["bwa", "mem", "", ""], + # ["bwa", "sw", "", ""], # ["hisat", "", "", ""], # ["star", "", "", ""], # ["star", "x2", "", ""], @@ -862,7 +867,12 @@ def get_aligner_version(aligner): cmd_process = subprocess.Popen(cmd, stderr=subprocess.PIPE) version = cmd_process.communicate()[1][:-1].split("\n")[0] version = version.split()[2] - + elif aligner == "bwa": + cmd = ["%s/bwa" % (aligner_bin_base)] + cmd_process = subprocess.Popen(cmd, stderr=subprocess.PIPE) + version = cmd_process.communicate()[1][:-1].split("\n")[2] + version = version.split()[1] + return version index_base = "../../../../indexes" @@ -878,6 +888,9 @@ def get_aligner_cmd(RNA, aligner, type, index_type, version, read1_fname, read2_ # cmd += ["-k", "5"] # cmd += ["--score-min", "C,-18"] + + # daehwan - for debugging purposes + # cmd += ["--score-min", "C,-50"] if version != "": version = int(version) @@ -1037,17 +1050,29 @@ def get_aligner_cmd(RNA, aligner, type, index_type, version, read1_fname, read2_ read1_fname] if paired: cmd += [read2_fname] + elif aligner == "bwa": + cmd = ["%s/bwa" % (aligner_bin_base)] + if type in ["mem", "aln"]: + cmd += [type] + elif type == "sw": + cmd += ["bwa" + type] + if num_threads > 1: + cmd += ["-t", str(num_threads)] + cmd += ["%s/BWA%s/%s.fa" % (index_base, index_add, genome)] + cmd += [read1_fname] + if paired: + cmd += [read2_fname] else: assert False return cmd - init_time = {"hisat2" : 0.0, "hisat" : 0.0, "bowtie" : 0.0, "bowtie2" : 0.0, "star" : 0.0, "olego" : 0.0, "gsnap" : 0.0, "tophat2" : 0.0} + init_time = {"hisat2" : 0.0, "hisat" : 0.0, "bowtie" : 0.0, "bowtie2" : 0.0, "star" : 0.0, "olego" : 0.0, "gsnap" : 0.0, "tophat2" : 0.0, "bwa" : 0.0} if not is_large_file: if desktop: - init_time = {"hisat2" : 3.0, "hisat" : 3.0, "bowtie" : 1.3, "bowtie2" : 1.9, "star" : 27.0, "gsnap" : 12} + init_time = {"hisat2" : 3.0, "hisat" : 3.0, "bowtie" : 1.3, "bowtie2" : 1.9, "star" : 27.0, "gsnap" : 1, "bwa" : 1.3} else: - init_time = {"hisat2" : 9.5, "hisat" : 9.5, "bowtie" : 3.3, "bowtie2" : 4.1, "star" : 1.7, "gsnap" : 0.1} + init_time = {"hisat2" : 9.5, "hisat" : 9.5, "bowtie" : 3.3, "bowtie2" : 4.1, "star" : 1.7, "gsnap" : 0.1, "bwa" : 3.3} init_time["tophat2"] = 0.0 for aligner, type, index_type, version in aligners: @@ -1077,7 +1102,7 @@ def get_aligner_cmd(RNA, aligner, type, index_type, version, read1_fname, read2_ start_time = datetime.now() if verbose: print >> sys.stderr, start_time, "\t", " ".join(dummy_cmd) - if aligner in ["hisat2", "hisat", "bowtie", "bowtie2", "gsnap"]: + if aligner in ["hisat2", "hisat", "bowtie", "bowtie2", "gsnap", "bwa"]: proc = subprocess.Popen(dummy_cmd, stdout=open("/dev/null", "w"), stderr=subprocess.PIPE) else: proc = subprocess.Popen(dummy_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) @@ -1105,7 +1130,7 @@ def get_aligner_cmd(RNA, aligner, type, index_type, version, read1_fname, read2_ start_time = datetime.now() if verbose: print >> sys.stderr, start_time, "\t", " ".join(aligner_cmd) - if aligner in ["hisat2", "hisat", "bowtie", "bowtie2", "gsnap"]: + if aligner in ["hisat2", "hisat", "bowtie", "bowtie2", "gsnap", "bwa"]: proc = subprocess.Popen(aligner_cmd, stdout=open(out_fname, "w"), stderr=subprocess.PIPE) else: proc = subprocess.Popen(aligner_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) diff --git a/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/project.pbxproj b/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/project.pbxproj new file mode 100644 index 00000000..1b3ebfb8 --- /dev/null +++ b/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/project.pbxproj @@ -0,0 +1,557 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + E82DA9AB1C24BAED00946517 /* alphabet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA94A1C24B97400946517 /* alphabet.cpp */; }; + E82DA9AC1C24BAED00946517 /* bowtie_build_main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA94C1C24B97400946517 /* bowtie_build_main.cpp */; }; + E82DA9AD1C24BAED00946517 /* bt2_build.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA94E1C24B97400946517 /* bt2_build.cpp */; }; + E82DA9AF1C24BAED00946517 /* bt2_idx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA9501C24B97400946517 /* bt2_idx.cpp */; }; + E82DA9B01C24BAED00946517 /* bt2_io.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA9521C24B97400946517 /* bt2_io.cpp */; }; + E82DA9B11C24BAED00946517 /* ccnt_lut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA9551C24B97400946517 /* ccnt_lut.cpp */; }; + E82DA9B21C24BAED00946517 /* edit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA9591C24B97400946517 /* edit.cpp */; }; + E82DA9B31C24BAED00946517 /* ref_read.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA9691C24B97400946517 /* ref_read.cpp */; }; + E82DA9B41C24BAED00946517 /* shmem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA96D1C24B97400946517 /* shmem.cpp */; }; + E82DA9B51C24BB0C00946517 /* ds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA9581C24B97400946517 /* ds.cpp */; }; + E82DA9B61C24BB0C00946517 /* limit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA95C1C24B97400946517 /* limit.cpp */; }; + E82DA9B71C24BB0C00946517 /* multikey_qsort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA95F1C24B97400946517 /* multikey_qsort.cpp */; }; + E82DA9B81C24BB0C00946517 /* random_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA9651C24B97400946517 /* random_source.cpp */; }; + E82DA9B91C24BB0C00946517 /* reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA96A1C24B97400946517 /* reference.cpp */; }; + E82DA9BA1C24BB4B00946517 /* diff_sample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA9561C24B97400946517 /* diff_sample.cpp */; }; + E82DA9BB1C24BB9700946517 /* bt2_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA9541C24B97400946517 /* bt2_util.cpp */; }; + E82DA9BC1C24C2F500946517 /* tinythread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82DA9711C24B97400946517 /* tinythread.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + E8E6B3F91C24B8F500C9D7F1 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + E82DA8F51C24B97400946517 /* aligner_bt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_bt.h; sourceTree = ""; }; + E82DA8F61C24B97400946517 /* aligner_cache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_cache.h; sourceTree = ""; }; + E82DA8F71C24B97400946517 /* aligner_driver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_driver.h; sourceTree = ""; }; + E82DA8F81C24B97400946517 /* aligner_metrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_metrics.h; sourceTree = ""; }; + E82DA8F91C24B97400946517 /* aligner_report.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_report.h; sourceTree = ""; }; + E82DA8FA1C24B97400946517 /* aligner_result.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_result.h; sourceTree = ""; }; + E82DA8FB1C24B97400946517 /* aligner_seed_policy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_seed_policy.h; sourceTree = ""; }; + E82DA8FC1C24B97400946517 /* aligner_seed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_seed.h; sourceTree = ""; }; + E82DA8FD1C24B97400946517 /* aligner_seed2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_seed2.h; sourceTree = ""; }; + E82DA8FE1C24B97400946517 /* aligner_sw_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw_common.h; sourceTree = ""; }; + E82DA8FF1C24B97400946517 /* aligner_sw_driver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw_driver.h; sourceTree = ""; }; + E82DA9001C24B97400946517 /* aligner_sw_nuc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw_nuc.h; sourceTree = ""; }; + E82DA9011C24B97400946517 /* aligner_sw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw.h; sourceTree = ""; }; + E82DA9021C24B97400946517 /* aligner_swsse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_swsse.h; sourceTree = ""; }; + E82DA9031C24B97400946517 /* aln_sink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aln_sink.h; sourceTree = ""; }; + E82DA9041C24B97400946517 /* alphabet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = alphabet.h; sourceTree = ""; }; + E82DA9051C24B97400946517 /* assert_helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assert_helpers.h; sourceTree = ""; }; + E82DA9061C24B97400946517 /* banded.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = banded.h; sourceTree = ""; }; + E82DA9071C24B97400946517 /* binary_sa_search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binary_sa_search.h; sourceTree = ""; }; + E82DA9081C24B97400946517 /* bitpack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitpack.h; sourceTree = ""; }; + E82DA9091C24B97400946517 /* blockwise_sa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blockwise_sa.h; sourceTree = ""; }; + E82DA90A1C24B97400946517 /* bt2_idx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bt2_idx.h; sourceTree = ""; }; + E82DA90B1C24B97400946517 /* bt2_search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bt2_search.h; sourceTree = ""; }; + E82DA90C1C24B97400946517 /* btypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = btypes.h; sourceTree = ""; }; + E82DA90D1C24B97400946517 /* diff_sample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diff_sample.h; sourceTree = ""; }; + E82DA90E1C24B97400946517 /* dp_framer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dp_framer.h; sourceTree = ""; }; + E82DA90F1C24B97400946517 /* ds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ds.h; sourceTree = ""; }; + E82DA9101C24B97400946517 /* edit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = edit.h; sourceTree = ""; }; + E82DA9111C24B97400946517 /* endian_swap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endian_swap.h; sourceTree = ""; }; + E82DA9121C24B97400946517 /* fast_mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fast_mutex.h; sourceTree = ""; }; + E82DA9131C24B97400946517 /* filebuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filebuf.h; sourceTree = ""; }; + E82DA9141C24B97400946517 /* formats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = formats.h; sourceTree = ""; }; + E82DA9151C24B97400946517 /* group_walk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = group_walk.h; sourceTree = ""; }; + E82DA9161C24B97400946517 /* ival_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ival_list.h; sourceTree = ""; }; + E82DA9171C24B97400946517 /* limit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = limit.h; sourceTree = ""; }; + E82DA9181C24B97400946517 /* ls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ls.h; sourceTree = ""; }; + E82DA9191C24B97400946517 /* mask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mask.h; sourceTree = ""; }; + E82DA91A1C24B97400946517 /* mem_ids.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem_ids.h; sourceTree = ""; }; + E82DA91B1C24B97400946517 /* mm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mm.h; sourceTree = ""; }; + E82DA91C1C24B97400946517 /* multikey_qsort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = multikey_qsort.h; sourceTree = ""; }; + E82DA91D1C24B97400946517 /* opts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opts.h; sourceTree = ""; }; + E82DA91E1C24B97400946517 /* outq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = outq.h; sourceTree = ""; }; + E82DA91F1C24B97400946517 /* pat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pat.h; sourceTree = ""; }; + E82DA9201C24B97400946517 /* pe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pe.h; sourceTree = ""; }; + E82DA9211C24B97400946517 /* presets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = presets.h; sourceTree = ""; }; + E82DA9221C24B97400946517 /* processor_support.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = processor_support.h; sourceTree = ""; }; + E82DA9231C24B97400946517 /* qual.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qual.h; sourceTree = ""; }; + E82DA9241C24B97400946517 /* random_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random_source.h; sourceTree = ""; }; + E82DA9251C24B97400946517 /* random_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random_util.h; sourceTree = ""; }; + E82DA9261C24B97400946517 /* read.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = read.h; sourceTree = ""; }; + E82DA9271C24B97400946517 /* ref_coord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ref_coord.h; sourceTree = ""; }; + E82DA9281C24B97400946517 /* ref_read.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ref_read.h; sourceTree = ""; }; + E82DA9291C24B97400946517 /* reference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reference.h; sourceTree = ""; }; + E82DA92A1C24B97400946517 /* sam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sam.h; sourceTree = ""; }; + E82DA92B1C24B97400946517 /* scoring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scoring.h; sourceTree = ""; }; + E82DA92C1C24B97400946517 /* search_globals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = search_globals.h; sourceTree = ""; }; + E82DA92D1C24B97400946517 /* sequence_io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sequence_io.h; sourceTree = ""; }; + E82DA92E1C24B97400946517 /* shmem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = shmem.h; sourceTree = ""; }; + E82DA92F1C24B97400946517 /* simple_func.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_func.h; sourceTree = ""; }; + E82DA9301C24B97400946517 /* sse_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sse_util.h; sourceTree = ""; }; + E82DA9311C24B97400946517 /* sstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sstring.h; sourceTree = ""; }; + E82DA9321C24B97400946517 /* str_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = str_util.h; sourceTree = ""; }; + E82DA9331C24B97400946517 /* threading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = threading.h; sourceTree = ""; }; + E82DA9341C24B97400946517 /* timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = ""; }; + E82DA9351C24B97400946517 /* tinythread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinythread.h; sourceTree = ""; }; + E82DA9361C24B97400946517 /* tokenize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tokenize.h; sourceTree = ""; }; + E82DA9371C24B97400946517 /* unique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unique.h; sourceTree = ""; }; + E82DA9381C24B97400946517 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; + E82DA9391C24B97400946517 /* word_io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = word_io.h; sourceTree = ""; }; + E82DA93A1C24B97400946517 /* zbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zbox.h; sourceTree = ""; }; + E82DA93B1C24B97400946517 /* aligner_bt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_bt.cpp; sourceTree = ""; }; + E82DA93C1C24B97400946517 /* aligner_cache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_cache.cpp; sourceTree = ""; }; + E82DA93D1C24B97400946517 /* aligner_driver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_driver.cpp; sourceTree = ""; }; + E82DA93E1C24B97400946517 /* aligner_result.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_result.cpp; sourceTree = ""; }; + E82DA93F1C24B97400946517 /* aligner_seed_policy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_seed_policy.cpp; sourceTree = ""; }; + E82DA9401C24B97400946517 /* aligner_seed.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_seed.cpp; sourceTree = ""; }; + E82DA9411C24B97400946517 /* aligner_seed2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_seed2.cpp; sourceTree = ""; }; + E82DA9421C24B97400946517 /* aligner_sw_driver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_sw_driver.cpp; sourceTree = ""; }; + E82DA9431C24B97400946517 /* aligner_sw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_sw.cpp; sourceTree = ""; }; + E82DA9441C24B97400946517 /* aligner_swsse_ee_i16.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_ee_i16.cpp; sourceTree = ""; }; + E82DA9451C24B97400946517 /* aligner_swsse_ee_u8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_ee_u8.cpp; sourceTree = ""; }; + E82DA9461C24B97400946517 /* aligner_swsse_loc_i16.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_loc_i16.cpp; sourceTree = ""; }; + E82DA9471C24B97400946517 /* aligner_swsse_loc_u8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_loc_u8.cpp; sourceTree = ""; }; + E82DA9481C24B97400946517 /* aligner_swsse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse.cpp; sourceTree = ""; }; + E82DA9491C24B97400946517 /* aln_sink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aln_sink.cpp; sourceTree = ""; }; + E82DA94A1C24B97400946517 /* alphabet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = alphabet.cpp; sourceTree = ""; }; + E82DA94B1C24B97400946517 /* banded.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = banded.cpp; sourceTree = ""; }; + E82DA94C1C24B97400946517 /* bowtie_build_main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bowtie_build_main.cpp; sourceTree = ""; }; + E82DA94D1C24B97400946517 /* bowtie_main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bowtie_main.cpp; sourceTree = ""; }; + E82DA94E1C24B97400946517 /* bt2_build.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bt2_build.cpp; sourceTree = ""; }; + E82DA94F1C24B97400946517 /* bt2_dp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bt2_dp.cpp; sourceTree = ""; }; + E82DA9501C24B97400946517 /* bt2_idx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bt2_idx.cpp; sourceTree = ""; }; + E82DA9511C24B97400946517 /* bt2_inspect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bt2_inspect.cpp; sourceTree = ""; }; + E82DA9521C24B97400946517 /* bt2_io.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bt2_io.cpp; sourceTree = ""; }; + E82DA9531C24B97400946517 /* bt2_search.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bt2_search.cpp; sourceTree = ""; }; + E82DA9541C24B97400946517 /* bt2_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bt2_util.cpp; sourceTree = ""; }; + E82DA9551C24B97400946517 /* ccnt_lut.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ccnt_lut.cpp; sourceTree = ""; }; + E82DA9561C24B97400946517 /* diff_sample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = diff_sample.cpp; sourceTree = ""; }; + E82DA9571C24B97400946517 /* dp_framer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dp_framer.cpp; sourceTree = ""; }; + E82DA9581C24B97400946517 /* ds.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ds.cpp; sourceTree = ""; }; + E82DA9591C24B97400946517 /* edit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = edit.cpp; sourceTree = ""; }; + E82DA95A1C24B97400946517 /* group_walk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = group_walk.cpp; sourceTree = ""; }; + E82DA95B1C24B97400946517 /* ival_list.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ival_list.cpp; sourceTree = ""; }; + E82DA95C1C24B97400946517 /* limit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = limit.cpp; sourceTree = ""; }; + E82DA95D1C24B97400946517 /* ls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ls.cpp; sourceTree = ""; }; + E82DA95E1C24B97400946517 /* mask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mask.cpp; sourceTree = ""; }; + E82DA95F1C24B97400946517 /* multikey_qsort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = multikey_qsort.cpp; sourceTree = ""; }; + E82DA9601C24B97400946517 /* outq.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = outq.cpp; sourceTree = ""; }; + E82DA9611C24B97400946517 /* pat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pat.cpp; sourceTree = ""; }; + E82DA9621C24B97400946517 /* pe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pe.cpp; sourceTree = ""; }; + E82DA9631C24B97400946517 /* presets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = presets.cpp; sourceTree = ""; }; + E82DA9641C24B97400946517 /* qual.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = qual.cpp; sourceTree = ""; }; + E82DA9651C24B97400946517 /* random_source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = random_source.cpp; sourceTree = ""; }; + E82DA9661C24B97400946517 /* random_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = random_util.cpp; sourceTree = ""; }; + E82DA9671C24B97400946517 /* read_qseq.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = read_qseq.cpp; sourceTree = ""; }; + E82DA9681C24B97400946517 /* ref_coord.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ref_coord.cpp; sourceTree = ""; }; + E82DA9691C24B97400946517 /* ref_read.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ref_read.cpp; sourceTree = ""; }; + E82DA96A1C24B97400946517 /* reference.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reference.cpp; sourceTree = ""; }; + E82DA96B1C24B97400946517 /* sam.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sam.cpp; sourceTree = ""; }; + E82DA96C1C24B97400946517 /* scoring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scoring.cpp; sourceTree = ""; }; + E82DA96D1C24B97400946517 /* shmem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shmem.cpp; sourceTree = ""; }; + E82DA96E1C24B97400946517 /* simple_func.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_func.cpp; sourceTree = ""; }; + E82DA96F1C24B97400946517 /* sse_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sse_util.cpp; sourceTree = ""; }; + E82DA9701C24B97400946517 /* sstring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sstring.cpp; sourceTree = ""; }; + E82DA9711C24B97400946517 /* tinythread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinythread.cpp; sourceTree = ""; }; + E82DA9721C24B97400946517 /* unique.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unique.cpp; sourceTree = ""; }; + E8E6B3FB1C24B8F500C9D7F1 /* bowtie2-buildlx */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "bowtie2-buildlx"; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E8E6B3F81C24B8F500C9D7F1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + E82DA8F31C24B94E00946517 /* Source */ = { + isa = PBXGroup; + children = ( + E82DA8F51C24B97400946517 /* aligner_bt.h */, + E82DA8F61C24B97400946517 /* aligner_cache.h */, + E82DA8F71C24B97400946517 /* aligner_driver.h */, + E82DA8F81C24B97400946517 /* aligner_metrics.h */, + E82DA8F91C24B97400946517 /* aligner_report.h */, + E82DA8FA1C24B97400946517 /* aligner_result.h */, + E82DA8FB1C24B97400946517 /* aligner_seed_policy.h */, + E82DA8FC1C24B97400946517 /* aligner_seed.h */, + E82DA8FD1C24B97400946517 /* aligner_seed2.h */, + E82DA8FE1C24B97400946517 /* aligner_sw_common.h */, + E82DA8FF1C24B97400946517 /* aligner_sw_driver.h */, + E82DA9001C24B97400946517 /* aligner_sw_nuc.h */, + E82DA9011C24B97400946517 /* aligner_sw.h */, + E82DA9021C24B97400946517 /* aligner_swsse.h */, + E82DA9031C24B97400946517 /* aln_sink.h */, + E82DA9041C24B97400946517 /* alphabet.h */, + E82DA9051C24B97400946517 /* assert_helpers.h */, + E82DA9061C24B97400946517 /* banded.h */, + E82DA9071C24B97400946517 /* binary_sa_search.h */, + E82DA9081C24B97400946517 /* bitpack.h */, + E82DA9091C24B97400946517 /* blockwise_sa.h */, + E82DA90A1C24B97400946517 /* bt2_idx.h */, + E82DA90B1C24B97400946517 /* bt2_search.h */, + E82DA90C1C24B97400946517 /* btypes.h */, + E82DA90D1C24B97400946517 /* diff_sample.h */, + E82DA90E1C24B97400946517 /* dp_framer.h */, + E82DA90F1C24B97400946517 /* ds.h */, + E82DA9101C24B97400946517 /* edit.h */, + E82DA9111C24B97400946517 /* endian_swap.h */, + E82DA9121C24B97400946517 /* fast_mutex.h */, + E82DA9131C24B97400946517 /* filebuf.h */, + E82DA9141C24B97400946517 /* formats.h */, + E82DA9151C24B97400946517 /* group_walk.h */, + E82DA9161C24B97400946517 /* ival_list.h */, + E82DA9171C24B97400946517 /* limit.h */, + E82DA9181C24B97400946517 /* ls.h */, + E82DA9191C24B97400946517 /* mask.h */, + E82DA91A1C24B97400946517 /* mem_ids.h */, + E82DA91B1C24B97400946517 /* mm.h */, + E82DA91C1C24B97400946517 /* multikey_qsort.h */, + E82DA91D1C24B97400946517 /* opts.h */, + E82DA91E1C24B97400946517 /* outq.h */, + E82DA91F1C24B97400946517 /* pat.h */, + E82DA9201C24B97400946517 /* pe.h */, + E82DA9211C24B97400946517 /* presets.h */, + E82DA9221C24B97400946517 /* processor_support.h */, + E82DA9231C24B97400946517 /* qual.h */, + E82DA9241C24B97400946517 /* random_source.h */, + E82DA9251C24B97400946517 /* random_util.h */, + E82DA9261C24B97400946517 /* read.h */, + E82DA9271C24B97400946517 /* ref_coord.h */, + E82DA9281C24B97400946517 /* ref_read.h */, + E82DA9291C24B97400946517 /* reference.h */, + E82DA92A1C24B97400946517 /* sam.h */, + E82DA92B1C24B97400946517 /* scoring.h */, + E82DA92C1C24B97400946517 /* search_globals.h */, + E82DA92D1C24B97400946517 /* sequence_io.h */, + E82DA92E1C24B97400946517 /* shmem.h */, + E82DA92F1C24B97400946517 /* simple_func.h */, + E82DA9301C24B97400946517 /* sse_util.h */, + E82DA9311C24B97400946517 /* sstring.h */, + E82DA9321C24B97400946517 /* str_util.h */, + E82DA9331C24B97400946517 /* threading.h */, + E82DA9341C24B97400946517 /* timer.h */, + E82DA9351C24B97400946517 /* tinythread.h */, + E82DA9361C24B97400946517 /* tokenize.h */, + E82DA9371C24B97400946517 /* unique.h */, + E82DA9381C24B97400946517 /* util.h */, + E82DA9391C24B97400946517 /* word_io.h */, + E82DA93A1C24B97400946517 /* zbox.h */, + E82DA93B1C24B97400946517 /* aligner_bt.cpp */, + E82DA93C1C24B97400946517 /* aligner_cache.cpp */, + E82DA93D1C24B97400946517 /* aligner_driver.cpp */, + E82DA93E1C24B97400946517 /* aligner_result.cpp */, + E82DA93F1C24B97400946517 /* aligner_seed_policy.cpp */, + E82DA9401C24B97400946517 /* aligner_seed.cpp */, + E82DA9411C24B97400946517 /* aligner_seed2.cpp */, + E82DA9421C24B97400946517 /* aligner_sw_driver.cpp */, + E82DA9431C24B97400946517 /* aligner_sw.cpp */, + E82DA9441C24B97400946517 /* aligner_swsse_ee_i16.cpp */, + E82DA9451C24B97400946517 /* aligner_swsse_ee_u8.cpp */, + E82DA9461C24B97400946517 /* aligner_swsse_loc_i16.cpp */, + E82DA9471C24B97400946517 /* aligner_swsse_loc_u8.cpp */, + E82DA9481C24B97400946517 /* aligner_swsse.cpp */, + E82DA9491C24B97400946517 /* aln_sink.cpp */, + E82DA94A1C24B97400946517 /* alphabet.cpp */, + E82DA94B1C24B97400946517 /* banded.cpp */, + E82DA94C1C24B97400946517 /* bowtie_build_main.cpp */, + E82DA94D1C24B97400946517 /* bowtie_main.cpp */, + E82DA94E1C24B97400946517 /* bt2_build.cpp */, + E82DA94F1C24B97400946517 /* bt2_dp.cpp */, + E82DA9501C24B97400946517 /* bt2_idx.cpp */, + E82DA9511C24B97400946517 /* bt2_inspect.cpp */, + E82DA9521C24B97400946517 /* bt2_io.cpp */, + E82DA9531C24B97400946517 /* bt2_search.cpp */, + E82DA9541C24B97400946517 /* bt2_util.cpp */, + E82DA9551C24B97400946517 /* ccnt_lut.cpp */, + E82DA9561C24B97400946517 /* diff_sample.cpp */, + E82DA9571C24B97400946517 /* dp_framer.cpp */, + E82DA9581C24B97400946517 /* ds.cpp */, + E82DA9591C24B97400946517 /* edit.cpp */, + E82DA95A1C24B97400946517 /* group_walk.cpp */, + E82DA95B1C24B97400946517 /* ival_list.cpp */, + E82DA95C1C24B97400946517 /* limit.cpp */, + E82DA95D1C24B97400946517 /* ls.cpp */, + E82DA95E1C24B97400946517 /* mask.cpp */, + E82DA95F1C24B97400946517 /* multikey_qsort.cpp */, + E82DA9601C24B97400946517 /* outq.cpp */, + E82DA9611C24B97400946517 /* pat.cpp */, + E82DA9621C24B97400946517 /* pe.cpp */, + E82DA9631C24B97400946517 /* presets.cpp */, + E82DA9641C24B97400946517 /* qual.cpp */, + E82DA9651C24B97400946517 /* random_source.cpp */, + E82DA9661C24B97400946517 /* random_util.cpp */, + E82DA9671C24B97400946517 /* read_qseq.cpp */, + E82DA9681C24B97400946517 /* ref_coord.cpp */, + E82DA9691C24B97400946517 /* ref_read.cpp */, + E82DA96A1C24B97400946517 /* reference.cpp */, + E82DA96B1C24B97400946517 /* sam.cpp */, + E82DA96C1C24B97400946517 /* scoring.cpp */, + E82DA96D1C24B97400946517 /* shmem.cpp */, + E82DA96E1C24B97400946517 /* simple_func.cpp */, + E82DA96F1C24B97400946517 /* sse_util.cpp */, + E82DA9701C24B97400946517 /* sstring.cpp */, + E82DA9711C24B97400946517 /* tinythread.cpp */, + E82DA9721C24B97400946517 /* unique.cpp */, + ); + name = Source; + sourceTree = ""; + }; + E82DA8F41C24B95300946517 /* Document */ = { + isa = PBXGroup; + children = ( + ); + name = Document; + sourceTree = ""; + }; + E8E6B3F21C24B8F500C9D7F1 = { + isa = PBXGroup; + children = ( + E82DA8F41C24B95300946517 /* Document */, + E82DA8F31C24B94E00946517 /* Source */, + E8E6B3FC1C24B8F500C9D7F1 /* Products */, + ); + sourceTree = ""; + }; + E8E6B3FC1C24B8F500C9D7F1 /* Products */ = { + isa = PBXGroup; + children = ( + E8E6B3FB1C24B8F500C9D7F1 /* bowtie2-buildlx */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E8E6B3FA1C24B8F500C9D7F1 /* bowtie2-buildlx */ = { + isa = PBXNativeTarget; + buildConfigurationList = E8E6B4021C24B8F500C9D7F1 /* Build configuration list for PBXNativeTarget "bowtie2-buildlx" */; + buildPhases = ( + E8E6B3F71C24B8F500C9D7F1 /* Sources */, + E8E6B3F81C24B8F500C9D7F1 /* Frameworks */, + E8E6B3F91C24B8F500C9D7F1 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "bowtie2-buildlx"; + productName = bowtie2; + productReference = E8E6B3FB1C24B8F500C9D7F1 /* bowtie2-buildlx */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E8E6B3F31C24B8F500C9D7F1 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0720; + ORGANIZATIONNAME = "Daehwan Kim"; + TargetAttributes = { + E8E6B3FA1C24B8F500C9D7F1 = { + CreatedOnToolsVersion = 7.2; + }; + }; + }; + buildConfigurationList = E8E6B3F61C24B8F500C9D7F1 /* Build configuration list for PBXProject "bowtie2" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = E8E6B3F21C24B8F500C9D7F1; + productRefGroup = E8E6B3FC1C24B8F500C9D7F1 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E8E6B3FA1C24B8F500C9D7F1 /* bowtie2-buildlx */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + E8E6B3F71C24B8F500C9D7F1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E82DA9BC1C24C2F500946517 /* tinythread.cpp in Sources */, + E82DA9BB1C24BB9700946517 /* bt2_util.cpp in Sources */, + E82DA9BA1C24BB4B00946517 /* diff_sample.cpp in Sources */, + E82DA9B51C24BB0C00946517 /* ds.cpp in Sources */, + E82DA9B61C24BB0C00946517 /* limit.cpp in Sources */, + E82DA9B71C24BB0C00946517 /* multikey_qsort.cpp in Sources */, + E82DA9B81C24BB0C00946517 /* random_source.cpp in Sources */, + E82DA9B91C24BB0C00946517 /* reference.cpp in Sources */, + E82DA9AB1C24BAED00946517 /* alphabet.cpp in Sources */, + E82DA9AC1C24BAED00946517 /* bowtie_build_main.cpp in Sources */, + E82DA9AD1C24BAED00946517 /* bt2_build.cpp in Sources */, + E82DA9AF1C24BAED00946517 /* bt2_idx.cpp in Sources */, + E82DA9B01C24BAED00946517 /* bt2_io.cpp in Sources */, + E82DA9B11C24BAED00946517 /* ccnt_lut.cpp in Sources */, + E82DA9B21C24BAED00946517 /* edit.cpp in Sources */, + E82DA9B31C24BAED00946517 /* ref_read.cpp in Sources */, + E82DA9B41C24BAED00946517 /* shmem.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + E8E6B4001C24B8F500C9D7F1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + BOWTIE_MM, + "MACOS=1", + POPCNT_CAPABILITY, + BOWTIE2, + "BOWTIE2_VERSION=\"\\\"`cat VERSION`\\\"\"", + "BUILD_HOST=\"\\\"`hostname`\\\"\"", + "BUILD_TIME=\"\\\"`date`\\\"\"", + "COMPILER_VERSION=\"\\\"`$(CXX) -v 2>&1 | tail -1`\\\"\"", + "COMPILER_OPTIONS=\"\\\"test\\\"\"", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + E8E6B4011C24B8F500C9D7F1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=0", + BOWTIE_MM, + "MACOS=1", + POPCNT_CAPABILITY, + BOWTIE2, + "BOWTIE2_VERSION=\"\\\"`cat VERSION`\\\"\"", + "BUILD_HOST=\"\\\"`hostname`\\\"\"", + "BUILD_TIME=\"\\\"`date`\\\"\"", + "COMPILER_VERSION=\"\\\"`$(CXX) -v 2>&1 | tail -1`\\\"\"", + "COMPILER_OPTIONS=\"\\\"test\\\"\"", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + E8E6B4031C24B8F500C9D7F1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + E8E6B4041C24B8F500C9D7F1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E8E6B3F61C24B8F500C9D7F1 /* Build configuration list for PBXProject "bowtie2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E8E6B4001C24B8F500C9D7F1 /* Debug */, + E8E6B4011C24B8F500C9D7F1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E8E6B4021C24B8F500C9D7F1 /* Build configuration list for PBXNativeTarget "bowtie2-buildlx" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E8E6B4031C24B8F500C9D7F1 /* Debug */, + E8E6B4041C24B8F500C9D7F1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E8E6B3F31C24B8F500C9D7F1 /* Project object */; +} diff --git a/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..2a2a8ccc --- /dev/null +++ b/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/project.xcworkspace/xcuserdata/infphilo.xcuserdatad/UserInterfaceState.xcuserstate b/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/project.xcworkspace/xcuserdata/infphilo.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 00000000..239218c6 Binary files /dev/null and b/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/project.xcworkspace/xcuserdata/infphilo.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/xcuserdata/infphilo.xcuserdatad/xcschemes/xcschememanagement.plist b/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/xcuserdata/infphilo.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 00000000..957bfbda --- /dev/null +++ b/evaluation/tests/parallel/bowtie2/bowtie2.xcodeproj/xcuserdata/infphilo.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + bowtie2-buildlx.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + E8E6B3FA1C24B8F500C9D7F1 + + primary + + + + + diff --git a/gbwt_graph.h b/gbwt_graph.h index cc708702..3d8623a8 100644 --- a/gbwt_graph.h +++ b/gbwt_graph.h @@ -134,11 +134,11 @@ class RefGraph { cerr << "Could not open file for writing a reference graph: \"" << fname << "\"" << endl; throw 1; } - writeIndex(rg_file, nodes.size(), bigEndian); + writeIndex(rg_file, (index_t)nodes.size(), bigEndian); for(index_t i = 0; i < nodes.size(); i++) { nodes[i].write(rg_file, bigEndian); } - writeIndex(rg_file, edges.size(), bigEndian); + writeIndex(rg_file, (index_t)edges.size(), bigEndian); for(index_t i = 0; i < edges.size(); i++) { edges[i].write(rg_file, bigEndian); } @@ -260,7 +260,7 @@ class RefGraph { index_t size() const { if(id == (index_t)INDEX_MAX) return 0; - return add_ids.size() + 1; + return (index_t)add_ids.size() + 1; } index_t getID(index_t i) const { if(i == 0) return id; @@ -354,7 +354,7 @@ RefGraph::RefGraph(const SString& s, assert_gt(nthreads, 0); assert_gt(szs.size(), 0); - index_t jlen = s.length(); + index_t jlen = (index_t)s.length(); #ifndef NDEBUG debug = (jlen <= 20); @@ -461,8 +461,8 @@ RefGraph::RefGraph(const SString& s, #endif } - if((size_t)nthreads > tmp_szs.size()) { - nthreads = tmp_szs.size(); + if(nthreads > (int)tmp_szs.size()) { + nthreads = (int)tmp_szs.size(); } assert_gt(nthreads, 0); AutoArray threads(nthreads); @@ -515,8 +515,8 @@ RefGraph::RefGraph(const SString& s, cerr << "Could not open file for reading a reference graph: \"" << rg_fname << "\"" << endl; throw 1; } - index_t curr_num_nodes = nodes.size(); - ASSERT_ONLY(index_t curr_num_edges = edges.size()); + index_t curr_num_nodes = (index_t)nodes.size(); + ASSERT_ONLY(index_t curr_num_edges = (index_t)edges.size()); ASSERT_ONLY(index_t num_spanning_edges = 0); // Read nodes to be connected to last nodes in a previous thread if(i > 0) { @@ -590,22 +590,22 @@ RefGraph::RefGraph(const SString& s, for(size_t i = 0; i < s.length(); i++) { nodes.expand(); nodes.back().label = "ACGT"[(int)s[i]]; - nodes.back().value = i; + nodes.back().value = (index_t)i; assert_geq(nodes.size(), 2); edges.expand(); - edges.back().from = nodes.size() - 2; - edges.back().to = nodes.size() - 1; + edges.back().from = (index_t)nodes.size() - 2; + edges.back().to = (index_t)nodes.size() - 1; } // Create tail node nodes.expand(); nodes.back().label = 'Z'; - nodes.back().value = s.length(); - lastNode = nodes.size() - 1; + nodes.back().value = (index_t)s.length(); + lastNode = (index_t)nodes.size() - 1; edges.expand(); - edges.back().from = nodes.size() - 2; - edges.back().to = nodes.size() - 1; + edges.back().from = (index_t)nodes.size() - 2; + edges.back().to = (index_t)nodes.size() - 1; // Create nodes and edges for SNPs for(size_t i = 0; i < alts.size(); i++) { @@ -620,9 +620,9 @@ RefGraph::RefGraph(const SString& s, nodes.back().value = alt.pos; edges.expand(); edges.back().from = alt.pos; - edges.back().to = nodes.size() - 1; + edges.back().to = (index_t)nodes.size() - 1; edges.expand(); - edges.back().from = nodes.size() - 1; + edges.back().from = (index_t)nodes.size() - 1; edges.back().to = alt.pos + 2; } else if(alt.type == ALT_SNP_DEL) { @@ -641,11 +641,11 @@ RefGraph::RefGraph(const SString& s, nodes.back().label = ch; nodes.back().value = (index_t)INDEX_MAX; edges.expand(); - edges.back().from = (j == 0 ? alt.pos : nodes.size() - 2); - edges.back().to = nodes.size() - 1; + edges.back().from = (j == 0 ? alt.pos : (index_t)nodes.size() - 2); + edges.back().to = (index_t)nodes.size() - 1; } edges.expand(); - edges.back().from = nodes.size() - 1; + edges.back().from = (index_t)nodes.size() - 1; edges.back().to = alt.pos + 1; } else if(alt.type == ALT_SPLICESITE) { if(alt.excluded) continue; @@ -689,7 +689,7 @@ pair RefGraph::findEdges(const EList& edges, in assert_gt(edges.size(), 0); // Find lower bound - index_t low = 0, high = edges.size() - 1; + index_t low = 0, high = (index_t)edges.size() - 1; index_t temp; while(low < high) { index_t mid = low + (high - low) / 2; @@ -714,7 +714,7 @@ pair RefGraph::findEdges(const EList& edges, in } // Find upper bound - high = edges.size() - 1; + high = (index_t)edges.size() - 1; while(low < high) { index_t mid = low + (high - low + 1) / 2; @@ -740,7 +740,7 @@ void RefGraph::buildGraph_worker(void* vp) { RefGraph& refGraph = *(threadParam->refGraph); const SString& s = *(threadParam->s); - index_t jlen = s.length(); + index_t jlen = (index_t)s.length(); const EList >& alts = *(threadParam->alts); @@ -763,12 +763,12 @@ void RefGraph::buildGraph_worker(void* vp) { index_t& num_nodes = threadParam->num_nodes; index_t& num_edges = threadParam->num_edges; - index_t szs_idx = 0, szs_idx_end = tmp_szs.size(); + index_t szs_idx = 0, szs_idx_end = (index_t)tmp_szs.size(); if(threadParam->thread_id != 0) { - szs_idx = (tmp_szs.size() / nthreads) * thread_id; + szs_idx = (index_t)((tmp_szs.size() / nthreads) * thread_id); } if(thread_id + 1 < nthreads) { - szs_idx_end = (tmp_szs.size() / nthreads) * (thread_id + 1); + szs_idx_end = (index_t)((tmp_szs.size() / nthreads) * (thread_id + 1)); } index_t curr_pos = 0; @@ -794,22 +794,22 @@ void RefGraph::buildGraph_worker(void* vp) { for(size_t i = curr_pos; i < curr_pos + curr_len; i++) { nodes.expand(); nodes.back().label = "ACGT"[(int)s[i]]; - nodes.back().value = i; + nodes.back().value = (index_t)i; assert_geq(nodes.size(), 2); edges.expand(); - edges.back().from = nodes.size() - 2; - edges.back().to = nodes.size() - 1; + edges.back().from = (index_t)nodes.size() - 2; + edges.back().to = (index_t)nodes.size() - 1; } // Create tail node nodes.expand(); nodes.back().label = 'Z'; - nodes.back().value = s.length(); - lastNode = nodes.size() - 1; + nodes.back().value = (index_t)s.length(); + lastNode = (index_t)nodes.size() - 1; edges.expand(); - edges.back().from = nodes.size() - 2; - edges.back().to = nodes.size() - 1; - ASSERT_ONLY(index_t backbone_nodes = nodes.size()); + edges.back().from = (index_t)nodes.size() - 2; + edges.back().to = (index_t)nodes.size() - 1; + ASSERT_ONLY(index_t backbone_nodes = (index_t)nodes.size()); // Create nodes and edges for SNPs for(; alt_idx < alts.size(); alt_idx++) { const ALT& alt = alts[alt_idx]; @@ -825,10 +825,10 @@ void RefGraph::buildGraph_worker(void* vp) { nodes.back().value = alt.pos; edges.expand(); edges.back().from = alt.pos - curr_pos; - edges.back().to = nodes.size() - 1; + edges.back().to = (index_t)nodes.size() - 1; assert_lt(edges.back().from, backbone_nodes); edges.expand(); - edges.back().from = nodes.size() - 1; + edges.back().from = (index_t)nodes.size() - 1; edges.back().to = alt.pos - curr_pos + 2; assert_lt(edges.back().to, backbone_nodes); } else if(alt.type == ALT_SNP_DEL) { @@ -848,11 +848,11 @@ void RefGraph::buildGraph_worker(void* vp) { nodes.back().label = ch; nodes.back().value = (index_t)INDEX_MAX; edges.expand(); - edges.back().from = (j == 0 ? alt.pos - curr_pos : nodes.size() - 2); - edges.back().to = nodes.size() - 1; + edges.back().from = (j == 0 ? alt.pos - curr_pos : (index_t)nodes.size() - 2); + edges.back().to = (index_t)nodes.size() - 1; } edges.expand(); - edges.back().from = nodes.size() - 1; + edges.back().from = (index_t)nodes.size() - 1; edges.back().to = alt.pos - curr_pos + 1; } else if(alt.type == ALT_SPLICESITE) { if(alt.excluded) continue; @@ -891,7 +891,7 @@ void RefGraph::buildGraph_worker(void* vp) { } // Identify head - index_t head_node = nodes.size(); + index_t head_node = (index_t)nodes.size(); for(index_t i = 0; i < nodes.size(); i++) { if(nodes[i].label == 'Y') { head_node = i; @@ -934,7 +934,7 @@ void RefGraph::buildGraph_worker(void* vp) { // Connect head nodes with tail nodes in the previous automaton index_t num_head_nodes = 0; - index_t tmp_num_edges = edges.size(); + index_t tmp_num_edges = (index_t)edges.size(); if(head_off) { EList nodes_to_head; for(index_t i = 0; i < tmp_num_edges; i++) { @@ -956,7 +956,7 @@ void RefGraph::buildGraph_worker(void* vp) { if(nodes_to_head.size() > 0) { assert_gt(thread_id, 0); assert_eq(prev_tail_nodes.size(), 0); - writeIndex(rg_out_file, nodes_to_head.size(), bigEndian); + writeIndex(rg_out_file, (index_t)nodes_to_head.size(), bigEndian); for(index_t i = 0; i < nodes_to_head.size(); i++) { writeIndex(rg_out_file, nodes_to_head[i], bigEndian); } @@ -979,7 +979,7 @@ void RefGraph::buildGraph_worker(void* vp) { } // Write nodes and edges - index_t tmp_num_nodes = nodes.size(); + index_t tmp_num_nodes = (index_t)nodes.size(); assert_gt(tmp_num_nodes, 2); if(head_off) tmp_num_nodes--; if(tail_off) tmp_num_nodes--; @@ -992,7 +992,7 @@ void RefGraph::buildGraph_worker(void* vp) { ASSERT_ONLY(num_nodes_written++); } assert_eq(tmp_num_nodes, num_nodes_written); - tmp_num_edges = edges.size(); + tmp_num_edges = (index_t)edges.size(); assert_gt(tmp_num_edges, num_head_nodes + prev_tail_nodes.size()); if(head_off) tmp_num_edges -= num_head_nodes; if(tail_off) tmp_num_edges -= prev_tail_nodes.size(); @@ -1015,7 +1015,7 @@ void RefGraph::buildGraph_worker(void* vp) { } if(nthreads > 1 && thread_id + 1 < (index_t)nthreads && prev_tail_nodes.size() > 0) { - writeIndex(rg_out_file, prev_tail_nodes.size(), bigEndian); + writeIndex(rg_out_file, (index_t)prev_tail_nodes.size(), bigEndian); for(index_t i = 0; i < prev_tail_nodes.size(); i++) { writeIndex(rg_out_file, prev_tail_nodes[i], bigEndian); } @@ -1086,7 +1086,7 @@ void RefGraph::reverseDeterminize(EList& nodes, EList& edge // Find predecessors of this composite node predecessors.clear(); for(size_t i = 0; i < cnodes[cnode_id].nodes.size(); i++) { - index_t node_id = cnodes[cnode_id].nodes.getID(i); + index_t node_id = cnodes[cnode_id].nodes.getID((index_t)i); pair edge_range = findEdgesTo(edges, node_id); assert_leq(edge_range.first, edge_range.second); assert_leq(edge_range.second, edges.size()); @@ -1099,7 +1099,7 @@ void RefGraph::reverseDeterminize(EList& nodes, EList& edge if(predecessors.size() >= 2) { // Remove redundant nodes predecessors.sort(); - index_t new_size = unique(predecessors.begin(), predecessors.end()) - predecessors.begin(); + index_t new_size = (index_t)(unique(predecessors.begin(), predecessors.end()) - predecessors.begin()); predecessors.resize(new_size); // Create composite nodes by labels @@ -1118,7 +1118,7 @@ void RefGraph::reverseDeterminize(EList& nodes, EList& edge cnodes.back().nodes.push_back(node_id); if(node.label == 'Y' && firstNode == 0) { - firstNode = cnodes.size() - 1; + firstNode = (index_t)cnodes.size() - 1; } while(i < predecessors.size()) { @@ -1140,9 +1140,9 @@ void RefGraph::reverseDeterminize(EList& nodes, EList& edge // Create edges from this new composite node to current composite node typename map::iterator existing = cnode_map.find(cnodes.back().nodes); if(existing == cnode_map.end()) { - cnode_map[cnodes.back().nodes] = cnodes.size() - 1; - active_cnodes.push_back(cnodes.size() - 1); - cedges.push_back(CompositeEdge(cnodes.size() - 1, cnode_id)); + cnode_map[cnodes.back().nodes] = (index_t)cnodes.size() - 1; + active_cnodes.push_back((index_t)cnodes.size() - 1); + cedges.push_back(CompositeEdge((index_t)cnodes.size() - 1, cnode_id)); } else { cnodes.pop_back(); cedges.push_back(CompositeEdge((*existing).second, cnode_id)); @@ -1165,7 +1165,7 @@ void RefGraph::reverseDeterminize(EList& nodes, EList& edge index_t cnode_id = active_cnodes.front(); active_cnodes.pop_front(); assert_lt(cnode_id, cnodes.size()); const CompositeNode& cnode = cnodes[cnode_id]; - index_t i = cedges.bsearchLoBound(CompositeEdge(cnode_id, 0)); + index_t i = (index_t)cedges.bsearchLoBound(CompositeEdge(cnode_id, 0)); while(i < cedges.size()) { assert_geq(cedges[i].from, cnode_id); if(cedges[i].from != cnode_id) break; @@ -1200,7 +1200,7 @@ void RefGraph::reverseDeterminize(EList& nodes, EList& edge while(!active_cnodes.empty()) { index_t cnode_id = active_cnodes.front(); active_cnodes.pop_front(); assert_lt(cnode_id, cnodes.size()); - index_t i = cedges.bsearchLoBound(CompositeEdge(cnode_id, 0)); + index_t i = (index_t)cedges.bsearchLoBound(CompositeEdge(cnode_id, 0)); while(i < cedges.size()) { assert_geq(cedges[i].from, cnode_id); if(cedges[i].from != cnode_id) break; @@ -1211,13 +1211,13 @@ void RefGraph::reverseDeterminize(EList& nodes, EList& edge successor_cnode.id--; if(successor_cnode.id == 0) { active_cnodes.push_back(successor_cnode_id); - successor_cnode.id = nodes.size(); + successor_cnode.id = (index_t)nodes.size(); nodes.expand(); nodes.back() = successor_cnode.getNode(); if(nodes.back().label == 'Z') { assert_eq(lastNode, 0); assert_gt(nodes.size(), 1); - lastNode = nodes.size() - 1; + lastNode = (index_t)nodes.size() - 1; } } i++; @@ -1348,8 +1348,8 @@ class PathGraph { bool generateEdges(RefGraph& parent); - index_t getNumNodes() const { return nodes.size(); } - index_t getNumEdges() const { return edges.size(); } + index_t getNumNodes() const { return (index_t)nodes.size(); } + index_t getNumEdges() const { return (index_t)edges.size(); } bool isSorted() const { return sorted; } @@ -1470,7 +1470,7 @@ class PathGraph { return i; } } - return array.size(); + return (index_t)array.size(); } index_t select1(const EList& array, index_t p) { @@ -1560,7 +1560,7 @@ report_F_node_idx(0), report_F_location(0) template void PathGraph::makeFromRef(RefGraph& base) { // Create a path node per edge with a key set to from node's label - temp_nodes = base.edges.size() + 1; + temp_nodes = (index_t)base.edges.size() + 1; max_from = 0; nodes.reserveExact(temp_nodes); for(index_t i = 0; i < base.edges.size(); i++) { @@ -1758,7 +1758,7 @@ void PathGraph::createNewNodesCounter(void* vp) { count += graph.past_nodes[node->to + 1].key.second - graph.past_nodes[node->to].key.second; } } - *(params->sub_temp_nodes) = count; + *(params->sub_temp_nodes) = (index_t)count; //check for overflow if(count > (index_t)-1) { @@ -1847,7 +1847,7 @@ void PathGraph::createNewNodes() { cerr << "exceeded integer bounds, remove adjacent SNPs or switch to 64-bit version" << endl; throw 1; } - temp_nodes = val; + temp_nodes = (index_t)val; } if(verbose) cerr << "COUNTED TEMP NODES: " << time(0) - indiv << endl; indiv = time(0); @@ -2017,7 +2017,7 @@ pair PathGraph::nextMaximalSet(pair return range; } } - range.second = nodes.size(); + range.second = (index_t)nodes.size(); return range; } @@ -2201,13 +2201,13 @@ bool PathGraph::generateEdges(RefGraph& base) EList temp_edges; temp_edges.resizeExact(edges.size()); radix_sort_copy, index_t>(edges.begin() , edges.begin() + index[0], temp_edges.ptr(), - &PathEdgeTo, nodes.size(), nthreads); + &PathEdgeTo, (index_t)nodes.size(), nthreads); radix_sort_copy, index_t>(edges.begin() + index[0], edges.begin() + index[1], temp_edges.ptr() + index[0], - &PathEdgeTo, nodes.size(), nthreads); + &PathEdgeTo, (index_t)nodes.size(), nthreads); radix_sort_copy, index_t>(edges.begin() + index[1], edges.begin() + index[2], temp_edges.ptr() + index[1], - &PathEdgeTo, nodes.size(), nthreads); + &PathEdgeTo, (index_t)nodes.size(), nthreads); radix_sort_copy, index_t>(edges.begin() + index[2], edges.begin() + index[3], temp_edges.ptr() + index[2], - &PathEdgeTo, nodes.size(), nthreads); + &PathEdgeTo, (index_t)nodes.size(), nthreads); for(index_t i = index[3]; i < edges.size(); i++) { temp_edges[i] = edges[i]; } @@ -2276,7 +2276,7 @@ bool PathGraph::generateEdges(RefGraph& base) PathEdge* edge = edges.begin(); while(node != nodes.end() && edge != edges.end()) { if(edge->from == node->from) { - edge->from = node - nodes.begin(); edge++; + edge->from = (index_t)(node - nodes.begin()); edge++; node->key.first++; } else { node++; node->key.first = 0; @@ -2322,7 +2322,7 @@ bool PathGraph::generateEdges(RefGraph& base) } #endif temp_edges.resizeExact(edges.size()); - radix_sort_copy(edges.begin(), edges.end(), temp_edges.ptr(), &PathEdgeTo, nodes.size(), nthreads); + radix_sort_copy(edges.begin(), edges.end(), temp_edges.ptr(), &PathEdgeTo, (index_t)nodes.size(), nthreads); edges.xfer(temp_edges); for(index_t i = 0; i < edges.size(); i++) { nodes[edges[i].ranking].key.second = i + 1; diff --git a/gfm.h b/gfm.h index 41fb8079..08d8aba2 100644 --- a/gfm.h +++ b/gfm.h @@ -544,7 +544,7 @@ struct USE_POPCNT_INSTRUCTION { inline static int pop64(uint64_t x) { int64_t count; asm ("popcntq %[x],%[count]\n": [count] "=&r" (count): [x] "r" (x)); - return count; + return (int)count; } }; #endif @@ -748,7 +748,7 @@ class GFM { in8.close(); // Sort SNPs and Splice Sites based on positions - index_t nalts = alts.size(); + index_t nalts = (index_t)alts.size(); for(index_t s = 0; s < nalts; s++) { ALT alt = alts[s]; if(alt.snp()) altdb->setSNPs(true); @@ -766,7 +766,7 @@ class GFM { EList buf2; buf2.resize(alts.size()); for(size_t i = 0; i < alts.size(); i++) { buf[i].first = alts[i]; - buf[i].second = i; + buf[i].second = (index_t)i; buf2[i] = altnames[i]; } buf.sort(); @@ -1235,9 +1235,9 @@ class GFM { } string type, chr; index_t pos; - char snp_ch; + char snp_ch = '\0'; string ins_seq; - index_t del_len; + index_t del_len = 0; snp_file >> type >> chr >> pos; if(type == "single") { snp_file >> snp_ch; @@ -1311,7 +1311,7 @@ class GFM { snp.seq = 0; } else if(type == "insertion") { snp.type = ALT_SNP_INS; - snp.len = ins_seq.size(); + snp.len = (index_t)ins_seq.size(); if(snp.len > sizeof(snp.seq) * 4) { _alts.pop_back(); continue; @@ -1544,7 +1544,7 @@ class GFM { EList buf2; buf2.resize(_alts.size()); for(size_t i = 0; i < _alts.size(); i++) { buf[i].first = _alts[i]; - buf[i].second = i; + buf[i].second = (index_t)i; buf2[i] = _altnames[i]; } buf.sort(); @@ -1571,8 +1571,8 @@ class GFM { #endif } - writeIndex(fout7, _alts.size(), this->toBe()); - writeIndex(fout8, _alts.size(), this->toBe()); + writeIndex(fout7, (index_t)_alts.size(), this->toBe()); + writeIndex(fout8, (index_t)_alts.size(), this->toBe()); for(index_t i = 0; i < _alts.size(); i++) { _alts[i].write(fout7, this->toBe()); fout8 << _altnames[i] << endl; @@ -1660,17 +1660,15 @@ class GFM { } else { bmax -= (bmax >> 2); // reduce by 25% } -#if 0 - VMSG("Using parameters --bmax " << bmax); - if(dcv == 0) { - VMSG_NL(" and *no difference cover*"); - } else { - VMSG_NL(" --dcv " << dcv); - } -#endif iter++; try { if(_alts.empty()) { + VMSG("Using parameters --bmax " << bmax); + if(dcv == 0) { + VMSG_NL(" and *no difference cover*"); + } else { + VMSG_NL(" --dcv " << dcv); + } { VMSG_NL(" Doing ahead-of-time memory usage test"); // Make a quick-and-dirty attempt to force a bad_alloc iff @@ -1678,6 +1676,7 @@ class GFM { // constructing the DifferenceCoverSample dcv <<= 1; index_t sz = (index_t)DifferenceCoverSample::simulateAllocs(s, dcv >> 1); + if(_nthreads > 1) sz *= (_nthreads + 1); AutoArray tmp(sz, EBWT_CAT); dcv >>= 1; // Likewise with the KarkkainenBlockwiseSA @@ -1698,7 +1697,7 @@ class GFM { VMSG_NL(""); } VMSG_NL("Constructing suffix-array element generator"); - KarkkainenBlockwiseSA bsa(s, bmax, dcv, seed, _sanity, _passMemExc, _verbose); + KarkkainenBlockwiseSA bsa(s, bmax, _nthreads, dcv, seed, _sanity, _passMemExc, _verbose, outfile); assert(bsa.suffixItrIsReset()); assert_eq(bsa.size(), s.length()+1); VMSG_NL("Converting suffix-array elements to index image"); @@ -4242,7 +4241,7 @@ void GFM::buildToDisk( // Write zOffs to primary stream // assert_gt(zOffs.size(), 0); - writeIndex(out1, zOffs.size(), this->toBe()); + writeIndex(out1, (index_t)zOffs.size(), this->toBe()); for(size_t i = 0; i < zOffs.size(); i++) { writeIndex(out1, zOffs[i], this->toBe()); } @@ -4671,7 +4670,7 @@ void GFM::buildToDisk( // Write zOffs to primary stream // assert_eq(zOffs.size(), 1); - writeIndex(out1, zOffs.size(), this->toBe()); + writeIndex(out1, (index_t)zOffs.size(), this->toBe()); for(size_t i = 0; i < zOffs.size(); i++) { assert_neq(zOffs[i], (index_t)OFF_MASK); writeIndex(out1, zOffs[i], this->toBe()); @@ -5862,7 +5861,7 @@ void GFM::writeFromMemory(bool justHeader, // written to the secondary file and discarded. writeIndex(out1, gh._gbwtTotLen, be); out1.write((const char *)this->gfm(), gh._gbwtTotLen); - writeIndex(out1, _zOffs.size(), be); + writeIndex(out1, (index_t)_zOffs.size(), be); for(index_t i = 0; i < _zOffs.size(); i++) writeIndex(out1, _zOffs[i], be); index_t offsLen = gh._offsLen; @@ -5960,7 +5959,7 @@ void GFM::szsToDisk(const EList& szs, ostream& os, int rever if(szs[i].first) off = 0; off += szs[i].off; if(szs[i].first && szs[i].len > 0) seq++; - index_t seqm1 = seq-1; + index_t seqm1 = (index_t)(seq-1); assert_lt(seqm1, _nPat); index_t fwoff = off; if(reverse == REF_READ_REVERSE) { diff --git a/group_walk.h b/group_walk.h index 688f3585..3634c4ff 100644 --- a/group_walk.h +++ b/group_walk.h @@ -529,11 +529,11 @@ class GWState { ASSERT_ONLY(index_t num_orig_iedges = 0, orig_e = 0); index_t num_iedges = 0, e = 0; for(size_t i = mapi_; i < map_.size(); i++) { - bool resolved = (off(i, sa) != (index_t)OFF_MASK); + bool resolved = (off((index_t)i, sa) != (index_t)OFF_MASK); if(!resolved) { #ifndef NDEBUG while(orig_e < sa.node_iedge_count.size()) { - if(map(i) <= sa.node_iedge_count[orig_e].first) { + if(map((index_t)i) <= sa.node_iedge_count[orig_e].first) { break; } num_orig_iedges += sa.node_iedge_count[orig_e].second; @@ -551,8 +551,8 @@ class GWState { index_t bwrow = (index_t)(top + i + num_iedges); index_t node = (index_t)(node_top + i); index_t toff = gfm.tryOffset(bwrow, node); - ASSERT_ONLY(index_t origBwRow = sa.topf + map(i) + num_orig_iedges); - ASSERT_ONLY(index_t origNode = sa.node_top + map(i)); + ASSERT_ONLY(index_t origBwRow = sa.topf + map((index_t)i) + num_orig_iedges); + ASSERT_ONLY(index_t origNode = sa.node_top + map((index_t)i)); assert_eq(bwrow, gfm.walkLeft(origBwRow, step)); if(toff != (index_t)OFF_MASK) { // Yes, toff was resolvable @@ -560,7 +560,7 @@ class GWState { met.resolves++; toff += step; assert_eq(toff, gfm.getOffset(origBwRow, origNode)); - setOff(i, toff, sa, met); + setOff((index_t)i, toff, sa, met); if(!reportList) ret.first++; #if 0 // used to be #ifndef NDEBUG, but since we no longer require that the reference @@ -625,22 +625,22 @@ class GWState { // resolved (whether this function did it just now, whether it did // it a while ago, or whether some other function outside GroupWalk // did it). - if(off(i, sa) != (index_t)OFF_MASK) { - if(reportList && !hit.reported(map(i))) { + if(off((index_t)i, sa) != (index_t)OFF_MASK) { + if(reportList && !hit.reported(map((index_t)i))) { // Report it - index_t toff = off(i, sa); + index_t toff = off((index_t)i, sa); assert(res != NULL); res->expand(); - index_t origBwRow = sa.topf + map(i); + index_t origBwRow = sa.topf + map((index_t)i); res->back().init( hit.offidx, // offset idx hit.fw, // orientation hit.range, // original range index - map(i), // original element offset + map((index_t)i), // original element offset origBwRow, // BW row resolved hit.len, // hit length toff); // text offset - hit.setReported(map(i)); + hit.setReported(map((index_t)i)); met.reports++; } // Offset resolved @@ -660,7 +660,7 @@ class GWState { // object to point to the appropriate element of our // range assert_geq(i, mapi_); - index_t bmap = map(i); + index_t bmap = map((index_t)i); hit.fmap[bmap].first = range; hit.fmap[bmap].second = (index_t)i; #ifndef NDEBUG @@ -722,7 +722,7 @@ class GWState { // If range is done, all elements from map should be // resolved for(size_t i = mapi_; i < map_.size(); i++) { - assert_neq((index_t)OFF_MASK, off(i, sa)); + assert_neq((index_t)OFF_MASK, off((index_t)i, sa)); } // If this range is done, then it should be the case that // all elements in the corresponding GWHit that point to @@ -993,7 +993,7 @@ class GWState { * this GWState. */ index_t size() const { - return map_.size() - mapi_; + return (index_t)(map_.size() - mapi_); } /** @@ -1379,7 +1379,7 @@ class GWState { */ bool doneResolving(const SARangeWithOffs& sa) const { for(size_t i = mapi_; i < map_.size(); i++) { - if(sa.offs[map(i)] == (index_t)OFF_MASK) return false; + if(sa.offs[map((index_t)i)] == (index_t)OFF_MASK) return false; } return true; } diff --git a/hgfm.h b/hgfm.h index ad60f56b..50b91737 100644 --- a/hgfm.h +++ b/hgfm.h @@ -238,7 +238,7 @@ class LocalGFM : public GFM { if(alts.empty()) { assert(pg == NULL); VMSG_NL("Constructing suffix-array element generator"); - KarkkainenBlockwiseSA bsa(s, s.length()+1, dcv, seed, this->_sanity, this->_passMemExc, this->_verbose); + KarkkainenBlockwiseSA bsa(s, (index_t)(s.length()+1), 1, dcv, seed, this->_sanity, this->_passMemExc, this->_verbose); assert(bsa.suffixItrIsReset()); assert_eq(bsa.size(), s.length()+1); VMSG_NL("Converting suffix-array elements to index image"); @@ -2172,7 +2172,7 @@ HGFM::HGFM( tParam.alts.clear(); ALT alt; alt.pos = curr_sztot; - index_t alt_i = this->_alts.bsearchLoBound(alt); + index_t alt_i = (index_t)this->_alts.bsearchLoBound(alt); for(; alt_i < this->_alts.size(); alt_i++) { const ALT& alt = this->_alts[alt_i]; if(alt.snp()) { @@ -2226,7 +2226,7 @@ HGFM::HGFM( LocalGFM( tParam.s, tParam.pg, - tidx, + (index_t)tidx, tParam.local_offset, tParam.curr_sztot, tParam.alts, diff --git a/hi_aligner.h b/hi_aligner.h index 5f8b373f..05038b26 100644 --- a/hi_aligner.h +++ b/hi_aligner.h @@ -264,12 +264,12 @@ struct ReadBWTHit { index_t len() const { return _len; } index_t cur() const { return _cur; } - size_t offsetSize() { return _partialHits.size(); } + index_t offsetSize() { return (index_t)_partialHits.size(); } size_t numPartialSearch() { return _numPartialSearch; } - size_t numActualPartialSearch() + index_t numActualPartialSearch() { assert_leq(_numUniqueSearch, _numPartialSearch); - return _numPartialSearch - _numUniqueSearch; + return (index_t)(_numPartialSearch - _numUniqueSearch); } bool width(index_t offset_) { @@ -679,7 +679,7 @@ struct GenomeHit { index_t numALTsTried = 0; EList& alt_edits = sharedVar.alt_edits; alt_edits = edits; - index_t nedits = edits.size(); + index_t nedits = (index_t)edits.size(); if(candidate_edits != NULL) candidate_edits->clear(); alignWithALTs_recur( alts, @@ -914,7 +914,7 @@ struct GenomeHit { qual = &(_fw ? rd->qual : rd->qualRev); } if(_edits->size() == 0) return; - for(int i = _edits->size() - 1; i >= 0; i--) { + for(int i = (int)_edits->size() - 1; i >= 0; i--) { const Edit& edit = (*_edits)[i]; if(edit.type == EDIT_TYPE_SPL || edit.type == EDIT_TYPE_READ_GAP || @@ -1003,7 +1003,7 @@ struct GenomeHit { rightanchor = _len; nedits = 0; if(_edits->size() == 0) return; - for(int i = _edits->size() - 1; i >= 0; i--) { + for(int i = (int)_edits->size() - 1; i >= 0; i--) { const Edit& edit = (*_edits)[i]; if(edit.type == EDIT_TYPE_SPL) { rightanchor = _len - edit.pos - 1; @@ -1361,7 +1361,7 @@ bool GenomeHit::combineWith( // calculate the maximum gap lengths based on the current score and the mimumimu alignment score to be reported const BTDnaString& seq = this->_fw ? rd.patFw : rd.patRc; const BTString& qual = this->_fw ? rd.qual : rd.qualRev; - index_t rdlen = seq.length(); + index_t rdlen = (index_t)seq.length(); int64_t remainsc = minsc - (_score - this_score) - (otherHit._score - other_score); if(remainsc > 0) remainsc = 0; int read_gaps = 0, ref_gaps = 0; @@ -1641,7 +1641,7 @@ bool GenomeHit::combineWith( } bool clear = true; - for(int i = _edits->size() - 1; i >= 0; i--) { + for(int i = (int)_edits->size() - 1; i >= 0; i--) { const Edit& edit = (*_edits)[i]; if(edit.type == EDIT_TYPE_SPL || edit.type == EDIT_TYPE_READ_GAP || @@ -1774,7 +1774,7 @@ bool GenomeHit::combineWith( } } } - index_t fsi = otherHit._edits->size(); + index_t fsi = (index_t)otherHit._edits->size(); for(index_t i = 0; i < otherHit._edits->size(); i++) { const Edit& edit = (*otherHit._edits)[i]; if(edit.type == EDIT_TYPE_SPL || @@ -1884,7 +1884,7 @@ bool GenomeHit::extend( rl = 0; } index_t numNs = 0; - index_t num_prev_edits = _edits->size(); + index_t num_prev_edits = (index_t)_edits->size(); index_t best_ext = alignWithALTs( altdb.alts(), this->_joinedOff, @@ -1905,7 +1905,7 @@ bool GenomeHit::extend( if(best_ext > 0) { leftext = best_ext; assert_leq(num_prev_edits, _edits->size()); - index_t added_edits = _edits->size() - num_prev_edits; + index_t added_edits = (index_t)_edits->size() - num_prev_edits; int ref_ext = (int)best_ext; for(index_t i = 0; i < added_edits; i++) { const Edit& edit = (*_edits)[i]; @@ -2035,20 +2035,20 @@ bool GenomeHit::adjustWithALT( len, 0, // trim5 0, // trim3 - coord.ref(), - coord.off(), - coord.joinedOff(), + (index_t)coord.ref(), + (index_t)coord.off(), + (index_t)coord.joinedOff(), sharedVars); return true; } index_t width = 1 << (gfm.gh()._offRate + 2); EList >& ssOffs = sharedVars.ssOffs; - findSSOffs(gfm, altdb, (coord.joinedOff() >= width ? coord.joinedOff() - width : 0), coord.joinedOff() + width, ssOffs); + findSSOffs(gfm, altdb, (coord.joinedOff() >= width ? (index_t)(coord.joinedOff() - width) : 0), (index_t)(coord.joinedOff() + width), ssOffs); assert_gt(ssOffs.size(), 0); bool found = false; for(index_t s = 0; s < ssOffs.size(); s++) { - index_t off = coord.off(); - index_t joinedOff = coord.joinedOff(); + index_t off = (index_t)coord.off(); + index_t joinedOff = (index_t)coord.joinedOff(); pair& ssOff = ssOffs[s]; if(ssOff.first > 0) { assert_neq(ssOff.second, 0); @@ -2068,7 +2068,7 @@ bool GenomeHit::adjustWithALT( len, 0, // trim5 0, // trim3 - coord.ref(), + (index_t)coord.ref(), off, joinedOff, sharedVars); @@ -2255,7 +2255,7 @@ void GenomeHit::findSSOffs( // Find splice sites included in this region ALT alt_search; alt_search.left = start; - for(index_t i = alts.bsearchLoBound(alt_search); i < alts.size(); i++) { + for(index_t i = (index_t)alts.bsearchLoBound(alt_search); i < alts.size(); i++) { const ALT& alt = alts[i]; if(alt.left >= end) break; if(!alt.splicesite()) continue; @@ -2268,7 +2268,7 @@ void GenomeHit::findSSOffs( const index_t relax = 5; if(alt.right > relax) alt_search.left = alt.right - relax; else alt_search.left = 0; - for(index_t j = alts.bsearchLoBound(alt_search); j < alts.size(); j++) { + for(index_t j = (index_t)alts.bsearchLoBound(alt_search); j < alts.size(); j++) { const ALT& alt2 = alts[j]; if(!alt2.splicesite()) continue; if(alt2.left < alt2.right) continue; @@ -2292,7 +2292,7 @@ void GenomeHit::findSSOffs( if(ssOffs.size() > 1) { ssOffs.sort(); - index_t new_size = unique(ssOffs.begin(), ssOffs.end()) - ssOffs.begin(); + index_t new_size = (index_t)(unique(ssOffs.begin(), ssOffs.end()) - ssOffs.begin()); ssOffs.resize(new_size); } } @@ -2320,7 +2320,7 @@ void GenomeHit::findOffDiffs( { ALT alt_search; alt_search.pos = start; - alt_range.first = alt_range.second = alts.bsearchLoBound(alt_search); + alt_range.first = alt_range.second = (index_t)alts.bsearchLoBound(alt_search); for(alt_range.second = alt_range.first; alt_range.second < alts.size(); alt_range.second++) { const ALT& alt = alts[alt_range.second]; if(alt.splicesite()) { @@ -2336,7 +2336,7 @@ void GenomeHit::findOffDiffs( const ALT& alt = alts[alt_range.second - 1]; if(!alt.gap()) continue; if(alt.splicesite()) continue; - index_t numOffs = offDiffs.size(); + index_t numOffs = (index_t)offDiffs.size(); for(index_t i = 0; i < numOffs; i++) { if(offDiffs[i].first > 10) continue; int off = offDiffs[i].first * offDiffs[i].second; @@ -2358,7 +2358,7 @@ void GenomeHit::findOffDiffs( if(offDiffs.size() > 1) { offDiffs.sort(); - index_t new_size = unique(offDiffs.begin(), offDiffs.end()) - offDiffs.begin(); + index_t new_size = (index_t)(unique(offDiffs.begin(), offDiffs.end()) - offDiffs.begin()); offDiffs.resize(new_size); } } @@ -2589,7 +2589,7 @@ index_t GenomeHit::alignWithALTs_recur( { ALT cmp_alt; cmp_alt.pos = joinedOff; - alt_range.first = alt_range.second = alts.bsearchLoBound(cmp_alt); + alt_range.first = alt_range.second = (index_t)alts.bsearchLoBound(cmp_alt); if(alt_range.first >= alts.size()) return 0; for(; alt_range.first > 0; alt_range.first--) { const ALT& alt = alts[alt_range.first]; @@ -2605,7 +2605,7 @@ index_t GenomeHit::alignWithALTs_recur( } } assert_geq(rdoff, 0); - const index_t orig_nedits = tmp_edits.size(); + const index_t orig_nedits = (index_t)tmp_edits.size(); for(; alt_range.second > alt_range.first; alt_range.second--) { const ALT& alt = alts[alt_range.second]; if(alt.pos >= joinedOff) continue; @@ -2812,7 +2812,7 @@ index_t GenomeHit::alignWithALTs_recur( { ALT cmp_alt; cmp_alt.pos = joinedOff; - alt_range.first = alt_range.second = alts.bsearchLoBound(cmp_alt); + alt_range.first = alt_range.second = (index_t)alts.bsearchLoBound(cmp_alt); if(alt_range.first >= alts.size()) return 0; for(; alt_range.second < alts.size(); alt_range.second++) { const ALT& alt = alts[alt_range.second]; @@ -2837,7 +2837,7 @@ index_t GenomeHit::alignWithALTs_recur( tmp_edits.resize(tmp_edits.size() - tmp_mm); tmp_mm = 0; } - const index_t orig_nedits = tmp_edits.size(); + const index_t orig_nedits = (index_t)tmp_edits.size(); for(; alt_range.first < alt_range.second; alt_range.first++) { const ALT& alt = alts[alt_range.first]; if(alt.splicesite()) { @@ -3009,7 +3009,7 @@ index_t GenomeHit::alignWithALTs_recur( template void GenomeHit::leftAlign(const Read& rd) { - ASSERT_ONLY(const index_t rdlen = rd.length()); + ASSERT_ONLY(const index_t rdlen = (index_t)rd.length()); const BTDnaString& seq = _fw ? rd.patFw : rd.patRc; for(index_t ei = 0; ei < _edits->size(); ei++) { Edit& edit = (*_edits)[ei]; @@ -3091,7 +3091,7 @@ bool GenomeHit::repOk(const Read& rd, const BitPairReference& ref) index_t refallen = 0; int64_t reflen = 0; int64_t refoff = this->_toff; - refoffs.push_back(refoff); + refoffs.push_back((index_t)refoff); size_t eidx = 0; for(size_t i = 0; i < _len; i++, reflen++, refoff++) { while(eidx < _edits->size() && (*_edits)[eidx].pos == i) { @@ -3117,7 +3117,7 @@ bool GenomeHit::repOk(const Read& rd, const BitPairReference& ref) } assert_gt(reflen, 0); refallen += (index_t)reflen; - reflens.push_back(reflen); + reflens.push_back((index_t)reflen); assert_gt(reflens.size(), 0); assert_gt(refoffs.size(), 0); assert_eq(reflens.size(), refoffs.size()); @@ -3180,7 +3180,7 @@ int64_t GenomeHit::calculateScore( index_t mm = 0; const BTDnaString& seq = _fw ? rd.patFw : rd.patRc; const BTString& qual = _fw ? rd.qual : rd.qualRev; - index_t rdlen = seq.length(); + index_t rdlen = (index_t)seq.length(); index_t toff_base = _toff; bool conflict_splicesites = false; uint8_t whichsense = EDIT_SPL_UNKNOWN; @@ -3478,7 +3478,7 @@ class HI_Aligner { _maxpen[1] = INDEX_MAX; for(size_t fwi = 0; fwi < 2; fwi++) { bool fw = (fwi == 0); - _hits[0][fwi].init(fw, _rds[0]->length()); + _hits[0][fwi].init(fw, (index_t)_rds[0]->length()); } _genomeHits.clear(); _concordantPairs.clear(); @@ -3500,7 +3500,7 @@ class HI_Aligner { _maxpen[rdi] = maxpen[rdi]; for(size_t fwi = 0; fwi < 2; fwi++) { bool fw = (fwi == 0); - _hits[rdi][fwi].init(fw, _rds[rdi]->length()); + _hits[rdi][fwi].init(fw, (index_t)_rds[rdi]->length()); } _hits_searched[rdi].clear(); } @@ -3559,7 +3559,7 @@ class HI_Aligner { const EList *rs[2] = {NULL, NULL}; sink.getUnp1(rs[0]); assert(rs[0] != NULL); sink.getUnp2(rs[1]); assert(rs[1] != NULL); - index_t rs_size[2] = {rs[0]->size(), rs[1]->size()}; + index_t rs_size[2] = {(index_t)rs[0]->size(), (index_t)rs[1]->size()}; for(index_t i = 0; i < 2; i++) { for(index_t j = 0; j < rs_size[i]; j++) { const AlnRes& res = (*rs[i])[j]; @@ -3579,8 +3579,8 @@ class HI_Aligner { him, rnd, sink, - res.refid(), - res.refoff()); + (index_t)res.refid(), + (index_t)res.refoff()); } } @@ -3628,7 +3628,7 @@ class HI_Aligner { if(bestScore >= _minsc[rdi]) { // do not further align this candidate // unless it may be at least as good as the alignment of its reverse complement - index_t maxmm = (-bestScore + sc.mmpMax - 1) / sc.mmpMax; + index_t maxmm = (index_t)((-bestScore + sc.mmpMax - 1) / sc.mmpMax); if(numSearched > maxmm + sink.bestSplicedUnp1() + 1) { hit.done(true); if(_paired) { @@ -3647,7 +3647,7 @@ class HI_Aligner { if(bestScore >= _minsc[rdi]) { // Do not further extend this alignment // unless it may be at least as good as the previous alignemnt - index_t maxmm = (-bestScore + sc.mmpMax - 1) / sc.mmpMax; + index_t maxmm = (index_t)((-bestScore + sc.mmpMax - 1) / sc.mmpMax); if(numSearched > maxmm + sink.bestSplicedUnp2() + 1) { hit.done(true); if(_paired) { @@ -3811,7 +3811,7 @@ class HI_Aligner { else if(fwi == 1 && _norc[rdi2]) continue; if(_hits[rdi2][fwi].done()) continue; - int64_t curScore = _hits[rdi2][fwi].searchScore(_minK); + int64_t curScore = _hits[rdi2][fwi].searchScore((index_t)_minK); if(_hits[rdi2][fwi].cur() == 0) { curScore = std::numeric_limits::max(); } @@ -3831,60 +3831,60 @@ class HI_Aligner { /** * Align a part of a read without any edits */ - size_t partialSearch( - const GFM& gfm, // GFM index - const Read& read, // read to align - const Scoring& sc, // scoring scheme - const ReportingParams& rp, - bool fw, // don't align forward read - size_t mineMax, // don't care about edit bounds > this - size_t& mineFw, // minimum # edits for forward read - size_t& mineRc, // minimum # edits for revcomp read - ReadBWTHit& hit, // holds all the seed hits (and exact hit) - RandomSource& rnd, - bool& pseudogeneStop, // stop if mapped to multiple locations due to processed pseudogenes - bool& anchorStop); + index_t partialSearch( + const GFM& gfm, // GFM index + const Read& read, // read to align + const Scoring& sc, // scoring scheme + const ReportingParams& rp, + bool fw, // don't align forward read + size_t mineMax, // don't care about edit bounds > this + size_t& mineFw, // minimum # edits for forward read + size_t& mineRc, // minimum # edits for revcomp read + ReadBWTHit& hit, // holds all the seed hits (and exact hit) + RandomSource& rnd, + bool& pseudogeneStop, // stop if mapped to multiple locations due to processed pseudogenes + bool& anchorStop); /** * Global FM index search - */ - size_t globalGFMSearch( - const GFM& gfm, // GFM index - const Read& read, // read to align - const Scoring& sc, // scoring scheme - const ReportingParams& rp, - bool fw, - index_t hitoff, - index_t& hitlen, - index_t& top, - index_t& bot, - index_t& node_top, - index_t& node_bot, - EList >& node_iedge_count, - RandomSource& rnd, - bool& uniqueStop, - index_t maxHitLen = (index_t)INDEX_MAX); + */ + index_t globalGFMSearch( + const GFM& gfm, // GFM index + const Read& read, // read to align + const Scoring& sc, // scoring scheme + const ReportingParams& rp, + bool fw, + index_t hitoff, + index_t& hitlen, + index_t& top, + index_t& bot, + index_t& node_top, + index_t& node_bot, + EList >& node_iedge_count, + RandomSource& rnd, + bool& uniqueStop, + index_t maxHitLen = (index_t)INDEX_MAX); /** * Local FM index search - */ - size_t localGFMSearch( - const LocalGFM& gfm, // GFM index - const Read& read, // read to align - const Scoring& sc, // scoring scheme - const ReportingParams& rp, - bool fw, - index_t rdoff, - index_t& hitlen, - local_index_t& top, - local_index_t& bot, - local_index_t& node_top, - local_index_t& node_bot, - EList >& local_node_iedge_count, - RandomSource& rnd, - bool& uniqueStop, - local_index_t minUniqueLen, - local_index_t maxHitLen = (local_index_t)INDEX_MAX); + */ + index_t localGFMSearch( + const LocalGFM& gfm, // GFM index + const Read& read, // read to align + const Scoring& sc, // scoring scheme + const ReportingParams& rp, + bool fw, + index_t rdoff, + index_t& hitlen, + local_index_t& top, + local_index_t& bot, + local_index_t& node_top, + local_index_t& node_bot, + EList >& local_node_iedge_count, + RandomSource& rnd, + bool& uniqueStop, + local_index_t minUniqueLen, + local_index_t maxHitLen = (local_index_t)INDEX_MAX); /** * Convert FM offsets to the corresponding genomic offset (chromosome id, offset) @@ -4016,7 +4016,7 @@ class HI_Aligner { if(!partialHit.hasGenomeCoords()) continue; EList& coords = partialHit._coords; assert_gt(coords.size(), 0); - const index_t genomeHit_size = genomeHits.size(); + const index_t genomeHit_size = (index_t)genomeHits.size(); if(genomeHit_size + coords.size() > maxGenomeHitSize) { coords.shufflePortion(0, coords.size(), rnd); } @@ -4031,7 +4031,7 @@ class HI_Aligner { assert_lt(genomeHit.rdoff(), hit._len); assert_lt(rdoff, hit._len); index_t hitoff = genomeHit.refoff() + hit._len - genomeHit.rdoff(); - index_t hitoff2 = coord.off() + hit._len - rdoff; + index_t hitoff2 = (index_t)coord.off() + hit._len - rdoff; if(abs((int64_t)hitoff - (int64_t)hitoff2) <= (int64_t)_maxIntronLen) { overlapped = true; genomeHit._hitcount++; @@ -4054,7 +4054,7 @@ class HI_Aligner { } if(partialHit._hit_type == CANDIDATE_HIT && genomeHits.size() >= maxGenomeHitSize) break; } - return genomeHits.size(); + return (index_t)genomeHits.size(); } bool pairReads( @@ -4255,12 +4255,12 @@ bool HI_Aligner::align( int64_t bestScore = (rdi == 0 ? sink.bestUnp1() : sink.bestUnp2()); index_t num_spliced = (rdi == 0 ? sink.bestSplicedUnp1() : sink.bestSplicedUnp2()); if(bestScore < _minsc[rdi]) bestScore = _minsc[rdi]; - index_t maxmm = (-bestScore + sc.mmpMax - 1) / sc.mmpMax; + index_t maxmm = (index_t)((-bestScore + sc.mmpMax - 1) / sc.mmpMax); index_t numActualPartialSearch = hit.numActualPartialSearch(); if(!_secondary && numActualPartialSearch > maxmm + num_spliced + 1) return true; // choose candidate partial alignments for further alignment - const index_t maxsize = rp.khits; + const index_t maxsize = (index_t)rp.khits; index_t numHits = getAnchorHits( gfm, altdb, @@ -4331,7 +4331,7 @@ bool HI_Aligner::alignMate( bool ofw = (fw == gMate2fw ? gMate1fw : gMate2fw); assert(_rds[ordi] != NULL); const Read& ord = *_rds[ordi]; - index_t rdlen = ord.length(); + index_t rdlen = (index_t)ord.length(); assert_gt(rdlen, 0); _genomeHits.clear(); @@ -4451,9 +4451,9 @@ bool HI_Aligner::alignMate( sc, _minsc[ordi], rnd, - _minK_local, - _minIntronLen, - _maxIntronLen, + (index_t)_minK_local, + (index_t)_minIntronLen, + (index_t)_maxIntronLen, _minAnchorLen, _minAnchorLen_noncan, leftext, @@ -4734,7 +4734,7 @@ bool HI_Aligner::reportHit( assert_lt(rdi, 2); assert(_rds[rdi] != NULL); const Read& rd = *_rds[rdi]; - index_t rdlen = rd.length(); + index_t rdlen = (index_t)rd.length(); if(hit.rdoff() - hit.trim5() > 0 || hit.len() + hit.trim5() + hit.trim3() < rdlen) return false; if(hit.score() < _minsc[rdi]) return false; @@ -4845,7 +4845,7 @@ bool HI_Aligner::reportHit( assert(ohit != NULL); const Read& ord = *_rds[1-rdi]; - index_t ordlen = ord.length(); + index_t ordlen = (index_t)ord.length(); if(ohit->rdoff() - ohit->trim5() > 0 || ohit->len() + ohit->trim5() + ohit->trim3() < ordlen) return false; if(ohit->score() < _minsc[1-rdi]) return false; EList& oedits = const_cast&>(ohit->edits()); @@ -4958,7 +4958,7 @@ bool HI_Aligner::redundant( { assert_lt(rdi, 2); assert(_rds[rdi] != NULL); - index_t rdlen = _rds[rdi]->length(); + index_t rdlen = (index_t)_rds[rdi]->length(); const EList* rs = NULL; if(rdi == 0) sink.getUnp1(rs); else sink.getUnp2(rs); @@ -5000,19 +5000,19 @@ bool HI_Aligner::redundant( * alignment. */ template -size_t HI_Aligner::partialSearch( - const GFM& gfm, // BWT index - const Read& read, // read to align - const Scoring& sc, // scoring scheme - const ReportingParams& rp, - bool fw, - size_t mineMax, // don't care about edit bounds > this - size_t& mineFw, // minimum # edits for forward read - size_t& mineRc, // minimum # edits for revcomp read - ReadBWTHit& hit, // holds all the seed hits (and exact hit) - RandomSource& rnd, // pseudo-random source - bool& pseudogeneStop, - bool& anchorStop) +index_t HI_Aligner::partialSearch( + const GFM& gfm, // BWT index + const Read& read, // read to align + const Scoring& sc, // scoring scheme + const ReportingParams& rp, + bool fw, + size_t mineMax, // don't care about edit bounds > this + size_t& mineFw, // minimum # edits for forward read + size_t& mineRc, // minimum # edits for revcomp read + ReadBWTHit& hit, // holds all the seed hits (and exact hit) + RandomSource& rnd, // pseudo-random source + bool& pseudogeneStop, + bool& anchorStop) { bool pseudogeneStop_ = pseudogeneStop, anchorStop_ = anchorStop; pseudogeneStop = anchorStop = false; @@ -5109,7 +5109,7 @@ size_t HI_Aligner::partialSearch( if(linearFM) { rangeTemp = gfm.mapLF(tloc, bloc, c, &node_rangeTemp); } else { - rangeTemp = gfm.mapGLF(tloc, bloc, c, &node_rangeTemp, &_tmp_node_iedge_count, rp.khits); + rangeTemp = gfm.mapGLF(tloc, bloc, c, &node_rangeTemp, &_tmp_node_iedge_count, (index_t)rp.khits); } } else { bwops_++; @@ -5128,8 +5128,8 @@ size_t HI_Aligner::partialSearch( } if(pseudogeneStop_) { - if(node_rangeTemp.second - node_rangeTemp.first < node_range.second - node_range.first && node_range.second - node_range.first <= min(5, rp.khits)) { - static const index_t minLenForPseudogene = _minK + 6; + if(node_rangeTemp.second - node_rangeTemp.first < node_range.second - node_range.first && node_range.second - node_range.first <= min(5, (index_t)rp.khits)) { + static const index_t minLenForPseudogene = (index_t)_minK + 6; if(dep - offset >= minLenForPseudogene && similar_range >= 5) { hit._numUniqueSearch++; pseudogeneStop = true; @@ -5238,29 +5238,29 @@ size_t HI_Aligner::partialSearch( hit.done(true); } } - return nelt; + return (index_t)nelt; } /** */ template -size_t HI_Aligner::globalGFMSearch( - const GFM& gfm, // BWT index - const Read& read, // read to align - const Scoring& sc, // scoring scheme - const ReportingParams& rp, - bool fw, - index_t hitoff, - index_t& hitlen, - index_t& top, - index_t& bot, - index_t& node_top, - index_t& node_bot, - EList >& node_iedge_count, - RandomSource& rnd, - bool& uniqueStop, - index_t maxHitLen) +index_t HI_Aligner::globalGFMSearch( + const GFM& gfm, // BWT index + const Read& read, // read to align + const Scoring& sc, // scoring scheme + const ReportingParams& rp, + bool fw, + index_t hitoff, + index_t& hitlen, + index_t& top, + index_t& bot, + index_t& node_top, + index_t& node_bot, + EList >& node_iedge_count, + RandomSource& rnd, + bool& uniqueStop, + index_t maxHitLen) { bool uniqueStop_ = uniqueStop; uniqueStop = false; @@ -5319,7 +5319,7 @@ size_t HI_Aligner::globalGFMSearch( if(linearFM) { rangeTemp = gfm.mapLF(tloc, bloc, c, &node_rangeTemp); } else { - rangeTemp = gfm.mapGLF(tloc, bloc, c, &node_rangeTemp, &_tmp_node_iedge_count, rp.khits); + rangeTemp = gfm.mapGLF(tloc, bloc, c, &node_rangeTemp, &_tmp_node_iedge_count, (index_t)rp.khits); } } else { bwops_++; @@ -5382,7 +5382,7 @@ size_t HI_Aligner::globalGFMSearch( nelt += (node_bot - node_top); hitlen = dep - offset; } - return nelt; + return (index_t)nelt; } @@ -5390,23 +5390,23 @@ size_t HI_Aligner::globalGFMSearch( * **/ template -size_t HI_Aligner::localGFMSearch( - const LocalGFM& gfm, // GFM index - const Read& read, // read to align - const Scoring& sc, // scoring scheme - const ReportingParams& rp, - bool fw, - index_t rdoff, - index_t& hitlen, - local_index_t& top, - local_index_t& bot, - local_index_t& node_top, - local_index_t& node_bot, - EList >& local_node_iedge_count, - RandomSource& rnd, - bool& uniqueStop, - local_index_t minUniqueLen, - local_index_t maxHitLen) +index_t HI_Aligner::localGFMSearch( + const LocalGFM& gfm, // GFM index + const Read& read, // read to align + const Scoring& sc, // scoring scheme + const ReportingParams& rp, + bool fw, + index_t rdoff, + index_t& hitlen, + local_index_t& top, + local_index_t& bot, + local_index_t& node_top, + local_index_t& node_bot, + EList >& local_node_iedge_count, + RandomSource& rnd, + bool& uniqueStop, + local_index_t minUniqueLen, + local_index_t maxHitLen) { bool uniqueStop_ = uniqueStop; uniqueStop = false; @@ -5528,7 +5528,7 @@ size_t HI_Aligner::localGFMSearch( hitlen = dep - offset; } - return nelt; + return (index_t)nelt; } /** diff --git a/hisat2.xcodeproj/project.pbxproj b/hisat2.xcodeproj/project.pbxproj index 39e0bec0..341cfcf1 100644 --- a/hisat2.xcodeproj/project.pbxproj +++ b/hisat2.xcodeproj/project.pbxproj @@ -6,748 +6,931 @@ objectVersion = 46; objects = { +/* Begin PBXBuildFile section */ + E8EAEDC41C24663D00E62E69 /* alphabet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDC1C20B2B600C03464 /* alphabet.cpp */; }; + E8EAEDC51C24663D00E62E69 /* ccnt_lut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDE1C20B2B600C03464 /* ccnt_lut.cpp */; }; + E8EAEDC61C24663D00E62E69 /* ds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE11C20B2B600C03464 /* ds.cpp */; }; + E8EAEDC71C24663D00E62E69 /* edit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE21C20B2B600C03464 /* edit.cpp */; }; + E8EAEDC81C24663D00E62E69 /* gfm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE31C20B2B600C03464 /* gfm.cpp */; }; + E8EAEDC91C24663D00E62E69 /* ref_read.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF91C20B2B600C03464 /* ref_read.cpp */; }; + E8EAEDCA1C24663D00E62E69 /* reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CFA1C20B2B600C03464 /* reference.cpp */; }; + E8EAEDCB1C24663D00E62E69 /* shmem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CFC1C20B2B600C03464 /* shmem.cpp */; }; + E8EAEDCC1C24666400E62E69 /* limit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CEC1C20B2B600C03464 /* limit.cpp */; }; + E8EAEDCD1C24666400E62E69 /* multikey_qsort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CEF1C20B2B600C03464 /* multikey_qsort.cpp */; }; + E8EAEDCE1C24666400E62E69 /* random_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF51C20B2B600C03464 /* random_source.cpp */; }; + E8EAEDCF1C24666400E62E69 /* tinythread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30D021C20B2B600C03464 /* tinythread.cpp */; }; + E8EAEDD01C24667700E62E69 /* hisat2_build_main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE61C20B2B600C03464 /* hisat2_build_main.cpp */; }; + E8EAEDD11C24667700E62E69 /* hisat2_build.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE71C20B2B600C03464 /* hisat2_build.cpp */; }; + E8EAEDD41C24675500E62E69 /* hisat2_build_main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE61C20B2B600C03464 /* hisat2_build_main.cpp */; }; + E8EAEDD51C24675500E62E69 /* hisat2_build.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE71C20B2B600C03464 /* hisat2_build.cpp */; }; + E8EAEDD61C24675500E62E69 /* limit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CEC1C20B2B600C03464 /* limit.cpp */; }; + E8EAEDD71C24675500E62E69 /* multikey_qsort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CEF1C20B2B600C03464 /* multikey_qsort.cpp */; }; + E8EAEDD81C24675500E62E69 /* random_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF51C20B2B600C03464 /* random_source.cpp */; }; + E8EAEDD91C24675500E62E69 /* tinythread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30D021C20B2B600C03464 /* tinythread.cpp */; }; + E8EAEDDA1C24675500E62E69 /* alphabet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDC1C20B2B600C03464 /* alphabet.cpp */; }; + E8EAEDDB1C24675500E62E69 /* ccnt_lut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDE1C20B2B600C03464 /* ccnt_lut.cpp */; }; + E8EAEDDC1C24675500E62E69 /* ds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE11C20B2B600C03464 /* ds.cpp */; }; + E8EAEDDD1C24675500E62E69 /* edit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE21C20B2B600C03464 /* edit.cpp */; }; + E8EAEDDE1C24675500E62E69 /* gfm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE31C20B2B600C03464 /* gfm.cpp */; }; + E8EAEDDF1C24675500E62E69 /* ref_read.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF91C20B2B600C03464 /* ref_read.cpp */; }; + E8EAEDE01C24675500E62E69 /* reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CFA1C20B2B600C03464 /* reference.cpp */; }; + E8EAEDE11C24675500E62E69 /* shmem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CFC1C20B2B600C03464 /* shmem.cpp */; }; + E8EAEDE81C246CDC00E62E69 /* diff_sample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDF1C20B2B600C03464 /* diff_sample.cpp */; }; + E8EAEDE91C246DA200E62E69 /* alphabet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDC1C20B2B600C03464 /* alphabet.cpp */; }; + E8EAEDEA1C246DA200E62E69 /* ccnt_lut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDE1C20B2B600C03464 /* ccnt_lut.cpp */; }; + E8EAEDEB1C246DA200E62E69 /* ds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE11C20B2B600C03464 /* ds.cpp */; }; + E8EAEDEC1C246DA200E62E69 /* edit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE21C20B2B600C03464 /* edit.cpp */; }; + E8EAEDED1C246DA200E62E69 /* gfm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE31C20B2B600C03464 /* gfm.cpp */; }; + E8EAEDEE1C246DA200E62E69 /* multikey_qsort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CEF1C20B2B600C03464 /* multikey_qsort.cpp */; }; + E8EAEDEF1C246DA200E62E69 /* ref_read.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF91C20B2B600C03464 /* ref_read.cpp */; }; + E8EAEDF01C246DA200E62E69 /* reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CFA1C20B2B600C03464 /* reference.cpp */; }; + E8EAEDF11C246DA200E62E69 /* shmem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CFC1C20B2B600C03464 /* shmem.cpp */; }; + E8EAEDF21C246DB200E62E69 /* hisat2_inspect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE81C20B2B600C03464 /* hisat2_inspect.cpp */; }; + E8EAEDF31C246DB200E62E69 /* limit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CEC1C20B2B600C03464 /* limit.cpp */; }; + E8EAEDF41C246DB200E62E69 /* random_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF51C20B2B600C03464 /* random_source.cpp */; }; + E8EAEDF51C246DB200E62E69 /* tinythread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30D021C20B2B600C03464 /* tinythread.cpp */; }; + E8EAEDF61C246E3100E62E69 /* hisat2_main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE91C20B2B600C03464 /* hisat2_main.cpp */; }; + E8EAEDF71C246E3100E62E69 /* hisat2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CEA1C20B2B600C03464 /* hisat2.cpp */; }; + E8EAEDF81C246E3100E62E69 /* pat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF11C20B2B600C03464 /* pat.cpp */; }; + E8EAEDF91C246E3100E62E69 /* qual.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF41C20B2B600C03464 /* qual.cpp */; }; + E8EAEDFA1C246E5100E62E69 /* aligner_cache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CCE1C20B2B600C03464 /* aligner_cache.cpp */; }; + E8EAEDFB1C246E5100E62E69 /* aligner_seed_policy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CD11C20B2B600C03464 /* aligner_seed_policy.cpp */; }; + E8EAEDFC1C246E5100E62E69 /* aligner_seed.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CD21C20B2B600C03464 /* aligner_seed.cpp */; }; + E8EAEDFD1C246E5100E62E69 /* aligner_seed2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CD31C20B2B600C03464 /* aligner_seed2.cpp */; }; + E8EAEDFE1C246E5100E62E69 /* aligner_sw_driver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CD41C20B2B600C03464 /* aligner_sw_driver.cpp */; }; + E8EAEDFF1C246E5100E62E69 /* aligner_sw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CD51C20B2B600C03464 /* aligner_sw.cpp */; }; + E8EAEE001C246E5100E62E69 /* read_qseq.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF71C20B2B600C03464 /* read_qseq.cpp */; }; + E8EAEE011C246EB200E62E69 /* aligner_result.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CD01C20B2B600C03464 /* aligner_result.cpp */; }; + E8EAEE021C246EB200E62E69 /* aln_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDB1C20B2B600C03464 /* aln_sink.cpp */; }; + E8EAEE031C246EB200E62E69 /* dp_framer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE01C20B2B600C03464 /* dp_framer.cpp */; }; + E8EAEE041C246EB200E62E69 /* mask.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CEE1C20B2B600C03464 /* mask.cpp */; }; + E8EAEE051C246EB200E62E69 /* pe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF21C20B2B600C03464 /* pe.cpp */; }; + E8EAEE061C246EB200E62E69 /* presets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF31C20B2B600C03464 /* presets.cpp */; }; + E8EAEE071C246EB200E62E69 /* ref_coord.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF81C20B2B600C03464 /* ref_coord.cpp */; }; + E8EAEE081C246EB200E62E69 /* scoring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CFB1C20B2B600C03464 /* scoring.cpp */; }; + E8EAEE091C246EB200E62E69 /* unique.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30D031C20B2B600C03464 /* unique.cpp */; }; + E8EAEE0A1C246EE900E62E69 /* aligner_bt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CCD1C20B2B600C03464 /* aligner_bt.cpp */; }; + E8EAEE0B1C246EE900E62E69 /* aligner_swsse_ee_i16.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CD61C20B2B600C03464 /* aligner_swsse_ee_i16.cpp */; }; + E8EAEE0C1C246EE900E62E69 /* aligner_swsse_ee_u8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CD71C20B2B600C03464 /* aligner_swsse_ee_u8.cpp */; }; + E8EAEE0D1C246EE900E62E69 /* aligner_swsse_loc_i16.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CD81C20B2B600C03464 /* aligner_swsse_loc_i16.cpp */; }; + E8EAEE0E1C246EE900E62E69 /* aligner_swsse_loc_u8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CD91C20B2B600C03464 /* aligner_swsse_loc_u8.cpp */; }; + E8EAEE0F1C246EE900E62E69 /* aligner_swsse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDA1C20B2B600C03464 /* aligner_swsse.cpp */; }; + E8EAEE101C246EE900E62E69 /* outq.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF01C20B2B600C03464 /* outq.cpp */; }; + E8EAEE111C246EE900E62E69 /* random_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF51C20B2B600C03464 /* random_source.cpp */; }; + E8EAEE121C246EE900E62E69 /* random_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF61C20B2B600C03464 /* random_util.cpp */; }; + E8EAEE131C246EE900E62E69 /* simple_func.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CFD1C20B2B600C03464 /* simple_func.cpp */; }; + E8EAEE141C246EE900E62E69 /* sse_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30D001C20B2B600C03464 /* sse_util.cpp */; }; + E8EAEE151C246EFC00E62E69 /* aligner_driver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CCF1C20B2B600C03464 /* aligner_driver.cpp */; }; + E8EAEE161C246EFC00E62E69 /* splice_site.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CFF1C20B2B600C03464 /* splice_site.cpp */; }; + E8EAEE171C2487FF00E62E69 /* diff_sample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDF1C20B2B600C03464 /* diff_sample.cpp */; }; + E8EAEE181C24886400E62E69 /* ccnt_lut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDE1C20B2B600C03464 /* ccnt_lut.cpp */; }; + E8EAEE191C2488AF00E62E69 /* ds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE11C20B2B600C03464 /* ds.cpp */; }; + E8EAEE1A1C2488D600E62E69 /* limit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CEC1C20B2B600C03464 /* limit.cpp */; }; + E8EAEE1B1C2488EA00E62E69 /* edit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE21C20B2B600C03464 /* edit.cpp */; }; + E8EAEE1C1C24891800E62E69 /* alphabet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CDC1C20B2B600C03464 /* alphabet.cpp */; }; + E8EAEE1D1C24892B00E62E69 /* gfm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CE31C20B2B600C03464 /* gfm.cpp */; }; + E8EAEE1E1C24894300E62E69 /* tinythread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30D021C20B2B600C03464 /* tinythread.cpp */; }; + E8EAEE1F1C24896600E62E69 /* reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CFA1C20B2B600C03464 /* reference.cpp */; }; + E8EAEE201C24899300E62E69 /* ref_read.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C30CF91C20B2B600C03464 /* ref_read.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + E8C30C581C20A5DD00C03464 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; + E8C30C681C20A64A00C03464 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; + E8C30C731C20A65400C03464 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; + E8EAEDE31C24675500E62E69 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ - E8000AE11AE9304500E1F351 /* hisat2_build_main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = hisat2_build_main.cpp; sourceTree = ""; }; - E8000AE21AE9304500E1F351 /* hisat2_build.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = hisat2_build.cpp; sourceTree = ""; }; - E8000AE71AEEC5A400E1F351 /* gbwt_graph.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gbwt_graph.h; sourceTree = ""; }; - E818AEAD1987FD2E00ED141B /* bp_aligner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bp_aligner.h; sourceTree = ""; }; - E818AEAE1987FD5100ED141B /* hisat_bp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = hisat_bp.cpp; sourceTree = ""; }; - E819F68819F553B100E1BD32 /* splice_site_mem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = splice_site_mem.h; sourceTree = ""; }; - E81BC0841980295300580916 /* hi_aligner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hi_aligner.h; sourceTree = ""; }; - E84A38961B42CC02007343EB /* extract_snps.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = extract_snps.py; sourceTree = ""; }; - E84A38971B42CC02007343EB /* extract_splice_sites.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = extract_splice_sites.py; sourceTree = ""; }; - E84A38981B42CC34007343EB /* simulate_reads.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = simulate_reads.py; sourceTree = ""; }; - E85452591B1A2B720049F2AC /* hisat2_inspect.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = hisat2_inspect.cpp; sourceTree = ""; }; - E854525A1B1A2B7C0049F2AC /* hisat2_main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = hisat2_main.cpp; sourceTree = ""; }; - E854525B1B1A2B870049F2AC /* hisat2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = hisat2.cpp; sourceTree = ""; }; - E8562A631B515EE5003062A4 /* radix_sort.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = radix_sort.h; sourceTree = ""; }; - E85766711970545400D8AAFB /* btypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = btypes.h; sourceTree = ""; }; - E85F1AFA193501E000F85A12 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - E861E5A51B1B3C2200362002 /* gfm.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gfm.cpp; sourceTree = ""; }; - E8645CE01B2B5EE00027075C /* alt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = alt.h; sourceTree = ""; }; - E88C30AA1B15E23800761CCB /* gfm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gfm.h; sourceTree = ""; }; - E89001AD1B93B7D800C63D6C /* tp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tp.h; sourceTree = ""; }; - E8B0DBE81934F7AA005ED9FA /* aligner_bt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_bt.h; sourceTree = ""; }; - E8B0DBE91934F7AA005ED9FA /* aligner_cache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_cache.h; sourceTree = ""; }; - E8B0DBEA1934F7AA005ED9FA /* aligner_driver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_driver.h; sourceTree = ""; }; - E8B0DBEB1934F7AA005ED9FA /* aligner_metrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_metrics.h; sourceTree = ""; }; - E8B0DBEC1934F7AA005ED9FA /* aligner_report.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_report.h; sourceTree = ""; }; - E8B0DBED1934F7AA005ED9FA /* aligner_result.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_result.h; sourceTree = ""; }; - E8B0DBEE1934F7AA005ED9FA /* aligner_seed_policy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_seed_policy.h; sourceTree = ""; }; - E8B0DBEF1934F7AA005ED9FA /* aligner_seed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_seed.h; sourceTree = ""; }; - E8B0DBF01934F7AA005ED9FA /* aligner_seed2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_seed2.h; sourceTree = ""; }; - E8B0DBF11934F7AA005ED9FA /* aligner_sw_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw_common.h; sourceTree = ""; }; - E8B0DBF21934F7AA005ED9FA /* aligner_sw_driver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw_driver.h; sourceTree = ""; }; - E8B0DBF31934F7AA005ED9FA /* aligner_sw_nuc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw_nuc.h; sourceTree = ""; }; - E8B0DBF41934F7AA005ED9FA /* aligner_sw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw.h; sourceTree = ""; }; - E8B0DBF51934F7AA005ED9FA /* aligner_swsse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_swsse.h; sourceTree = ""; }; - E8B0DBF61934F7AA005ED9FA /* aln_sink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aln_sink.h; sourceTree = ""; }; - E8B0DBF71934F7AA005ED9FA /* alphabet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = alphabet.h; sourceTree = ""; }; - E8B0DBF81934F7AA005ED9FA /* assert_helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assert_helpers.h; sourceTree = ""; }; - E8B0DBF91934F7AA005ED9FA /* banded.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = banded.h; sourceTree = ""; }; - E8B0DBFA1934F7AA005ED9FA /* binary_sa_search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binary_sa_search.h; sourceTree = ""; }; - E8B0DBFB1934F7AA005ED9FA /* bitpack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitpack.h; sourceTree = ""; }; - E8B0DBFC1934F7AA005ED9FA /* blockwise_sa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blockwise_sa.h; sourceTree = ""; }; - E8B0DC001934F7AA005ED9FA /* diff_sample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diff_sample.h; sourceTree = ""; }; - E8B0DC011934F7AA005ED9FA /* dp_framer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dp_framer.h; sourceTree = ""; }; - E8B0DC021934F7AA005ED9FA /* ds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ds.h; sourceTree = ""; }; - E8B0DC031934F7AA005ED9FA /* edit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = edit.h; sourceTree = ""; }; - E8B0DC041934F7AA005ED9FA /* endian_swap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endian_swap.h; sourceTree = ""; }; - E8B0DC051934F7AA005ED9FA /* fast_mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fast_mutex.h; sourceTree = ""; }; - E8B0DC061934F7AA005ED9FA /* filebuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filebuf.h; sourceTree = ""; }; - E8B0DC071934F7AA005ED9FA /* formats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = formats.h; sourceTree = ""; }; - E8B0DC081934F7AA005ED9FA /* group_walk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = group_walk.h; sourceTree = ""; }; - E8B0DC091934F7AA005ED9FA /* hier_idx_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hier_idx_common.h; sourceTree = ""; }; - E8B0DC0B1934F7AA005ED9FA /* ival_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ival_list.h; sourceTree = ""; }; - E8B0DC0C1934F7AA005ED9FA /* limit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = limit.h; sourceTree = ""; }; - E8B0DC0D1934F7AA005ED9FA /* ls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ls.h; sourceTree = ""; }; - E8B0DC0E1934F7AA005ED9FA /* mask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mask.h; sourceTree = ""; }; - E8B0DC0F1934F7AA005ED9FA /* mem_ids.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem_ids.h; sourceTree = ""; }; - E8B0DC101934F7AA005ED9FA /* mm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mm.h; sourceTree = ""; }; - E8B0DC111934F7AA005ED9FA /* multikey_qsort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = multikey_qsort.h; sourceTree = ""; }; - E8B0DC121934F7AA005ED9FA /* opts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opts.h; sourceTree = ""; }; - E8B0DC131934F7AA005ED9FA /* outq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = outq.h; sourceTree = ""; }; - E8B0DC141934F7AA005ED9FA /* pat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pat.h; sourceTree = ""; }; - E8B0DC151934F7AA005ED9FA /* pe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pe.h; sourceTree = ""; }; - E8B0DC161934F7AA005ED9FA /* presets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = presets.h; sourceTree = ""; }; - E8B0DC171934F7AA005ED9FA /* processor_support.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = processor_support.h; sourceTree = ""; }; - E8B0DC181934F7AA005ED9FA /* qual.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qual.h; sourceTree = ""; }; - E8B0DC191934F7AA005ED9FA /* random_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random_source.h; sourceTree = ""; }; - E8B0DC1A1934F7AA005ED9FA /* random_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random_util.h; sourceTree = ""; }; - E8B0DC1B1934F7AA005ED9FA /* read.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = read.h; sourceTree = ""; }; - E8B0DC1C1934F7AA005ED9FA /* ref_coord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ref_coord.h; sourceTree = ""; }; - E8B0DC1D1934F7AA005ED9FA /* ref_read.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ref_read.h; sourceTree = ""; }; - E8B0DC1E1934F7AA005ED9FA /* reference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reference.h; sourceTree = ""; }; - E8B0DC1F1934F7AA005ED9FA /* sam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sam.h; sourceTree = ""; }; - E8B0DC201934F7AA005ED9FA /* scoring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scoring.h; sourceTree = ""; }; - E8B0DC211934F7AA005ED9FA /* search_globals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = search_globals.h; sourceTree = ""; }; - E8B0DC221934F7AA005ED9FA /* sequence_io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sequence_io.h; sourceTree = ""; }; - E8B0DC231934F7AA005ED9FA /* shmem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = shmem.h; sourceTree = ""; }; - E8B0DC241934F7AA005ED9FA /* simple_func.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_func.h; sourceTree = ""; }; - E8B0DC251934F7AA005ED9FA /* splice_site.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = splice_site.h; sourceTree = ""; }; - E8B0DC261934F7AA005ED9FA /* spliced_aligner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spliced_aligner.h; sourceTree = ""; }; - E8B0DC271934F7AA005ED9FA /* sse_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sse_util.h; sourceTree = ""; }; - E8B0DC281934F7AA005ED9FA /* sstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sstring.h; sourceTree = ""; }; - E8B0DC291934F7AA005ED9FA /* str_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = str_util.h; sourceTree = ""; }; - E8B0DC2A1934F7AA005ED9FA /* threading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = threading.h; sourceTree = ""; }; - E8B0DC2B1934F7AA005ED9FA /* timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = ""; }; - E8B0DC2C1934F7AA005ED9FA /* tinythread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinythread.h; sourceTree = ""; }; - E8B0DC2D1934F7AA005ED9FA /* tokenize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tokenize.h; sourceTree = ""; }; - E8B0DC2E1934F7AA005ED9FA /* unique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unique.h; sourceTree = ""; }; - E8B0DC2F1934F7AA005ED9FA /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; - E8B0DC301934F7AA005ED9FA /* word_io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = word_io.h; sourceTree = ""; }; - E8B0DC311934F7AA005ED9FA /* zbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zbox.h; sourceTree = ""; }; - E8B0DC321934F7AA005ED9FA /* aligner_bt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_bt.cpp; sourceTree = ""; }; - E8B0DC331934F7AA005ED9FA /* aligner_cache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_cache.cpp; sourceTree = ""; }; - E8B0DC341934F7AA005ED9FA /* aligner_driver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_driver.cpp; sourceTree = ""; }; - E8B0DC351934F7AA005ED9FA /* aligner_result.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_result.cpp; sourceTree = ""; }; - E8B0DC361934F7AA005ED9FA /* aligner_seed_policy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_seed_policy.cpp; sourceTree = ""; }; - E8B0DC371934F7AA005ED9FA /* aligner_seed.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_seed.cpp; sourceTree = ""; }; - E8B0DC381934F7AA005ED9FA /* aligner_seed2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_seed2.cpp; sourceTree = ""; }; - E8B0DC391934F7AA005ED9FA /* aligner_sw_driver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_sw_driver.cpp; sourceTree = ""; }; - E8B0DC3A1934F7AA005ED9FA /* aligner_sw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_sw.cpp; sourceTree = ""; }; - E8B0DC3B1934F7AA005ED9FA /* aligner_swsse_ee_i16.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_ee_i16.cpp; sourceTree = ""; }; - E8B0DC3C1934F7AA005ED9FA /* aligner_swsse_ee_u8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_ee_u8.cpp; sourceTree = ""; }; - E8B0DC3D1934F7AA005ED9FA /* aligner_swsse_loc_i16.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_loc_i16.cpp; sourceTree = ""; }; - E8B0DC3E1934F7AA005ED9FA /* aligner_swsse_loc_u8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_loc_u8.cpp; sourceTree = ""; }; - E8B0DC3F1934F7AA005ED9FA /* aligner_swsse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse.cpp; sourceTree = ""; }; - E8B0DC401934F7AA005ED9FA /* aln_sink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aln_sink.cpp; sourceTree = ""; }; - E8B0DC411934F7AA005ED9FA /* alphabet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = alphabet.cpp; sourceTree = ""; }; - E8B0DC421934F7AA005ED9FA /* banded.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = banded.cpp; sourceTree = ""; }; - E8B0DC491934F7AA005ED9FA /* ccnt_lut.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ccnt_lut.cpp; sourceTree = ""; }; - E8B0DC4A1934F7AA005ED9FA /* diff_sample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = diff_sample.cpp; sourceTree = ""; }; - E8B0DC4B1934F7AA005ED9FA /* dp_framer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dp_framer.cpp; sourceTree = ""; }; - E8B0DC4C1934F7AA005ED9FA /* ds.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ds.cpp; sourceTree = ""; }; - E8B0DC4D1934F7AA005ED9FA /* edit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = edit.cpp; sourceTree = ""; }; - E8B0DC4E1934F7AA005ED9FA /* group_walk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = group_walk.cpp; sourceTree = ""; }; - E8B0DC4F1934F7AA005ED9FA /* ival_list.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ival_list.cpp; sourceTree = ""; }; - E8B0DC501934F7AA005ED9FA /* limit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = limit.cpp; sourceTree = ""; }; - E8B0DC511934F7AA005ED9FA /* ls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ls.cpp; sourceTree = ""; }; - E8B0DC521934F7AA005ED9FA /* mask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mask.cpp; sourceTree = ""; }; - E8B0DC531934F7AA005ED9FA /* multikey_qsort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = multikey_qsort.cpp; sourceTree = ""; }; - E8B0DC541934F7AA005ED9FA /* outq.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = outq.cpp; sourceTree = ""; }; - E8B0DC551934F7AA005ED9FA /* pat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pat.cpp; sourceTree = ""; }; - E8B0DC561934F7AA005ED9FA /* pe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pe.cpp; sourceTree = ""; }; - E8B0DC571934F7AA005ED9FA /* presets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = presets.cpp; sourceTree = ""; }; - E8B0DC581934F7AA005ED9FA /* qual.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = qual.cpp; sourceTree = ""; }; - E8B0DC591934F7AA005ED9FA /* random_source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = random_source.cpp; sourceTree = ""; }; - E8B0DC5A1934F7AA005ED9FA /* random_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = random_util.cpp; sourceTree = ""; }; - E8B0DC5B1934F7AA005ED9FA /* read_qseq.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = read_qseq.cpp; sourceTree = ""; }; - E8B0DC5C1934F7AA005ED9FA /* ref_coord.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ref_coord.cpp; sourceTree = ""; }; - E8B0DC5D1934F7AA005ED9FA /* ref_read.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ref_read.cpp; sourceTree = ""; }; - E8B0DC5E1934F7AA005ED9FA /* reference.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reference.cpp; sourceTree = ""; }; - E8B0DC651934F7AA005ED9FA /* scoring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scoring.cpp; sourceTree = ""; }; - E8B0DC661934F7AA005ED9FA /* shmem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shmem.cpp; sourceTree = ""; }; - E8B0DC671934F7AA005ED9FA /* simple_func.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_func.cpp; sourceTree = ""; }; - E8B0DC681934F7AA005ED9FA /* splice_site.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = splice_site.cpp; sourceTree = ""; }; - E8B0DC691934F7AA005ED9FA /* sse_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sse_util.cpp; sourceTree = ""; }; - E8B0DC6A1934F7AA005ED9FA /* sstring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sstring.cpp; sourceTree = ""; }; - E8B0DC6B1934F7AA005ED9FA /* tinythread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinythread.cpp; sourceTree = ""; }; - E8B0DC6C1934F7AA005ED9FA /* unique.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unique.cpp; sourceTree = ""; }; - E8B0DCA81934F7BE005ED9FA /* AUTHORS */ = {isa = PBXFileReference; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - E8B0DCA91934F7BE005ED9FA /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - E8B0DCAA1934F7C5005ED9FA /* NEWS */ = {isa = PBXFileReference; lastKnownFileType = text; path = NEWS; sourceTree = ""; }; - E8B0DCAC1934F7C5005ED9FA /* TUTORIAL */ = {isa = PBXFileReference; lastKnownFileType = text; path = TUTORIAL; sourceTree = ""; }; - E8B0DCAD1934F7C5005ED9FA /* VERSION */ = {isa = PBXFileReference; lastKnownFileType = text; path = VERSION; sourceTree = ""; }; - E8EE06DF1B15F1DE00E75FC3 /* hgfm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hgfm.h; sourceTree = ""; }; + E8C30C5A1C20A5DD00C03464 /* hisat2x */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = hisat2x; sourceTree = BUILT_PRODUCTS_DIR; }; + E8C30C6A1C20A64A00C03464 /* hisat2-buildx */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "hisat2-buildx"; sourceTree = BUILT_PRODUCTS_DIR; }; + E8C30C751C20A65400C03464 /* hisat2-inspectx */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "hisat2-inspectx"; sourceTree = BUILT_PRODUCTS_DIR; }; + E8C30C7C1C20B2B600C03464 /* aligner_bt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_bt.h; sourceTree = ""; }; + E8C30C7D1C20B2B600C03464 /* aligner_cache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_cache.h; sourceTree = ""; }; + E8C30C7E1C20B2B600C03464 /* aligner_driver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_driver.h; sourceTree = ""; }; + E8C30C7F1C20B2B600C03464 /* aligner_metrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_metrics.h; sourceTree = ""; }; + E8C30C801C20B2B600C03464 /* aligner_report.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_report.h; sourceTree = ""; }; + E8C30C811C20B2B600C03464 /* aligner_result.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_result.h; sourceTree = ""; }; + E8C30C821C20B2B600C03464 /* aligner_seed_policy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_seed_policy.h; sourceTree = ""; }; + E8C30C831C20B2B600C03464 /* aligner_seed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_seed.h; sourceTree = ""; }; + E8C30C841C20B2B600C03464 /* aligner_seed2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_seed2.h; sourceTree = ""; }; + E8C30C851C20B2B600C03464 /* aligner_sw_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw_common.h; sourceTree = ""; }; + E8C30C861C20B2B600C03464 /* aligner_sw_driver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw_driver.h; sourceTree = ""; }; + E8C30C871C20B2B600C03464 /* aligner_sw_nuc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw_nuc.h; sourceTree = ""; }; + E8C30C881C20B2B600C03464 /* aligner_sw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_sw.h; sourceTree = ""; }; + E8C30C891C20B2B600C03464 /* aligner_swsse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aligner_swsse.h; sourceTree = ""; }; + E8C30C8A1C20B2B600C03464 /* aln_sink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aln_sink.h; sourceTree = ""; }; + E8C30C8B1C20B2B600C03464 /* alphabet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = alphabet.h; sourceTree = ""; }; + E8C30C8C1C20B2B600C03464 /* alt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = alt.h; sourceTree = ""; }; + E8C30C8D1C20B2B600C03464 /* assert_helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assert_helpers.h; sourceTree = ""; }; + E8C30C8E1C20B2B600C03464 /* banded.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = banded.h; sourceTree = ""; }; + E8C30C8F1C20B2B600C03464 /* binary_sa_search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binary_sa_search.h; sourceTree = ""; }; + E8C30C901C20B2B600C03464 /* bitpack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitpack.h; sourceTree = ""; }; + E8C30C911C20B2B600C03464 /* blockwise_sa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blockwise_sa.h; sourceTree = ""; }; + E8C30C921C20B2B600C03464 /* bp_aligner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bp_aligner.h; sourceTree = ""; }; + E8C30C931C20B2B600C03464 /* btypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = btypes.h; sourceTree = ""; }; + E8C30C941C20B2B600C03464 /* classifier_li.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = classifier_li.h; sourceTree = ""; }; + E8C30C951C20B2B600C03464 /* diff_sample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diff_sample.h; sourceTree = ""; }; + E8C30C961C20B2B600C03464 /* dp_framer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dp_framer.h; sourceTree = ""; }; + E8C30C971C20B2B600C03464 /* ds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ds.h; sourceTree = ""; }; + E8C30C981C20B2B600C03464 /* edit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = edit.h; sourceTree = ""; }; + E8C30C991C20B2B600C03464 /* endian_swap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endian_swap.h; sourceTree = ""; }; + E8C30C9A1C20B2B600C03464 /* fast_mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fast_mutex.h; sourceTree = ""; }; + E8C30C9B1C20B2B600C03464 /* filebuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filebuf.h; sourceTree = ""; }; + E8C30C9C1C20B2B600C03464 /* formats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = formats.h; sourceTree = ""; }; + E8C30C9D1C20B2B600C03464 /* gbwt_graph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gbwt_graph.h; sourceTree = ""; }; + E8C30C9E1C20B2B600C03464 /* gfm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gfm.h; sourceTree = ""; }; + E8C30C9F1C20B2B600C03464 /* group_walk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = group_walk.h; sourceTree = ""; }; + E8C30CA01C20B2B600C03464 /* hgfm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hgfm.h; sourceTree = ""; }; + E8C30CA11C20B2B600C03464 /* hi_aligner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hi_aligner.h; sourceTree = ""; }; + E8C30CA21C20B2B600C03464 /* hier_idx_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hier_idx_common.h; sourceTree = ""; }; + E8C30CA31C20B2B600C03464 /* ival_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ival_list.h; sourceTree = ""; }; + E8C30CA41C20B2B600C03464 /* limit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = limit.h; sourceTree = ""; }; + E8C30CA51C20B2B600C03464 /* ls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ls.h; sourceTree = ""; }; + E8C30CA61C20B2B600C03464 /* mask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mask.h; sourceTree = ""; }; + E8C30CA71C20B2B600C03464 /* mem_ids.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem_ids.h; sourceTree = ""; }; + E8C30CA81C20B2B600C03464 /* mm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mm.h; sourceTree = ""; }; + E8C30CA91C20B2B600C03464 /* multikey_qsort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = multikey_qsort.h; sourceTree = ""; }; + E8C30CAA1C20B2B600C03464 /* opts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opts.h; sourceTree = ""; }; + E8C30CAB1C20B2B600C03464 /* outq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = outq.h; sourceTree = ""; }; + E8C30CAC1C20B2B600C03464 /* pat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pat.h; sourceTree = ""; }; + E8C30CAD1C20B2B600C03464 /* pe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pe.h; sourceTree = ""; }; + E8C30CAE1C20B2B600C03464 /* presets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = presets.h; sourceTree = ""; }; + E8C30CAF1C20B2B600C03464 /* processor_support.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = processor_support.h; sourceTree = ""; }; + E8C30CB01C20B2B600C03464 /* qual.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qual.h; sourceTree = ""; }; + E8C30CB11C20B2B600C03464 /* radix_sort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = radix_sort.h; sourceTree = ""; }; + E8C30CB21C20B2B600C03464 /* random_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random_source.h; sourceTree = ""; }; + E8C30CB31C20B2B600C03464 /* random_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random_util.h; sourceTree = ""; }; + E8C30CB41C20B2B600C03464 /* read.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = read.h; sourceTree = ""; }; + E8C30CB51C20B2B600C03464 /* ref_coord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ref_coord.h; sourceTree = ""; }; + E8C30CB61C20B2B600C03464 /* ref_read.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ref_read.h; sourceTree = ""; }; + E8C30CB71C20B2B600C03464 /* reference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reference.h; sourceTree = ""; }; + E8C30CB81C20B2B600C03464 /* sam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sam.h; sourceTree = ""; }; + E8C30CB91C20B2B600C03464 /* scoring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scoring.h; sourceTree = ""; }; + E8C30CBA1C20B2B600C03464 /* search_globals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = search_globals.h; sourceTree = ""; }; + E8C30CBB1C20B2B600C03464 /* sequence_io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sequence_io.h; sourceTree = ""; }; + E8C30CBC1C20B2B600C03464 /* shmem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = shmem.h; sourceTree = ""; }; + E8C30CBD1C20B2B600C03464 /* simple_func.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_func.h; sourceTree = ""; }; + E8C30CBE1C20B2B600C03464 /* splice_site_mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = splice_site_mem.h; sourceTree = ""; }; + E8C30CBF1C20B2B600C03464 /* splice_site.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = splice_site.h; sourceTree = ""; }; + E8C30CC01C20B2B600C03464 /* spliced_aligner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spliced_aligner.h; sourceTree = ""; }; + E8C30CC11C20B2B600C03464 /* sse_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sse_util.h; sourceTree = ""; }; + E8C30CC21C20B2B600C03464 /* sstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sstring.h; sourceTree = ""; }; + E8C30CC31C20B2B600C03464 /* str_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = str_util.h; sourceTree = ""; }; + E8C30CC41C20B2B600C03464 /* threading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = threading.h; sourceTree = ""; }; + E8C30CC51C20B2B600C03464 /* timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = ""; }; + E8C30CC61C20B2B600C03464 /* tinythread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinythread.h; sourceTree = ""; }; + E8C30CC71C20B2B600C03464 /* tokenize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tokenize.h; sourceTree = ""; }; + E8C30CC81C20B2B600C03464 /* tp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tp.h; sourceTree = ""; }; + E8C30CC91C20B2B600C03464 /* unique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unique.h; sourceTree = ""; }; + E8C30CCA1C20B2B600C03464 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; + E8C30CCB1C20B2B600C03464 /* word_io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = word_io.h; sourceTree = ""; }; + E8C30CCC1C20B2B600C03464 /* zbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zbox.h; sourceTree = ""; }; + E8C30CCD1C20B2B600C03464 /* aligner_bt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_bt.cpp; sourceTree = ""; }; + E8C30CCE1C20B2B600C03464 /* aligner_cache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_cache.cpp; sourceTree = ""; }; + E8C30CCF1C20B2B600C03464 /* aligner_driver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_driver.cpp; sourceTree = ""; }; + E8C30CD01C20B2B600C03464 /* aligner_result.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_result.cpp; sourceTree = ""; }; + E8C30CD11C20B2B600C03464 /* aligner_seed_policy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_seed_policy.cpp; sourceTree = ""; }; + E8C30CD21C20B2B600C03464 /* aligner_seed.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_seed.cpp; sourceTree = ""; }; + E8C30CD31C20B2B600C03464 /* aligner_seed2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_seed2.cpp; sourceTree = ""; }; + E8C30CD41C20B2B600C03464 /* aligner_sw_driver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_sw_driver.cpp; sourceTree = ""; }; + E8C30CD51C20B2B600C03464 /* aligner_sw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_sw.cpp; sourceTree = ""; }; + E8C30CD61C20B2B600C03464 /* aligner_swsse_ee_i16.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_ee_i16.cpp; sourceTree = ""; }; + E8C30CD71C20B2B600C03464 /* aligner_swsse_ee_u8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_ee_u8.cpp; sourceTree = ""; }; + E8C30CD81C20B2B600C03464 /* aligner_swsse_loc_i16.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_loc_i16.cpp; sourceTree = ""; }; + E8C30CD91C20B2B600C03464 /* aligner_swsse_loc_u8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse_loc_u8.cpp; sourceTree = ""; }; + E8C30CDA1C20B2B600C03464 /* aligner_swsse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aligner_swsse.cpp; sourceTree = ""; }; + E8C30CDB1C20B2B600C03464 /* aln_sink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aln_sink.cpp; sourceTree = ""; }; + E8C30CDC1C20B2B600C03464 /* alphabet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = alphabet.cpp; sourceTree = ""; }; + E8C30CDD1C20B2B600C03464 /* banded.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = banded.cpp; sourceTree = ""; }; + E8C30CDE1C20B2B600C03464 /* ccnt_lut.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ccnt_lut.cpp; sourceTree = ""; }; + E8C30CDF1C20B2B600C03464 /* diff_sample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = diff_sample.cpp; sourceTree = ""; }; + E8C30CE01C20B2B600C03464 /* dp_framer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dp_framer.cpp; sourceTree = ""; }; + E8C30CE11C20B2B600C03464 /* ds.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ds.cpp; sourceTree = ""; }; + E8C30CE21C20B2B600C03464 /* edit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = edit.cpp; sourceTree = ""; }; + E8C30CE31C20B2B600C03464 /* gfm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gfm.cpp; sourceTree = ""; }; + E8C30CE41C20B2B600C03464 /* group_walk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = group_walk.cpp; sourceTree = ""; }; + E8C30CE51C20B2B600C03464 /* hisat_bp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hisat_bp.cpp; sourceTree = ""; }; + E8C30CE61C20B2B600C03464 /* hisat2_build_main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hisat2_build_main.cpp; sourceTree = ""; }; + E8C30CE71C20B2B600C03464 /* hisat2_build.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hisat2_build.cpp; sourceTree = ""; }; + E8C30CE81C20B2B600C03464 /* hisat2_inspect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hisat2_inspect.cpp; sourceTree = ""; }; + E8C30CE91C20B2B600C03464 /* hisat2_main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hisat2_main.cpp; sourceTree = ""; }; + E8C30CEA1C20B2B600C03464 /* hisat2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hisat2.cpp; sourceTree = ""; }; + E8C30CEB1C20B2B600C03464 /* ival_list.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ival_list.cpp; sourceTree = ""; }; + E8C30CEC1C20B2B600C03464 /* limit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = limit.cpp; sourceTree = ""; }; + E8C30CED1C20B2B600C03464 /* ls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ls.cpp; sourceTree = ""; }; + E8C30CEE1C20B2B600C03464 /* mask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mask.cpp; sourceTree = ""; }; + E8C30CEF1C20B2B600C03464 /* multikey_qsort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = multikey_qsort.cpp; sourceTree = ""; }; + E8C30CF01C20B2B600C03464 /* outq.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = outq.cpp; sourceTree = ""; }; + E8C30CF11C20B2B600C03464 /* pat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pat.cpp; sourceTree = ""; }; + E8C30CF21C20B2B600C03464 /* pe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pe.cpp; sourceTree = ""; }; + E8C30CF31C20B2B600C03464 /* presets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = presets.cpp; sourceTree = ""; }; + E8C30CF41C20B2B600C03464 /* qual.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = qual.cpp; sourceTree = ""; }; + E8C30CF51C20B2B600C03464 /* random_source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = random_source.cpp; sourceTree = ""; }; + E8C30CF61C20B2B600C03464 /* random_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = random_util.cpp; sourceTree = ""; }; + E8C30CF71C20B2B600C03464 /* read_qseq.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = read_qseq.cpp; sourceTree = ""; }; + E8C30CF81C20B2B600C03464 /* ref_coord.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ref_coord.cpp; sourceTree = ""; }; + E8C30CF91C20B2B600C03464 /* ref_read.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ref_read.cpp; sourceTree = ""; }; + E8C30CFA1C20B2B600C03464 /* reference.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reference.cpp; sourceTree = ""; }; + E8C30CFB1C20B2B600C03464 /* scoring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scoring.cpp; sourceTree = ""; }; + E8C30CFC1C20B2B600C03464 /* shmem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shmem.cpp; sourceTree = ""; }; + E8C30CFD1C20B2B600C03464 /* simple_func.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_func.cpp; sourceTree = ""; }; + E8C30CFE1C20B2B600C03464 /* splice_site_new.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = splice_site_new.cpp; sourceTree = ""; }; + E8C30CFF1C20B2B600C03464 /* splice_site.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = splice_site.cpp; sourceTree = ""; }; + E8C30D001C20B2B600C03464 /* sse_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sse_util.cpp; sourceTree = ""; }; + E8C30D011C20B2B600C03464 /* sstring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sstring.cpp; sourceTree = ""; }; + E8C30D021C20B2B600C03464 /* tinythread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinythread.cpp; sourceTree = ""; }; + E8C30D031C20B2B600C03464 /* unique.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unique.cpp; sourceTree = ""; }; + E8EAEDE71C24675500E62E69 /* hisat2-buildlx */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "hisat2-buildlx"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ +/* Begin PBXFrameworksBuildPhase section */ + E8C30C571C20A5DD00C03464 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8C30C671C20A64A00C03464 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8C30C721C20A65400C03464 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8EAEDE21C24675500E62E69 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + /* Begin PBXGroup section */ - E8B0DBD11934F022005ED9FA = { + E8C30C511C20A5DD00C03464 = { isa = PBXGroup; children = ( - E8B0DBE61934F762005ED9FA /* Document */, - E8B0DBDB1934F022005ED9FA /* Products */, - E8B0DBE71934F769005ED9FA /* Source */, + E8C30C651C20A61400C03464 /* Document */, + E8C30C641C20A60F00C03464 /* Source */, + E8C30C5B1C20A5DD00C03464 /* Products */, ); sourceTree = ""; }; - E8B0DBDB1934F022005ED9FA /* Products */ = { + E8C30C5B1C20A5DD00C03464 /* Products */ = { isa = PBXGroup; children = ( + E8C30C5A1C20A5DD00C03464 /* hisat2x */, + E8C30C6A1C20A64A00C03464 /* hisat2-buildx */, + E8C30C751C20A65400C03464 /* hisat2-inspectx */, + E8EAEDE71C24675500E62E69 /* hisat2-buildlx */, ); name = Products; sourceTree = ""; }; - E8B0DBE61934F762005ED9FA /* Document */ = { + E8C30C641C20A60F00C03464 /* Source */ = { isa = PBXGroup; children = ( - E8B0DCAA1934F7C5005ED9FA /* NEWS */, - E8B0DCAC1934F7C5005ED9FA /* TUTORIAL */, - E8B0DCAD1934F7C5005ED9FA /* VERSION */, - E8B0DCA81934F7BE005ED9FA /* AUTHORS */, - E8B0DCA91934F7BE005ED9FA /* LICENSE */, + E8C30C7C1C20B2B600C03464 /* aligner_bt.h */, + E8C30C7D1C20B2B600C03464 /* aligner_cache.h */, + E8C30C7E1C20B2B600C03464 /* aligner_driver.h */, + E8C30C7F1C20B2B600C03464 /* aligner_metrics.h */, + E8C30C801C20B2B600C03464 /* aligner_report.h */, + E8C30C811C20B2B600C03464 /* aligner_result.h */, + E8C30C821C20B2B600C03464 /* aligner_seed_policy.h */, + E8C30C831C20B2B600C03464 /* aligner_seed.h */, + E8C30C841C20B2B600C03464 /* aligner_seed2.h */, + E8C30C851C20B2B600C03464 /* aligner_sw_common.h */, + E8C30C861C20B2B600C03464 /* aligner_sw_driver.h */, + E8C30C871C20B2B600C03464 /* aligner_sw_nuc.h */, + E8C30C881C20B2B600C03464 /* aligner_sw.h */, + E8C30C891C20B2B600C03464 /* aligner_swsse.h */, + E8C30C8A1C20B2B600C03464 /* aln_sink.h */, + E8C30C8B1C20B2B600C03464 /* alphabet.h */, + E8C30C8C1C20B2B600C03464 /* alt.h */, + E8C30C8D1C20B2B600C03464 /* assert_helpers.h */, + E8C30C8E1C20B2B600C03464 /* banded.h */, + E8C30C8F1C20B2B600C03464 /* binary_sa_search.h */, + E8C30C901C20B2B600C03464 /* bitpack.h */, + E8C30C911C20B2B600C03464 /* blockwise_sa.h */, + E8C30C921C20B2B600C03464 /* bp_aligner.h */, + E8C30C931C20B2B600C03464 /* btypes.h */, + E8C30C941C20B2B600C03464 /* classifier_li.h */, + E8C30C951C20B2B600C03464 /* diff_sample.h */, + E8C30C961C20B2B600C03464 /* dp_framer.h */, + E8C30C971C20B2B600C03464 /* ds.h */, + E8C30C981C20B2B600C03464 /* edit.h */, + E8C30C991C20B2B600C03464 /* endian_swap.h */, + E8C30C9A1C20B2B600C03464 /* fast_mutex.h */, + E8C30C9B1C20B2B600C03464 /* filebuf.h */, + E8C30C9C1C20B2B600C03464 /* formats.h */, + E8C30C9D1C20B2B600C03464 /* gbwt_graph.h */, + E8C30C9E1C20B2B600C03464 /* gfm.h */, + E8C30C9F1C20B2B600C03464 /* group_walk.h */, + E8C30CA01C20B2B600C03464 /* hgfm.h */, + E8C30CA11C20B2B600C03464 /* hi_aligner.h */, + E8C30CA21C20B2B600C03464 /* hier_idx_common.h */, + E8C30CA31C20B2B600C03464 /* ival_list.h */, + E8C30CA41C20B2B600C03464 /* limit.h */, + E8C30CA51C20B2B600C03464 /* ls.h */, + E8C30CA61C20B2B600C03464 /* mask.h */, + E8C30CA71C20B2B600C03464 /* mem_ids.h */, + E8C30CA81C20B2B600C03464 /* mm.h */, + E8C30CA91C20B2B600C03464 /* multikey_qsort.h */, + E8C30CAA1C20B2B600C03464 /* opts.h */, + E8C30CAB1C20B2B600C03464 /* outq.h */, + E8C30CAC1C20B2B600C03464 /* pat.h */, + E8C30CAD1C20B2B600C03464 /* pe.h */, + E8C30CAE1C20B2B600C03464 /* presets.h */, + E8C30CAF1C20B2B600C03464 /* processor_support.h */, + E8C30CB01C20B2B600C03464 /* qual.h */, + E8C30CB11C20B2B600C03464 /* radix_sort.h */, + E8C30CB21C20B2B600C03464 /* random_source.h */, + E8C30CB31C20B2B600C03464 /* random_util.h */, + E8C30CB41C20B2B600C03464 /* read.h */, + E8C30CB51C20B2B600C03464 /* ref_coord.h */, + E8C30CB61C20B2B600C03464 /* ref_read.h */, + E8C30CB71C20B2B600C03464 /* reference.h */, + E8C30CB81C20B2B600C03464 /* sam.h */, + E8C30CB91C20B2B600C03464 /* scoring.h */, + E8C30CBA1C20B2B600C03464 /* search_globals.h */, + E8C30CBB1C20B2B600C03464 /* sequence_io.h */, + E8C30CBC1C20B2B600C03464 /* shmem.h */, + E8C30CBD1C20B2B600C03464 /* simple_func.h */, + E8C30CBE1C20B2B600C03464 /* splice_site_mem.h */, + E8C30CBF1C20B2B600C03464 /* splice_site.h */, + E8C30CC01C20B2B600C03464 /* spliced_aligner.h */, + E8C30CC11C20B2B600C03464 /* sse_util.h */, + E8C30CC21C20B2B600C03464 /* sstring.h */, + E8C30CC31C20B2B600C03464 /* str_util.h */, + E8C30CC41C20B2B600C03464 /* threading.h */, + E8C30CC51C20B2B600C03464 /* timer.h */, + E8C30CC61C20B2B600C03464 /* tinythread.h */, + E8C30CC71C20B2B600C03464 /* tokenize.h */, + E8C30CC81C20B2B600C03464 /* tp.h */, + E8C30CC91C20B2B600C03464 /* unique.h */, + E8C30CCA1C20B2B600C03464 /* util.h */, + E8C30CCB1C20B2B600C03464 /* word_io.h */, + E8C30CCC1C20B2B600C03464 /* zbox.h */, + E8C30CCD1C20B2B600C03464 /* aligner_bt.cpp */, + E8C30CCE1C20B2B600C03464 /* aligner_cache.cpp */, + E8C30CCF1C20B2B600C03464 /* aligner_driver.cpp */, + E8C30CD01C20B2B600C03464 /* aligner_result.cpp */, + E8C30CD11C20B2B600C03464 /* aligner_seed_policy.cpp */, + E8C30CD21C20B2B600C03464 /* aligner_seed.cpp */, + E8C30CD31C20B2B600C03464 /* aligner_seed2.cpp */, + E8C30CD41C20B2B600C03464 /* aligner_sw_driver.cpp */, + E8C30CD51C20B2B600C03464 /* aligner_sw.cpp */, + E8C30CD61C20B2B600C03464 /* aligner_swsse_ee_i16.cpp */, + E8C30CD71C20B2B600C03464 /* aligner_swsse_ee_u8.cpp */, + E8C30CD81C20B2B600C03464 /* aligner_swsse_loc_i16.cpp */, + E8C30CD91C20B2B600C03464 /* aligner_swsse_loc_u8.cpp */, + E8C30CDA1C20B2B600C03464 /* aligner_swsse.cpp */, + E8C30CDB1C20B2B600C03464 /* aln_sink.cpp */, + E8C30CDC1C20B2B600C03464 /* alphabet.cpp */, + E8C30CDD1C20B2B600C03464 /* banded.cpp */, + E8C30CDE1C20B2B600C03464 /* ccnt_lut.cpp */, + E8C30CDF1C20B2B600C03464 /* diff_sample.cpp */, + E8C30CE01C20B2B600C03464 /* dp_framer.cpp */, + E8C30CE11C20B2B600C03464 /* ds.cpp */, + E8C30CE21C20B2B600C03464 /* edit.cpp */, + E8C30CE31C20B2B600C03464 /* gfm.cpp */, + E8C30CE41C20B2B600C03464 /* group_walk.cpp */, + E8C30CE51C20B2B600C03464 /* hisat_bp.cpp */, + E8C30CE61C20B2B600C03464 /* hisat2_build_main.cpp */, + E8C30CE71C20B2B600C03464 /* hisat2_build.cpp */, + E8C30CE81C20B2B600C03464 /* hisat2_inspect.cpp */, + E8C30CE91C20B2B600C03464 /* hisat2_main.cpp */, + E8C30CEA1C20B2B600C03464 /* hisat2.cpp */, + E8C30CEB1C20B2B600C03464 /* ival_list.cpp */, + E8C30CEC1C20B2B600C03464 /* limit.cpp */, + E8C30CED1C20B2B600C03464 /* ls.cpp */, + E8C30CEE1C20B2B600C03464 /* mask.cpp */, + E8C30CEF1C20B2B600C03464 /* multikey_qsort.cpp */, + E8C30CF01C20B2B600C03464 /* outq.cpp */, + E8C30CF11C20B2B600C03464 /* pat.cpp */, + E8C30CF21C20B2B600C03464 /* pe.cpp */, + E8C30CF31C20B2B600C03464 /* presets.cpp */, + E8C30CF41C20B2B600C03464 /* qual.cpp */, + E8C30CF51C20B2B600C03464 /* random_source.cpp */, + E8C30CF61C20B2B600C03464 /* random_util.cpp */, + E8C30CF71C20B2B600C03464 /* read_qseq.cpp */, + E8C30CF81C20B2B600C03464 /* ref_coord.cpp */, + E8C30CF91C20B2B600C03464 /* ref_read.cpp */, + E8C30CFA1C20B2B600C03464 /* reference.cpp */, + E8C30CFB1C20B2B600C03464 /* scoring.cpp */, + E8C30CFC1C20B2B600C03464 /* shmem.cpp */, + E8C30CFD1C20B2B600C03464 /* simple_func.cpp */, + E8C30CFE1C20B2B600C03464 /* splice_site_new.cpp */, + E8C30CFF1C20B2B600C03464 /* splice_site.cpp */, + E8C30D001C20B2B600C03464 /* sse_util.cpp */, + E8C30D011C20B2B600C03464 /* sstring.cpp */, + E8C30D021C20B2B600C03464 /* tinythread.cpp */, + E8C30D031C20B2B600C03464 /* unique.cpp */, ); - name = Document; + name = Source; sourceTree = ""; }; - E8B0DBE71934F769005ED9FA /* Source */ = { + E8C30C651C20A61400C03464 /* Document */ = { isa = PBXGroup; children = ( - E85F1AFA193501E000F85A12 /* Makefile */, - E8B0DBE81934F7AA005ED9FA /* aligner_bt.h */, - E8B0DBE91934F7AA005ED9FA /* aligner_cache.h */, - E8B0DBEA1934F7AA005ED9FA /* aligner_driver.h */, - E8B0DBEB1934F7AA005ED9FA /* aligner_metrics.h */, - E8B0DBEC1934F7AA005ED9FA /* aligner_report.h */, - E8B0DBED1934F7AA005ED9FA /* aligner_result.h */, - E8B0DBEE1934F7AA005ED9FA /* aligner_seed_policy.h */, - E8B0DBEF1934F7AA005ED9FA /* aligner_seed.h */, - E8B0DBF01934F7AA005ED9FA /* aligner_seed2.h */, - E8B0DBF11934F7AA005ED9FA /* aligner_sw_common.h */, - E8B0DBF21934F7AA005ED9FA /* aligner_sw_driver.h */, - E8B0DBF31934F7AA005ED9FA /* aligner_sw_nuc.h */, - E8B0DBF41934F7AA005ED9FA /* aligner_sw.h */, - E8B0DBF51934F7AA005ED9FA /* aligner_swsse.h */, - E8B0DBF61934F7AA005ED9FA /* aln_sink.h */, - E8B0DBF71934F7AA005ED9FA /* alphabet.h */, - E8645CE01B2B5EE00027075C /* alt.h */, - E8B0DBF81934F7AA005ED9FA /* assert_helpers.h */, - E8B0DBF91934F7AA005ED9FA /* banded.h */, - E8B0DBFA1934F7AA005ED9FA /* binary_sa_search.h */, - E8B0DBFB1934F7AA005ED9FA /* bitpack.h */, - E8B0DBFC1934F7AA005ED9FA /* blockwise_sa.h */, - E818AEAD1987FD2E00ED141B /* bp_aligner.h */, - E85766711970545400D8AAFB /* btypes.h */, - E8B0DC001934F7AA005ED9FA /* diff_sample.h */, - E8B0DC011934F7AA005ED9FA /* dp_framer.h */, - E8B0DC021934F7AA005ED9FA /* ds.h */, - E8B0DC031934F7AA005ED9FA /* edit.h */, - E8B0DC041934F7AA005ED9FA /* endian_swap.h */, - E84A38961B42CC02007343EB /* extract_snps.py */, - E84A38971B42CC02007343EB /* extract_splice_sites.py */, - E8B0DC051934F7AA005ED9FA /* fast_mutex.h */, - E8B0DC061934F7AA005ED9FA /* filebuf.h */, - E8B0DC071934F7AA005ED9FA /* formats.h */, - E8000AE71AEEC5A400E1F351 /* gbwt_graph.h */, - E88C30AA1B15E23800761CCB /* gfm.h */, - E8B0DC081934F7AA005ED9FA /* group_walk.h */, - E81BC0841980295300580916 /* hi_aligner.h */, - E8EE06DF1B15F1DE00E75FC3 /* hgfm.h */, - E8B0DC091934F7AA005ED9FA /* hier_idx_common.h */, - E8B0DC0B1934F7AA005ED9FA /* ival_list.h */, - E8B0DC0C1934F7AA005ED9FA /* limit.h */, - E8B0DC0D1934F7AA005ED9FA /* ls.h */, - E8B0DC0E1934F7AA005ED9FA /* mask.h */, - E8B0DC0F1934F7AA005ED9FA /* mem_ids.h */, - E8B0DC101934F7AA005ED9FA /* mm.h */, - E8B0DC111934F7AA005ED9FA /* multikey_qsort.h */, - E8B0DC121934F7AA005ED9FA /* opts.h */, - E8B0DC131934F7AA005ED9FA /* outq.h */, - E8B0DC141934F7AA005ED9FA /* pat.h */, - E8B0DC151934F7AA005ED9FA /* pe.h */, - E8B0DC161934F7AA005ED9FA /* presets.h */, - E8B0DC171934F7AA005ED9FA /* processor_support.h */, - E8B0DC181934F7AA005ED9FA /* qual.h */, - E8562A631B515EE5003062A4 /* radix_sort.h */, - E8B0DC191934F7AA005ED9FA /* random_source.h */, - E8B0DC1A1934F7AA005ED9FA /* random_util.h */, - E8B0DC1B1934F7AA005ED9FA /* read.h */, - E8B0DC1C1934F7AA005ED9FA /* ref_coord.h */, - E8B0DC1D1934F7AA005ED9FA /* ref_read.h */, - E8B0DC1E1934F7AA005ED9FA /* reference.h */, - E8B0DC1F1934F7AA005ED9FA /* sam.h */, - E8B0DC201934F7AA005ED9FA /* scoring.h */, - E8B0DC211934F7AA005ED9FA /* search_globals.h */, - E8B0DC221934F7AA005ED9FA /* sequence_io.h */, - E8B0DC231934F7AA005ED9FA /* shmem.h */, - E8B0DC241934F7AA005ED9FA /* simple_func.h */, - E84A38981B42CC34007343EB /* simulate_reads.py */, - E819F68819F553B100E1BD32 /* splice_site_mem.h */, - E8B0DC251934F7AA005ED9FA /* splice_site.h */, - E8B0DC261934F7AA005ED9FA /* spliced_aligner.h */, - E8B0DC271934F7AA005ED9FA /* sse_util.h */, - E8B0DC281934F7AA005ED9FA /* sstring.h */, - E8B0DC291934F7AA005ED9FA /* str_util.h */, - E8B0DC2A1934F7AA005ED9FA /* threading.h */, - E8B0DC2B1934F7AA005ED9FA /* timer.h */, - E8B0DC2C1934F7AA005ED9FA /* tinythread.h */, - E8B0DC2D1934F7AA005ED9FA /* tokenize.h */, - E89001AD1B93B7D800C63D6C /* tp.h */, - E8B0DC2E1934F7AA005ED9FA /* unique.h */, - E8B0DC2F1934F7AA005ED9FA /* util.h */, - E8B0DC301934F7AA005ED9FA /* word_io.h */, - E8B0DC311934F7AA005ED9FA /* zbox.h */, - E8B0DC321934F7AA005ED9FA /* aligner_bt.cpp */, - E8B0DC331934F7AA005ED9FA /* aligner_cache.cpp */, - E8B0DC341934F7AA005ED9FA /* aligner_driver.cpp */, - E8B0DC351934F7AA005ED9FA /* aligner_result.cpp */, - E8B0DC361934F7AA005ED9FA /* aligner_seed_policy.cpp */, - E8B0DC371934F7AA005ED9FA /* aligner_seed.cpp */, - E8B0DC381934F7AA005ED9FA /* aligner_seed2.cpp */, - E8B0DC391934F7AA005ED9FA /* aligner_sw_driver.cpp */, - E8B0DC3A1934F7AA005ED9FA /* aligner_sw.cpp */, - E8B0DC3B1934F7AA005ED9FA /* aligner_swsse_ee_i16.cpp */, - E8B0DC3C1934F7AA005ED9FA /* aligner_swsse_ee_u8.cpp */, - E8B0DC3D1934F7AA005ED9FA /* aligner_swsse_loc_i16.cpp */, - E8B0DC3E1934F7AA005ED9FA /* aligner_swsse_loc_u8.cpp */, - E8B0DC3F1934F7AA005ED9FA /* aligner_swsse.cpp */, - E8B0DC401934F7AA005ED9FA /* aln_sink.cpp */, - E8B0DC411934F7AA005ED9FA /* alphabet.cpp */, - E8B0DC421934F7AA005ED9FA /* banded.cpp */, - E8B0DC491934F7AA005ED9FA /* ccnt_lut.cpp */, - E8B0DC4A1934F7AA005ED9FA /* diff_sample.cpp */, - E8B0DC4B1934F7AA005ED9FA /* dp_framer.cpp */, - E8B0DC4C1934F7AA005ED9FA /* ds.cpp */, - E8B0DC4D1934F7AA005ED9FA /* edit.cpp */, - E861E5A51B1B3C2200362002 /* gfm.cpp */, - E8B0DC4E1934F7AA005ED9FA /* group_walk.cpp */, - E8B0DC4F1934F7AA005ED9FA /* ival_list.cpp */, - E8B0DC501934F7AA005ED9FA /* limit.cpp */, - E8B0DC511934F7AA005ED9FA /* ls.cpp */, - E8B0DC521934F7AA005ED9FA /* mask.cpp */, - E8B0DC531934F7AA005ED9FA /* multikey_qsort.cpp */, - E8B0DC541934F7AA005ED9FA /* outq.cpp */, - E8B0DC551934F7AA005ED9FA /* pat.cpp */, - E8B0DC561934F7AA005ED9FA /* pe.cpp */, - E8B0DC571934F7AA005ED9FA /* presets.cpp */, - E8B0DC581934F7AA005ED9FA /* qual.cpp */, - E8B0DC591934F7AA005ED9FA /* random_source.cpp */, - E8B0DC5A1934F7AA005ED9FA /* random_util.cpp */, - E8B0DC5B1934F7AA005ED9FA /* read_qseq.cpp */, - E8B0DC5C1934F7AA005ED9FA /* ref_coord.cpp */, - E8B0DC5D1934F7AA005ED9FA /* ref_read.cpp */, - E8B0DC5E1934F7AA005ED9FA /* reference.cpp */, - E818AEAE1987FD5100ED141B /* hisat_bp.cpp */, - E8000AE11AE9304500E1F351 /* hisat2_build_main.cpp */, - E8000AE21AE9304500E1F351 /* hisat2_build.cpp */, - E85452591B1A2B720049F2AC /* hisat2_inspect.cpp */, - E854525A1B1A2B7C0049F2AC /* hisat2_main.cpp */, - E854525B1B1A2B870049F2AC /* hisat2.cpp */, - E8B0DC651934F7AA005ED9FA /* scoring.cpp */, - E8B0DC661934F7AA005ED9FA /* shmem.cpp */, - E8B0DC671934F7AA005ED9FA /* simple_func.cpp */, - E8B0DC681934F7AA005ED9FA /* splice_site.cpp */, - E8B0DC691934F7AA005ED9FA /* sse_util.cpp */, - E8B0DC6A1934F7AA005ED9FA /* sstring.cpp */, - E8B0DC6B1934F7AA005ED9FA /* tinythread.cpp */, - E8B0DC6C1934F7AA005ED9FA /* unique.cpp */, ); - name = Source; + name = Document; sourceTree = ""; }; /* End PBXGroup section */ -/* Begin PBXLegacyTarget section */ - E8000AE31AE9324600E1F351 /* hisat2-build-s-debug */ = { - isa = PBXLegacyTarget; - buildArgumentsString = "hisat2-build-s-debug"; - buildConfigurationList = E8000AE41AE9324600E1F351 /* Build configuration list for PBXLegacyTarget "hisat2-build-s-debug" */; +/* Begin PBXNativeTarget section */ + E8C30C591C20A5DD00C03464 /* hisat2x */ = { + isa = PBXNativeTarget; + buildConfigurationList = E8C30C611C20A5DD00C03464 /* Build configuration list for PBXNativeTarget "hisat2x" */; buildPhases = ( + E8C30C561C20A5DD00C03464 /* Sources */, + E8C30C571C20A5DD00C03464 /* Frameworks */, + E8C30C581C20A5DD00C03464 /* CopyFiles */, ); - buildToolPath = /usr/bin/make; - buildWorkingDirectory = /Users/infphilo/work/hisat2; - dependencies = ( - ); - name = "hisat2-build-s-debug"; - passBuildSettingsInEnvironment = 1; - productName = "sawhi-align-debug"; - }; - E818AEAF19880CA400ED141B /* hisat-bp-bin-debug */ = { - isa = PBXLegacyTarget; - buildArgumentsString = "hisat-bp-bin-debug"; - buildConfigurationList = E818AEB019880CA400ED141B /* Build configuration list for PBXLegacyTarget "hisat-bp-bin-debug" */; - buildPhases = ( + buildRules = ( ); - buildToolPath = /usr/bin/make; - buildWorkingDirectory = /Users/infphilo/work/hisat2; dependencies = ( ); - name = "hisat-bp-bin-debug"; - passBuildSettingsInEnvironment = 1; - productName = "sawhi-align-debug"; - }; - E854525E1B1A2E350049F2AC /* hisat2-inspect-s-debug */ = { - isa = PBXLegacyTarget; - buildArgumentsString = "hisat2-inspect-s-debug"; - buildConfigurationList = E854525F1B1A2E350049F2AC /* Build configuration list for PBXLegacyTarget "hisat2-inspect-s-debug" */; + name = hisat2x; + productName = hisat2; + productReference = E8C30C5A1C20A5DD00C03464 /* hisat2x */; + productType = "com.apple.product-type.tool"; + }; + E8C30C691C20A64A00C03464 /* hisat2-buildx */ = { + isa = PBXNativeTarget; + buildConfigurationList = E8C30C6E1C20A64A00C03464 /* Build configuration list for PBXNativeTarget "hisat2-buildx" */; buildPhases = ( + E8C30C661C20A64A00C03464 /* Sources */, + E8C30C671C20A64A00C03464 /* Frameworks */, + E8C30C681C20A64A00C03464 /* CopyFiles */, ); - buildToolPath = /usr/bin/make; - buildWorkingDirectory = /Users/infphilo/work/hisat2; - dependencies = ( - ); - name = "hisat2-inspect-s-debug"; - passBuildSettingsInEnvironment = 1; - productName = "sawhi-align-debug"; - }; - E85452621B1A2E400049F2AC /* hisat2-align-s-debug */ = { - isa = PBXLegacyTarget; - buildArgumentsString = "USE_SRA=1 NCBI_NGS_DIR=/Users/infphilo/work/devel/ngs-sdk.1.2.2-mac NCBI_VDB_DIR=/Users/infphilo/work/devel/ngs-sdk.1.2.2-mac hisat2-align-s-debug"; - buildConfigurationList = E85452631B1A2E400049F2AC /* Build configuration list for PBXLegacyTarget "hisat2-align-s-debug" */; - buildPhases = ( + buildRules = ( ); - buildToolPath = /usr/bin/make; - buildWorkingDirectory = /Users/infphilo/work/hisat2; dependencies = ( ); - name = "hisat2-align-s-debug"; - passBuildSettingsInEnvironment = 1; - productName = "sawhi-align-debug"; - }; - E8562A641B53FBDE003062A4 /* hisat2-align-s */ = { - isa = PBXLegacyTarget; - buildArgumentsString = "USE_SRA=0 hisat2-align-s"; - buildConfigurationList = E8562A651B53FBDE003062A4 /* Build configuration list for PBXLegacyTarget "hisat2-align-s" */; + name = "hisat2-buildx"; + productName = "hisat2-buildx"; + productReference = E8C30C6A1C20A64A00C03464 /* hisat2-buildx */; + productType = "com.apple.product-type.tool"; + }; + E8C30C741C20A65400C03464 /* hisat2-inspectx */ = { + isa = PBXNativeTarget; + buildConfigurationList = E8C30C791C20A65400C03464 /* Build configuration list for PBXNativeTarget "hisat2-inspectx" */; buildPhases = ( + E8C30C711C20A65400C03464 /* Sources */, + E8C30C721C20A65400C03464 /* Frameworks */, + E8C30C731C20A65400C03464 /* CopyFiles */, + ); + buildRules = ( ); - buildToolPath = /usr/bin/make; - buildWorkingDirectory = /Users/infphilo/work/hisat2; dependencies = ( ); - name = "hisat2-align-s"; - passBuildSettingsInEnvironment = 1; - productName = "sawhi-align-debug"; - }; - E861E5A61B1F35DC00362002 /* hisat2-build-s */ = { - isa = PBXLegacyTarget; - buildArgumentsString = "hisat2-build-s"; - buildConfigurationList = E861E5A71B1F35DC00362002 /* Build configuration list for PBXLegacyTarget "hisat2-build-s" */; + name = "hisat2-inspectx"; + productName = "hisat2-inspectx"; + productReference = E8C30C751C20A65400C03464 /* hisat2-inspectx */; + productType = "com.apple.product-type.tool"; + }; + E8EAEDD21C24675500E62E69 /* hisat2-buildlx */ = { + isa = PBXNativeTarget; + buildConfigurationList = E8EAEDE41C24675500E62E69 /* Build configuration list for PBXNativeTarget "hisat2-buildlx" */; buildPhases = ( + E8EAEDD31C24675500E62E69 /* Sources */, + E8EAEDE21C24675500E62E69 /* Frameworks */, + E8EAEDE31C24675500E62E69 /* CopyFiles */, + ); + buildRules = ( ); - buildToolPath = /usr/bin/make; - buildWorkingDirectory = /Users/infphilo/work/hisat2; dependencies = ( ); - name = "hisat2-build-s"; - passBuildSettingsInEnvironment = 1; - productName = "sawhi-align-debug"; + name = "hisat2-buildlx"; + productName = "hisat2-buildx"; + productReference = E8EAEDE71C24675500E62E69 /* hisat2-buildlx */; + productType = "com.apple.product-type.tool"; }; -/* End PBXLegacyTarget section */ +/* End PBXNativeTarget section */ /* Begin PBXProject section */ - E8B0DBD21934F022005ED9FA /* Project object */ = { + E8C30C521C20A5DD00C03464 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0700; - ORGANIZATIONNAME = "___FULLUSERNAME___"; + LastUpgradeCheck = 0720; + ORGANIZATIONNAME = "Daehwan Kim"; + TargetAttributes = { + E8C30C591C20A5DD00C03464 = { + CreatedOnToolsVersion = 7.2; + }; + E8C30C691C20A64A00C03464 = { + CreatedOnToolsVersion = 7.2; + }; + E8C30C741C20A65400C03464 = { + CreatedOnToolsVersion = 7.2; + }; + }; }; - buildConfigurationList = E8B0DBD51934F022005ED9FA /* Build configuration list for PBXProject "hisat2" */; + buildConfigurationList = E8C30C551C20A5DD00C03464 /* Build configuration list for PBXProject "hisat2" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); - mainGroup = E8B0DBD11934F022005ED9FA; - productRefGroup = E8B0DBDB1934F022005ED9FA /* Products */; + mainGroup = E8C30C511C20A5DD00C03464; + productRefGroup = E8C30C5B1C20A5DD00C03464 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - E818AEAF19880CA400ED141B /* hisat-bp-bin-debug */, - E861E5A61B1F35DC00362002 /* hisat2-build-s */, - E8000AE31AE9324600E1F351 /* hisat2-build-s-debug */, - E854525E1B1A2E350049F2AC /* hisat2-inspect-s-debug */, - E85452621B1A2E400049F2AC /* hisat2-align-s-debug */, - E8562A641B53FBDE003062A4 /* hisat2-align-s */, + E8C30C591C20A5DD00C03464 /* hisat2x */, + E8C30C691C20A64A00C03464 /* hisat2-buildx */, + E8C30C741C20A65400C03464 /* hisat2-inspectx */, + E8EAEDD21C24675500E62E69 /* hisat2-buildlx */, ); }; /* End PBXProject section */ +/* Begin PBXSourcesBuildPhase section */ + E8C30C561C20A5DD00C03464 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E8EAEE201C24899300E62E69 /* ref_read.cpp in Sources */, + E8EAEE1F1C24896600E62E69 /* reference.cpp in Sources */, + E8EAEE1E1C24894300E62E69 /* tinythread.cpp in Sources */, + E8EAEE1D1C24892B00E62E69 /* gfm.cpp in Sources */, + E8EAEE1C1C24891800E62E69 /* alphabet.cpp in Sources */, + E8EAEE1B1C2488EA00E62E69 /* edit.cpp in Sources */, + E8EAEE1A1C2488D600E62E69 /* limit.cpp in Sources */, + E8EAEE191C2488AF00E62E69 /* ds.cpp in Sources */, + E8EAEE181C24886400E62E69 /* ccnt_lut.cpp in Sources */, + E8EAEE171C2487FF00E62E69 /* diff_sample.cpp in Sources */, + E8EAEE151C246EFC00E62E69 /* aligner_driver.cpp in Sources */, + E8EAEE161C246EFC00E62E69 /* splice_site.cpp in Sources */, + E8EAEE0A1C246EE900E62E69 /* aligner_bt.cpp in Sources */, + E8EAEE0B1C246EE900E62E69 /* aligner_swsse_ee_i16.cpp in Sources */, + E8EAEE0C1C246EE900E62E69 /* aligner_swsse_ee_u8.cpp in Sources */, + E8EAEE0D1C246EE900E62E69 /* aligner_swsse_loc_i16.cpp in Sources */, + E8EAEE0E1C246EE900E62E69 /* aligner_swsse_loc_u8.cpp in Sources */, + E8EAEE0F1C246EE900E62E69 /* aligner_swsse.cpp in Sources */, + E8EAEE101C246EE900E62E69 /* outq.cpp in Sources */, + E8EAEE111C246EE900E62E69 /* random_source.cpp in Sources */, + E8EAEE121C246EE900E62E69 /* random_util.cpp in Sources */, + E8EAEE131C246EE900E62E69 /* simple_func.cpp in Sources */, + E8EAEE141C246EE900E62E69 /* sse_util.cpp in Sources */, + E8EAEE011C246EB200E62E69 /* aligner_result.cpp in Sources */, + E8EAEE021C246EB200E62E69 /* aln_sink.cpp in Sources */, + E8EAEE031C246EB200E62E69 /* dp_framer.cpp in Sources */, + E8EAEE041C246EB200E62E69 /* mask.cpp in Sources */, + E8EAEE051C246EB200E62E69 /* pe.cpp in Sources */, + E8EAEE061C246EB200E62E69 /* presets.cpp in Sources */, + E8EAEE071C246EB200E62E69 /* ref_coord.cpp in Sources */, + E8EAEE081C246EB200E62E69 /* scoring.cpp in Sources */, + E8EAEE091C246EB200E62E69 /* unique.cpp in Sources */, + E8EAEDFA1C246E5100E62E69 /* aligner_cache.cpp in Sources */, + E8EAEDFB1C246E5100E62E69 /* aligner_seed_policy.cpp in Sources */, + E8EAEDFC1C246E5100E62E69 /* aligner_seed.cpp in Sources */, + E8EAEDFD1C246E5100E62E69 /* aligner_seed2.cpp in Sources */, + E8EAEDFE1C246E5100E62E69 /* aligner_sw_driver.cpp in Sources */, + E8EAEDFF1C246E5100E62E69 /* aligner_sw.cpp in Sources */, + E8EAEE001C246E5100E62E69 /* read_qseq.cpp in Sources */, + E8EAEDF61C246E3100E62E69 /* hisat2_main.cpp in Sources */, + E8EAEDF71C246E3100E62E69 /* hisat2.cpp in Sources */, + E8EAEDF81C246E3100E62E69 /* pat.cpp in Sources */, + E8EAEDF91C246E3100E62E69 /* qual.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8C30C661C20A64A00C03464 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E8EAEDE81C246CDC00E62E69 /* diff_sample.cpp in Sources */, + E8EAEDD01C24667700E62E69 /* hisat2_build_main.cpp in Sources */, + E8EAEDD11C24667700E62E69 /* hisat2_build.cpp in Sources */, + E8EAEDCC1C24666400E62E69 /* limit.cpp in Sources */, + E8EAEDCD1C24666400E62E69 /* multikey_qsort.cpp in Sources */, + E8EAEDCE1C24666400E62E69 /* random_source.cpp in Sources */, + E8EAEDCF1C24666400E62E69 /* tinythread.cpp in Sources */, + E8EAEDC41C24663D00E62E69 /* alphabet.cpp in Sources */, + E8EAEDC51C24663D00E62E69 /* ccnt_lut.cpp in Sources */, + E8EAEDC61C24663D00E62E69 /* ds.cpp in Sources */, + E8EAEDC71C24663D00E62E69 /* edit.cpp in Sources */, + E8EAEDC81C24663D00E62E69 /* gfm.cpp in Sources */, + E8EAEDC91C24663D00E62E69 /* ref_read.cpp in Sources */, + E8EAEDCA1C24663D00E62E69 /* reference.cpp in Sources */, + E8EAEDCB1C24663D00E62E69 /* shmem.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8C30C711C20A65400C03464 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E8EAEDF21C246DB200E62E69 /* hisat2_inspect.cpp in Sources */, + E8EAEDF31C246DB200E62E69 /* limit.cpp in Sources */, + E8EAEDF41C246DB200E62E69 /* random_source.cpp in Sources */, + E8EAEDF51C246DB200E62E69 /* tinythread.cpp in Sources */, + E8EAEDE91C246DA200E62E69 /* alphabet.cpp in Sources */, + E8EAEDEA1C246DA200E62E69 /* ccnt_lut.cpp in Sources */, + E8EAEDEB1C246DA200E62E69 /* ds.cpp in Sources */, + E8EAEDEC1C246DA200E62E69 /* edit.cpp in Sources */, + E8EAEDED1C246DA200E62E69 /* gfm.cpp in Sources */, + E8EAEDEE1C246DA200E62E69 /* multikey_qsort.cpp in Sources */, + E8EAEDEF1C246DA200E62E69 /* ref_read.cpp in Sources */, + E8EAEDF01C246DA200E62E69 /* reference.cpp in Sources */, + E8EAEDF11C246DA200E62E69 /* shmem.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8EAEDD31C24675500E62E69 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E8EAEDD41C24675500E62E69 /* hisat2_build_main.cpp in Sources */, + E8EAEDD51C24675500E62E69 /* hisat2_build.cpp in Sources */, + E8EAEDD61C24675500E62E69 /* limit.cpp in Sources */, + E8EAEDD71C24675500E62E69 /* multikey_qsort.cpp in Sources */, + E8EAEDD81C24675500E62E69 /* random_source.cpp in Sources */, + E8EAEDD91C24675500E62E69 /* tinythread.cpp in Sources */, + E8EAEDDA1C24675500E62E69 /* alphabet.cpp in Sources */, + E8EAEDDB1C24675500E62E69 /* ccnt_lut.cpp in Sources */, + E8EAEDDC1C24675500E62E69 /* ds.cpp in Sources */, + E8EAEDDD1C24675500E62E69 /* edit.cpp in Sources */, + E8EAEDDE1C24675500E62E69 /* gfm.cpp in Sources */, + E8EAEDDF1C24675500E62E69 /* ref_read.cpp in Sources */, + E8EAEDE01C24675500E62E69 /* reference.cpp in Sources */, + E8EAEDE11C24675500E62E69 /* shmem.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + /* Begin XCBuildConfiguration section */ - E8000AE51AE9324600E1F351 /* Debug */ = { + E8C30C5F1C20A5DD00C03464 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - COPY_PHASE_STRIP = YES; - DEBUGGING_SYMBOLS = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", "$(inherited)", + "DEBUG=1", + BOWTIE_MM, + "MACOS=1", + POPCNT_CAPABILITY, + BOWTIE2, + "HISAT2_VERSION=\"\\\"`cat VERSION`\\\"\"", + "BUILD_HOST=\"\\\"`hostname`\\\"\"", + "BUILD_TIME=\"\\\"`date`\\\"\"", + "COMPILER_VERSION=\"\\\"`$(CXX) -v 2>&1 | tail -1`\\\"\"", + "COMPILER_OPTIONS=\"\\\"test\\\"\"", ); - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat2-build-s-debug"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; }; name = Debug; }; - E8000AE61AE9324600E1F351 /* Release */ = { + E8C30C601C20A5DD00C03464 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat2-build-s-debug"; - }; - name = Release; - }; - E818AEB119880CA400ED141B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUGGING_SYMBOLS = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", "$(inherited)", + "DEBUG=0", + BOWTIE_MM, + "MACOS=1", + POPCNT_CAPABILITY, + BOWTIE2, + "HISAT2_VERSION=\"\\\"`cat VERSION`\\\"\"", + "BUILD_HOST=\"\\\"`hostname`\\\"\"", + "BUILD_TIME=\"\\\"`date`\\\"\"", + "COMPILER_VERSION=\"\\\"`$(CXX) -v 2>&1 | tail -1`\\\"\"", + "COMPILER_OPTIONS=\"\\\"test\\\"\"", ); - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat-bp-bin-debug"; - }; - name = Debug; - }; - E818AEB219880CA400ED141B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat-bp-bin-debug"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; }; name = Release; }; - E85452601B1A2E350049F2AC /* Debug */ = { + E8C30C621C20A5DD00C03464 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - DEBUGGING_SYMBOLS = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat2-inspect-s-debug"; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; - E85452611B1A2E350049F2AC /* Release */ = { + E8C30C631C20A5DD00C03464 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat2-inspect-s-debug"; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; - E85452641B1A2E400049F2AC /* Debug */ = { + E8C30C6F1C20A64A00C03464 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - COPY_PHASE_STRIP = YES; - DEBUGGING_SYMBOLS = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - NCBI_NGS_DIR = "/usr/local/ngs/ngs-sdk"; - NCBI_VDB_DIR = "/usr/local/ncbi/ncbi-vdb"; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat2-align-s-debug"; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; - E85452651B1A2E400049F2AC /* Release */ = { + E8C30C701C20A64A00C03464 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COPY_PHASE_STRIP = NO; - NCBI_NGS_DIR = "/usr/local/ngs/ngs-sdk"; - NCBI_VDB_DIR = "/usr/local/ncbi/ncbi-vdb"; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat2-align-s-debug"; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; - E8562A661B53FBDE003062A4 /* Debug */ = { + E8C30C7A1C20A65400C03464 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - DEBUGGING_SYMBOLS = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - NCBI_NGS_DIR = "/usr/local/ngs/ngs-sdk"; - NCBI_VDB_DIR = "/usr/local/ncbi/ncbi-vdb"; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat2-align-s"; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; - E8562A671B53FBDE003062A4 /* Release */ = { + E8C30C7B1C20A65400C03464 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - NCBI_NGS_DIR = "/usr/local/ngs/ngs-sdk"; - NCBI_VDB_DIR = "/usr/local/ncbi/ncbi-vdb"; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat2-align-s"; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; - E861E5A81B1F35DC00362002 /* Debug */ = { + E8EAEDE51C24675500E62E69 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - COPY_PHASE_STRIP = YES; - DEBUGGING_SYMBOLS = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", "$(inherited)", + BOWTIE_64BIT_INDEX, ); - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat2-build-s"; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; - E861E5A91B1F35DC00362002 /* Release */ = { + E8EAEDE61C24675500E62E69 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COPY_PHASE_STRIP = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "hisat2-build-s"; - }; - name = Release; - }; - E8B0DBE11934F022005ED9FA /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", "$(inherited)", + "DEBUG=0", + BOWTIE_MM, + "MACOS=1", + POPCNT_CAPABILITY, + BOWTIE2, + BOWTIE_64BIT_INDEX, + "HISAT2_VERSION=\"\\\"`cat VERSION`\\\"\"", + "BUILD_HOST=\"\\\"`hostname`\\\"\"", + "BUILD_TIME=\"\\\"`date`\\\"\"", + "COMPILER_VERSION=\"\\\"`$(CXX) -v 2>&1 | tail -1`\\\"\"", + "COMPILER_OPTIONS=\"\\\"test\\\"\"", ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - E8B0DBE21934F022005ED9FA /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.10; - SDKROOT = macosx; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - E8000AE41AE9324600E1F351 /* Build configuration list for PBXLegacyTarget "hisat2-build-s-debug" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E8000AE51AE9324600E1F351 /* Debug */, - E8000AE61AE9324600E1F351 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - E818AEB019880CA400ED141B /* Build configuration list for PBXLegacyTarget "hisat-bp-bin-debug" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E818AEB119880CA400ED141B /* Debug */, - E818AEB219880CA400ED141B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - E854525F1B1A2E350049F2AC /* Build configuration list for PBXLegacyTarget "hisat2-inspect-s-debug" */ = { + E8C30C551C20A5DD00C03464 /* Build configuration list for PBXProject "hisat2" */ = { isa = XCConfigurationList; buildConfigurations = ( - E85452601B1A2E350049F2AC /* Debug */, - E85452611B1A2E350049F2AC /* Release */, + E8C30C5F1C20A5DD00C03464 /* Debug */, + E8C30C601C20A5DD00C03464 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; + defaultConfigurationName = Release; }; - E85452631B1A2E400049F2AC /* Build configuration list for PBXLegacyTarget "hisat2-align-s-debug" */ = { + E8C30C611C20A5DD00C03464 /* Build configuration list for PBXNativeTarget "hisat2x" */ = { isa = XCConfigurationList; buildConfigurations = ( - E85452641B1A2E400049F2AC /* Debug */, - E85452651B1A2E400049F2AC /* Release */, + E8C30C621C20A5DD00C03464 /* Debug */, + E8C30C631C20A5DD00C03464 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; + defaultConfigurationName = Release; }; - E8562A651B53FBDE003062A4 /* Build configuration list for PBXLegacyTarget "hisat2-align-s" */ = { + E8C30C6E1C20A64A00C03464 /* Build configuration list for PBXNativeTarget "hisat2-buildx" */ = { isa = XCConfigurationList; buildConfigurations = ( - E8562A661B53FBDE003062A4 /* Debug */, - E8562A671B53FBDE003062A4 /* Release */, + E8C30C6F1C20A64A00C03464 /* Debug */, + E8C30C701C20A64A00C03464 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; + defaultConfigurationName = Release; }; - E861E5A71B1F35DC00362002 /* Build configuration list for PBXLegacyTarget "hisat2-build-s" */ = { + E8C30C791C20A65400C03464 /* Build configuration list for PBXNativeTarget "hisat2-inspectx" */ = { isa = XCConfigurationList; buildConfigurations = ( - E861E5A81B1F35DC00362002 /* Debug */, - E861E5A91B1F35DC00362002 /* Release */, + E8C30C7A1C20A65400C03464 /* Debug */, + E8C30C7B1C20A65400C03464 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; + defaultConfigurationName = Release; }; - E8B0DBD51934F022005ED9FA /* Build configuration list for PBXProject "hisat2" */ = { + E8EAEDE41C24675500E62E69 /* Build configuration list for PBXNativeTarget "hisat2-buildlx" */ = { isa = XCConfigurationList; buildConfigurations = ( - E8B0DBE11934F022005ED9FA /* Debug */, - E8B0DBE21934F022005ED9FA /* Release */, + E8EAEDE51C24675500E62E69 /* Debug */, + E8EAEDE61C24675500E62E69 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = E8B0DBD21934F022005ED9FA /* Project object */; + rootObject = E8C30C521C20A5DD00C03464 /* Project object */; } diff --git a/hisat2_build.cpp b/hisat2_build.cpp index 8de706e0..5a22314f 100644 --- a/hisat2_build.cpp +++ b/hisat2_build.cpp @@ -237,7 +237,7 @@ static struct option long_options[] = { * exit with an error and a usage message. */ template -static int parseNumber(T lower, const char *errmsg) { +static T parseNumber(T lower, const char *errmsg) { char *endPtr= NULL; T t = (T)strtoll(optarg, &endPtr, 10); if (endPtr != NULL) { @@ -450,6 +450,8 @@ static void driver( cerr << "Warning: All fasta inputs were empty" << endl; throw 1; } + filesWritten.push_back(outfile + ".1." + gfm_ext); + filesWritten.push_back(outfile + ".2." + gfm_ext); // Vector for the ordered list of "records" comprising the input // sequences. A record represents a stretch of unambiguous // characters in one of the input sequences. @@ -471,9 +473,11 @@ static void driver( assert_gt(sztot.second, 0); assert_gt(szs.size(), 0); - // Construct index from input strings and parameters - filesWritten.push_back(outfile + ".1." + gfm_ext); - filesWritten.push_back(outfile + ".2." + gfm_ext); + // Construct index from input strings and parameters + filesWritten.push_back(outfile + ".5." + gfm_ext); + filesWritten.push_back(outfile + ".6." + gfm_ext); + filesWritten.push_back(outfile + ".7." + gfm_ext); + filesWritten.push_back(outfile + ".8." + gfm_ext); TStr s; HGFM hGFM( s, diff --git a/hisat2_inspect.cpp b/hisat2_inspect.cpp index 4544e778..3564d8aa 100644 --- a/hisat2_inspect.cpp +++ b/hisat2_inspect.cpp @@ -17,8 +17,6 @@ * along with HISAT 2. If not, see . */ -#ifdef HISAT2_INSPECT_MAIN - #include #include #include @@ -770,5 +768,3 @@ int main(int argc, char **argv) { return e; } } - -#endif /*def HISAT2_INSPECT_MAIN*/ diff --git a/multikey_qsort.cpp b/multikey_qsort.cpp index adbd2edb..6afa98b1 100644 --- a/multikey_qsort.cpp +++ b/multikey_qsort.cpp @@ -18,6 +18,3 @@ */ #include "multikey_qsort.h" - -// 5 64-element buckets for bucket-sorting A, C, G, T, $ -TIndexOffU bkts[4][4 * 1024 * 1024]; diff --git a/multikey_qsort.h b/multikey_qsort.h index 5c2e0416..283e513d 100644 --- a/multikey_qsort.h +++ b/multikey_qsort.h @@ -503,93 +503,134 @@ void mkeyQSortSuf( * the caller would let s2 be an array s2[] where s2 is the same length * as s and s2[i] = i). */ +struct QSortRange { + size_t begin; + size_t end; + size_t depth; +}; template void mkeyQSortSuf2( - const T& host, - size_t hlen, - TIndexOffU *s, - size_t slen, - TIndexOffU *s2, - int hi, - size_t begin, - size_t end, - size_t depth, - size_t upto = OFF_MASK) + const T& host, + size_t hlen, + TIndexOffU *s, + size_t slen, + TIndexOffU *s2, + int hi, + size_t _begin, + size_t _end, + size_t _depth, + size_t upto = OFF_MASK, + EList* boundaries = NULL) { - // Helper for making the recursive call; sanity-checks arguments to - // make sure that the problem actually got smaller. - #define MQS_RECURSE_SUF_DS(nbegin, nend, ndepth) { \ - assert(nbegin > begin || nend < end || ndepth > depth); \ - if(ndepth < upto) { /* don't exceed depth of 'upto' */ \ - mkeyQSortSuf2(host, hlen, s, slen, s2, hi, nbegin, nend, ndepth, upto); \ - } \ - } - assert_leq(begin, slen); - assert_leq(end, slen); - size_t a, b, c, d, /*e,*/ r; - size_t n = end - begin; - if(n <= 1) return; // 1-element list already sorted - CHOOSE_AND_SWAP_PIVOT(SWAP2, CHAR_AT_SUF); // pick pivot, swap it into [begin] - int v = CHAR_AT_SUF(begin, depth); // v <- randomly-selected pivot value - #ifndef NDEBUG - { - bool stillInBounds = false; - for(size_t i = begin; i < end; i++) { - if(depth < (hlen-s[i])) { - stillInBounds = true; - break; - } else { /* already fell off this suffix */ } - } - assert(stillInBounds); // >=1 suffix must still be in bounds - } - #endif - a = b = begin; - c = d = /*e =*/ end-1; - while(true) { - // Invariant: everything before a is = pivot, everything - // between a and b is < - int bc = 0; // shouldn't have to init but gcc on Mac complains - while(b <= c && v >= (bc = CHAR_AT_SUF(b, depth))) { - if(v == bc) { - SWAP2(s, s2, a, b); a++; - } - b++; - } - // Invariant: everything after d is = pivot, everything - // between c and d is > - int cc = 0; // shouldn't have to init but gcc on Mac complains - while(b <= c && v <= (cc = CHAR_AT_SUF(c, depth))) { - if(v == cc) { - SWAP2(s, s2, c, d); d--; /*e--;*/ - } - //else if(c == e && v == hi) e--; - c--; - } - if(b > c) break; - SWAP2(s, s2, b, c); - b++; - c--; - } - assert(a > begin || c < end-1); // there was at least one =s - assert_lt(/*e*/d-c, n); // they can't all have been > pivot - assert_lt(b-a, n); // they can't all have been < pivot - assert(assertPartitionedSuf(host, s, slen, hi, v, begin, end, depth)); // check pre-=-swap invariant - r = min(a-begin, b-a); VECSWAP2(s, s2, begin, b-r, r); // swap left = to center - r = min(d-c, end-d-1); VECSWAP2(s, s2, b, end-r, r); // swap right = to center - assert(assertPartitionedSuf2(host, s, slen, hi, v, begin, end, depth)); // check post-=-swap invariant - r = b-a; // r <- # of <'s - if(r > 0) { - MQS_RECURSE_SUF_DS(begin, begin + r, depth); // recurse on <'s - } - // Do not recurse on ='s if the pivot was the off-the-end value; - // they're already fully sorted - if(v != hi) { - MQS_RECURSE_SUF_DS(begin + r, begin + r + (a-begin) + (end-d-1), depth+1); // recurse on ='s - } - r = d-c; // r <- # of >'s excluding those exhausted - if(r > 0 && v < hi-1) { - MQS_RECURSE_SUF_DS(end-r, end, depth); // recurse on >'s - } + ELList block_list; + while(true) { + size_t begin = 0, end = 0, depth = 0; + if(block_list.size() == 0) { + begin = _begin; + end = _end; + depth = _depth; + } else { + if(block_list.back().size() > 0) { + begin = block_list.back()[0].begin; + end = block_list.back()[0].end; + depth = block_list.back()[0].depth; + block_list.back().erase(0); + } else { + block_list.resize(block_list.size() - 1); + if(block_list.size() == 0) { + break; + } + } + } + if(depth == upto) { + if(boundaries != NULL) { + (*boundaries).push_back(end); + } + continue; + } + assert_leq(begin, slen); + assert_leq(end, slen); + size_t a, b, c, d, /*e,*/ r; + size_t n = end - begin; + if(n <= 1) { // 1-element list already sorted + if(n == 1 && boundaries != NULL) { + boundaries->push_back(end); + } + continue; + } + CHOOSE_AND_SWAP_PIVOT(SWAP2, CHAR_AT_SUF); // pick pivot, swap it into [begin] + int v = CHAR_AT_SUF(begin, depth); // v <- randomly-selected pivot value +#ifndef NDEBUG + { + bool stillInBounds = false; + for(size_t i = begin; i < end; i++) { + if(depth < (hlen-s[i])) { + stillInBounds = true; + break; + } else { /* already fell off this suffix */ } + } + assert(stillInBounds); // >=1 suffix must still be in bounds + } +#endif + a = b = begin; + c = d = /*e =*/ end-1; + while(true) { + // Invariant: everything before a is = pivot, everything + // between a and b is < + int bc = 0; // shouldn't have to init but gcc on Mac complains + while(b <= c && v >= (bc = CHAR_AT_SUF(b, depth))) { + if(v == bc) { + SWAP2(s, s2, a, b); a++; + } + b++; + } + // Invariant: everything after d is = pivot, everything + // between c and d is > + int cc = 0; // shouldn't have to init but gcc on Mac complains + while(b <= c && v <= (cc = CHAR_AT_SUF(c, depth))) { + if(v == cc) { + SWAP2(s, s2, c, d); d--; /*e--;*/ + } + //else if(c == e && v == hi) e--; + c--; + } + if(b > c) break; + SWAP2(s, s2, b, c); + b++; + c--; + } + assert(a > begin || c < end-1); // there was at least one =s + assert_lt(/*e*/d-c, n); // they can't all have been > pivot + assert_lt(b-a, n); // they can't all have been < pivot + assert(assertPartitionedSuf(host, s, slen, hi, v, begin, end, depth)); // check pre-=-swap invariant + r = min(a-begin, b-a); VECSWAP2(s, s2, begin, b-r, r); // swap left = to center + r = min(d-c, end-d-1); VECSWAP2(s, s2, b, end-r, r); // swap right = to center + assert(assertPartitionedSuf2(host, s, slen, hi, v, begin, end, depth)); // check post-=-swap invariant + r = b-a; // r <- # of <'s + block_list.expand(); + block_list.back().clear(); + if(r > 0) { // recurse on <'s + block_list.back().expand(); + block_list.back().back().begin = begin; + block_list.back().back().end = begin + r; + block_list.back().back().depth = depth; + } + // Do not recurse on ='s if the pivot was the off-the-end value; + // they're already fully sorted + if(v != hi) { // recurse on ='s + block_list.back().expand(); + block_list.back().back().begin = begin + r; + block_list.back().back().end = begin + r + (a-begin) + (end-d-1); + block_list.back().back().depth = depth + 1; + } + r = d-c; // r <- # of >'s excluding those exhausted + if(r > 0 && v < hi-1) { // recurse on >'s + block_list.back().expand(); + block_list.back().back().begin = end - r; + block_list.back().back().end = end; + block_list.back().back().depth = depth; + } + } } /** @@ -598,30 +639,31 @@ void mkeyQSortSuf2( */ template void mkeyQSortSuf2( - const T& host, - TIndexOffU *s, - size_t slen, - TIndexOffU *s2, - int hi, - bool verbose = false, - bool sanityCheck = false, - size_t upto = OFF_MASK) + const T& host, + TIndexOffU *s, + size_t slen, + TIndexOffU *s2, + int hi, + bool verbose = false, + bool sanityCheck = false, + size_t upto = OFF_MASK, + EList* boundaries = NULL) { - size_t hlen = host.length(); - if(sanityCheck) sanityCheckInputSufs(s, slen); - TIndexOffU *sOrig = NULL; - if(sanityCheck) { - sOrig = new TIndexOffU[slen]; - memcpy(sOrig, s, OFF_SIZE * slen); - } - mkeyQSortSuf2(host, hlen, s, slen, s2, hi, (size_t)0, slen, (size_t)0, upto); - if(sanityCheck) { - sanityCheckOrderedSufs(host, hlen, s, slen, upto); - for(size_t i = 0; i < slen; i++) { - assert_eq(s[i], sOrig[s2[i]]); - } - delete[] sOrig; - } + size_t hlen = host.length(); + if(sanityCheck) sanityCheckInputSufs(s, slen); + TIndexOffU *sOrig = NULL; + if(sanityCheck) { + sOrig = new TIndexOffU[slen]; + memcpy(sOrig, s, OFF_SIZE * slen); + } + mkeyQSortSuf2(host, hlen, s, slen, s2, hi, (size_t)0, slen, (size_t)0, upto, boundaries); + if(sanityCheck) { + sanityCheckOrderedSufs(host, hlen, s, slen, upto); + for(size_t i = 0; i < slen; i++) { + assert_eq(s[i], sOrig[s2[i]]); + } + delete[] sOrig; + } } // Ugly but necessary; otherwise the compiler chokes dramatically on @@ -805,9 +847,6 @@ void qsortSufDcU8( #define BUCKET_SORT_CUTOFF (4 * 1024 * 1024) #define SELECTION_SORT_CUTOFF 6 -// 5 64-element buckets for bucket-sorting A, C, G, T, $ -extern TIndexOffU bkts[4][4 * 1024 * 1024]; - /** * Straightforwardly obtain a uint8_t-ized version of t[off]. This * works fine as long as TStr is not packed. @@ -971,77 +1010,97 @@ static void selectionSortSufDcU8( template static void bucketSortSufDcU8( - const T1& host1, - const T2& host, - size_t hlen, - TIndexOffU* s, - size_t slen, - const DifferenceCoverSample& dc, - uint8_t hi, - size_t begin, - size_t end, - size_t depth, - bool sanityCheck = false) + const T1& host1, + const T2& host, + size_t hlen, + TIndexOffU* s, + size_t slen, + const DifferenceCoverSample& dc, + uint8_t hi, + size_t _begin, + size_t _end, + size_t _depth, + bool sanityCheck = false) { - size_t cnts[] = { 0, 0, 0, 0, 0 }; - #define BKT_RECURSE_SUF_DC_U8(nbegin, nend) { \ - bucketSortSufDcU8(host1, host, hlen, s, slen, dc, hi, \ - (nbegin), (nend), depth+1, sanityCheck); \ - } - assert_gt(end, begin); - assert_leq(end-begin, BUCKET_SORT_CUTOFF); - assert_eq(hi, 4); - if(end == begin+1) return; // 1-element list already sorted - if(depth > dc.v()) { - // Quicksort the remaining suffixes using difference cover - // for constant-time comparisons; this is O(k*log(k)) where - // k=(end-begin) - qsortSufDcU8(host1, host, hlen, s, slen, dc, begin, end, sanityCheck); - return; - } - if(end-begin <= SELECTION_SORT_CUTOFF) { - // Bucket sort remaining items - selectionSortSufDcU8(host1, host, hlen, s, slen, dc, hi, - begin, end, depth, sanityCheck); - if(sanityCheck) { - sanityCheckOrderedSufs(host1, hlen, s, slen, - OFF_MASK, begin, end); - } - return; - } - for(size_t i = begin; i < end; i++) { - size_t off = depth + s[i]; - uint8_t c = (off < hlen) ? get_uint8(host, off) : hi; - assert_leq(c, 4); - if(c == 0) { - s[begin + cnts[0]++] = s[i]; - } else { - bkts[c-1][cnts[c]++] = s[i]; - } - } - assert_eq(cnts[0] + cnts[1] + cnts[2] + cnts[3] + cnts[4], end - begin); - size_t cur = begin + cnts[0]; - if(cnts[1] > 0) { memcpy(&s[cur], bkts[0], cnts[1] << (OFF_SIZE/4 + 1)); cur += cnts[1]; } - if(cnts[2] > 0) { memcpy(&s[cur], bkts[1], cnts[2] << (OFF_SIZE/4 + 1)); cur += cnts[2]; } - if(cnts[3] > 0) { memcpy(&s[cur], bkts[2], cnts[3] << (OFF_SIZE/4 + 1)); cur += cnts[3]; } - if(cnts[4] > 0) { memcpy(&s[cur], bkts[3], cnts[4] << (OFF_SIZE/4 + 1)); } - // This frame is now totally finished with bkts[][], so recursive - // callees can safely clobber it; we're not done with cnts[], but - // that's local to the stack frame. - cur = begin; - if(cnts[0] > 0) { - BKT_RECURSE_SUF_DC_U8(cur, cur + cnts[0]); cur += cnts[0]; - } - if(cnts[1] > 0) { - BKT_RECURSE_SUF_DC_U8(cur, cur + cnts[1]); cur += cnts[1]; - } - if(cnts[2] > 0) { - BKT_RECURSE_SUF_DC_U8(cur, cur + cnts[2]); cur += cnts[2]; - } - if(cnts[3] > 0) { - BKT_RECURSE_SUF_DC_U8(cur, cur + cnts[3]); - } - // Done + // 5 64-element buckets for bucket-sorting A, C, G, T, $ + TIndexOffU* bkts[4]; + for(size_t i = 0; i < 4; i++) { + bkts[i] = new TIndexOffU[4 * 1024 * 1024]; + } + ELList block_list; + while(true) { + size_t begin = 0, end = 0; + if(block_list.size() == 0) { + begin = _begin; + end = _end; + } else { + if(block_list.back().size() > 1) { + end = block_list.back().back(); block_list.back().pop_back(); + begin = block_list.back().back(); + } else { + block_list.resize(block_list.size() - 1); + if(block_list.size() == 0) { + break; + } + } + } + size_t depth = block_list.size() + _depth; + assert_leq(end-begin, BUCKET_SORT_CUTOFF); + assert_eq(hi, 4); + if(end <= begin + 1) { // 1-element list already sorted + continue; + } + if(depth > dc.v()) { + // Quicksort the remaining suffixes using difference cover + // for constant-time comparisons; this is O(k*log(k)) where + // k=(end-begin) + qsortSufDcU8(host1, host, hlen, s, slen, dc, begin, end, sanityCheck); + continue; + } + if(end-begin <= SELECTION_SORT_CUTOFF) { + // Bucket sort remaining items + selectionSortSufDcU8(host1, host, hlen, s, slen, dc, hi, + begin, end, depth, sanityCheck); + if(sanityCheck) { + sanityCheckOrderedSufs(host1, hlen, s, slen, + OFF_MASK, begin, end); + } + continue; + } + size_t cnts[] = { 0, 0, 0, 0, 0 }; + for(size_t i = begin; i < end; i++) { + size_t off = depth + s[i]; + uint8_t c = (off < hlen) ? get_uint8(host, off) : hi; + assert_leq(c, 4); + if(c == 0) { + s[begin + cnts[0]++] = s[i]; + } else { + bkts[c-1][cnts[c]++] = s[i]; + } + } + assert_eq(cnts[0] + cnts[1] + cnts[2] + cnts[3] + cnts[4], end - begin); + size_t cur = begin + cnts[0]; + if(cnts[1] > 0) { memcpy(&s[cur], bkts[0], cnts[1] << (OFF_SIZE/4 + 1)); cur += cnts[1]; } + if(cnts[2] > 0) { memcpy(&s[cur], bkts[1], cnts[2] << (OFF_SIZE/4 + 1)); cur += cnts[2]; } + if(cnts[3] > 0) { memcpy(&s[cur], bkts[2], cnts[3] << (OFF_SIZE/4 + 1)); cur += cnts[3]; } + if(cnts[4] > 0) { memcpy(&s[cur], bkts[3], cnts[4] << (OFF_SIZE/4 + 1)); } + // This frame is now totally finished with bkts[][], so recursive + // callees can safely clobber it; we're not done with cnts[], but + // that's local to the stack frame. + block_list.expand(); + block_list.back().clear(); + block_list.back().push_back(begin); + for(size_t i = 0; i < 4; i++) { + if(cnts[i] > 0) { + block_list.back().push_back(block_list.back().back() + cnts[i]); + } + } + } + // Done + + for(size_t i = 0; i < 4; i++) { + delete [] bkts[i]; + } } /** diff --git a/scoring.h b/scoring.h index 65fbb7fd..67aafaa6 100644 --- a/scoring.h +++ b/scoring.h @@ -486,7 +486,7 @@ class Scoring { return penintron + ncp; } - inline int conflictSpl() const { return csp; } + inline int conflictSpl() const { return (int)csp; } int matchType; // how to reward matches int matchConst; // reward for a match diff --git a/splice_site.cpp b/splice_site.cpp index 81475774..39e46fdc 100644 --- a/splice_site.cpp +++ b/splice_site.cpp @@ -194,7 +194,7 @@ bool SpliceSiteDB::addSpliceSite( } SpliceSitePos ssp; - uint32_t refoff = coord.off(); + uint32_t refoff = (uint32_t)coord.off(); uint32_t leftAnchorLen = 0, rightAnchorLen = 0; size_t eidx = 0; size_t last_eidx = 0; @@ -237,7 +237,7 @@ bool SpliceSiteDB::addSpliceSite( _spliceSites[ref].back()._editdist = editdist; _spliceSites[ref].back()._numreads = 1; assert(cur != NULL); - cur->payload = _spliceSites[ref].size() - 1; + cur->payload = (uint32_t)_spliceSites[ref].size() - 1; SpliceSitePos rssp(ssp.ref(), ssp.right(), ssp.left(), ssp.fw(), ssp.canonical()); assert_lt(ref, _bwIndex.size()); @@ -245,7 +245,7 @@ bool SpliceSiteDB::addSpliceSite( cur = _bwIndex[ref]->add(pool(ref), rssp, &added); assert(added); assert(cur != NULL); - cur->payload = _spliceSites[ref].size() - 1; + cur->payload = (uint32_t)_spliceSites[ref].size() - 1; assert_eq(_fwIndex[ref]->size(), _bwIndex[ref]->size()); } else { assert(cur != NULL); @@ -267,7 +267,7 @@ bool SpliceSiteDB::addSpliceSite( } bool fw = (edits[eidx].splDir == EDIT_SPL_FW || edits[eidx].splDir == EDIT_SPL_SEMI_FW || edits[eidx].splDir == EDIT_SPL_UNKNOWN); bool canonical = (edits[eidx].splDir == EDIT_SPL_FW || edits[eidx].splDir == EDIT_SPL_RC); - ssp.init(coord.ref(), refoff - 1, refoff + edits[eidx].splLen, fw, canonical); + ssp.init((uint32_t)coord.ref(), refoff - 1, refoff + edits[eidx].splLen, fw, canonical); refoff += edits[eidx].splLen; last_eidx = eidx; } @@ -277,7 +277,7 @@ bool SpliceSiteDB::addSpliceSite( if(ssp.inited()) { assert(edits[last_eidx].isSpliced()); assert_lt(edits[last_eidx].pos, rd.length()); - rightAnchorLen = rd.length() - edits[last_eidx].pos; + rightAnchorLen = (uint32_t)(rd.length() - edits[last_eidx].pos); uint32_t minLeftAnchorLen = minAnchorLen + mm * 2 + (edits[last_eidx].splDir == EDIT_SPL_UNKNOWN ? 6 : 0); uint32_t mm2 = 0; for(size_t j = last_eidx + 1; j < edits.size(); j++) { @@ -301,7 +301,7 @@ bool SpliceSiteDB::addSpliceSite( _spliceSites[ref].back()._editdist = editdist; _spliceSites[ref].back()._numreads = 1; assert(cur != NULL); - cur->payload = _spliceSites[ref].size() - 1; + cur->payload = (uint32_t)_spliceSites[ref].size() - 1; SpliceSitePos rssp(ssp.ref(), ssp.right(), ssp.left(), ssp.fw(), ssp.canonical()); assert_lt(ref, _bwIndex.size()); @@ -309,7 +309,7 @@ bool SpliceSiteDB::addSpliceSite( cur = _bwIndex[ref]->add(pool(ref), rssp, &added); assert(added); assert(cur != NULL); - cur->payload = _spliceSites[ref].size() - 1; + cur->payload = (uint32_t)_spliceSites[ref].size() - 1; assert_eq(_fwIndex[ref]->size(), _bwIndex[ref]->size()); } else { assert(cur != NULL); @@ -540,7 +540,7 @@ uint32_t calculate_splicesite_read_dist(const EList 0.7) - return i; + return (uint32_t)i; } return 0; @@ -672,7 +672,7 @@ void SpliceSiteDB::read(const GFM& gfm, const EList } assert(added); assert(cur != NULL); - cur->payload = _spliceSites[ref].size() - 1; + cur->payload = (uint32_t)_spliceSites[ref].size() - 1; added = false; SpliceSitePos rssp(ref, @@ -685,7 +685,7 @@ void SpliceSiteDB::read(const GFM& gfm, const EList cur = _bwIndex[ref]->add(pool(ref), rssp, &added); assert(added); assert(cur != NULL); - cur->payload = _spliceSites[ref].size() - 1; + cur->payload = (uint32_t)_spliceSites[ref].size() - 1; } else { assert(alt.exon()); // Given some relaxation @@ -740,7 +740,7 @@ void SpliceSiteDB::read(ifstream& in, bool known) } assert(cur != NULL); - cur->payload = _spliceSites[ref].size() - 1; + cur->payload = (uint32_t)_spliceSites[ref].size() - 1; added = false; SpliceSitePos rssp(ref, right, @@ -752,7 +752,7 @@ void SpliceSiteDB::read(ifstream& in, bool known) cur = _bwIndex[ref]->add(pool(ref), rssp, &added); assert(added); assert(cur != NULL); - cur->payload = _spliceSites[ref].size() - 1; + cur->payload = (uint32_t)_spliceSites[ref].size() - 1; } } @@ -818,7 +818,7 @@ float SpliceSiteDB::probscore( assert_lt(donor_seq, (int)(1 << (donor_len << 1))); probscore = donor_prob_sum[donor_seq]; - int acceptor_seq1 = acceptor_seq >> (acceptor_len2 << 1); + int acceptor_seq1 = (int)(acceptor_seq >> (acceptor_len2 << 1)); assert_lt(acceptor_seq1, (int)(1 << (acceptor_len1 << 1))); probscore *= acceptor_prob_sum1[acceptor_seq1]; diff --git a/spliced_aligner.h b/spliced_aligner.h index cbce50a6..699fdf4f 100644 --- a/spliced_aligner.h +++ b/spliced_aligner.h @@ -149,8 +149,8 @@ void SplicedAligner::hybridSearch( this->_minsc[rdi], rnd, INDEX_MAX, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan, leftext, @@ -231,7 +231,7 @@ int64_t SplicedAligner::hybridSearch_recur( assert_lt(rdi, 2); assert(this->_rds[rdi] != NULL); const Read& rd = *(this->_rds[rdi]); - index_t rdlen = rd.length(); + index_t rdlen = (index_t)rd.length(); if(hit.score() < this->_minsc[rdi]) return maxsc; // if it's already examined, just return @@ -284,7 +284,7 @@ int64_t SplicedAligner::hybridSearch_recur( index_t fragoff = 0, fraglen = 0, left = 0, right = 0; hit.getLeft(fragoff, fraglen, left); - const index_t minMatchLen = this->_minK; + const index_t minMatchLen = (index_t)this->_minK; index_t min_left_anchor = rdlen, min_right_anchor = rdlen; // make use of a list of known or novel splice sites to further align the read if(fraglen >= minMatchLen && @@ -309,7 +309,12 @@ int64_t SplicedAligner::hybridSearch_recur( frag2off + 1, (index_t)INDEX_MAX, this->_sharedVars); - if(!tempHit.compatibleWith(hit, this->_minIntronLen, this->_maxIntronLen, this->_tpol.no_spliced_alignment())) continue; + if(!tempHit.compatibleWith( + hit, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, + this->_tpol.no_spliced_alignment())) + continue; int64_t minsc = max(this->_minsc[rdi], best_score); bool combined = tempHit.combineWith( hit, @@ -323,9 +328,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, minsc, rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, 1, 1, &ss); @@ -379,7 +384,7 @@ int64_t SplicedAligner::hybridSearch_recur( frag2off, (index_t)INDEX_MAX, this->_sharedVars); - if(!canHit.compatibleWith(tempHit, this->_minIntronLen, this->_maxIntronLen, this->_tpol.no_spliced_alignment())) continue; + if(!canHit.compatibleWith(tempHit, (index_t)this->_minIntronLen, (index_t)this->_maxIntronLen, this->_tpol.no_spliced_alignment())) continue; GenomeHit combinedHit = canHit; int64_t minsc = max(this->_minsc[rdi], best_score); bool combined = combinedHit.combineWith( @@ -394,9 +399,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, minsc, rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, 1, 1, &ss); @@ -453,7 +458,7 @@ int64_t SplicedAligner::hybridSearch_recur( // extend the partial alignment in the left direction index_t fragoff = 0, fraglen = 0, left = 0; hit.getLeft(fragoff, fraglen, left); - const index_t minMatchLen = this->_minK_local; + const index_t minMatchLen = (index_t)this->_minK_local; // make use of a list of known or novel splice sites to further align the read if(fraglen >= minMatchLen && left >= minMatchLen && !this->_tpol.no_spliced_alignment()) { spliceSites.clear(); @@ -474,7 +479,7 @@ int64_t SplicedAligner::hybridSearch_recur( frag2off + 1 - fragoff, (index_t)INDEX_MAX, this->_sharedVars); - if(!tempHit.compatibleWith(hit, this->_minIntronLen, this->_maxIntronLen, this->_tpol.no_spliced_alignment())) continue; + if(!tempHit.compatibleWith(hit, (index_t)this->_minIntronLen, (index_t)this->_maxIntronLen, this->_tpol.no_spliced_alignment())) continue; int64_t minsc = this->_minsc[rdi]; bool combined = tempHit.combineWith( hit, @@ -488,9 +493,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, minsc, rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, 1, 1, &ss); @@ -544,9 +549,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, this->_minsc[rdi], rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan, leftext, @@ -587,8 +592,8 @@ int64_t SplicedAligner::hybridSearch_recur( index_t nelt = (index_t)INDEX_MAX; index_t max_nelt = std::max(5, extlen); bool no_extension = false; - bool uniqueStop; - index_t minUniqueLen = this->_minK_local; + bool uniqueStop= false; + index_t minUniqueLen = (index_t)this->_minK_local; for(; extoff < rdlen; extoff++) { extlen = 0; uniqueStop = true; @@ -648,7 +653,7 @@ int64_t SplicedAligner::hybridSearch_recur( straddled); assert_leq(coords.size(), nelt); coords.sort(); - for(int ri = coords.size() - 1; ri >= 0; ri--) { + for(int ri = (int)coords.size() - 1; ri >= 0; ri--) { const Coord& coord = coords[ri]; GenomeHit tempHit; tempHit.init(coord.orient(), @@ -656,13 +661,13 @@ int64_t SplicedAligner::hybridSearch_recur( extlen, 0, // trim5 0, // trim3 - coord.ref(), - coord.off(), - coord.joinedOff(), + (index_t)coord.ref(), + (index_t)coord.off(), + (index_t)coord.joinedOff(), this->_sharedVars); if(!tempHit.adjustWithALT(*this->_rds[rdi], gfm, altdb, ref)) continue; // check if the partial alignment is compatible with the new alignment using the local index - if(!tempHit.compatibleWith(hit, this->_minIntronLen, this->_maxIntronLen, this->_tpol.no_spliced_alignment())) { + if(!tempHit.compatibleWith(hit, (index_t)this->_minIntronLen, (index_t)this->_maxIntronLen, this->_tpol.no_spliced_alignment())) { if(count == 1) continue; else break; } @@ -681,9 +686,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, this->_minsc[rdi], rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan, leftext, @@ -703,9 +708,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, minsc, rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan); if(!this->_secondary) { @@ -827,7 +832,7 @@ int64_t SplicedAligner::hybridSearch_recur( straddled); assert_leq(coords.size(), nelt); if(coords.size() > 1) coords.sort(); - for(int ri = coords.size() - 1; ri >= 0; ri--) { + for(int ri = (int)coords.size() - 1; ri >= 0; ri--) { const Coord& coord = coords[ri]; GenomeHit tempHit; tempHit.init(coord.orient(), @@ -835,12 +840,12 @@ int64_t SplicedAligner::hybridSearch_recur( extlen, 0, // trim5 0, // trim3 - coord.ref(), - coord.off(), - coord.joinedOff(), + (index_t)coord.ref(), + (index_t)coord.off(), + (index_t)coord.joinedOff(), this->_sharedVars); if(!tempHit.adjustWithALT(*this->_rds[rdi], gfm, altdb, ref)) continue; - if(!tempHit.compatibleWith(hit, this->_minIntronLen, this->_maxIntronLen, this->_tpol.no_spliced_alignment())) continue; + if(!tempHit.compatibleWith(hit, (index_t)this->_minIntronLen, (index_t)this->_maxIntronLen, this->_tpol.no_spliced_alignment())) continue; if(uniqueStop) { assert_eq(coords.size(), 1); index_t leftext = (index_t)INDEX_MAX, rightext = (index_t)0; @@ -856,9 +861,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, this->_minsc[rdi], rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan, leftext, @@ -877,9 +882,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, minsc, rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan); if(!this->_secondary) { @@ -913,7 +918,7 @@ int64_t SplicedAligner::hybridSearch_recur( } } GenomeHit tempHit = hit; - index_t trimMax = (tempHit.score() - max(maxsc, this->_minsc[rdi])) / sc.sc(0); + index_t trimMax = (index_t)((tempHit.score() - max(maxsc, this->_minsc[rdi])) / sc.sc(0)); if(tempHit.rdoff() < trimMax) { index_t trim5 = tempHit.rdoff(); GenomeHit trimedHit = tempHit; @@ -921,9 +926,9 @@ int64_t SplicedAligner::hybridSearch_recur( rd, ssdb, sc, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan, ref); @@ -956,7 +961,7 @@ int64_t SplicedAligner::hybridSearch_recur( // with mismatches or a gap allowed int64_t minsc = this->_minsc[rdi]; assert_geq(tempHit.score(), minsc); - index_t mm = (tempHit.score() - minsc) / sc.mmpMax; + index_t mm = (index_t)((tempHit.score() - minsc) / sc.mmpMax); index_t leftext = (index_t)INDEX_MAX, rightext = (index_t)0; index_t num_mismatch_allowed = 1; if(hitoff <= this->_minK_local) { @@ -975,9 +980,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, this->_minsc[rdi], rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan, leftext, @@ -987,7 +992,7 @@ int64_t SplicedAligner::hybridSearch_recur( if(rdi == 0) minsc = max(minsc, sink.bestUnp1()); else minsc = max(minsc, sink.bestUnp2()); } - if(tempHit.score() >= minsc && leftext >= min(this->_minK_local, hit.rdoff())) { + if(tempHit.score() >= minsc && leftext >= min((index_t)this->_minK_local, hit.rdoff())) { assert_eq(tempHit.trim5(), 0); assert_leq(tempHit.rdoff() + tempHit.len() + tempHit.trim3(), rdlen); int64_t tmp_maxsc = hybridSearch_recur( @@ -1011,7 +1016,7 @@ int64_t SplicedAligner::hybridSearch_recur( maxsc = max(maxsc, tmp_maxsc); } else if(hitoff > this->_minK_local) { // skip some bases of a read - index_t jumplen = hitoff > this->_minK ? this->_minK : this->_minK_local; + index_t jumplen = hitoff > this->_minK ? (index_t)this->_minK : (index_t)this->_minK_local; assert_leq(hitoff, hit.rdoff()); int64_t expected_score = hit.score() - (hit.rdoff() - hitoff) / jumplen * sc.mmpMax - sc.mmpMax; if(expected_score >= minsc) { @@ -1046,7 +1051,7 @@ int64_t SplicedAligner::hybridSearch_recur( if(!ssdb.empty()) { index_t fragoff = 0, fraglen = 0, right = 0; hit.getRight(fragoff, fraglen, right); - const index_t minMatchLen = this->_minK_local; + const index_t minMatchLen = (index_t)this->_minK_local; // make use of a list of known or novel splice sites to further align the read if(fraglen >= minMatchLen && !this->_tpol.no_spliced_alignment()) { spliceSites.clear(); @@ -1069,7 +1074,7 @@ int64_t SplicedAligner::hybridSearch_recur( frag2off, (index_t)INDEX_MAX, this->_sharedVars); - if(!hit.compatibleWith(tempHit, this->_minIntronLen, this->_maxIntronLen, this->_tpol.no_spliced_alignment())) continue; + if(!hit.compatibleWith(tempHit, (index_t)this->_minIntronLen, (index_t)this->_maxIntronLen, this->_tpol.no_spliced_alignment())) continue; GenomeHit combinedHit = hit; int64_t minsc = this->_minsc[rdi]; bool combined = combinedHit.combineWith( @@ -1084,9 +1089,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, minsc, rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, 1, 1, &ss); @@ -1139,9 +1144,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, this->_minsc[rdi], rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan, leftext, @@ -1173,7 +1178,7 @@ int64_t SplicedAligner::hybridSearch_recur( index_t extlen = 0; local_index_t top = (local_index_t)INDEX_MAX, bot = (local_index_t)INDEX_MAX; local_index_t node_top = (local_index_t)INDEX_MAX, node_bot = (local_index_t)INDEX_MAX; - index_t extoff = hitoff + hitlen + this->_minK_local; + index_t extoff = hitoff + hitlen + (index_t)this->_minK_local; if(extoff + 1 < rdlen) extoff += 1; if(extoff >= rdlen) { extoff = rdlen - 1; @@ -1182,8 +1187,8 @@ int64_t SplicedAligner::hybridSearch_recur( index_t max_nelt = std::max(5, extlen); bool no_extension = false; bool uniqueStop; - index_t minUniqueLen = this->_minK_local; - index_t maxHitLen = max(extoff - hitoff - hitlen, this->_minK_local); + index_t minUniqueLen = (index_t)this->_minK_local; + index_t maxHitLen = max(extoff - hitoff - hitlen, (index_t)this->_minK_local); for(; maxHitLen < extoff + 1 && extoff < rdlen;) { extlen = 0; uniqueStop = false; @@ -1258,13 +1263,13 @@ int64_t SplicedAligner::hybridSearch_recur( extlen, 0, // trim5 0, // trim3 - coord.ref(), - coord.off(), - coord.joinedOff(), + (index_t)coord.ref(), + (index_t)coord.off(), + (index_t)coord.joinedOff(), this->_sharedVars); if(!tempHit.adjustWithALT(*this->_rds[rdi], gfm, altdb, ref)) continue; // check if the partial alignment is compatible with the new alignment using the local index - if(!hit.compatibleWith(tempHit, this->_minIntronLen, this->_maxIntronLen, this->_tpol.no_spliced_alignment())) { + if(!hit.compatibleWith(tempHit, (index_t)this->_minIntronLen, (index_t)this->_maxIntronLen, this->_tpol.no_spliced_alignment())) { if(count == 1) continue; else break; } @@ -1281,9 +1286,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, this->_minsc[rdi], rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan, leftext, @@ -1303,9 +1308,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, minsc, rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan); if(!this->_secondary) { @@ -1385,7 +1390,7 @@ int64_t SplicedAligner::hybridSearch_recur( index_t top = (index_t)INDEX_MAX, bot = (index_t)INDEX_MAX; index_t node_top = (index_t)INDEX_MAX, node_bot = (index_t)INDEX_MAX; this->_node_iedge_count.clear(); - index_t extoff = hitoff + hitlen + this->_minK + 1; + index_t extoff = hitoff + hitlen + (index_t)this->_minK + 1; bool uniqueStop = true; index_t nelt = this->globalGFMSearch( gfm, // GFM index @@ -1435,12 +1440,12 @@ int64_t SplicedAligner::hybridSearch_recur( extlen, 0, // trim5 0, // trim3 - coord.ref(), - coord.off(), - coord.joinedOff(), + (index_t)coord.ref(), + (index_t)coord.off(), + (index_t)coord.joinedOff(), this->_sharedVars); if(!tempHit.adjustWithALT(*this->_rds[rdi], gfm, altdb, ref)) continue; - if(!hit.compatibleWith(tempHit, this->_minIntronLen, this->_maxIntronLen, this->_tpol.no_spliced_alignment())) continue; + if(!hit.compatibleWith(tempHit, (index_t)this->_minIntronLen, (index_t)this->_maxIntronLen, this->_tpol.no_spliced_alignment())) continue; index_t leftext = (index_t)0, rightext = (index_t)INDEX_MAX; tempHit.extend( rd, @@ -1454,9 +1459,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, this->_minsc[rdi], rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan, leftext, @@ -1475,9 +1480,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, minsc, rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan); if(!this->_secondary) { @@ -1512,7 +1517,7 @@ int64_t SplicedAligner::hybridSearch_recur( GenomeHit tempHit = hit; assert(tempHit.trim5() == 0 || hitoff == 0); index_t trimLen = rdlen - hitoff - tempHit.len() - tempHit.trim5(); - index_t trimMax = (tempHit.score() - max(maxsc, this->_minsc[rdi])) / sc.sc(0); + index_t trimMax = (index_t)((tempHit.score() - max(maxsc, this->_minsc[rdi])) / sc.sc(0)); if(trimLen < trimMax) { index_t trim3 = rdlen - hitoff - tempHit.len() - tempHit.trim5(); GenomeHit trimedHit = tempHit; @@ -1520,9 +1525,9 @@ int64_t SplicedAligner::hybridSearch_recur( rd, ssdb, sc, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan, ref); @@ -1557,7 +1562,7 @@ int64_t SplicedAligner::hybridSearch_recur( int64_t minsc = this->_minsc[rdi]; assert_geq(tempHit.score(), minsc); index_t leftext = (index_t)0, rightext = (index_t)INDEX_MAX; - index_t mm = (tempHit.score() - minsc) / sc.mmpMax; + index_t mm = (index_t)((tempHit.score() - minsc) / sc.mmpMax); index_t num_mismatch_allowed = 1; if(rdlen - hitoff - hitlen <= this->_minK_local) { num_mismatch_allowed = min(rdlen - tempHit.rdoff() - tempHit.len(), mm); @@ -1575,9 +1580,9 @@ int64_t SplicedAligner::hybridSearch_recur( sc, this->_minsc[rdi], rnd, - this->_minK_local, - this->_minIntronLen, - this->_maxIntronLen, + (index_t)this->_minK_local, + (index_t)this->_minIntronLen, + (index_t)this->_maxIntronLen, this->_minAnchorLen, this->_minAnchorLen_noncan, leftext, @@ -1587,7 +1592,7 @@ int64_t SplicedAligner::hybridSearch_recur( if(rdi == 0) minsc = max(minsc, sink.bestUnp1()); else minsc = max(minsc, sink.bestUnp2()); } - if(tempHit.score() >= minsc && rightext >= min(this->_minK_local, rdlen - hit.len() - hit.rdoff())) { + if(tempHit.score() >= minsc && rightext >= min((index_t)this->_minK_local, rdlen - hit.len() - hit.rdoff())) { assert_eq(tempHit.trim3(), 0); assert_leq(tempHit.trim5(), tempHit.rdoff()); int64_t tmp_maxsc = hybridSearch_recur( @@ -1611,7 +1616,7 @@ int64_t SplicedAligner::hybridSearch_recur( maxsc = max(maxsc, tmp_maxsc); } else if(hitoff + hitlen + this->_minK_local < rdlen) { // skip some bases of a read - index_t jumplen = hitoff + hitlen + this->_minK < rdlen ? this->_minK : this->_minK_local; + index_t jumplen = hitoff + hitlen + this->_minK < rdlen ? (index_t)this->_minK : (index_t)this->_minK_local; assert_lt(hitoff + hitlen + jumplen, rdlen); assert_leq(hit.len(), hitlen); int64_t expected_score = hit.score() - (hitlen - hit.len()) / jumplen * sc.mmpMax - sc.mmpMax;