Program Listing for File SimulatedSpeciesAbundancesHandler.h¶
↰ Return to documentation for file (necsim/SimulatedSpeciesAbundancesHandler.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.
#ifndef SIMULATED_SPECIES_ABUNDANCES_H
#define SIMULATED_SPECIES_ABUNDANCES_H
#include <string>
#include <memory>
#include <map>
#include <vector>
#include <cmath>
#include <numeric>
#include "neutral_analytical.h"
#include "RNGController.h"
#include "custom_exceptions.h"
#include "double_comparison.h"
#include "SpeciesAbundancesHandler.h"
namespace na = neutral_analytical;
using namespace std;
namespace necsim
{
class SimulatedSpeciesAbundancesHandler : public virtual SpeciesAbundancesHandler
{
protected:
// Maps abundance values to a vector containing species ids
map<unsigned long, vector<unsigned long>> species_abundances;
// Maps abundance values to the maximum number of species expected to be contained.
map<unsigned long, unsigned long> species_richness_per_abundance;
// Maps cumulative probabilities of choosing each abundance to abundance values
shared_ptr<map<unsigned long, unsigned long>> cumulative_abundance_map;
// Total species number
double total_species_number;
unsigned long number_of_individuals;
public:
SimulatedSpeciesAbundancesHandler();
~SimulatedSpeciesAbundancesHandler() override = default;
unsigned long getRandomSpeciesID() override;
void setAbundanceList(const shared_ptr<map<unsigned long, unsigned long>> &abundance_list_in) override;
void setAbundanceList(shared_ptr<vector<unsigned long>> abundance_list_in) override;
void generateAbundanceTable(shared_ptr<vector<unsigned long>> abundance_list);
void generateCumulativeAbundances(shared_ptr<vector<unsigned long>> abundance_list);
unsigned long getRandomAbundanceOfIndividual();
};
}
#endif //SIMULATED_SPECIES_ABUNDANCES_H