36 #ifndef _QUANTITATIVETRAIT_HPP_
37 #define _QUANTITATIVETRAIT_HPP_
40 #include "Genotype.hpp"
41 #include "DataVector.hpp"
43 #include "shared_ptr.hpp"
67 const Loci& loci()
const {
return loci_;}
70 virtual DataVectorPtr calculate_trait_values(
const GenotypeMap& genotypes,
71 size_t generation_index,
72 size_t population_index)
const = 0;
77 virtual std::string class_name()
const;
78 virtual Parameters parameters()
const;
79 virtual void configure(
const Parameters& parameters,
const Registry& registry);
89 typedef shared_ptr<QuantitativeTrait> QuantitativeTraitPtr;
90 typedef std::vector<QuantitativeTraitPtr> QuantitativeTraitPtrs;
97 DataVectorPtr
get(
const std::string& qtid)
const
100 throw std::runtime_error((
"[TraitValueMap] Quantitative trait id " + qtid +
" not found.").c_str());
106 typedef shared_ptr<TraitValueMap> TraitValueMapPtr;
129 const QuantitativeTraitPtrs& qts = QuantitativeTraitPtrs());
131 virtual DataVectorPtr calculate_trait_values(
const GenotypeMap& genotypes,
132 size_t generation_index,
133 size_t population_index)
const;
136 virtual std::string class_name()
const {
return "QuantitativeTrait_PopulationComposite";}
137 virtual Parameters parameters()
const;
138 virtual void configure(
const Parameters& parameters,
const Registry& registry);
139 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& ids_written)
const;
143 QuantitativeTraitPtrs qts_;
166 typedef std::map<size_t, QuantitativeTraitPtr> GenerationQTMap;
169 const GenerationQTMap& qts = GenerationQTMap());
171 virtual DataVectorPtr calculate_trait_values(
const GenotypeMap& genotypes,
172 size_t generation_index,
173 size_t population_index)
const;
176 virtual std::string class_name()
const {
return "QuantitativeTrait_GenerationComposite";}
177 virtual Parameters parameters()
const;
178 virtual void configure(
const Parameters& parameters,
const Registry& registry);
179 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& ids_written)
const;
183 GenerationQTMap qts_;
212 std::vector<double> w = std::vector<double>(3));
214 virtual DataVectorPtr calculate_trait_values(
const GenotypeMap& genotypes,
215 size_t generation_index,
216 size_t population_index)
const;
219 virtual std::string class_name()
const {
return "QuantitativeTrait_SingleLocusFitness";}
220 virtual Parameters parameters()
const;
221 virtual void configure(
const Parameters& parameters,
const Registry& registry);
222 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& ids_written)
const;
227 std::vector<double> w_;
239 std::vector<double> effects;
244 std::string configuration()
const;
248 typedef std::vector<QTLEffect> QTLEffects;
275 LocusListPtr locus_list = LocusListPtr(),
276 Random::DistributionPtr effect_size_distribution = Random::DistributionPtr(),
277 Random::DistributionPtr dominance_distribution = Random::DistributionPtr());
279 void generate_qtl_effects(QTLEffects& qtl_effects)
const;
283 virtual std::string class_name()
const {
return "QTLEffectGenerator";}
284 virtual Parameters parameters()
const;
285 virtual void configure(
const Parameters& parameters,
const Registry& registry);
286 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& ids_written)
const;
290 LocusListPtr locus_list_;
291 Random::DistributionPtr effect_size_distribution_;
292 Random::DistributionPtr dominance_distribution_;
296 typedef shared_ptr<QTLEffectGenerator> QTLEffectGeneratorPtr;
322 QTLEffects qtl_effects = QTLEffects(),
323 double environmental_variance = 0);
325 virtual DataVectorPtr calculate_trait_values(
const GenotypeMap& genotypes,
326 size_t generation_index,
327 size_t population_index)
const;
329 const QTLEffects& qtl_effects()
const {
return qtl_effects_;}
333 virtual std::string class_name()
const {
return "QuantitativeTrait_IndependentLoci";}
334 virtual Parameters parameters()
const;
335 virtual void configure(
const Parameters& parameters,
const Registry& registry);
337 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& ids_written)
const;
341 QTLEffects qtl_effects_;
342 size_t qtl_effects_specified_;
343 double environmental_variance_;
344 Random::DistributionPtr environment_effect_;
345 std::vector<QTLEffectGeneratorPtr> qtl_effect_generators_;
349 #endif // _QUANTITATIVETRAIT_HPP_