Nemo  2.3.56
Simulate forward-in-time genetic evolution in a spatially explicit, individual-based stochastic simulator
LCEcomposite.h
Go to the documentation of this file.
1
30#ifndef LCE_COMPOSITE_H
31#define LCE_COMPOSITE_H
32
33#include <cmath>
34#include "LCEbreed.h"
35#include "LCEdisperse.h"
36#include "LCEselection.h"
37#include "lifecycleevent.h"
38
39//CLASS LCE_Breed_Disperse
40//
45class LCE_Breed_Disperse : public virtual LCE_Breed_base, public virtual LCE_Disperse_base
46{
48
51
54
56 double *_growthRates;
57
58protected: //so that the derived class can use these function pointers
59 Individual* (LCE_Breed_Disperse::* _make_offspring)(sex_t SEX, Patch* patch, unsigned int LocalPatch);
63
64public:
65
67
69
70 void do_breed_disperse ();
72
73
74 unsigned int numFemOffspring (Patch *patch)
75 {
76 if (patch->size(FEM, ADLTx) == 0 && _dispersing_sex != FEM)//to avoid choosing a local female when there is none
77 return 0;
78 else
79 return (this->*_get_patchFecundity)(patch, FEM);
80 }
81
83 unsigned int numFemOffspring_colonizers (Patch *patch)
84 {
85 if(patch->get_isExtinct()) {
86 //check if only one sex sends gametes around, capturing the case of pollen dispersal
87 if(_dispersing_sex != FEM)
88 return 0;
89 else
90 return _num_colonizers;
91 } else
92 return (this->*_get_patchFecundity)(patch, FEM);
93 }
94
96 unsigned int numMalOffspring_notrandom (Patch *patch)
97 {
98 return 0;
99 }
100
101 unsigned int numMalOffspring_random (Patch *patch)
102 { //return 0 if only males gametes migrate and there is no females in the patch
103 //to avoid choosing a local female when there is none
104 //(we assume it doesn't make sense to have only female gametes migrating)
105 if (patch->size(FEM, ADLTx) == 0 && _dispersing_sex != FEM)
106 return 0;
107 else
108 return (this->*_get_patchFecundity)(patch, MAL);
109 }
110
112 {
113 if(patch->get_isExtinct()) {
114 //check if only one sex sends gametes around, capturing the case of pollen dispersal
115 if(_dispersing_sex != FEM)
116 return 0;
117 else
118 return _num_colonizers;
119 } else
120 return (this->*_get_patchFecundity)(patch, MAL);
121 }
122
125
126 unsigned int instantGrowth (Patch* patch, sex_t SEX)
127 {
128 return patch->get_K(SEX);
129 }
131 unsigned int logisticGrowth (Patch* patch, sex_t SEX)
132 {
133 double K = (double)patch->get_K(SEX);
134 double r = _growthRates[ patch->getID() ];
135 double N = (double)patch->size(ADLTx);
136 if( K <= N )
137 return K;
138 else
139 return (unsigned int)ceil(N + r*N*((K-N)/K));
140 }
142 unsigned int stochasticLogisticGrowth (Patch* patch, sex_t SEX)
143 {
144 return (unsigned int)RAND::Poisson((double)logisticGrowth(patch, SEX));
145 }
148 unsigned int conditionalLogisticGrowth (Patch* patch, sex_t SEX)
149 {
150 if (patch->size(SEX, ADLTx) < patch->get_K(SEX)/2) {
151 return fixedFecundityGrowth(patch, SEX);
152 } else {
153 return logisticGrowth(patch, SEX);
154 }
155 }
159 {
160 if (patch->size(SEX, ADLTx) < patch->get_K(SEX)/2) {
161 return stochasticFecundityGrowth(patch, SEX);
162 } else {
163 return stochasticLogisticGrowth(patch, SEX);
164 }
165 }
168 unsigned int fixedFecundityGrowth (Patch* patch, sex_t SEX)
169 {
170 return patch->get_K(SEX)*LCE_Breed_base::getMeanFecundity(patch->getID());
171 }
174 unsigned int stochasticFecundityGrowth (Patch* patch, sex_t SEX)
175 {
176 return RAND::Uniform(patch->get_K(SEX)*LCE_Breed_base::getMeanFecundity(patch->getID()));
177 }
179
182 Individual* mate_random (sex_t SEX, Patch *patch, unsigned int LocalPatch);
183 Individual* mate_random_hermaphrodite (sex_t SEX, Patch *patch, unsigned int LocalPatch);
184 Individual* mate_selfing (sex_t SEX, Patch *patch, unsigned int LocalPatch);
185 Individual* mate_full_selfing (sex_t SEX, Patch *patch, unsigned int LocalPatch);
186 Individual* mate_cloning (sex_t SEX, Patch *patch, unsigned int LocalPatch);
188 void breed_disperse(sex_t SEX, Patch *patch, unsigned int LocalPatch, unsigned int size);
189
190 Individual* get_parent (sex_t SEX, sex_t DispSex, Patch* LocalPatch, unsigned int patchNbr);
192
195// virtual void init(Metapop* popPtr);
196 virtual bool setParameters ();
197 virtual void execute ();
198 virtual LifeCycleEvent* clone () {return new LCE_Breed_Disperse();}
199 virtual void loadFileServices ( FileServices* loader ) {}
200 virtual void loadStatServices ( StatServices* loader ) {}
201 virtual bool resetParameterFromSource (std::string param, SimComponent* cmpt) {return false;}
202 virtual age_t removeAgeClass ( ) {return NONE;}
203 virtual age_t addAgeClass ( ) {return OFFSPRG;}
204 virtual age_t requiredAgeClass () {return ADULTS;}
206
207};
208
209// Class LCE_Breed_Selection
210//
213class LCE_Breed_Selection : public virtual LCE_Breed_base, public virtual LCE_Selection_base
214{
215
216 void (LCE_Breed_Selection::* _breed_selection) (Patch* patch, unsigned int patchID, unsigned int *cntr);
217
218 unsigned int _nb_trait;
219
220 vector< unsigned int > _nonSelectedTraitIndices;
221
222public:
223
224 LCE_Breed_Selection ( ); // : LifeCycleEvent("breed_selection","") {}
225 virtual ~LCE_Breed_Selection ( ) {}
226
229
236 Individual* makeOffspringWithSelection (Individual* ind, unsigned int natalpatch);
237
238 void do_breed_selection_FecFitness (Patch* patch, unsigned int patchID, unsigned int *cntr);
239 void do_breed_selection_OffSurvival (Patch* patch, unsigned int patchID, unsigned int *cntr);
240 void do_breed_selection_WrightFisher_2sex (Patch* patch, unsigned int patchID, unsigned int *cntr);
241 void do_breed_selection_WrightFisher_1sex (Patch* patch, unsigned int patchID, unsigned int *cntr);
242
243 void setReproScaledFitness_sum (sex_t SEX, valarray< double > &survival, unsigned int numReproFem, Patch* patch);
246// virtual void init (Metapop* popPtr);
247 virtual bool setParameters ();
248 virtual void execute ();
249 virtual LifeCycleEvent* clone ( ){ return new LCE_Breed_Selection(); }
250 virtual void loadFileServices ( FileServices* loader ) {}
251 virtual void loadStatServices ( StatServices* loader );
252 virtual bool resetParameterFromSource (std::string param, SimComponent* cmpt) {return false;}
253 virtual age_t removeAgeClass ( ) {return NONE;}
254 virtual age_t addAgeClass ( ) {return OFFSPRG;}
255 virtual age_t requiredAgeClass () {return ADULTS;}
257};
258
259//CLASS LCE_Breed_Selection_Disperse
260//
268{
269// int _max_try;
270
272
273public:
274
276
278
279 void breed_selection_disperse(int* counter);
280 void breed_selection_disperse_propagule(int* counter);
281
282 void do_breed (sex_t SEX, unsigned int size, int* counter, Patch* patch, unsigned int patchNbr);
283
286// virtual void init(Metapop* popPtr);
287 virtual bool setParameters ();
288 virtual void execute ();
290 virtual void loadFileServices ( FileServices* loader ) {}
291 virtual void loadStatServices ( StatServices* loader );
292 virtual bool resetParameterFromSource (std::string param, SimComponent* cmpt) {return false;}
293 virtual age_t removeAgeClass ( ) {return NONE;}
294 virtual age_t addAgeClass ( ) {return OFFSPRG;}
295 virtual age_t requiredAgeClass () {return ADULTS;}
297};
298#endif
A class to manage the files associated with each components of the simulation.
Definition: fileservices.h:52
This class contains traits along with other individual information (sex, pedigree,...
Definition: individual.h:49
Performs breeding and migration in one, migration rates are backward rates.
Definition: LCEcomposite.h:46
void breed_disperse(sex_t SEX, Patch *patch, unsigned int LocalPatch, unsigned int size)
unsigned int stochasticFecundityGrowth(Patch *patch, sex_t SEX)
The number of offspring produced is a random number drawn from a Poisson distribution with mean equal...
Definition: LCEcomposite.h:174
unsigned int(LCE_Breed_Disperse::* _get_numMalOffspring)(Patch *patch)
Definition: LCEcomposite.h:61
void do_breed_disperse()
Definition: LCEcomposite.cc:241
unsigned int conditionalLogisticGrowth(Patch *patch, sex_t SEX)
The number of offspring produced depends on the adult density.
Definition: LCEcomposite.h:148
unsigned int numMalOffspring_random_colonizers(Patch *patch)
Definition: LCEcomposite.h:111
virtual bool resetParameterFromSource(std::string param, SimComponent *cmpt)
Definition: LCEcomposite.h:201
virtual age_t removeAgeClass()
Definition: LCEcomposite.h:202
Individual * mate_selfing(sex_t SEX, Patch *patch, unsigned int LocalPatch)
Definition: LCEcomposite.cc:302
virtual void loadStatServices(StatServices *loader)
Definition: LCEcomposite.h:200
LCE_Breed_Disperse()
Definition: LCEcomposite.cc:44
Individual * mate_full_selfing(sex_t SEX, Patch *patch, unsigned int LocalPatch)
Definition: LCEcomposite.cc:326
virtual LifeCycleEvent * clone()
Definition: LCEcomposite.h:198
sex_t _dispersing_sex
Which part of the population is dispersing its gametes.
Definition: LCEcomposite.h:53
unsigned int numMalOffspring_notrandom(Patch *patch)
The number of males produced is always zero when the mating system is not random mating.
Definition: LCEcomposite.h:96
unsigned int(LCE_Breed_Disperse::* _get_patchFecundity)(Patch *patch, sex_t SEX)
Definition: LCEcomposite.h:62
unsigned int conditionalStochasticLogisticGrowth(Patch *patch, sex_t SEX)
The number of offspring produced depends on the adult density, similar to 'conditionalLogisticGrowth'...
Definition: LCEcomposite.h:158
Individual * makeOffspring(Individual *ind)
Individual * mate_cloning(sex_t SEX, Patch *patch, unsigned int LocalPatch)
Definition: LCEcomposite.cc:335
unsigned int stochasticLogisticGrowth(Patch *patch, sex_t SEX)
The number of offspring produced is drawn from a Poisson with mean equal to the logistic growth predi...
Definition: LCEcomposite.h:142
virtual age_t addAgeClass()
Definition: LCEcomposite.h:203
double * _growthRates
Patch-specific growth rates.
Definition: LCEcomposite.h:56
unsigned int numFemOffspring(Patch *patch)
Definition: LCEcomposite.h:74
void(LCE_Breed_Disperse::* _breed_disperse)()
Definition: LCEcomposite.h:47
virtual ~LCE_Breed_Disperse()
Definition: LCEcomposite.h:68
virtual age_t requiredAgeClass()
Definition: LCEcomposite.h:204
unsigned int numFemOffspring_colonizers(Patch *patch)
The number of females produced in case a max number of colonizers was specified.
Definition: LCEcomposite.h:83
unsigned int fixedFecundityGrowth(Patch *patch, sex_t SEX)
The number of offspring produced is equal to the carrying capacity multiplied by the mean fecundity o...
Definition: LCEcomposite.h:168
Individual *(LCE_Breed_Disperse::* _make_offspring)(sex_t SEX, Patch *patch, unsigned int LocalPatch)
Definition: LCEcomposite.h:59
unsigned int numMalOffspring_random(Patch *patch)
Definition: LCEcomposite.h:101
Individual * mate_random(sex_t SEX, Patch *patch, unsigned int LocalPatch)
Definition: LCEcomposite.cc:283
int _num_colonizers
Maximum size of a patch after colonisation.
Definition: LCEcomposite.h:50
unsigned int logisticGrowth(Patch *patch, sex_t SEX)
The number of offspring produced is given by the logistic growth function.
Definition: LCEcomposite.h:131
Individual * get_parent(sex_t SEX, sex_t DispSex, Patch *LocalPatch, unsigned int patchNbr)
Definition: LCEcomposite.cc:343
virtual bool setParameters()
Definition: LCEcomposite.cc:60
virtual void loadFileServices(FileServices *loader)
Definition: LCEcomposite.h:199
unsigned int(LCE_Breed_Disperse::* _get_numFemOffspring)(Patch *patch)
Definition: LCEcomposite.h:60
virtual void execute()
Definition: LCEcomposite.cc:212
Individual * mate_random_hermaphrodite(sex_t SEX, Patch *patch, unsigned int LocalPatch)
Definition: LCEcomposite.cc:292
unsigned int instantGrowth(Patch *patch, sex_t SEX)
The number of offspring produced corresponds to the carrying capacity of the patch.
Definition: LCEcomposite.h:126
void do_breed_disperse_propagule()
Definition: LCEcomposite.cc:275
Composite LCE performing breeding, migration and viability selection all in one.
Definition: LCEcomposite.h:268
virtual void execute()
Definition: LCEcomposite.cc:420
virtual void loadStatServices(StatServices *loader)
Definition: LCEcomposite.cc:413
void breed_selection_disperse_propagule(int *counter)
Definition: LCEcomposite.cc:496
LCE_Breed_Selection_Disperse()
Definition: LCEcomposite.cc:382
virtual void loadFileServices(FileServices *loader)
Definition: LCEcomposite.h:290
virtual ~LCE_Breed_Selection_Disperse()
Definition: LCEcomposite.h:277
virtual age_t removeAgeClass()
Definition: LCEcomposite.h:293
virtual LifeCycleEvent * clone()
Definition: LCEcomposite.h:289
void do_breed(sex_t SEX, unsigned int size, int *counter, Patch *patch, unsigned int patchNbr)
Definition: LCEcomposite.cc:504
virtual bool setParameters()
Definition: LCEcomposite.cc:391
virtual bool resetParameterFromSource(std::string param, SimComponent *cmpt)
Definition: LCEcomposite.h:292
void(LCE_Breed_Selection_Disperse::* _breed_selection_disperse)(int *counter)
Definition: LCEcomposite.h:271
virtual age_t addAgeClass()
Definition: LCEcomposite.h:294
virtual age_t requiredAgeClass()
Definition: LCEcomposite.h:295
void breed_selection_disperse(int *counter)
Definition: LCEcomposite.cc:457
Composite LCE implementing breeding and viability selection on a given trait type.
Definition: LCEcomposite.h:214
void do_breed_selection_WrightFisher_1sex(Patch *patch, unsigned int patchID, unsigned int *cntr)
Definition: LCEcomposite.cc:808
virtual bool setParameters()
Definition: LCEcomposite.cc:538
virtual LifeCycleEvent * clone()
Definition: LCEcomposite.h:249
void do_breed_selection_FecFitness(Patch *patch, unsigned int patchID, unsigned int *cntr)
Definition: LCEcomposite.cc:693
void do_breed_selection_WrightFisher_2sex(Patch *patch, unsigned int patchID, unsigned int *cntr)
Definition: LCEcomposite.cc:739
virtual age_t addAgeClass()
Definition: LCEcomposite.h:254
Individual * makeOffspringWithSelection(Individual *ind, unsigned int natalpatch)
Performs viability selection and breeding at the same time.
Definition: LCEcomposite.cc:880
vector< unsigned int > _nonSelectedTraitIndices
Definition: LCEcomposite.h:220
virtual void loadStatServices(StatServices *loader)
Definition: LCEcomposite.cc:609
void do_breed_selection_OffSurvival(Patch *patch, unsigned int patchID, unsigned int *cntr)
Definition: LCEcomposite.cc:657
virtual bool resetParameterFromSource(std::string param, SimComponent *cmpt)
Definition: LCEcomposite.h:252
virtual age_t requiredAgeClass()
Definition: LCEcomposite.h:255
void setReproScaledFitness_sum(sex_t SEX, valarray< double > &survival, unsigned int numReproFem, Patch *patch)
Definition: LCEcomposite.cc:865
virtual ~LCE_Breed_Selection()
Definition: LCEcomposite.h:225
LCE_Breed_Selection()
Definition: LCEcomposite.cc:529
virtual age_t removeAgeClass()
Definition: LCEcomposite.h:253
virtual void loadFileServices(FileServices *loader)
Definition: LCEcomposite.h:250
void(LCE_Breed_Selection::* _breed_selection)(Patch *patch, unsigned int patchID, unsigned int *cntr)
Definition: LCEcomposite.h:216
bool setNonSelectedTraitTable()
Builds the vector of traits not under selection.
Definition: LCEcomposite.cc:580
unsigned int _nb_trait
Definition: LCEcomposite.h:218
virtual void execute()
Definition: LCEcomposite.cc:616
Base class for the breeding (and mating) life cycle events.
Definition: LCEbreed.h:44
double getMeanFecundity(unsigned int patch)
Definition: LCEbreed.h:95
The base class of the dispersal LCEs, all events move offspring to the post-dispersal patch container...
Definition: LCEdisperse.h:40
Base class performing (viability) selection on an arbitrary trait.
Definition: LCEselection.h:51
Base class of the Life Cycle Events, declares the LCE interface.
Definition: lifecycleevent.h:73
Second class in the metapopulation design structure, between the Metapop and Individual classes.
Definition: metapop.h:430
unsigned int get_K()
Definition: metapop.h:479
unsigned int size(age_t AGE)
Returns the size of the container of the appropriate age class(es) for both sexes.
Definition: metapop.h:496
unsigned int getID()
Definition: metapop.h:478
bool get_isExtinct()
Definition: metapop.h:484
static double Poisson(double mean)
From the Numerical Recieps.
Definition: Uniform.h:220
static double Uniform()
Generates a random number from [0.0, 1.0[ uniformly distributed.
Definition: Uniform.h:125
Interface to all basic components of a simulation (traits, life cycle events, pop,...
Definition: simcomponent.h:45
The Service class used to manage the StatHandler objects.
Definition: statservices.h:50
sex_t
Sex types, males are always 0 and females 1!!
Definition: types.h:36
@ FEM
Definition: types.h:37
@ MAL
Definition: types.h:37
#define NONE
No age flag.
Definition: types.h:48
unsigned int age_t
Age class flags.
Definition: types.h:46
#define ADULTS
Adults age class flag (breeders).
Definition: types.h:54
#define OFFSPRG
Offspring age class flag.
Definition: types.h:50
@ ADLTx
Definition: types.h:42

Generated for Nemo v2.3.56 by  doxygen 1.9.0 -- Nemo is hosted on  Download Nemo

Locations of visitors to this page
Catalogued on GSR