forqs module reference
Forward simulation of Recombination, Quantitative traits, and Selection
 All Classes Groups Pages
RecombinationPositionGeneratorImplementation.hpp
1 //
2 // RecombinationPositionGeneratorImplementation.hpp
3 //
4 // Created by Darren Kessner with John Novembre
5 //
6 // Copyright (c) 2013 Regents of the University of California
7 // All rights reserved.
8 //
9 // Redistribution and use in source and binary forms, with or without
10 // modification, are permitted provided that the following conditions are met:
11 //
12 // * Redistributions of source code must retain the above copyright notice,
13 // this list of conditions and the following disclaimer.
14 //
15 // * Redistributions in binary form must reproduce the above copyright notice,
16 // this list of conditions and the following disclaimer in the documentation
17 // and/or other materials provided with the distribution.
18 //
19 // * Neither UCLA nor the names of its contributors may be used to endorse or
20 // promote products derived from this software without specific prior
21 // written permission.
22 //
23 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
24 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
27 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
31 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 //
34 
35 
36 #ifndef _RECOMBINATIONPOSITIONGENERATORIMPLEMENTATION_HPP_
37 #define _RECOMBINATIONPOSITIONGENERATORIMPLEMENTATION_HPP_
38 
39 
40 #include "RecombinationPositionGenerator.hpp"
41 #include "RecombinationMap.hpp"
42 #include "Random.hpp"
43 
44 
59 
60 
61 //
62 // RecombinationPositionGenerator_Trivial
63 //
64 
74 
75 class RecombinationPositionGenerator_Trivial : public RecombinationPositionGenerator
76 {
77  public:
78 
79  RecombinationPositionGenerator_Trivial(const std::string& id)
80  : RecombinationPositionGenerator(id)
81  {}
82 
83  virtual std::vector<unsigned int> get_positions(size_t chromosome_pair_index) const;
84 
85  // Configurable interface
86 
87  virtual std::string class_name() const {return "RecombinationPositionGenerator_Trivial";}
88  virtual Parameters parameters() const;
89  virtual void configure(const Parameters& parameters, const Registry& registry);
90 };
91 
92 
93 //
94 // RecombinationPositionGenerator_SingleCrossover
95 //
96 
106 
107 
108 class RecombinationPositionGenerator_SingleCrossover : public RecombinationPositionGenerator
109 {
110  public:
111 
113  : RecombinationPositionGenerator(id)
114  {}
115 
116  virtual std::vector<unsigned int> get_positions(size_t chromosome_pair_index) const;
117 
118  // Configurable interface
119 
120  virtual std::string class_name() const {return "RecombinationPositionGenerator_SingleCrossover";}
121  virtual Parameters parameters() const;
122  virtual void configure(const Parameters& parameters, const Registry& registry);
123  virtual void initialize(const SimulatorConfig& config);
124 
125  private:
126  std::vector<unsigned int> chromosome_lengths_;
127 };
128 
129 
130 //
131 // RecombinationPositionGenerator_Uniform
132 //
133 
150 
151 
152 class RecombinationPositionGenerator_Uniform : public RecombinationPositionGenerator
153 {
154  public:
155 
157  {
158  size_t length;
159  double rate;
160  Random::DistributionPtr poisson;
161  ChromosomeInfo(size_t _length, double _rate = 1.0);
162  };
163 
164  RecombinationPositionGenerator_Uniform(const std::string& id,
165  std::vector<ChromosomeInfo> infos = std::vector<ChromosomeInfo>());
166 
167  virtual std::vector<unsigned int> get_positions(size_t chromosome_pair_index) const;
168 
169  // Configurable interface
170 
171  virtual std::string class_name() const {return "RecombinationPositionGenerator_Uniform";}
172  virtual Parameters parameters() const;
173  virtual void configure(const Parameters& parameters, const Registry& registry);
174  virtual void initialize(const SimulatorConfig& config);
175 
176  private:
177 
178  double common_rate_;
179  typedef std::vector<ChromosomeInfo> ChromosomeInfos;
180  ChromosomeInfos infos_;
181 };
182 
183 
184 //
185 // RecombinationPositionGenerator_RecombinationMap
186 //
187 
201 
202 
203 class RecombinationPositionGenerator_RecombinationMap : public RecombinationPositionGenerator
204 {
205  public:
206 
208  const std::vector<std::string>& filenames = std::vector<std::string>());
209 
210  virtual std::vector<unsigned int> get_positions(size_t chromosome_pair_index) const;
211 
212  // Configurable interface
213 
214  virtual std::string class_name() const {return "RecombinationPositionGenerator_RecombinationMap";}
215  virtual Parameters parameters() const;
216  virtual void configure(const Parameters& parameters, const Registry& registry);
217 
218  private:
219 
220  std::vector<std::string> filenames_;
221  std::vector< shared_ptr<RecombinationMap> > recombination_maps_;
222 
223  void initialize();
224 };
225 
226 
227 #endif // _RECOMBINATIONPOSITIONGENERATORIMPLEMENTATION_HPP_
228