ToPS
MultipleAlignment.hpp
00001 #ifndef MULTIPLE_ALIGNMENT_HPP
00002 #define MULTIPLE_ALIGNMENT_HPP
00003 
00004 #include <vector>
00005 #include <list>
00006 #include <map>
00007 #include <iostream>
00008 #include <fstream>
00009 #include <stack>
00010 #include <boost/timer.hpp>
00011 #include "ProbabilisticModel.hpp"
00012 #include "PairHiddenMarkovModel.hpp"
00013 #include "SequenceEntry.hpp"
00014 #include "ProbabilisticModelCreatorClient.hpp"
00015 
00016 using namespace std;
00017 
00018 namespace tops{
00019   
00020   typedef pair<int,int> seqPos;
00021 
00022   typedef struct{
00023     seqPos pos1;
00024     seqPos pos2;
00025     float prob;} postProb;
00026   
00027   typedef struct{
00028     int index;
00029     bool visited;
00030     bool isDead;
00031     vector<seqPos> colSeqPos;} column;    
00032 
00033   class DLLEXPORT MultipleAlignment{
00034 
00035   private:
00036     int _numberOfColumns;
00037     vector<column> _graph;
00038     map< seqPos,int > _seqPosMap; //isPresent[i][j] = -1 if residue j if sequence is is not present and isPresent[i][j] = m if it is present in node m
00039     list<postProb> _postProbs;
00040     SequenceList _seqs;
00041     vector<string> _names;
00042     int _gap_id;
00043     vector<SequenceEntry> _alignment;
00044     map<string,map<string,SparseMatrixPtr > > _ppAlign;
00045     map<string,map<string,SparseMatrixPtr > > _ppGap1;
00046     map<string,map<string,SparseMatrixPtr > > _ppGap2;
00047     map<string, SparseMatrixPtr > _ppPred;
00048     map<string,map<string,float> > _eas;
00049 
00050 
00051   public:
00052     MultipleAlignment(){}
00053     void computeOneAlignment(ProbabilisticModelPtr almodel, SequenceList seqs, vector<string> names, int numit, int consScheme);
00054     void computeAllAlignments(ProbabilisticModelPtr almodel, SequenceList seqs, vector<string> names, int numit, string alFileName, string outDir);
00055     void computePredictionsAndAlignment(ProbabilisticModelPtr almodel, vector<ProbabilisticModelPtr> &predmodels, SequenceList seqs, vector<string> names, int numit, bool alternateConsistencies, string outDir);
00056     //void initializeFromFile(ProbabilisticModelPtr almodel, SequenceList seqs, vector<string> names, int numit, int consScheme, string inputFileName);
00057     //void trainAndComputePPs(string initialModelFile, SequenceList seqs, vector<string> names, int maxTainIter, string outFile);
00058     float postProbAlign(ProbabilisticModelPtr model, map<string, map< string, SparseMatrixPtr > > &ppAlign, map<string, map< string, SparseMatrixPtr > > &ppGap1, map<string, map< string, SparseMatrixPtr > > &ppGap2, map<string, map<string, float> > &eas);
00059     void picxaaAlConsistency(map< string, map< string, SparseMatrixPtr > > &ppAlign,  map<string, map<string, float> > eas, int numit);
00060     void classicAlConsistency(map< string, map< string, SparseMatrixPtr > > &ppAlign, int numit);
00061     void predalignAlConsistencyWithEas(map< string, map< string, SparseMatrixPtr > > &ppAlign, map< string, map< string, SparseMatrixPtr > > &ppGap1,map< string, map< string, SparseMatrixPtr > > &ppGap2, int numit, map<string, map<string, float> > eas);
00062     void predalignAlConsistencyNoEas(map< string, map< string, SparseMatrixPtr > > &ppAlign, map< string, map< string, SparseMatrixPtr > > &ppGap1,map< string, map< string, SparseMatrixPtr > > &ppGap2, int numit);
00063     void makeAlignmentConsistentWithPrediction(map<string, SparseMatrixPtr > &ppPred, map< string, map< string, SparseMatrixPtr > > &ppAlign, int numit);
00064     void makePredictionConsistentWithAlignment(map<string, SparseMatrixPtr > &ppPred, map< string, map< string, SparseMatrixPtr > > &ppAlign, int numit);
00065     void postProbPred(vector<ProbabilisticModelPtr> &predmodels, map<string, SparseMatrixPtr > &ppPred);
00066     void initializePostProbsList(map< string, map< string, SparseMatrixPtr > > &ppAlign);
00067     void addList(postProb p);
00068     void printPPList();
00069     void generateGraph();
00070     void addToGraph(postProb p);
00071     void addToGappedGraph(postProb p);
00072     bool dfsf(int ub, column n, vector<column> &df);
00073     void dfsb(int lb, column n, vector<column> &db);
00074     void merge(column *ub, column *lb);
00075     void reorder(vector<column> &df, vector<column> &db);
00076     void findGraphMcd();
00077     void unvisit(vector<column> &v);
00078     void generateAlignment(ProbabilisticModelPtr almodel);
00079     void clearAll();
00080   };
00081   typedef boost::shared_ptr<MultipleAlignment> MultipleAlignmentPtr;
00082 }
00083 #endif