file Core/core.hpp
[No description available] More…
Namespaces
Name |
---|
Gambit TODO: see if we can use this one: |
Classes
Name | |
---|---|
class | Gambit::gambit_core Master driver class for a GAMBIT scan. |
Detailed Description
Author:
- Pat Scott
- Tomas Gonzalo (gonzalo@physik.rwth-aachen.de)
- Patrick Stoecker (stoecker@physik.rwth-aachen.de)
Date:
- 2013 Aug
- 2014 Feb, Aug
- 2021 Sep
- 2023 May
GAMBIT Core driver class.
Authors (add name and date if you modify):
Source code
// GAMBIT: Global and Modular BSM Inference Tool
// *********************************************
/// \file
///
/// GAMBIT Core driver class.
///
/// *********************************************
///
/// Authors (add name and date if you modify):
///
/// \author Pat Scott
/// \date 2013 Aug
/// \date 2014 Feb, Aug
///
/// \author Tomas Gonzalo
/// (gonzalo@physik.rwth-aachen.de)
/// \date 2021 Sep
///
/// \author Patrick Stoecker
/// (stoecker@physik.rwth-aachen.de)
/// \date 2023 May
///
/// *********************************************
#ifndef __gambit_core_hpp__
#define __gambit_core_hpp__
#include <map>
#include <vector>
#include "gambit/Backends/backend_info.hpp"
#include "gambit/Core/yaml_description_database.hpp"
#include "gambit/Elements/functors.hpp"
#include "gambit/Models/models.hpp"
#include "gambit/Utils/util_types.hpp"
#include "yaml-cpp/yaml.h"
namespace Gambit
{
/// Master driver class for a GAMBIT scan.
class gambit_core
{
private:
/// Internal typedefs to keep things readable
/// @{
typedef std::vector<functor *> fVec;
typedef std::vector<primary_model_functor *> pmfVec;
typedef std::map<str, primary_model_functor *> pmfMap;
/// @}
/// Internal model claw pointer
const Models::ModelFunctorClaw *modelInfo;
/// Internal backend info pointer
const Backends::backend_info *backendData;
/// Set of all declared modules
std::set<str> modules;
/// Map from module names to their citation keys
std::map<str, str> module_citation_keys;
/// Map from backend names to a list of all registered versions of the backend
std::map<str, std::set<str>> backend_versions;
/// Map from backend name and versions, to their citation keys
std::map<sspair, str> backend_citation_keys;
/// List of all declared capabilities
std::set<str> capabilities;
/// List of all declared models
std::set<str> models;
/// List of all declared module functors
fVec functorList;
/// List of all module functors that are declared as nested (i.e. require loop managers)
fVec nestedFunctorList;
/// List of all declared backend functors
fVec backendFunctorList;
/// List of all declared primary model functors
pmfVec primaryModelFunctorList;
/// A map of all user-activated primary model functors
pmfMap activeModelFunctorList;
/// Filename of the file from which to harvest capability descriptions
const str input_capability_descriptions;
/// Filename of the file from which to harvest model descriptions
const str input_model_descriptions;
/// Precision to use for cout
const int outprec;
/// Flag specifying whether command line options have been processed yet.
bool processed_options;
/// Basic diagnostic functions
/// @{
void module_diagnostic();
void backend_diagnostic();
void capability_diagnostic();
void model_diagnostic();
void scanner_diagnostic();
void test_function_diagnostic();
void prior_diagnostic();
/// Free-form diagnostic functions
/// @{
void free_form_diagnostic(const str&);
void ff_module_diagnostic(const str &, str&);
void ff_module_function_diagnostic(const str &, str&);
void ff_backend_diagnostic(const str &, str&);
void ff_backend_function_diagnostic(const str &, str&);
void ff_capability_diagnostic(const str &, str&);
void ff_model_diagnostic(const str &, str&);
void ff_scanner_diagnostic(const str &, str&);
void ff_test_function_diagnostic(const str &, str&);
void ff_prior_diagnostic(const str &, str&);
/// @}
/// Compute the status of a given backend
str backend_status(const str &, const str &, bool &);
/// Launch MPI and return the rank, for limiting diagnostic output to master node.
int launch_diagnostic_MPI();
/// Quit MPI used for diagnostic mode.
void quit_diagnostic_MPI();
public:
/// Constructor
gambit_core(const Models::ModelFunctorClaw &, const Backends::backend_info &);
/// Destructor
~gambit_core() {}
/// Flags set by command line options
/// Flag to trigger dependency resolver to report functor run order
int show_runorder;
/// Flag to show the list of required backends
int show_backends;
/// Flag to trigger "resume" mode
bool resume;
/// Verbosity mode
// Set 'true' by '--verbose'
bool verbose_flag;
/// Flag recording whether an inifile has been supplied
bool found_inifile;
/// Command-line info function
void bail(int mpirank = -1);
/// Process default command line options
str process_primary_options(int, char **);
/// Diagnostics function
str run_diagnostic(int, char **);
/// Add a new module to modules list
void registerModule(str, str);
/// Register a new backend
void registerBackend(str, str, str);
/// Add a new module functor to functorList
void registerModuleFunctor(functor &);
/// Add a new module functor to nestFunctorList
void registerNestedModuleFunctor(functor &);
/// Add a new backend functor to backendFunctorList
void registerBackendFunctor(functor &);
/// Add a new primary model functor to primaryModelFunctorList
void registerPrimaryModelFunctor(primary_model_functor &);
/// Add entries to the map of activated primary model functors
void registerActiveModelFunctors(const pmfVec &);
/// Get a reference to the list of module functors
const fVec &getModuleFunctors() const;
/// Get a reference to the list of nested module functors
const fVec &getNestedModuleFunctors() const;
/// Get a reference to the list of backend model functors
const fVec &getBackendFunctors() const;
/// Get a reference to the list of primary model functors
const pmfVec &getPrimaryModelFunctors() const;
/// Get a reference to the map of all user-activated primary model functors
const pmfMap &getActiveModelFunctors() const;
/// Get a reference to the map of module citation keys
const std::map<str,str> &getModuleCitationKeys() const;
/// Get a reference to the map of backend citation keys
const std::map<sspair, str> &getBackendCitationKeys() const;
/// Tell the module functors which backends are actually present
void accountForMissingClasses() const;
/// Get the description (and other info) of the named item from the capability database
capability_info get_capability_info(const str &) const;
/// Get the description (and other info) of the named item from the model database
model_info get_model_info(const str &) const;
/// Getter for precision to use for cout
int get_outprec() const;
/// Check the named database for conflicts and missing descriptions
void check_databases();
/// set to true if capability descriptions missing
bool missing_capability_description;
/// Check for missing capability descriptions (after reading in runtime flags)
void check_capability_descriptions();
/// Vector of all capability_info objects
std::vector<capability_info> capability_dbase;
/// Vector of all model_info objects
std::vector<model_info> model_dbase;
};
} // namespace Gambit
#endif // defined __gambit_core_hpp__
Updated on 2024-07-18 at 13:53:34 +0000