Nemo
2.3.56
Simulate forward-in-time genetic evolution in a spatially explicit, individual-based stochastic simulator
|
Base class for the breeding (and mating) life cycle events. More...
#include <LCEbreed.h>
Public Member Functions | |
LCE_Breed_base () | |
virtual | ~LCE_Breed_base () |
virtual Individual * | getFatherPtr (Patch *thePatch, Individual *mother, unsigned int motherIndex) |
Calls the mating function according to the model chosen using the function pointer, used to get the father from the mother in a patch. More... | |
void | NonWrightFisherPopulation () |
void | WrightFisherPopulation () |
Individual * | breed (Individual *mother, Individual *father, unsigned int LocalPatch) |
Makes a new individual with the right parents. More... | |
Individual * | breed_cloning (Individual *mother, Individual *father, unsigned int LocalPatch) |
Makes a new individual by doing a deep copy of the mother (copies the mother's genes into the offspring). More... | |
Individual * | makeOffspring (Individual *ind) |
Last step of the breeding process, does inheritance and mutation of the parents' genes. More... | |
Individual * | do_breed (Individual *mother, Individual *father, unsigned int LocalPatch) |
Calls the breeding function unsing its pointer. More... | |
bool | checkMatingCondition (Patch *thePatch) |
Checks if any mating will take place in the patch passed as argument. More... | |
bool | checkNoSelfing (Patch *thePatch) |
Checks whether mating will take place in the current patch when mating is not selfing or cloning. More... | |
bool | checkPolygyny (Patch *thePatch) |
Checks whether mating will take place in the current patch when mating is polygynous. More... | |
bool | checkSelfing (Patch *thePatch) |
Checks whether mating will take place in the current patch when mating is selfing. More... | |
bool | checkCloning (Patch *thePatch) |
Checks whether mating will take place in the current patch when mating is cloning. More... | |
Implementations | |
virtual bool | setParameters () |
Parameter setters/updaters | |
bool | setMatingSystem () |
bool | setFecundity () |
bool | setSexRatio () |
Accessors | |
double | getMatingProportion () |
double | getMeanFecundity (unsigned int patch) |
int | getMatingSystem () |
bool | doInheritance () |
double | getPoissonFecundity (double mean) |
double | getFixedFecundity (double mean) |
double | getGaussianFecundity (double mean) |
double | getLogNormalFecundity (double mean) |
double | getFecundity (unsigned int patch) |
double | getFecundity (double mean) |
sex_t | getOffsprgSex () |
sex_t | getOffsprgSexRandom () |
sex_t | getOffsprgSexFixed () |
sex_t | getOffsprgSexSelfing () |
sex_t | getOffsprgSexCloning () |
Mating functions | |
Individual * | RandomMating (Patch *thePatch, Individual *mother, unsigned int motherIndex) |
Returns a pointer to a male drawn randomly from a patch. More... | |
Individual * | fullPolyginy (Patch *thePatch, Individual *mother, unsigned int motherIndex) |
Returns a pointer to the alpha male of the patch. More... | |
Individual * | fullPolyginy_manyMales (Patch *thePatch, Individual *mother, unsigned int motherIndex) |
Returns a pointer to one of the first _mating_males males of the patch. More... | |
Individual * | partialPolyginy (Patch *thePatch, Individual *mother, unsigned int motherIndex) |
Returns a pointer to a male from a patch chosen at random if _mating_proportion != 1, or the first male otherwise. More... | |
Individual * | partialPolyginy_manyMales (Patch *thePatch, Individual *mother, unsigned int motherIndex) |
Returns a pointer to a male from a patch chosen at random if _mating_proportion != 1, or one of the _mating_males first males otherwise. More... | |
Individual * | fullMonoginy (Patch *thePatch, Individual *mother, unsigned int motherIndex) |
Returns a pointer to a male with same index as mother (if available) from the focal patch. More... | |
Individual * | partialMonoginy (Patch *thePatch, Individual *mother, unsigned int motherIndex) |
Returns a pointer to a male with same index as mother (if available) from the focal patch. More... | |
Individual * | fullSelfing (Patch *thePatch, Individual *mother, unsigned int motherIndex) |
Returns the mother pointer. More... | |
Individual * | partialSelfing (Patch *thePatch, Individual *mother, unsigned int motherIndex) |
Returns the mother pointer or a random female if _mating_proportion != 1. More... | |
Individual * | random_hermaphrodite (Patch *thePatch, Individual *mother, unsigned int motherIndex) |
Returns a random female from the patch, will be the same mother with probability 1/N (Wright-Fisher model). More... | |
![]() | |
LifeCycleEvent (const char *name, const char *trait_link) | |
Cstor. More... | |
virtual | ~LifeCycleEvent () |
virtual void | init (Metapop *popPtr) |
Sets the pointer to the current Metapop and the trait link if applicable. More... | |
virtual bool | attach_trait (string trait) |
virtual void | set_paramset (std::string name, bool required, SimComponent *owner) |
virtual void | set_event_name (std::string &name) |
Set the name of the event (name of the ParamSet) and add the corresponding parameter to the set. More... | |
virtual void | set_event_name (const char *name) |
virtual string & | get_event_name () |
Accessor to the LCE's name. More... | |
virtual int | get_rank () |
Accessor to the LCE rank in the life cycle. More... | |
virtual void | set_pop_ptr (Metapop *popPtr) |
Accessors for the population pointer. More... | |
virtual Metapop * | get_pop_ptr () |
virtual void | execute ()=0 |
Execute the event on the pop. More... | |
virtual LifeCycleEvent * | clone ()=0 |
Cloning interface. More... | |
virtual age_t | removeAgeClass ()=0 |
Removes the returned age-class flag(s) from the current Metapop age-class flags. More... | |
virtual age_t | addAgeClass ()=0 |
Adds the returned age-class flag(s) to the current Metapop age-class flags. More... | |
virtual age_t | requiredAgeClass ()=0 |
Specifies what age-classes are required by the LCE to execute. More... | |
![]() | |
SimComponent () | |
virtual | ~SimComponent () |
virtual void | loadFileServices (FileServices *loader)=0 |
Loads the component's FileHandler onto the FileServices. More... | |
virtual void | loadStatServices (StatServices *loader)=0 |
Loads the component's StatHandler onto the StatServices. More... | |
virtual void | loadUpdaters (UpdaterServices *loader) |
Loads the parameters and component updater onto the updater manager. More... | |
virtual void | set_paramset (ParamSet *paramset) |
Sets the ParamSet member. More... | |
virtual void | set_paramsetFromCopy (const ParamSet &PSet) |
Reset the set of parameters from a another set. More... | |
virtual ParamSet * | get_paramset () |
ParamSet accessor. More... | |
virtual void | add_parameter (Param *param) |
Interface to add a parameter to the set. More... | |
virtual void | add_parameter (std::string Name, param_t Type, bool isRequired, bool isBounded, double low_bnd, double up_bnd) |
Interface to add a parameter to the set. More... | |
virtual void | add_parameter (std::string Name, param_t Type, bool isRequired, bool isBounded, double low_bnd, double up_bnd, ParamUpdaterBase *updater) |
Interface to add a parameter and its updater to the set. More... | |
virtual Param * | get_parameter (std::string name) |
Param getter. More... | |
virtual double | get_parameter_value (std::string name) |
Param value getter. More... | |
virtual string | get_name () |
Returnd the name of the ParamSet, i.e. More... | |
virtual bool | has_parameter (std::string name) |
Param getter. More... | |
virtual bool | resetParameterFromSource (std::string param, SimComponent *cmpt)=0 |
Protected Attributes | |
void(LCE_Breed_base::* | PopModelFuncPtr )(void) |
TMatrix | _mean_fecundity |
![]() | |
std::string | _event_name |
The param name to be read in the init file. More... | |
Metapop * | _popPtr |
The ptr to the current Metapop. More... | |
std::string | _LCELinkedTraitType |
The name of the linked trait. More... | |
int | _LCELinkedTraitIndex |
The index in the individual's trait table of the linked trait. More... | |
![]() | |
ParamSet * | _paramSet |
The parameters container. More... | |
Private Attributes | |
Individual *(LCE_Breed_base::* | MatingFuncPtr )(Patch *, Individual *, unsigned int) |
Individual *(LCE_Breed_base::* | DoBreedFuncPtr )(Individual *mother, Individual *father, unsigned int LocalPatch) |
double(LCE_Breed_base::* | FecundityFuncPtr )(double mean) |
bool(LCE_Breed_base::* | CheckMatingConditionFuncPtr )(Patch *thePatch) |
sex_t(LCE_Breed_base::* | GetOffsprgSex )() |
Parameters | |
int | _mating_system |
unsigned int | _mating_males |
unsigned int | _alpha_male |
double | _mating_proportion |
double | _sd_fecundity |
bool | _do_inherit |
Base class for the breeding (and mating) life cycle events.
This class registers the whole set of basic mating parameters. Sets the function pointers for the mating system, fecundity and sex-ratio models, and breeding conditions checker (mostly checks for state of individual containers).
LCE_Breed_base::LCE_Breed_base | ( | ) |
References SimComponent::add_parameter(), BOOL, DBL, INT, setFecundity(), setMatingSystem(), setSexRatio(), and STR.
|
inlinevirtual |
Individual * LCE_Breed_base::breed | ( | Individual * | mother, |
Individual * | father, | ||
unsigned int | LocalPatch | ||
) |
Makes a new individual with the right parents.
Calls IndFactory::makeNewIndividual. The sex of the offspring is determined by a call to getOffsprgSex(). Recombination and mutation are done later, in the makeOffspring() procedure.
mother | pointer to the mother |
father | pointer to the father |
LocalPatch | index of the natal patch |
References LifeCycleEvent::_popPtr, getOffsprgSex(), and IndFactory::makeNewIndividual().
Referenced by setMatingSystem().
Individual * LCE_Breed_base::breed_cloning | ( | Individual * | mother, |
Individual * | father, | ||
unsigned int | LocalPatch | ||
) |
Makes a new individual by doing a deep copy of the mother (copies the mother's genes into the offspring).
Calls IndFactory::getNewIndividual() and then copy the mother into the new offspring.
mother | pointer to the mother |
father | pointer to the father (of no use here) |
LocalPatch | index of the natal patch |
References _do_inherit, LifeCycleEvent::_popPtr, Individual::getID(), IndFactory::getNewIndividual(), getOffsprgSex(), IndFactory::makeNewIndividual(), Individual::reset_counters(), Individual::setAge(), Individual::setFather(), Individual::setFatherID(), Individual::setHome(), Individual::setIsSelfed(), Individual::setMother(), and Individual::setMotherID().
Referenced by LCE_Breed_Disperse::mate_cloning(), and setMatingSystem().
|
inline |
Checks whether mating will take place in the current patch when mating is cloning.
Only females must be present. Males containers are flushed if not empty.
thePatch | the focal patch |
References LifeCycleEvent::_popPtr, ADLTx, FEM, Patch::flush(), MAL, and Patch::size().
Referenced by setMatingSystem().
|
inline |
Checks if any mating will take place in the patch passed as argument.
Is called prior to breeding in each patch. Calls the check function using its pointer.
thePatch | the focal patch |
References CheckMatingConditionFuncPtr.
Referenced by LCE_Breed_Selection::execute(), NonWrightFisherPopulation(), LCE_Breed_Quanti::NonWrightFisherPopulation(), WrightFisherPopulation(), and LCE_Breed_Quanti::WrightFisherPopulation().
|
inline |
Checks whether mating will take place in the current patch when mating is not selfing or cloning.
Males and females must be present in the patch for mating to occur.
thePatch | the focal patch |
References ADLTx, FEM, MAL, and Patch::size().
Referenced by setMatingSystem().
|
inline |
Checks whether mating will take place in the current patch when mating is polygynous.
Males and females must be present in the patch for mating to occur.
thePatch | the focal patch |
References _alpha_male, ADLTx, FEM, MAL, Patch::size(), and RAND::Uniform().
Referenced by setMatingSystem().
|
inline |
Checks whether mating will take place in the current patch when mating is selfing.
Only females must be present.
thePatch | the focal patch |
References LifeCycleEvent::_popPtr, ADLTx, FEM, Patch::flush(), MAL, and Patch::size().
Referenced by setMatingSystem().
|
inline |
Calls the breeding function unsing its pointer.
Used to distinguish cloning from other mating systems.
References DoBreedFuncPtr.
Referenced by LCE_Breed_Selection::do_breed_selection_FecFitness(), LCE_Breed_Selection::do_breed_selection_OffSurvival(), LCE_Breed_Selection::do_breed_selection_WrightFisher_1sex(), LCE_Breed_Selection::do_breed_selection_WrightFisher_2sex(), NonWrightFisherPopulation(), LCE_Breed_Quanti::NonWrightFisherPopulation(), WrightFisherPopulation(), and LCE_Breed_Quanti::WrightFisherPopulation().
|
inline |
References _do_inherit.
Referenced by makeOffspring(), and LCE_Breed_Selection::makeOffspringWithSelection().
|
inline |
Returns a pointer to a male with same index as mother (if available) from the focal patch.
If the male is not available, one is drawn randomly from the patch.
thePatch | the focal patch. |
mother | the mother to mate with (unused here) |
motherIndex | index of the mother in the patch adult female container |
References ADLTx, Patch::get(), MAL, RandomMating(), and Patch::size().
Referenced by setMatingSystem().
|
inline |
Returns a pointer to the alpha male of the patch.
The alpha male of a patch is set in the LCE_Breed_base::checkPolygyny function called before mating.
thePatch | the focal patch. |
mother | the mother to mate with (unused here). |
motherIndex | index of the mother in the patch adult female container (unused here) |
References _alpha_male, ADLTx, Patch::get(), and MAL.
Referenced by partialPolyginy(), and setMatingSystem().
|
inline |
Returns a pointer to one of the first _mating_males males of the patch.
thePatch | the focal patch. |
mother | the mother to mate with (unused here). |
motherIndex | index of the mother in the patch adult female container (unused here) |
References _mating_males, ADLTx, Patch::get(), MAL, Patch::size(), and RAND::Uniform().
Referenced by partialPolyginy_manyMales(), and setMatingSystem().
|
inline |
Returns the mother pointer.
thePatch | the focal patch. |
mother | the mother to mate with (returned here) |
motherIndex | index of the mother in the patch adult female container (unused here) |
Referenced by setMatingSystem().
|
inlinevirtual |
Calls the mating function according to the model chosen using the function pointer, used to get the father from the mother in a patch.
thePatch | pointer to the focal patch where mating is taking place |
mother | pointer to the mother, returned when mating is done by self-fertilization or cloning |
motherIndex | index of the mother in the current patch female container, used in the polyginy an monoginy mating systems |
References MatingFuncPtr.
Referenced by LCE_Breed_Selection::do_breed_selection_FecFitness(), LCE_Breed_Selection::do_breed_selection_OffSurvival(), NonWrightFisherPopulation(), LCE_Breed_Quanti::NonWrightFisherPopulation(), LCE_Breed_Wolbachia::wolbachia_model_1(), LCE_Breed_Wolbachia::wolbachia_model_2(), WrightFisherPopulation(), and LCE_Breed_Quanti::WrightFisherPopulation().
|
inline |
References FecundityFuncPtr.
|
inline |
References FecundityFuncPtr, and TMatrix::get().
Referenced by LCE_Breed_Selection::do_breed_selection_FecFitness(), LCE_Breed_Selection::do_breed_selection_OffSurvival(), NonWrightFisherPopulation(), LCE_Breed_Quanti::NonWrightFisherPopulation(), LCE_Breed_Wolbachia::wolbachia_model_1(), and LCE_Breed_Wolbachia::wolbachia_model_2().
|
inline |
Referenced by setFecundity().
|
inline |
References _sd_fecundity, and RAND::Gaussian().
Referenced by setFecundity().
|
inline |
References _sd_fecundity, and RAND::LogNormal().
Referenced by setFecundity().
|
inline |
References _mating_proportion.
Referenced by LCE_Breed_Disperse::mate_selfing(), and LCE_Breed_Disperse::setParameters().
|
inline |
References _mating_system.
Referenced by LCE_Breed_Quanti::NonWrightFisherPopulation(), and LCE_Breed_Disperse::setParameters().
|
inline |
References _mean_fecundity, and TMatrix::get().
Referenced by LCE_Breed_Selection::do_breed_selection_FecFitness(), LCE_Breed_Disperse::fixedFecundityGrowth(), LCE_Breed_Selection::setParameters(), LCE_Breed_Wolbachia::setParameters(), LCE_Breed_Disperse::stochasticFecundityGrowth(), and LCE_Breed_Wolbachia::wolbachia_model_2().
|
inline |
References GetOffsprgSex.
Referenced by breed(), and breed_cloning().
|
inline |
sex_t LCE_Breed_base::getOffsprgSexFixed | ( | ) |
References RAND::RandBool().
Referenced by setSexRatio().
|
inline |
References RAND::RandBool().
Referenced by setSexRatio().
|
inline |
|
inline |
References RAND::Poisson().
Referenced by setFecundity().
Individual * LCE_Breed_base::makeOffspring | ( | Individual * | ind | ) |
Last step of the breeding process, does inheritance and mutation of the parents' genes.
Calls Individual::create(do_inherit, do_mutate) with do_inherit set following the local _do_inherit value. Updates the parent's fecundity counters. A breeding session looks like that:
ind | the offspring, as returned by the do_breed function. |
References Individual::create(), Individual::DidHaveABaby(), doInheritance(), Individual::getFather(), Individual::getMother(), and Individual::getPedigreeClass().
Referenced by LCE_Breed_Disperse::do_breed_disperse(), LCE_Breed_Selection::do_breed_selection_FecFitness(), LCE_Breed_Selection::do_breed_selection_WrightFisher_1sex(), LCE_Breed_Selection::do_breed_selection_WrightFisher_2sex(), NonWrightFisherPopulation(), LCE_Breed_Quanti::NonWrightFisherPopulation(), WrightFisherPopulation(), and LCE_Breed_Quanti::WrightFisherPopulation().
void LCE_Breed_base::NonWrightFisherPopulation | ( | ) |
References _mating_system, _mean_fecundity, LifeCycleEvent::_popPtr, Patch::add(), ADLTx, checkMatingCondition(), do_breed(), FEM, Patch::get(), TMatrix::get(), getFatherPtr(), getFecundity(), Metapop::getPatch(), Metapop::getPatchNbr(), Individual::getSex(), makeOffspring(), message(), OFFSPRG, OFFSx, Individual::setFecundity(), Metapop::size(), and Patch::size().
Referenced by setMatingSystem().
|
inline |
Returns a pointer to a male with same index as mother (if available) from the focal patch.
If the male is not available or _mating_proportion != 1, one is drawn randomly from the patch.
thePatch | the focal patch. |
mother | the mother to mate with (unused here) |
motherIndex | index of the mother in the patch adult female container |
References _mating_proportion, ADLTx, Patch::get(), MAL, RandomMating(), Patch::size(), and RAND::Uniform().
Referenced by setMatingSystem().
|
inline |
Returns a pointer to a male from a patch chosen at random if _mating_proportion != 1, or the first male otherwise.
thePatch | the focal patch. |
mother | the mother to mate with (unused here). |
motherIndex | index of the mother in the patch adult female container (unused here) |
References _mating_proportion, fullPolyginy(), RandomMating(), and RAND::Uniform().
Referenced by setMatingSystem().
|
inline |
Returns a pointer to a male from a patch chosen at random if _mating_proportion != 1, or one of the _mating_males first males otherwise.
thePatch | the focal patch. |
mother | the mother to mate with (unused here). |
motherIndex | index of the mother in the patch adult female container (unused here) |
References _mating_proportion, fullPolyginy_manyMales(), RandomMating(), and RAND::Uniform().
Referenced by setMatingSystem().
|
inline |
Returns the mother pointer or a random female if _mating_proportion != 1.
thePatch | the focal patch. |
mother | the mother to mate with (returned here) |
motherIndex | index of the mother in the patch adult female container (unused here) |
References _mating_proportion, ADLTx, FEM, Patch::get(), Patch::size(), and RAND::Uniform().
Referenced by setMatingSystem().
|
inline |
Returns a random female from the patch, will be the same mother with probability 1/N (Wright-Fisher model).
thePatch | the focal patch. |
mother | the mother to mate with (unused here) |
motherIndex | index of the mother in the patch adult female container (unused here) |
References ADLTx, FEM, Patch::get(), Patch::size(), and RAND::Uniform().
Referenced by setMatingSystem().
|
inline |
Returns a pointer to a male drawn randomly from a patch.
thePatch | the focal patch. |
mother | the mother to mate with (unused here) |
motherIndex | index of the mother in the patch adult female container (unused here) |
References ADLTx, Patch::get(), MAL, Patch::size(), and RAND::Uniform().
Referenced by fullMonoginy(), partialMonoginy(), partialPolyginy(), partialPolyginy_manyMales(), and setMatingSystem().
bool LCE_Breed_base::setFecundity | ( | ) |
References _mean_fecundity, LifeCycleEvent::_popPtr, _sd_fecundity, error(), FecundityFuncPtr, TMatrix::get(), SimComponent::get_parameter(), SimComponent::get_parameter_value(), Param::getArg(), getFixedFecundity(), getGaussianFecundity(), getLogNormalFecundity(), Param::getMatrix(), Metapop::getPatchNbr(), getPoissonFecundity(), TMatrix::ncols(), TMatrix::nrows(), TMatrix::reset(), and TMatrix::set().
Referenced by LCE_Breed::execute(), LCE_Breed_Quanti::execute(), LCE_Breed_base(), and setParameters().
bool LCE_Breed_base::setMatingSystem | ( | ) |
References _do_inherit, _mating_males, _mating_proportion, _mating_system, SimComponent::_paramSet, LifeCycleEvent::_popPtr, breed(), breed_cloning(), checkCloning(), CheckMatingConditionFuncPtr, checkNoSelfing(), checkPolygyny(), checkSelfing(), DoBreedFuncPtr, fatal(), fullMonoginy(), fullPolyginy(), fullPolyginy_manyMales(), fullSelfing(), SimComponent::get_parameter(), SimComponent::get_parameter_value(), ParamSet::getValue(), Param::isSet(), ParamSet::isSet(), MatingFuncPtr, NonWrightFisherPopulation(), partialMonoginy(), partialPolyginy(), partialPolyginy_manyMales(), partialSelfing(), PopModelFuncPtr, random_hermaphrodite(), RandomMating(), and WrightFisherPopulation().
Referenced by LCE_Breed_base(), and setParameters().
|
virtual |
Implements SimComponent.
Reimplemented in LCE_Breed, LCE_Breed_Disperse, LCE_Breed_Selection, LCE_Breed_Selection_Disperse, LCE_Breed_Quanti, and LCE_Breed_Wolbachia.
References setFecundity(), setMatingSystem(), and setSexRatio().
Referenced by LCE_Breed::setParameters(), LCE_Breed_Disperse::setParameters(), LCE_Breed_Selection::setParameters(), LCE_Breed_Quanti::setParameters(), and LCE_Breed_Wolbachia::setParameters().
bool LCE_Breed_base::setSexRatio | ( | ) |
References _mating_system, error(), SimComponent::get_parameter(), GetOffsprgSex, getOffsprgSexCloning(), getOffsprgSexFixed(), getOffsprgSexRandom(), and getOffsprgSexSelfing().
Referenced by LCE_Breed_base(), and setParameters().
void LCE_Breed_base::WrightFisherPopulation | ( | ) |
References LifeCycleEvent::_popPtr, Patch::add(), ADLTx, checkMatingCondition(), do_breed(), FEM, Patch::get(), Patch::get_K(), getFatherPtr(), Metapop::getPatch(), Metapop::getPatchNbr(), makeOffspring(), message(), OFFSPRG, OFFSx, Individual::setSex(), Metapop::size(), Patch::size(), and RAND::Uniform().
Referenced by setMatingSystem().
|
private |
Referenced by checkPolygyny(), and fullPolyginy().
|
private |
Referenced by breed_cloning(), doInheritance(), and setMatingSystem().
|
private |
Referenced by fullPolyginy_manyMales(), and setMatingSystem().
|
private |
Referenced by getMatingProportion(), partialMonoginy(), partialPolyginy(), partialPolyginy_manyMales(), partialSelfing(), and setMatingSystem().
|
private |
Referenced by getMatingSystem(), NonWrightFisherPopulation(), setMatingSystem(), and setSexRatio().
|
protected |
|
private |
Referenced by getGaussianFecundity(), getLogNormalFecundity(), and setFecundity().
|
private |
Referenced by checkMatingCondition(), and setMatingSystem().
|
private |
Referenced by do_breed(), and setMatingSystem().
|
private |
Referenced by getFecundity(), and setFecundity().
|
private |
Referenced by getOffsprgSex(), and setSexRatio().
|
private |
Referenced by getFatherPtr(), and setMatingSystem().
|
protected |
Referenced by LCE_Breed::execute(), and setMatingSystem().