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

◆ ParamSet() [2/2]

ParamSet::ParamSet ( const ParamSet PS)
565 {
566  map<string, Param*>::iterator param;
567 
568  if( _params.size() ) {
569  param = _params.begin();
570  while(param != _params.end()) {
571  delete param->second;
572  param++;
573  }
574  _params.clear();
575  }
576  map<string, Param*> PS_params = PS._params;
577  param = PS_params.begin();
578  while(param != PS_params.end()) {
579  _params[param->first] = new Param( *param->second );
580  param++;
581  }
582 
583 }
map< string, Param * > _params
List of parameters indexed by name.
Definition: param.h:214
string _name
The name of the component.
Definition: param.h:208
This structure stores one parameter, its definition and its string argument.
Definition: param.h:54

References _params.

◆ ~ParamSet()

ParamSet::~ParamSet ( )
589 {
590  map<string, Param*>::iterator param = _params.begin();
591  while(param != _params.end()) {
592  delete param->second;
593  param++;
594  }
595 }

References _params.

Member Function Documentation

◆ add_param() [1/3]

void ParamSet::add_param ( Param param)
inline

Adds the param argument to the list.

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

References Param::getName().

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

◆ 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
254  {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:243

◆ 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 
)
613 {
614  // if(!_name.empty()) Name = _name + "_" + Name; //not yet...
615  Param* param = new Param(Name, Type, mandatory, isBounded, low_bnd, up_bnd, _myOwner, updater);
616  if(updater) updater->addParam(param);
617  _params[Name] = param;
618 }
virtual void addParam(Param *param)
Adds a parameter to the stack.
Definition: param.h:343

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
700 {
701  map<string, Param*>::iterator param = _params.begin();
702  bool isOK = true;
703  bool touched = false;
704  bool ignore = false;
705 
706  vector<string> mandatory;
707 
708  while(param != _params.end()) {
709 
710  //check if all mandatory parameters have been set properly
711  if(param->second->isRequired()) {
712 
713  isOK &= param->second->isSet();
714 
715  if( !param->second->isSet() ) {
716  //ignore LCE name when not added in life cycle (not wanted) to avoid error messages from inherited classes (composite LCE)
717  //e.g. if breed_disperse is set, all LCE derived from breed_base will be touched but not set and will complain
718  if (_name == param->second->getName()) {
719 
720  ignore = true;
721 
722  } else
723  mandatory.push_back(param->second->getName());
724  }
725  }
726 
727  //check if at least one param has been set
728  touched |= param->second->isSet();
729  param++;
730  }
731  _isSet = isOK;
732 
733  // issue warning in case of partial OK, or partial set
734  if( touched && !isOK && !ignore) {
735  warning("Mandatory parameters of component \"%s\" were not properly set.", _name.c_str());
736  warning("This component will not be added to the simulation!");
737  warning("The missing parameters are:\n");
738 
739  for(unsigned int i = 0; i < mandatory.size(); ++i)
740  message(">>>> \"%s\"\n", mandatory[i].c_str());
741 
742  message("\n");
743 
744  for(unsigned int i = 10; i > 0; i--) {
745  message("\rIf you want to abort now, press Ctrl-C, or wait for %is ", i);
746  fflush(stdout);
747  sleep(1);
748  }
749 
750  message("\n\n");
751  }
752  //return isOk or check if _isRequired in case no params are set (untouched params)
753  return ( isOK | (!_isRequired));
754 }
void warning(const char *str,...)
Definition: output.cc:58
void message(const char *message,...)
Definition: output.cc:40

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

◆ clear()

void ParamSet::clear ( )
inline

Empties the parameter containers (no delete).

227 {_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
656 {
657  map<string, Param*>::iterator param = _params.find(Name);
658 
659  if(param != _params.end())
660  return param->second;
661  else
662  return NULL;
663 }

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
668 {
669  map<string, Param*>::iterator param = _params.find(Name);
670 
671  if(param != _params.end())
672  return param->second;
673  else
674  fatal("parameter \"%s\" is not a member of \"%s\".\n", Name.c_str(), _name.c_str());
675  //return NULL;
676  return NULL;
677 }
void fatal(const char *str,...)
Definition: output.cc:100

References _name, _params, and fatal().

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

◆ getAllParams()

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

Returns the complete list of parameters.

239 {return _params;}

◆ getArg()

string ParamSet::getArg ( string  name)
inline

◆ getMatrix()

◆ getName()

string ParamSet::getName ( )
inline

Name accessor.

290 {return _name;}

Referenced by SimComponent::get_name().

◆ getUpdaters()

list< ParamUpdaterBase * > ParamSet::getUpdaters ( )

Collects the parameter updaters from the set of parameters.

623 {
624  list<ParamUpdaterBase*> updaters;
625  map<string, Param*>::iterator param = _params.begin();
626  for(;param != _params.end(); param++) {
627  if(param->second->getUpdater() != 0)
628  updaters.push_back(param->second->getUpdater());
629  }
630  return updaters;
631 }

References _params.

Referenced by SimComponent::loadUpdaters().

◆ 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
682 {
683  map<string, Param*>::iterator param = _params.find(Name);
684 
685  return (param != _params.end());
686 }

References _params.

Referenced by SimComponent::has_parameter().

◆ isMatrix()

bool ParamSet::isMatrix ( string  name)
inline

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

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

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

◆ isRequired()

bool ParamSet::isRequired ( )
inline

Accessor to the mandatory flag.

292 {return _isRequired;}

◆ isSet() [1/2]

◆ isSet() [2/2]

bool ParamSet::isSet ( string  name)
inline

Accessor to the parameters status flag.

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

◆ isTemporal()

bool ParamSet::isTemporal ( string  name)
inline

Check if the parameter "name" has temporal arguments.

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

◆ operator=()

ParamSet & ParamSet::operator= ( const ParamSet PS)
759 {
760  if(this != &PS) {
761  _name = PS._name;
762  _isSet = PS._isSet;
764 
765  map<string, Param*>::iterator param;
766 
767  if( _params.size() ) {
768  param = _params.begin();
769  while(param != _params.end()) {
770  delete param->second;
771  param++;
772  }
773  _params.clear();
774  }
775  map<string, Param*> PS_params = PS._params;
776  param = PS_params.begin();
777  while(param != PS_params.end()) {
778  _params[param->first] = new Param( *param->second );
779  param++;
780  }
781  }
782  return *this;
783 }

References _isRequired, _isSet, _name, and _params.

◆ print()

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

print all set parameters to the outpout file stream

800 {
801  map<string, Param*>::iterator paramRec = _params.begin();
802  Param* param;
803 
804  while(paramRec != _params.end()) {
805 
806  param = paramRec->second;
807 
808  if(param->isSet())
809  {
810  if(commentOut)
811  FILE<<"#";
812 
813  FILE<<param->getName()<<" "<<param->getArg()<<endl;
814  }
815 
816  paramRec++;
817  }
818 }
string getArg()
Definition: param.h:138
bool isSet()
Definition: param.h:140

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

◆ reset()

void ParamSet::reset ( )

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

600 {
601  _isSet = 0;
602  map<string, Param*>::iterator param = _params.begin();
603  while(param != _params.end()) {
604  param->second->reset();
605  param++;
606  }
607 }

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
636 {
637  map<string, Param*>::iterator param = _params.find(Name);
638  string error_msg;
639 
640  if(param == _params.end()) {
641  // error("could not set \"%s\": parameter not found.\n",Name.c_str());
642  //exist silently
643  return false;
644  }
645 
646  if( !param->second->set(Arg, error_msg) ) {
647  error("could not set \"%s\": %s.\n", Name.c_str(), error_msg.c_str());
648  return false;
649  } else
650  return true;
651 }
int error(const char *str,...)
Definition: output.cc:79

References _params, and error().

Referenced by LCE_Resize::execute().

◆ 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.

284 {_isRequired = value;}

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

◆ setName()

void ParamSet::setName ( string  value)
inline

Sets the container's name.

282 {_name = value;}

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

◆ setOwner()

void ParamSet::setOwner ( SimComponent owner)
inline

Sets the pointer to the SimComponents that owns this set.

286 {_myOwner = owner;}

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

◆ show_up()

void ParamSet::show_up ( )

print info to stdout.

788 {
789  message("%s\n",_name.c_str());
790  map<string, Param*>::iterator param = _params.begin();
791  while(param != _params.end()) {
792  param->second->show_up();
793  param++;
794  }
795 }

References _name, _params, and message().

◆ size()

int ParamSet::size ( )
inline

Returns the number of parameters contained.

237 {return _params.size();}

◆ update_param()

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

Calls the updating procedure of each of its Param.

691 {
692  Param* param = get_param(Name);
693  if(param) return param->update( generation );
694  return false;
695 }
bool update(unsigned int generation)
Updates the parameter value at a given generation during the simulation.
Definition: param.cc:532

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.0b by  doxygen 1.9.1 -- Nemo is hosted on  Download Nemo

Locations of visitors to this page
Catalogued on GSR