LCE_Disperse_EvolDisp Class Reference

Dispersal event with an evolving dispersal rate given by the "disp" trait. More...

#include <LCEdisperse.h>

Inheritance diagram for LCE_Disperse_EvolDisp:

Inheritance graph
[legend]
Collaboration diagram for LCE_Disperse_EvolDisp:

Collaboration graph
[legend]

List of all members.

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 LifeCycleEventclone ()
 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


Detailed Description

Dispersal event with an evolving dispersal rate given by the "disp" trait.

The dispersal models implemented so far are:

Definition at line 146 of file LCEdisperse.h.


Constructor & Destructor Documentation

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]

Definition at line 169 of file LCEdisperse.h.

00169 {}


Member Function Documentation

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().

void LCE_Disperse_EvolDisp::exec_evolfemale (  )  [private]

Definition at line 1182 of file LCEdisperse.cc.

Referenced by setParameters().

void LCE_Disperse_EvolDisp::exec_evolmale (  )  [private]

Definition at line 1190 of file LCEdisperse.cc.

Referenced by setParameters().

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 }


Member Data Documentation

Definition at line 162 of file LCEdisperse.h.

Referenced by exec_evol2sex(), exec_evolfemale(), and setParameters().

Definition at line 149 of file LCEdisperse.h.

Referenced by exec_evol2sex(), exec_evolfemale(), exec_evolmale(), and setParameters().

Definition at line 149 of file LCEdisperse.h.

Referenced by exec_evolfemale(), exec_evolmale(), and setParameters().

Definition at line 149 of file LCEdisperse.h.

Referenced by exec_evol2sex(), exec_evolfemale(), exec_evolmale(), and setParameters().

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().


The documentation for this class was generated from the following files:

Generated for Nemo v2.1.2 by  doxygen 1.5.8 -- Nemo is hosted by  SourceForge.net Logo