e693f153 |
// Copyright 2013, 2014, 2015 Ramon Diaz-Uriarte
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef _BNB_COMMON_H_
#define _BNB_COMMON_H_
#include<Rcpp.h>
|
50a94207 |
#include "common_classes.h"
#include "debug_common.h"
// #include "new_restrict.h" // for the TypeModel enum
// // Simple custom exception for exceptions that lead to re-runs.
// class rerunExcept: public std::runtime_error {
// public:
// rerunExcept(const std::string &s) :
// std::runtime_error(s) {}
// };
// struct spParamsP {
// double popSize;
// double birth;
// double death;
// double W;
// double R;
// double mutation;
// double timeLastUpdate;
// std::multimap<double, int>::iterator pv;
// double absfitness; //convenient for Beerenwinkel
// int numMutablePos; //for mutator if need update of mutation
// };
|
e693f153 |
inline void W_f_st(spParamsP& spP){
spP.W = spP.death + spP.birth + spP.mutation;
}
inline void R_f_st(spParamsP& spP) {
spP.R = sqrt( pow( spP.birth - spP.death, 2) +
( 2.0 * (spP.birth + spP.death) +
spP.mutation) * spP.mutation );
}
inline double pE_f_st(double& pM, const spParamsP& spP){
double pE = (spP.death * (1.0 - pM ) )/(spP.W - spP.death - spP.birth * pM );
if( !std::isfinite(pE) ) {
|
50a94207 |
DP2(spP.death); DP2(spP.birth); DP2(pM); DP2(spP.W);
DP2(spP.mutation);
std::string error_message = R"(pE.f: pE not finite.
This is expected to happen when mutationPropGrowth = TRUE
and you have have an initMutant with death >> birth,
as that inevitably leads to net birth rate of 0
and mutation rate of 0)";
throw std::range_error(error_message);
|
e693f153 |
}
return pE;
}
inline double pB_f_st(const double& pE,
const spParamsP& spP) {
return (spP.birth * pE)/spP.death;
}
void mapTimes_updateP(std::multimap<double, int>& mapTimes,
std::vector<spParamsP>& popParams,
const int index,
const double time);
void getMinNextMutationTime4(int& nextMutant, double& minNextMutationTime,
const std::multimap<double, int>& mapTimes);
void fill_SStats(Rcpp::NumericMatrix& perSampleStats,
const std::vector<double>& sampleTotPopSize,
const std::vector<double>& sampleLargestPopSize,
const std::vector<double>& sampleLargestPopProp,
const std::vector<int>& sampleMaxNDr,
const std::vector<int>& sampleNDrLargestPop);
void print_spP(const spParamsP& spP);
double pM_f_st(const double& t, const spParamsP& spP);
double ti_nextTime_tmax_2_st(const spParamsP& spP,
const double& currentTime,
const double& tSample,
int& ti_dbl_min,
int& ti_e3);
double Algo2_st(const spParamsP& spP,
|
50a94207 |
const double& ti,
const int& mutationPropGrowth);
|
e693f153 |
double Algo3_st(const spParamsP& spP, const double& t);
void precissionLoss();
void init_tmpP(spParamsP& tmpParam);
|
fc38a875 |
// double returnMFE(double& e1,
// const std::string& typeFitness);
// double returnMFE(double& e1,
// const TypeModel typeModel);
double returnMFE_new(double& en1,
const std::string& typeFitness);
double returnMFE_new(double& en1,
const TypeModel typeModel);
// void computeMcFarlandError(double& e1,
// double& n_0,
// double& tps_0,
// const std::string& typeFitness,
// const double& totPopSize,
// const double& K);
// void computeMcFarlandError(double& e1,
// double& n_0,
// double& tps_0,
// const TypeModel typeModel,
// const double& totPopSize,
// const double& K);
void computeMcFarlandError_new(double& en1,
double& en1sc,
double& totPopSize_previous,
double& DA_previous,
const TypeModel typeModel,
const double& totPopSize,
const double& K);
void computeMcFarlandError_new(double& en1,
double& en1sc,
double& totPopSize_previous,
double& DA_previous,
const std::string& typeFitness,
const double& totPopSize,
const double& K);
|
5d9775a3 |
|
e693f153 |
void updateRatesMcFarland(std::vector<spParamsP>& popParams,
double& adjust_fitness_MF,
const double& K,
const double& totPopSize);
void updateRatesMcFarlandLog(std::vector<spParamsP>& popParams,
double& adjust_fitness_MF,
const double& K,
const double& totPopSize);
void updateRatesMcFarland0(std::vector<spParamsP>& popParams,
double& adjust_fitness_MF,
const double& K,
const double& totPopSize,
|
debcf5f5 |
const int& mutationPropGrowth,
|
e693f153 |
const double& mu);
void updateRatesBeeren(std::vector<spParamsP>& popParams,
double& adjust_fitness_B,
const double& initSize,
const double& currentTime,
const double& alpha,
const double& totPopSize,
|
debcf5f5 |
const int& mutationPropGrowth,
|
e693f153 |
const double& mu);
|
f9a38e24 |
void detect_ti_duplicates(const std::multimap<double, int>& m,
const double ti,
const int spcies);
|
e693f153 |
#endif
|