Пример #1
0
void ParsSprProposer::testInsertParsimony(TreeAln &traln, nodeptr insertPos, nodeptr prunedTree, branch2parsScore &result, int curDepth)  
{
  if(curDepth == 0 )
    return; 
  --curDepth; 

  nodeptr insertBack =  insertPos->back;   
  traln.clipNode(insertPos, prunedTree->next);
  traln.clipNode( insertBack, prunedTree->next->next); 
  
  auto b = BranchPlain(insertPos->number, insertBack->number); 

  if(_computedInsertions.size() > 0 && _computedInsertions.find(b) != _computedInsertions.end()) 
    {
      result[b] = _computedInsertions.at(b); 
    }
  else 
    {
      ParsimonyEvaluator::disorientNode(prunedTree); 
      result[b] =  _pEval.evaluate(traln, prunedTree, false  ); 
    }

  traln.clipNode(insertPos, insertBack); 
  prunedTree->next->back = prunedTree->next->next->back = NULL; 

  // recursively descend 
  if(not traln.isTipNode(insertPos))
    {
      testInsertParsimony(traln, insertPos->next->back, prunedTree, result, curDepth); 
      testInsertParsimony(traln, insertPos->next->next->back, prunedTree, result, curDepth); 
    }
}
Пример #2
0
ParsSprProposer::branch2parsScore
ParsSprProposer::determineScoresOfInsertions(TreeAln& traln, BranchPlain prunedTree  )  
{
  auto result = branch2parsScore{}; 

  nodeptr
    p = traln.findNodePtr(prunedTree), 
    pn = p->next->back , 
    pnn = p->next->next->back ; 

  // prune the subtree 
  traln.clipNode( pn, pnn); 
  p->next->back = p->next->next->back = NULL; 

  // fetch all parsimony scores   
  if(not traln.isTipNode(pn)) 
    {
      testInsertParsimony(traln, pn->next->back, p, result, _depth);
      testInsertParsimony(traln, pn->next->next->back, p, result, _depth); 
    }
  if(not traln.isTipNode(pnn))
    {
      testInsertParsimony(traln, pnn->next->back,p, result, _depth); 
      testInsertParsimony(traln, pnn->next->next->back,p, result, _depth); 
    }

  traln.clipNode( p->next, pn ); 
  traln.clipNode( p->next->next, pnn); 

  return result; 
}
Пример #3
0
static void addTraverseParsimony (tree *tr, nodeptr p, nodeptr q, int mintrav, int maxtrav, boolean doAll, boolean saveBranches)
{        
  if (doAll || (--mintrav <= 0))               
    testInsertParsimony(tr, p, q, saveBranches);	                 

  if (((q->number > tr->mxtips)) && ((--maxtrav > 0) || doAll))
    {	      
      addTraverseParsimony(tr, p, q->next->back, mintrav, maxtrav, doAll, saveBranches);	      
      addTraverseParsimony(tr, p, q->next->next->back, mintrav, maxtrav, doAll, saveBranches);              	     
    }
}