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

Microsatellites genome. More...

#include <ttneutralgenes.h>

+ Inheritance diagram for TTNeutralGenes:
+ Collaboration diagram for TTNeutralGenes:

Public Member Functions

 TTNeutralGenes ()
 
 TTNeutralGenes (const TTNeutralGenes &T)
 
virtual ~TTNeutralGenes ()
 
Accessors
unsigned int get_ploidy ()
 
unsigned int get_locus_num ()
 
unsigned int get_allele_num ()
 
void set_proto (TProtoNeutralGenes *proto)
 
void set_locus_num (int value)
 
void set_allele_num (int value)
 
void set_mut_rate (double value)
 
void set_2L (unsigned int val)
 
void set_recomb_rate (double value)
 
void set_mut_model (int value)
 
void set_init_model (unsigned short val)
 
void set_mut_func_ptr (void(TTNeutralGenes::*theFunc)(void))
 
void set_inherit_func_ptr (void(TProtoNeutralGenes::*theFunc)(sex_t, unsigned char *, 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 bool operator== (const TTrait &T)
 
virtual bool operator!= (const TTrait &T)
 
virtual void init ()
 
virtual void init_sequence ()
 
virtual void reset ()
 
virtual void * set_trait (void *value)
 
virtual void ** get_sequence () const
 
virtual double get_allele_value (int loc, int all)
 
virtual void set_allele_value (unsigned int locus, unsigned int allele, double value)
 
virtual void set_sequence (void **seq)
 
virtual trait_t get_type () const
 
virtual void set_value ()
 
virtual void * getValue () const
 
virtual void inherit (TTrait *mother, 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 TTrait
virtual void init ()=0
 Called to allocate the trait's genotypic sequences. More...
 
virtual void init_sequence ()=0
 Called at the start of each replicate, sets the initial genotypes. More...
 
virtual void reset ()=0
 Called at the end of each simulation/replicate, deallocates sequence memory. More...
 
virtual void inherit (TTrait *mother, TTrait *father)=0
 Inheritance procedure, creates a new trait from mother's and father's traits. More...
 
virtual void mutate ()=0
 Mutation procedure, perform mutations on the genes sequence. More...
 
virtual void * set_trait (void *value)=0
 Called to set the phenotypic to a particular value or to give context-dependant value(s) to the trait. More...
 
virtual void set_sequence (void **seq)=0
 Called to set the sequence pointer to an existing trait. More...
 
virtual double get_allele_value (int loc, int all)=0
 Called to read one allele value at a particular locus. More...
 
virtual void set_allele_value (unsigned int locus, unsigned int allele, double value)=0
 Called to change the allelic value at a particular locus. More...
 
virtual void set_value ()=0
 Tells the trait to set its phenotype from genotype, should be used instead of getValue(). More...
 
virtual void * getValue () const =0
 Genotype to phenotype mapper. More...
 
virtual trait_t get_type () const =0
 type accessor. More...
 
virtual void ** get_sequence () const =0
 sequence accessor. More...
 
virtual void show_up ()=0
 Writes some info to stdout. More...
 
virtual TTraitclone ()=0
 Returns a copy of itself. More...
 
virtual ~TTrait ()
 
- Public Member Functions inherited from StorableComponent
virtual void store_data (BinaryStorageBuffer *saver)=0
 Interface to store the component data (e.g. gene values) into a binary buffer. More...
 
virtual bool retrieve_data (BinaryStorageBuffer *reader)=0
 Interface to retrieve the same data from the binary buffer. More...
 
virtual ~StorableComponent ()
 

Private Attributes

TProtoNeutralGenes_myProto
 
unsigned int _allele_num
 
unsigned int _locus_num
 
unsigned int _ploidy
 
double _mut_rate
 
double _recomb_rate
 
unsigned int _mut_model
 
unsigned int _2L
 
unsigned short _init_model
 
void(TTNeutralGenes::* _mutate_func_ptr )(void)
 
void(TProtoNeutralGenes::* _inherit_func_ptr )(sex_t, unsigned char *, unsigned char **)
 
unsigned char ** _sequence
 
const trait_t _type
 

Detailed Description

Microsatellites genome.

Constructor & Destructor Documentation

◆ TTNeutralGenes() [1/2]

TTNeutralGenes::TTNeutralGenes ( )
inline
unsigned short _init_model
Definition: ttneutralgenes.h:65
void(TProtoNeutralGenes::* _inherit_func_ptr)(sex_t, unsigned char *, unsigned char **)
Definition: ttneutralgenes.h:67
TProtoNeutralGenes * _myProto
Definition: ttneutralgenes.h:56
unsigned int _locus_num
Definition: ttneutralgenes.h:59
void(TTNeutralGenes::* _mutate_func_ptr)(void)
Definition: ttneutralgenes.h:66
double _recomb_rate
Definition: ttneutralgenes.h:62
const trait_t _type
Definition: ttneutralgenes.h:72
unsigned int _mut_model
Definition: ttneutralgenes.h:63
unsigned int _allele_num
Definition: ttneutralgenes.h:58
double _mut_rate
Definition: ttneutralgenes.h:61
unsigned char ** _sequence
Definition: ttneutralgenes.h:70
unsigned int _ploidy
Definition: ttneutralgenes.h:60
unsigned int _2L
Definition: ttneutralgenes.h:64
#define NTRL
Definition: types.h:70

Referenced by clone().

+ Here is the caller graph for this function:

◆ TTNeutralGenes() [2/2]

◆ ~TTNeutralGenes()

TTNeutralGenes::~TTNeutralGenes ( )
virtual
528{
529 if(_sequence != NULL){
530 for(unsigned int i = 0; i < _ploidy; i++)
531 delete [] _sequence[i];
532 delete [] _sequence;
533 }
534}

References _ploidy, and _sequence.

Member Function Documentation

◆ clone()

virtual TTNeutralGenes * TTNeutralGenes::clone ( )
inlinevirtual

Implements TTrait.

140{return new TTNeutralGenes(*this);}
TTNeutralGenes()
Definition: ttneutralgenes.h:76

References TTNeutralGenes().

◆ get_allele_num()

unsigned int TTNeutralGenes::get_allele_num ( )
inline
93{return _allele_num;}

References _allele_num.

◆ get_allele_value()

virtual double TTNeutralGenes::get_allele_value ( int  loc,
int  all 
)
inlinevirtual

Implements TTrait.

130 {return ( !(loc<(int)_locus_num) || !(all<(int)_ploidy) ? 0 : (double)_sequence[all][loc]);}

References _locus_num, _ploidy, and _sequence.

◆ get_locus_num()

unsigned int TTNeutralGenes::get_locus_num ( )
inline
92{return _locus_num;}

References _locus_num.

◆ get_ploidy()

unsigned int TTNeutralGenes::get_ploidy ( )
inline
91{return _ploidy;}

References _ploidy.

◆ get_sequence()

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

Implements TTrait.

128{return (void**)_sequence;}

References _sequence.

◆ get_type()

virtual trait_t TTNeutralGenes::get_type ( ) const
inlinevirtual

Implements TTrait.

134{return _type;}

References _type.

◆ getValue()

virtual void * TTNeutralGenes::getValue ( ) const
inlinevirtual

Implements TTrait.

136{return 0;}

◆ inherit()

void TTNeutralGenes::inherit ( TTrait mother,
TTrait father 
)
virtual

Implements TTrait.

631{
632 unsigned char** mother_seq = (unsigned char**)mother->get_sequence();
633 unsigned char** father_seq = (unsigned char**)father->get_sequence();
634
635 (_myProto->* _inherit_func_ptr) (FEM, _sequence[FEM], mother_seq);
636
637 (_myProto->* _inherit_func_ptr) (MAL, _sequence[MAL], father_seq);
638}
virtual void ** get_sequence() const =0
sequence accessor.
@ FEM
Definition: types.h:37
@ MAL
Definition: types.h:37

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

◆ init()

void TTNeutralGenes::init ( )
virtual

Implements TTrait.

539{
540 if(_sequence != NULL)
541 fatal("TTNeutralGenes::init::_sequence is not NULL !\n");
542
543 //assume _ploidy = 2;
544
545 _sequence = new unsigned char* [2];
546
547 _sequence[0] = new unsigned char[_locus_num];
548 _sequence[1] = new unsigned char[_locus_num];
549
550 memset(_sequence[0], 1, _locus_num);
551 memset(_sequence[1], 1, _locus_num);
552
553}
void fatal(const char *str,...)
Definition: output.cc:96

References _locus_num, _sequence, and fatal().

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

+ Here is the caller graph for this function:

◆ init_sequence()

void TTNeutralGenes::init_sequence ( )
virtual

Implements TTrait.

558{
559 if(_sequence == NULL) { //that should never happen
560 _sequence = new unsigned char* [_ploidy];
561 for(unsigned int i = 0; i < _ploidy; i++)
562 _sequence[i] = new unsigned char[_locus_num];
563 }
564
565 if(_init_model == 1) {
566
567 for(unsigned int i = 0; i < _ploidy; ++i)
568 for(unsigned int j = 0; j < _locus_num; j++) {
569 if(_allele_num > 2)
570 _sequence[i][j] = (unsigned char)RAND::Uniform(_allele_num);
571 else
572 _sequence[i][j] = (unsigned char)RAND::Bernoulli(0.5);
573 }
574
575 } else if (_init_model == 3 ) {
576
577 memset(_sequence[0], 0, _locus_num);
578 memset(_sequence[1], 0, _locus_num);
579
580 mutate(); //do one round of mutation
581
582 } else { //model 0; all monomorphic
583
584 memset(_sequence[0], 0, _locus_num);
585 memset(_sequence[1], 0, _locus_num);
586
587 }
588}
static double Bernoulli(double p)
Definition: Uniform.h:430
static double Uniform()
Generates a random number from [0.0, 1.0[ uniformly distributed.
Definition: Uniform.h:125
virtual void mutate()
Definition: ttneutralgenes.h:138

References _allele_num, _init_model, _locus_num, _ploidy, _sequence, RAND::Bernoulli(), mutate(), and RAND::Uniform().

◆ mutate()

virtual void TTNeutralGenes::mutate ( )
inlinevirtual

Implements TTrait.

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

References _mutate_func_ptr.

Referenced by init_sequence().

+ Here is the caller graph for this function:

◆ mutate_2all()

void TTNeutralGenes::mutate_2all ( )
inline
685{
686 register unsigned int mutAll, mutLocus;
687 unsigned int NbMut = RAND::Binomial(_mut_rate, _2L);
688
689 for( ; NbMut > 0; NbMut--) {
690 mutLocus = RAND::Uniform( _locus_num);
691 mutAll = RAND::RandBool(); //RAND::Uniform( _ploidy); <--- only diploids for now
692 _sequence[mutAll][mutLocus] = !_sequence[mutAll][mutLocus];
693 }
694}
static double Binomial(double p, unsigned int n)
Definition: Uniform.h:490
static bool RandBool()
Returns a random boolean.
Definition: Uniform.h:163

References _2L, _locus_num, _mut_rate, _sequence, RAND::Binomial(), RAND::RandBool(), and RAND::Uniform().

Referenced by TProtoNeutralGenes::setParameters().

+ Here is the caller graph for this function:

◆ mutate_KAM()

void TTNeutralGenes::mutate_KAM ( )
666{
667 unsigned int mutAll, mutLocus;
668 unsigned char mut;
669 unsigned int NbMut = RAND::Binomial(_mut_rate, _2L);
670
671 for(; NbMut != 0; NbMut--) {
672 mutLocus = RAND::Uniform( _locus_num);
673 mutAll = RAND::RandBool(); //RAND::Uniform( _ploidy); <--- only diploids for now
674 //assign an arbitrary allele value:
675 do{
676 mut = (unsigned char) (RAND::Uniform(_allele_num));
677 } while (mut == _sequence[mutAll][mutLocus]);
678 _sequence[mutAll][mutLocus] = mut;
679 }
680}

References _2L, _allele_num, _locus_num, _mut_rate, _sequence, RAND::Binomial(), RAND::RandBool(), and RAND::Uniform().

Referenced by TProtoNeutralGenes::setParameters().

+ Here is the caller graph for this function:

◆ mutate_NULL()

void TTNeutralGenes::mutate_NULL ( )
inline
117{ }

Referenced by TProtoNeutralGenes::setParameters().

+ Here is the caller graph for this function:

◆ mutate_SSM()

void TTNeutralGenes::mutate_SSM ( )

direction && all == 0

643{
644 unsigned int mutAll, mutLocus;
645 bool direction;
646 unsigned int NbMut = RAND::Binomial(_mut_rate, _2L);
647
648 for(; NbMut != 0; NbMut--)
649 {
650 mutLocus = RAND::Uniform( _locus_num);
651 mutAll = RAND::RandBool(); //RAND::Uniform( _ploidy); <--- only diploids for now
652 direction = RAND::RandBool();
653 //alleles values are from 0 to NtrlAll - 1 !!!
654 if(direction && _sequence[mutAll][mutLocus] < _allele_num-1)
655 _sequence[mutAll][mutLocus] += 1; //one step to the right
656 else if(_sequence[mutAll][mutLocus] > 0) // !direction || all==_allele_num
657 _sequence[mutAll][mutLocus] -= 1; //one step to the left
658 else
659 _sequence[mutAll][mutLocus] += 1;
660 }
661}

References _2L, _allele_num, _locus_num, _mut_rate, _sequence, RAND::Binomial(), RAND::RandBool(), and RAND::Uniform().

Referenced by TProtoNeutralGenes::setParameters().

+ Here is the caller graph for this function:

◆ operator!=()

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

Implements TTrait.

518 {
519 if(!((*this) == T))
520 return true;
521 else
522 return false;
523 }

◆ operator=()

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

Implements TTrait.

478{
479 const TTNeutralGenes& TN = dynamic_cast<const TTNeutralGenes&> (T);
480
481 if(this != &TN) {
482
485 _ploidy = 2; //by default
486 _2L = TN._2L;
487
488 reset();
489
490 init();
491
492 memcpy(_sequence[0], TN._sequence[0], _locus_num);
493 memcpy(_sequence[1], TN._sequence[1], _locus_num);
494
495 }
496
497 return *this;
498}
Microsatellites genome.
Definition: ttneutralgenes.h:54
virtual void reset()
Definition: ttneutralgenes.cc:592
virtual void init()
Definition: ttneutralgenes.cc:538

References _2L, _allele_num, _locus_num, _ploidy, _sequence, init(), and reset().

◆ operator==()

bool TTNeutralGenes::operator== ( const TTrait T)
virtual

Implements TTrait.

503 {
504 if(_type.compare(T.get_type()) != 0) return false;
505 const TTNeutralGenes& TN = dynamic_cast<const TTNeutralGenes&> (T);
506
507 if(this != &TN) {
508 if(_locus_num != TN._locus_num) return false;
509 if(_allele_num != TN._allele_num) return false;
510 if(_ploidy != TN._ploidy) return false;
511 }
512 return true;
513 }
virtual trait_t get_type() const =0
type accessor.

References _allele_num, _locus_num, _ploidy, _type, and TTrait::get_type().

◆ reset()

void TTNeutralGenes::reset ( )
virtual

Implements TTrait.

593{
594 if(_sequence != NULL) {
595
596 for(unsigned int i = 0; i < _ploidy; i++) delete [] _sequence[i];
597
598 delete [] _sequence;
599
600 _sequence = NULL;
601 }
602}

References _ploidy, and _sequence.

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

+ Here is the caller graph for this function:

◆ retrieve_data()

virtual bool TTNeutralGenes::retrieve_data ( BinaryStorageBuffer reader)
inlinevirtual

Implements StorableComponent.

150 {
151 for(unsigned int i = 0; i < _locus_num; ++i)
152 for(unsigned int j = 0; j < _ploidy; ++j)
153 reader->read(&_sequence[j][i], 1);
154 return true;
155 }
void read(void *out, unsigned int nb_bytes)
Definition: binarystoragebuffer.h:162

References _locus_num, _ploidy, _sequence, and BinaryStorageBuffer::read().

◆ set_2L()

void TTNeutralGenes::set_2L ( unsigned int  val)
inline
99{_2L = val;}

References _2L.

Referenced by TProtoNeutralGenes::hatch().

+ Here is the caller graph for this function:

◆ set_allele()

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

References _sequence.

Referenced by LCE_NtrlInit::init_allele_freq().

+ Here is the caller graph for this function:

◆ set_allele_num()

void TTNeutralGenes::set_allele_num ( int  value)
inline
97{_allele_num = value;}

References _allele_num.

Referenced by TProtoNeutralGenes::hatch().

+ Here is the caller graph for this function:

◆ set_allele_value()

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

Implements TTrait.

132 {assert(locus < _locus_num && allele < 2); _sequence[allele][locus] = (unsigned char)value;}

References _locus_num, and _sequence.

◆ set_inherit_func_ptr()

void TTNeutralGenes::set_inherit_func_ptr ( void(TProtoNeutralGenes::*)(sex_t, unsigned char *, unsigned char **)  theFunc)
inline
106 {_inherit_func_ptr = theFunc;}

References _inherit_func_ptr.

Referenced by TProtoNeutralGenes::hatch().

+ Here is the caller graph for this function:

◆ set_init_model()

void TTNeutralGenes::set_init_model ( unsigned short  val)
inline
102{_init_model = val;}

References _init_model.

Referenced by TProtoNeutralGenes::hatch().

+ Here is the caller graph for this function:

◆ set_locus_num()

void TTNeutralGenes::set_locus_num ( int  value)
inline
96{_locus_num = value;}

References _locus_num.

Referenced by TProtoNeutralGenes::hatch().

+ Here is the caller graph for this function:

◆ set_mut_func_ptr()

void TTNeutralGenes::set_mut_func_ptr ( void(TTNeutralGenes::*)(void)  theFunc)
inline
104 {_mutate_func_ptr = theFunc;}

References _mutate_func_ptr.

Referenced by TProtoNeutralGenes::hatch().

+ Here is the caller graph for this function:

◆ set_mut_model()

void TTNeutralGenes::set_mut_model ( int  value)
inline
101{_mut_model = value;}

References _mut_model.

Referenced by TProtoNeutralGenes::hatch().

+ Here is the caller graph for this function:

◆ set_mut_rate()

void TTNeutralGenes::set_mut_rate ( double  value)
inline
98{_mut_rate = value;}

References _mut_rate.

Referenced by TProtoNeutralGenes::hatch().

+ Here is the caller graph for this function:

◆ set_proto()

void TTNeutralGenes::set_proto ( TProtoNeutralGenes proto)
inline
95{_myProto = proto;}

References _myProto.

Referenced by TProtoNeutralGenes::hatch().

+ Here is the caller graph for this function:

◆ set_recomb_rate()

void TTNeutralGenes::set_recomb_rate ( double  value)
inline
100{_recomb_rate = value;}

References _recomb_rate.

◆ set_sequence()

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

Implements TTrait.

607{
608 reset(); init();
609 memcpy(_sequence[0],seq[0],_locus_num);
610 memcpy(_sequence[1],seq[1],_locus_num);
611}

References _locus_num, _sequence, init(), and reset().

◆ set_trait()

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

Implements TTrait.

127{return NULL;}

◆ set_value()

virtual void TTNeutralGenes::set_value ( )
inlinevirtual

Implements TTrait.

135{ }

◆ show_up()

void TTNeutralGenes::show_up ( )
virtual

Implements TTrait.

616{
617 message("\n Trait's type: ntrl\n\
618 locus: %i\n\
619 alleles: %i\n\
620 _sequence:",_locus_num, _allele_num);
621
622 for(unsigned int i = 0; (i < _locus_num && i < 10); i++)
623 message("\n %i %i",(int)_sequence[0][i],(int)_sequence[1][i]);
624 if(_locus_num > 10) message("\n ...");
625 message("\n");
626}
void message(const char *message,...)
Definition: output.cc:40

References _allele_num, _locus_num, _sequence, and message().

◆ store_data()

virtual void TTNeutralGenes::store_data ( BinaryStorageBuffer saver)
inlinevirtual

Implements StorableComponent.

144 {
145 for(unsigned int i = 0; i < _locus_num; ++i)
146 for(unsigned int j = 0; j < _ploidy; ++j)
147 saver->store(&_sequence[j][i], 1);
148 }
void store(void *stream, unsigned int nb_bytes)
Definition: binarystoragebuffer.cc:16

References _locus_num, _ploidy, _sequence, and BinaryStorageBuffer::store().

Member Data Documentation

◆ _2L

unsigned int TTNeutralGenes::_2L
private

◆ _allele_num

unsigned int TTNeutralGenes::_allele_num
private

◆ _inherit_func_ptr

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

Referenced by inherit(), and set_inherit_func_ptr().

◆ _init_model

unsigned short TTNeutralGenes::_init_model
private

Referenced by init_sequence(), and set_init_model().

◆ _locus_num

◆ _mut_model

unsigned int TTNeutralGenes::_mut_model
private

Referenced by set_mut_model().

◆ _mut_rate

double TTNeutralGenes::_mut_rate
private

◆ _mutate_func_ptr

void(TTNeutralGenes::* TTNeutralGenes::_mutate_func_ptr) (void)
private

Referenced by mutate(), and set_mut_func_ptr().

◆ _myProto

TProtoNeutralGenes* TTNeutralGenes::_myProto
private

Referenced by inherit(), and set_proto().

◆ _ploidy

◆ _recomb_rate

double TTNeutralGenes::_recomb_rate
private

Referenced by set_recomb_rate().

◆ _sequence

◆ _type

const trait_t TTNeutralGenes::_type
private

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


The documentation for this class was generated from the following files:

Generated for Nemo v2.3.56 by  doxygen 1.9.0 -- Nemo is hosted on  Download Nemo

Locations of visitors to this page
Catalogued on GSR