4 * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.
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
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.
28 #include "../general/clustalw.h"
29 #include "../general/userparams.h"
30 #include "../general/utils.h"
31 #include "../general/Array2D.h"
37 typedef vector<short> Xref;
38 typedef vector<short> Matrix;
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,
54 int getMatrixNumForMenu(int alignResidueType, int alignType);
55 int getPairwiseMatrix(int matrix[NUMRES][NUMRES], PairScaleValues& scale,
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.
62 int getDNAMatrixNum();
64 int getPWDNAMatrixNum();
65 void getQTMatrixForHistogram(int matrix[NUMRES][NUMRES]);
67 int getQTAAHistMatNum(){return QTAAHistMatNum;};
68 int getQTDNAHistMatNum(){return QTDNAHistMatNum;};
69 void setQTAAHistMatNum(int num){QTAAHistMatNum = num;};
70 void setQTDNAHistMatNum(int num){QTDNAHistMatNum = num;};
72 void getQTMatrixForLowScoreSeg(int matrix[NUMRES][NUMRES]);
73 int getQTsegmentDNAMatNum(){return QTsegmentDNAMatNum;}
74 void setQTsegmentDNAMatNum(int dnaMat){QTsegmentDNAMatNum = dnaMat;}
75 int getQTsegmentAAMatNum(){return QTsegmentAAMatNum;}
76 void setQTsegmentAAMatNum(int aaMat){QTsegmentAAMatNum = aaMat;}
78 void tempInterface(int alignResidueType, int alignType);
79 void setValuesToDefault();
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);
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);
110 string* DNAMatrixName;
111 string* pwMatrixName;
112 string* pwDNAMatrixName;
114 // Matrix cross references.
117 Xref DNAXref; // User defined dna xref
119 Xref pwAAXref; // pairwise
123 Xref QTsegmentDNAXref;
124 Xref QTsegmentAAXref;
125 vector<Xref> AAXrefseries;
127 vector<Matrix> userMatSeries;
132 Matrix QTscoreUserMatrix;
133 Matrix QTscoreUserDNAMatrix;
134 Matrix QTsegmentDNAMatrix;
135 Matrix QTsegmentAAMatrix;
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;
156 Matrix* clustalvdnamtVec;
157 Matrix* swgapdnamtVec;
159 int matrixAvgScore; // NOTE Needed by other classes.
160 UserMatrixSeries matSeries;
165 int QTsegmentDNAMatNum;
166 int QTsegmentAAMatNum;
168 // Temp, to hold current selection