24 #include <Sequence/Coalescent/Recombination.hpp> 32 for(
auto i = sample_history->begin() ;
33 i != sample_history->end() ;
38 if( j != sample_history->end() )
54 std::vector<chromosome>::const_iterator sample_begin,
55 const unsigned & current_nsam)
70 int pos = int(random_01*
double(nlinks))+1;
72 while( (sample_begin+recombinant) <
73 (sample_begin+current_nsam) )
75 int len = (sample_begin+recombinant)->links();
80 int rpos = (sample_begin+recombinant)->begin()->beg + pos - 1;
81 return std::make_pair(recombinant,rpos);
87 std::vector<chromosome> * sample,
102 std::vector<chromosome>::iterator sbegin = sample->begin();
108 for( ; pos >= seg->end ;++seg){};
109 assert(seg != (sbegin+chromo)->end());
110 within = (pos>=seg->beg) ?
true:
false;
113 size_t ns = (sbegin+chromo)->nsegs -
size_t(seg-(sbegin+chromo)->begin());
114 std::vector<segment> rtsegs(seg,seg+ns);
117 (sbegin+chromo)->nsegs =
unsigned((
int((seg)-(sbegin+chromo)->begin())) + int(within));
118 assert( (sbegin+chromo)->nsegs > 0 );
123 rtsegs.begin()->beg = pos+1;
128 rtsegs.begin()->beg = seg->beg;
132 int rv = rtsegs.begin()->beg - ((sbegin+chromo)->end()-1)->end;
137 int tpop=(sbegin+chromo)->pop;
138 sample->insert(sbegin+current_nsam,
chromosome(rtsegs,tpop));
146 assert( (sample->begin()+current_nsam)->nsegs == rtsegs.size()
147 && rtsegs.size() == ns );
152 int beg_new_marg = rtsegs.begin()->beg;
155 arg::iterator argbeg = sample_history->begin();
156 arg::iterator titr=argbeg;
159 for( ; titr != sample_history->end()
160 && beg_new_marg > titr->beg-1 ; ++argbeg,++titr ){};
161 assert(argbeg!=sample_history->end());
162 if(argbeg->beg != beg_new_marg)
164 arg::iterator argt = sample_history->insert(titr,*(argbeg));
165 argt->beg = beg_new_marg;
166 assert(arg_is_sorted(sample_history));
std::pair< int, int > pick_uniform_spot(const double &random_01, const int &nlinks, std::vector< chromosome >::const_iterator sample_begin, const unsigned ¤t_nsam)
Pick a crossover point for the model where recombination rates are constant across a recion...
std::list< marginal > arg
Ancestral Recombination Graph.
The namespace in which this library resides.
A chromosome is a container of segments.
A portion of a recombining chromosome.
int crossover(const int ¤t_nsam, const int &chromo, const int &pos, std::vector< chromosome > *sample, arg *sample_history)
Recombination function.