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

Byte-encoded neutral gene trait (unsigned char per allele). More...

#include <ttneutralgenes.h>

+ Inheritance diagram for TTNeutralGenes_byte:
+ Collaboration diagram for TTNeutralGenes_byte:

Public Member Functions

 TTNeutralGenes_byte ()
 
 TTNeutralGenes_byte (const TTNeutralGenes_byte &T)
 
virtual ~TTNeutralGenes_byte ()
 
Accessors
void set_mut_func_ptr (void(TTNeutralGenes_byte::*theFunc)(void))
 
void set_inherit_func_ptr (void(TProtoNeutralGenes::*theFunc)(sex_t, unsigned char *, const unsigned char **))
 
void set_allele (unsigned int loc, unsigned int al, unsigned char val)
 
Mutation models
void mutate_SSM ()
 
void mutate_KAM ()
 
void mutate_2all ()
 
void mutate_NULL ()
 
Implementations
virtual TTNeutralGenesoperator= (const TTrait &T)
 
virtual void init ()
 
virtual void init_sequence ()
 
virtual void reset ()
 
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 set_sequence (void **seq)
 
virtual void inherit (const TTrait *mother, const TTrait *father)
 
virtual void mutate ()
 
virtual void show_up ()
 
virtual TTNeutralGenesclone ()
 
virtual void store_data (BinaryStorageBuffer *saver)
 
virtual bool retrieve_data (BinaryStorageBuffer *reader)
 
- Public Member Functions inherited from TTNeutralGenes
 TTNeutralGenes ()
 
 TTNeutralGenes (const TTNeutralGenes &T)
 
virtual ~TTNeutralGenes ()
 
void set_proto (TProtoNeutralGenes *proto)
 
virtual bool operator== (const TTrait &T)
 
virtual bool operator!= (const TTrait &T)
 
virtual void * set_trait (void *value)
 
virtual trait_t get_type () const
 
virtual void set_value ()
 
virtual void * getValue () const
 
- Public Member Functions inherited from TTrait
virtual ~TTrait ()
 
- Public Member Functions inherited from StorableComponent
virtual ~StorableComponent ()
 

Private Attributes

void(TTNeutralGenes_byte::* _mutate_func_ptr )(void)
 
void(TProtoNeutralGenes::* _inherit_func_ptr )(sex_t, unsigned char *, const unsigned char **)
 
unsigned char ** _sequence
 

Additional Inherited Members

- Protected Attributes inherited from TTNeutralGenes
TProtoNeutralGenes_myProto
 
const trait_t _type
 

Detailed Description

Byte-encoded neutral gene trait (unsigned char per allele).

Used for multi-allelic loci.

Constructor & Destructor Documentation

◆ TTNeutralGenes_byte() [1/2]

TTNeutralGenes_byte::TTNeutralGenes_byte ( )
inline
unsigned char ** _sequence
Definition: ttneutralgenes.h:114
void(TTNeutralGenes_byte::* _mutate_func_ptr)(void)
Definition: ttneutralgenes.h:111
void(TProtoNeutralGenes::* _inherit_func_ptr)(sex_t, unsigned char *, const unsigned char **)
Definition: ttneutralgenes.h:112
TTNeutralGenes()
Definition: ttneutralgenes.h:62

Referenced by clone().

+ Here is the caller graph for this function:

◆ TTNeutralGenes_byte() [2/2]

TTNeutralGenes_byte::TTNeutralGenes_byte ( const TTNeutralGenes_byte T)
inline

◆ ~TTNeutralGenes_byte()

TTNeutralGenes_byte::~TTNeutralGenes_byte ( )
virtual
565 {
566  if(_sequence != NULL){
567  for(unsigned int i = 0; i < _myProto->get_ploidy(); i++)
568  delete [] _sequence[i];
569  delete [] _sequence;
570  }
571 }
unsigned int get_ploidy()
Definition: ttneutralgenes.h:197
TProtoNeutralGenes * _myProto
Definition: ttneutralgenes.h:57

References TTNeutralGenes::_myProto, _sequence, and TProtoNeutralGenes::get_ploidy().

Member Function Documentation

◆ clone()

virtual TTNeutralGenes* TTNeutralGenes_byte::clone ( )
inlinevirtual

Implements TTNeutralGenes.

157 {return new TTNeutralGenes_byte(*this);}
TTNeutralGenes_byte()
Definition: ttneutralgenes.h:118

References TTNeutralGenes_byte().

◆ get_allele()

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

Implements TTNeutralGenes.

497 {
498  return ( !(loc<(int)_myProto->get_locus_num()) || !(all<(int)_myProto->get_ploidy()) ? 0 : (double)_sequence[all][loc]);
499 }
unsigned int get_locus_num()
Definition: ttneutralgenes.h:198

References TTNeutralGenes::_myProto, _sequence, TProtoNeutralGenes::get_locus_num(), and TProtoNeutralGenes::get_ploidy().

◆ get_allele_value()

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

Implements TTNeutralGenes.

504 {
505  return ( !(loc<(int)_myProto->get_locus_num()) || !(all<(int)_myProto->get_ploidy()) ? 0 : (double)_sequence[all][loc]);
506 }

References TTNeutralGenes::_myProto, _sequence, TProtoNeutralGenes::get_locus_num(), and TProtoNeutralGenes::get_ploidy().

◆ get_sequence()

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

Implements TTNeutralGenes.

149 {return (void**)_sequence;}

References _sequence.

◆ inherit()

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

Implements TTNeutralGenes.

686 {
687  const unsigned char** mother_seq = (const unsigned char**)mother->get_sequence();
688  const unsigned char** father_seq = (const unsigned char**)father->get_sequence();
689 
690  (_myProto->* _inherit_func_ptr) (FEM, _sequence[FEM], mother_seq);
691 
692  (_myProto->* _inherit_func_ptr) (MAL, _sequence[MAL], father_seq);
693 }
virtual void ** get_sequence() const =0
sequence accessor.
@ FEM
Definition: types.h:35
@ MAL
Definition: types.h:35

References _inherit_func_ptr, TTNeutralGenes::_myProto, _sequence, FEM, TTrait::get_sequence(), and MAL.

◆ init()

void TTNeutralGenes_byte::init ( )
virtual

Implements TTNeutralGenes.

576 {
577  if(_sequence != NULL)
578  fatal("TTNeutralGenes_byte::init::_sequence is not NULL !\n");
579 
580  //assume _ploidy = 2;
581 
582  _sequence = new unsigned char* [2];
583 
584  _sequence[0] = new unsigned char[_myProto->get_locus_num()];
585  _sequence[1] = new unsigned char[_myProto->get_locus_num()];
586 
587  memset(_sequence[0], 0, _myProto->get_locus_num());
588  memset(_sequence[1], 0, _myProto->get_locus_num());
589 
590 }
void fatal(const char *str,...)
Definition: output.cc:98

References TTNeutralGenes::_myProto, _sequence, fatal(), and TProtoNeutralGenes::get_locus_num().

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

+ Here is the caller graph for this function:

◆ init_sequence()

void TTNeutralGenes_byte::init_sequence ( )
virtual

Implements TTNeutralGenes.

595 {
596  if(_sequence == NULL) { //that should never happen
597  _sequence = new unsigned char* [_myProto->get_ploidy()];
598  for(unsigned int i = 0; i < _myProto->get_ploidy(); i++)
599  _sequence[i] = new unsigned char[_myProto->get_locus_num()];
600  }
601 
602  if(_myProto->get_init_model() == 1) {
603  for(unsigned int i = 0; i < _myProto->get_ploidy(); ++i)
604  for(unsigned int j = 0; j < _myProto->get_locus_num(); j++) {
605 
606  if(_myProto->get_allele_num() > 2)
607  _sequence[i][j] = (unsigned char)RAND::Uniform(_myProto->get_allele_num());
608  else
609  _sequence[i][j] = (unsigned char)RAND::Bernoulli(0.5);
610  }
611  } else if (_myProto->get_init_model() == 2 ) {
612 
613  memset(_sequence[0], 0, _myProto->get_locus_num());
614  memset(_sequence[1], 0, _myProto->get_locus_num());
615 
616  mutate(); //do one round of mutation
617 
618  } else { //model 0; all monomorphic
619 
620  memset(_sequence[0], 0, _myProto->get_locus_num());
621  memset(_sequence[1], 0, _myProto->get_locus_num());
622 
623  }
624 }
static double Bernoulli(double p)
Definition: Uniform.h:439
static double Uniform()
Generates a random number from [0.0, 1.0[ uniformly distributed.
Definition: Uniform.h:125
unsigned int get_allele_num()
Definition: ttneutralgenes.h:199
unsigned int get_init_model()
Definition: ttneutralgenes.h:203
virtual void mutate()
Definition: ttneutralgenes.h:155

References TTNeutralGenes::_myProto, _sequence, RAND::Bernoulli(), TProtoNeutralGenes::get_allele_num(), TProtoNeutralGenes::get_init_model(), TProtoNeutralGenes::get_locus_num(), TProtoNeutralGenes::get_ploidy(), mutate(), and RAND::Uniform().

◆ mutate()

virtual void TTNeutralGenes_byte::mutate ( )
inlinevirtual

Implements TTNeutralGenes.

155 {(this->*_mutate_func_ptr) ();}

References _mutate_func_ptr.

Referenced by init_sequence().

+ Here is the caller graph for this function:

◆ mutate_2all()

void TTNeutralGenes_byte::mutate_2all ( )
inline
740 {
741  unsigned int mutAll, mutLocus;
742  unsigned int NbMut = _myProto->get_num_mutations();
743 
744  for( ; NbMut > 0; NbMut--) {
745  mutLocus = RAND::Uniform( _myProto->get_locus_num());
746  mutAll = RAND::RandBool(); //RAND::Uniform( _ploidy); <--- only diploids for now
747  _sequence[mutAll][mutLocus] = !_sequence[mutAll][mutLocus];
748  }
749 }
static bool RandBool()
Returns a random boolean.
Definition: Uniform.h:170
unsigned int get_num_mutations()
Definition: ttneutralgenes.h:202

References TTNeutralGenes::_myProto, _sequence, TProtoNeutralGenes::get_locus_num(), TProtoNeutralGenes::get_num_mutations(), RAND::RandBool(), and RAND::Uniform().

Referenced by TProtoNeutralGenes::setParameters().

+ Here is the caller graph for this function:

◆ mutate_KAM()

void TTNeutralGenes_byte::mutate_KAM ( )
721 {
722  unsigned int mutAll, mutLocus;
723  unsigned char mut;
724  unsigned int NbMut = _myProto->get_num_mutations();
725 
726  for(; NbMut != 0; NbMut--) {
727  mutLocus = RAND::Uniform( _myProto->get_locus_num());
728  mutAll = RAND::RandBool(); //RAND::Uniform( _ploidy); <--- only diploids for now
729  //assign an arbitrary allele value:
730  do{
731  mut = (unsigned char) (RAND::Uniform(_myProto->get_allele_num()));
732  } while (mut == _sequence[mutAll][mutLocus]);
733  _sequence[mutAll][mutLocus] = mut;
734  }
735 }

References TTNeutralGenes::_myProto, _sequence, TProtoNeutralGenes::get_allele_num(), TProtoNeutralGenes::get_locus_num(), TProtoNeutralGenes::get_num_mutations(), RAND::RandBool(), and RAND::Uniform().

Referenced by TProtoNeutralGenes::setParameters().

+ Here is the caller graph for this function:

◆ mutate_NULL()

void TTNeutralGenes_byte::mutate_NULL ( )
inline
141 { }

Referenced by TProtoNeutralGenes::setParameters().

+ Here is the caller graph for this function:

◆ mutate_SSM()

void TTNeutralGenes_byte::mutate_SSM ( )

direction && all == 0

698 {
699  unsigned int mutAll, mutLocus;
700  bool direction;
701  unsigned int NbMut = _myProto->get_num_mutations();
702 
703  for(; NbMut != 0; NbMut--)
704  {
705  mutLocus = RAND::Uniform( _myProto->get_locus_num() );
706  mutAll = RAND::RandBool(); //RAND::Uniform( _ploidy); <--- only diploids for now
707  direction = RAND::RandBool();
708  //alleles values are from 0 to NtrlAll - 1 !!!
709  if(direction && _sequence[mutAll][mutLocus] < _myProto->get_allele_num()-1)
710  _sequence[mutAll][mutLocus] += 1; //one step to the right
711  else if(_sequence[mutAll][mutLocus] > 0) // !direction || all==_allele_num
712  _sequence[mutAll][mutLocus] -= 1; //one step to the left
713  else
714  _sequence[mutAll][mutLocus] += 1;
715  }
716 }

References TTNeutralGenes::_myProto, _sequence, TProtoNeutralGenes::get_allele_num(), TProtoNeutralGenes::get_locus_num(), TProtoNeutralGenes::get_num_mutations(), RAND::RandBool(), and RAND::Uniform().

Referenced by TProtoNeutralGenes::setParameters().

+ Here is the caller graph for this function:

◆ operator=()

TTNeutralGenes & TTNeutralGenes_byte::operator= ( const TTrait T)
virtual

Implements TTNeutralGenes.

520 {
521  const TTNeutralGenes_byte& TN = dynamic_cast<const TTNeutralGenes_byte&> (T);
522 
523  if(this != &TN) {
524 
525  reset();
526 
527  init();
528 
529  memcpy(_sequence[0], TN._sequence[0], _myProto->get_locus_num());
530  memcpy(_sequence[1], TN._sequence[1], _myProto->get_locus_num());
531 
532  }
533 
534  return *this;
535 }
Byte-encoded neutral gene trait (unsigned char per allele).
Definition: ttneutralgenes.h:109
virtual void init()
Definition: ttneutralgenes.cc:575
virtual void reset()
Definition: ttneutralgenes.cc:628

References TTNeutralGenes::_myProto, _sequence, TProtoNeutralGenes::get_locus_num(), init(), and reset().

◆ reset()

void TTNeutralGenes_byte::reset ( )
virtual

Implements TTNeutralGenes.

629 {
630  if(_sequence != NULL) {
631 
632  for(unsigned int i = 0; i < _myProto->get_ploidy(); i++) delete [] _sequence[i];
633 
634  delete [] _sequence;
635 
636  _sequence = NULL;
637  }
638 }

References TTNeutralGenes::_myProto, _sequence, and TProtoNeutralGenes::get_ploidy().

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

+ Here is the caller graph for this function:

◆ retrieve_data()

bool TTNeutralGenes_byte::retrieve_data ( BinaryStorageBuffer reader)
virtual

Implements TTNeutralGenes.

676 {
677  for(unsigned int i = 0; i < _myProto->get_locus_num(); ++i)
678  for(unsigned int j = 0; j < _myProto->get_ploidy(); ++j)
679  reader->read(&_sequence[j][i], 1);
680  return true;
681 }
void read(void *out, unsigned int nb_bytes)
Definition: binarystoragebuffer.h:219

References TTNeutralGenes::_myProto, _sequence, TProtoNeutralGenes::get_locus_num(), TProtoNeutralGenes::get_ploidy(), and BinaryStorageBuffer::read().

◆ set_allele()

void TTNeutralGenes_byte::set_allele ( unsigned int  loc,
unsigned int  al,
unsigned char  val 
)
inline
133 {_sequence[al][loc] = val;}

References _sequence.

◆ set_allele_value()

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

Implements TTNeutralGenes.

511 {
512  assert(locus < _myProto->get_locus_num() && allele < 2);
513  _sequence[allele][locus] = (unsigned char)value;
514 }

References _sequence.

◆ set_inherit_func_ptr()

void TTNeutralGenes_byte::set_inherit_func_ptr ( void(TProtoNeutralGenes::*)(sex_t, unsigned char *, const unsigned char **)  theFunc)
inline
132  {_inherit_func_ptr = theFunc;}

References _inherit_func_ptr.

Referenced by TProtoNeutralGenes::hatch().

+ Here is the caller graph for this function:

◆ set_mut_func_ptr()

void TTNeutralGenes_byte::set_mut_func_ptr ( void(TTNeutralGenes_byte::*)(void)  theFunc)
inline
130  {_mutate_func_ptr = theFunc;}

References _mutate_func_ptr.

Referenced by TProtoNeutralGenes::hatch().

+ Here is the caller graph for this function:

◆ set_sequence()

void TTNeutralGenes_byte::set_sequence ( void **  seq)
virtual

Implements TTNeutralGenes.

643 {
644  reset(); init();
645  memcpy(_sequence[0],seq[0],_myProto->get_locus_num());
646  memcpy(_sequence[1],seq[1],_myProto->get_locus_num());
647 }

References TTNeutralGenes::_myProto, _sequence, TProtoNeutralGenes::get_locus_num(), init(), and reset().

◆ show_up()

void TTNeutralGenes_byte::show_up ( )
virtual

Implements TTNeutralGenes.

652 {
653  message("\n Trait's type: ntrl\n\
654  locus: %i\n\
655  alleles: %i\n\
656  _sequence:",_myProto->get_locus_num(), _myProto->get_allele_num());
657 
658  for(unsigned int i = 0; (i < _myProto->get_locus_num() && i < 10); i++)
659  message("\n %i %i",(int)_sequence[0][i],(int)_sequence[1][i]);
660  if(_myProto->get_locus_num() > 10) message("\n ...");
661  message("\n");
662 }
void message(const char *message,...)
Definition: output.cc:38

References TTNeutralGenes::_myProto, _sequence, TProtoNeutralGenes::get_allele_num(), TProtoNeutralGenes::get_locus_num(), and message().

◆ store_data()

void TTNeutralGenes_byte::store_data ( BinaryStorageBuffer saver)
virtual

Implements TTNeutralGenes.

667 {
668  for(unsigned int i = 0; i < _myProto->get_locus_num(); ++i)
669  for(unsigned int j = 0; j < _myProto->get_ploidy(); ++j)
670  saver->store(&_sequence[j][i], 1);
671 }
void store(void *stream, unsigned int nb_bytes)
Definition: binarystoragebuffer.cc:36

References TTNeutralGenes::_myProto, _sequence, TProtoNeutralGenes::get_locus_num(), TProtoNeutralGenes::get_ploidy(), and BinaryStorageBuffer::store().

Member Data Documentation

◆ _inherit_func_ptr

void(TProtoNeutralGenes::* TTNeutralGenes_byte::_inherit_func_ptr) (sex_t, unsigned char *, const unsigned char **)
private

Referenced by inherit(), and set_inherit_func_ptr().

◆ _mutate_func_ptr

void(TTNeutralGenes_byte::* TTNeutralGenes_byte::_mutate_func_ptr) (void)
private

Referenced by mutate(), and set_mut_func_ptr().

◆ _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