1 #ifndef SubstitutionMatrixProfileStates_H 2 #define SubstitutionMatrixProfileStates_H 3 #include "BaseMatrix.h" 4 #include "Debug.h" 5 #include "ProfileStates.h" 6 7 class SubstitutionMatrixProfileStates : public BaseMatrix { 8 public: SubstitutionMatrixProfileStates(std::string matrixName,double ** probMatrix,double * pBack,float ** rMatrix,float bitFactor,float scoreBias,int libAlphabetSize)9 SubstitutionMatrixProfileStates(std::string matrixName, 10 double **probMatrix, double * pBack, 11 float **rMatrix, float bitFactor, float scoreBias, 12 int libAlphabetSize) { 13 // alphabetSize = 32; 14 num2aa[0] = 'A'; 15 num2aa[1] = 'C'; 16 num2aa[2] = 'D'; 17 num2aa[3] = 'E'; 18 num2aa[4] = 'F'; 19 num2aa[5] = 'G'; 20 num2aa[6] = 'H'; 21 num2aa[7] = 'I'; 22 num2aa[8] = 'K'; 23 num2aa[9] = 'L'; 24 num2aa[10] = 'M'; 25 num2aa[11] = 'N'; 26 num2aa[12] = 'P'; 27 num2aa[13] = 'Q'; 28 num2aa[14] = 'R'; 29 num2aa[15] = 'S'; 30 num2aa[16] = 'T'; 31 num2aa[17] = 'V'; 32 num2aa[18] = 'W'; 33 num2aa[19] = 'Y'; 34 num2aa[20] = 'X'; 35 num2aa[21] = 'Z'; 36 num2aa[22] = '['; 37 num2aa[23] = '\\'; 38 num2aa[24] = ']'; 39 num2aa[25] = '^'; 40 num2aa[26] = '_'; 41 num2aa[27] = '`'; 42 num2aa[28] = 'a'; 43 num2aa[29] = 'b'; 44 num2aa[30] = 'c'; 45 num2aa[31] = 'd'; 46 alphabetSize = 21; 47 initMatrixMemory(alphabetSize); 48 49 for (int i = 0; i < alphabetSize; ++i){ 50 aa2num[static_cast<int>(num2aa[i])] = static_cast<unsigned char>(i); 51 } 52 53 this->matrixName = matrixName; 54 this->origAlphabetSize = alphabetSize; 55 this->scoreBias = scoreBias; 56 for(int i = 0; i < this->alphabetSize; i++) { 57 for (int j = 0; j < this->alphabetSize; j++) { 58 this->probMatrix[i][j] = probMatrix[i][j]; 59 } 60 } 61 62 for(int i = 0; i < this->alphabetSize; i++) { 63 this->pBack[i] = pBack[i]; 64 } 65 66 for(int i = 0; i < this->alphabetSize; i++) { 67 for (int j = 0; j < this->alphabetSize; j++) { 68 this->subMatrixPseudoCounts[i][j] = rMatrix[i][j]; 69 } 70 } 71 72 ps = new ProfileStates(libAlphabetSize,this->pBack); 73 this->scoreNormalization = ps->getScoreNormalization(); 74 this->bitFactor = bitFactor * scoreNormalization; 75 //this->num2aa[toIndex] = this->num2aa[fromIndex]; 76 77 this->subMatrix = new short*[alphabetSize]; 78 for (int i = 0; i<alphabetSize; i++) { 79 this->subMatrix[i] = new short[alphabetSize]; 80 } 81 generateSubMatrix(probMatrix, rMatrix, this->subMatrix, alphabetSize, bitFactor, scoreBias); 82 // remove X 83 this->alphabetSize = ps->getAlphSize(); 84 } 85 ~SubstitutionMatrixProfileStates()86 ~SubstitutionMatrixProfileStates(){ 87 delete ps; 88 // delete too much memory in the BaseMatrix destructor if I do not set this back to org. alph. size 89 alphabetSize = origAlphabetSize; 90 }; 91 getProfileVectorForState(size_t k)92 float * getProfileVectorForState(size_t k){ 93 return ps->getProfile(k); 94 } getBitFactor()95 virtual float getBitFactor() {return bitFactor; } getScoreNormalization()96 float getScoreNormalization(){ return scoreNormalization; } getScoreBias()97 virtual float getScoreBias() {return scoreBias; } 98 scoreState(float * profile,float * pav,size_t k)99 float scoreState(float *profile, float *pav, size_t k) { 100 return ps->score(profile, pav, k); 101 } 102 103 private: 104 ProfileStates * ps; 105 int origAlphabetSize; 106 float bitFactor; 107 float scoreBias; 108 float scoreNormalization; 109 }; 110 #endif 111