file test_functions/examples.cpp
[No description available] More…
Functions
Name | |
---|---|
objective_plugin(uniform , version(1, 0, 0) ) | |
objective_plugin(gaussian , version(1, 0, 0) ) | |
objective_plugin(normal_example , version(1, 0, 0) ) | |
objective_plugin(EggBox , version(1, 0, 0) ) | |
objective_plugin(flat_prior , version(1, 0, 0) ) |
Detailed Description
Author: Gregory Martinez (gregory.david.martinez@gmail.com)
Date: 2014 MAY
Base functions objects for use in GAMBIT.
Authors (add name and date if you modify):
Functions Documentation
function objective_plugin
objective_plugin(
uniform ,
version(1, 0, 0)
)
function objective_plugin
objective_plugin(
gaussian ,
version(1, 0, 0)
)
function objective_plugin
objective_plugin(
normal_example ,
version(1, 0, 0)
)
function objective_plugin
objective_plugin(
EggBox ,
version(1, 0, 0)
)
function objective_plugin
objective_plugin(
flat_prior ,
version(1, 0, 0)
)
Source code
// GAMBIT: Global and Modular BSM Inference Tool
// *********************************************
/// \file
///
/// Base functions objects for use in GAMBIT.
///
/// *********************************************
///
/// Authors (add name and date if you modify):
///
/// \author Gregory Martinez
/// (gregory.david.martinez@gmail.com)
/// \date 2014 MAY
///
/// *********************************************
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <utility>
#include <algorithm>
#include "gambit/ScannerBit/objective_plugin.hpp"
#include "gambit/ScannerBit/cholesky.hpp"
objective_plugin(uniform, version(1,0,0))
{
double plugin_main (std::unordered_map<std::string, double> /*&map*/)
{
return 0;
}
}
objective_plugin(gaussian, version(1, 0, 0))
{
Gambit::Cholesky chol;
std::vector <double> mean;
std::vector<std::vector<double>> cov;
unsigned int dim;
plugin_constructor
{
dim = get_keys().size();
std::vector<std::vector<double>> cov(dim, std::vector<double>(dim, 0));
cov = get_inifile_value<std::vector<std::vector<double>>> ("cov", cov);
if (cov.size() != dim)
{
scan_err << "Gaussian: Coverance matrix size of " << cov.size() << " is different than the parameter size of " << dim << scan_end;
}
for (std::vector<std::vector<double>>::iterator it = cov.begin(); it != cov.end(); it++)
{
if (it->size() != cov.size())
{
scan_err << "Gaussian: Coverance matrix is not square" << scan_end;
}
}
if (!chol.EnterMat(cov))
{
std::vector <double> sigs = get_inifile_value <std::vector <double>> ("sigs", std::vector<double>(dim, 1.0));
if (sigs.size() != dim)
{
scan_err << "Gaussian: Sigma vector size of " << sigs.size() << " is different than the parameter size of " << dim << scan_end;
}
else
{
for (int i = 0, end = sigs.size(); i < end; i++)
{
cov[i][i] = sigs[i]*sigs[i];
}
}
}
mean = get_inifile_value<std::vector <double>> ("mean", std::vector <double>(dim, 0));
if (!chol.EnterMat(cov))
{
scan_err << "Gaussian: Covariance matrix is not positive definite." << scan_end;
}
}
double plugin_main(std::unordered_map<std::string, double> &map)
{
static std::vector<double> params(get_keys().size());
print_parameters(map);
auto it_p = params.begin();
for (auto it = get_keys().begin(), end = get_keys().end(); it != end; ++it, ++it_p)
{
*it_p = map[*it];
}
return -chol.Square(params, mean)/2.0;
}
}
objective_plugin(normal_example, version(1, 0, 0))
{
plugin_constructor
{
int dim = get_keys().size();
if (dim != 2)
{
scan_err << "Normal: Need to have two parameters." << scan_end;
}
}
constexpr double SQ(double a) {return a*a;}
double plugin_main(std::unordered_map<std::string, double> &map)
{
print_parameters(map);
static const int N = 20;
static const double samples [] = {
21.32034213, 20.39713359, 19.27957134, 19.81839231,
20.89474358, 20.11058756, 22.38214557, 21.41479798,
23.49896999, 17.55991187, 24.9921142 , 23.90166585,
20.97913273, 18.59180551, 23.49038072, 19.08201714,
21.19538797, 16.42544039, 18.93568891, 22.40925288
};
double ret = 0.0;
for (int i = 0; i < N; i++)
ret += SQ((samples[i] - map["Normal::mu"])/map["Normal::sigma"]);
return -ret/2.0 - N*std::log(map["Normal::sigma"]);
}
}
objective_plugin(EggBox, version(1, 0, 0))
{
std::pair <double, double> length;
unsigned int dim;
plugin_constructor
{
dim = get_keys().size();
if (dim != 2)
{
scan_err << "EggBox: Need to have two parameters." << scan_end;
}
length = get_inifile_value<std::pair<double, double> > ("length", std::pair<double, double>(10.0, 10.0));
}
double plugin_main(std::unordered_map<std::string, double> &map)
{
print_parameters(map);
double params[2];
params[0] = map[get_keys()[0]]*length.first;
params[1] = map[get_keys()[1]]*length.second;
return 5.0*std::log(2.0 + std::cos(params[0]*M_PI_2)*std::cos(params[1]*M_PI_2));
}
}
objective_plugin(flat_prior, version(1, 0, 0))
{
std::vector<std::string> keys;
std::pair<double, double> range;
plugin_constructor
{
keys = get_keys();
set_dimension(keys.size());
range = get_inifile_value<decltype(range)>("range", decltype(range)(0.0, 1.0));
}
void plugin_main(const std::vector<double> &unitpars, std::unordered_map<std::string, double> &outputMap)
{
auto u_it = unitpars.begin();
for (auto it = keys.begin(), end = keys.end(); it != end; it++)
outputMap[*it] = range.first + (range.second - range.first)*(*u_it++);
}
double plugin_main(const std::vector<double>&)
{
return 0.0;
}
}
Updated on 2024-07-18 at 13:53:33 +0000