gambit is hosted by Hepforge, IPPP Durham
GAMBIT  v1.5.0-2191-ga4742ac
a Global And Modular Bsm Inference Tool
Gambit::Scanner::Plugins::pluginInfo Class Reference

Container for all the plugin info from the inifile and Scannerbit. More...

#include <plugin_loader.hpp>

Collaboration diagram for Gambit::Scanner::Plugins::pluginInfo:

Public Member Functions

 pluginInfo ()
 
void iniFile (const Options &)
 Enter plugin inifile. More...
 
void printer_prior (printer_interface &, Priors::BasePrior &)
 
bool keep_running () const
 
void set_running (bool b)
 
bool func_calculating () const
 
void set_calculating (bool b)
 
void set_early_shutdown_in_progress ()
 
bool early_shutdown_in_progress () const
 
bool resume_mode () const
 
std::string temp_file_path ()
 
int getRank ()
 
template<typename... T>
void resume (const std::string &name, T &... data)
 resume function More...
 
void dump ()
 Dump contents for resume. More...
 
void dump (const std::string &)
 Dump contents for one plugin. More...
 
void save_alt_min_LogL_state () const
 Save persistence file to record that the alternative min_LogL value is in use for this scan. More...
 
void clear_alt_min_LogL_state () const
 Delete the persistence file if it exists (e.g. when starting a new run) More...
 
bool check_alt_min_LogL_state () const
 Check persistence file to see if we should be using the alternative min_LogL value. More...
 
const Plugin_Loaderoperator() ()
 Retrieve plugin data. More...
 
Plugin_Interface_Details operator() (const std::string &, const std::string &)
 Get plugin data for single plugin. More...
 
 ~pluginInfo ()
 

Private Member Functions

void set_resume (std::vector< __plugin_resume_base__ *> &)
 
template<typename U , typename... T>
void set_resume (std::vector< __plugin_resume_base__ *> &r_data, U &param, T &... params)
 
void get_resume (std::ifstream &)
 
template<typename U , typename... T>
void get_resume (std::ifstream &in, U &param, T &... params)
 
size_t get_size_of ()
 
template<typename U , typename... T>
size_t get_size_of (U &param, T &... params)
 

Private Attributes

bool keepRunning
 
bool funcCalculating
 
std::map< std::string, std::map< std::string, Proto_Plugin_Details > > selectedPlugins
 
Plugins::Plugin_Loader plugins
 
std::map< std::string, std::vector< __plugin_resume_base__ * > > resume_data
 
std::map< std::string, std::ifstream * > resume_streams
 
printer_interfaceprinter
 
Priors::BasePriorprior
 
Options options
 
std::string def_out_path
 
int MPIrank
 
bool earlyShutdownInProgress
 Flag to indicate if early shutdown is in progess (e.g. due to intercepted OS signal). When set to 'true' scanners should at minimum close off their output files, and if possible they should stop scanning and return control to GAMBIT (or whatever the host code might be). More...
 

Detailed Description

Container for all the plugin info from the inifile and Scannerbit.

Definition at line 135 of file plugin_loader.hpp.

Constructor & Destructor Documentation

◆ pluginInfo()

Gambit::Scanner::Plugins::pluginInfo::pluginInfo ( )

Definition at line 678 of file plugin_loader.cpp.

References MPIrank.

679  : keepRunning(true), funcCalculating(false), MPIrank(0)
680  #ifdef WITH_MPI
681  , scannerComm(NULL), MPIdata_is_init(false)
682  #endif
683  , earlyShutdownInProgress(false)
684  {}
bool earlyShutdownInProgress
Flag to indicate if early shutdown is in progess (e.g. due to intercepted OS signal). When set to &#39;true&#39; scanners should at minimum close off their output files, and if possible they should stop scanning and return control to GAMBIT (or whatever the host code might be).

◆ ~pluginInfo()

Gambit::Scanner::Plugins::pluginInfo::~pluginInfo ( )

Definition at line 670 of file plugin_loader.cpp.

671  {
672  for (auto it = resume_streams.begin(), end = resume_streams.end(); it != end; ++it)
673  {
674  delete it->second;
675  }
676  }
std::map< std::string, std::ifstream * > resume_streams

Member Function Documentation

◆ check_alt_min_LogL_state()

bool Gambit::Scanner::Plugins::pluginInfo::check_alt_min_LogL_state ( ) const

Check persistence file to see if we should be using the alternative min_LogL value.

Definition at line 665 of file plugin_loader.cpp.

References Gambit::Utils::file_exists().

Referenced by Gambit::Scanner::Function_Base< ret(args...)>::check_for_switch_to_alternate_min_LogL(), and Gambit::Scanner::Function_Base< ret(args...)>::Function_Base().

666  {
667  return Utils::file_exists(def_out_path+"/ALT_MIN_LOGL_IN_USE");
668  }
EXPORT_SYMBOLS bool file_exists(const std::string &filename)
Check if a file exists.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ clear_alt_min_LogL_state()

void Gambit::Scanner::Plugins::pluginInfo::clear_alt_min_LogL_state ( ) const

Delete the persistence file if it exists (e.g. when starting a new run)

Definition at line 654 of file plugin_loader.cpp.

References scan_end, and scan_err.

Referenced by Gambit::Scanner::Function_Base< ret(args...)>::Function_Base().

655  {
657  {
658  std::string state_fname(def_out_path+"/ALT_MIN_LOGL_IN_USE");
659  // Persistence file exists: delete it
660  if (remove(state_fname.c_str())) scan_err << "Failed to delete alternative min_LogL persistence file '" << state_fname << "'! Error was: " << strerror(errno) << scan_end;
661  }
662  }
#define scan_err
Defined to macros to output errors in the form: scan_err << "error" << scan_end; scan_warn << "warnin...
#define scan_end
bool check_alt_min_LogL_state() const
Check persistence file to see if we should be using the alternative min_LogL value.
Here is the caller graph for this function:

◆ dump() [1/2]

void Gambit::Scanner::Plugins::pluginInfo::dump ( )

Dump contents for resume.

Definition at line 611 of file plugin_loader.cpp.

References Gambit::Utils::ensure_path_exists(), Gambit::Printers::BaseBasePrinter::finalise(), and Gambit::Scanner::Plugins::Plugin_Loader::path.

Referenced by do_cleanup(), and Gambit::Scanner::resume_params_func::dump().

612  {
613  for (auto it = resume_data.begin(), end = resume_data.end(); it != end; ++it)
614  {
615  std::string path = Gambit::Utils::ensure_path_exists(def_out_path + "/temp_files/" + it->first);
616  std::ofstream out((path).c_str(), std::ofstream::binary);
617  for (auto v_it = it->second.begin(), v_end = it->second.end(); v_it != v_end; ++v_it)
618  {
619  (*v_it)->print(out);
620  }
621  }
622 
623  printer->finalise(true); //"true" flag for "abnormal" stop; i.e. run is not completely finished
624  // Debugging output
625  // #ifdef WITH_MPI
626  // std::cout << "rank " << getRank() <<": ";
627  // #endif
628  // std::cout << "Gambit has written resume data to disk, preparing to stop!" << std::endl;
629  }
virtual void finalise(bool abnormal=false)=0
Instruct printers that scan has finished and to perform cleanup.
std::map< std::string, std::vector< __plugin_resume_base__ * > > resume_data
EXPORT_SYMBOLS const str & ensure_path_exists(const str &)
Ensure that a path exists (and then return the path, for chaining purposes)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dump() [2/2]

void Gambit::Scanner::Plugins::pluginInfo::dump ( const std::string &  name)

Dump contents for one plugin.

Definition at line 631 of file plugin_loader.cpp.

References Gambit::Utils::ensure_path_exists(), and Gambit::Scanner::Plugins::Plugin_Loader::path.

632  {
633  auto it = resume_data.find(name);
634  if (it != resume_data.end())
635  {
636  std::string path = Gambit::Utils::ensure_path_exists(def_out_path + "/temp_files/" + name);
637  std::ofstream out((path).c_str(), std::ofstream::binary);
638  for (auto v_it = it->second.begin(), v_end = it->second.end(); v_it != v_end; ++v_it)
639  {
640  (*v_it)->print(out);
641  }
642  }
643  }
std::map< std::string, std::vector< __plugin_resume_base__ * > > resume_data
EXPORT_SYMBOLS const str & ensure_path_exists(const str &)
Ensure that a path exists (and then return the path, for chaining purposes)
Here is the call graph for this function:

◆ early_shutdown_in_progress()

bool Gambit::Scanner::Plugins::pluginInfo::early_shutdown_in_progress ( ) const
inline

Definition at line 193 of file plugin_loader.hpp.

Referenced by Gambit::Diver_1_0_0::objective(), Gambit::Diver_1_0_4::objective(), Gambit::Diver_1_0_2::objective(), Gambit::Scanner::Scan_Manager::Run(), Gambit::PostProcessor::PPDriver::run_main_loop(), and Gambit::Scanner::TWalk().

193 {return earlyShutdownInProgress;}
bool earlyShutdownInProgress
Flag to indicate if early shutdown is in progess (e.g. due to intercepted OS signal). When set to &#39;true&#39; scanners should at minimum close off their output files, and if possible they should stop scanning and return control to GAMBIT (or whatever the host code might be).
Here is the caller graph for this function:

◆ func_calculating()

bool Gambit::Scanner::Plugins::pluginInfo::func_calculating ( ) const
inline

Definition at line 190 of file plugin_loader.hpp.

◆ get_resume() [1/2]

void Gambit::Scanner::Plugins::pluginInfo::get_resume ( std::ifstream &  )
inlineprivate

Definition at line 165 of file plugin_loader.hpp.

165 {}

◆ get_resume() [2/2]

template<typename U , typename... T>
void Gambit::Scanner::Plugins::pluginInfo::get_resume ( std::ifstream &  in,
U &  param,
T &...  params 
)
inlineprivate

Definition at line 168 of file plugin_loader.hpp.

References Gambit::Scanner::resume_file_input().

169  {
170  resume_file_input(in, param);
171  get_resume(in, params...);
172  }
std::enable_if<!is_container< T >::value &&!is_pair< T >::value, void >::type resume_file_input(std::ifstream &in, T &param)
Here is the call graph for this function:

◆ get_size_of() [1/2]

size_t Gambit::Scanner::Plugins::pluginInfo::get_size_of ( )
inlineprivate

Definition at line 174 of file plugin_loader.hpp.

174 {return 0;}

◆ get_size_of() [2/2]

template<typename U , typename... T>
size_t Gambit::Scanner::Plugins::pluginInfo::get_size_of ( U &  param,
T &...  params 
)
inlineprivate

Definition at line 177 of file plugin_loader.hpp.

References Gambit::Scanner::resume_size_of().

178  {
179  return resume_size_of(param) + get_size_of(params...);
180  }
std::enable_if<!is_container< T >::value &&!is_pair< T >::value, size_t >::type resume_size_of(T &)
Here is the call graph for this function:

◆ getRank()

int Gambit::Scanner::Plugins::pluginInfo::getRank ( )
inline

Definition at line 204 of file plugin_loader.hpp.

◆ iniFile()

void Gambit::Scanner::Plugins::pluginInfo::iniFile ( const Options options_in)

Enter plugin inifile.

Definition at line 523 of file plugin_loader.cpp.

References Gambit::Options::getValue(), Gambit::Scanner::Plugins::Proto_Plugin_Details::plugin, Gambit::Scanner::Plugins::Plugin_Loader::plugins, scan_end, scan_err, and scan_warn.

Referenced by Gambit::Scanner::Scan_Manager::Scan_Manager().

524  {
525  options = options_in;
526 
527  if (options.getNode().IsMap())
528  {
529  if (options.hasKey("default_output_path"))
530  def_out_path = options.getValue<std::string>("default_output_path");
531  else
532  scan_err << "\"default output path\" must be specified in KeyValues section." << scan_end;
533 
534  for (auto it = options.getNode().begin(), end = options.getNode().end(); it != end; it++)
535  {
536  std::string plug_type = it->first.as<std::string>();
537 
538  if (it->second.IsMap() && plug_type[plug_type.length()-1] == 's' && plug_type != "priors" && plug_type != "parameters")
539  {
540  for (auto it_p = it->second.begin(), end = it->second.end(); it_p != end; it_p++)
541  {
542  std::string plug_tag = it_p->first.as<std::string>();
543 
544  Proto_Plugin_Details temp;
545 
546  if (it_p->second["plugin"])
547  {
548  temp.plugin = it_p->second["plugin"].as<std::string>();
549  }
550  else
551  {
552  scan_warn << "Plugin name is not defined under the \"" << it->first << "\" tag. "
553  << "using the tag \"" << it_p->first.as<std::string>()
554  << "\" as the plugin name." << scan_end;
555  temp.plugin = it_p->first.as<std::string>();
556  }
557 
558  if (it_p->second["version"])
559  temp.version = it_p->second["version"].as<std::string>();
560 
561  if (it_p->second["plugin_path"])
562  {
563  temp.path = it_p->second["plugin_path"].as<std::string>();
564  plugins.loadLibrary(temp.path, temp.plugin);
565  }
566 
567  selectedPlugins[plug_type.substr(0, plug_type.length()-1)][plug_tag] = temp;
568  }
569  }
570  }
571  }
572  else
573  {
574  scan_err << "Plugins subsection is not of the \"Map\" YAML format." << scan_end;
575  }
576  }
void loadLibrary(const std::string &, const std::string &="")
#define scan_warn
bool hasKey(const args &... keys) const
Getters for key/value pairs (which is all the options node should contain)
TYPE getValue(const args &... keys) const
#define scan_err
Defined to macros to output errors in the form: scan_err << "error" << scan_end; scan_warn << "warnin...
#define scan_end
std::map< std::string, std::map< std::string, Proto_Plugin_Details > > selectedPlugins
YAML::Node getNode(const args &... keys) const
Retrieve raw YAML node.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ keep_running()

bool Gambit::Scanner::Plugins::pluginInfo::keep_running ( ) const
inline

Definition at line 188 of file plugin_loader.hpp.

◆ operator()() [1/2]

const Plugin_Loader& Gambit::Scanner::Plugins::pluginInfo::operator() ( )
inline

Retrieve plugin data.

Definition at line 248 of file plugin_loader.hpp.

References EXPORT_SYMBOLS, and Gambit::Scanner::Plugins::plugin_info.

248 {return plugins;}

◆ operator()() [2/2]

Plugins::Plugin_Interface_Details Gambit::Scanner::Plugins::pluginInfo::operator() ( const std::string &  type,
const std::string &  tag 
)

Get plugin data for single plugin.

Definition at line 584 of file plugin_loader.cpp.

References Gambit::Scanner::Plugins::Proto_Plugin_Details::path, Gambit::Scanner::Plugins::Proto_Plugin_Details::plugin, Gambit::Scanner::Plugins::Plugin_Loader::plugins, scan_end, scan_err, and Gambit::Scanner::Plugins::Proto_Plugin_Details::version.

585  {
586  if (selectedPlugins.find(type) != selectedPlugins.end() && selectedPlugins[type].find(tag) != selectedPlugins[type].end())
587  {
588  Proto_Plugin_Details &detail = selectedPlugins[type][tag];
589  YAML::Node plugin_options = options.getNode(type + "s", tag);
590 
591  plugin_options["default_output_path"] = options.getValue<std::string>("default_output_path");
592  plugin_options["print_timing_data"] = options.getValue<std::string>("print_timing_data");
593 
594  if (!plugin_options["likelihood: model_invalid_for_lnlike_below"])
595  plugin_options["likelihood: model_invalid_for_lnlike_below"] = options.getValue<double>("model_invalid_for_lnlike_below");
596 
597  if (!plugin_options["likelihood: lnlike_offset"] and options.hasKey("lnlike_offset"))
598  plugin_options["likelihood: lnlike_offset"] = options.getValue<double>("lnlike_offset");
599 
600  return Plugin_Interface_Details(plugins.find(type, detail.plugin, detail.version, detail.path), printer, prior, plugin_options);
601  }
602  else
603  {
604  scan_err << "Plugin \"" << tag << "\" of type \"" << type << "\" is not defined under the \"Scanner\""
605  << " subsection in the inifile" << scan_end;
606 
607  return Plugin_Interface_Details(plugins.find(type, "", "", ""), printer, prior, options.getOptions(type + "s", tag).getNode());
608  }
609  }
Plugin_Details & find(const std::string &, const std::string &, const std::string &, const std::string &) const
const Options getOptions(const args &... keys) const
Recursive options retrieval.
bool hasKey(const args &... keys) const
Getters for key/value pairs (which is all the options node should contain)
TYPE getValue(const args &... keys) const
#define scan_err
Defined to macros to output errors in the form: scan_err << "error" << scan_end; scan_warn << "warnin...
#define scan_end
std::map< std::string, std::map< std::string, Proto_Plugin_Details > > selectedPlugins
YAML::Node getNode(const args &... keys) const
Retrieve raw YAML node.

◆ printer_prior()

void Gambit::Scanner::Plugins::pluginInfo::printer_prior ( printer_interface printerIn,
Priors::BasePrior prior_in 
)

Definition at line 578 of file plugin_loader.cpp.

Referenced by Gambit::Scanner::Scan_Manager::Scan_Manager().

579  {
580  printer = &printerIn;
581  prior = &prior_in;
582  }
Here is the caller graph for this function:

◆ resume()

template<typename... T>
void Gambit::Scanner::Plugins::pluginInfo::resume ( const std::string &  name,
T &...  data 
)
inline

resume function

Definition at line 208 of file plugin_loader.hpp.

References Gambit::Utils::ensure_path_exists().

Referenced by Gambit::Scanner::resume_params_func::operator()().

209  {
210  if (resume_mode())
211  {
212  if (resume_streams.find(name) == resume_streams.end())
213  {
214  std::string path = Gambit::Utils::ensure_path_exists(def_out_path + "/temp_files/" + name);
215  resume_streams[name] = new std::ifstream((path).c_str(), std::ifstream::binary);
216  }
217 
218  if (resume_streams[name]->is_open())
219  {
220  get_resume(*resume_streams[name], data...);
221  }
222  else
223  {
224  std::cerr << "Could not load resume data." << std::endl;
225  //scan_err << "Could not load resume data." << scan_end;
226  }
227  }
228 
229  set_resume(resume_data[name], data...);
230  }
greatScanData data
Definition: great.cpp:38
void set_resume(std::vector< __plugin_resume_base__ *> &)
std::map< std::string, std::vector< __plugin_resume_base__ * > > resume_data
EXPORT_SYMBOLS const str & ensure_path_exists(const str &)
Ensure that a path exists (and then return the path, for chaining purposes)
std::map< std::string, std::ifstream * > resume_streams
Here is the call graph for this function:
Here is the caller graph for this function:

◆ resume_mode()

bool Gambit::Scanner::Plugins::pluginInfo::resume_mode ( ) const
inline

Definition at line 194 of file plugin_loader.hpp.

References Gambit::Printers::BasePrinterManager::resume_mode().

194 { return printer->resume_mode(); }
bool resume_mode()
Getter for "resume" mode flag.
Here is the call graph for this function:

◆ save_alt_min_LogL_state()

void Gambit::Scanner::Plugins::pluginInfo::save_alt_min_LogL_state ( ) const

Save persistence file to record that the alternative min_LogL value is in use for this scan.

Definition at line 646 of file plugin_loader.cpp.

Referenced by Gambit::Scanner::Function_Base< ret(args...)>::switch_to_alternate_min_LogL().

647  {
648  std::string state_fname(def_out_path+"/ALT_MIN_LOGL_IN_USE");
649  std::ofstream outfile(state_fname);
650  outfile.close();
651  }
Here is the caller graph for this function:

◆ set_calculating()

void Gambit::Scanner::Plugins::pluginInfo::set_calculating ( bool  b)
inline

Definition at line 191 of file plugin_loader.hpp.

References b.

Referenced by Gambit::Scanner::Function_Base< ret(args...)>::operator()().

191 {funcCalculating = b;}
START_MODEL b
Definition: demo.hpp:270
Here is the caller graph for this function:

◆ set_early_shutdown_in_progress()

void Gambit::Scanner::Plugins::pluginInfo::set_early_shutdown_in_progress ( )
inline

Definition at line 192 of file plugin_loader.hpp.

Referenced by Gambit::Scanner::Scan_Manager::Run(), Gambit::PostProcessor::PPDriver::run_main_loop(), and Gambit::Scanner::Function_Base< ret(args...)>::tell_scanner_early_shutdown_in_progress().

bool earlyShutdownInProgress
Flag to indicate if early shutdown is in progess (e.g. due to intercepted OS signal). When set to &#39;true&#39; scanners should at minimum close off their output files, and if possible they should stop scanning and return control to GAMBIT (or whatever the host code might be).
Here is the caller graph for this function:

◆ set_resume() [1/2]

void Gambit::Scanner::Plugins::pluginInfo::set_resume ( std::vector< __plugin_resume_base__ *> &  )
inlineprivate

Definition at line 156 of file plugin_loader.hpp.

156 {}

◆ set_resume() [2/2]

template<typename U , typename... T>
void Gambit::Scanner::Plugins::pluginInfo::set_resume ( std::vector< __plugin_resume_base__ *> &  r_data,
U &  param,
T &...  params 
)
inlineprivate

Definition at line 159 of file plugin_loader.hpp.

160  {
161  r_data.push_back(new __plugin_resume__<typename std::decay<U>::type>(param));
162  set_resume(r_data, params...);
163  }
void set_resume(std::vector< __plugin_resume_base__ *> &)

◆ set_running()

void Gambit::Scanner::Plugins::pluginInfo::set_running ( bool  b)
inline

Definition at line 189 of file plugin_loader.hpp.

References b.

Referenced by sighandler().

189 {keepRunning = b;}
START_MODEL b
Definition: demo.hpp:270
Here is the caller graph for this function:

◆ temp_file_path()

std::string Gambit::Scanner::Plugins::pluginInfo::temp_file_path ( )
inline

Definition at line 195 of file plugin_loader.hpp.

References Gambit::Utils::ensure_path_exists().

Referenced by Gambit::Scanner::resume_params_func::get_temp_file_name().

195 {return Gambit::Utils::ensure_path_exists(def_out_path + "/temp_files/");}
EXPORT_SYMBOLS const str & ensure_path_exists(const str &)
Ensure that a path exists (and then return the path, for chaining purposes)
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ def_out_path

std::string Gambit::Scanner::Plugins::pluginInfo::def_out_path
private

Definition at line 147 of file plugin_loader.hpp.

◆ earlyShutdownInProgress

bool Gambit::Scanner::Plugins::pluginInfo::earlyShutdownInProgress
private

Flag to indicate if early shutdown is in progess (e.g. due to intercepted OS signal). When set to 'true' scanners should at minimum close off their output files, and if possible they should stop scanning and return control to GAMBIT (or whatever the host code might be).

Definition at line 154 of file plugin_loader.hpp.

◆ funcCalculating

bool Gambit::Scanner::Plugins::pluginInfo::funcCalculating
private

Definition at line 139 of file plugin_loader.hpp.

◆ keepRunning

bool Gambit::Scanner::Plugins::pluginInfo::keepRunning
private

Definition at line 138 of file plugin_loader.hpp.

◆ MPIrank

int Gambit::Scanner::Plugins::pluginInfo::MPIrank
private

Definition at line 148 of file plugin_loader.hpp.

Referenced by pluginInfo().

◆ options

Options Gambit::Scanner::Plugins::pluginInfo::options
private

Definition at line 146 of file plugin_loader.hpp.

◆ plugins

Plugins::Plugin_Loader Gambit::Scanner::Plugins::pluginInfo::plugins
mutableprivate

Definition at line 141 of file plugin_loader.hpp.

◆ printer

printer_interface* Gambit::Scanner::Plugins::pluginInfo::printer
private

Definition at line 144 of file plugin_loader.hpp.

◆ prior

Priors::BasePrior* Gambit::Scanner::Plugins::pluginInfo::prior
private

Definition at line 145 of file plugin_loader.hpp.

◆ resume_data

std::map<std::string, std::vector<__plugin_resume_base__ *> > Gambit::Scanner::Plugins::pluginInfo::resume_data
private

Definition at line 142 of file plugin_loader.hpp.

◆ resume_streams

std::map<std::string, std::ifstream *> Gambit::Scanner::Plugins::pluginInfo::resume_streams
private

Definition at line 143 of file plugin_loader.hpp.

◆ selectedPlugins

std::map<std::string, std::map<std::string, Proto_Plugin_Details> > Gambit::Scanner::Plugins::pluginInfo::selectedPlugins
private

Definition at line 140 of file plugin_loader.hpp.


The documentation for this class was generated from the following files: