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

◆ ParamSet() [2/2]

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

References _params.

◆ ~ParamSet()

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

References _params.

Member Function Documentation

◆ add_param() [1/3]

void ParamSet::add_param ( Param param)
inline

Adds the param argument to the list.

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

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
253  {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:242

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

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

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

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

238 {return _params;}

◆ getArg()

string ParamSet::getArg ( string  name)
inline

Accessor to the parameters argument string.

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

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.

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

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

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

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.

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

291 {return _isRequired;}

◆ isSet() [1/2]

◆ isSet() [2/2]

bool ParamSet::isSet ( string  name)
inline

Accessor to the parameters status flag.

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

◆ isTemporal()

bool ParamSet::isTemporal ( string  name)
inline

Check if the parameter "name" has temporal arguments.

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

◆ operator=()

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

References _isRequired, _isSet, _name, and _params.

◆ print()

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

print all set parameters to the outpout file stream

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

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.

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

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

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

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

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

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

References _name, _params, and message().

◆ size()

int ParamSet::size ( )
inline

Returns the number of parameters contained.

236 {return _params.size();}

◆ update_param()

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

Calls the updating procedure of each of its Param.

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

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

Locations of visitors to this page
Catalogued on GSR