-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmpdablock.h
153 lines (125 loc) · 3.37 KB
/
mpdablock.h
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/***************************************************************************
* Copyright (C) 2006 by BUI Quang Minh, Steffen Klaere, Arndt von Haeseler *
* 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 MPDABLOCK_H
#define MPDABLOCK_H
#include "ncl/ncl.h"
#include "tools.h"
class SplitGraph;
/**
PdaBlock to read from nexus file
@author BUI Quang Minh, Steffen Klaere, Arndt von Haeseler
*/
class MPdaBlock : public NxsBlock
{
public:
friend class SplitGraph;
friend class PDNetwork;
friend class CircularNetwork;
/**
constructor, assigning an associated splits graph
@param asgraph a splits graph
*/
MPdaBlock(SplitGraph *asgraph);
/**
destructor
*/
virtual ~MPdaBlock();
/**
print info to an output stream
@param out output stream, cout for output to screen
*/
virtual void Report(ostream &out);
/**
reset the block
*/
virtual void Reset();
/**
called when some commands are skipped
@param commandName command name
*/
virtual void SkippingCommand(NxsString commandName);
/**
read the file containing total budget and taxa costs informations
@param params program parameters
*/
void readBudgetFile(Params ¶ms);
/**
read the file containing total budget and area costs informations
@param params program parameters
*/
void readBudgetAreaFile(Params ¶ms);
/**
@return total budget
*/
double getBudget() {
return budget;
}
/**
@return min budget
*/
double getMinBudget() {
return min_budget;
}
/**
@return size of PD set
*/
int getSubSize() {
return sub_size;
}
/**
@return cost of a taxon
*/
double getCost(int tax_id) {
assert(tax_id < (int) costs.size());
return costs[tax_id];
}
protected:
/**
the associated splits graph
*/
SplitGraph *sgraph;
/**
total budget
*/
double budget;
/**
min budget, to compute PD sets with preservation
costs from min_budget to budget
*/
double min_budget;
/**
size of PD set
*/
int sub_size;
/**
true if cost constrained PD problem
*/
bool cost_constrained;
/**
cost of each taxon
*/
vector<double> costs;
/**
main method to read block from file
@param token a token reader
*/
virtual void Read(NxsToken &token);
};
#endif