// $Id: readDatMatrix.cpp 5805 2009-01-20 09:19:26Z adido $ //#ifndef unix //#define SSTREAM_KNOWN //#endif //#ifdef SSTREAM_KNOWN #include //#else //#include //oldVersion //#endif #include #include "readDatMatrix.h" #include "errorMsg.h" #include "logFile.h" //#define VERBOS void normalizeQ(VVdouble& q, const Vdouble& freq) { MDOUBLE sum =0; int i=0,j=0; for (i=0; i < q.size(); ++i) { sum += q[i][i]*freq[i]; } assert(sum!=0); MDOUBLE oneDividedBySum = -1.0/sum; // to avoid many divisions. for (i=0; i < q.size(); ++i) { for (j=0; j < q.size(); ++j) { q[i][j] = q[i][j]*oneDividedBySum; } } } void readDatMatrixFromFile(const string & matrixFileName, VVdouble & subMatrix, Vdouble & freq) { cout<<"****readDatMatrixFromFile******"<>subMatrix[i][j]; subMatrix[j][i] = subMatrix[i][j]; } } for (i=0; i < subMatrix.size(); ++i) { in>>freq[i]; } in.close(); //check: //LOG(5,<<" priting the 5*5 top part of the sub matrix: "<>subMatrix[i][j]; subMatrix[j][i] = subMatrix[i][j]; } } for (i=0; i < alphaSize; ++i) { in>>freq[i]; } } #include "fromQtoPt.h" #include "definitions.h" #include using namespace std; void pupAll::fillMatricesFromFile(const string & dataFileString) { VVdouble sMatrix; readDatMatrixFromFile(dataFileString,sMatrix,_freq); // readDatMatrixFromString(dataFileString,sMatrix,_freq); VVdouble qMatrix = fromWagSandFreqToQ(sMatrix,_freq); q2pt q2pt1; q2pt1.fillFromRateMatrix(_freq,qMatrix); _leftEigen = q2pt1.getLeftEigen(); _rightEigen = q2pt1.getRightEigen(); _eigenVector = q2pt1.getEigenVec(); } void pupAll::fillMatricesFromFile(const string & dataFileString, const Vdouble & freq) { #ifdef VERBOS LOG(5,<<"dataFileString = "<1) || (sum<0)) return false; return true; } VVdouble fromWagSandFreqToQ(const VVdouble & s,const Vdouble& freq){ VVdouble q(s.size()); for (int z=0; z < q.size(); ++z) q[z].resize(s.size(),0.0); int i,j; MDOUBLE sum; for ( i=0; i < s.size(); ++i) { sum =0; for (j=0; j < s.size(); ++j) { if (i!=j) q[i][j] = s[i][j]* freq[j]; sum += q[i][j]; } q[i][i] = -sum; } // normalizing q: normalizeQ(q,freq); // check: //sum =0; //for (i=0; i < s.size(); ++i){ // sum += q[i][i]*freq[i]; //} //LOG(5,<<" SUM OF DIAGOPNAL Q IS (should be -1) "<