36 #ifndef _REPORTER_HPP_
37 #define _REPORTER_HPP_
40 #include "PopulationData.hpp"
41 #include "Configurable.hpp"
42 #include "Simulator.hpp"
43 #include "boost/filesystem.hpp"
44 #include "boost/filesystem/fstream.hpp"
48 namespace bfs = boost::filesystem;
73 virtual void update(
size_t generation_index,
74 const PopulationPtrs& populations,
75 const PopulationDatas& population_datas,
76 bool is_final_generation) {}
78 virtual Loci loci(
size_t generation_index,
79 bool is_final_generation)
const {
return Loci();}
83 virtual std::string class_name()
const;
84 virtual Parameters parameters()
const;
86 virtual void configure(
const Parameters& parameters,
const Registry& registry);
92 bfs::path output_directory_;
103 typedef shared_ptr<Reporter> ReporterPtr;
104 typedef std::vector<ReporterPtr> ReporterPtrs;
127 const std::vector<double>& times() {
return times_;}
128 double mean_generation_time()
const;
130 virtual void update(
size_t generation_index,
131 const PopulationPtrs& populations,
132 const PopulationDatas& population_datas,
133 bool is_final_generation);
137 virtual std::string class_name()
const {
return "Reporter_Timer";}
138 virtual Parameters parameters()
const;
139 virtual void configure(
const Parameters& parameters,
const Registry& registry);
144 std::vector<double> times_;
171 virtual void update(
size_t generation_index,
172 const PopulationPtrs& populations,
173 const PopulationDatas& population_datas,
174 bool is_final_generation);
178 virtual std::string class_name()
const {
return "Reporter_Population";}
179 virtual Parameters parameters()
const;
180 virtual void configure(
const Parameters& parameters,
const Registry& registry);
219 virtual void update(
size_t generation_index,
220 const PopulationPtrs& populations,
221 const PopulationDatas& population_datas,
222 bool is_final_generation);
224 virtual Loci loci(
size_t generation_index,
225 bool is_final_generation)
const {
return loci_;}
229 virtual std::string class_name()
const {
return "Reporter_AlleleFrequencies";}
230 virtual Parameters parameters()
const;
231 virtual void configure(
const Parameters& parameters,
const Registry& registry);
233 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& ids_written)
const;
239 Loci loci_specified_;
240 LocusListPtrs locus_lists_specified_;
241 QuantitativeTraitPtrs qts_specified_;
243 typedef shared_ptr<std::ostream> OstreamPtr;
244 typedef std::map<Locus, OstreamPtr> OstreamMap;
247 std::string generate_filename(
const Locus& locus)
const;
279 virtual void update(
size_t generation_index,
280 const PopulationPtrs& populations,
281 const PopulationDatas& population_datas,
282 bool is_final_generation);
284 virtual Loci loci(
size_t generation_index,
285 bool is_final_generation)
const;
289 virtual std::string class_name()
const {
return "Reporter_LD";}
290 virtual Parameters parameters()
const;
291 virtual void configure(
const Parameters& parameters,
const Registry& registry);
292 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& ids_written)
const;
328 const std::string& qtid =
"");
330 virtual void update(
size_t generation_index,
331 const PopulationPtrs& populations,
332 const PopulationDatas& population_datas,
333 bool is_final_generation);
337 virtual std::string class_name()
const {
return "Reporter_TraitValues";}
338 virtual Parameters parameters()
const;
339 virtual void configure(
const Parameters& parameters,
const Registry& registry);
345 bfs::ofstream os_mean_;
371 virtual void update(
size_t generation_index,
372 const PopulationPtrs& populations,
373 const PopulationDatas& population_datas,
374 bool is_final_generation);
378 virtual std::string class_name()
const {
return "Reporter_MeanFitnesses";}
379 virtual Parameters parameters()
const;
380 virtual void configure(
const Parameters& parameters,
const Registry& registry);
416 std::string configuration()
const;
419 typedef std::map<size_t, ChromosomeEntry> ChromosomeEntries;
422 const ChromosomeEntries& chromosome_entries = ChromosomeEntries());
424 virtual void update(
size_t generation_index,
425 const PopulationPtrs& populations,
426 const PopulationDatas& population_datas,
427 bool is_final_generation);
431 virtual std::string class_name()
const {
return "Reporter_HaplotypeDiversity";}
432 virtual Parameters parameters()
const;
433 virtual void configure(
const Parameters& parameters,
const Registry& registry);
437 ChromosomeEntries chromosome_entries_;
440 typedef std::map< size_t, std::vector< shared_ptr<bfs::ofstream> > > ChromosomeStreams;
441 ChromosomeStreams chromosome_streams_;
443 void open_streams(
size_t population_count);
459 virtual size_t group_count()
const = 0;
460 virtual size_t group(
unsigned int chromosome_id)
const = 0;
465 virtual std::string class_name()
const;
466 virtual Parameters parameters()
const;
467 virtual void configure(
const Parameters& parameters,
const Registry& registry);
471 typedef shared_ptr<HaplotypeGrouping> HaplotypeGroupingPtr;
497 virtual size_t group_count()
const;
498 virtual size_t group(
unsigned int chromosome_id)
const;
502 virtual std::string class_name()
const {
return "HaplotypeGrouping_IDRange";}
503 virtual Parameters parameters()
const;
504 virtual void configure(
const Parameters& parameters,
const Registry& registry);
508 std::vector<unsigned int> id_starts_;
509 std::vector<unsigned int> id_counts_;
538 virtual size_t group_count()
const;
539 virtual size_t group(
unsigned int chromosome_id)
const;
543 virtual std::string class_name()
const {
return "HaplotypeGrouping_Uniform";}
544 virtual Parameters parameters()
const;
545 virtual void configure(
const Parameters& parameters,
const Registry& registry);
549 unsigned int ids_per_group_;
550 unsigned int id_offset_;
551 unsigned int id_count_;
579 HaplotypeGroupingPtr haplotype_grouping = HaplotypeGroupingPtr(),
580 size_t chromosome_step = 0,
581 size_t update_step = 0);
583 virtual void update(
size_t generation_index,
584 const PopulationPtrs& populations,
585 const PopulationDatas& population_datas,
586 bool is_final_generation);
590 virtual std::string class_name()
const {
return "Reporter_HaplotypeFrequencies";}
591 virtual Parameters parameters()
const;
592 virtual void configure(
const Parameters& parameters,
const Registry& registry);
594 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& ids_written)
const;
598 HaplotypeGroupingPtr haplotype_grouping_;
599 size_t chromosome_step_;
601 std::vector<unsigned int> chromosome_lengths_;
603 void write_haplotype_frequencies(std::ostream& os,
const Population& population,
604 size_t chromosome_pair_index,
unsigned int chromosome_length)
const;
636 : locus(_locus), length(_length)
639 std::string configuration()
const;
642 typedef std::vector<Region> Regions;
645 const Regions& regions = Regions());
647 virtual void update(
size_t generation_index,
648 const PopulationPtrs& populations,
649 const PopulationDatas& population_datas,
650 bool is_final_generation);
654 virtual std::string class_name()
const {
return "Reporter_Regions";}
655 virtual Parameters parameters()
const;
656 virtual void configure(
const Parameters& parameters,
const Registry& registry);
657 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& ids_written)
const;
662 unsigned int ms_mapping_begin_;
663 unsigned int ms_mapping_end_;
692 double initial_allele_frequency = 0,
693 std::vector<double> w = std::vector<double>(3))
694 :
Configurable(
id), initial_allele_frequency_(initial_allele_frequency), w_(w), generation_count_(0)
697 virtual void update(
size_t generation_number,
698 const PopulationPtrs& populations,
699 const PopulationDatas& population_datas,
700 bool is_final_generation);
704 virtual std::string class_name()
const {
return "Reporter_DeterministicTrajectories";}
705 virtual Parameters parameters()
const;
706 virtual void configure(
const Parameters& parameters,
const Registry& registry);
711 double initial_allele_frequency_;
712 std::vector<double> w_;
713 double generation_count_;
717 #endif // _REPORTER_HPP_