Program Listing for File ProtractedTree.h

Return to documentation for file (necsim/ProtractedTree.h)

// This file is part of necsim project which is released under MIT license.
// See file **LICENSE.txt** or visit https://opensource.org/licenses/MIT) for full license details.
//
#include <vector>
#include <string>

#include "SpatialTree.h"

#ifndef PROTRACTED_SPATIAL_TREE_H
#define PROTRACTED_SPATIAL_TREE_H
namespace necsim
{
    class ProtractedTree : public virtual Tree
    {
    private:
        // Variables for the protracted speciation variables
        // The number of generations a lineage must exist before speciating.
        // Speciation is therefore not allowed before this time.
        // If this value is 0, it has no effect.
        double speciation_generation_min;
        // The number of generations a lineage can exist before speciating.
        // All remaining lineages are speciated at this time.
        // If this value is 0, it has no effect.
        double speciation_generation_max;
    public:

        ProtractedTree() : Tree(), speciation_generation_min(0.0), speciation_generation_max(0.0)
        {
            bIsProtracted = true;
        }

        bool calcSpeciation(const long double &random_number, const long double &speciation_rate,
                            const unsigned long &no_generations) override;

        void speciateLineage(const unsigned long &data_position) override;

        bool getProtracted() override;

        void setProtractedVariables(double speciation_gen_min, double speciation_gen_max) override;

        string getProtractedVariables() override;

        double getProtractedGenerationMin() override;

        double getProtractedGenerationMax() override;

        string protractedVarsToString() override;

        void applySpecRate(double sr, double t);
    };
}
#endif // PROTRACTED_SPATIAL_TREE_H