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