--- /dev/null
+/**
+ * Author: Mark Larkin
+ *
+ * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.
+ */
+/**
+ * This is the interface class to all the substitution matrices.
+ * It provides the matrices in a form that the rest of the program can use.
+ * It is also used to store the user defined matrix. This will be used mainly as an interface
+ * to the matrices defined in matrices.h.
+ * The way this class will work is the user can read in matrix series or a single matrix,
+ * or they can select one of the matrix series (e.g Blosum). This will then be used in the
+ * alignment stages. There are separate matrices for amino acid pairwise and progressive,
+ * and for DNA alignments both pairwise and progressive.
+ * It is possible to have a series of matrices that are user defined for amino acid
+ * progressive ONLY!!
+ * A single matrix is choosen for pairwise and for DNA alignments.
+ * This class does 3 jobs. It reads in matrices from files/arrays, it provides
+ * matrices in the formats that are used in the alignment stage, it allows users to select
+ * which matrices they would like to use.
+ */
+
+#ifndef SUBMATRIX_H
+#define SUBMATRIX_H
+
+#include <vector>
+#include <string>
+#include "../general/clustalw.h"
+#include "../general/userparams.h"
+#include "../general/utils.h"
+#include "../general/Array2D.h"
+
+namespace clustalw
+{
+using namespace std;
+
+typedef vector<short> Xref;
+typedef vector<short> Matrix;
+
+class SubMatrix
+{
+ public:
+ /* Functions */
+ SubMatrix();
+ ~SubMatrix();
+
+ bool getUserMatFromFile(char *str, int alignResidueType, int alignType);
+ bool getAAScoreMatFromFile(char *str);
+ bool getDNAScoreMatFromFile(char *str);
+ bool getQTLowScoreMatFromFile(char *fileName, bool dna);
+ bool getUserMatSeriesFromFile(char *str);
+ void setCurrentNameAndNum(string _matrixName, int _matrixNum, int alignResidueType,
+ int alignType);
+ int getMatrixNumForMenu(int alignResidueType, int alignType);
+ int getPairwiseMatrix(int matrix[NUMRES][NUMRES], PairScaleValues& scale,
+ int& matAvg);
+ int getProfileAlignMatrix(int matrix[NUMRES][NUMRES], double pcid, int minLen,
+ PrfScaleValues& scaleParam, int& matAvg);
+ int getAlnScoreMatrix(int matrix[NUMRES][NUMRES]);
+ // Access functions for the interactive menu.
+ int getMatrixNum();
+ int getDNAMatrixNum();
+ int getPWMatrixNum();
+ int getPWDNAMatrixNum();
+ void getQTMatrixForHistogram(int matrix[NUMRES][NUMRES]);
+ // NOTE Qt
+ int getQTAAHistMatNum(){return QTAAHistMatNum;};
+ int getQTDNAHistMatNum(){return QTDNAHistMatNum;};
+ void setQTAAHistMatNum(int num){QTAAHistMatNum = num;};
+ void setQTDNAHistMatNum(int num){QTDNAHistMatNum = num;};
+
+ void getQTMatrixForLowScoreSeg(int matrix[NUMRES][NUMRES]);
+ int getQTsegmentDNAMatNum(){return QTsegmentDNAMatNum;}
+ void setQTsegmentDNAMatNum(int dnaMat){QTsegmentDNAMatNum = dnaMat;}
+ int getQTsegmentAAMatNum(){return QTsegmentAAMatNum;}
+ void setQTsegmentAAMatNum(int aaMat){QTsegmentAAMatNum = aaMat;}
+
+ void tempInterface(int alignResidueType, int alignType);
+ void setValuesToDefault();
+ /* Attributes */
+
+ private:
+
+ /* Functions */
+ int getMatrix(Matrix* matPtr, Xref* xref, int matrix[NUMRES][NUMRES],
+ bool negFlag, int scale, bool minimise = false);
+ int readMatrixSeries(const char *fileName, Matrix& userMat, Xref& xref);
+ int readUserMatrix(const char *fileName, Matrix& userMat, Xref& xref);
+ int getArgs(char *inline1, char *args[], int max);
+ void setUpCrossReferences();
+ bool commentline(char* line);
+
+ // The functions below are purely for testing purposes.
+ void printGetMatrixResults(int mat[NUMRES][NUMRES]);
+ void compareMatrices(int mat1[NUMRES][NUMRES], int mat2[NUMRES][NUMRES]);
+ void printInFormat(vector<short>& temp, char* name = "tempfile.out");
+ void printVectorToFile(vector<short>& temp, char* name = "tempfile.out");
+ Matrix* getUserMatAddress(int alignResidueType, int alignType);
+ Xref* getUserXrefAddress(int alignResidueType, int alignType);
+ void checkResidueAndAlignType(int alignResidueType, int alignType);
+
+ /* Attributes */
+ bool userSeries;
+ int matrixNum;
+ int DNAMatrixNum;
+ int pwMatrixNum;
+ int pwDNAMatrixNum;
+
+ string* matrixName;
+ string* DNAMatrixName;
+ string* pwMatrixName;
+ string* pwDNAMatrixName;
+
+ // Matrix cross references.
+ Xref defaultDNAXref;
+ Xref defaultAAXref;
+ Xref DNAXref; // User defined dna xref
+ Xref AAXref;
+ Xref pwAAXref; // pairwise
+ Xref pwDNAXref;
+ Xref QTscoreXref;
+ Xref QTscoreDNAXref;
+ Xref QTsegmentDNAXref;
+ Xref QTsegmentAAXref;
+ vector<Xref> AAXrefseries;
+
+ vector<Matrix> userMatSeries;
+ Matrix userMat;
+ Matrix pwUserMat;
+ Matrix userDNAMat;
+ Matrix pwUserDNAMat;
+ Matrix QTscoreUserMatrix;
+ Matrix QTscoreUserDNAMatrix;
+ Matrix QTsegmentDNAMatrix;
+ Matrix QTsegmentAAMatrix;
+
+ /* These are vectors to store the matrices defined in matrices.h */
+ const int sizenAAMatrix;
+ const int sizeDNAMatrix;
+ Matrix* blosum30mtVec;
+ Matrix* blosum40mtVec;
+ Matrix* blosum45mtVec;
+ Matrix* blosum62mt2Vec;
+ Matrix* blosum80mtVec;
+ Matrix* pam20mtVec;
+ Matrix* pam60mtVec;
+ Matrix* pam120mtVec;
+ Matrix* pam350mtVec;
+ Matrix* idmatVec;
+ Matrix* gon40mtVec;
+ Matrix* gon80mtVec;
+ Matrix* gon120mtVec;
+ Matrix* gon160mtVec;
+ Matrix* gon250mtVec;
+ Matrix* gon350mtVec;
+ Matrix* clustalvdnamtVec;
+ Matrix* swgapdnamtVec;
+
+ int matrixAvgScore; // NOTE Needed by other classes.
+ UserMatrixSeries matSeries;
+ string line2;
+
+ int QTDNAHistMatNum;
+ int QTAAHistMatNum;
+ int QTsegmentDNAMatNum;
+ int QTsegmentAAMatNum;
+
+ // Temp, to hold current selection
+ Matrix* mat;
+ Xref* xref;
+ Matrix* _matPtr;
+ Xref* _matXref;
+
+};
+}
+#endif
+