/** * Author: Mark Larkin * * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson. */ /** * This is the interface class for the clustering part of the code. The 3 public functions * are the 3 things that can be done. 1) Generate a tree from alignment (treeFromAlignment), * 2) Generate a tree from a distance matrix (treeFromDistMatrix), or * 3) Bootstrap a tree (bootstrapTree). **/ #ifndef CLUSTALTREEBASE_H #define CLUSTALTREEBASE_H #include #include #include #include #include #include "../alignment/Alignment.h" #include "NJTree.h" #include "ClusterTreeOutput.h" #include "../general/OutputFile.h" #include "ClusterTreeAlgorithm.h" #include namespace clustalw { class OutputFile; class ClusterTree { public: /* Functions */ ClusterTree(); /* Attributes */ protected: // This is because we will have a derived class that needs these. /* Functions */ void overspillMessage(int overspill,int total_dists); void treeGapDelete(clustalw::Alignment *alignPtr); int dnaDistanceMatrix(ofstream* treeFile, clustalw::Alignment *alignPtr); int protDistanceMatrix(ofstream* treeFile, clustalw::Alignment *alignPtr); bool isAmbiguity(int c); void calcPercIdentity(ofstream* pfile, clustalw::Alignment *alignPtr); void compareTree(clustalw::PhyloTree* tree1, clustalw::PhyloTree* tree2, vector* hits, int n); //string getOutputFileName(const string prompt, string path, // const string fileExtension); bool transition(int base1, int base2); void distanceMatrixOutput(ofstream* outFile, clustalw::DistMatrix* matToPrint, clustalw::Alignment *alignPtr); bool openFilesForBootstrap(clustalw::OutputFile* clustalFile, clustalw::OutputFile* phylipFile, clustalw::OutputFile* nexusFile, clustalw::TreeNames* treeNames, string* path); bool openFilesForTreeFromAlignment(clustalw::OutputFile* clustalFile, clustalw::OutputFile* phylipFile, clustalw::OutputFile* distFile, clustalw::OutputFile* nexusFile, clustalw::OutputFile* pimFile, clustalw::TreeNames* treeNames, string* path); int calcQuickDistMatForAll(ofstream* clustalFile, ofstream* phylipFile, ofstream* nexusFile, ofstream* pimFile, ofstream* distFile, clustalw::Alignment* alignPtr); int calcQuickDistMatForSubSet(ofstream* clustalFile, ofstream* phylipFile, ofstream* nexusFile, clustalw::Alignment* alignPtr, bool inBootLoop = false); void printBootstrapHeaderToClustalFile(ofstream* clustalFile); void promptForBoolSeedAndNumTrials(); void printErrorMessageForBootstrap(int totalOverspill, int totalDists, int nfails); bool checkIfConditionsMet(int numSeqs, int min); /* Attributes */ ClusterTreeAlgorithm* clusAlgorithm; auto_ptr quickDistMat; vector bootTotals; vector bootPositions; bool verbose; vector treeGaps; int numSeqs; int firstSeq; int lastSeq; string bootstrapPrompt; string bootstrapFileTypeMsg; }; } #endif