annotate egglib/egglib-2.1.5/include/egglib-cpp/ChangeTypes.hpp @ 1:420b57c3c185 draft

Uploaded
author dereeper
date Fri, 10 Jul 2015 04:39:30 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
1 /*
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
2 Copyright 2009-2010 Stéphane De Mita, Mathieu Siol
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
3
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
4 This file is part of the EggLib library.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
5
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
6 EggLib is free software: you can redistribute it and/or modify
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
8 the Free Software Foundation, either version 3 of the License, or
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
9 (at your option) any later version.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
10
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
11 EggLib is distributed in the hope that it will be useful,
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
14 GNU General Public License for more details.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
15
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
17 along with EggLib. If not, see <http://www.gnu.org/licenses/>.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
18 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
19
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
20 #ifndef EGGLIB_CHANGETYPES_HPP
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
21 #define EGGLIB_CHANGETYPES_HPP
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
22
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
23 #include "ParamSet.hpp"
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
24 #include "Controller.hpp"
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
25
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
26 namespace egglib {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
27
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
28 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
29
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
30 /** \brief Pure virtual base class for parameter changes
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
31 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
32 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
33 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
34 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
35 class Change {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
36 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
37
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
38 /** \brief Default constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
39 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
40 * The default date is 0.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
41 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
42 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
43 Change();
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
44
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
45 /** \brief Standard constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
46 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
47 * \param date the event date.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
48 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
49 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
50 Change(double date);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
51
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
52 /// Gets the event date value
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
53 double date() const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
54
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
55 /// Sets the event date value
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
56 void date(double value);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
57
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
58 /** \brief Applies the event
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
59 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
60 * \param paramSet the ParamSet instance to which the Change
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
61 * instance is attached.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
62 * \param controller the Controller instance of the
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
63 * simulation.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
64 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
65 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
66 virtual void apply(ParamSet* paramSet, Controller* controller) const = 0;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
67
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
68 protected:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
69 double _date;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
70
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
71 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
72
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
73 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
74
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
75 /** \brief Pure virtual base class for single parameter changes
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
76 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
77 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
78 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
79 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
80 class SingleParamChange : public Change {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
81 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
82
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
83 /** \brief Default constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
84 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
85 * The default date is 0., the default parameter value is 0.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
86 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
87 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
88 SingleParamChange();
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
89
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
90 /** \brief Standard constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
91 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
92 * \param date the event date.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
93 * \param value the parameter value.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
94 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
95 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
96 SingleParamChange(double date, double value);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
97
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
98 /// Gets the parameter value
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
99 double value() const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
100
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
101 /// Sets the parameter value
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
102 void value(double value);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
103
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
104 protected:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
105 double _value;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
106
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
107 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
108
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
109 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
110
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
111 /** \brief Single parameter changes applied to a single population
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
112 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
113 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
114 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
115 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
116 class PopulationParamChange : public SingleParamChange {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
117 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
118
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
119 /** \brief Default constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
120 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
121 * The default date is 0., the default parameter value is 0.,
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
122 * the default population is 0
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
123 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
124 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
125 PopulationParamChange();
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
126
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
127 /** \brief Standard constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
128 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
129 * \param date the event date.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
130 * \param population the population index.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
131 * \param value the parameter value.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
132 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
133 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
134 PopulationParamChange(double date, unsigned int population, double value);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
135
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
136 /// Gets the population index
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
137 unsigned int population() const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
138
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
139 /// Sets the population index
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
140 void population(unsigned int value);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
141
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
142 protected:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
143
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
144 unsigned int _population;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
145
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
146 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
147
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
148
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
149 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
150
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
151 /** \brief Bottleneck event
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
152 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
153 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
154 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
155 * The bottleneck parameter is its strength, corresponding to an
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
156 * amount of time where time is locked and only coalescences are
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
157 * allowed (resulting in a given - and random - number of
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
158 * instantaneous coalescence with branches).
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
159 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
160 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
161 class Bottleneck : public SingleParamChange {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
162 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
163 Bottleneck(double date, double param) : SingleParamChange(date, param) {}
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
164 void apply(ParamSet* paramSet, Controller* controller) const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
165 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
166
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
167 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
168
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
169 /** \brief Population-specific bottleneck event
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
170 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
171 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
172 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
173 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
174 class PopulationBottleneck : public PopulationParamChange {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
175 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
176 PopulationBottleneck(double date, unsigned int population, double value) : PopulationParamChange(date, population, value) {}
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
177 void apply(ParamSet* paramSet, Controller* controller) const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
178 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
179
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
180
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
181 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
182
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
183 /** \brief Change of the size of all populations
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
184 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
185 * The parameter is the new size (applied to all populations)
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
186 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
187 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
188 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
189 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
190 class AllPopulationSizeChange : public SingleParamChange {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
191 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
192 AllPopulationSizeChange(double date, double value) : SingleParamChange(date, value) {}
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
193 void apply(ParamSet* paramSet, Controller* controller) const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
194 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
195
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
196
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
197 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
198
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
199 /** \brief Change of a single population size
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
200 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
201 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
202 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
203 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
204 class SinglePopulationSizeChange : public PopulationParamChange {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
205 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
206 SinglePopulationSizeChange(double date, unsigned int population, double value) : PopulationParamChange(date, population, value) {}
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
207 void apply(ParamSet* paramSet, Controller* controller) const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
208 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
209
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
210
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
211
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
212 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
213
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
214 /** \brief Change of the growth rate of all populations
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
215 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
216 * The parameter is the new rate (applied to all populations)
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
217 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
218 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
219 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
220 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
221 class GrowthRateChange : public SingleParamChange {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
222 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
223 GrowthRateChange(double date, double value) : SingleParamChange(date, value) {}
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
224 void apply(ParamSet* paramSet, Controller* controller) const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
225 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
226
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
227
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
228 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
229
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
230 /** \brief Change of a single population's growth rate
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
231 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
232 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
233 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
234 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
235 class PopulationGrowthRateChange : public PopulationParamChange {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
236 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
237 PopulationGrowthRateChange(double date, unsigned int population, double value) : PopulationParamChange(date, population, value) {}
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
238 void apply(ParamSet* paramSet, Controller* controller) const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
239 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
240
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
241 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
242
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
243 /** \brief Change of the selfing rate
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
244 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
245 * The parameter is the new rate
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
246 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
247 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
248 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
249 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
250 class SelfingRateChange : public SingleParamChange {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
251 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
252 SelfingRateChange(double date, double value) : SingleParamChange(date, value) {}
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
253 void apply(ParamSet* paramSet, Controller* controller) const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
254 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
255
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
256 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
257
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
258 /** \brief Fusion of two populations
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
259 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
260 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
261 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
262 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
263 class PopulationFusion : public Change {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
264 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
265 /** \brief Default constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
266 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
267 * The default date is 0., the default mother is 0, the
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
268 * default daughter is 0.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
269 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
270 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
271 PopulationFusion();
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
272
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
273 /** \brief Standard constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
274 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
275 * \param date the date of the event.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
276 * \param mother first population to merge.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
277 * \param daughter second population to merge.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
278 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
279 * A time date, all the lineages from the daughter population
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
280 * are moved to the mother population and all mutation rates
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
281 * to the daughter population are cancelled. This functions
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
282 * emulates a population split (forward in time).
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
283 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
284 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
285 PopulationFusion(double date, unsigned int mother, unsigned int daughter);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
286
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
287 void apply(ParamSet* paramSet, Controller* controller) const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
288
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
289 /// Sets the daughter population
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
290 void daughter(unsigned int);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
291
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
292 /// Gets the daughter population
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
293 unsigned int daughter() const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
294
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
295 /// Sets the mother population
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
296 void mother(unsigned int);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
297
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
298 /// Gets the mother population
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
299 unsigned int mother() const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
300
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
301 protected:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
302 unsigned int _mother;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
303 unsigned int _daughter;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
304 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
305
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
306
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
307 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
308
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
309 /** \brief Split of a population
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
310 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
311 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
312 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
313 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
314 class PopulationSplit : public Change {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
315 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
316 /** \brief Default constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
317 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
318 * The default date is 0., the default population is 0, the
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
319 * default probability is 0.5.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
320 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
321 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
322 PopulationSplit();
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
323
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
324 /** \brief Standard constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
325 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
326 * A the time given by date, the specified population is
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
327 * split in two. An additional population (whose index is
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
328 * incremented from the current total number of population)
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
329 * is created and lineages are randomly picked and moved to
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
330 * the new population. The parameter proba gives the
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
331 * probability that a lineage from the population number pop
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
332 * moves instantly to the new population. If proba is 0,
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
333 * the program emulates the creation of an empty population
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
334 * (thinking forward in time, this is a population
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
335 * extinction). In general, forward in time, this is a
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
336 * population fusion.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
337 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
338 * \param date the date of the event.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
339 * \param pop population index.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
340 * \param proba the probability that lineages move to the
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
341 * new population.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
342 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
343 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
344 PopulationSplit(double date, unsigned int pop, double proba);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
345
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
346 void apply(ParamSet* paramSet, Controller* controller) const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
347
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
348 /// Gets the population index
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
349 unsigned int population() const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
350
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
351 /// Sets the population index
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
352 void population(unsigned int);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
353
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
354 /// Gets the probability of instant migration
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
355 double probability() const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
356
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
357 /// Sets the probability of instant migration
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
358 void probability(double);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
359
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
360 protected:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
361 unsigned int _population;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
362 double _probability;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
363 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
364
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
365 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
366
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
367 /** \brief Change of the migration rate of all population pairs
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
368 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
369 * The parameter is the new rate (applied to all population pairs)
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
370 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
371 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
372 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
373 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
374 class AllMigrationRateChange : public SingleParamChange {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
375 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
376 AllMigrationRateChange(double date, double value) : SingleParamChange(date, value) {}
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
377 void apply(ParamSet* paramSet, Controller* controller) const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
378 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
379
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
380 /**********************************************************************/
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
381
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
382 /** \brief Change of a single migration rate
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
383 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
384 * \ingroup coalesce
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
385 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
386 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
387 class SingleMigrationRateChange : public SingleParamChange {
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
388 public:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
389 /** \brief Default constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
390 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
391 * The default date is 0., the default parameter value is 0.,
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
392 * the default source population is 0, the default
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
393 * destination population 1.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
394 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
395 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
396 SingleMigrationRateChange();
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
397
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
398 /** \brief Standard constructor
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
399 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
400 * \param date the date of the event.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
401 * \param source index of the source population.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
402 * \param dest index of the destination population.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
403 * \param migr new value of the pairwise migration rate.
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
404 *
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
405 */
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
406 SingleMigrationRateChange(double date, unsigned int source, unsigned int dest, double migr);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
407
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
408 /// Gets the source population index
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
409 unsigned source() const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
410
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
411 /// Sets the source population index
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
412 void source(unsigned int);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
413
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
414 /// Gets the dest population index
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
415 unsigned dest() const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
416
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
417 /// Sets the dest population index
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
418 void dest(unsigned int);
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
419
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
420 void apply(ParamSet* paramSet, Controller* controller) const;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
421
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
422 protected:
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
423 unsigned int _source;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
424 unsigned int _dest;
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
425 };
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
426 }
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
427
420b57c3c185 Uploaded
dereeper
parents:
diff changeset
428 #endif