36 #ifndef _VARIANTINDICATORIMPLEMENTATION_HPP_
37 #define _VARIANTINDICATORIMPLEMENTATION_HPP_
40 #include "VariantIndicator.hpp"
41 #include "MSFormat.hpp"
43 #include "Reporter.hpp"
71 virtual unsigned int operator()(
unsigned int chunk_id,
const Locus& locus)
const {
return 0;}
75 virtual std::string class_name()
const {
return "VariantIndicator_Trivial";}
76 virtual Parameters parameters()
const {
return Parameters();}
77 virtual void configure(
const Parameters& parameters,
const Registry& registry) {}
104 virtual unsigned int operator()(
unsigned int chunk_id,
const Locus& locus)
const;
108 virtual std::string class_name()
const {
return "VariantIndicator_Composite";}
109 virtual Parameters parameters()
const;
110 virtual void configure(
const Parameters& parameters,
const Registry& registry);
111 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& written)
const;
115 VariantIndicatorPtrs variant_indicators_;
141 virtual unsigned int operator()(
unsigned int chunk_id,
const Locus& locus)
const;
145 virtual std::string class_name()
const {
return "VariantIndicator_IDRange";}
146 virtual Parameters parameters()
const;
147 virtual void configure(
const Parameters& parameters,
const Registry& registry);
148 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& written)
const;
154 unsigned int id_start;
155 unsigned int id_count;
156 unsigned int id_step;
159 Entry(
unsigned int _id_start,
unsigned int _id_count,
unsigned int _id_step,
unsigned int _value)
160 : id_start(_id_start), id_count(_id_count), id_step(_id_step), value(_value)
164 typedef std::multimap<Locus,Entry> EntryMap;
190 virtual unsigned int operator()(
unsigned int chunk_id,
const Locus& locus)
const;
191 virtual void write_file(
const std::string& filename)
const;
195 virtual std::string class_name()
const {
return "VariantIndicator_IDSet";}
196 virtual Parameters parameters()
const;
197 virtual void configure(
const Parameters& parameters,
const Registry& registry);
198 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& written)
const;
203 std::set<unsigned int> ids;
205 Entry(
unsigned int _value = -1u, std::set<unsigned int> _ids = std::set<unsigned int>())
206 : value(_value), ids(_ids)
210 typedef std::map<Locus,Entry> EntryMap;
212 const EntryMap& entries()
const {
return entries_;}
249 virtual std::string class_name()
const {
return "VariantIndicator_Random";}
250 virtual Parameters parameters()
const;
251 virtual void configure(
const Parameters& parameters,
const Registry& registry);
253 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& written)
const;
259 size_t population_index;
260 LocusListPtr locus_list;
261 std::vector<double> frequencies;
262 Random::DistributionPtr distribution;
264 LocusListInfo(
size_t _population_index,
const LocusListPtr& _locus_list,
265 std::vector<double> _frequencies)
266 : population_index(_population_index), locus_list(_locus_list), frequencies(_frequencies)
269 LocusListInfo(
size_t _population_index,
const LocusListPtr& _locus_list,
270 Random::DistributionPtr _distribution)
271 : population_index(_population_index), locus_list(_locus_list), distribution(_distribution)
275 typedef std::vector<LocusListInfo> LocusListInfos;
276 LocusListInfos locus_list_infos_;
306 virtual unsigned int operator()(
unsigned int chunk_id,
const Locus& locus)
const;
310 virtual std::string class_name()
const {
return "VariantIndicator_File";}
311 virtual Parameters parameters()
const;
312 virtual void configure(
const Parameters& parameters,
const Registry& registry);
313 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& written)
const;
319 std::vector<std::string> locus_ids_;
321 std::vector<Locus> loci_;
322 std::map<Locus, size_t> locus_index_map_;
323 ConfigurablePtrs children_;
358 double allele_frequency = 0);
361 virtual std::string class_name()
const {
return "VariantIndicator_SingleLocusHardyWeinberg";}
362 virtual Parameters parameters()
const;
363 virtual void configure(
const Parameters& parameters,
const Registry& registry);
365 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& written)
const;
370 double allele_frequency_;
404 size_t population_size = 0,
406 double allele_frequency_1 = 0,
408 double allele_frequency_2 = 0,
410 unsigned int id_offset_step = 0);
412 virtual unsigned int operator()(
unsigned int chunk_id,
const Locus& locus)
const;
416 virtual std::string class_name()
const {
return "VariantIndicator_TwoLocusLD";}
417 virtual Parameters parameters()
const;
418 virtual void configure(
const Parameters& parameters,
const Registry& registry);
419 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& written)
const;
423 size_t population_size_;
425 double allele_frequency_1_;
427 double allele_frequency_2_;
429 unsigned int id_offset_step_;
436 void initialize_internal();
453 unsigned int unused_id_start = 0,
454 VariantIndicatorPtr vi = VariantIndicatorPtr(),
455 const std::string& output_directory =
"");
457 virtual unsigned int operator()(
unsigned int chunk_id,
const Locus& locus)
const;
459 virtual unsigned int mutate(
unsigned int old_chunk_id,
const Locus& locus,
unsigned int value);
461 void report(std::ostream& os)
const;
465 virtual std::string class_name()
const {
return "VariantIndicator_Mutable";}
466 virtual Parameters parameters()
const;
467 virtual void configure(
const Parameters& parameters,
const Registry& registry);
469 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& written)
const;
473 virtual void update(
size_t generation_index,
474 const PopulationPtrs& populations,
475 const PopulationDataPtrs& population_datas,
476 bool is_final_generation);
478 virtual Loci loci(
size_t generation_index,
479 bool is_final_generation)
const;
483 unsigned int unused_id_start_;
484 unsigned int unused_id_current_;
485 VariantIndicatorPtr vi_;
487 bfs::ofstream os_debug_;
489 typedef std::map<unsigned int, unsigned int> IDAncestry;
490 IDAncestry id_ancestry_;
492 typedef std::map<unsigned int, unsigned int> IDValueMap;
493 typedef std::map<Locus, IDValueMap> IDValueMaps;
494 IDValueMaps id_value_maps_;
498 #endif // _VARIANTINDICATORIMPLEMENTATION_HPP_