Nemo  2.4.0b
Simulate forward-in-time genetic evolution in a spatially explicit, individual-based stochastic simulator
LCE_QuantiInit Class Reference

Set patch-specifiec initial genotypes values. More...

#include <LCEquanti.h>

+ Inheritance diagram for LCE_QuantiInit:
+ Collaboration diagram for LCE_QuantiInit:

Public Member Functions

 LCE_QuantiInit ()
 
virtual ~LCE_QuantiInit ()
 
virtual void execute ()
 
void init_trait_value (sex_t SEX, age_idx AGE, unsigned int size, unsigned int deme, double *values)
 
void init_allele_freq (sex_t SEX, age_idx AGE, unsigned int size, unsigned int deme, double *values, const TMatrix &all_val)
 
virtual LifeCycleEventclone ()
 
virtual bool setParameters ()
 
virtual void loadFileServices (FileServices *loader)
 
virtual void loadStatServices (StatServices *loader)
 
virtual bool resetParameterFromSource (std::string param, SimComponent *cmpt)
 
virtual age_t removeAgeClass ()
 
virtual age_t addAgeClass ()
 
virtual age_t requiredAgeClass ()
 
- Public Member Functions inherited from LifeCycleEvent
 LifeCycleEvent (const char *name, const char *trait_link)
 Cstor. More...
 
virtual ~LifeCycleEvent ()
 
virtual void init (Metapop *popPtr)
 Sets the pointer to the current Metapop and the trait link if applicable. More...
 
virtual bool attach_trait (string trait)
 
virtual void set_paramset (std::string name, bool required, SimComponent *owner)
 
virtual void set_event_name (std::string &name)
 Set the name of the event (name of the ParamSet) and add the corresponding parameter to the set. More...
 
virtual void set_event_name (const char *name)
 
virtual string & get_event_name ()
 Accessor to the LCE's name. More...
 
virtual int get_rank ()
 Accessor to the LCE rank in the life cycle. More...
 
virtual void set_pop_ptr (Metapop *popPtr)
 Accessors for the population pointer. More...
 
virtual Metapopget_pop_ptr ()
 
- Public Member Functions inherited from SimComponent
 SimComponent ()
 
virtual ~SimComponent ()
 
virtual void loadUpdaters (UpdaterServices *loader)
 Loads the parameters and component updater onto the updater manager. More...
 
virtual void set_paramset (ParamSet *paramset)
 Sets the ParamSet member. More...
 
virtual void set_paramsetFromCopy (const ParamSet &PSet)
 Reset the set of parameters from a another set. More...
 
virtual ParamSetget_paramset ()
 ParamSet accessor. More...
 
virtual void add_parameter (Param *param)
 Interface to add a parameter to the set. More...
 
virtual void add_parameter (std::string Name, param_t Type, bool isRequired, bool isBounded, double low_bnd, double up_bnd)
 Interface to add a parameter to the set. More...
 
virtual void add_parameter (std::string Name, param_t Type, bool isRequired, bool isBounded, double low_bnd, double up_bnd, ParamUpdaterBase *updater)
 Interface to add a parameter and its updater to the set. More...
 
virtual Paramget_parameter (std::string name)
 Param getter. More...
 
virtual double get_parameter_value (std::string name)
 Param value getter. More...
 
virtual string get_name ()
 Returnd the name of the ParamSet, i.e. More...
 
virtual bool has_parameter (std::string name)
 Param getter. More...
 

Private Attributes

TMatrix _init_values
 
TMatrix _init_freq
 
bool _doByTraitValue
 
bool _doByAlleleFreq
 
unsigned int _nTraits
 
unsigned int _nLoci
 
TProtoQuanti_QuantiProto
 

Additional Inherited Members

- Protected Attributes inherited from LifeCycleEvent
std::string _event_name
 The param name to be read in the init file. More...
 
Metapop_popPtr
 The ptr to the current Metapop. More...
 
std::string _LCELinkedTraitType
 The name of the linked trait. More...
 
int _LCELinkedTraitIndex
 The index in the individual's trait table of the linked trait. More...
 
- Protected Attributes inherited from SimComponent
ParamSet_paramSet
 The parameters container. More...
 

Detailed Description

Set patch-specifiec initial genotypes values.

Constructor & Destructor Documentation

◆ LCE_QuantiInit()

LCE_QuantiInit::LCE_QuantiInit ( )
41  : LifeCycleEvent("quanti_init","quant"), _doByTraitValue(0),
43  {
44  add_parameter("quanti_init_trait_values",MAT,0,0,0,0);
45  add_parameter("quanti_init_freq",MAT,0,0,0,0);
46  }
bool _doByAlleleFreq
Definition: LCEquanti.h:43
TProtoQuanti * _QuantiProto
Definition: LCEquanti.h:45
bool _doByTraitValue
Definition: LCEquanti.h:43
unsigned int _nLoci
Definition: LCEquanti.h:44
unsigned int _nTraits
Definition: LCEquanti.h:44
LifeCycleEvent(const char *name, const char *trait_link)
Cstor.
Definition: lifecycleevent.h:98
virtual void add_parameter(Param *param)
Interface to add a parameter to the set.
Definition: simcomponent.h:112
@ MAT
Definition: types.h:78

References SimComponent::add_parameter(), and MAT.

Referenced by clone().

◆ ~LCE_QuantiInit()

virtual LCE_QuantiInit::~LCE_QuantiInit ( )
inlinevirtual
51 { }

Member Function Documentation

◆ addAgeClass()

virtual age_t LCE_QuantiInit::addAgeClass ( )
inlinevirtual

Implements LifeCycleEvent.

66 {return 0;}

◆ clone()

virtual LifeCycleEvent* LCE_QuantiInit::clone ( )
inlinevirtual

Implements LifeCycleEvent.

57 {return new LCE_QuantiInit();}
LCE_QuantiInit()
Definition: LCEquanti.cc:41

References LCE_QuantiInit().

◆ execute()

void LCE_QuantiInit::execute ( )
virtual

Implements LifeCycleEvent.

106 {
107  if(!(_popPtr->getCurrentGeneration() == 1)) return;
108 
109  unsigned int patchNbr = _popPtr->getPatchNbr();
110 
111  if (_doByTraitValue) {
112 
113  double values[_nTraits];
114 
115  for (unsigned int i = 0; i < patchNbr ; i++) {
116 
117  _init_values.getRowView(i, _nTraits, &values[0]);
118 
119  _QuantiProto->set_init_values(&values[0], _nTraits); // the individuals use the proto to set the init values
120 
121  init_trait_value(FEM, OFFSx, _popPtr->size(FEM, OFFSPRG, i), i, &values[0]);
122  init_trait_value(MAL, OFFSx, _popPtr->size(MAL, OFFSPRG, i), i, &values[0]);
123  init_trait_value(FEM, ADLTx, _popPtr->size(FEM, ADULTS, i), i, &values[0]);
124  init_trait_value(MAL, ADLTx, _popPtr->size(MAL, ADULTS, i), i, &values[0]);
125  }
126  }
127 
128  if (_doByAlleleFreq) {
129 
130 #ifdef _DEBUG_
131  message("--- Initializing trait QUANT by frequency ---\n");
132 #endif
133 
134  double ifreq[_nLoci];
135 
136  const TMatrix allele_val = dynamic_cast<TProtoQuanti*> ( _popPtr->getTraitPrototype("quant") )->get_diallele_values();
137 
138  for (unsigned int i = 0; i < patchNbr ; i++) {
139 
140  _init_freq.getRowView(i, _nLoci, &ifreq[0]);
141 
142  init_allele_freq(FEM, OFFSx, _popPtr->size(FEM, OFFSPRG, i), i, &ifreq[0], allele_val);
143  init_allele_freq(MAL, OFFSx, _popPtr->size(MAL, OFFSPRG, i), i, &ifreq[0], allele_val);
144  init_allele_freq(FEM, ADLTx, _popPtr->size(FEM, ADULTS, i), i, &ifreq[0], allele_val);
145  init_allele_freq(MAL, ADLTx, _popPtr->size(MAL, ADULTS, i), i, &ifreq[0], allele_val);
146  }
147  }
148 
149 }
TraitPrototype * getTraitPrototype(trait_t type)
Accessor to a TraitPrototype.
Definition: indfactory.cc:140
void init_allele_freq(sex_t SEX, age_idx AGE, unsigned int size, unsigned int deme, double *values, const TMatrix &all_val)
Definition: LCEquanti.cc:168
TMatrix _init_values
Definition: LCEquanti.h:42
void init_trait_value(sex_t SEX, age_idx AGE, unsigned int size, unsigned int deme, double *values)
Definition: LCEquanti.cc:153
TMatrix _init_freq
Definition: LCEquanti.h:42
Metapop * _popPtr
The ptr to the current Metapop.
Definition: lifecycleevent.h:81
unsigned int size()
Get the total number of individuals present in the population, all sex and age classes together.
Definition: metapop.h:312
unsigned int getPatchNbr()
Definition: metapop.h:276
unsigned int getCurrentGeneration()
Definition: metapop.h:296
A class to handle matrix in params, coerces matrix into a vector of same total size.
Definition: tmatrix.h:50
void getRowView(unsigned int row, unsigned int n, double *array)
Gives access to a row of the matrix.
Definition: tmatrix.h:242
TProtoQuanti.
Definition: ttquanti.h:409
void set_init_values(const double *values, unsigned int nval)
Definition: ttquanti.cc:2466
void message(const char *message,...)
Definition: output.cc:40
@ FEM
Definition: types.h:37
@ MAL
Definition: types.h:37
#define ADULTS
Adults age class flag (breeders).
Definition: types.h:54
#define OFFSPRG
Offspring age class flag.
Definition: types.h:50
@ OFFSx
Definition: types.h:42
@ ADLTx
Definition: types.h:42

References _doByAlleleFreq, _doByTraitValue, _init_freq, _init_values, _nLoci, _nTraits, LifeCycleEvent::_popPtr, _QuantiProto, ADLTx, ADULTS, FEM, Metapop::getCurrentGeneration(), Metapop::getPatchNbr(), TMatrix::getRowView(), IndFactory::getTraitPrototype(), init_allele_freq(), init_trait_value(), MAL, message(), OFFSPRG, OFFSx, TProtoQuanti::set_init_values(), and Metapop::size().

◆ init_allele_freq()

void LCE_QuantiInit::init_allele_freq ( sex_t  SEX,
age_idx  AGE,
unsigned int  size,
unsigned int  deme,
double *  values,
const TMatrix all_val 
)
170 {
171  if(!size) return;
172 
173  Individual* ind;
174  TTQuanti_diallelic* trait;
175 
176 
177  if(size == 1) { // just one individual in a patch
178 
179  unsigned int allele;
180 
181  for(unsigned a = 0; a < 2; a++) {
182  for(unsigned l = 0; l < _nLoci; ++l) {
183 
184  if(RAND::Uniform() < ifreq[l])
185  allele = 0;
186  else
187  allele = 1;
188 
189  ind = _popPtr->get(SEX, age, 0, deme);
190  trait = dynamic_cast<TTQuanti_diallelic*> ( ind->getTrait(_LCELinkedTraitIndex) );
191  trait->set_allele_bit(l, a, bool(allele));
192  }
193  }
194 
195  } else {
196 
197  unsigned int num_A, num_a;
198 
199  for(unsigned a = 0; a < 2; a++) {
200  for(unsigned l = 0; l < _nLoci; ++l) {
201 
202  num_A = (unsigned int)(size * ifreq[l]);
203 
204  num_a = size - num_A;
205 
206  int ind_A[num_A];
207  int ind_a[num_a];
208 
209  RAND::SampleSeqWithReciprocal(0, size, 1, num_A, &ind_A[0], num_a, &ind_a[0]); //sample individuals within deme, without replacement
210 
211  for (unsigned int i = 0; i < num_A ; i++) {
212  ind = _popPtr->get(SEX, age, ind_A[i], deme);
213  trait = dynamic_cast<TTQuanti_diallelic*> ( ind->getTrait(_LCELinkedTraitIndex) );
214  trait->set_allele_bit(l, a, 0);
215  }
216 
217  for (unsigned int i = 0; i < num_a ; i++) {
218  ind = _popPtr->get(SEX, age, ind_a[i], deme);
219  trait = dynamic_cast<TTQuanti_diallelic*> ( ind->getTrait(_LCELinkedTraitIndex) );
220  trait->set_allele_bit(l, a, 1);
221  }
222  }
223  }
224  }
225 
226  for (unsigned int i = 0; i < size; ++i) {
227  _popPtr->get(SEX, age, i, deme)->setTraitValue(_LCELinkedTraitIndex);
228  }
229 
230 }
This class contains traits along with other individual information (sex, pedigree,...
Definition: individual.h:49
void setTraitValue(IDX T)
Calls the value setting procedure of a particular trait.
Definition: individual.h:261
TTrait * getTrait(IDX T)
Trait accessor.
Definition: individual.h:277
int _LCELinkedTraitIndex
The index in the individual's trait table of the linked trait.
Definition: lifecycleevent.h:89
Individual * get(sex_t SEX, age_idx AGE, unsigned int at, unsigned int deme)
Returns a pointer to the appropriate individual.
Definition: metapop.h:834
static void SampleSeqWithReciprocal(int from, int to, int by, unsigned int num1, int *result1, unsigned int num2, int *result2)
Definition: Uniform.h:782
static double Uniform()
Generates a random number from [0.0, 1.0[ uniformly distributed.
Definition: Uniform.h:124
TTQuanti_diallelic.
Definition: ttquanti.h:276
virtual void set_allele_bit(unsigned int position, unsigned int allele, bool value)
Definition: ttquanti.cc:3898

References LifeCycleEvent::_LCELinkedTraitIndex, _nLoci, LifeCycleEvent::_popPtr, Metapop::get(), Individual::getTrait(), RAND::SampleSeqWithReciprocal(), TTQuanti_diallelic::set_allele_bit(), Individual::setTraitValue(), and RAND::Uniform().

Referenced by execute().

◆ init_trait_value()

void LCE_QuantiInit::init_trait_value ( sex_t  SEX,
age_idx  AGE,
unsigned int  size,
unsigned int  deme,
double *  values 
)
155 {
156  TTrait* trait;
157 
158  for (unsigned int i = 0; i < size ; i++) {
159  trait = _popPtr->get(SEX, age, i, deme)->getTrait(_LCELinkedTraitIndex);
160  trait->init_sequence(); // this function reads the init values from the trait prototype
161  trait->set_value();
162  }
163 
164 }
Interface for all trait types, declares all basic trait operations.
Definition: ttrait.h:46
virtual void set_value()=0
Tells the trait to set its phenotype from genotype, should be used instead of getValue().
virtual void init_sequence()=0
Called at the start of each replicate, sets the initial genotypes.

References LifeCycleEvent::_LCELinkedTraitIndex, LifeCycleEvent::_popPtr, Metapop::get(), Individual::getTrait(), TTrait::init_sequence(), and TTrait::set_value().

Referenced by execute().

◆ loadFileServices()

virtual void LCE_QuantiInit::loadFileServices ( FileServices loader)
inlinevirtual

Implements SimComponent.

62 {}

◆ loadStatServices()

virtual void LCE_QuantiInit::loadStatServices ( StatServices loader)
inlinevirtual

Implements SimComponent.

63 {}

◆ removeAgeClass()

virtual age_t LCE_QuantiInit::removeAgeClass ( )
inlinevirtual

Implements LifeCycleEvent.

65 {return 0;}

◆ requiredAgeClass()

virtual age_t LCE_QuantiInit::requiredAgeClass ( )
inlinevirtual

Implements LifeCycleEvent.

67 {return 0;}

◆ resetParameterFromSource()

virtual bool LCE_QuantiInit::resetParameterFromSource ( std::string  param,
SimComponent cmpt 
)
inlinevirtual

Implements SimComponent.

64 {return false;}

◆ setParameters()

bool LCE_QuantiInit::setParameters ( )
virtual

Implements SimComponent.

51 {
52  TMatrix pat_mat;
53 
54  // setting default values
55  unsigned int patchNbr = _popPtr->getPatchNbr();
56  _QuantiProto = dynamic_cast<TProtoQuanti*> ( _popPtr->getTraitPrototype("quant") );
57 
58  _nTraits = _QuantiProto -> get_num_traits();
60 
61  _doByAlleleFreq = false;
62  _doByTraitValue = false;
63 
64  // checking user's options
65  if(_paramSet->isSet("quanti_init_trait_values")) {
66 
67  if(!get_parameter("quanti_init_trait_values")->isMatrix()) {
68  fatal("\"quanti_init_trait_values\" accepts only a matrix as argument.\n");
69  }
70 
71  _paramSet->getMatrix("quanti_init_trait_values", &pat_mat);
72 
73  _doByTraitValue = setSpatialMatrix("quanti_init_trait_values", "num of quanti traits", &pat_mat, &_init_values, _nTraits, patchNbr);
74 
75  }
76 
77  if(_paramSet->isSet("quanti_init_freq")) {
78 
79  if (_QuantiProto->get_allele_model() > 2) {
80  error("quanti_init::allelic model of quanti trait incompatible with initialization by allele frequency.\n");
81  error("quanti_init::allelic model must be di-allelic instead of continuous.\n");
82  return false;
83  }
84  _paramSet->getMatrix("quanti_init_freq", &pat_mat);
85 
86  _doByAlleleFreq = setSpatialMatrix("quanti_init_freq", "num of quanti trait loci", &pat_mat, &_init_freq, _nLoci, patchNbr);
87 
88  }
89 
91  warning("quanti_init::trying to initialize quanti traits both by trait values and allele frequencies.");
92  warning("quanti_init::forcing initialization by allele frequencies.\n");
93  _doByTraitValue = false;
94  }
95 
97  error("quanti_init::either \"quanti_init_trait_values\" or \"quanti_init_freq\" are missing.\n");
98  }
99 
100  return (_doByTraitValue || _doByAlleleFreq);
101 }
void getMatrix(string name, TMatrix *mat)
Accessor to the parameters matrix.
Definition: param.h:304
bool isSet()
Accessor to the status flag.
Definition: param.h:288
virtual Param * get_parameter(std::string name)
Param getter.
Definition: simcomponent.h:139
ParamSet * _paramSet
The parameters container.
Definition: simcomponent.h:48
unsigned int get_allele_model()
Definition: ttquanti.h:428
unsigned int get_num_locus()
Definition: ttquanti.h:418
void fatal(const char *str,...)
Definition: output.cc:96
int error(const char *str,...)
Definition: output.cc:77
void warning(const char *str,...)
Definition: output.cc:58
bool setSpatialMatrix(string param, string numColCondition, TMatrix *inMat, TMatrix *outMat, unsigned int nVal, unsigned int patchNbr, bool doRandomize)
Definition: utils.cc:115

References _doByAlleleFreq, _doByTraitValue, _init_freq, _init_values, _nLoci, _nTraits, SimComponent::_paramSet, LifeCycleEvent::_popPtr, _QuantiProto, error(), fatal(), TProtoQuanti::get_allele_model(), TProtoQuanti::get_num_locus(), SimComponent::get_parameter(), ParamSet::getMatrix(), Metapop::getPatchNbr(), IndFactory::getTraitPrototype(), ParamSet::isSet(), setSpatialMatrix(), and warning().

Member Data Documentation

◆ _doByAlleleFreq

bool LCE_QuantiInit::_doByAlleleFreq
private

Referenced by execute(), and setParameters().

◆ _doByTraitValue

bool LCE_QuantiInit::_doByTraitValue
private

Referenced by execute(), and setParameters().

◆ _init_freq

TMatrix LCE_QuantiInit::_init_freq
private

Referenced by execute(), and setParameters().

◆ _init_values

TMatrix LCE_QuantiInit::_init_values
private

Referenced by execute(), and setParameters().

◆ _nLoci

unsigned int LCE_QuantiInit::_nLoci
private

◆ _nTraits

unsigned int LCE_QuantiInit::_nTraits
private

Referenced by execute(), and setParameters().

◆ _QuantiProto

TProtoQuanti* LCE_QuantiInit::_QuantiProto
private

Referenced by execute(), and setParameters().


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

Generated for Nemo v2.4.0b by  doxygen 1.9.1 -- Nemo is hosted on  Download Nemo

Locations of visitors to this page
Catalogued on GSR