Nemo  2.4.0b
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 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
158  : _myProto(0), _phenotype(0) {}
TProtoBDMI * _myProto
Definition: ttbdmi.h:143
double _phenotype
Definition: ttbdmi.h:147

Referenced by clone().

◆ TT_BDMI() [2/2]

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

◆ ~TT_BDMI()

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

Member Function Documentation

◆ clone()

virtual TT_BDMI* TT_BDMI::clone ( )
inlinevirtual

Implements TTrait.

210 {return new TT_BDMI(*this);}
TT_BDMI()
Definition: ttbdmi.h:157

References TT_BDMI().

◆ get_allele_value()

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

Implements TTrait.

453 {
454  if(_myProto->_isHaploid)
455  return _myProto->getGenoFitnessHaplo(loc, all);
456  else
457  return _myProto->getGenoFitnessDiplo(loc, all);
458 }
bool _isHaploid
Definition: ttbdmi.h:54
double getGenoFitnessHaplo(unsigned int row, unsigned int pos)
Definition: ttbdmi.h:89
double getGenoFitnessDiplo(unsigned int row, unsigned int posA, unsigned int posB)
Definition: ttbdmi.h:94

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

◆ get_bit_sequence()

const bitstring& TT_BDMI::get_bit_sequence ( bool  chromosome) const
inline
187 {return _sequence[chromosome];}
bitstring _sequence[2]
Definition: ttbdmi.h:145

References _sequence.

Referenced by inherit_haplo().

◆ get_genome_sequence()

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

References _sequence.

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

◆ get_num_mut_diplo()

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

References _sequence.

Referenced by TTBDMI_SH::countAllele_diplo().

◆ get_num_mut_haplo()

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

References _sequence.

Referenced by TTBDMI_SH::countAllele_haplo().

◆ get_sequence()

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

Implements TTrait.

202  {
203  error("calling TT_BDMI::get_sequence()\n");
204  return (void**)NULL;
205  }
int error(const char *str,...)
Definition: output.cc:77

References error().

◆ get_type()

virtual trait_t TT_BDMI::get_type ( ) const
inlinevirtual

Implements TTrait.

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

References _myProto, and TProtoBDMI::get_type().

◆ getValue()

virtual void* TT_BDMI::getValue ( ) const
inlinevirtual

Implements TTrait.

200 {return (void*)&_phenotype;}

References _phenotype.

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

◆ inherit()

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

Implements TTrait.

529 {
530  (this->* _myProto->_inherit_func_ptr) (mother, father);
531 }
void(TT_BDMI::* _inherit_func_ptr)(const TTrait *, const TTrait *)
Definition: ttbdmi.h:65

References TProtoBDMI::_inherit_func_ptr, and _myProto.

◆ inherit_diplo()

void TT_BDMI::inherit_diplo ( const TTrait mother,
const TTrait father 
)
536 {
537  const bitstring* mother_seq = dynamic_cast<const TT_BDMI*>(mother)->get_genome_sequence();
538  const bitstring* father_seq = dynamic_cast<const TT_BDMI*>(father)->get_genome_sequence();
539 
542 }
void gamete_recombination(sex_t SEX, bitstring &seq, const bitstring *parent)
Definition: ttbdmi.cc:281
Definition: ttbdmi.h:141
const bitstring * get_genome_sequence() const
Definition: ttbdmi.h:188
Non-template and faster implementation of std::bitset.
Definition: bitstring.h:57
@ FEM
Definition: types.h:37
@ MAL
Definition: types.h:37

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

Referenced by TProtoBDMI::setParameters().

◆ inherit_haplo()

void TT_BDMI::inherit_haplo ( const TTrait mother,
const TTrait father 
)
547 {
548  bitstring diplogenome[2]; //build a diploid genome; but we copy the incoming sequences, not great...
549  diplogenome[0] = dynamic_cast<const TT_BDMI*>(mother)->get_bit_sequence(0);
550  diplogenome[1] = dynamic_cast<const TT_BDMI*>(father)->get_bit_sequence(0);
551 
552  _myProto->gamete_recombination(sex_t(0), _sequence[0], &diplogenome[0]);
553 }
const bitstring & get_bit_sequence(bool chromosome) const
Definition: ttbdmi.h:187
sex_t
Sex types, males are always 0 and females 1!!
Definition: types.h:36

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

Referenced by TProtoBDMI::setParameters().

◆ init()

void TT_BDMI::init ( )
virtual

Implements TTrait.

472 {
473 
475 
476  if(!_myProto->_isHaploid)
478 }
unsigned int _num_locus
Definition: ttbdmi.h:55
void reset(size_t length)
Definition: bitstring.h:140

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

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

◆ init_sequence()

void TT_BDMI::init_sequence ( )
virtual

Implements TTrait.

503 {
504  _sequence[0].reset(_myProto->_num_locus); //sets all bits to 0
505 
506  if(!_myProto->_isHaploid){
507 
509  }
510 
511  if(_myProto->isInitSet()) {
512 
513  for(unsigned int i = 0; i < _myProto->_num_locus; i++) {
514 
515  if( RAND::Uniform() < _myProto->get_init_freq(i) )
516  _sequence[0].set(i);
517 
518  if( !_myProto->_isHaploid )
519  if ( RAND::Uniform() < _myProto->get_init_freq(i) )
520  _sequence[1].set(i);
521  }
522  }
523 
524 }
static double Uniform()
Generates a random number from [0.0, 1.0[ uniformly distributed.
Definition: Uniform.h:124
double get_init_freq(unsigned int i)
Definition: ttbdmi.h:86
bool isInitSet()
Definition: ttbdmi.h:87
void set(size_t n)
Set a bit to 1.
Definition: bitstring.h:256

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().

◆ mutate()

void TT_BDMI::mutate ( )
inlinevirtual

Implements TTrait.

558 {
559  (this->*_myProto->_mutation_func_ptr)();
560 }
void(TT_BDMI::* _mutation_func_ptr)(void)
Definition: ttbdmi.h:67

References TProtoBDMI::_mutation_func_ptr, and _myProto.

◆ mutate_diplo()

void TT_BDMI::mutate_diplo ( )
inline
581 {
582  unsigned int NbMut;
583 
584  NbMut = (unsigned int)RAND::Poisson(_myProto->_genomic_mut_rate);
585 
586  while(NbMut != 0) {
587 
589 
590  NbMut--;
591  }
592 }
static double Poisson(double mean)
From the Numerical Recieps.
Definition: Uniform.h:219
static bool RandBool()
Returns a random boolean.
Definition: Uniform.h:162
double _genomic_mut_rate
Definition: ttbdmi.h:58
void flip(size_t n)
Flip the bit at n.
Definition: bitstring.h:267

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

Referenced by TProtoBDMI::setParameters().

◆ mutate_haplo()

void TT_BDMI::mutate_haplo ( )
inline
565 {
566  unsigned int NbMut;
567 
568  NbMut = (unsigned int)RAND::Poisson(_myProto->_genomic_mut_rate);
569 
570  while(NbMut != 0) {
571 
573 
574  NbMut--;
575  }
576 }

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

Referenced by TProtoBDMI::setParameters().

◆ operator!=()

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

Implements TTrait.

443 {
444  if(!((*this) == T))
445  return true;
446  else
447  return false;
448 }

◆ operator=()

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

Implements TTrait.

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

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.

429 {
430  if(_myProto->get_type().compare(T.get_type()) != 0) return false;
431 
432  const TT_BDMI& TD = dynamic_cast<const TT_BDMI&> (T);
433  if(this != &TD) {
434  if(_myProto->_num_locus != TD._myProto->_num_locus) return false;
435  if(_myProto->_isHaploid != TD._myProto->_isHaploid) return false;
436  }
437  return true;
438 }
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.

483 {
484  _sequence[0].reset();
485  _sequence[1].reset();
486 }

References _sequence, and bitstring::reset().

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

◆ retrieve_data()

bool TT_BDMI::retrieve_data ( BinaryStorageBuffer reader)
virtual

Implements StorableComponent.

679 {
680  size_t wnb = _sequence[0].nb_words();
681  size_t bytes = wnb * sizeof(bitstring::_ul);
682  bitstring::_ul *srce = new bitstring::_ul [wnb];
683 
684  reader->read(srce, bytes);
685  _sequence[0].set_data(srce,wnb);
686 
687  if(!_myProto->_isHaploid){
688  reader->read(srce, bytes);
689  _sequence[1].set_data(srce,wnb);
690  }
691 
692  delete [] srce;
693 
694  return true;
695 }
void read(void *out, unsigned int nb_bytes)
Definition: binarystoragebuffer.h:162
unsigned long _ul
Definition: bitstring.h:61
void set_data(_ul *srce, size_t nbwrd)
Copy bits from an array of unsigned long words.
Definition: bitstring.h:270
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.

465 {
466  _myProto->setGenoFitnessValue(locus, allele, value);
467 }
void setGenoFitnessValue(unsigned int row, unsigned int geno, double value)
Definition: ttbdmi.h:105

References _myProto, and TProtoBDMI::setGenoFitnessValue().

◆ set_proto()

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

References _myProto.

Referenced by TProtoBDMI::hatch().

◆ set_sequence() [1/2]

void TT_BDMI::set_sequence ( bitstring **  seq)
491 {
492  reset();
493  init();
494 
495  _sequence[0].copy(*seq[0]);
496 
497  if(!_myProto->_isHaploid) _sequence[1].copy(*seq[1]);
498 }

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.

198 {}

◆ set_trait()

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

Implements TTrait.

197 {return NULL;}

◆ set_value()

void TT_BDMI::set_value ( )
inlinevirtual

Implements TTrait.

597 {
599 }
double(TT_BDMI::* _viability_func_ptr)(void)
Definition: ttbdmi.h:68

References _myProto, _phenotype, and TProtoBDMI::_viability_func_ptr.

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

◆ show_up()

void TT_BDMI::show_up ( )
virtual

Implements TTrait.

638 {
639  set_value();
640  std::cout<<"\n Trait type: dmi"
641  <<"\n value: "<<*(double*)getValue()
642  <<"\n num loci: "<<_myProto->_num_locus
643  <<"\nfitness table: "<<endl;
645 
646  cout<<"\n sequence: "<<endl;
647  cout<<"0: ";
648  for(unsigned int i = 0; i < _myProto->_num_locus && i < 64; i++)
649  cout<<(unsigned int)_sequence[0][i];
650  cout<<endl;
651 
652  if(!_myProto->_isHaploid) {
653  cout<<"1: ";
654  for(unsigned int i = 0; i < _myProto->_num_locus && i < 64; i++)
655  cout<<(unsigned int)_sequence[1][i];
656  }
657  cout<<endl;
658 }
unsigned int _npair
Definition: ttbdmi.h:56
void showGenoTable(unsigned int nrows)
Definition: ttbdmi.cc:261
virtual void * getValue() const
Definition: ttbdmi.h:200

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.

663 {
664  size_t wnb = _sequence[0].nb_words();
665  size_t bytes = sizeof(bitstring::_ul);
666 
667  for(size_t i = 0; i < wnb; i++)
668  saver->store(_sequence[0].getword_atIdx(i), bytes);
669 
670  if(!_myProto->_isHaploid){
671  for(size_t i = 0; i < wnb; i++)
672  saver->store(_sequence[1].getword_atIdx(i), bytes);
673  }
674 }
void store(void *stream, unsigned int nb_bytes)
Definition: binarystoragebuffer.cc:16
_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
618 {
619  double viab = 1;
620 //cout << "\nTT_BDMI::viability_diplo\n";
621 // cout << " sequence[0].size(): "<<(*_sequence[0]).size()
622 // << " sequence[0].nb_words(): "<<(*_sequence[0]).nb_words()<<endl;
623 // cout << " sequence[1].size(): "<<(*_sequence[1]).size()
624 // << " sequence[1].nb_words(): "<<(*_sequence[1]).nb_words()<<endl;
625 
626  for (unsigned int pair = 0, i = 0; pair < _myProto->_npair && i < _myProto->_num_locus; ++pair) {
627  viab *= 1 + _myProto->getGenoFitnessDiplo( pair , //locus number
628  _diploGenotCoding[ _sequence[0][i] ][ _sequence[1][i] ], //first locus
629  _diploGenotCoding[ _sequence[0][i+1] ][ _sequence[1][i+1] ]); //second locus
630  i += 2;
631  }
632  return viab;
633 }
static unsigned int _diploGenotCoding[2][2]
Definition: ttbdmi.h:153

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

Referenced by TProtoBDMI::setParameters().

◆ viability_haplo()

double TT_BDMI::viability_haplo ( )
inline
604 {
605  double viab = 1;
606 
607  for (unsigned int pair = 0, i = 0; pair < _myProto->_npair && i < _myProto->_num_locus; ++pair) {
608  viab *= 1 + _myProto->getGenoFitnessHaplo( pair ,
609  _haploGenotCoding[ _sequence[0][i] ][ _sequence[0][i+1] ]);
610  i += 2;
611  }
612  return viab;
613 }
static unsigned int _haploGenotCoding[2][2]
Definition: ttbdmi.h:152

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

Referenced by TProtoBDMI::setParameters().

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.0b by  doxygen 1.9.1 -- Nemo is hosted on  Download Nemo

Locations of visitors to this page
Catalogued on GSR