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;}
120 
121  //implements StorageComponent
122  virtual void store_data (BinaryStorageBuffer* saver)
123  {
124  saver->store(&_num_locus, sizeof(int));
125  saver->store(&_isHaploid, sizeof(bool));
126  }
127  virtual bool retrieve_data (BinaryStorageBuffer* reader);
128  //implements SimComponent
129  virtual bool setParameters ( );
130  virtual void loadFileServices ( FileServices* loader );
131  virtual void loadStatServices ( StatServices* loader );
132  virtual bool resetParameterFromSource (std::string param, SimComponent* cmpt) {return false;}
134 
135 };
136 // ------------------------------------------------------------------------------
137 
138 // TT_BDMI
139 
140 // ------------------------------------------------------------------------------
141 class TT_BDMI : public TTrait {
142 
144 
146 
147  double _phenotype;
148 
149 
150 
151 
152  static unsigned int _haploGenotCoding[2][2];
153  static unsigned int _diploGenotCoding[2][2];
154 
155 public:
156  //cstor & dstor
158  : _myProto(0), _phenotype(0) {}
159 
160  TT_BDMI(const TT_BDMI& T)
161  : _myProto(T._myProto), _phenotype(0){}
162 
163  virtual ~TT_BDMI() { }
164 
167 
168  void set_proto (TProtoBDMI* proto) {_myProto = proto;}
170 
171  void set_sequence (bitstring** seq);
172 
173  //inheritance routines:
174  void inherit_haplo (const TTrait* mother, const TTrait* father);
175  void inherit_diplo (const TTrait* mother, const TTrait* father);
176 
177  //mutation routines:
178  void mutate_haplo ( );
179  void mutate_diplo ( );
180 
181  double viability_haplo ( );
182  double viability_diplo ( );
183 
184  unsigned int get_num_mut_haplo (unsigned int loc) {return _sequence[0][loc];}
185  unsigned int get_num_mut_diplo (unsigned int loc) {return _sequence[0][loc] + _sequence[1][loc];}
186 
187  const bitstring& get_bit_sequence (bool chromosome) const {return _sequence[chromosome];}
188  const bitstring* get_genome_sequence () const {return &_sequence[0];}
189 
192  virtual void init ();
193  virtual void init_sequence ();
194  virtual void reset ();
195  virtual void inherit (const TTrait* mother, const TTrait* father);
196  virtual void mutate ();
197  virtual void* set_trait (void* value) {return NULL;}
198  virtual void set_sequence (void** seq) {}
199  virtual void set_value ();
200  virtual void* getValue () const {return (void*)&_phenotype;}
201  virtual trait_t get_type () const {return _myProto->get_type();}
202  virtual void** get_sequence () const {
203  error("calling TT_BDMI::get_sequence()\n");
204  return (void**)NULL;
205  }
206  virtual double get_allele_value (int loc, int all) const;
207  virtual void set_allele_value (unsigned int locus, unsigned int allele, double value);
208  virtual void show_up ();
209 
210  virtual TT_BDMI* clone () {return new TT_BDMI(*this);}
211  virtual TT_BDMI& operator= (const TTrait&);
212  virtual bool operator== (const TTrait&);
213  virtual bool operator!= (const TTrait&);
214 
215  //implements StorableComponent:
216  virtual void store_data (BinaryStorageBuffer* saver);
217  virtual bool retrieve_data (BinaryStorageBuffer* reader);
219 
220 };
221 
222 // ------------------------------------------------------------------------------
223 
224 // TTBDMI_FH
225 
226 // ------------------------------------------------------------------------------
229 class TTBDMI_FH : public TraitFileHandler< TProtoBDMI > {
230 
231 public:
232 
234  virtual ~TTBDMI_FH ( ) { }
235 
236  void write_haplo (Patch* patch, sex_t SEX, age_idx AGE, ofstream& FH);
237  void write_diplo (Patch* patch, sex_t SEX, age_idx AGE, ofstream& FH);
238 
239  virtual void FHwrite ();
240  virtual void FHread (string& filename) {}
241 
242 };
243 
244 // ------------------------------------------------------------------------------
245 
246 // TTBDMI_SH
247 
248 // ------------------------------------------------------------------------------
252 class TTBDMI_SH : public TraitStatHandler< TProtoBDMI, TTBDMI_SH > {
253 
254  double _freq, _freqIcomp;
256 
257 public:
259  _freq(0), _freqIcomp(0), _patchFreq(0), _patchIcmp(0) {}
260 
261  virtual ~TTBDMI_SH(){if(_patchFreq)delete[]_patchFreq;if(_patchIcmp)delete[]_patchIcmp;}
262 
263  virtual bool setStatRecorders (std::string& token);
264 
265  void addStats (age_t AGE);
266  void setAdultStats () ;
267  void setOffsprgStats ();
268  void setStats (age_idx agex, void(TTBDMI_SH::* cntFunc)(Patch*,sex_t,age_idx,double**,double**));
269  void countAllele_haplo (Patch *patch, sex_t SEX, age_idx AGE, double **frqTab, double **icpTab);
270  void countAllele_diplo (Patch *patch, sex_t SEX, age_idx AGE, double **frqTab, double **icpTab);
271  double getFreq () {return _freq;}
272  double getFreqIcmp () {return _freqIcomp;}
273  double getPatchFreq (unsigned int i) {return _patchFreq[i];}
274  double getPatchIcmp (unsigned int i) {return _patchIcmp[i];}
275 
276 };
277 
278 // ------------------------------------------------------------------------------
279 
280 // LCE_Init_BDMI
281 
282 // ------------------------------------------------------------------------------
286 
288  unsigned int _nLocus;
289 
290 public:
291 
292  LCE_Init_BDMI ( );
293 
294  virtual ~LCE_Init_BDMI ( ) { }
295 
296  bool setSpatialPattern(TMatrix& freq_mat, unsigned int patchNbr);
297  bool setPatchFreq(TMatrix& freq_mat,TMatrix& pat_mat, unsigned int patchNbr);
298  void init_value(sex_t SEX, age_idx age, unsigned int size, unsigned int deme);
299 
300  //LifeCycleEvent implementation:
301  virtual void execute ();
302 
303  virtual LifeCycleEvent* clone ( ) {return new LCE_Init_BDMI();}
304 
305  virtual bool setParameters ();
306 
307  //SimComponent implementation:
308  virtual void loadFileServices ( FileServices* loader ) {}
309  virtual void loadStatServices ( StatServices* loader ) {}
310  virtual bool resetParameterFromSource (std::string param, SimComponent* cmpt) {return false;}
311  virtual age_t removeAgeClass ( ) {return 0;}
312  virtual age_t addAgeClass ( ) {return 0;}
313  virtual age_t requiredAgeClass () {return 0;}
314 };
315 
316 #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:285
virtual age_t removeAgeClass()
Definition: ttbdmi.h:311
bool setSpatialPattern(TMatrix &freq_mat, unsigned int patchNbr)
Definition: ttbdmi.cc:1084
virtual void loadFileServices(FileServices *loader)
Definition: ttbdmi.h:308
TMatrix _init_freq
Definition: ttbdmi.h:287
unsigned int _nLocus
Definition: ttbdmi.h:288
bool setPatchFreq(TMatrix &freq_mat, TMatrix &pat_mat, unsigned int patchNbr)
Definition: ttbdmi.cc:1122
virtual age_t requiredAgeClass()
Definition: ttbdmi.h:313
virtual bool setParameters()
Definition: ttbdmi.cc:1041
virtual age_t addAgeClass()
Definition: ttbdmi.h:312
void init_value(sex_t SEX, age_idx age, unsigned int size, unsigned int deme)
Definition: ttbdmi.cc:1183
virtual void loadStatServices(StatServices *loader)
Definition: ttbdmi.h:309
LCE_Init_BDMI()
Definition: ttbdmi.cc:1031
virtual ~LCE_Init_BDMI()
Definition: ttbdmi.h:294
virtual bool resetParameterFromSource(std::string param, SimComponent *cmpt)
Definition: ttbdmi.h:310
virtual LifeCycleEvent * clone()
Definition: ttbdmi.h:303
virtual void execute()
Definition: ttbdmi.cc:1156
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:281
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:369
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:288
virtual void loadStatServices(StatServices *loader)
Definition: ttbdmi.cc:224
virtual void store_data(BinaryStorageBuffer *saver)
Definition: ttbdmi.h:122
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:236
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
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:132
void inherit_low(sex_t SEX, bitstring &seq, const bitstring *parent)
Definition: ttbdmi.cc:297
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:261
void set_init_freq(double *val, unsigned int size)
Definition: ttbdmi.cc:246
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:229
void write_haplo(Patch *patch, sex_t SEX, age_idx AGE, ofstream &FH)
Definition: ttbdmi.cc:750
virtual ~TTBDMI_FH()
Definition: ttbdmi.h:234
TTBDMI_FH(TProtoBDMI *TP)
Definition: ttbdmi.h:233
virtual void FHread(string &filename)
Definition: ttbdmi.h:240
virtual void FHwrite()
Definition: ttbdmi.cc:703
void write_diplo(Patch *patch, sex_t SEX, age_idx AGE, ofstream &FH)
Definition: ttbdmi.cc:779
StatHandler for the DBMI trait.
Definition: ttbdmi.h:252
double getPatchIcmp(unsigned int i)
Definition: ttbdmi.h:274
double * _patchFreq
Definition: ttbdmi.h:255
double * _patchIcmp
Definition: ttbdmi.h:255
virtual bool setStatRecorders(std::string &token)
Definition: ttbdmi.cc:812
virtual ~TTBDMI_SH()
Definition: ttbdmi.h:261
void addStats(age_t AGE)
Definition: ttbdmi.cc:838
TTBDMI_SH(TProtoBDMI *TP)
Definition: ttbdmi.h:258
double _freq
Definition: ttbdmi.h:254
void setAdultStats()
Definition: ttbdmi.cc:863
void countAllele_haplo(Patch *patch, sex_t SEX, age_idx AGE, double **frqTab, double **icpTab)
Definition: ttbdmi.cc:976
void setStats(age_idx agex, void(TTBDMI_SH::*cntFunc)(Patch *, sex_t, age_idx, double **, double **))
Definition: ttbdmi.cc:879
void setOffsprgStats()
Definition: ttbdmi.cc:871
double getFreqIcmp()
Definition: ttbdmi.h:272
double getFreq()
Definition: ttbdmi.h:271
double getPatchFreq(unsigned int i)
Definition: ttbdmi.h:273
void countAllele_diplo(Patch *patch, sex_t SEX, age_idx AGE, double **frqTab, double **icpTab)
Definition: ttbdmi.cc:1001
double _freqIcomp
Definition: ttbdmi.h:254
TTProtoWithMap.
Definition: ttrait_with_map.h:184
Definition: ttbdmi.h:141
const bitstring * get_genome_sequence() const
Definition: ttbdmi.h:188
virtual void mutate()
Definition: ttbdmi.cc:557
virtual void set_value()
Definition: ttbdmi.cc:596
virtual double get_allele_value(int loc, int all) const
Definition: ttbdmi.cc:452
unsigned int get_num_mut_haplo(unsigned int loc)
Definition: ttbdmi.h:184
void mutate_diplo()
Definition: ttbdmi.cc:580
virtual void * getValue() const
Definition: ttbdmi.h:200
virtual void init()
Definition: ttbdmi.cc:471
virtual void reset()
Definition: ttbdmi.cc:482
virtual bool operator==(const TTrait &)
Definition: ttbdmi.cc:428
virtual void show_up()
Definition: ttbdmi.cc:637
virtual bool retrieve_data(BinaryStorageBuffer *reader)
Definition: ttbdmi.cc:678
double viability_diplo()
Definition: ttbdmi.cc:617
virtual trait_t get_type() const
Definition: ttbdmi.h:201
TT_BDMI()
Definition: ttbdmi.h:157
double viability_haplo()
Definition: ttbdmi.cc:603
virtual TT_BDMI * clone()
Definition: ttbdmi.h:210
virtual void inherit(const TTrait *mother, const TTrait *father)
Definition: ttbdmi.cc:528
virtual bool operator!=(const TTrait &)
Definition: ttbdmi.cc:442
virtual void set_sequence(void **seq)
Definition: ttbdmi.h:198
virtual void * set_trait(void *value)
Definition: ttbdmi.h:197
void set_sequence(bitstring **seq)
Definition: ttbdmi.cc:490
void inherit_haplo(const TTrait *mother, const TTrait *father)
Definition: ttbdmi.cc:546
virtual void store_data(BinaryStorageBuffer *saver)
Definition: ttbdmi.cc:662
TProtoBDMI * _myProto
Definition: ttbdmi.h:143
virtual ~TT_BDMI()
Definition: ttbdmi.h:163
static unsigned int _haploGenotCoding[2][2]
Definition: ttbdmi.h:152
void mutate_haplo()
Definition: ttbdmi.cc:564
void set_proto(TProtoBDMI *proto)
Definition: ttbdmi.h:168
double _phenotype
Definition: ttbdmi.h:147
unsigned int get_num_mut_diplo(unsigned int loc)
Definition: ttbdmi.h:185
bitstring _sequence[2]
Definition: ttbdmi.h:145
virtual void ** get_sequence() const
Definition: ttbdmi.h:202
void inherit_diplo(const TTrait *mother, const TTrait *father)
Definition: ttbdmi.cc:535
virtual void set_allele_value(unsigned int locus, unsigned int allele, double value)
Definition: ttbdmi.cc:464
virtual void init_sequence()
Definition: ttbdmi.cc:502
TT_BDMI(const TT_BDMI &T)
Definition: ttbdmi.h:160
static unsigned int _diploGenotCoding[2][2]
Definition: ttbdmi.h:153
const bitstring & get_bit_sequence(bool chromosome) const
Definition: ttbdmi.h:187
virtual TT_BDMI & operator=(const TTrait &)
Definition: ttbdmi.cc:400
Interface for all trait types, declares all basic trait operations.
Definition: ttrait.h:46
Template class for the trait's FileHandler.
Definition: filehandler.h:217
TTrait setter.
Definition: ttrait.h:125
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:77
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