#include <LCEdisperse.h>


Public Member Functions | |
| LCE_Disperse_EvolDisp () | |
| virtual | ~LCE_Disperse_EvolDisp () |
Implementations | |
| virtual bool | setParameters () |
| Default interface needed to initialize the component's variables from its input parameters value. | |
| virtual void | execute () |
| Execute the event on the pop. | |
| virtual LifeCycleEvent * | clone () |
| Cloning interface. | |
Private Member Functions | |
| unsigned int | Migrate_Island (unsigned int home) |
| unsigned int | Migrate_Island_Propagule (unsigned int home) |
| unsigned int | Migrate_SteppingStone1D (unsigned int home) |
| void | exec_evolmale () |
| void | exec_evolfemale () |
| void | exec_evol2sex () |
| void | evoldisp (sex_t SEX, int trait_link, double cost) |
| void | fixdisp (sex_t SEX, double rate, double cost) |
Private Attributes | |
| double | _fem_cost |
| double | _mal_cost |
| double | _fixed_disp_rate |
| unsigned int(LCE_Disperse_EvolDisp::* | getAimedPatch )(unsigned int) |
| void(LCE_Disperse_EvolDisp::* | exec )() |
| int | _fdisp_trait_link |
| int | _mdisp_trait_link |
The dispersal models implemented so far are:
Definition at line 146 of file LCEdisperse.h.
| LCE_Disperse_EvolDisp::LCE_Disperse_EvolDisp | ( | ) |
Definition at line 1053 of file LCEdisperse.cc.
Referenced by clone().
01054 : LifeCycleEvent("disperse_evoldisp",""), _fem_cost(-1.0), _mal_cost(-1.0), 01055 _fdisp_trait_link(0), _mdisp_trait_link(0) 01056 { 01057 ParamUpdater<LCE_Disperse_EvolDisp> * updater = 01058 new ParamUpdater<LCE_Disperse_EvolDisp> (&LCE_Disperse_EvolDisp::setParameters); 01059 add_parameter("dispersal_cost",DBL,false,true,0,1, updater); 01060 add_parameter("dispersal_cost_fem",DBL,false,true,0,1, updater); 01061 add_parameter("dispersal_cost_mal",DBL,false,true,0,1, updater); 01062 add_parameter("dispersal_fixed_trait",STR,false,false,0,0, updater); 01063 add_parameter("dispersal_fixed_rate",DBL,false,true,0,1, updater); 01064 }
| virtual LCE_Disperse_EvolDisp::~LCE_Disperse_EvolDisp | ( | ) | [inline, virtual] |
| virtual LifeCycleEvent* LCE_Disperse_EvolDisp::clone | ( | ) | [inline, virtual] |
Cloning interface.
Implements LifeCycleEvent.
Definition at line 176 of file LCEdisperse.h.
00176 {return new LCE_Disperse_EvolDisp();}
| void LCE_Disperse_EvolDisp::evoldisp | ( | sex_t | SEX, | |
| int | trait_link, | |||
| double | cost | |||
| ) | [private] |
Definition at line 1206 of file LCEdisperse.cc.
Referenced by exec_evol2sex(), exec_evolfemale(), and exec_evolmale().
01207 { 01208 01209 Patch *current_patch; 01210 unsigned int AimedPatch; 01211 01212 for(unsigned int i = 0; i < _npatch; i++) { 01213 01214 current_patch = _popPtr->getPatch(i); 01215 01216 while( current_patch->size(SEX, OFFSx) != 0 ) { 01217 01218 if(RAND::Uniform() < *(double*)current_patch->get(SEX, OFFSx, 0)->getTraitValue(trait_link)) { 01219 //this one disperses 01220 AimedPatch = (this->*getAimedPatch)(i); 01221 01222 current_patch->nbEmigrant++; 01223 01224 if(RAND::Uniform() > cost) { 01225 //survives 01226 _popPtr->move(SEX, OFFSx, i, PDISPx, AimedPatch, 0); 01227 01228 _popPtr->getPatch(AimedPatch)->nbImigrant++; 01229 } else { 01230 01231 _popPtr->recycle( current_patch->get(SEX, OFFSx, 0) ); 01232 01233 current_patch->remove(SEX, OFFSx, 0); 01234 } 01235 } else { 01236 //no dispersal 01237 current_patch->move(SEX,OFFSx,PDISPx,0); 01238 current_patch->nbPhilopat++; 01239 } 01240 01241 }//end while 01242 }//end for 01243 }
| void LCE_Disperse_EvolDisp::exec_evol2sex | ( | ) | [private] |
Definition at line 1198 of file LCEdisperse.cc.
Referenced by setParameters().
01199 { 01200 evoldisp(FEM, _fdisp_trait_link, _fem_cost); 01201 evoldisp(MAL, _mdisp_trait_link, _mal_cost); 01202 }
| void LCE_Disperse_EvolDisp::exec_evolfemale | ( | ) | [private] |
Definition at line 1182 of file LCEdisperse.cc.
Referenced by setParameters().
01183 { 01184 evoldisp(FEM, _fdisp_trait_link, _fem_cost); 01185 fixdisp(MAL, _fixed_disp_rate, _mal_cost); 01186 }
| void LCE_Disperse_EvolDisp::exec_evolmale | ( | ) | [private] |
Definition at line 1190 of file LCEdisperse.cc.
Referenced by setParameters().
01191 { 01192 evoldisp(MAL, _mdisp_trait_link, _mal_cost); 01193 fixdisp(FEM, _fixed_disp_rate, _fem_cost); 01194 }
| void LCE_Disperse_EvolDisp::execute | ( | ) | [virtual] |
Execute the event on the pop.
Implements LifeCycleEvent.
Definition at line 1148 of file LCEdisperse.cc.
01149 { 01150 #ifdef _DEBUG_ 01151 message("LCE_Disperse_EvolDisp::execute (Patch nb: %i offsprg nbr: %i)\n" 01152 ,_popPtr->getPatchNbr(),_popPtr->size( OFFSPRG )); 01153 #endif 01154 if( getDispersalModel() == 2 ) setPropaguleTargets(); 01155 01156 reset_counters(); 01157 01158 (this->*exec)(); 01159 01160 Patch *current_patch; 01161 01162 _npatch = _popPtr->getPatchNbr(); 01163 01164 for(unsigned int i = 0; i < _npatch; i++) { 01165 01166 current_patch = _popPtr->getPatch(i); 01167 01168 //set coloniser counter 01169 if(current_patch->get_isExtinct()) 01170 current_patch->nbKolonisers = current_patch->size(PDISPx); 01171 else 01172 current_patch->nbKolonisers = -1; 01173 01174 }//end_for 01175 01176 swapPostDisp(); 01177 01178 }
| void LCE_Disperse_EvolDisp::fixdisp | ( | sex_t | SEX, | |
| double | rate, | |||
| double | cost | |||
| ) | [private] |
Definition at line 1247 of file LCEdisperse.cc.
Referenced by exec_evolfemale(), and exec_evolmale().
01248 { 01249 01250 Patch *current_patch; 01251 unsigned int AimedPatch; 01252 01253 for(unsigned int i = 0; i < _npatch; i++) { 01254 01255 current_patch = _popPtr->getPatch(i); 01256 01257 while( current_patch->size(SEX, OFFSx) != 0 ) { 01258 01259 if(RAND::Uniform() < rate) { 01260 //this one disperses 01261 AimedPatch = (this->*getAimedPatch)(i); 01262 01263 current_patch->nbEmigrant++; 01264 01265 if(RAND::Uniform() > cost) { 01266 //survives 01267 _popPtr->move(SEX, OFFSx, i, PDISPx, AimedPatch, 0); 01268 01269 _popPtr->getPatch(AimedPatch)->nbImigrant++; 01270 } else { 01271 01272 _popPtr->recycle( current_patch->get(SEX, OFFSx, 0) ); 01273 01274 current_patch->remove(SEX, OFFSx, 0); 01275 } 01276 } else { 01277 //no dispersal 01278 current_patch->move(SEX,OFFSx,PDISPx,0); 01279 current_patch->nbPhilopat++; 01280 } 01281 01282 }//end while 01283 }//end for 01284 }
| unsigned int LCE_Disperse_EvolDisp::Migrate_Island | ( | unsigned int | home | ) | [private] |
Definition at line 1288 of file LCEdisperse.cc.
Referenced by setParameters().
01289 { 01290 unsigned int AimedPatch; 01291 //assign a Patch of arrival at random 01292 do{ 01293 AimedPatch = RAND::Uniform(_npatch); 01294 }while(AimedPatch == home); 01295 01296 return AimedPatch; 01297 }
| unsigned int LCE_Disperse_EvolDisp::Migrate_Island_Propagule | ( | unsigned int | home | ) | [private] |
Definition at line 1301 of file LCEdisperse.cc.
Referenced by setParameters().
01302 { 01303 unsigned int AimedPatch, PropaguleTarget = getPropaguleTarget(home); 01304 01305 if(!(RAND::Uniform() > getPropaguleProb()) ) 01306 AimedPatch = PropaguleTarget; 01307 else 01308 do{ 01309 AimedPatch = RAND::Uniform(_npatch); 01310 }while(AimedPatch == home || AimedPatch == PropaguleTarget); 01311 01312 return AimedPatch; 01313 }
| unsigned int LCE_Disperse_EvolDisp::Migrate_SteppingStone1D | ( | unsigned int | home | ) | [private] |
Definition at line 1317 of file LCEdisperse.cc.
Referenced by setParameters().
01318 { 01319 int neighbours[2] = {(int)(home - 1),(int)(home + 1)}; 01320 //if we are at one of the bound of the Patch array, we may migrate to the other bound: 01321 if(neighbours[0] < 0) neighbours[0] = _npatch -1; 01322 else if(neighbours[1] == (int)_npatch) neighbours[1] = 0; 01323 01324 return(RAND::RandBool() ? neighbours[0] : neighbours[1]); 01325 }
| bool LCE_Disperse_EvolDisp::setParameters | ( | ) | [virtual] |
Default interface needed to initialize the component's variables from its input parameters value.
Formerly called 'init'.
Reimplemented from LCE_Disperse_base.
Definition at line 1068 of file LCEdisperse.cc.
Referenced by LCE_Disperse_EvolDisp().
01069 { 01070 //we do not call the LCE_Disperse_base::setParameters here because we don't use 01071 //dispersal matrices in input 01072 _npatch = _popPtr->getPatchNbr(); 01073 01074 _disp_model = (int)_paramSet->getValue("dispersal_model"); 01075 01076 _disp_propagule_prob = _paramSet->getValue("dispersal_propagule_prob"); 01077 01078 if(_disp_model == -1) { 01079 error("dispersal model not specified!\n"); 01080 return false; 01081 } 01082 01083 if(_disp_model == 2 && _disp_propagule_prob == -1) { 01084 error("dispersal propagule probability is missing!\n"); 01085 return false; 01086 } 01087 01088 _fdisp_trait_link = _popPtr->getTraitIndex("fdisp"); 01089 _mdisp_trait_link = _popPtr->getTraitIndex("mdisp"); 01090 01091 if(_paramSet->isSet("dispersal_cost")) { 01092 01093 _fem_cost = _mal_cost = _paramSet->getValue("dispersal_cost"); 01094 01095 } else if(_paramSet->isSet("dispersal_cost_fem") && _paramSet->isSet("dispersal_cost_mal")) { 01096 01097 _fem_cost = _paramSet->getValue("dispersal_cost_fem"); 01098 01099 _mal_cost = _paramSet->getValue("dispersal_cost_mal"); 01100 01101 } else { 01102 error("dispersal cost params are not set !\n"); 01103 return false; 01104 } 01105 01106 if(_paramSet->isSet("dispersal_fixed_trait")) { 01107 01108 if(_paramSet->getArg("dispersal_fixed_trait").compare("female") == 0) { 01109 01110 exec = &LCE_Disperse_EvolDisp::exec_evolmale; 01111 01112 } else if(_paramSet->getArg("dispersal_fixed_trait").compare("male") == 0) { 01113 01114 exec = &LCE_Disperse_EvolDisp::exec_evolfemale; 01115 01116 } else { 01117 error("wrong argument value for \"dispersal_fixed_trait\"\n"); 01118 return false; 01119 } 01120 01121 _fixed_disp_rate = _paramSet->getValue("dispersal_fixed_rate"); 01122 01123 } else 01124 exec = &LCE_Disperse_EvolDisp::exec_evol2sex; 01125 01126 switch ( getDispersalModel() ) { 01127 case 0: 01128 case 1: 01129 getAimedPatch = &LCE_Disperse_EvolDisp::Migrate_Island; 01130 break; 01131 case 2: 01132 getAimedPatch = &LCE_Disperse_EvolDisp::Migrate_Island_Propagule; 01133 break; 01134 case 3: 01135 getAimedPatch = &LCE_Disperse_EvolDisp::Migrate_SteppingStone1D; 01136 break; 01137 default: { 01139 error("\nDispersal model %i not yet implemented with evolving dispersal!\n",getDispersalModel()); 01140 return false; 01141 } 01142 } 01143 return true; 01144 }
int LCE_Disperse_EvolDisp::_fdisp_trait_link [private] |
Definition at line 162 of file LCEdisperse.h.
Referenced by exec_evol2sex(), exec_evolfemale(), and setParameters().
double LCE_Disperse_EvolDisp::_fem_cost [private] |
Definition at line 149 of file LCEdisperse.h.
Referenced by exec_evol2sex(), exec_evolfemale(), exec_evolmale(), and setParameters().
double LCE_Disperse_EvolDisp::_fixed_disp_rate [private] |
Definition at line 149 of file LCEdisperse.h.
Referenced by exec_evolfemale(), exec_evolmale(), and setParameters().
double LCE_Disperse_EvolDisp::_mal_cost [private] |
Definition at line 149 of file LCEdisperse.h.
Referenced by exec_evol2sex(), exec_evolfemale(), exec_evolmale(), and setParameters().
int LCE_Disperse_EvolDisp::_mdisp_trait_link [private] |
Definition at line 162 of file LCEdisperse.h.
Referenced by exec_evol2sex(), exec_evolmale(), and setParameters().
void(LCE_Disperse_EvolDisp::* LCE_Disperse_EvolDisp::exec)() [private] |
Referenced by execute(), and setParameters().
unsigned int(LCE_Disperse_EvolDisp::* LCE_Disperse_EvolDisp::getAimedPatch)(unsigned int) [private] |
Referenced by evoldisp(), fixdisp(), and setParameters().
1.5.8 -- Nemo is hosted by