void SequenceIteratorTest::checkCallBack(const Alignment *alignment) { const Genome *ancGenome = alignment->openGenome("AncGenome"); hal_size_t numSequences = ancGenome->getNumSequences(); CuAssertTrue(_testCase, numSequences = 1000); for (SequenceIteratorPtr seqIt = ancGenome->getSequenceIterator(); not seqIt->atEnd(); seqIt->toNext()) { const Sequence *seq = seqIt->getSequence(); hal_size_t i = seq->getArrayIndex(); TopSegmentIteratorPtr tsIt = seq->getTopSegmentIterator(); hal_size_t numTopSegments = seq->getNumTopSegments(); for (hal_size_t j = 0; j < numTopSegments; ++j) { TopSegmentIteratorPtr gtsIt = ancGenome->getTopSegmentIterator((i - 1) * 100 + j); const TopSegment *gsTopSegment = gtsIt->getTopSegment(); const TopSegment *sqTopSegment = tsIt->getTopSegment(); CuAssertTrue(_testCase, gsTopSegment->getArrayIndex() == sqTopSegment->getArrayIndex()); tsIt->toRight(); } BottomSegmentIteratorPtr bsIt = seq->getBottomSegmentIterator(); hal_size_t numBottomSegments = seq->getNumBottomSegments(); for (hal_size_t j = 0; j < numBottomSegments; ++j) { BottomSegmentIteratorPtr gbsIt = ancGenome->getBottomSegmentIterator((i - 1) * 100 + j); const BottomSegment *gsBottomSegment = gbsIt->getBottomSegment(); const BottomSegment *sqBottomSegment = bsIt->getBottomSegment(); CuAssertTrue(_testCase, gsBottomSegment->getArrayIndex() == sqBottomSegment->getArrayIndex()); bsIt->toRight(); } } }
void SequenceUpdateTest::checkCallBack(const Alignment *alignment) { const Genome *ancGenome = alignment->openGenome("AncGenome"); hal_size_t numSequences = ancGenome->getNumSequences(); CuAssertTrue(_testCase, numSequences = 1000); hal_size_t numTopSegments = 0; hal_size_t numBottomSegments = 0; hal_size_t totalLength = 0; hal_size_t lastStart = 0; hal_size_t lastLength = 0; for (SequenceIteratorPtr seqIt = ancGenome->getSequenceIterator(); not seqIt->atEnd(); seqIt->toNext()) { const Sequence *sequence = seqIt->getSequence(); hal_size_t i = (hal_size_t)sequence->getArrayIndex(); hal_size_t len = 1 + i * 5 + i; hal_size_t numTop = i < numSequences / 2 ? i * 7 : i; hal_size_t numBottom = i < numSequences / 3 ? i * 5 : i * 2; string name = "sequence" + std::to_string(i); const Sequence *seq = seqIt->getSequence(); CuAssertTrue(_testCase, seq->getName() == name); CuAssertTrue(_testCase, seq->getSequenceLength() == len); CuAssertTrue(_testCase, seq->getNumTopSegments() == numTop); CuAssertTrue(_testCase, seq->getNumBottomSegments() == numBottom); const Genome *gen = seq->getGenome(); CuAssertTrue(_testCase, gen->getName() == "AncGenome"); numTopSegments += seq->getNumTopSegments(); numBottomSegments += seq->getNumBottomSegments(); totalLength += seq->getSequenceLength(); if (i == 0) { CuAssertTrue(_testCase, seq->getStartPosition() == 0); } else { CuAssertTrue(_testCase, seq->getStartPosition() - lastStart == lastLength); } lastStart = seq->getStartPosition(); lastLength = seq->getSequenceLength(); } const Sequence *seq = ancGenome->getSequence("sequence555"); CuAssertTrue(_testCase, seq->getName() == "sequence555"); seq = ancGenome->getSequenceBySite(0); CuAssertTrue(_testCase, seq->getName() == "sequence0"); seq = ancGenome->getSequenceBySite(45); CuAssertTrue(_testCase, seq->getName() == "sequence4"); CuAssertTrue(_testCase, ancGenome->getSequenceLength() == totalLength); CuAssertTrue(_testCase, ancGenome->getNumTopSegments() == numTopSegments); CuAssertTrue(_testCase, ancGenome->getNumBottomSegments() == numBottomSegments); }
void LodExtract::writeSegments(const Genome* inParent, const vector<const Genome*>& inChildren) { vector<const Genome*> inGenomes = inChildren; inGenomes.push_back(inParent); const Genome* outParent = _outAlignment->openGenome(inParent->getName()); assert(outParent != NULL && outParent->getNumBottomSegments() > 0); BottomSegmentIteratorPtr bottom; TopSegmentIteratorPtr top; SegmentIteratorPtr outSegment; // FOR EVERY GENOME for (hal_size_t i = 0; i < inGenomes.size(); ++i) { const Genome* inGenome = inGenomes[i]; Genome* outGenome = _outAlignment->openGenome(inGenome->getName()); SequenceIteratorPtr outSeqIt = outGenome->getSequenceIterator(); SequenceIteratorConstPtr outSeqEnd = outGenome->getSequenceEndIterator(); // FOR EVERY SEQUENCE IN GENOME for (; outSeqIt != outSeqEnd; outSeqIt->toNext()) { const Sequence* outSequence = outSeqIt->getSequence(); const Sequence* inSequence = inGenome->getSequence(outSequence->getName()); if (outGenome != outParent && outSequence->getNumTopSegments() > 0) { top = outSequence->getTopSegmentIterator(); outSegment = top; } else if (outSequence->getNumBottomSegments() > 0) { bottom = outSequence->getBottomSegmentIterator(); outSegment = bottom; } const LodGraph::SegmentSet* segSet = _graph.getSegmentSet(inSequence); assert(segSet != NULL); LodGraph::SegmentSet::const_iterator segIt = segSet->begin(); if (segSet->size() > 2) { //skip left telomere ++segIt; // use to skip right telomere: LodGraph::SegmentSet::const_iterator segLast = segSet->end(); --segLast; // FOR EVERY SEGMENT IN SEQUENCE for (; segIt != segLast; ++segIt) { // write the HAL array index back to the segment to make // future passes quicker. (*segIt)->setArrayIndex(outSegment->getArrayIndex()); outSegment->setCoordinates((*segIt)->getLeftPos(), (*segIt)->getLength()); assert(outSegment->getSequence()->getName() == inSequence->getName()); outSegment->toRight(); } } else if (outSequence->getSequenceLength() > 0) { assert(segSet->size() == 2); writeUnsampledSequence(outSequence, outSegment); } } } }