Nemo  2.4.2
Simulate forward-in-time genetic evolution in a spatially explicit, individual-based stochastic simulator
TT_BDMI Class Reference

#include <ttbdmi.h>

+ Inheritance diagram for TT_BDMI:
+ Collaboration diagram for TT_BDMI:

Public Member Functions

 TT_BDMI ()
 
 TT_BDMI (const TT_BDMI &T)
 
virtual ~TT_BDMI ()
 
void set_sequence (bitstring **seq)
 
void inherit_haplo (const TTrait *mother, const TTrait *father)
 
void inherit_diplo (const TTrait *mother, const TTrait *father)
 
void mutate_haplo ()
 
void mutate_diplo ()
 
double viability_haplo ()
 
double viability_diplo ()
 
unsigned int get_num_mut_haplo (unsigned int loc)
 
unsigned int get_num_mut_diplo (unsigned int loc)
 
const bitstringget_bit_sequence (bool chromosome) const
 
const bitstringget_genome_sequence () const
 
Setters:
void set_proto (TProtoBDMI *proto)
 
Implementations
virtual void init ()
 
virtual void init_sequence ()
 
virtual void reset ()
 
virtual void inherit (const TTrait *mother, const TTrait *father)
 
virtual void mutate ()
 
virtual void * set_trait (void *value)
 
virtual void set_sequence (void **seq)
 
virtual void set_value ()
 
virtual void * getValue () const
 
virtual trait_t get_type () const
 
virtual void ** get_sequence () const
 
virtual unsigned int get_allele (int loc, int all) const
 
virtual double get_allele_value (int loc, int all) const
 
virtual void set_allele_value (unsigned int locus, unsigned int allele, double value)
 
virtual void show_up ()
 
virtual TT_BDMIclone ()
 
virtual TT_BDMIoperator= (const TTrait &)
 
virtual bool operator== (const TTrait &)
 
virtual bool operator!= (const TTrait &)
 
virtual void store_data (BinaryStorageBuffer *saver)
 
virtual bool retrieve_data (BinaryStorageBuffer *reader)
 
- Public Member Functions inherited from TTrait
virtual ~TTrait ()
 
- Public Member Functions inherited from StorableComponent
virtual ~StorableComponent ()
 

Private Attributes

TProtoBDMI_myProto
 
bitstring _sequence [2]
 
double _phenotype
 

Static Private Attributes

static unsigned int _haploGenotCoding [2][2] = {{0,1},{2,3}}
 
static unsigned int _diploGenotCoding [2][2] = {{0,1},{2,3}}
 

Constructor & Destructor Documentation

◆ TT_BDMI() [1/2]

TT_BDMI::TT_BDMI ( )
inline
165  : _myProto(0), _phenotype(0) {}
TProtoBDMI * _myProto
Definition: ttbdmi.h:150
double _phenotype
Definition: ttbdmi.h:154

Referenced by clone().

+ Here is the caller graph for this function:

◆ TT_BDMI() [2/2]

TT_BDMI::TT_BDMI ( const TT_BDMI T)
inline
168  : _myProto(T._myProto), _phenotype(0){}

◆ ~TT_BDMI()

virtual TT_BDMI::~TT_BDMI ( )
inlinevirtual
170 { }

Member Function Documentation

◆ clone()

virtual TT_BDMI* TT_BDMI::clone ( )
inlinevirtual

Implements TTrait.

218 {return new TT_BDMI(*this);}
TT_BDMI()
Definition: ttbdmi.h:164

References TT_BDMI().

◆ get_allele()

unsigned int TT_BDMI::get_allele ( int  loc,
int  all 
) const
virtual

Implements TTrait.

456 {
457  assert(loc < _myProto->get_locus_number() && all < 2);
458  return (unsigned int)_sequence[all][loc];
459 }
bitstring _sequence[2]
Definition: ttbdmi.h:152

References _sequence.

◆ get_allele_value()

double TT_BDMI::get_allele_value ( int  loc,
int  all 
) const
virtual

Implements TTrait.

464 {
465  if(_myProto->_isHaploid)
466  return _myProto->getGenoFitnessHaplo(loc, all);
467  else
468  return _myProto->getGenoFitnessDiplo(loc, all);
469 }
bool _isHaploid
Definition: ttbdmi.h:52
double getGenoFitnessHaplo(unsigned int row, unsigned int pos)
Definition: ttbdmi.h:87
double getGenoFitnessDiplo(unsigned int row, unsigned int posA, unsigned int posB)
Definition: ttbdmi.h:92

References TProtoBDMI::_isHaploid, _myProto, TProtoBDMI::getGenoFitnessDiplo(), and TProtoBDMI::getGenoFitnessHaplo().

◆ get_bit_sequence()

const bitstring& TT_BDMI::get_bit_sequence ( bool  chromosome) const
inline
194 {return _sequence[chromosome];}

References _sequence.

Referenced by inherit_haplo().

+ Here is the caller graph for this function:

◆ get_genome_sequence()

const bitstring* TT_BDMI::get_genome_sequence ( ) const
inline
195 {return &_sequence[0];}

References _sequence.

Referenced by inherit_diplo(), TTBDMI_FH::write_diplo(), and TTBDMI_FH::write_haplo().

+ Here is the caller graph for this function:

◆ get_num_mut_diplo()

unsigned int TT_BDMI::get_num_mut_diplo ( unsigned int  loc)
inline
192 {return _sequence[0][loc] + _sequence[1][loc];}

References _sequence.

Referenced by TTBDMI_SH::countAllele_diplo().

+ Here is the caller graph for this function:

◆ get_num_mut_haplo()

unsigned int TT_BDMI::get_num_mut_haplo ( unsigned int  loc)
inline
191 {return _sequence[0][loc];}

References _sequence.

Referenced by TTBDMI_SH::countAllele_haplo().

+ Here is the caller graph for this function:

◆ get_sequence()

virtual void** TT_BDMI::get_sequence ( ) const
inlinevirtual

Implements TTrait.

209  {
210  error("calling TT_BDMI::get_sequence()\n");
211  return (void**)NULL;
212  }
int error(const char *str,...)
Definition: output.cc:77

References error().

◆ get_type()

virtual trait_t TT_BDMI::get_type ( ) const
inlinevirtual

Implements TTrait.

208 {return _myProto->get_type();}
virtual trait_t get_type() const
Definition: ttbdmi.h:117

References _myProto, and TProtoBDMI::get_type().

◆ getValue()

virtual void* TT_BDMI::getValue ( ) const
inlinevirtual

Implements TTrait.

207 {return (void*)&_phenotype;}

References _phenotype.

Referenced by show_up(), TTBDMI_FH::write_diplo(), and TTBDMI_FH::write_haplo().

+ Here is the caller graph for this function:

◆ inherit()

void TT_BDMI::inherit ( const TTrait mother,
const TTrait father 
)
virtual

Implements TTrait.

540 {
541  (this->* _myProto->_inherit_func_ptr) (mother, father);
542 }
void(TT_BDMI::* _inherit_func_ptr)(const TTrait *, const TTrait *)
Definition: ttbdmi.h:63

References TProtoBDMI::_inherit_func_ptr, and _myProto.

◆ inherit_diplo()

void TT_BDMI::inherit_diplo ( const TTrait mother,
const TTrait father 
)
547 {
548  const bitstring* mother_seq = dynamic_cast<const TT_BDMI*>(mother)->get_genome_sequence();
549  const bitstring* father_seq = dynamic_cast<const TT_BDMI*>(father)->get_genome_sequence();
550 
553 }
void gamete_recombination(sex_t SEX, bitstring &seq, const bitstring *parent)
Definition: ttbdmi.cc:284
Definition: ttbdmi.h:148
const bitstring * get_genome_sequence() const
Definition: ttbdmi.h:195
Non-template and faster implementation of std::bitset.
Definition: bitstring.h:53
@ FEM
Definition: types.h:35
@ MAL
Definition: types.h:35

References _myProto, _sequence, FEM, TProtoBDMI::gamete_recombination(), get_genome_sequence(), and MAL.

Referenced by TProtoBDMI::setParameters().

+ Here is the caller graph for this function:

◆ inherit_haplo()

void TT_BDMI::inherit_haplo ( const TTrait mother,
const TTrait father 
)
558 {
559  bitstring diplogenome[2]; //build a diploid genome; but we copy the incoming sequences, not great...
560  diplogenome[0] = dynamic_cast<const TT_BDMI*>(mother)->get_bit_sequence(0);
561  diplogenome[1] = dynamic_cast<const TT_BDMI*>(father)->get_bit_sequence(0);
562 
563  _myProto->gamete_recombination(sex_t(0), _sequence[0], &diplogenome[0]);
564 }
const bitstring & get_bit_sequence(bool chromosome) const
Definition: ttbdmi.h:194
sex_t
Sex types, males are always 0 and females 1!!
Definition: types.h:34

References _myProto, _sequence, TProtoBDMI::gamete_recombination(), and get_bit_sequence().

Referenced by TProtoBDMI::setParameters().

+ Here is the caller graph for this function:

◆ init()

void TT_BDMI::init ( )
virtual

Implements TTrait.

483 {
484 
486 
487  if(!_myProto->_isHaploid)
489 }
unsigned int _num_locus
Definition: ttbdmi.h:53
void reset(size_t length)
Definition: bitstring.h:136

References TProtoBDMI::_isHaploid, _myProto, TProtoBDMI::_num_locus, _sequence, and bitstring::reset().

Referenced by operator=(), and set_sequence().

+ Here is the caller graph for this function:

◆ init_sequence()

void TT_BDMI::init_sequence ( )
virtual

Implements TTrait.

514 {
515  _sequence[0].reset(_myProto->_num_locus); //sets all bits to 0
516 
517  if(!_myProto->_isHaploid){
518 
520  }
521 
522  if(_myProto->isInitSet()) {
523 
524  for(unsigned int i = 0; i < _myProto->_num_locus; i++) {
525 
526  if( RAND::Uniform() < _myProto->get_init_freq(i) )
527  _sequence[0].set(i);
528 
529  if( !_myProto->_isHaploid )
530  if ( RAND::Uniform() < _myProto->get_init_freq(i) )
531  _sequence[1].set(i);
532  }
533  }
534 
535 }
static double Uniform()
Generates a random number from [0.0, 1.0[ uniformly distributed.
Definition: Uniform.h:125
double get_init_freq(unsigned int i)
Definition: ttbdmi.h:84
bool isInitSet()
Definition: ttbdmi.h:85
void set(size_t n)
Set a bit to 1.
Definition: bitstring.h:332

References TProtoBDMI::_isHaploid, _myProto, TProtoBDMI::_num_locus, _sequence, TProtoBDMI::get_init_freq(), TProtoBDMI::isInitSet(), bitstring::reset(), bitstring::set(), and RAND::Uniform().

Referenced by LCE_Init_BDMI::init_value().

+ Here is the caller graph for this function:

◆ mutate()

void TT_BDMI::mutate ( )
inlinevirtual

Implements TTrait.

569 {
570  (this->*_myProto->_mutation_func_ptr)();
571 }
void(TT_BDMI::* _mutation_func_ptr)(void)
Definition: ttbdmi.h:65

References TProtoBDMI::_mutation_func_ptr, and _myProto.

◆ mutate_diplo()

void TT_BDMI::mutate_diplo ( )
inline
592 {
593  unsigned int NbMut;
594 
595  NbMut = (unsigned int)RAND::Poisson(_myProto->_genomic_mut_rate);
596 
597  while(NbMut != 0) {
598 
600 
601  NbMut--;
602  }
603 }
static double Poisson(double mean)
From the Numerical Recieps.
Definition: Uniform.h:229
static bool RandBool()
Returns a random boolean.
Definition: Uniform.h:170
double _genomic_mut_rate
Definition: ttbdmi.h:56
void flip(size_t n)
Flip the bit at n.
Definition: bitstring.h:343

References TProtoBDMI::_genomic_mut_rate, _myProto, TProtoBDMI::_num_locus, _sequence, bitstring::flip(), RAND::Poisson(), RAND::RandBool(), and RAND::Uniform().

Referenced by TProtoBDMI::setParameters().

+ Here is the caller graph for this function:

◆ mutate_haplo()

void TT_BDMI::mutate_haplo ( )
inline
576 {
577  unsigned int NbMut;
578 
579  NbMut = (unsigned int)RAND::Poisson(_myProto->_genomic_mut_rate);
580 
581  while(NbMut != 0) {
582 
584 
585  NbMut--;
586  }
587 }

References TProtoBDMI::_genomic_mut_rate, _myProto, TProtoBDMI::_num_locus, _sequence, bitstring::flip(), RAND::Poisson(), and RAND::Uniform().

Referenced by TProtoBDMI::setParameters().

+ Here is the caller graph for this function:

◆ operator!=()

bool TT_BDMI::operator!= ( const TTrait T)
virtual

Implements TTrait.

446 {
447  if(!((*this) == T))
448  return true;
449  else
450  return false;
451 }

◆ operator=()

TT_BDMI & TT_BDMI::operator= ( const TTrait T)
virtual

Implements TTrait.

404 {
405  const TT_BDMI& TD = dynamic_cast<const TT_BDMI&> (T);
406  if(this != &TD) {
407 
409 // _mut_rate = TD._mut_rate;
410 // _recomb_rate = TD._recomb_rate;
411 // _genomic_mut_rate = TD._genomic_mut_rate;
413 // _inherit_func_ptr = TD._inherit_func_ptr;
414 // _mutation_func_ptr = TD._mutation_func_ptr;
415 // _viability_func_ptr = TD._viability_func_ptr;
416  //deallocate any previous _sequence memory:
417  reset();
418  //allocate _sequence memory:
419  init();
420  //copy _sequence:
421  _sequence[0].copy(TD._sequence[0]);
422  if(!_myProto->_isHaploid) _sequence[1].copy(TD._sequence[1]);
423 
424  set_value();
425  }
426  return *this;
427 }
virtual void set_value()
Definition: ttbdmi.cc:607
virtual void init()
Definition: ttbdmi.cc:482
virtual void reset()
Definition: ttbdmi.cc:493
void copy(const bitstring &b)
Unchecked copy, assumes we have sames sizes.
Definition: bitstring.h:357

References TProtoBDMI::_isHaploid, _myProto, TProtoBDMI::_num_locus, _sequence, bitstring::copy(), init(), reset(), and set_value().

◆ operator==()

bool TT_BDMI::operator== ( const TTrait T)
virtual

Implements TTrait.

432 {
433  if(_myProto->get_type().compare(T.get_type()) != 0) return false;
434 
435  const TT_BDMI& TD = dynamic_cast<const TT_BDMI&> (T);
436  if(this != &TD) {
437  if(_myProto->_num_locus != TD._myProto->_num_locus) return false;
438  if(_myProto->_isHaploid != TD._myProto->_isHaploid) return false;
439  }
440  return true;
441 }
virtual trait_t get_type() const =0
type accessor.

References TProtoBDMI::_isHaploid, _myProto, TProtoBDMI::_num_locus, TProtoBDMI::get_type(), and TTrait::get_type().

◆ reset()

void TT_BDMI::reset ( )
virtual

Implements TTrait.

494 {
495  _sequence[0].reset();
496  _sequence[1].reset();
497 }

References _sequence, and bitstring::reset().

Referenced by operator=(), and set_sequence().

+ Here is the caller graph for this function:

◆ retrieve_data()

bool TT_BDMI::retrieve_data ( BinaryStorageBuffer reader)
virtual

Implements StorableComponent.

690 {
691  size_t wnb = _sequence[0].nb_words();
692  size_t bytes = wnb * sizeof(bitstring::_ul);
693  bitstring::_ul *srce = new bitstring::_ul [wnb];
694 
695  reader->read(srce, bytes);
696  _sequence[0].set_data(srce,wnb);
697 
698  if(!_myProto->_isHaploid){
699  reader->read(srce, bytes);
700  _sequence[1].set_data(srce,wnb);
701  }
702 
703  delete [] srce;
704 
705  return true;
706 }
void read(void *out, unsigned int nb_bytes)
Definition: binarystoragebuffer.h:219
unsigned long _ul
Definition: bitstring.h:57
void set_data(_ul *srce, size_t nbwrd)
Copy bits from an array of unsigned long words.
Definition: bitstring.h:346
size_t nb_words() const
Definition: bitstring.h:160

References TProtoBDMI::_isHaploid, _myProto, _sequence, bitstring::nb_words(), BinaryStorageBuffer::read(), and bitstring::set_data().

◆ set_allele_value()

void TT_BDMI::set_allele_value ( unsigned int  locus,
unsigned int  allele,
double  value 
)
virtual

Implements TTrait.

476 {
477  _myProto->setGenoFitnessValue(locus, allele, value);
478 }
void setGenoFitnessValue(unsigned int row, unsigned int geno, double value)
Definition: ttbdmi.h:103

References _myProto, and TProtoBDMI::setGenoFitnessValue().

◆ set_proto()

void TT_BDMI::set_proto ( TProtoBDMI proto)
inline
175 {_myProto = proto;}

References _myProto.

Referenced by TProtoBDMI::hatch().

+ Here is the caller graph for this function:

◆ set_sequence() [1/2]

void TT_BDMI::set_sequence ( bitstring **  seq)
502 {
503  reset();
504  init();
505 
506  _sequence[0].copy(*seq[0]);
507 
508  if(!_myProto->_isHaploid) _sequence[1].copy(*seq[1]);
509 }

References TProtoBDMI::_isHaploid, _myProto, _sequence, bitstring::copy(), init(), and reset().

◆ set_sequence() [2/2]

virtual void TT_BDMI::set_sequence ( void **  seq)
inlinevirtual

Implements TTrait.

205 {}

◆ set_trait()

virtual void* TT_BDMI::set_trait ( void *  value)
inlinevirtual

Implements TTrait.

204 {return NULL;}

◆ set_value()

void TT_BDMI::set_value ( )
inlinevirtual

Implements TTrait.

608 {
610 }
double(TT_BDMI::* _viability_func_ptr)(void)
Definition: ttbdmi.h:66

References _myProto, _phenotype, and TProtoBDMI::_viability_func_ptr.

Referenced by LCE_Init_BDMI::init_value(), operator=(), and show_up().

+ Here is the caller graph for this function:

◆ show_up()

void TT_BDMI::show_up ( )
virtual

Implements TTrait.

649 {
650  set_value();
651  std::cout<<"\n Trait type: dmi"
652  <<"\n value: "<<*(double*)getValue()
653  <<"\n num loci: "<<_myProto->_num_locus
654  <<"\nfitness table: "<<endl;
656 
657  cout<<"\n sequence: "<<endl;
658  cout<<"0: ";
659  for(unsigned int i = 0; i < _myProto->_num_locus && i < 64; i++)
660  cout<<(unsigned int)_sequence[0][i];
661  cout<<endl;
662 
663  if(!_myProto->_isHaploid) {
664  cout<<"1: ";
665  for(unsigned int i = 0; i < _myProto->_num_locus && i < 64; i++)
666  cout<<(unsigned int)_sequence[1][i];
667  }
668  cout<<endl;
669 }
unsigned int _npair
Definition: ttbdmi.h:54
void showGenoTable(unsigned int nrows)
Definition: ttbdmi.cc:264
virtual void * getValue() const
Definition: ttbdmi.h:207

References TProtoBDMI::_isHaploid, _myProto, TProtoBDMI::_npair, TProtoBDMI::_num_locus, _sequence, getValue(), set_value(), and TProtoBDMI::showGenoTable().

◆ store_data()

void TT_BDMI::store_data ( BinaryStorageBuffer saver)
virtual

Implements StorableComponent.

674 {
675  size_t wnb = _sequence[0].nb_words();
676  size_t bytes = sizeof(bitstring::_ul);
677 
678  for(size_t i = 0; i < wnb; i++)
679  saver->store(_sequence[0].getword_atIdx(i), bytes);
680 
681  if(!_myProto->_isHaploid){
682  for(size_t i = 0; i < wnb; i++)
683  saver->store(_sequence[1].getword_atIdx(i), bytes);
684  }
685 }
void store(void *stream, unsigned int nb_bytes)
Definition: binarystoragebuffer.cc:36
_ul * getword_atIdx(size_t index) const
Definition: bitstring.h:155

References TProtoBDMI::_isHaploid, _myProto, _sequence, bitstring::getword_atIdx(), bitstring::nb_words(), and BinaryStorageBuffer::store().

◆ viability_diplo()

double TT_BDMI::viability_diplo ( )
inline
629 {
630  double viab = 1;
631 //cout << "\nTT_BDMI::viability_diplo\n";
632 // cout << " sequence[0].size(): "<<(*_sequence[0]).size()
633 // << " sequence[0].nb_words(): "<<(*_sequence[0]).nb_words()<<endl;
634 // cout << " sequence[1].size(): "<<(*_sequence[1]).size()
635 // << " sequence[1].nb_words(): "<<(*_sequence[1]).nb_words()<<endl;
636 
637  for (unsigned int pair = 0, i = 0; pair < _myProto->_npair && i < _myProto->_num_locus; ++pair) {
638  viab *= 1 + _myProto->getGenoFitnessDiplo( pair , //locus number
639  _diploGenotCoding[ _sequence[0][i] ][ _sequence[1][i] ], //first locus
640  _diploGenotCoding[ _sequence[0][i+1] ][ _sequence[1][i+1] ]); //second locus
641  i += 2;
642  }
643  return viab;
644 }
static unsigned int _diploGenotCoding[2][2]
Definition: ttbdmi.h:160

References _diploGenotCoding, _myProto, TProtoBDMI::_npair, TProtoBDMI::_num_locus, _sequence, and TProtoBDMI::getGenoFitnessDiplo().

Referenced by TProtoBDMI::setParameters().

+ Here is the caller graph for this function:

◆ viability_haplo()

double TT_BDMI::viability_haplo ( )
inline
615 {
616  double viab = 1;
617 
618  for (unsigned int pair = 0, i = 0; pair < _myProto->_npair && i < _myProto->_num_locus; ++pair) {
619  viab *= 1 + _myProto->getGenoFitnessHaplo( pair ,
620  _haploGenotCoding[ _sequence[0][i] ][ _sequence[0][i+1] ]);
621  i += 2;
622  }
623  return viab;
624 }
static unsigned int _haploGenotCoding[2][2]
Definition: ttbdmi.h:159

References _haploGenotCoding, _myProto, TProtoBDMI::_npair, TProtoBDMI::_num_locus, _sequence, and TProtoBDMI::getGenoFitnessHaplo().

Referenced by TProtoBDMI::setParameters().

+ Here is the caller graph for this function:

Member Data Documentation

◆ _diploGenotCoding

unsigned int TT_BDMI::_diploGenotCoding = {{0,1},{2,3}}
staticprivate

Referenced by viability_diplo().

◆ _haploGenotCoding

unsigned int TT_BDMI::_haploGenotCoding = {{0,1},{2,3}}
staticprivate

Referenced by viability_haplo().

◆ _myProto

◆ _phenotype

double TT_BDMI::_phenotype
private

Referenced by getValue(), and set_value().

◆ _sequence


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

Generated for Nemo v2.4.2 by  doxygen 1.9.1

Catalogued on GSR