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 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
167  : _myProto(0), _phenotype(0) {}
TProtoBDMI * _myProto
Definition: ttbdmi.h:152
double _phenotype
Definition: ttbdmi.h:156

Referenced by clone().

◆ TT_BDMI() [2/2]

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

◆ ~TT_BDMI()

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

Member Function Documentation

◆ clone()

virtual TT_BDMI* TT_BDMI::clone ( )
inlinevirtual

Implements TTrait.

220 {return new TT_BDMI(*this);}
TT_BDMI()
Definition: ttbdmi.h:166

References TT_BDMI().

◆ get_allele()

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

Implements TTrait.

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

References _sequence.

◆ get_allele_value()

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

Implements TTrait.

465 {
466  if(_myProto->_isHaploid)
467  return _myProto->getGenoFitnessHaplo(loc, all);
468  else
469  return _myProto->getGenoFitnessDiplo(loc, all);
470 }
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
196 {return _sequence[chromosome];}

References _sequence.

Referenced by inherit_haplo().

◆ get_genome_sequence()

const bitstring* TT_BDMI::get_genome_sequence ( ) const
inline
197 {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
194 {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
193 {return _sequence[0][loc];}

References _sequence.

Referenced by TTBDMI_SH::countAllele_haplo().

◆ get_sequence()

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

Implements TTrait.

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

References error().

◆ get_type()

virtual trait_t TT_BDMI::get_type ( ) const
inlinevirtual

Implements TTrait.

210 {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.

209 {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.

541 {
542  (this->* _myProto->_inherit_func_ptr) (mother, father);
543 }
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 
)
548 {
549  const bitstring* mother_seq = dynamic_cast<const TT_BDMI*>(mother)->get_genome_sequence();
550  const bitstring* father_seq = dynamic_cast<const TT_BDMI*>(father)->get_genome_sequence();
551 
554 }
void gamete_recombination(sex_t SEX, bitstring &seq, const bitstring *parent)
Definition: ttbdmi.cc:285
Definition: ttbdmi.h:150
const bitstring * get_genome_sequence() const
Definition: ttbdmi.h:197
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 
)
559 {
560  bitstring diplogenome[2]; //build a diploid genome; but we copy the incoming sequences, not great...
561  diplogenome[0] = dynamic_cast<const TT_BDMI*>(mother)->get_bit_sequence(0);
562  diplogenome[1] = dynamic_cast<const TT_BDMI*>(father)->get_bit_sequence(0);
563 
564  _myProto->gamete_recombination(sex_t(0), _sequence[0], &diplogenome[0]);
565 }
const bitstring & get_bit_sequence(bool chromosome) const
Definition: ttbdmi.h:196
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.

484 {
485 
487 
488  if(!_myProto->_isHaploid)
490 }
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.

515 {
516  _sequence[0].reset(_myProto->_num_locus); //sets all bits to 0
517 
518  if(!_myProto->_isHaploid){
519 
521  }
522 
523  if(_myProto->isInitSet()) {
524 
525  for(unsigned int i = 0; i < _myProto->_num_locus; i++) {
526 
527  if( RAND::Uniform() < _myProto->get_init_freq(i) )
528  _sequence[0].set(i);
529 
530  if( !_myProto->_isHaploid )
531  if ( RAND::Uniform() < _myProto->get_init_freq(i) )
532  _sequence[1].set(i);
533  }
534  }
535 
536 }
static double Uniform()
Generates a random number from [0.0, 1.0[ uniformly distributed.
Definition: Uniform.h:127
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:336

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.

570 {
571  (this->*_myProto->_mutation_func_ptr)();
572 }
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
593 {
594  unsigned int NbMut;
595 
596  NbMut = (unsigned int)RAND::Poisson(_myProto->_genomic_mut_rate);
597 
598  while(NbMut != 0) {
599 
601 
602  NbMut--;
603  }
604 }
static double Poisson(double mean)
From the Numerical Recieps.
Definition: Uniform.h:222
static bool RandBool()
Returns a random boolean.
Definition: Uniform.h:165
double _genomic_mut_rate
Definition: ttbdmi.h:58
void flip(size_t n)
Flip the bit at n.
Definition: bitstring.h:347

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
577 {
578  unsigned int NbMut;
579 
580  NbMut = (unsigned int)RAND::Poisson(_myProto->_genomic_mut_rate);
581 
582  while(NbMut != 0) {
583 
585 
586  NbMut--;
587  }
588 }

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.

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

◆ operator=()

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

Implements TTrait.

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

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.

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

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

References _sequence, and bitstring::reset().

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

◆ retrieve_data()

bool TT_BDMI::retrieve_data ( BinaryStorageBuffer reader)
virtual

Implements StorableComponent.

691 {
692  size_t wnb = _sequence[0].nb_words();
693  size_t bytes = wnb * sizeof(bitstring::_ul);
694  bitstring::_ul *srce = new bitstring::_ul [wnb];
695 
696  reader->read(srce, bytes);
697  _sequence[0].set_data(srce,wnb);
698 
699  if(!_myProto->_isHaploid){
700  reader->read(srce, bytes);
701  _sequence[1].set_data(srce,wnb);
702  }
703 
704  delete [] srce;
705 
706  return true;
707 }
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:350
size_t nb_words() const
Definition: bitstring.h:164

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.

477 {
478  _myProto->setGenoFitnessValue(locus, allele, value);
479 }
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
177 {_myProto = proto;}

References _myProto.

Referenced by TProtoBDMI::hatch().

◆ set_sequence() [1/2]

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

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.

207 {}

◆ set_trait()

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

Implements TTrait.

206 {return NULL;}

◆ set_value()

void TT_BDMI::set_value ( )
inlinevirtual

Implements TTrait.

609 {
611 }
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.

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

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.

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

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

◆ viability_diplo()

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

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

Referenced by TProtoBDMI::setParameters().

◆ viability_haplo()

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

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