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

Referenced by clone().

◆ TTNeutralGenes_byte() [2/2]

TTNeutralGenes_byte::TTNeutralGenes_byte ( const TTNeutralGenes_byte T)
inline

◆ ~TTNeutralGenes_byte()

TTNeutralGenes_byte::~TTNeutralGenes_byte ( )
virtual
569 {
570  if(_sequence != NULL){
571  for(unsigned int i = 0; i < _myProto->get_ploidy(); i++)
572  delete [] _sequence[i];
573  delete [] _sequence;
574  }
575 }
unsigned int get_ploidy()
Definition: ttneutralgenes.h:199
TProtoNeutralGenes * _myProto
Definition: ttneutralgenes.h:59

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

Member Function Documentation

◆ clone()

virtual TTNeutralGenes* TTNeutralGenes_byte::clone ( )
inlinevirtual

Implements TTNeutralGenes.

159 {return new TTNeutralGenes_byte(*this);}
TTNeutralGenes_byte()
Definition: ttneutralgenes.h:120

References TTNeutralGenes_byte().

◆ get_allele()

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

Implements TTNeutralGenes.

501 {
502  return ( !(loc<(int)_myProto->get_locus_num()) || !(all<(int)_myProto->get_ploidy()) ? 0 : (double)_sequence[all][loc]);
503 }
unsigned int get_locus_num()
Definition: ttneutralgenes.h:200

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.

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

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

◆ get_sequence()

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

Implements TTNeutralGenes.

151 {return (void**)_sequence;}

References _sequence.

◆ inherit()

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

Implements TTNeutralGenes.

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

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

◆ init()

void TTNeutralGenes_byte::init ( )
virtual

Implements TTNeutralGenes.

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

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

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

◆ init_sequence()

void TTNeutralGenes_byte::init_sequence ( )
virtual

Implements TTNeutralGenes.

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

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.

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

References _mutate_func_ptr.

Referenced by init_sequence().

◆ mutate_2all()

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

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

Referenced by TProtoNeutralGenes::setParameters().

◆ mutate_KAM()

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

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

◆ mutate_NULL()

void TTNeutralGenes_byte::mutate_NULL ( )
inline
143 { }

Referenced by TProtoNeutralGenes::setParameters().

◆ mutate_SSM()

void TTNeutralGenes_byte::mutate_SSM ( )

direction && all == 0

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

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

◆ operator=()

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

Implements TTNeutralGenes.

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

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

◆ reset()

void TTNeutralGenes_byte::reset ( )
virtual

Implements TTNeutralGenes.

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

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

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

◆ retrieve_data()

bool TTNeutralGenes_byte::retrieve_data ( BinaryStorageBuffer reader)
virtual

Implements TTNeutralGenes.

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

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

515 {
516  assert(locus < _myProto->get_locus_num() && allele < 2);
517  _sequence[allele][locus] = (unsigned char)value;
518 }

References _sequence.

◆ set_inherit_func_ptr()

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

References _inherit_func_ptr.

Referenced by TProtoNeutralGenes::hatch().

◆ set_mut_func_ptr()

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

References _mutate_func_ptr.

Referenced by TProtoNeutralGenes::hatch().

◆ set_sequence()

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

Implements TTNeutralGenes.

647 {
648  reset(); init();
649  memcpy(_sequence[0],seq[0],_myProto->get_locus_num());
650  memcpy(_sequence[1],seq[1],_myProto->get_locus_num());
651 }

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

◆ show_up()

void TTNeutralGenes_byte::show_up ( )
virtual

Implements TTNeutralGenes.

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

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.

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

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

Locations of visitors to this page
Catalogued on GSR