Nemo  2.4.0
Simulate forward-in-time genetic evolution in a spatially explicit, individual-based stochastic simulator
ttbdmi.h
Go to the documentation of this file.
1 
28 #ifndef _TTDBMI_H_
29 #define _TTDBMI_H_
30 
31 #include "ttrait.h"
32 #include "types.h"
33 #include "stathandler.h"
34 #include "filehandler.h"
35 #include "lifecycleevent.h"
36 #include "metapop.h"
37 #include "bitstring.h"
38 #include "tmatrix.h"
39 #include "Uniform.h"
40 
41 class TTBDMI_SH;
42 class TTBDMI_FH;
43 class TT_BDMI;
44 // ------------------------------------------------------------------------------
45 
46 // TProtoBDMI
47 
48 // ------------------------------------------------------------------------------
49 class TProtoBDMI : public TTProtoWithMap {
50 
52 
53  bool _isHaploid;
54  unsigned int _num_locus;
55  unsigned int _npair;
56  double _mut_rate;
58  double _recomb_rate;
59  double* _init_freq;
60  bool _isInitSet;
61  static unsigned int _diploGenotTableCoding3x3[3][3];
62  static unsigned int _diploGenotTableCoding4x4[4][4];
63 
64  void (TT_BDMI::* _inherit_func_ptr) (const TTrait*, const TTrait*);
65  void (TProtoBDMI::* _gamete_recomb_func_ptr) (sex_t SEX, bitstring& seq, const bitstring* parent);
66  void (TT_BDMI::* _mutation_func_ptr) (void);
67  double (TT_BDMI::* _viability_func_ptr) (void);
68 
72 
73  friend class TT_BDMI;
74 
75 public:
76 
77  TProtoBDMI();
78  TProtoBDMI(const TProtoBDMI& TP);
79  virtual ~TProtoBDMI();
80 
81  int get_num_locus ( ) {return _num_locus;}
82  double get_mut_rate ( ) {return _mut_rate;}
83  bool isHaploid ( ) {return _isHaploid;}
84  void set_init_freq (double* val, unsigned int size);
85  double get_init_freq (unsigned int i) {return _init_freq[i];}
86  bool isInitSet ( ) {return _isInitSet;}
87 
88  double getGenoFitnessHaplo (unsigned int row, unsigned int pos){
89  assert(pos < 4);
90  return _genoTable.get(row, pos);
91  }
92 
93  double getGenoFitnessDiplo (unsigned int row, unsigned int posA, unsigned int posB)
94  {
95  return _genoTable.get(row, _diploGenotTableCoding4x4[posA][posB] );
96  }
97 
98  double getGenoFitnessDiplo (unsigned int row, unsigned int pos)
99  {
100  assert(pos < 16);
101  return _genoTable.get(row, pos);
102  }
103 
104  void setGenoFitnessValue(unsigned int row, unsigned int geno, double value)
105  { _genoTable.set(row, geno, value); }
106 
107  void showGenoTable (unsigned int nrows);
108 
109  void gamete_recombination (sex_t SEX, bitstring& seq, const bitstring* parent);
110  void inherit_free (sex_t SEX, bitstring& seq, const bitstring* parent);
111  void inherit_low (sex_t SEX, bitstring& seq, const bitstring* parent);
112 
115  virtual void init () {setParameters();}
116  virtual TTrait* hatch ();
117  virtual TraitPrototype* clone () {return new TProtoBDMI(*this);}
118  virtual trait_t get_type () const {return _type;}
120  virtual int get_phenotype_dimension () {return 1;}
122  virtual int get_allele_number () {return 2;}
124  virtual int get_locus_number () {return _num_locus;}
128  virtual void store_data (BinaryStorageBuffer* saver)
129  {
130  saver->store(&_num_locus, sizeof(int));
131  saver->store(&_isHaploid, sizeof(bool));
132  }
133  virtual bool retrieve_data (BinaryStorageBuffer* reader);
137  virtual bool setParameters ( );
138  virtual void loadFileServices ( FileServices* loader );
139  virtual void loadStatServices ( StatServices* loader );
140  virtual bool resetParameterFromSource (std::string param, SimComponent* cmpt) {return false;}
142 
143 };
144 // ------------------------------------------------------------------------------
145 
146 // TT_BDMI
147 
148 // ------------------------------------------------------------------------------
149 class TT_BDMI : public TTrait {
150 
152 
154 
155  double _phenotype;
156 
157 
158 
159 
160  static unsigned int _haploGenotCoding[2][2];
161  static unsigned int _diploGenotCoding[2][2];
162 
163 public:
164  //cstor & dstor
166  : _myProto(0), _phenotype(0) {}
167 
168  TT_BDMI(const TT_BDMI& T)
169  : _myProto(T._myProto), _phenotype(0){}
170 
171  virtual ~TT_BDMI() { }
172 
175 
176  void set_proto (TProtoBDMI* proto) {_myProto = proto;}
178 
179  void set_sequence (bitstring** seq);
180 
181  //inheritance routines:
182  void inherit_haplo (const TTrait* mother, const TTrait* father);
183  void inherit_diplo (const TTrait* mother, const TTrait* father);
184 
185  //mutation routines:
186  void mutate_haplo ( );
187  void mutate_diplo ( );
188 
189  double viability_haplo ( );
190  double viability_diplo ( );
191 
192  unsigned int get_num_mut_haplo (unsigned int loc) {return _sequence[0][loc];}
193  unsigned int get_num_mut_diplo (unsigned int loc) {return _sequence[0][loc] + _sequence[1][loc];}
194 
195  const bitstring& get_bit_sequence (bool chromosome) const {return _sequence[chromosome];}
196  const bitstring* get_genome_sequence () const {return &_sequence[0];}
197 
200  virtual void init ();
201  virtual void init_sequence ();
202  virtual void reset ();
203  virtual void inherit (const TTrait* mother, const TTrait* father);
204  virtual void mutate ();
205  virtual void* set_trait (void* value) {return NULL;}
206  virtual void set_sequence (void** seq) {}
207  virtual void set_value ();
208  virtual void* getValue () const {return (void*)&_phenotype;}
209  virtual trait_t get_type () const {return _myProto->get_type();}
210  virtual void** get_sequence () const {
211  error("calling TT_BDMI::get_sequence()\n");
212  return (void**)NULL;
213  }
214  virtual unsigned int get_allele (int loc, int all) const;
215  virtual double get_allele_value (int loc, int all) const;
216  virtual void set_allele_value (unsigned int locus, unsigned int allele, double value);
217  virtual void show_up ();
218 
219  virtual TT_BDMI* clone () {return new TT_BDMI(*this);}
220  virtual TT_BDMI& operator= (const TTrait&);
221  virtual bool operator== (const TTrait&);
222  virtual bool operator!= (const TTrait&);
223 
224  //implements StorableComponent:
225  virtual void store_data (BinaryStorageBuffer* saver);
226  virtual bool retrieve_data (BinaryStorageBuffer* reader);
228 
229 };
230 
231 // ------------------------------------------------------------------------------
232 
233 // TTBDMI_FH
234 
235 // ------------------------------------------------------------------------------
238 class TTBDMI_FH : public TraitFileHandler< TProtoBDMI > {
239 
240 public:
241 
243  virtual ~TTBDMI_FH ( ) { }
244 
245  void write_haplo (Patch* patch, sex_t SEX, age_idx AGE, ofstream& FH);
246  void write_diplo (Patch* patch, sex_t SEX, age_idx AGE, ofstream& FH);
247 
248  virtual void FHwrite ();
249  virtual void FHread (string& filename) {}
250 
251 };
252 
253 // ------------------------------------------------------------------------------
254 
255 // TTBDMI_SH
256 
257 // ------------------------------------------------------------------------------
261 class TTBDMI_SH : public TraitStatHandler< TProtoBDMI, TTBDMI_SH > {
262 
263  double _freq, _freqIcomp;
265 
266 public:
268  _freq(0), _freqIcomp(0), _patchFreq(0), _patchIcmp(0) {}
269 
270  virtual ~TTBDMI_SH(){if(_patchFreq)delete[]_patchFreq;if(_patchIcmp)delete[]_patchIcmp;}
271 
272  virtual bool setStatRecorders (std::string& token);
273 
274  void addStats (age_t AGE);
275  void setAdultStats () ;
276  void setOffsprgStats ();
277  void setStats (age_idx agex, void(TTBDMI_SH::* cntFunc)(Patch*,sex_t,age_idx,double**,double**));
278  void countAllele_haplo (Patch *patch, sex_t SEX, age_idx AGE, double **frqTab, double **icpTab);
279  void countAllele_diplo (Patch *patch, sex_t SEX, age_idx AGE, double **frqTab, double **icpTab);
280  double getFreq () {return _freq;}
281  double getFreqIcmp () {return _freqIcomp;}
282  double getPatchFreq (unsigned int i) {return _patchFreq[i];}
283  double getPatchIcmp (unsigned int i) {return _patchIcmp[i];}
284 
285 };
286 
287 // ------------------------------------------------------------------------------
288 
289 // LCE_Init_BDMI
290 
291 // ------------------------------------------------------------------------------
295 
297  unsigned int _nLocus;
298 
299 public:
300 
301  LCE_Init_BDMI ( );
302 
303  virtual ~LCE_Init_BDMI ( ) { }
304 
305  bool setSpatialPattern(TMatrix& freq_mat, unsigned int patchNbr);
306  bool setPatchFreq(TMatrix& freq_mat,TMatrix& pat_mat, unsigned int patchNbr);
307  void init_value(sex_t SEX, age_idx age, unsigned int size, unsigned int deme);
308 
309  //LifeCycleEvent implementation:
310  virtual void execute ();
311 
312  virtual LifeCycleEvent* clone ( ) {return new LCE_Init_BDMI();}
313 
314  virtual bool setParameters ();
315 
316  //SimComponent implementation:
317  virtual void loadFileServices ( FileServices* loader ) {}
318  virtual void loadStatServices ( StatServices* loader ) {}
319  virtual bool resetParameterFromSource (std::string param, SimComponent* cmpt) {return false;}
320  virtual age_t removeAgeClass ( ) {return 0;}
321  virtual age_t addAgeClass ( ) {return 0;}
322  virtual age_t requiredAgeClass () {return 0;}
323 };
324 
325 #endif
Nemo2.
A class to store any kind of data in a char buffer before unloading it in a binary data file.
Definition: binarystoragebuffer.h:43
void store(void *stream, unsigned int nb_bytes)
Definition: binarystoragebuffer.cc:37
A class to manage the files associated with each components of the simulation.
Definition: fileservices.h:51
Allelic frequency initialiser for the DBMI trait.
Definition: ttbdmi.h:294
virtual age_t removeAgeClass()
Definition: ttbdmi.h:320
bool setSpatialPattern(TMatrix &freq_mat, unsigned int patchNbr)
Definition: ttbdmi.cc:1097
virtual void loadFileServices(FileServices *loader)
Definition: ttbdmi.h:317
TMatrix _init_freq
Definition: ttbdmi.h:296
unsigned int _nLocus
Definition: ttbdmi.h:297
bool setPatchFreq(TMatrix &freq_mat, TMatrix &pat_mat, unsigned int patchNbr)
Definition: ttbdmi.cc:1135
virtual age_t requiredAgeClass()
Definition: ttbdmi.h:322
virtual bool setParameters()
Definition: ttbdmi.cc:1054
virtual age_t addAgeClass()
Definition: ttbdmi.h:321
void init_value(sex_t SEX, age_idx age, unsigned int size, unsigned int deme)
Definition: ttbdmi.cc:1196
virtual void loadStatServices(StatServices *loader)
Definition: ttbdmi.h:318
LCE_Init_BDMI()
Definition: ttbdmi.cc:1044
virtual ~LCE_Init_BDMI()
Definition: ttbdmi.h:303
virtual bool resetParameterFromSource(std::string param, SimComponent *cmpt)
Definition: ttbdmi.h:319
virtual LifeCycleEvent * clone()
Definition: ttbdmi.h:312
virtual void execute()
Definition: ttbdmi.cc:1169
Base class of the Life Cycle Events, declares the LCE interface.
Definition: lifecycleevent.h:72
Second class in the metapopulation design structure, between the Metapop and Individual classes.
Definition: metapop.h:431
Interface to all basic components of a simulation (traits, life cycle events, pop,...
Definition: simcomponent.h:44
The Service class used to manage the StatHandler objects.
Definition: statservices.h:49
A class to handle matrix in params, coerces matrix into a vector of same total size.
Definition: tmatrix.h:49
void set(unsigned int i, unsigned int j, double val)
Sets element at row i and column j to value val.
Definition: tmatrix.h:102
double get(unsigned int i, unsigned int j) const
Accessor to element at row i and column j.
Definition: tmatrix.h:192
Definition: ttbdmi.h:49
int get_num_locus()
Definition: ttbdmi.h:81
virtual TraitPrototype * clone()
Definition: ttbdmi.h:117
void gamete_recombination(sex_t SEX, bitstring &seq, const bitstring *parent)
Definition: ttbdmi.cc:285
bool _isHaploid
Definition: ttbdmi.h:53
double * _init_freq
Definition: ttbdmi.h:59
TMatrix _genoTable
Definition: ttbdmi.h:69
virtual bool retrieve_data(BinaryStorageBuffer *reader)
Definition: ttbdmi.cc:373
double get_init_freq(unsigned int i)
Definition: ttbdmi.h:85
double getGenoFitnessHaplo(unsigned int row, unsigned int pos)
Definition: ttbdmi.h:88
double _recomb_rate
Definition: ttbdmi.h:58
void inherit_free(sex_t SEX, bitstring &seq, const bitstring *parent)
Definition: ttbdmi.cc:292
virtual void loadStatServices(StatServices *loader)
Definition: ttbdmi.cc:228
virtual void store_data(BinaryStorageBuffer *saver)
Definition: ttbdmi.h:128
double _genomic_mut_rate
Definition: ttbdmi.h:57
static unsigned int _diploGenotTableCoding4x4[4][4]
Definition: ttbdmi.h:62
void(TProtoBDMI::* _gamete_recomb_func_ptr)(sex_t SEX, bitstring &seq, const bitstring *parent)
Definition: ttbdmi.h:65
TTBDMI_FH * _writer
Definition: ttbdmi.h:71
trait_t _type
Definition: ttbdmi.h:51
virtual void init()
Definition: ttbdmi.h:115
unsigned int _num_locus
Definition: ttbdmi.h:54
static unsigned int _diploGenotTableCoding3x3[3][3]
Definition: ttbdmi.h:61
bool isInitSet()
Definition: ttbdmi.h:86
virtual TTrait * hatch()
Definition: ttbdmi.cc:240
double getGenoFitnessDiplo(unsigned int row, unsigned int posA, unsigned int posB)
Definition: ttbdmi.h:93
double _mut_rate
Definition: ttbdmi.h:56
double(TT_BDMI::* _viability_func_ptr)(void)
Definition: ttbdmi.h:67
unsigned int _npair
Definition: ttbdmi.h:55
virtual ~TProtoBDMI()
Definition: ttbdmi.cc:76
virtual int get_phenotype_dimension()
Returns the dimension of the phenotype of the trait (size of the array accessed with TTrait::getValue...
Definition: ttbdmi.h:120
bool _isInitSet
Definition: ttbdmi.h:60
void setGenoFitnessValue(unsigned int row, unsigned int geno, double value)
Definition: ttbdmi.h:104
double getGenoFitnessDiplo(unsigned int row, unsigned int pos)
Definition: ttbdmi.h:98
void(TT_BDMI::* _mutation_func_ptr)(void)
Definition: ttbdmi.h:66
virtual bool resetParameterFromSource(std::string param, SimComponent *cmpt)
Definition: ttbdmi.h:140
virtual int get_locus_number()
Returns the number of locus.
Definition: ttbdmi.h:124
void inherit_low(sex_t SEX, bitstring &seq, const bitstring *parent)
Definition: ttbdmi.cc:301
virtual trait_t get_type() const
Definition: ttbdmi.h:118
virtual void loadFileServices(FileServices *loader)
Definition: ttbdmi.cc:193
void(TT_BDMI::* _inherit_func_ptr)(const TTrait *, const TTrait *)
Definition: ttbdmi.h:64
virtual bool setParameters()
Definition: ttbdmi.cc:86
TProtoBDMI()
Definition: ttbdmi.cc:40
void showGenoTable(unsigned int nrows)
Definition: ttbdmi.cc:265
void set_init_freq(double *val, unsigned int size)
Definition: ttbdmi.cc:250
virtual int get_allele_number()
Returns the number of allele per locus.
Definition: ttbdmi.h:122
bool isHaploid()
Definition: ttbdmi.h:83
double get_mut_rate()
Definition: ttbdmi.h:82
TTBDMI_SH * _stater
Definition: ttbdmi.h:70
FileHandler for the DBMI trait.
Definition: ttbdmi.h:238
void write_haplo(Patch *patch, sex_t SEX, age_idx AGE, ofstream &FH)
Definition: ttbdmi.cc:767
virtual ~TTBDMI_FH()
Definition: ttbdmi.h:243
TTBDMI_FH(TProtoBDMI *TP)
Definition: ttbdmi.h:242
virtual void FHread(string &filename)
Definition: ttbdmi.h:249
virtual void FHwrite()
Definition: ttbdmi.cc:715
void write_diplo(Patch *patch, sex_t SEX, age_idx AGE, ofstream &FH)
Definition: ttbdmi.cc:794
StatHandler for the DBMI trait.
Definition: ttbdmi.h:261
double getPatchIcmp(unsigned int i)
Definition: ttbdmi.h:283
double * _patchFreq
Definition: ttbdmi.h:264
double * _patchIcmp
Definition: ttbdmi.h:264
virtual bool setStatRecorders(std::string &token)
Definition: ttbdmi.cc:825
virtual ~TTBDMI_SH()
Definition: ttbdmi.h:270
void addStats(age_t AGE)
Definition: ttbdmi.cc:851
TTBDMI_SH(TProtoBDMI *TP)
Definition: ttbdmi.h:267
double _freq
Definition: ttbdmi.h:263
void setAdultStats()
Definition: ttbdmi.cc:876
void countAllele_haplo(Patch *patch, sex_t SEX, age_idx AGE, double **frqTab, double **icpTab)
Definition: ttbdmi.cc:989
void setStats(age_idx agex, void(TTBDMI_SH::*cntFunc)(Patch *, sex_t, age_idx, double **, double **))
Definition: ttbdmi.cc:892
void setOffsprgStats()
Definition: ttbdmi.cc:884
double getFreqIcmp()
Definition: ttbdmi.h:281
double getFreq()
Definition: ttbdmi.h:280
double getPatchFreq(unsigned int i)
Definition: ttbdmi.h:282
void countAllele_diplo(Patch *patch, sex_t SEX, age_idx AGE, double **frqTab, double **icpTab)
Definition: ttbdmi.cc:1014
double _freqIcomp
Definition: ttbdmi.h:263
TTProtoWithMap.
Definition: ttrait_with_map.h:183
Definition: ttbdmi.h:149
const bitstring * get_genome_sequence() const
Definition: ttbdmi.h:196
virtual void mutate()
Definition: ttbdmi.cc:569
virtual void set_value()
Definition: ttbdmi.cc:608
virtual double get_allele_value(int loc, int all) const
Definition: ttbdmi.cc:464
unsigned int get_num_mut_haplo(unsigned int loc)
Definition: ttbdmi.h:192
void mutate_diplo()
Definition: ttbdmi.cc:592
virtual void * getValue() const
Definition: ttbdmi.h:208
virtual void init()
Definition: ttbdmi.cc:483
virtual void reset()
Definition: ttbdmi.cc:494
virtual bool operator==(const TTrait &)
Definition: ttbdmi.cc:432
virtual void show_up()
Definition: ttbdmi.cc:649
virtual bool retrieve_data(BinaryStorageBuffer *reader)
Definition: ttbdmi.cc:690
double viability_diplo()
Definition: ttbdmi.cc:629
virtual trait_t get_type() const
Definition: ttbdmi.h:209
TT_BDMI()
Definition: ttbdmi.h:165
double viability_haplo()
Definition: ttbdmi.cc:615
virtual unsigned int get_allele(int loc, int all) const
Definition: ttbdmi.cc:456
virtual TT_BDMI * clone()
Definition: ttbdmi.h:219
virtual void inherit(const TTrait *mother, const TTrait *father)
Definition: ttbdmi.cc:540
virtual bool operator!=(const TTrait &)
Definition: ttbdmi.cc:446
virtual void set_sequence(void **seq)
Definition: ttbdmi.h:206
virtual void * set_trait(void *value)
Definition: ttbdmi.h:205
void set_sequence(bitstring **seq)
Definition: ttbdmi.cc:502
void inherit_haplo(const TTrait *mother, const TTrait *father)
Definition: ttbdmi.cc:558
virtual void store_data(BinaryStorageBuffer *saver)
Definition: ttbdmi.cc:674
TProtoBDMI * _myProto
Definition: ttbdmi.h:151
virtual ~TT_BDMI()
Definition: ttbdmi.h:171
static unsigned int _haploGenotCoding[2][2]
Definition: ttbdmi.h:160
void mutate_haplo()
Definition: ttbdmi.cc:576
void set_proto(TProtoBDMI *proto)
Definition: ttbdmi.h:176
double _phenotype
Definition: ttbdmi.h:155
unsigned int get_num_mut_diplo(unsigned int loc)
Definition: ttbdmi.h:193
bitstring _sequence[2]
Definition: ttbdmi.h:153
virtual void ** get_sequence() const
Definition: ttbdmi.h:210
void inherit_diplo(const TTrait *mother, const TTrait *father)
Definition: ttbdmi.cc:547
virtual void set_allele_value(unsigned int locus, unsigned int allele, double value)
Definition: ttbdmi.cc:476
virtual void init_sequence()
Definition: ttbdmi.cc:514
TT_BDMI(const TT_BDMI &T)
Definition: ttbdmi.h:168
static unsigned int _diploGenotCoding[2][2]
Definition: ttbdmi.h:161
const bitstring & get_bit_sequence(bool chromosome) const
Definition: ttbdmi.h:195
virtual TT_BDMI & operator=(const TTrait &)
Definition: ttbdmi.cc:404
Interface for all trait types, declares all basic trait operations.
Definition: ttrait.h:45
Template class for the trait's FileHandler.
Definition: filehandler.h:220
TTrait setter.
Definition: ttrait.h:130
Template class for the trait's StatHandler.
Definition: stathandler.h:167
Non-template and faster implementation of std::bitset.
Definition: bitstring.h:56
Nemo2.
int error(const char *str,...)
Definition: output.cc:78
Nemo2.
Nemo2.
Nemo2.
std::string trait_t
Trait types.
Definition: types.h:62
sex_t
Sex types, males are always 0 and females 1!!
Definition: types.h:35
unsigned int age_t
Age class flags.
Definition: types.h:45
age_idx
Array index of the age classes in the patch sizes and containers arrays.
Definition: types.h:40

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

Locations of visitors to this page
Catalogued on GSR