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)
556 {
557  map<string, Param*>::iterator param;
558 
559  if( _params.size() ) {
560  param = _params.begin();
561  while(param != _params.end()) {
562  delete param->second;
563  param++;
564  }
565  _params.clear();
566  }
567  map<string, Param*> PS_params = PS._params;
568  param = PS_params.begin();
569  while(param != PS_params.end()) {
570  _params[param->first] = new Param( *param->second );
571  param++;
572  }
573 
574 }
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 ( )
580 {
581  map<string, Param*>::iterator param = _params.begin();
582  while(param != _params.end()) {
583  delete param->second;
584  param++;
585  }
586 }

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 
)
604 {
605  // if(!_name.empty()) Name = _name + "_" + Name; //not yet...
606  Param* param = new Param(Name, Type, mandatory, isBounded, low_bnd, up_bnd, _myOwner, updater);
607  if(updater) updater->addParam(param);
608  _params[Name] = param;
609 }
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
691 {
692  map<string, Param*>::iterator param = _params.begin();
693  bool isOK = true;
694  bool touched = false;
695  bool ignore = false;
696 
697  vector<string> mandatory;
698 
699  while(param != _params.end()) {
700 
701  //check if all mandatory parameters have been set properly
702  if(param->second->isRequired()) {
703 
704  isOK &= param->second->isSet();
705 
706  if( !param->second->isSet() ) {
707  //ignore LCE name when not added in life cycle (not wanted) to avoid error messages from inherited classes (composite LCE)
708  //e.g. if breed_disperse is set, all LCE derived from breed_base will be touched but not set and will complain
709  if (_name == param->second->getName()) {
710 
711  ignore = true;
712 
713  } else
714  mandatory.push_back(param->second->getName());
715  }
716  }
717 
718  //check if at least one param has been set
719  touched |= param->second->isSet();
720  param++;
721  }
722  _isSet = isOK;
723 
724  // issue warning in case of partial OK, or partial set
725  if( touched && !isOK && !ignore) {
726  warning("Mandatory parameters of component \"%s\" were not properly set.", _name.c_str());
727  warning("This component will not be added to the simulation!");
728  warning("The missing parameters are:\n");
729 
730  for(unsigned int i = 0; i < mandatory.size(); ++i)
731  message(">>>> \"%s\"\n", mandatory[i].c_str());
732 
733  message("\n");
734 
735  for(unsigned int i = 10; i > 0; i--) {
736  message("\rIf you want to abort now, press Ctrl-C, or wait for %is ", i);
737  fflush(stdout);
738  sleep(1);
739  }
740 
741  message("\n\n");
742  }
743  //return isOk or check if _isRequired in case no params are set (untouched params)
744  return ( isOK | (!_isRequired));
745 }
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
647 {
648  map<string, Param*>::iterator param = _params.find(Name);
649 
650  if(param != _params.end())
651  return param->second;
652  else
653  return NULL;
654 }

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
659 {
660  map<string, Param*>::iterator param = _params.find(Name);
661 
662  if(param != _params.end())
663  return param->second;
664  else
665  fatal("parameter \"%s\" is not a member of \"%s\".\n", Name.c_str(), _name.c_str());
666  //return NULL;
667  return NULL;
668 }
void fatal(const char *str,...)
Definition: output.cc:96

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.

614 {
615  list<ParamUpdaterBase*> updaters;
616  map<string, Param*>::iterator param = _params.begin();
617  for(;param != _params.end(); param++) {
618  if(param->second->getUpdater() != 0)
619  updaters.push_back(param->second->getUpdater());
620  }
621  return updaters;
622 }

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
673 {
674  map<string, Param*>::iterator param = _params.find(Name);
675 
676  return (param != _params.end());
677 }

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(), and Metapop::setPopulationParameters().

◆ 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)
750 {
751  if(this != &PS) {
752  _name = PS._name;
753  _isSet = PS._isSet;
755 
756  map<string, Param*>::iterator param;
757 
758  if( _params.size() ) {
759  param = _params.begin();
760  while(param != _params.end()) {
761  delete param->second;
762  param++;
763  }
764  _params.clear();
765  }
766  map<string, Param*> PS_params = PS._params;
767  param = PS_params.begin();
768  while(param != PS_params.end()) {
769  _params[param->first] = new Param( *param->second );
770  param++;
771  }
772  }
773  return *this;
774 }

References _isRequired, _isSet, _name, and _params.

◆ print()

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

print all set parameters to the outpout file stream

791 {
792  map<string, Param*>::iterator paramRec = _params.begin();
793  Param* param;
794 
795  while(paramRec != _params.end()) {
796 
797  param = paramRec->second;
798 
799  if(param->isSet())
800  {
801  if(commentOut)
802  FILE<<"#";
803 
804  FILE<<param->getName()<<" "<<param->getArg()<<endl;
805  }
806 
807  paramRec++;
808  }
809 }
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.

591 {
592  _isSet = 0;
593  map<string, Param*>::iterator param = _params.begin();
594  while(param != _params.end()) {
595  param->second->reset();
596  param++;
597  }
598 }

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
627 {
628  map<string, Param*>::iterator param = _params.find(Name);
629  string error_msg;
630 
631  if(param == _params.end()) {
632  // error("could not set \"%s\": parameter not found.\n",Name.c_str());
633  //exist silently
634  return false;
635  }
636 
637  if( !param->second->set(Arg, error_msg) ) {
638  error("could not set \"%s\": %s.\n", Name.c_str(), error_msg.c_str());
639  return false;
640  } else
641  return true;
642 }
int error(const char *str,...)
Definition: output.cc:77

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.

779 {
780  message("%s\n",_name.c_str());
781  map<string, Param*>::iterator param = _params.begin();
782  while(param != _params.end()) {
783  param->second->show_up();
784  param++;
785  }
786 }

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.

682 {
683  Param* param = get_param(Name);
684  if(param) return param->update( generation );
685  return false;
686 }
bool update(unsigned int generation)
Updates the parameter value at a given generation during the simulation.
Definition: param.cc:523

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