Exemple #1
0
  double processInternalChild(Sequence &parentNmer,int childID,
			      NthOrdSubstMatrix &Pt) {
    Array2D<double>::RowIn2DArray<double> row=L[childID];
    Array1D<double> V(numNmers);
    Sequence childNmer;
    for(int i=0 ; i<numNmers ; ++i) {
      childNmer.fromInt(i,numCols,alphabetMap);
      double joint=jointProb(parentNmer,childNmer,Pt);
      V[i]=safeAdd(joint,row[i]);
    }
    double ll=sumLogProbs(V);
    return ll;
  }
Exemple #2
0
  virtual void processNode(InternalNode &u) {
    int id=u.getID();
    Array2D<double>::RowIn2DArray<double> row=L[id];
    int left=u.getLeft()->getID(), right=u.getRight()->getID();
    NthOrdSubstMatrix &leftPt=*u.getLeftSubstMatrix();
    NthOrdSubstMatrix &rightPt=*u.getRightSubstMatrix();
    Sequence nmer;
    for(int i=0 ; i<numNmers ; ++i) {
      nmer.fromInt(i,numCols,alphabetMap);
      row[i]=
	processInternalChild(nmer,left,leftPt)+
	processInternalChild(nmer,right,rightPt);
    }
  }
Exemple #3
0
void NmerRateMatrix::eqFreqsFromMarginals(Array1D<double> singleNucEqFreqs)
{
  eqSingle=singleNucEqFreqs;

  const int n=order+1;
  Sequence nmer;
  for(int i=0 ; i<numNmers ; ++i) {
    nmer.fromInt(i,n,alphabetMap);
    double P=1.0;
    for(int pos=0 ; pos<n ; ++pos) {
      P*=singleNucEqFreqs[nmer[pos]]; // ### should be in log space??
      //cout<<singleNucEqFreqs[nmer[pos]]<<" * ";
    }
    //cout<<" = "<<P<<endl;
    eq[i]=P;
  }

  if(lowerOrderModel)
    static_cast<NmerRateMatrix*>(lowerOrderModel)->
      eqFreqsFromMarginals(singleNucEqFreqs);
}