Program Listing for File SpecSimParameters.h¶
↰ Return to documentation for file (necsim/SpecSimParameters.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 SPECIATIONCOUNTER_SPECSIMPARAMETERS_H
#define SPECIATIONCOUNTER_SPECSIMPARAMETERS_H
#include <string>
#include <utility>
#include <vector>
#include "ConfigParser.h"
#include "custom_exceptions.h"
#include "double_comparison.h"
#include "parameters.h"
using namespace std;
namespace necsim
{
struct SpecSimParameters
{
bool use_spatial;
bool bMultiRun;
bool use_fragments;
string filename;
set<double> all_speciation_rates;
string samplemask;
string times_file;
set<double> all_times;
string fragment_config_file;
vector<ProtractedSpeciationParameters> protracted_parameters;
MetacommunitiesArray metacommunity_parameters;
SpecSimParameters() : use_spatial(false), bMultiRun(false), use_fragments(false), filename("none"),
all_speciation_rates(), samplemask("none"), times_file("null"), all_times(),
fragment_config_file("none"), protracted_parameters(), metacommunity_parameters()
{
}
SpecSimParameters(const string &fragment_config_file) : fragment_config_file(fragment_config_file)
{ }
void addSpeciationRate(const double &speciation_rate)
{
all_speciation_rates.insert(speciation_rate);
bMultiRun = all_speciation_rates.size() > 1;
}
void setup(string file_in, bool use_spatial_in, string sample_file, const string &use_fragments_in)
{
filename = std::move(file_in);
use_spatial = use_spatial_in;
samplemask = std::move(sample_file);
use_fragments = !(use_fragments_in == "F");
fragment_config_file = use_fragments_in;
}
void setup(string file_in, bool use_spatial_in, string sample_file, const vector<double> ×,
const string &use_fragments_in, vector<double> speciation_rates)
{
setup(file_in, use_spatial_in, sample_file, times, use_fragments_in);
for(const auto &speciation_rate : speciation_rates)
{
addSpeciationRate(speciation_rate);
}
}
void setup(string file_in, bool use_spatial_in, string sample_file, const vector<double> ×,
const string &use_fragments_in)
{
setup(file_in, use_spatial_in, sample_file, use_fragments_in);
if(times.empty() && all_times.empty())
{
times_file = "null";
all_times.insert(0.0);
}
else
{
for(const auto &time: times)
{
addTime(time);
}
}
}
void addMetacommunityParameters(const unsigned long &metacommunity_size_in,
const double &metacommunity_speciation_rate_in,
const string &metacommunity_option_in,
const unsigned long &metacommunity_reference_in)
{
MetacommunityParameters tmp_meta_parameters = MetacommunityParameters(0, metacommunity_size_in,
metacommunity_speciation_rate_in,
metacommunity_option_in,
metacommunity_reference_in);
if(!metacommunity_parameters.hasOption(tmp_meta_parameters))
{
metacommunity_parameters.addNew(tmp_meta_parameters);
}
else
{
stringstream ss;
ss << "Parameters already added for metacommunity with size " << metacommunity_size_in << ", ";
ss << "speciation rate " << metacommunity_speciation_rate_in << ", " << "using option ";
ss << metacommunity_option_in << " and reference " << metacommunity_reference_in << endl;
writeInfo(ss.str());
}
}
void importTimeConfig()
{
if(times_file == "null")
{
all_times.insert(0.0);
}
else
{
vector<string> tmpimport;
ConfigParser tmpconfig;
tmpconfig.setConfig(times_file, false);
tmpconfig.importConfig(tmpimport);
for(const auto &i : tmpimport)
{
all_times.insert(stod(i));
}
}
}
void wipe()
{
use_spatial = false;
bMultiRun = false;
use_fragments = false;
filename = "";
all_speciation_rates.clear();
samplemask = "";
times_file = "";
all_times.clear();
fragment_config_file = "";
protracted_parameters.clear();
metacommunity_parameters.clear();
}
void addTime(double time)
{
all_times.insert(time);
if(all_times.size() > 1)
{
times_file = "set";
}
}
void addProtractedParameters(double proc_spec_min, double proc_spec_max)
{
ProtractedSpeciationParameters tmp;
tmp.min_speciation_gen = proc_spec_min;
tmp.max_speciation_gen = proc_spec_max;
protracted_parameters.emplace_back(tmp);
}
};
}
#endif //SPECIATIONCOUNTER_SPECSIMPARAMETERS_H