1 /** 2 * Author: Mark Larkin 3 * 4 * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson. 5 */ 6 /** 7 * This is the interface class to all the substitution matrices. 8 * It provides the matrices in a form that the rest of the program can use. 9 * It is also used to store the user defined matrix. This will be used mainly as an interface 10 * to the matrices defined in matrices.h. 11 * The way this class will work is the user can read in matrix series or a single matrix, 12 * or they can select one of the matrix series (e.g Blosum). This will then be used in the 13 * alignment stages. There are separate matrices for amino acid pairwise and progressive, 14 * and for DNA alignments both pairwise and progressive. 15 * It is possible to have a series of matrices that are user defined for amino acid 16 * progressive ONLY!! 17 * A single matrix is choosen for pairwise and for DNA alignments. 18 * This class does 3 jobs. It reads in matrices from files/arrays, it provides 19 * matrices in the formats that are used in the alignment stage, it allows users to select 20 * which matrices they would like to use. 21 */ 22 23 #ifndef SUBMATRIX_H 24 #define SUBMATRIX_H 25 26 #include <vector> 27 #include <string> 28 #include "../general/clustalw.h" 29 #include "../general/userparams.h" 30 #include "../general/utils.h" 31 #include "../general/Array2D.h" 32 33 namespace clustalw 34 { 35 using namespace std; 36 37 typedef vector<short> Xref; 38 typedef vector<short> Matrix; 39 40 class SubMatrix 41 { 42 public: 43 /* Functions */ 44 SubMatrix(); 45 ~SubMatrix(); 46 47 bool getUserMatFromFile(char *str, int alignResidueType, int alignType); 48 bool getAAScoreMatFromFile(char *str); 49 bool getDNAScoreMatFromFile(char *str); 50 bool getQTLowScoreMatFromFile(char *fileName, bool dna); 51 bool getUserMatSeriesFromFile(char *str); 52 void setCurrentNameAndNum(string _matrixName, int _matrixNum, int alignResidueType, 53 int alignType); 54 int getMatrixNumForMenu(int alignResidueType, int alignType); 55 int getPairwiseMatrix(int matrix[NUMRES][NUMRES], PairScaleValues& scale, 56 int& matAvg); 57 int getProfileAlignMatrix(int matrix[NUMRES][NUMRES], double pcid, int minLen, 58 PrfScaleValues& scaleParam, int& matAvg); 59 int getAlnScoreMatrix(int matrix[NUMRES][NUMRES]); 60 // Access functions for the interactive menu. 61 int getMatrixNum(); 62 int getDNAMatrixNum(); 63 int getPWMatrixNum(); 64 int getPWDNAMatrixNum(); 65 void getQTMatrixForHistogram(int matrix[NUMRES][NUMRES]); 66 // NOTE Qt getQTAAHistMatNum()67 int getQTAAHistMatNum(){return QTAAHistMatNum;}; getQTDNAHistMatNum()68 int getQTDNAHistMatNum(){return QTDNAHistMatNum;}; setQTAAHistMatNum(int num)69 void setQTAAHistMatNum(int num){QTAAHistMatNum = num;}; setQTDNAHistMatNum(int num)70 void setQTDNAHistMatNum(int num){QTDNAHistMatNum = num;}; 71 72 void getQTMatrixForLowScoreSeg(int matrix[NUMRES][NUMRES]); getQTsegmentDNAMatNum()73 int getQTsegmentDNAMatNum(){return QTsegmentDNAMatNum;} setQTsegmentDNAMatNum(int dnaMat)74 void setQTsegmentDNAMatNum(int dnaMat){QTsegmentDNAMatNum = dnaMat;} getQTsegmentAAMatNum()75 int getQTsegmentAAMatNum(){return QTsegmentAAMatNum;} setQTsegmentAAMatNum(int aaMat)76 void setQTsegmentAAMatNum(int aaMat){QTsegmentAAMatNum = aaMat;} 77 78 void tempInterface(int alignResidueType, int alignType); 79 void setValuesToDefault(); 80 /* Attributes */ 81 82 private: 83 84 /* Functions */ 85 int getMatrix(Matrix* matPtr, Xref* xref, int matrix[NUMRES][NUMRES], 86 bool negFlag, int scale, bool minimise = false); 87 int readMatrixSeries(const char *fileName, Matrix& userMat, Xref& xref); 88 int readUserMatrix(const char *fileName, Matrix& userMat, Xref& xref); 89 int getArgs(char *inline1, char *args[], int max); 90 void setUpCrossReferences(); 91 bool commentline(char* line); 92 93 // The functions below are purely for testing purposes. 94 void printGetMatrixResults(int mat[NUMRES][NUMRES]); 95 void compareMatrices(int mat1[NUMRES][NUMRES], int mat2[NUMRES][NUMRES]); 96 void printInFormat(vector<short>& temp, char* name = "tempfile.out"); 97 void printVectorToFile(vector<short>& temp, char* name = "tempfile.out"); 98 Matrix* getUserMatAddress(int alignResidueType, int alignType); 99 Xref* getUserXrefAddress(int alignResidueType, int alignType); 100 void checkResidueAndAlignType(int alignResidueType, int alignType); 101 102 /* Attributes */ 103 bool userSeries; 104 int matrixNum; 105 int DNAMatrixNum; 106 int pwMatrixNum; 107 int pwDNAMatrixNum; 108 109 string* matrixName; 110 string* DNAMatrixName; 111 string* pwMatrixName; 112 string* pwDNAMatrixName; 113 114 // Matrix cross references. 115 Xref defaultDNAXref; 116 Xref defaultAAXref; 117 Xref DNAXref; // User defined dna xref 118 Xref AAXref; 119 Xref pwAAXref; // pairwise 120 Xref pwDNAXref; 121 Xref QTscoreXref; 122 Xref QTscoreDNAXref; 123 Xref QTsegmentDNAXref; 124 Xref QTsegmentAAXref; 125 vector<Xref> AAXrefseries; 126 127 vector<Matrix> userMatSeries; 128 Matrix userMat; 129 Matrix pwUserMat; 130 Matrix userDNAMat; 131 Matrix pwUserDNAMat; 132 Matrix QTscoreUserMatrix; 133 Matrix QTscoreUserDNAMatrix; 134 Matrix QTsegmentDNAMatrix; 135 Matrix QTsegmentAAMatrix; 136 137 /* These are vectors to store the matrices defined in matrices.h */ 138 const int sizenAAMatrix; 139 const int sizeDNAMatrix; 140 Matrix* blosum30mtVec; 141 Matrix* blosum40mtVec; 142 Matrix* blosum45mtVec; 143 Matrix* blosum62mt2Vec; 144 Matrix* blosum80mtVec; 145 Matrix* pam20mtVec; 146 Matrix* pam60mtVec; 147 Matrix* pam120mtVec; 148 Matrix* pam350mtVec; 149 Matrix* idmatVec; 150 Matrix* gon40mtVec; 151 Matrix* gon80mtVec; 152 Matrix* gon120mtVec; 153 Matrix* gon160mtVec; 154 Matrix* gon250mtVec; 155 Matrix* gon350mtVec; 156 Matrix* clustalvdnamtVec; 157 Matrix* swgapdnamtVec; 158 159 int matrixAvgScore; // NOTE Needed by other classes. 160 UserMatrixSeries matSeries; 161 string line2; 162 163 int QTDNAHistMatNum; 164 int QTAAHistMatNum; 165 int QTsegmentDNAMatNum; 166 int QTsegmentAAMatNum; 167 168 // Temp, to hold current selection 169 Matrix* mat; 170 Xref* xref; 171 Matrix* _matPtr; 172 Xref* _matXref; 173 174 }; 175 } 176 #endif 177 178