(
A.Equiv <
B.Equiv);
68 return((*
A) < (*
B));
75CacheIter->second->Parents.clear();
76CacheIter->second->Children.clear();
77CacheIter->second->BestChild.Reset(
NULL);
86vector< TMergeNode > Children;
87Children.push_back(
m_Root);
89 while(!Children.empty()) {
96ChildIter->GetNCPointer()->Parents.clear();
97Children.push_back(*ChildIter);
153 returnFound->second;
164 if(
A->Equiv.Query.GetFrom() !=
B->Equiv.Query.GetFrom())
165 return(
A->Equiv.Query.GetFrom() <
B->Equiv.Query.GetFrom());
166 else if(
A->Equiv.Query.GetTo() !=
B->Equiv.Query.GetTo())
167 return(
A->Equiv.Query.GetTo() <
B->Equiv.Query.GetTo());
168 else if(
A->Equiv.Subjt.GetFrom() !=
B->Equiv.Subjt.GetFrom())
169 return(
A->Equiv.Subjt.GetFrom() <
B->Equiv.Subjt.GetFrom());
170 else if(
A->Equiv.Subjt.GetTo() !=
B->Equiv.Subjt.GetTo())
171 return(
A->Equiv.Subjt.GetTo() <
B->Equiv.Subjt.GetTo());
173 return A->Equiv.Strand <
B->Equiv.Strand;
177 if(
A->Equiv.Query.GetFrom() !=
B->Equiv.Query.GetFrom())
178 return(
A->Equiv.Query.GetFrom() >
B->Equiv.Query.GetFrom());
179 else if(
A->Equiv.Query.GetTo() !=
B->Equiv.Query.GetTo())
180 return(
A->Equiv.Query.GetTo() >
B->Equiv.Query.GetTo());
181 else if(
A->Equiv.Subjt.GetFrom() !=
B->Equiv.Subjt.GetFrom())
182 return(
A->Equiv.Subjt.GetFrom() <
B->Equiv.Subjt.GetFrom());
183 else if(
A->Equiv.Subjt.GetTo() !=
B->Equiv.Subjt.GetTo())
184 return(
A->Equiv.Subjt.GetTo() <
B->Equiv.Subjt.GetTo());
186 return A->Equiv.Strand <
B->Equiv.Strand;
192 if(
A->Equiv.Subjt.GetFrom() !=
B->Equiv.Subjt.GetFrom())
193 return(
A->Equiv.Subjt.GetFrom() <
B->Equiv.Subjt.GetFrom());
194 else if(
A->Equiv.Subjt.GetTo() !=
B->Equiv.Subjt.GetTo())
195 return(
A->Equiv.Subjt.GetTo() <
B->Equiv.Subjt.GetTo());
196 else if(
A->Equiv.Query.GetFrom() !=
B->Equiv.Query.GetFrom())
197 return(
A->Equiv.Query.GetFrom() <
B->Equiv.Query.GetFrom());
198 else if(
A->Equiv.Query.GetTo() !=
B->Equiv.Query.GetTo())
199 return(
A->Equiv.Query.GetTo() <
B->Equiv.Query.GetTo());
201 return A->Equiv.Strand <
B->Equiv.Strand;
230 boolHasAfters =
false;
241 intMaxUD=0, MaxDD=0;
242 if(Befores.
empty()) {
247MaxUD =
max(MaxUD, Depth);
249Explored.
clear(); Inserted.clear();
253 if(Befores.
empty()) {
257Explored.
clear(); Inserted.clear();
261 #ifdef MERGE_TREE_VERBOSE_DEBUG 283 if(Befores.
empty())
313QVec.push_back(NewNode);
314SVec.push_back(NewNode);
326 TSeqPosPQ = QVec[0]->Equiv.Query.GetFrom();
328 for(
size_tI = 1; I < QVec.size(); I++) {
329 TSeqPosCQ = QVec[I]->Equiv.Query.GetFrom();
338 TSeqPos PS= SVec[0]->Equiv.Subjt.GetFrom();
340 for(
size_tI = 1; I < SVec.size(); I++) {
341 TSeqPosCS = SVec[I]->Equiv.Subjt.GetFrom();
371 if(Explored.
get(Curr->
Id)) {
374Explored.
set(Curr->
Id,
true);
391 if(Explored.
get(Curr->
Id)) {
392 returnInserted.
get(Curr->
Id);
395Explored.
set(Curr->
Id,
true);
403 boolSubInsert =
false;
405SubInsert |=
x_FindBefores(New, *ChildIter, Befores, Explored, Inserted, Depth);
413Inserted.
set(Curr->
Id,
true);
417Inserted.
set(Curr->
Id,
true);
433 if(Explored.
get(Curr->
Id)) {
434 returnInserted.
get(Curr->
Id);
437Explored.
set(Curr->
Id,
true);
447Inserted.
set(Curr->
Id,
true);
452SubInsert &=
x_FindAfters(New, *ChildIter, Afters, Explored, Inserted);
456Inserted.
set(Curr->
Id,
true);
472 if(Explored.
get(Curr->
Id)) {
473 returnInserted.
get(Curr->
Id);
475Explored.
set(Curr->
Id,
true);
502Befores.
erase(Others);
507Inserted.
set(Curr->
Id,
true);
511 boolSubInsert =
false;
526vector<TFrameRef> FrameStack;
528TFrameBuffer::iterator NextFrame = FrameBuffer.begin();
531FirstFrame->
Curr= StartCurr;
535FrameStack.push_back(FirstFrame);
537 while(!FrameStack.empty()) {
542FrameStack.pop_back();
547 if(Explored.
get(Frame->
Curr->
Id)) {
549FrameStack.pop_back();
552Explored.
set(Frame->
Curr->
Id,
true);
556FrameStack.pop_back();
570FrameStack.pop_back();
574 boolBeforeFound =
false;
586Befores.
erase(Others);
592FrameStack.pop_back();
597Inserted.
set(Frame->
Curr->
Id,
true);
600FrameStack.pop_back();
605Explored.
set(Frame->
Curr->
Id,
false);
607 if(NextFrame == FrameBuffer.end()) {
609NextFrame = FrameBuffer.insert(FrameBuffer.end(),
613NewFrame->
Curr= *ParentIter;
617FrameStack.push_back(NewFrame);
623 boolSubInsert =
false;
625SubInsert |= ChildFrame->
Returned;
629FrameStack.pop_back();
635FrameStack.pop_back();
648 if(Explored.
get(Curr->
Id)) {
649 returnInserted.
get(Curr->
Id);
653Explored.
set(Curr->
Id,
true);
661 boolSubInsert =
false;
663SubInsert |=
x_FindAfters_Up(New, *ParentIter, Afters, Explored, Inserted);
667Inserted.
set(Curr->
Id,
true);
671Inserted.
set(Curr->
Id,
true);
719 if(Result && Result->
ChainScore> BestChildScore) {
738 if(BestChild.
IsNull()) {
747 while(!CurrChild.
IsNull()) {
766RebuildExplore.
clear();
786 #ifdef MERGE_TREE_VERBOSE_DEBUG 787 boolDEBUG_CURR_NODE =
false;
788 if(CurrNode->
Id== -1)
789DEBUG_CURR_NODE =
true;
793 if(Explored.
get(CurrNode->
Id)) {
794 #ifdef MERGE_TREE_VERBOSE_DEBUG 795 if(DEBUG_CURR_NODE) cerr << __LINE__ << endl;
800Explored.
set(CurrNode->
Id,
true);
806 #ifdef MERGE_TREE_VERBOSE_DEBUG 808cerr <<
"Self: "<< CurrNode->
SelfScore<< endl;
826 #ifdef MERGE_TREE_VERBOSE_DEBUG 827 if(DEBUG_CURR_NODE) {
828cerr <<
"Id: "<< Result->
Id<<
" CScore: "<< Result->
ChainScore<< endl;
831 if(BestChildUnMod.
IsNull() ||
833 #ifdef MERGE_TREE_VERBOSE_DEBUG 835cerr <<
" UM: "<< Result->
ChainScore<< endl;
837BestChildUnMod = Result;
842 ssize_tGapOpen = 0, GapExtend = 0;
845 #ifdef MERGE_TREE_VERBOSE_DEBUG 847cerr <<
" GO: "<< GapOpen <<
"\tGE: "<< GapExtend << endl;
854 #ifdef MERGE_TREE_VERBOSE_DEBUG 856cerr <<
" Mod: "<< CurrChildModScore <<
" Best: "<< BestChildModScore << endl;
860 if(CurrChildModScore > BestChildModScore) {
861BestChildModScore = CurrChildModScore;
862BestChildMod = Result;
863 #ifdef MERGE_TREE_VERBOSE_DEBUG 865cerr <<
" New Best Mod"<< endl;
871 if(BestChildUnMod.
NotNull()) {
873UnBest = BestChildUnMod;
875UnBest = BestChildUnMod;
883 if(BestChildMod.
IsNull()) {
886 #ifdef MERGE_TREE_VERBOSE_DEBUG 887 if(DEBUG_CURR_NODE) cerr << __LINE__ << endl;
892 if(BestChildModScore > 0) {
897 #ifdef MERGE_TREE_VERBOSE_DEBUG 898 if(DEBUG_CURR_NODE) cerr << __LINE__ << endl;
905 #ifdef MERGE_TREE_VERBOSE_DEBUG 906 if(DEBUG_CURR_NODE) cerr << __LINE__ << endl;
930vector< CRef<SSearchIterFrame> > FrameStack;
933FirstFrame->CurrNode = StartNode;
934FirstFrame->VisitCount = 0;
935FrameStack.push_back(FirstFrame);
937 while(!FrameStack.empty()) {
946 if(Frame->CurrNode.
IsNull()) {
947FrameStack.pop_back();
951 #ifdef MERGE_TREE_VERBOSE_DEBUG 952 boolDEBUG_CURR_NODE =
false;
953 if(Frame->CurrNode->Id == -1)
954DEBUG_CURR_NODE =
true;
957 if(Explored.
get(Frame->CurrNode->Id)) {
958 #ifdef MERGE_TREE_VERBOSE_DEBUG 959 if(DEBUG_CURR_NODE) cerr << __LINE__ << endl;
961Frame->Returned = Frame->CurrNode;
962FrameStack.pop_back();
967 if(Frame->VisitCount == 0) {
970NextFrame->CurrNode = *ChildNodeIter;
971NextFrame->VisitCount = 0;
972FrameStack.push_back(NextFrame);
973Frame->ChildFrames.push_front(NextFrame);
982Frame->CurrNode->SelfScore = SelfScore;
983Frame->CurrNode->ChainScore = SelfScore;
984 #ifdef MERGE_TREE_VERBOSE_DEBUG 986cerr <<
"Self: "<< Frame->CurrNode->SelfScore << endl;
998 TMergeNodeResult = (*ChildFrameIter)->Returned;
1001 #ifdef MERGE_TREE_VERBOSE_DEBUG 1002 if(DEBUG_CURR_NODE) {
1003cerr <<
"Id: "<< Result->
Id<<
" CScore: "<< Result->
ChainScore<< endl;
1008 #ifdef MERGE_TREE_VERBOSE_DEBUG 1009 if(DEBUG_CURR_NODE)
1010cerr <<
" UM: "<< Result->
ChainScore<< endl;
1017 ssize_tGapOpen = 0, GapExtend = 0;
1018 x_EvalGap(Frame->CurrNode->Equiv, Result->
Equiv, GapOpen, GapExtend);
1020 #ifdef MERGE_TREE_VERBOSE_DEBUG 1021 if(DEBUG_CURR_NODE)
1022cerr <<
" GO: "<< GapOpen <<
"\tGE: "<< GapExtend << endl;
1029 #ifdef MERGE_TREE_VERBOSE_DEBUG 1030 if(DEBUG_CURR_NODE)
1031cerr <<
" Mod: "<< CurrChildModScore <<
" Best: "<< Frame->BestChildModScore << endl;
1035 if(CurrChildModScore > Frame->BestChildModScore) {
1036Frame->BestChildModScore = CurrChildModScore;
1037Frame->BestChildMod = Result;
1038 #ifdef MERGE_TREE_VERBOSE_DEBUG 1039 if(DEBUG_CURR_NODE)
1040cerr <<
" New Best Mod"<< endl;
1043 else if(CurrChildModScore == Frame->BestChildModScore &&
1044Frame->CurrNode->Equiv.AlignId == Result->
Equiv.
AlignId) {
1045Frame->BestChildModScore = CurrChildModScore;
1046Frame->BestChildMod = Result;
1049 #ifdef MERGE_TREE_VERBOSE_DEBUG 1050 if(DEBUG_CURR_NODE)
1051cerr <<
" New Align-Match Mod"<< endl;
1054 else if(CurrChildModScore == Frame->BestChildModScore && GapOpen > 0) {
1055Frame->BestChildModScore = CurrChildModScore;
1056Frame->BestChildMod = Result;
1059 #ifdef MERGE_TREE_VERBOSE_DEBUG 1060 if(DEBUG_CURR_NODE)
1061cerr <<
" New Left Shift Mod"<< endl;
1067Frame->ChildFrames.clear();
1070Explored.
set(Frame->CurrNode->Id,
true);
1072 if(Frame->BestChildMod.
IsNull()) {
1073Frame->CurrNode->ChainScore = Frame->CurrNode->SelfScore;
1074Frame->CurrNode->BestChild.
Reset(
NULL);
1075 #ifdef MERGE_TREE_VERBOSE_DEBUG 1076 if(DEBUG_CURR_NODE) cerr << __LINE__ << endl;
1078Frame->Returned = Frame->CurrNode;
1079FrameStack.pop_back();
1083 if(Frame->BestChildModScore > 0) {
1084 ssize_tSumScore = Frame->CurrNode->SelfScore + Frame->BestChildModScore;
1085Frame->CurrNode->ChainScore = SumScore;
1086Frame->CurrNode->BestChild = Frame->BestChildMod;
1087 #ifdef MERGE_TREE_VERBOSE_DEBUG 1088 if(DEBUG_CURR_NODE) cerr << __LINE__ << endl;
1090Frame->Returned = Frame->CurrNode;
1091FrameStack.pop_back();
1095Frame->CurrNode->ChainScore = Frame->CurrNode->SelfScore;
1096Frame->CurrNode->BestChild.
Reset(
NULL);
1097 #ifdef MERGE_TREE_VERBOSE_DEBUG 1098 if(DEBUG_CURR_NODE) cerr << __LINE__ << endl;
1100Frame->Returned = Frame->CurrNode;
1101FrameStack.pop_back();
1108 returnFirstFrame->Returned;
1129QueryDiff =
max(QueryDiff, QueryDiffM);
1130SubjtDiff =
max(SubjtDiff, SubjtDiffM);
1137GapExtend = (
ssize_t)sqrt( pow((
double)QueryDiff, 2) + pow((
double)SubjtDiff, 2) ) ;
1147TEquivList::const_iterator Prev =
Path.end();
1150 if(EquivIter->Empty())
1153 if(Prev !=
Path.end()) {
1156 x_EvalGap(*Prev, *EquivIter, GapOpen, GapExtend);
1161Accum.
Match+= EquivIter->Matches;
1162Accum.
MisMatch+= EquivIter->MisMatches;
1195 if(Parent == ToFind)
1200 if(Explored.
get(Parent->
Id)) {
1203Explored.
set(Parent->
Id,
true);
1205vector< CRef<SEventualChildFrame> > FrameStack;
1208FirstFrame->Parent = Parent;
1209FrameStack.push_back(FirstFrame);
1211 while(!FrameStack.empty()) {
1213FrameStack.pop_back();
1215 if(Frame->Parent == ToFind)
1217 if(Frame->Parent->Equiv == ToFind->
Equiv)
1220 if(Explored.
get(Frame->Parent->Id)) {
1223Explored.
set(Frame->Parent->Id,
true);
1226 if( (*ChildIter) == ToFind)
1228 if( (*ChildIter)->Equiv == ToFind->
Equiv)
1231 if(Explored.
get((*ChildIter)->Id)) {
1240NewFrame->Parent = *ChildIter;
1241FrameStack.push_back(NewFrame);
1260 if(Explored.
get(Node->
Id))
1262Explored.
set(Node->
Id);
1264 Out<< Count <<
"\t"<< Node->
Id;
1265 for(
int i=0;
i<Level;
i++)
Out<< (Count % 2 == 0 ?
'-':
'.');
1270 Out<<
"\t"<<
"LEAF";
1275 x_Print(
Out, *ChildIter, Level+1, Count, Explored);
1282 Out<<
"digraph All {"<< endl;
1289 Out<<
" } "<< endl;
1294 if(Explored.
get(Node->
Id))
1296Explored.
set(Node->
Id);
1298 Out<< Node->
Id<<
" ";
1310 Out<<
" ];"<< endl;
1320 if(Explored.
get(Node->
Id))
1322Explored.
set(Node->
Id);
1326 Out<< Node->
Id<<
" -> "<< (*ChildIter)->Id;
1329 Out<<
"color=blue";
1331 Out<<
" ];"<< endl;
1342 if(Explored.
get(Node->
Id))
1344Explored.
set(Node->
Id);
1357 if(Explored.
get(Node->
Id))
1359Explored.
set(Node->
Id);
ERelative CalcRelative(const CEquivRange &Check) const
objects::ENa_strand Strand
set< CRef< CMergeNode > > Children
CRef< CMergeNode > BestChild
set< CRef< CMergeNode > > Parents
TInterruptFnPtr m_Callback
void AddEquiv(CEquivRange NewEquiv)
int Score(const TEquivList &Path) const
CTreeAlignMerger & m_AlignMerger
deque< SFindBeforesIterFrame > TFrameBuffer
void x_RemoveParent(TMergeNode Child, TMergeNode Parent)
void x_Dot_Edges(CNcbiOstream &Out, TMergeNode Node, TBitVec &Explored)
bool x_FindBefores_Up_Iter(TMergeNode New, TMergeNode StartCurr, set< TMergeNode > &Befores, TBitVec &Explored, TBitVec &Inserted, int &Depth)
void x_Dot(CNcbiOstream &Out, TMergeNode Node)
void x_LinkNodes(TMergeNode Parent, TMergeNode Child)
set< TMergeNode > m_Leaves
void Search(TEquivList &Path, bool Once=false)
void Print(CNcbiOstream &Out)
void x_Dot_Nodes(CNcbiOstream &Out, TMergeNode Node, TBitVec &Explored)
bool x_FindBefores(TMergeNode New, TMergeNode Curr, set< TMergeNode > &Befores, TBitVec &Explored, TBitVec &Inserted, int &Depth)
void x_UnLinkNodes(TMergeNode Parent, TMergeNode Child)
void x_AddChild(TMergeNode Parent, TMergeNode Child)
void x_AddParent(TMergeNode Child, TMergeNode Parent)
bool x_FindBefores_Up_Recur(TMergeNode New, TMergeNode Curr, set< TMergeNode > &Befores, TBitVec &Explored, TBitVec &Inserted, int &Depth)
void x_Print(CNcbiOstream &Out, TMergeNode Node, int Level, int &Count, TBitVec &Explored)
void AddEquivs(const TEquivList &Equivs)
void x_FindLeafs(TMergeNode Curr, set< TMergeNode > &Leafs, TBitVec &Explored)
TMergeNode x_GetNode(CEquivRange Equiv)
TMergeNode x_Search_Iter(TMergeNode StartNode, TBitVec &Explored, TMergeNode &UnBest)
bool x_FindAfters(TMergeNode New, TMergeNode Curr, set< TMergeNode > &Afters, TBitVec &Explored, TBitVec &Inserted)
size_t x_CountChildLinks(TMergeNode Node, TBitVec &Explored) const
bool x_FindAfters_Up(TMergeNode New, TMergeNode Curr, set< TMergeNode > &Afters, TBitVec &Explored, TBitVec &Inserted)
size_t x_CountChildNodes(TMergeNode Node, TBitVec &Explored) const
void x_RemoveChild(TMergeNode Parent, TMergeNode Child)
void x_CheckInterruptCallback()
bool x_IsEventualChildOf(TMergeNode Parent, TMergeNode ToFind, TBitVec &Explored)
unsigned int m_InterruptCounter
TMergeNode x_Search_Recur(TMergeNode CurrNode, TBitVec &Explored, TMergeNode &UnBest)
static const unsigned int INTERRUPT_CHECK_RATE
void x_EvalGap(const CEquivRange &Early, const CEquivRange &Late, ssize_t &GapOpen, ssize_t &GapExtend) const
CMergeTree::TFrameBuffer m_FrameBuffer
CMergeTree::TBitVec m_Explored
CMergeTree::TBitVec m_Inserted
bool get(size_t index) const
container_type::iterator iterator
const_iterator end() const
const_iterator find(const key_type &key) const
iterator_bool insert(const value_type &val)
vector< CEquivRange > TEquivList
string Path(const string &dir, const string &file)
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define ERASE_ITERATE(Type, Var, Cont)
Non-constant version with ability to erase current element, if container permits.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
#define REVERSE_ITERATE(Type, Var, Cont)
ITERATE macro to reverse sequence through container elements.
bool NotNull(void) const THROWS_NONE
Check if pointer is not null â same effect as NotEmpty().
void Reset(void)
Reset reference object.
bool IsNull(void) const THROWS_NONE
Check if pointer is null â same effect as Empty().
bool AbuttingWith(const TThisType &r) const
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
IO_PREFIX::ostream CNcbiOstream
Portable alias for ostream.
TTo GetTo(void) const
Get the To member data.
TFrom GetFrom(void) const
Get the From member data.
bool s_SortMergeNodeByQuery_Minus(const TMergeNode &A, const TMergeNode &B)
bool s_SortMergeNodeBySubjt(const TMergeNode &A, const TMergeNode &B)
bool operator<(const CMergeNode &A, const CMergeNode &B)
bool s_SortMergeNodeByQuery(const TMergeNode &A, const TMergeNode &B)
vector< TMergeNode > TMergeNodeVec
CRef< CMergeNode > TMergeNode
constexpr auto sort(_Init &&init)
void Out(T t, int w, CNcbiOstream &to=cout)
vector< TFrameRef > ChildFrames
ssize_t BestChildModScore
list< CRef< SSearchIterFrame > > ChildFrames
void PS(const CSerialObject *obj)
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