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

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