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

Generated for Nemo v2.4.2 by  doxygen 1.9.1

Catalogued on GSR