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

Referenced by clone().

◆ TTNeutralGenes_bitstring() [2/2]

TTNeutralGenes_bitstring::TTNeutralGenes_bitstring ( const TTNeutralGenes_bitstring T)
inline

◆ ~TTNeutralGenes_bitstring()

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

References reset().

Member Function Documentation

◆ clone()

virtual TTNeutralGenes* TTNeutralGenes_bitstring::clone ( )
inlinevirtual

Implements TTNeutralGenes.

72 { return new TTNeutralGenes_bitstring(*this); }
TTNeutralGenes_bitstring()
Definition: ttneutralgenes_bitstring.h:44

References TTNeutralGenes_bitstring().

◆ get_allele()

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

Implements TTNeutralGenes.

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

◆ get_allele_value()

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

Implements TTNeutralGenes.

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

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

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

References error().

◆ inherit()

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

Implements TTNeutralGenes.

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

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

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

◆ init()

void TTNeutralGenes_bitstring::init ( )
virtual

Implements TTNeutralGenes.

40 {
41  if(_sequence != NULL)
42  fatal("TTNeutralGenes_bitstring::init::_sequence is not NULL !\n");
43 
44  _sequence = new bitstring[2];
47 
49 }
unsigned int get_locus_num()
Definition: ttneutralgenes.h:200
double getRecombRate() const
Definition: ttrait_with_map.h:238
void reset(size_t length)
Definition: bitstring.h:140
void fatal(const char *str,...)
Definition: output.cc:100

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

◆ init_sequence()

void TTNeutralGenes_bitstring::init_sequence ( )
virtual

Implements TTNeutralGenes.

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

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

◆ mutate()

void TTNeutralGenes_bitstring::mutate ( )
virtual

Implements TTNeutralGenes.

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

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

◆ operator=()

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

Implements TTNeutralGenes.

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

References _free_recombination, TTNeutralGenes::_myProto, and _sequence.

◆ reset()

void TTNeutralGenes_bitstring::reset ( )
virtual

Implements TTNeutralGenes.

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

Referenced by ~TTNeutralGenes_bitstring().

◆ retrieve_data()

bool TTNeutralGenes_bitstring::retrieve_data ( BinaryStorageBuffer reader)
virtual

Implements TTNeutralGenes.

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

References BinaryStorageBuffer::read().

◆ set_allele_value()

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

Implements TTNeutralGenes.

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

◆ set_sequence()

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

Implements TTNeutralGenes.

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

References error().

◆ show_up()

void TTNeutralGenes_bitstring::show_up ( )
virtual

Implements TTNeutralGenes.

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

References message().

◆ store_data()

void TTNeutralGenes_bitstring::store_data ( BinaryStorageBuffer saver)
virtual

Implements TTNeutralGenes.

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

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

Locations of visitors to this page
Catalogued on GSR