Program Listing for File bi_tab_sel_probability.hpp
↰ Return to documentation for file (cosm/ta/bi_tab_sel_probability.hpp
)
#pragma once
/*******************************************************************************
* Includes
******************************************************************************/
#include <string>
#include "rcppsw/er/client.hpp"
#include "rcppsw/math/rng.hpp"
#include "rcppsw/math/sigmoid.hpp"
#include "rcppsw/rcppsw.hpp"
/*******************************************************************************
* Namespaces/Decls
******************************************************************************/
namespace cosm::ta {
namespace ds { class bi_tab; }
namespace config { struct src_sigmoid_sel_config; }
/*******************************************************************************
* Class Definitions
******************************************************************************/
class bi_tab_sel_probability : public rer::client<bi_tab_sel_probability>,
public rmath::sigmoid {
public:
static constexpr const double kHARWELL2019_REACTIVITY = 8.0;
static constexpr const double kHARWELL2019_OFFSET = 1.25;
static constexpr const double kHARWELL2019_GAMMA = 1.0;
static inline const std::string kMethodHarwell2019 = "harwell2019";
static inline const std::string kMethodRandom = "random";
explicit bi_tab_sel_probability(const std::string& method);
explicit bi_tab_sel_probability(const config::src_sigmoid_sel_config* config);
const std::string& method(void) const { return mc_method; }
double
operator()(const ds::bi_tab* tab1, const ds::bi_tab* tab2, rmath::rng* rng);
private:
double calc_random(rmath::rng* rng);
double calc_harwell2019(const ds::bi_tab& tab1, const ds::bi_tab& tab2);
double calc_sigmoid(double ratio1, double ratio2) RCPPSW_PURE;
/* clang-format off */
const std::string mc_method;
/* clang-format on */
};
} /* namespace cosm::ta */