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