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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
/***************************************************************************
* Copyright (C) 2009 by BUI Quang Minh *
* minh.bui@univie.ac.at *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef SUPERNODE_H
#define SUPERNODE_H
#include "phylonode.h"
typedef vector<PhyloNeighbor*> PhyloNeighborVec;
/**
A neighbor in a phylogenetic SUPER tree
@author BUI Quang Minh <minh.bui@univie.ac.at>
*/
class SuperNeighbor : public PhyloNeighbor {
friend class SuperNode;
friend class PhyloSuperTree;
public:
/**
construct class with a node and length
@param anode the other end of the branch
@param alength length of branch
*/
SuperNeighbor(Node *anode, double alength) : PhyloNeighbor(anode, alength) {
}
/**
construct class with a node and length
@param anode the other end of the branch
@param alength length of branch
@param aid branch ID
*/
SuperNeighbor(Node *anode, double alength, int aid) : PhyloNeighbor(anode, alength, aid) {
}
/**
construct class with another Neighbor
@param nei another Neighbor
*/
SuperNeighbor(SuperNeighbor *nei) : PhyloNeighbor(nei) {
}
/**
allocate a new Neighbor by just copying from this one
@return pointer to newly created Neighbor
*/
virtual Neighbor* newNeighbor() {
return (new SuperNeighbor(this));
}
/**
vector of size m (m = #partitions)
*/
PhyloNeighborVec link_neighbors;
};
/**
Node of a super tree
@author BUI Quang Minh <minh.bui@univie.ac.at>
*/
class SuperNode : public PhyloNode
{
friend class PhyloSuperTree;
public:
/**
constructor
*/
SuperNode();
/**
constructor
@param aid id of this node
*/
SuperNode(int aid);
/**
constructor
@param aid id of this node
@param aname name of this node
*/
SuperNode(int aid, int aname);
/**
constructor
@param aid id of this node
@param aname name of this node
*/
SuperNode(int aid, const char *aname);
/**
initialization
*/
void init();
/**
add a neighbor
@param node the neighbor node
@param length branch length
@param id branch ID
*/
virtual void addNeighbor(Node *node, double length, int id = -1);
~SuperNode();
};
#endif
|