Nemo  2.4.0
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:115
void(TTNeutralGenes_byte::* _mutate_func_ptr)(void)
Definition: ttneutralgenes.h:112
void(TProtoNeutralGenes::* _inherit_func_ptr)(sex_t, unsigned char *, const unsigned char **)
Definition: ttneutralgenes.h:113
TTNeutralGenes()
Definition: ttneutralgenes.h:63

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
566 {
567  if(_sequence != NULL){
568  for(unsigned int i = 0; i < _myProto->get_ploidy(); i++)
569  delete [] _sequence[i];
570  delete [] _sequence;
571  }
572 }
unsigned int get_ploidy()
Definition: ttneutralgenes.h:198
TProtoNeutralGenes * _myProto
Definition: ttneutralgenes.h:58

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

Member Function Documentation

◆ clone()

virtual TTNeutralGenes* TTNeutralGenes_byte::clone ( )
inlinevirtual

Implements TTNeutralGenes.

158 {return new TTNeutralGenes_byte(*this);}
TTNeutralGenes_byte()
Definition: ttneutralgenes.h:119

References TTNeutralGenes_byte().

◆ get_allele()

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

Implements TTNeutralGenes.

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

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.

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

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

◆ get_sequence()

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

Implements TTNeutralGenes.

150 {return (void**)_sequence;}

References _sequence.

◆ inherit()

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

Implements TTNeutralGenes.

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

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

◆ init()

void TTNeutralGenes_byte::init ( )
virtual

Implements TTNeutralGenes.

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

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.

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

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.

156 {(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
741 {
742  unsigned int mutAll, mutLocus;
743  unsigned int NbMut = _myProto->get_num_mutations();
744 
745  for( ; NbMut > 0; NbMut--) {
746  mutLocus = RAND::Uniform( _myProto->get_locus_num());
747  mutAll = RAND::RandBool(); //RAND::Uniform( _ploidy); <--- only diploids for now
748  _sequence[mutAll][mutLocus] = !_sequence[mutAll][mutLocus];
749  }
750 }
static bool RandBool()
Returns a random boolean.
Definition: Uniform.h:164
unsigned int get_num_mutations()
Definition: ttneutralgenes.h:203

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

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
142 { }

Referenced by TProtoNeutralGenes::setParameters().

+ Here is the caller graph for this function:

◆ mutate_SSM()

void TTNeutralGenes_byte::mutate_SSM ( )

direction && all == 0

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

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.

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

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

◆ reset()

void TTNeutralGenes_byte::reset ( )
virtual

Implements TTNeutralGenes.

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

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.

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

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
134 {_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.

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

References _sequence.

◆ set_inherit_func_ptr()

void TTNeutralGenes_byte::set_inherit_func_ptr ( void(TProtoNeutralGenes::*)(sex_t, unsigned char *, const unsigned char **)  theFunc)
inline
133  {_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
131  {_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.

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

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

◆ show_up()

void TTNeutralGenes_byte::show_up ( )
virtual

Implements TTNeutralGenes.

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

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.

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

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

Locations of visitors to this page
Catalogued on GSR