bool DefaultGappedBottomSegmentIterator::isMissingData(double nThreshold) const { if (nThreshold >= 1.0) { return false; } hal_index_t start = min(_left->getStartPosition(), _right->getEndPosition()); DNAIteratorConstPtr di = _left->getGenome()->getDNAIterator(start); hal_size_t length = getLength(); size_t maxNs = nThreshold * (double)length; size_t Ns = 0; char c; for (size_t i = 0; i < length; ++i, di->toRight()) { c = di->getChar(); if (c == 'N' || c == 'n') { ++Ns; } if (Ns > maxNs) { return true; } if ((length - i) < (maxNs - Ns)) { break; } } return false; }
void Genome::copySequence(Genome *dest) const { DNAIteratorConstPtr inDna = getDNAIterator(); DNAIteratorPtr outDna = dest->getDNAIterator(); hal_size_t n = getSequenceLength(); assert(n == dest->getSequenceLength()); for (; (hal_size_t)inDna->getArrayIndex() < n; inDna->toRight(), outDna->toRight()) { outDna->setChar(inDna->getChar()); } }