Nemo  2.4.0
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:84
bool _free_recombination
Definition: ttneutralgenes_bitstring.h:85
TTNeutralGenes()
Definition: ttneutralgenes.h:63

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
49 { reset(); }
virtual void reset()
Definition: ttneutralgenes_bitstring.cc:85

References reset().

Member Function Documentation

◆ clone()

virtual TTNeutralGenes* TTNeutralGenes_bitstring::clone ( )
inlinevirtual

Implements TTNeutralGenes.

71 { return new TTNeutralGenes_bitstring(*this); }
TTNeutralGenes_bitstring()
Definition: ttneutralgenes_bitstring.h:43

References TTNeutralGenes_bitstring().

◆ get_allele()

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

Implements TTNeutralGenes.

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

◆ get_allele_value()

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

Implements TTNeutralGenes.

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

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

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

References error().

◆ inherit()

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

Implements TTNeutralGenes.

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

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
202 {
203  vector< pair<unsigned int, unsigned int> > recTable =
205 
206  unsigned int prevLoc = 0;
207 
208  vector< pair<unsigned int, unsigned int> >::const_iterator xover = recTable.begin();
209 
210  while(xover != recTable.end()) {
211 
212  if(xover->first > prevLoc) {
213  const bitstring& orig = parent->get_bit_sequence((bool)xover->second);
214  _sequence[SEX].copy(orig, prevLoc, xover->first);
215  }
216 
217  prevLoc = xover->first;
218  xover++;
219  }
220 }
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:1209
TProtoNeutralGenes * _myProto
Definition: ttneutralgenes.h:58
static GeneticMap & getGeneticMapRef()
Definition: ttrait_with_map.h:235
unsigned int getMapIndex()
Definition: ttrait_with_map.h:233
void copy(const bitstring &b)
Unchecked copy, assumes we have sames sizes.
Definition: bitstring.h:360

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

◆ init()

void TTNeutralGenes_bitstring::init ( )
virtual

Implements TTNeutralGenes.

39 {
40  if(_sequence != NULL)
41  fatal("TTNeutralGenes_bitstring::init::_sequence is not NULL !\n");
42 
43  _sequence = new bitstring[2];
46 
48 }
unsigned int get_locus_num()
Definition: ttneutralgenes.h:199
double getRecombRate() const
Definition: ttrait_with_map.h:237
void reset(size_t length)
Definition: bitstring.h:139
void fatal(const char *str,...)
Definition: output.cc:99

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

◆ init_sequence()

void TTNeutralGenes_bitstring::init_sequence ( )
virtual

Implements TTNeutralGenes.

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

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

◆ mutate()

void TTNeutralGenes_bitstring::mutate ( )
virtual

Implements TTNeutralGenes.

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

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

◆ operator=()

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

Implements TTNeutralGenes.

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

References _free_recombination, TTNeutralGenes::_myProto, and _sequence.

◆ reset()

void TTNeutralGenes_bitstring::reset ( )
virtual

Implements TTNeutralGenes.

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

Referenced by ~TTNeutralGenes_bitstring().

+ Here is the caller graph for this function:

◆ retrieve_data()

bool TTNeutralGenes_bitstring::retrieve_data ( BinaryStorageBuffer reader)
virtual

Implements TTNeutralGenes.

257 {
258  size_t wnb = _sequence[0].nb_words();
259  size_t bytes = wnb * sizeof(bitstring::_ul);
260  bitstring::_ul *srce = new bitstring::_ul[wnb];
261 
262  reader->read(srce, bytes);
263  _sequence[0].set_data(srce, wnb);
264 
265  reader->read(srce, bytes);
266  _sequence[1].set_data(srce, wnb);
267 
268  delete [] srce;
269 
270  return true;
271 }
void read(void *out, unsigned int nb_bytes)
Definition: binarystoragebuffer.h:220
void set_data(_ul *srce, size_t nbwrd)
Copy bits from an array of unsigned long words.
Definition: bitstring.h:349

References BinaryStorageBuffer::read().

◆ set_allele_value()

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

Implements TTNeutralGenes.

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

◆ set_sequence()

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

Implements TTNeutralGenes.

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

References error().

◆ show_up()

void TTNeutralGenes_bitstring::show_up ( )
virtual

Implements TTNeutralGenes.

225 {
226  unsigned int nloc = _myProto->get_locus_num();
227  unsigned int show = (nloc > 10 ? 10 : nloc);
228 
229  message("\n Trait's type: ntrl (bitstring)\n\
230  locus: %i\n\
231  alleles: 2\n\
232  _sequence:", nloc);
233 
234  for(unsigned int i = 0; i < show; i++)
235  message("\n %i %i", (int)_sequence[0][i], (int)_sequence[1][i]);
236  if(nloc > 10) message("\n ...");
237  message("\n");
238 }
void message(const char *message,...)
Definition: output.cc:39

References message().

◆ store_data()

void TTNeutralGenes_bitstring::store_data ( BinaryStorageBuffer saver)
virtual

Implements TTNeutralGenes.

243 {
244  size_t wnb = _sequence[0].nb_words();
245  size_t bytes = sizeof(bitstring::_ul);
246 
247  for(size_t i = 0; i < wnb; i++)
248  saver->store(_sequence[0].getword_atIdx(i), bytes);
249 
250  for(size_t i = 0; i < wnb; i++)
251  saver->store(_sequence[1].getword_atIdx(i), bytes);
252 }
void store(void *stream, unsigned int nb_bytes)
Definition: binarystoragebuffer.cc:37

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

Locations of visitors to this page
Catalogued on GSR