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

TTNeutralGenes_bitstring : diallelic neutral loci encoded as bitstrings. More...

#include <ttneutralgenes_bitstring.h>

+ Inheritance diagram for TTNeutralGenes_bitstring:
+ Collaboration diagram for TTNeutralGenes_bitstring:

Public Member Functions

 TTNeutralGenes_bitstring ()
 
 TTNeutralGenes_bitstring (const TTNeutralGenes_bitstring &T)
 
virtual ~TTNeutralGenes_bitstring ()
 
const bitstringget_bit_sequence (bool chromosome) const
 
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 ()
 

Protected Attributes

bitstring_sequence
 
bool _free_recombination
 
- Protected Attributes inherited from TTNeutralGenes
TProtoNeutralGenes_myProto
 
const trait_t _type
 

Private Member Functions

void inherit_low (sex_t SEX, const TTNeutralGenes_bitstring *parent)
 

Detailed Description

TTNeutralGenes_bitstring : diallelic neutral loci encoded as bitstrings.

Constructor & Destructor Documentation

◆ TTNeutralGenes_bitstring() [1/2]

TTNeutralGenes_bitstring::TTNeutralGenes_bitstring ( )
inline
bitstring * _sequence
Definition: ttneutralgenes_bitstring.h:83
bool _free_recombination
Definition: ttneutralgenes_bitstring.h:84
TTNeutralGenes()
Definition: ttneutralgenes.h:62

Referenced by clone().

+ Here is the caller graph for this function:

◆ TTNeutralGenes_bitstring() [2/2]

TTNeutralGenes_bitstring::TTNeutralGenes_bitstring ( const TTNeutralGenes_bitstring T)
inline

◆ ~TTNeutralGenes_bitstring()

virtual TTNeutralGenes_bitstring::~TTNeutralGenes_bitstring ( )
inlinevirtual
48 { reset(); }
virtual void reset()
Definition: ttneutralgenes_bitstring.cc:84

References reset().

Member Function Documentation

◆ clone()

virtual TTNeutralGenes* TTNeutralGenes_bitstring::clone ( )
inlinevirtual

Implements TTNeutralGenes.

70 { return new TTNeutralGenes_bitstring(*this); }
TTNeutralGenes_bitstring()
Definition: ttneutralgenes_bitstring.h:42

References TTNeutralGenes_bitstring().

◆ get_allele()

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

Implements TTNeutralGenes.

114 {
115  return (unsigned int)_sequence[all][loc];
116 }

◆ get_allele_value()

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

Implements TTNeutralGenes.

121 {
122  return (double)_sequence[all][loc];
123 }

◆ get_bit_sequence()

const bitstring& TTNeutralGenes_bitstring::get_bit_sequence ( bool  chromosome) const
inline

◆ get_sequence()

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

Implements TTNeutralGenes.

59  {
60  error("calling TTNeutralGenes_bitstring::get_sequence()\n");
61  return (void**)NULL;
62  }
int error(const char *str,...)
Definition: output.cc:77

References error().

◆ inherit()

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

Implements TTNeutralGenes.

153 {
154  const TTNeutralGenes_bitstring* mom = dynamic_cast<const TTNeutralGenes_bitstring*>(mother);
155  const TTNeutralGenes_bitstring* dad = dynamic_cast<const TTNeutralGenes_bitstring*>(father);
156 
157  if (_free_recombination) {
158 
159  // Word-level random recombination: for each 64-bit word, generate a random mask
160  // offspring = (parent_chrom_a & mask) | (parent_chrom_b & ~mask)
161  size_t nwords = mom->_sequence[0].nb_words();
162 
163  // Mother -> offspring[FEM]
164  unsigned int mom_first = RAND::RandBool();
165  const bitstring& mom_seq0 = mom->get_bit_sequence(mom_first);
166  const bitstring& mom_seq1 = mom->get_bit_sequence(!mom_first);
167 
168  for (size_t w = 0; w < nwords; w++) {
170  bitstring::_ul result = (*mom_seq0.getword_atIdx(w) & mask) |
171  (*mom_seq1.getword_atIdx(w) & ~mask);
172  *_sequence[FEM].getword_atIdx(w) = result;
173  }
174 
175  // Father -> offspring[MAL]
176  unsigned int dad_first = RAND::RandBool();
177  const bitstring& dad_seq0 = dad->get_bit_sequence(dad_first);
178  const bitstring& dad_seq1 = dad->get_bit_sequence(!dad_first);
179 
180  for (size_t w = 0; w < nwords; w++) {
182  bitstring::_ul result = (*dad_seq0.getword_atIdx(w) & mask) |
183  (*dad_seq1.getword_atIdx(w) & ~mask);
184  *_sequence[MAL].getword_atIdx(w) = result;
185  }
186 
187  } else {
188 
189  // Low recombination: use crossover table from genetic map
190  // Mother -> offspring[FEM]
191  inherit_low(FEM, mom);
192  // Father -> offspring[MAL]
193  inherit_low(MAL, dad);
194 
195  }
196 }
static unsigned long RandULong()
Return a random unsigned long, from uniform distribution.
Definition: Uniform.h:200
static bool RandBool()
Returns a random boolean.
Definition: Uniform.h:170
TTNeutralGenes_bitstring : diallelic neutral loci encoded as bitstrings.
Definition: ttneutralgenes_bitstring.h:38
const bitstring & get_bit_sequence(bool chromosome) const
Definition: ttneutralgenes_bitstring.h:50
void inherit_low(sex_t SEX, const TTNeutralGenes_bitstring *parent)
Definition: ttneutralgenes_bitstring.cc:200
Non-template and faster implementation of std::bitset.
Definition: bitstring.h:53
unsigned long _ul
Definition: bitstring.h:57
_ul * getword_atIdx(size_t index) const
Definition: bitstring.h:155
size_t nb_words() const
Definition: bitstring.h:160
@ FEM
Definition: types.h:35
@ MAL
Definition: types.h:35

References _sequence, FEM, get_bit_sequence(), bitstring::getword_atIdx(), MAL, bitstring::nb_words(), RAND::RandBool(), and RAND::RandULong().

◆ inherit_low()

void TTNeutralGenes_bitstring::inherit_low ( sex_t  SEX,
const TTNeutralGenes_bitstring parent 
)
private
201 {
202  vector< pair<unsigned int, unsigned int> > recTable =
204 
205  unsigned int prevLoc = 0;
206 
207 #ifdef _REC_DEBUG_
208  //number of x-overs
209  unsigned int nbRec = recTable.size();
210  cout << "TTNeutralGenes_bitstring::inherit_low; nb Rec = "<<nbRec - 1<<endl;
211  cout << " --sex = "<<SEX<<"\n";
212 #endif
213 
214  vector< pair<unsigned int, unsigned int> >::const_iterator xover = recTable.begin();
215 
216  while(xover != recTable.end()) {
217 
218 
219  if(xover->first > prevLoc) {
220 
221 #ifdef _REC_DEBUG_
222  cout<< " copy seq from "<<prevLoc<<" to "<<xover->first
223  <<" ("<<(xover->first - prevLoc)<<" loc) on side "<<xover->second<<std::endl;
224 #endif
225 
226  const bitstring& orig = parent->get_bit_sequence((bool)xover->second);
227  _sequence[SEX].copy(orig, prevLoc, xover->first);
228  }
229 
230  prevLoc = xover->first;
231  xover++;
232  }
233 }
vector< pair< unsigned int, unsigned int > > reduceJunctions(sex_t SEX, unsigned int trait_idx)
Remove multiple x-over at the same locus when traits differ in number of loci.
Definition: ttrait_with_map.cc:1312
TProtoNeutralGenes * _myProto
Definition: ttneutralgenes.h:57
static GeneticMap & getGeneticMapRef()
Definition: ttrait_with_map.h:254
unsigned int getMapIndex()
Definition: ttrait_with_map.h:252
void copy(const bitstring &b)
Unchecked copy, assumes we have sames sizes.
Definition: bitstring.h:357

References bitstring::copy(), get_bit_sequence(), TTProtoWithMap::getGeneticMapRef(), and GeneticMap::reduceJunctions().

◆ init()

void TTNeutralGenes_bitstring::init ( )
virtual

Implements TTNeutralGenes.

38 {
39  if(_sequence != NULL)
40  fatal("TTNeutralGenes_bitstring::init::_sequence is not NULL !\n");
41 
42  _sequence = new bitstring[2];
45 
47 }
unsigned int get_locus_num()
Definition: ttneutralgenes.h:198
double getRecombRate() const
Definition: ttrait_with_map.h:256
void reset(size_t length)
Definition: bitstring.h:136
void fatal(const char *str,...)
Definition: output.cc:98

References fatal(), and bitstring::reset().

◆ init_sequence()

void TTNeutralGenes_bitstring::init_sequence ( )
virtual

Implements TTNeutralGenes.

52 {
53  if(_sequence == NULL) {
54  _sequence = new bitstring[2];
57  }
58 
59  unsigned int nloc = _myProto->get_locus_num();
60 
61  if(_myProto->get_init_model() == 1) {
62 
63  for(unsigned int i = 0; i < nloc; ++i) {
64  _sequence[0][i] = RAND::RandBool();
65  _sequence[1][i] = RAND::RandBool();
66  }
67 
68  } else if (_myProto->get_init_model() == 2) {
69 
70  _sequence[0].reset();
71  _sequence[1].reset();
72  mutate();
73 
74  } else { // model 0: all monomorphic
75 
76  _sequence[0].reset();
77  _sequence[1].reset();
78 
79  }
80 }
unsigned int get_init_model()
Definition: ttneutralgenes.h:203
virtual void mutate()
Definition: ttneutralgenes_bitstring.cc:141

References RAND::RandBool(), and bitstring::reset().

◆ mutate()

void TTNeutralGenes_bitstring::mutate ( )
virtual

Implements TTNeutralGenes.

142 {
143  unsigned int NbMut = _myProto->get_num_mutations();
144 
145  for( ; NbMut > 0; NbMut--) {
147  }
148 }
static double Uniform()
Generates a random number from [0.0, 1.0[ uniformly distributed.
Definition: Uniform.h:125
unsigned int get_num_mutations()
Definition: ttneutralgenes.h:202
void flip(size_t n)
Flip the bit at n.
Definition: bitstring.h:343

References RAND::RandBool(), and RAND::Uniform().

◆ operator=()

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

Implements TTNeutralGenes.

95 {
96  const TTNeutralGenes_bitstring& TN = dynamic_cast<const TTNeutralGenes_bitstring&>(T);
97 
98  if(this != &TN) {
99  _myProto = TN._myProto;
101 
102  if(_sequence == NULL) init();
103 
104  _sequence[0].copy(TN._sequence[0]);
105  _sequence[1].copy(TN._sequence[1]);
106  }
107 
108  return *this;
109 }
virtual void init()
Definition: ttneutralgenes_bitstring.cc:37

References _free_recombination, TTNeutralGenes::_myProto, and _sequence.

◆ reset()

void TTNeutralGenes_bitstring::reset ( )
virtual

Implements TTNeutralGenes.

85 {
86  if(_sequence != NULL) {
87  delete [] _sequence;
88  _sequence = NULL;
89  }
90 }

Referenced by ~TTNeutralGenes_bitstring().

+ Here is the caller graph for this function:

◆ retrieve_data()

bool TTNeutralGenes_bitstring::retrieve_data ( BinaryStorageBuffer reader)
virtual

Implements TTNeutralGenes.

270 {
271  size_t wnb = _sequence[0].nb_words();
272  size_t bytes = wnb * sizeof(bitstring::_ul);
273  bitstring::_ul *srce = new bitstring::_ul[wnb];
274 
275  reader->read(srce, bytes);
276  _sequence[0].set_data(srce, wnb);
277 
278  reader->read(srce, bytes);
279  _sequence[1].set_data(srce, wnb);
280 
281  delete [] srce;
282 
283  return true;
284 }
void read(void *out, unsigned int nb_bytes)
Definition: binarystoragebuffer.h:219
void set_data(_ul *srce, size_t nbwrd)
Copy bits from an array of unsigned long words.
Definition: bitstring.h:346

References BinaryStorageBuffer::read().

◆ set_allele_value()

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

Implements TTNeutralGenes.

128 {
129  _sequence[allele].set(locus, (bool)value);
130 }
void set(size_t n)
Set a bit to 1.
Definition: bitstring.h:332

◆ set_sequence()

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

Implements TTNeutralGenes.

135 {
136  error("calling TTNeutralGenes_bitstring::set_sequence(void**), use set_allele_value() instead\n");
137 }

References error().

◆ show_up()

void TTNeutralGenes_bitstring::show_up ( )
virtual

Implements TTNeutralGenes.

238 {
239  unsigned int nloc = _myProto->get_locus_num();
240  unsigned int show = (nloc > 10 ? 10 : nloc);
241 
242  message("\n Trait's type: ntrl (bitstring)\n\
243  locus: %i\n\
244  alleles: 2\n\
245  _sequence:", nloc);
246 
247  for(unsigned int i = 0; i < show; i++)
248  message("\n %i %i", (int)_sequence[0][i], (int)_sequence[1][i]);
249  if(nloc > 10) message("\n ...");
250  message("\n");
251 }
void message(const char *message,...)
Definition: output.cc:38

References message().

◆ store_data()

void TTNeutralGenes_bitstring::store_data ( BinaryStorageBuffer saver)
virtual

Implements TTNeutralGenes.

256 {
257  size_t wnb = _sequence[0].nb_words();
258  size_t bytes = sizeof(bitstring::_ul);
259 
260  for(size_t i = 0; i < wnb; i++)
261  saver->store(_sequence[0].getword_atIdx(i), bytes);
262 
263  for(size_t i = 0; i < wnb; i++)
264  saver->store(_sequence[1].getword_atIdx(i), bytes);
265 }
void store(void *stream, unsigned int nb_bytes)
Definition: binarystoragebuffer.cc:36

References BinaryStorageBuffer::store().

Member Data Documentation

◆ _free_recombination

bool TTNeutralGenes_bitstring::_free_recombination
protected

Referenced by operator=().

◆ _sequence

bitstring* TTNeutralGenes_bitstring::_sequence
protected

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