Nemo  2.4.1
Simulate forward-in-time genetic evolution in a spatially explicit, individual-based stochastic simulator
ParamSet Class Reference

Parameters container, implemented in each SimComponent. More...

#include <param.h>

+ Collaboration diagram for ParamSet:

Public Member Functions

 ParamSet ()
 
 ParamSet (const ParamSet &PS)
 
 ~ParamSet ()
 
void reset ()
 Put the container in the unset state, reset each Param it contains. More...
 
void clear ()
 Empties the parameter containers (no delete). More...
 
bool check_consistency ()
 Checks for the status of the required parameters. More...
 
void show_up ()
 print info to stdout. More...
 
void print (ofstream &FILE, bool commentOut=false)
 print all set parameters to the outpout file stream More...
 
int size ()
 Returns the number of parameters contained. More...
 
map< string, Param * > & getAllParams ()
 Returns the complete list of parameters. More...
 
ParamSetoperator= (const ParamSet &PS)
 
Accessors to Param members.
void add_param (Param *param)
 Adds the param argument to the list. More...
 
void add_param (string Name, param_t Type, bool mandatory, bool isBounded, double low_bnd, double up_bnd)
 Adds a new param specified by arguments to the list. More...
 
void add_param (string Name, param_t Type, bool mandatory, bool isBounded, double low_bnd, double up_bnd, ParamUpdaterBase *updater)
 
bool set_param (string Name, string Arg)
 Look for a param named "Name" and try to set it with the "Arg" argument string. More...
 
Paramfind_param (string name)
 Look for a param "name" in its parameters list. More...
 
Paramget_param (string name)
 Look for a param "name" in its parameters list. More...
 
bool has_param (string name)
 Look for a param "name" in its parameters list. More...
 
bool update_param (string Name, unsigned int generation)
 Calls the updating procedure of each of its Param. More...
 
void setName (string value)
 Sets the container's name. More...
 
void setIsRequired (bool value)
 Sets the _isRequired flag meaning this container is mandatory and must be set in order to run a simulation. More...
 
void setOwner (SimComponent *owner)
 Sets the pointer to the SimComponents that owns this set. More...
 
bool isSet ()
 Accessor to the status flag. More...
 
string getName ()
 Name accessor. More...
 
bool isRequired ()
 Accessor to the mandatory flag. More...
 
bool isSet (string name)
 Accessor to the parameters status flag. More...
 
bool isMatrix (string name)
 Check if the parameter "name" is of matrix type. More...
 
bool isTemporal (string name)
 Check if the parameter "name" has temporal arguments. More...
 
string getArg (string name)
 Accessor to the parameters argument string. More...
 
double getValue (string name)
 Accessor the parameters value. More...
 
void getMatrix (string name, TMatrix *mat)
 Accessor to the parameters matrix. More...
 
list< ParamUpdaterBase * > getUpdaters ()
 Collects the parameter updaters from the set of parameters. More...
 

Private Attributes

string _name
 The name of the component. More...
 
bool _isSet
 Flag is true if all mandatory parameters are correctly set from user's input file. More...
 
bool _isRequired
 Flaf is true if component is required (mandatory) to run a simulation (e.g. More...
 
map< string, Param * > _params
 List of parameters indexed by name. More...
 
SimComponent_myOwner
 Pointer to the component that declared this parameter. More...
 

Detailed Description

Parameters container, implemented in each SimComponent.

A SimComponent is added to the set of active components of a simulation only if all its required parameters are set (isSet = true).

Constructor & Destructor Documentation

◆ ParamSet() [1/2]

ParamSet::ParamSet ( )
inline
229 : _isSet(0), _isRequired(0), _myOwner(0) { }
SimComponent * _myOwner
Pointer to the component that declared this parameter.
Definition: param.h:225
bool _isRequired
Flaf is true if component is required (mandatory) to run a simulation (e.g.
Definition: param.h:221
bool _isSet
Flag is true if all mandatory parameters are correctly set from user's input file.
Definition: param.h:219

◆ ParamSet() [2/2]

ParamSet::ParamSet ( const ParamSet PS)
590 {
591  map<string, Param*>::iterator param;
592 
593  if( _params.size() ) {
594  param = _params.begin();
595  while(param != _params.end()) {
596  delete param->second;
597  param++;
598  }
599  _params.clear();
600  }
601  map<string, Param*> PS_params = PS._params;
602  param = PS_params.begin();
603  while(param != PS_params.end()) {
604  _params[param->first] = new Param( *param->second );
605  param++;
606  }
607 
608 }
map< string, Param * > _params
List of parameters indexed by name.
Definition: param.h:223
string _name
The name of the component.
Definition: param.h:217
This structure stores one parameter, its definition and its string argument.
Definition: param.h:53

References _params.

◆ ~ParamSet()

ParamSet::~ParamSet ( )
614 {
615  map<string, Param*>::iterator param = _params.begin();
616  while(param != _params.end()) {
617  delete param->second;
618  param++;
619  }
620 }

References _params.

Member Function Documentation

◆ add_param() [1/3]

void ParamSet::add_param ( Param param)
inline

Adds the param argument to the list.

252 {_params[param->getName()] = param;}
string getName()
Definition: param.h:142

References Param::getName().

Referenced by SimComponent::add_parameter(), and ParamManager::ParamManager().

+ Here is the caller graph for this function:

◆ add_param() [2/3]

void ParamSet::add_param ( string  Name,
param_t  Type,
bool  mandatory,
bool  isBounded,
double  low_bnd,
double  up_bnd 
)
inline

Adds a new param specified by arguments to the list.

Parameters
Namethe name of the parameter
Typethe type of the parameter
mandatoryspecifies if this parameter is required and must be set for the container to gain the "set" status
isBoundedspecified whether this parameter is bounded
low_bndthe lower value the parameter can take, used if isBounded is true
up_bndthe upper value the parameter can take, used if isBounded is true
263  {add_param(Name, Type, mandatory, isBounded, low_bnd, up_bnd, 0);}
void add_param(Param *param)
Adds the param argument to the list.
Definition: param.h:252

◆ add_param() [3/3]

void ParamSet::add_param ( string  Name,
param_t  Type,
bool  mandatory,
bool  isBounded,
double  low_bnd,
double  up_bnd,
ParamUpdaterBase updater 
)
638 {
639  // if(!_name.empty()) Name = _name + "_" + Name; //not yet...
640  Param* param = new Param(Name, Type, mandatory, isBounded, low_bnd, up_bnd, _myOwner, updater);
641  if(updater) updater->addParam(param);
642  _params[Name] = param;
643 }
virtual void addParam(Param *param)
Adds a parameter to the stack.
Definition: param.h:352

References _myOwner, _params, and ParamUpdaterBase::addParam().

◆ check_consistency()

bool ParamSet::check_consistency ( )

Checks for the status of the required parameters.

Returns
TRUE if all required parameters are or if nothing is set and the container is not required
725 {
726  map<string, Param*>::iterator param = _params.begin();
727  bool isOK = true;
728  bool touched = false;
729  bool ignore = false;
730 
731  vector<string> mandatory;
732 
733  while(param != _params.end()) {
734 
735  //check if all mandatory parameters have been set properly
736  if(param->second->isRequired()) {
737 
738  isOK &= param->second->isSet();
739 
740  if( !param->second->isSet() ) {
741  //ignore LCE name when not added in life cycle (not wanted) to avoid error messages from inherited classes (composite LCE)
742  //e.g. if breed_disperse is set, all LCE derived from breed_base will be touched but not set and will complain
743  if (_name == param->second->getName()) {
744 
745  ignore = true;
746 
747  } else
748  mandatory.push_back(param->second->getName());
749  }
750  }
751 
752  //check if at least one param has been set
753  touched |= param->second->isSet();
754  param++;
755  }
756  _isSet = isOK;
757 
758  // issue warning in case of partial OK, or partial set
759  if( touched && !isOK && !ignore) {
760  warning("Mandatory parameters of component \"%s\" were not properly set.", _name.c_str());
761  warning("This component will not be added to the simulation!");
762  warning("The missing parameters are:\n");
763 
764  for(unsigned int i = 0; i < mandatory.size(); ++i)
765  message(">>>> \"%s\"\n", mandatory[i].c_str());
766 
767  message("\n");
768 
769  for(unsigned int i = 10; i > 0; i--) {
770  message("\rIf you want to abort now, press Ctrl-C, or wait for %is ", i);
771  fflush(stdout);
772  sleep(1);
773  }
774 
775  message("\n\n");
776  }
777  //return isOk or check if _isRequired in case no params are set (untouched params)
778  return ( isOK | (!_isRequired));
779 }
void warning(const char *str,...)
Definition: output.cc:57
void message(const char *message,...)
Definition: output.cc:39

References _isRequired, _isSet, _name, _params, message(), and warning().

◆ clear()

void ParamSet::clear ( )
inline

Empties the parameter containers (no delete).

236 {_params.clear();}

◆ find_param()

Param * ParamSet::find_param ( string  name)

Look for a param "name" in its parameters list.

Returns
NULL if no Param with _name = name exists
681 {
682  map<string, Param*>::iterator param = _params.find(Name);
683 
684  if(param != _params.end())
685  return param->second;
686  else
687  return NULL;
688 }

References _params.

◆ get_param()

Param * ParamSet::get_param ( string  name)

Look for a param "name" in its parameters list.

Returns
NULL if no Param with _name = name exists
693 {
694  map<string, Param*>::iterator param = _params.find(Name);
695 
696  if(param != _params.end())
697  return param->second;
698  else
699  fatal("parameter \"%s\" is not a member of \"%s\".\n", Name.c_str(), _name.c_str());
700  //return NULL;
701  return NULL;
702 }
void fatal(const char *str,...)
Definition: output.cc:99

References _name, _params, and fatal().

Referenced by SimComponent::get_parameter(), LCE_StatServiceNotifier::setOccurence(), LCE_PhenotypeExpression::setParameters(), and update_param().

+ Here is the caller graph for this function:

◆ getAllParams()

map<string, Param*>& ParamSet::getAllParams ( )
inline

Returns the complete list of parameters.

248 {return _params;}

◆ getArg()

string ParamSet::getArg ( string  name)
inline

Accessor to the parameters argument string.

309 {return (get_param(name))->getArg();}
Param * get_param(string name)
Look for a param "name" in its parameters list.
Definition: param.cc:692

Referenced by LCE_Resize::execute(), SimRunner::init(), LCE_Selection_base::set_fit_model(), LCE_Disperse_EvolDisp::setParameters(), LCE_Patch_Extinction::setParameters(), LCE_StatServiceNotifier::setParameters(), TProtoDeletMutations_bitstring::setSelectionParameters(), Metapop::setSourceParameters(), and LCE_Resize::updateParameters().

+ Here is the caller graph for this function:

◆ getMatrix()

◆ getName()

string ParamSet::getName ( )
inline

Name accessor.

299 {return _name;}

Referenced by SimComponent::get_name().

+ Here is the caller graph for this function:

◆ getUpdaters()

list< ParamUpdaterBase * > ParamSet::getUpdaters ( )

Collects the parameter updaters from the set of parameters.

648 {
649  list<ParamUpdaterBase*> updaters;
650  map<string, Param*>::iterator param = _params.begin();
651  for(;param != _params.end(); param++) {
652  if(param->second->getUpdater() != 0)
653  updaters.push_back(param->second->getUpdater());
654  }
655  return updaters;
656 }

References _params.

Referenced by SimComponent::loadUpdaters().

+ Here is the caller graph for this function:

◆ getValue()

◆ has_param()

bool ParamSet::has_param ( string  name)

Look for a param "name" in its parameters list.

Returns
false if no Param with _name = name exists, true otherwise
707 {
708  map<string, Param*>::iterator param = _params.find(Name);
709 
710  return (param != _params.end());
711 }

References _params.

Referenced by SimComponent::has_parameter().

+ Here is the caller graph for this function:

◆ isMatrix()

bool ParamSet::isMatrix ( string  name)
inline

Check if the parameter "name" is of matrix type.

305 {return (get_param(name))->isMatrix();}

Referenced by LCE_Breed_Disperse::setParameters(), LCE_Resize::setParameters(), Metapop::setPopulationParameters(), and LCE_FileServicesNotifier::setSamplingParameters().

+ Here is the caller graph for this function:

◆ isRequired()

bool ParamSet::isRequired ( )
inline

Accessor to the mandatory flag.

301 {return _isRequired;}

◆ isSet() [1/2]

◆ isSet() [2/2]

bool ParamSet::isSet ( string  name)
inline

Accessor to the parameters status flag.

303 {return (get_param(name))->isSet();}

◆ isTemporal()

bool ParamSet::isTemporal ( string  name)
inline

Check if the parameter "name" has temporal arguments.

307 {return (get_param(name))->isTemporal();}

◆ operator=()

ParamSet & ParamSet::operator= ( const ParamSet PS)
784 {
785  if(this != &PS) {
786  _name = PS._name;
787  _isSet = PS._isSet;
789 
790  map<string, Param*>::iterator param;
791 
792  if( _params.size() ) {
793  param = _params.begin();
794  while(param != _params.end()) {
795  delete param->second;
796  param++;
797  }
798  _params.clear();
799  }
800  map<string, Param*> PS_params = PS._params;
801  param = PS_params.begin();
802  while(param != PS_params.end()) {
803  _params[param->first] = new Param( *param->second );
804  param++;
805  }
806  }
807  return *this;
808 }

References _isRequired, _isSet, _name, and _params.

◆ print()

void ParamSet::print ( ofstream &  FILE,
bool  commentOut = false 
)

print all set parameters to the outpout file stream

825 {
826  map<string, Param*>::iterator paramRec = _params.begin();
827  Param* param;
828 
829  while(paramRec != _params.end()) {
830 
831  param = paramRec->second;
832 
833  if(param->isSet())
834  {
835  if(commentOut)
836  FILE<<"#";
837 
838  FILE<<param->getName()<<" "<<param->getInputArg()<<endl;
839  }
840 
841  paramRec++;
842  }
843 }
string getInputArg()
Returns the original, untouched input argument string (for logging).
Definition: param.h:145
bool isSet()
Definition: param.h:147

References _params, Param::getInputArg(), Param::getName(), and Param::isSet().

◆ reset()

void ParamSet::reset ( )

Put the container in the unset state, reset each Param it contains.

625 {
626  _isSet = 0;
627  map<string, Param*>::iterator param = _params.begin();
628  while(param != _params.end()) {
629  param->second->reset();
630  param++;
631  }
632 }

References _isSet, and _params.

◆ set_param()

bool ParamSet::set_param ( string  Name,
string  Arg 
)

Look for a param named "Name" and try to set it with the "Arg" argument string.

Returns
TRUE if param Name has been found and set with Arg
FALSE otherwise
Parameters
Namethe name of the parameter to find in the list
Argthe argument string as found in the init params
661 {
662  map<string, Param*>::iterator param = _params.find(Name);
663  string error_msg;
664 
665  if(param == _params.end()) {
666  // error("could not set \"%s\": parameter not found.\n",Name.c_str());
667  //exist silently
668  return false;
669  }
670 
671  if( !param->second->set(Arg, error_msg) ) {
672  error("could not set \"%s\": %s.\n", Name.c_str(), error_msg.c_str());
673  return false;
674  } else
675  return true;
676 }
int error(const char *str,...)
Definition: output.cc:78

References _params, and error().

Referenced by LCE_Resize::execute().

+ Here is the caller graph for this function:

◆ setIsRequired()

void ParamSet::setIsRequired ( bool  value)
inline

Sets the _isRequired flag meaning this container is mandatory and must be set in order to run a simulation.

293 {_isRequired = value;}

Referenced by ParamManager::ParamManager(), and SimComponent::set_paramset().

+ Here is the caller graph for this function:

◆ setName()

void ParamSet::setName ( string  value)
inline

Sets the container's name.

291 {_name = value;}

Referenced by ParamManager::ParamManager(), and SimComponent::set_paramset().

+ Here is the caller graph for this function:

◆ setOwner()

void ParamSet::setOwner ( SimComponent owner)
inline

Sets the pointer to the SimComponents that owns this set.

295 {_myOwner = owner;}

Referenced by ParamManager::ParamManager(), and SimComponent::set_paramset().

+ Here is the caller graph for this function:

◆ show_up()

void ParamSet::show_up ( )

print info to stdout.

813 {
814  message("%s\n",_name.c_str());
815  map<string, Param*>::iterator param = _params.begin();
816  while(param != _params.end()) {
817  param->second->show_up();
818  param++;
819  }
820 }

References _name, _params, and message().

◆ size()

int ParamSet::size ( )
inline

Returns the number of parameters contained.

246 {return _params.size();}

◆ update_param()

bool ParamSet::update_param ( string  Name,
unsigned int  generation 
)

Calls the updating procedure of each of its Param.

716 {
717  Param* param = get_param(Name);
718  if(param) return param->update( generation );
719  return false;
720 }
bool update(unsigned int generation)
Updates the parameter value at a given generation during the simulation.
Definition: param.cc:551

References get_param(), and Param::update().

Member Data Documentation

◆ _isRequired

bool ParamSet::_isRequired
private

Flaf is true if component is required (mandatory) to run a simulation (e.g.

SimRunner, Metapop).

Referenced by check_consistency(), and operator=().

◆ _isSet

bool ParamSet::_isSet
private

Flag is true if all mandatory parameters are correctly set from user's input file.

Referenced by check_consistency(), operator=(), and reset().

◆ _myOwner

SimComponent* ParamSet::_myOwner
private

Pointer to the component that declared this parameter.

Referenced by add_param().

◆ _name

string ParamSet::_name
private

The name of the component.

Referenced by check_consistency(), get_param(), operator=(), and show_up().

◆ _params

map<string, Param*> ParamSet::_params
private

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

Generated for Nemo v2.4.1 by  doxygen 1.9.1

Catalogued on GSR