1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
/**
* Author: Mark Larkin
*
* Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.
*/
#ifndef TREE_H
#define TREE_H
#include <vector>
#include <string>
#include <iostream>
#include <fstream>
#include "../alignment/Alignment.h"
#include "AlignmentSteps.h"
#include <memory>
namespace clustalw
{
class Tree
{
public:
/* Functions */
void calcSeqWeights(int firstSeq, int lastSeq, vector<int>* sweight);
int readTree(Alignment* alignPtr, const string& treeFileName, int firstSeq,
int lastSeq);
auto_ptr<AlignmentSteps> createSets(int firstSeq, int lastSeq);
int calcSimilarities(Alignment* alignPtr, DistMatrix* distMat);
void clearTree(TreeNode* p);
/* Attributes */
private:
/* Functions */
void createTree(TreeNode* ptree, TreeNode* parent, ifstream* file);
void createNode(TreeNode* pptr, TreeNode* parent);
TreeNode* insertNode(TreeNode* pptr);
void clearTreeNodes(TreeNode* p);
TreeNode* reRoot(TreeNode* ptree, int nseqs);
TreeNode* insertRoot(TreeNode* p, float diff);
float calcRootMean(TreeNode* root, float *maxDist);
float calcMean(TreeNode* nptr, float *maxDist, int nSeqs);
void orderNodes();
int calcWeight(int leaf);
void skipSpace(ifstream* file);
void groupSeqs(TreeNode* p, int *nextGroups, int nSeqs, AlignmentSteps* stepsPtr);
void markGroup1(TreeNode* p, int *groups, int n);
void markGroup2(TreeNode* p, int *groups, int n);
TreeNode* avail();
void setInfo(TreeNode* p, TreeNode* parent, int pleaf, string pname, float
pdist);
void debugPrintAllNodes(int nseqs);
/* Attributes */
AlignmentSteps progSteps;
char charFromFile;
ifstream file;
TreeNode** lptr;
TreeNode** olptr;
TreeNode** nptr;
TreeNode** ptrs;
int nnodes;
int ntotal;
bool rootedTree;
TreeNode* seqTree;
TreeNode* root;
int* groups;
int numSeq;
int numSets;
const static int MAXERRS = 10;
};
}
#endif
|