Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / clustalw / src / substitutionMatrix / SubMatrix.h
diff --git a/website/archive/binaries/mac/src/clustalw/src/substitutionMatrix/SubMatrix.h b/website/archive/binaries/mac/src/clustalw/src/substitutionMatrix/SubMatrix.h
new file mode 100644 (file)
index 0000000..85aba2f
--- /dev/null
@@ -0,0 +1,177 @@
+/**
+ * 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
+