:m_len(
len), m_start(start), m_id(
id)
42:m_len(
len), m_start(start), m_id(-1)
47:m_len(-1), m_start(-1), m_id(-1)
51:m_len(rhs.m_len), m_start(rhs.m_start), m_id(rhs.m_id)
70 return!((*this) == rhs);
84 for(
inty = y0; y <= y1; y++)
86 if( y >= x0 && y <= x1)
101 boolintersected =
false;
107 if( y >= x0 && y <= x1)
115 if( y < x0 || y > x1)
174comBlock.
m_id= sit->m_id;
175comBlock.
m_start= sit->m_start;
176comBlock.
m_len= sit->m_len;
178 for(; sit !=
blocks.end(); ++sit)
180 if( (comBlock.
getEnd() + 1) != sit->m_start)
184comBlock.
m_len+= sit->m_len;
192: m_blocks(), m_seqId()
197: m_blocks(), m_seqId()
200vector<int> lens, starts;
203 assert(lens.size() == starts.size());
204 for(
unsigned int i= 0;
i< lens.size();
i++)
221: m_blocks(rhs.m_blocks), m_seqId(rhs.m_seqId)
251 for(
unsigned int i= 0;
i<
m_blocks.size();
i++)
263 for(
unsigned int i= 0;
i<
m_blocks.size();
i++)
273 unsigned intnBlocks =
m_blocks.size(), commonBlockExtSize = (commonBlockExt) ? commonBlockExt->size() : 0;
274 unsigned int i, j, k;
276 intthisStart, thisLen, thisContiguousLen;
277 intcommonNTermBlockZeroExt, nTermShift;
278 intcompleteBlockStart, completeBlockLen;
279 intprevCTermBlockExt, allowedCTermBlockExt, lastCTermBlockExt;
280 intblockNumberOnThisOfCompleteBlockStart;
281vector<int> commonCTermBlockExt, gapSizeAfterBlockInThis;
282 booluseInputBlockExtensions = (commonBlockExt && commonBlockExtSize == nBlocks + 1);
283 boolcompleteExtendsIntoGappedRegionInThis =
false;
290commonNTermBlockZeroExt = (useInputBlockExtensions) ? (*commonBlockExt)[0] : 0;
291 for(
i= 0;
i< nBlocks; ++
i)
293 if(
i== nBlocks - 1) {
294seqLen = sequenceLength;
297commonCTermBlockExt.push_back((useInputBlockExtensions) ? (*commonBlockExt)[
i+1] : 0);
303prevCTermBlockExt = 0;
304 for(j = 0; j < completeCopy.
getBlocks().size() && !completeExtendsIntoGappedRegionInThis; ++j) {
307blockNumberOnThisOfCompleteBlockStart = thisCopy.
getBlockNumber(completeBlockStart);
313 while(blockNumberOnThisOfCompleteBlockStart < 0 && nTermShift+1 < completeBlockLen) {
315blockNumberOnThisOfCompleteBlockStart = thisCopy.
getBlockNumber(completeBlockStart + nTermShift);
319 if(nTermShift > 0 && blockNumberOnThisOfCompleteBlockStart >= 0) {
320 if(blockNumberOnThisOfCompleteBlockStart == 0) {
321 if(commonNTermBlockZeroExt - nTermShift < 0) {
325 if(gapSizeAfterBlockInThis[blockNumberOnThisOfCompleteBlockStart - 1] - prevCTermBlockExt < nTermShift) {
329}
else if(blockNumberOnThisOfCompleteBlockStart < 0) {
333allowedCTermBlockExt = commonCTermBlockExt[blockNumberOnThisOfCompleteBlockStart];
335thisStart = thisCopy.
getBlock(blockNumberOnThisOfCompleteBlockStart).
getStart();
336thisLen = thisCopy.
getBlock(blockNumberOnThisOfCompleteBlockStart).
getLen();
352 if(thisStart - completeBlockStart > nTermShift) {
353completeExtendsIntoGappedRegionInThis =
true;
358 else if(thisLen + allowedCTermBlockExt - (completeBlockStart - thisStart) >= completeBlockLen) {
359prevCTermBlockExt = completeBlockLen - thisLen + (completeBlockStart - thisStart);
360 if(prevCTermBlockExt < 0) prevCTermBlockExt = 0;
369k = (unsigned) blockNumberOnThisOfCompleteBlockStart;
370thisContiguousLen = thisLen + allowedCTermBlockExt;
371lastCTermBlockExt = allowedCTermBlockExt;
372 while(k + 1 < gapSizeAfterBlockInThis.size() && gapSizeAfterBlockInThis[k] == commonCTermBlockExt[k]) {
374lastCTermBlockExt = gapSizeAfterBlockInThis[k];
375thisContiguousLen += thisCopy.
getBlock(k).
getLen() + lastCTermBlockExt;
379 if(thisContiguousLen - (completeBlockStart - thisStart) >= completeBlockLen) {
384prevCTermBlockExt = thisContiguousLen - completeBlockLen - (completeBlockStart - thisStart);
385 if(prevCTermBlockExt > lastCTermBlockExt || prevCTermBlockExt < 0) {
386prevCTermBlockExt = 0;
389completeExtendsIntoGappedRegionInThis =
true;
395 returncompleteExtendsIntoGappedRegionInThis;
402 for(
unsigned int i= 0;
i<
m_blocks.size();
i++)
417 for(
unsigned int i= 0;
i<
bm.m_blocks.size();
i++)
423uniqueDelta.
insert(*dit);
427 delta->insert(*sit);
435 for(
unsigned int i= 0;
i<
bm.m_blocks.size();
i++)
449 intresultBlockID = 0;
450 for(; dt !=
delta.end(); ++dt)
453 if(dt->objectBlockID < 0 || dt->objectBlockID >= (
int)
m_blocks.size())
456 returnpair<BlockModel*, bool>(
nullptr,
false);
459 Blockblock = srcBlock + (*dt);
461 result->m_blocks.push_back(block);
465 returnpair<BlockModel*, bool>(
result, (
result->getBlocks().size() ==
delta.size()) );
471pair<DeltaBlockModel*, bool> deltaStatus = target - (*this);
473 if(!(deltaStatus.second))
475 deletedeltaStatus.first;
478pair<BlockModel*, bool> bmStatus = (*this) + (*deltaStatus.first);
480 deletedeltaStatus.first;
483 if(target.
contain(*(bmStatus.first)))
484 returnbmStatus.first;
487 deletebmStatus.first;
496vector<int> blockIds;
498 if(blockIds.size() <= 0)
500 for(
unsigned intj = 0; j < blockIds.size(); j++)
511vector<int> blockIds;
513 if(blockIds.size() <= 0)
515 for(
unsigned intj = 0; j < blockIds.size(); j++)
517 BlockintersectedBlock(aBlock);
519 delta.insert(intersectedBlock - aBlock);
526 for(
unsigned int i= 0;
i<
m_blocks.size();
i++)
573 for(
unsigned int i= 0;
i<
m_blocks.size();
i++)
577vector< CRef< CSeq_id > >& seqIds = dd->SetIds();
580masterCopy->Assign(*(master.
getSeqId()));
582seqIds.push_back(masterCopy);
583seqIds.push_back(slaveCopy);
586starts.push_back(master.
m_blocks[
i].getStart());
587starts.push_back(
m_blocks[
i].getStart());
590ddList.push_back(dd);
599 returnlastBlock.
getEnd();
611 for(
unsigned int i= 0;
i<
m_blocks.size();
i++)
635 if(bn == (
int) (
m_blocks.size() - 1))
651 for(
unsigned int i= 1;
i<
m_blocks.size();
i++)
671 for(
unsigned int i= 1;
i<
m_blocks.size();
i++)
675errBlock = (
int)
i;
680errBlock = (
int)
i- 1;
692 intbmLo =
bm.getFirstAlignedPosition();
693 intbmHi =
bm.getLastAlignedPosition();
729vector<Block> maskedBlocks;
730vector<Block>& originalBlocks =
getBlocks();
731 unsigned int i, nOrigBlocks = originalBlocks.size();
732 unsigned intnMaskBlocks = maskBlocks.size();
735 intpos, start,
len;
736 intorigStart, origEnd;
737 intj, maskBlockStart, maskBlockEnd, maskFirst, maskLast;
740 if(nOrigBlocks == 0 || nMaskBlocks == 0)
return false;
745 for(
i= 0;
i< nMaskBlocks; ++
i) {
746maskBlockStart = maskBlocks[
i].getStart();
747maskBlockEnd = maskBlocks[
i].getEnd();
748 for(j = maskBlockStart; j <= maskBlockEnd; ++j) maskPositions.
insert(j);
750maskPosEnd = maskPositions.
end();
752maskFirst = maskBlocks[0].getStart();
753maskLast = maskBlocks.back().getEnd();
755 for(
i= 0;
i< nOrigBlocks; ++
i) {
756origStart = originalBlocks[
i].getStart();
757origEnd = originalBlocks[
i].getEnd();
760 if(origEnd < maskFirst || origStart > maskLast) {
761maskedBlocks.push_back(originalBlocks[
i]);
762maskedBlocks.back().setId(newBlockId);
769 for(pos = origStart; pos <= origEnd; ++pos) {
772 if(maskPositions.
find(pos) != maskPosEnd) {
774maskedBlocks.push_back(
Block(start,
len, newBlockId));
793maskedBlocks.push_back(
Block(start,
len, newBlockId));
801originalBlocks.clear();
802originalBlocks = maskedBlocks;
810 unsigned intnBlocks =
getBlocks().size();
811 if(nBlocks == 0)
return;
813vector<Block> maskBlocks;
814 intfirstAligned =
getBlocks().front().getStart();
815 intlastAligned =
getBlocks().back().getEnd();
818 if(firstAligned < (
int)
min) {
819maskBlocks.push_back(
Block(firstAligned,
min- firstAligned));
822 if(lastAligned > (
int)
max) {
823maskBlocks.push_back(
Block(
max+ 1, lastAligned -
max));
832 stringblockModelStr,
tmp;
833 unsigned intnBlocks =
m_blocks.size();
839 for(
unsigned int i= 0;
i< nBlocks; ++
i) {
844blockModelStr +=
tmp;
846 returnblockModelStr;
851 stringdeltaBlockModelStr,
tmp;
854 for(; dbm_cit != dbm_citEnd; ++dbm_cit) {
860deltaBlockModelStr +=
tmp;
862 returndeltaBlockModelStr;
866 return bm.toString();
872m_master(0), m_slave(0)
949 for(
int i= 0;
i< num;
i++)
961 if(ngap > ngapSlave)
965 if(cgap > cgapSlave)
1020pair<BlockModel*, bool> intersectedGuideSlave = guide.
getSlave() + *(deltaGuideToThis.first);
1024pair<BlockModel*, bool> intersectedThisSlave = (*m_slave) + *(deltaThisToGuide.first);
1026 if(intersectedGuideSlave.first && intersectedThisSlave.first) {
1028 assert((intersectedGuideSlave.first)->blockMatch(*(intersectedThisSlave.first)));
1033 m_master= intersectedGuideSlave.first;
1034 m_slave= intersectedThisSlave.first;
1047 boolhasEffect =
false;
1049vector<Block>& newBlocks = maskedBm.
getBlocks();
1050 unsigned int i, nBlocks = newBlocks.size();
1054 if(maskBlocks.size() > 0 && nBlocks > 0 && maskedBm.
mask(maskBlocks)) {
1060newOtherBlocks.clear();
1061 for(
i= 0;
i< nBlocks; ++
i) {
1063pos =
b.getStart();
1065 if(mappedPos >= 0) {
1066newOtherBlocks.push_back(
Block(mappedPos,
b.getLen(),
b.getId()));
int mapToSlave(int masterPos) const
BlockModelPair & operator=(const BlockModelPair &rhs)
CRef< CSeq_align > toSeqAlign() const
int mapToMaster(int slavePos) const
int remaster(const BlockModelPair &guide)
void extendMidway(int blockNum)
bool mask(const vector< Block > &maskBlocks, bool maskBasedOnMaster)
int getTotalBlockLength() const
bool mask(const BlockModel &maskBlockModel)
BlockModel * completeCastTo(const BlockModel &target) const
CRef< CSeq_id > getSeqId() const
int getLastAlignedPosition() const
bool isValid(int seqLen, int &errBlock) const
bool contain(const BlockModel &rhs) const
CRef< CSeq_align > toSeqAlign(const BlockModel &master) const
int getFirstAlignedPosition() const
bool completeModelExtendsIntoUnallowedGappedRegion(const BlockModel &completeModel, int sequenceLength, const vector< int > *commonBlockExt=NULL) const
void addBlock(Block &block)
int getGapToNTerminal(int bn) const
int getGapToCTerminal(int bn, int len=-1) const
pair< DeltaBlockModel *, bool > intersect(const BlockModel &bm) const
void findIntersectingBlocks(const Block &target, vector< int > &result) const
vector< Block > & getBlocks()
void clipToRange(unsigned int min, unsigned max)
pair< DeltaBlockModel *, bool > operator-(const BlockModel &bm) const
bool overlap(const BlockModel &bm) const
BlockModel & operator=(const BlockModel &rhs)
bool blockMatch(const BlockModel &bm) const
bool minusOneBlock(const Block &aBlock, DeltaBlockModel &delta) const
int getBlockNumber(int pos) const
pair< BlockModel *, bool > operator+(const DeltaBlockModel &delta) const
bool isAlike(const BlockModel &rhs) const
bool intersectOneBlock(const Block &aBlock, DeltaBlockModel &delta) const
bool operator==(const BlockModel &rhs) const
DeltaBlock operator-(const Block &object) const
bool intersect(Block &rhs) const
bool isIntersecting(const Block &rhs) const
static bool concatenate(const SortedBlocks &blocks, Block &comBlock)
bool contain(const Block &rhs) const
Block extend(int nExt, int cExt) const
bool operator!=(const Block &rhs) const
Block operator+(const DeltaBlock &deltaBlock) const
const Block & operator=(const Block &rhs)
void extendSelf(int nExt, int cExt)
bool operator==(const Block &rhs) const
const_iterator begin() const
const_iterator end() const
parent_type::iterator iterator
parent_type::const_iterator const_iterator
iterator_bool insert(const value_type &val)
const_iterator begin() const
parent_type::iterator iterator
const_iterator find(const key_type &key) const
const_iterator end() const
parent_type::const_iterator const_iterator
CSeq_align::C_Segs::TDendiag TDendiag
int GetBlockLengths(const CRef< CSeq_align > &seqAlign, vector< int > &lengths)
bool GetSeqID(const CRef< CSeq_align > &seqAlign, CRef< CSeq_id > &SeqID, bool getSlave=true)
int GetBlockStarts(const CRef< CSeq_align > &seqAlign, vector< int > &starts, bool onMaster)
string DeltaBlockModelToString(const DeltaBlockModel &dbm)
multiset< DeltaBlock > DeltaBlockModel
bool SeqIdsMatch(const CRef< CSeq_id > &id1, const CRef< CSeq_id > &id2)
string GetSeqIDStr(const CRef< CSeq_id > &SeqID)
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Optimized implementation of CSerialObject::Assign, which is not so efficient.
bool NotEmpty(void) const THROWS_NONE
Check if CRef is not empty â pointing to an object and has a non-null value.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
#define BEGIN_SCOPE(ns)
Define a new scope.
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
void SetSegs(TSegs &value)
Assign a value to Segs data member.
void SetDim(TDim value)
Assign a value to Dim data member.
vector< TSeqPos > TStarts
void SetType(TType value)
Assign a value to Type data member.
virtual void Reset(void)
Reset the whole object.
@ eType_partial
mapping pieces together
unsigned int
A callback function used to compare two keys in a database.
Int4 delta(size_t dimension_, const Int4 *score_)
static DP_BlockInfo * blocks
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4