本文整理汇总了C++中TopSegmentIteratorPtr类的典型用法代码示例。如果您正苦于以下问题:C++ TopSegmentIteratorPtr类的具体用法?C++ TopSegmentIteratorPtr怎么用?C++ TopSegmentIteratorPtr使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TopSegmentIteratorPtr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: seqVec
void TopSegmentSimpleIteratorTest::createCallBack(Alignment *alignment) {
Genome *ancGenome = alignment->addRootGenome("Anc0", 0);
size_t numChildren = 9;
for (size_t i = 0; i < numChildren; ++i) {
alignment->addLeafGenome("Leaf" + std::to_string(i), "Anc0", 0.1);
}
vector<Sequence::Info> seqVec(1);
seqVec[0] = Sequence::Info("Sequence", 1000000, 5000, 10000);
ancGenome->setDimensions(seqVec);
CuAssertTrue(_testCase, ancGenome->getNumChildren() == numChildren);
_topSegments.clear();
for (size_t i = 0; i < ancGenome->getNumTopSegments(); ++i) {
TopSegmentStruct topSeg;
topSeg.setRandom();
topSeg._length = ancGenome->getSequenceLength() / ancGenome->getNumTopSegments();
topSeg._startPosition = i * topSeg._length;
_topSegments.push_back(topSeg);
}
TopSegmentIteratorPtr tsIt = ancGenome->getTopSegmentIterator(0);
for (size_t i = 0; not tsIt->atEnd(); tsIt->toRight(), ++i) {
CuAssertTrue(_testCase, (size_t)tsIt->getTopSegment()->getArrayIndex() == i);
_topSegments[i].applyTo(tsIt);
}
}
示例2: addIdenticalParentChild
void GappedSegmentSimpleIteratorTest2::createCallBack(AlignmentPtr alignment)
{
addIdenticalParentChild(alignment, 2, 100, 5);
Genome* parent = alignment->openGenome(alignment->getRootName());
Genome* child = parent->getChild(0);
TopSegmentIteratorPtr ti = child->getTopSegmentIterator();
BottomSegmentIteratorPtr bi = parent->getBottomSegmentIterator();
hal_index_t i = 0;
bool reversed = true;
while (ti != child->getTopSegmentEndIterator())
{
if (i % 5 == 0)
{
reversed = !reversed;
if (reversed && i < (hal_index_t)(parent->getNumBottomSegments() - 1))
{
makeInversion(ti, 5);
}
}
ti->toRight();
bi->toRight();
++i;
}
}
示例3: assert
void LodExtract::writeUnsampledSequence(const Sequence* outSequence,
SegmentIteratorPtr outSegment)
{
outSegment->setCoordinates(outSequence->getStartPosition(),
outSequence->getSequenceLength());
if (outSegment->isTop())
{
assert(outSequence->getNumTopSegments() == 1);
TopSegmentIteratorPtr top = outSegment.downCast<TopSegmentIteratorPtr>();
top->setParentIndex(NULL_INDEX);
top->setParentReversed(false);
top->setNextParalogyIndex(NULL_INDEX);
top->setBottomParseIndex(NULL_INDEX);
}
else
{
assert(outSequence->getNumBottomSegments() == 1);
BottomSegmentIteratorPtr bottom =
outSegment.downCast<BottomSegmentIteratorPtr>();
hal_size_t numChildren = bottom->getNumChildren();
for (hal_size_t childNum = 0; childNum < numChildren; ++childNum)
{
bottom->setChildIndex(childNum, NULL_INDEX);
bottom->setChildReversed(childNum, false);
}
bottom->setTopParseIndex(NULL_INDEX);
}
}
示例4: CuAssertTrue
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();
}
}
}
示例5: mapDown
// note: takes smart pointer as it maybe added to the results
static hal_size_t mapDown(MappedSegmentPtr mappedSeg, hal_size_t childIndex, list<MappedSegmentPtr> &results,
hal_size_t minLength) {
const Genome *child = mappedSeg->getGenome()->getChild(childIndex);
assert(child != NULL);
hal_size_t added = 0;
if (mappedSeg->isTop() == false) {
TopSegmentIteratorPtr topSegIt = child->getTopSegmentIterator();
SegmentIteratorPtr targetSegIt = mappedSeg->getTargetIteratorPtr();
BottomSegmentIteratorPtr botSegIt = std::dynamic_pointer_cast<BottomSegmentIterator>(targetSegIt);
if (botSegIt->bseg()->hasChild(childIndex) == true && botSegIt->getLength() >= minLength) {
topSegIt->toChild(botSegIt, childIndex);
mappedSeg->setTarget(std::dynamic_pointer_cast<SegmentIterator>(topSegIt));
results.push_back(MappedSegmentPtr(mappedSeg));
++added;
}
} else {
hal_index_t rightCutoff = mappedSeg->getEndPosition();
TopSegmentIteratorPtr topSegIt = mappedSeg->targetAsTop();
hal_index_t startOffset = (hal_index_t)topSegIt->getStartOffset();
hal_index_t endOffset = (hal_index_t)topSegIt->getEndOffset();
BottomSegmentIteratorPtr botSegIt = mappedSeg->getGenome()->getBottomSegmentIterator();
botSegIt->toParseDown(topSegIt);
do {
BottomSegmentIteratorPtr newBotSegIt = botSegIt->clone();
// we map the new target back to see how the offsets have
// changed. these changes are then applied to the source segment
// as deltas
TopSegmentIteratorPtr backTopSegIt = topSegIt->clone();
backTopSegIt->toParseUp(newBotSegIt);
hal_index_t startBack = (hal_index_t)backTopSegIt->getStartOffset();
hal_index_t endBack = (hal_index_t)backTopSegIt->getEndOffset();
assert(startBack >= startOffset);
assert(endBack >= endOffset);
SegmentIteratorPtr newSourceSegIt = mappedSeg->sourceClone();
hal_index_t startDelta = startBack - startOffset;
hal_index_t endDelta = endBack - endOffset;
assert((hal_index_t)newSourceSegIt->getLength() > startDelta + endDelta);
newSourceSegIt->slice(newSourceSegIt->getStartOffset() + startDelta, newSourceSegIt->getEndOffset() + endDelta);
MappedSegmentPtr newMappedSeg(new MappedSegment(newSourceSegIt, newBotSegIt));
assert(newMappedSeg->isTop() == false);
assert(newMappedSeg->getSource()->getGenome() == mappedSeg->getSource()->getGenome());
added += mapDown(newMappedSeg, childIndex, results, minLength);
// stupid that we have to make this check but odn't want to
// make fundamental api change now
if (botSegIt->getEndPosition() != rightCutoff) {
botSegIt->toRight(rightCutoff);
} else {
break;
}
} while (true);
}
return added;
}
示例6: getBottomSegmentIterator
void Genome::fixParseInfo()
{
if (getParent() == NULL || getNumChildren() == 0)
{
return;
}
// copied from CactusHalConverter::updateRootParseInfo() in
// cactus2hal/src/cactusHalConverter.cpp
BottomSegmentIteratorPtr bottomIterator =
getBottomSegmentIterator();
TopSegmentIteratorPtr topIterator = getTopSegmentIterator();
BottomSegmentIteratorConstPtr bend = getBottomSegmentEndIterator();
TopSegmentIteratorConstPtr tend = getTopSegmentEndIterator();
int top = 0, bot = 0;
while (bottomIterator != bend && topIterator != tend)
{
bool bright = false;
bool tright = false;
BottomSegment* bseg = bottomIterator->getBottomSegment();
TopSegment* tseg = topIterator->getTopSegment();
hal_index_t bstart = bseg->getStartPosition();
hal_index_t bendidx = bstart + (hal_index_t)bseg->getLength();
hal_index_t tstart = tseg->getStartPosition();
hal_index_t tendidx = tstart + (hal_index_t)tseg->getLength();
if (bstart >= tstart && bstart < tendidx)
{
bseg->setTopParseIndex(tseg->getArrayIndex());
}
if (bendidx <= tendidx || bstart == bendidx)
{
bright = true;
}
if (tstart >= bstart && tstart < bendidx)
{
tseg->setBottomParseIndex(bseg->getArrayIndex());
}
if (tendidx <= bendidx || tstart == tendidx)
{
tright = true;
}
assert(bright || tright);
if (bright == true)
{
bot += 1;
bottomIterator->toRight();
}
if (tright == true)
{
top += 1;
topIterator->toRight();
}
}
}
示例7: seqVec
void MappedSegmentMapDupeTest::createCallBack(AlignmentPtr alignment)
{
vector<Sequence::Info> seqVec(1);
BottomSegmentIteratorPtr bi;
BottomSegmentStruct bs;
TopSegmentIteratorPtr ti;
TopSegmentStruct ts;
// setup simple case were there is an edge from a parent to
// child and it is reversed
Genome* parent = alignment->addRootGenome("parent");
Genome* child1 = alignment->addLeafGenome("child1", "parent", 1);
Genome* child2 = alignment->addLeafGenome("child2", "parent", 1);
seqVec[0] = Sequence::Info("Sequence", 3, 0, 1);
parent->setDimensions(seqVec);
seqVec[0] = Sequence::Info("Sequence", 9, 3, 0);
child1->setDimensions(seqVec);
seqVec[0] = Sequence::Info("Sequence", 9, 3, 0);
child2->setDimensions(seqVec);
parent->setString("CCC");
child1->setString("CCCTACGTG");
child2->setString("CCCTACGTG");
bi = parent->getBottomSegmentIterator();
bs.set(0, 3);
bs._children.push_back(pair<hal_size_t, bool>(0, true));
bs._children.push_back(pair<hal_size_t, bool>(0, false));
bs.applyTo(bi);
ti = child1->getTopSegmentIterator();
ts.set(0, 3, 0, true, NULL_INDEX, 1);
ts.applyTo(ti);
ti->toRight();
ts.set(3, 3, 0, true, NULL_INDEX, 2);
ts.applyTo(ti);
ti->toRight();
ts.set(6, 3, 0, true, NULL_INDEX, 0);
ts.applyTo(ti);
ti = child2->getTopSegmentIterator();
ts.set(0, 3, 0, false);
ts.applyTo(ti);
ti->toRight();
ts.set(3, 3, NULL_INDEX, true);
ts.applyTo(ti);
ti->toRight();
ts.set(6, 3, NULL_INDEX, false);
ts.applyTo(ti);
}
示例8: mapUp
// note: takes smart pointer as it maybe added to the results
static hal_size_t mapUp(MappedSegmentPtr mappedSeg, list<MappedSegmentPtr> &results, bool doDupes, hal_size_t minLength) {
const Genome *parent = mappedSeg->getGenome()->getParent();
assert(parent != NULL);
hal_size_t added = 0;
if (mappedSeg->isTop() == true) {
BottomSegmentIteratorPtr botSegIt = parent->getBottomSegmentIterator();
TopSegmentIteratorPtr topSegIt = mappedSeg->targetAsTop();
if (topSegIt->tseg()->hasParent() == true && topSegIt->getLength() >= minLength &&
(doDupes == true || topSegIt->tseg()->isCanonicalParalog() == true)) {
botSegIt->toParent(topSegIt);
mappedSeg->setTarget(std::dynamic_pointer_cast<SegmentIterator>(botSegIt));
results.push_back(mappedSeg);
++added;
}
} else {
hal_index_t rightCutoff = mappedSeg->getEndPosition();
BottomSegmentIteratorPtr botSegIt = mappedSeg->targetAsBottom();
hal_index_t startOffset = (hal_index_t)botSegIt->getStartOffset();
hal_index_t endOffset = (hal_index_t)botSegIt->getEndOffset();
TopSegmentIteratorPtr topSegIt = mappedSeg->getGenome()->getTopSegmentIterator();
topSegIt->toParseUp(botSegIt);
do {
TopSegmentIteratorPtr newTopSegIt = topSegIt->clone();
// we map the new target back to see how the offsets have
// changed. these changes are then applied to the source segment
// as deltas
BottomSegmentIteratorPtr backBotSegIt = botSegIt->clone();
backBotSegIt->toParseDown(newTopSegIt);
hal_index_t startBack = (hal_index_t)backBotSegIt->getStartOffset();
hal_index_t endBack = (hal_index_t)backBotSegIt->getEndOffset();
assert(startBack >= startOffset);
assert(endBack >= endOffset);
SegmentIteratorPtr newSourceSegIt = mappedSeg->sourceClone();
hal_index_t startDelta = startBack - startOffset;
hal_index_t endDelta = endBack - endOffset;
assert((hal_index_t)newSourceSegIt->getLength() > startDelta + endDelta);
newSourceSegIt->slice(newSourceSegIt->getStartOffset() + startDelta, newSourceSegIt->getEndOffset() + endDelta);
MappedSegmentPtr newMappedSeg(new MappedSegment(newSourceSegIt, newTopSegIt));
assert(newMappedSeg->isTop() == true);
assert(newMappedSeg->getSource()->getGenome() == mappedSeg->getSource()->getGenome());
added += mapUp(newMappedSeg, results, doDupes, minLength);
// stupid that we have to make this check but odn't want to
// make fundamental api change now
if (topSegIt->getEndPosition() != rightCutoff) {
topSegIt->toRight(rightCutoff);
} else {
break;
}
} while (true);
}
return added;
}
示例9: checkGenome
void TopSegmentIteratorToSiteTest::checkGenome(const Genome *genome) {
TopSegmentIteratorPtr ti = genome->getTopSegmentIterator();
for (hal_index_t pos = 0; pos < (hal_index_t)genome->getSequenceLength(); ++pos) {
ti->toSite(pos);
CuAssertTrue(_testCase, ti->getStartPosition() == pos);
CuAssertTrue(_testCase, ti->getLength() == 1);
ti->toSite(pos, false);
CuAssertTrue(_testCase, pos >= ti->getStartPosition() && pos < ti->getStartPosition() + (hal_index_t)ti->getLength());
CuAssertTrue(_testCase, ti->getLength() == ti->getTopSegment()->getLength());
}
}
示例10: setTopSegments
// Set top segments to be equal width and so that segment 1, 2, 3,
// etc. corresponds to parent segment 1, 2, 3, etc.
void setTopSegments(Genome *genome, hal_size_t width) {
TopSegmentIteratorPtr topIt = genome->getTopSegmentIterator();
hal_size_t n = genome->getNumTopSegments();
hal_index_t startPos = 0;
for (; topIt->getArrayIndex() < n; topIt->toRight(), startPos += width) {
topIt->setCoordinates(startPos, width);
topIt->tseg()->setParentIndex(topIt->getArrayIndex());
topIt->tseg()->setParentReversed(false);
topIt->tseg()->setBottomParseIndex(NULL_INDEX);
topIt->tseg()->setNextParalogyIndex(NULL_INDEX);
}
}
示例11: applyTo
void TopSegmentStruct::applyTo(TopSegmentIteratorPtr it) const {
TopSegment *seg = it->getTopSegment();
seg->setCoordinates(_startPosition, _length);
seg->setNextParalogyIndex(_nextParalogyIndex);
seg->setParentIndex(_parentIndex);
seg->setParentReversed(_parentReversed);
seg->setBottomParseIndex(_bottomParseIndex);
}
示例12: compareTo
void TopSegmentStruct::compareTo(TopSegmentIteratorPtr it, CuTest *testCase) const {
const TopSegment *seg = it->getTopSegment();
CuAssertTrue(testCase, _length == seg->getLength());
CuAssertTrue(testCase, _startPosition == seg->getStartPosition());
CuAssertTrue(testCase, _nextParalogyIndex == seg->getNextParalogyIndex());
CuAssertTrue(testCase, _parentIndex == seg->getParentIndex());
CuAssertTrue(testCase, _bottomParseIndex == seg->getBottomParseIndex());
}
示例13: getParent
void Genome::copyTopSegments(Genome *dest) const
{
const Genome *inParent = getParent();
const Genome *outParent = dest->getParent();
TopSegmentIteratorConstPtr inTop = getTopSegmentIterator();
TopSegmentIteratorPtr outTop = dest->getTopSegmentIterator();
hal_size_t n = dest->getNumTopSegments();
assert(n == 0 || n == getNumTopSegments());
if (n == 0) {
// Nothing to do if there are no top segments.
return;
}
BottomSegmentIteratorConstPtr inParentBottomSegIt = inParent->getBottomSegmentIterator();
BottomSegmentIteratorConstPtr outParentBottomSegIt = outParent->getBottomSegmentIterator();
for (; (hal_size_t)inTop->getArrayIndex() < n; inTop->toRight(),
outTop->toRight())
{
hal_index_t genomePos = inTop->getStartPosition();
assert(genomePos != NULL_INDEX);
string inSeqName = getSequenceBySite(genomePos)->getName();
string outSeqName = dest->getSequenceBySite(genomePos)->getName();
// if (inSeqName != outSeqName) {
// stringstream ss;
// ss << "When copying top segments from " << getName() << " to " << dest->getName() << ": sequence " << inSeqName << " != " << outSeqName << " at site " << genomePos;
// throw hal_exception(ss.str());
// }
outTop->setCoordinates(inTop->getStartPosition(), inTop->getLength());
outTop->setParentIndex(inTop->getParentIndex());
outTop->setParentReversed(inTop->getParentReversed());
outTop->setBottomParseIndex(inTop->getBottomParseIndex());
outTop->setNextParalogyIndex(inTop->getNextParalogyIndex());
// Check that the sequences from the bottom segments we point to are the same. If not, correct the indices so that they are.
if (inTop->getParentIndex() != NULL_INDEX) {
inParentBottomSegIt->toParent(inTop);
const Sequence *inParentSequence = inParentBottomSegIt->getSequence();
const Sequence *outParentSequence = outParent->getSequence(inParentSequence->getName());
hal_index_t inParentSegmentOffset = inTop->getParentIndex() - inParentSequence->getBottomSegmentArrayIndex();
hal_index_t outParentSegmentIndex = inParentSegmentOffset + outParentSequence->getBottomSegmentArrayIndex();
outTop->setParentIndex(outParentSegmentIndex);
}
}
}
示例14: seqVec
void TopSegmentIteratorToSiteTest::createCallBack(AlignmentPtr alignment)
{
vector<Sequence::Info> seqVec(1);
TopSegmentIteratorPtr ti;
TopSegmentStruct ts;
// case 1: single segment
Genome* case1 = alignment->addRootGenome("case1");
seqVec[0] = Sequence::Info("Sequence", 10, 2, 0);
case1->setDimensions(seqVec);
ti = case1->getTopSegmentIterator();
ts.set(0, 9);
ts.applyTo(ti);
ti->toRight();
ts.set(9, 1);
ts.applyTo(ti);
case1 = NULL;
// case 2: bunch of random segments
const hal_size_t numSegs = 1133;
hal_size_t total = 0;
vector<hal_size_t> segLens(numSegs);
for (size_t i = 0 ; i < numSegs; ++i)
{
hal_size_t len = rand() % 77 + 1;
segLens[i] = len;
total += len;
assert(len > 0);
}
Genome* case2 = alignment->addRootGenome("case2");
seqVec[0] = Sequence::Info("Sequence", total, numSegs, 0);
case2->setDimensions(seqVec);
hal_index_t prev = 0;
for (size_t i = 0 ; i < numSegs; ++i)
{
ti = case2->getTopSegmentIterator((hal_index_t)i);
ts.set(prev, segLens[i]);
prev += segLens[i];
ts.applyTo(ti);
}
}
示例15: toRightNextUngapped
void GappedBottomSegmentIterator::toRightNextUngapped(TopSegmentIteratorPtr topSeqIt) const {
while (topSeqIt->tseg()->hasParent() == false && topSeqIt->getLength() <= _gapThreshold) {
if ((!topSeqIt->getReversed() && topSeqIt->getTopSegment()->isLast()) ||
(topSeqIt->getReversed() && topSeqIt->getTopSegment()->isFirst())) {
break;
}
topSeqIt->toRight();
}
}