Nemo  2.4.2
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
228 : _isSet(0), _isRequired(0), _myOwner(0) { }
SimComponent * _myOwner
Pointer to the component that declared this parameter.
Definition: param.h:224
bool _isRequired
Flaf is true if component is required (mandatory) to run a simulation (e.g.
Definition: param.h:220
bool _isSet
Flag is true if all mandatory parameters are correctly set from user's input file.
Definition: param.h:218

◆ ParamSet() [2/2]

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

References _params.

◆ ~ParamSet()

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

References _params.

Member Function Documentation

◆ add_param() [1/3]

void ParamSet::add_param ( Param param)
inline

Adds the param argument to the list.

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

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
262  {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:251

◆ 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 
)
637 {
638  // if(!_name.empty()) Name = _name + "_" + Name; //not yet...
639  Param* param = new Param(Name, Type, mandatory, isBounded, low_bnd, up_bnd, _myOwner, updater);
640  if(updater) updater->addParam(param);
641  _params[Name] = param;
642 }
virtual void addParam(Param *param)
Adds a parameter to the stack.
Definition: param.h:351

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

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

◆ clear()

void ParamSet::clear ( )
inline

Empties the parameter containers (no delete).

235 {_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
680 {
681  map<string, Param*>::iterator param = _params.find(Name);
682 
683  if(param != _params.end())
684  return param->second;
685  else
686  return NULL;
687 }

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

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.

247 {return _params;}

◆ getArg()

string ParamSet::getArg ( string  name)
inline

Accessor to the parameters argument string.

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

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.

298 {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.

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

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
706 {
707  map<string, Param*>::iterator param = _params.find(Name);
708 
709  return (param != _params.end());
710 }

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.

304 {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.

300 {return _isRequired;}

◆ isSet() [1/2]

◆ isSet() [2/2]

bool ParamSet::isSet ( string  name)
inline

Accessor to the parameters status flag.

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

◆ isTemporal()

bool ParamSet::isTemporal ( string  name)
inline

Check if the parameter "name" has temporal arguments.

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

◆ operator=()

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

References _isRequired, _isSet, _name, and _params.

◆ print()

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

print all set parameters to the outpout file stream

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

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.

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

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
660 {
661  map<string, Param*>::iterator param = _params.find(Name);
662  string error_msg;
663 
664  if(param == _params.end()) {
665  // error("could not set \"%s\": parameter not found.\n",Name.c_str());
666  //exist silently
667  return false;
668  }
669 
670  if( !param->second->set(Arg, error_msg) ) {
671  error("could not set \"%s\": %s.\n", Name.c_str(), error_msg.c_str());
672  return false;
673  } else
674  return true;
675 }
int error(const char *str,...)
Definition: output.cc:77

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.

292 {_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.

290 {_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.

294 {_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.

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

References _name, _params, and message().

◆ size()

int ParamSet::size ( )
inline

Returns the number of parameters contained.

245 {return _params.size();}

◆ update_param()

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

Calls the updating procedure of each of its Param.

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

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.2 by  doxygen 1.9.1

Catalogued on GSR