9#ifndef FIMS_INTERFACE_RCPP_RCPP_OBJECTS_RCPP_POPULATION_HPP
10#define FIMS_INTERFACE_RCPP_RCPP_OBJECTS_RCPP_POPULATION_HPP
13#include "../../../population_dynamics/population/population.hpp"
34 static std::map<uint32_t, std::shared_ptr<PopulationInterfaceBase>>
79std::map<uint32_t, std::shared_ptr<PopulationInterfaceBase>>
158 this->fleet_ids = std::make_shared<std::set<uint32_t>>();
159 std::shared_ptr<PopulationInterface>
population =
160 std::make_shared<PopulationInterface>(*
this);
247 " has been finalized already.");
252 std::shared_ptr<fims_info::Information<double>>
info =
257 it =
info->populations.find(this->
id);
259 std::shared_ptr<fims_popdy::Population<double>>
pop =
260 info->populations[this->
id];
264 " not found in Information.");
267 for (
size_t i = 0;
i < this->log_M.
size();
i++) {
268 if (this->log_M[
i].estimation_type_m.
get() ==
"constant") {
269 this->log_M[
i].final_value_m = this->log_M[
i].initial_value_m;
271 this->log_M[
i].final_value_m =
pop->log_M[
i];
275 for (
size_t i = 0;
i < this->log_f_multiplier.
size();
i++) {
276 if (this->log_f_multiplier[
i].estimation_type_m.
get() ==
"constant") {
277 this->log_f_multiplier[
i].final_value_m =
278 this->log_f_multiplier[
i].initial_value_m;
280 this->log_f_multiplier[
i].final_value_m =
pop->log_f_multiplier[
i];
284 for (
size_t i = 0;
i < this->log_init_naa.
size();
i++) {
285 if (this->log_init_naa[
i].estimation_type_m.
get() ==
"constant") {
286 this->log_init_naa[
i].final_value_m =
287 this->log_init_naa[
i].initial_value_m;
289 this->log_init_naa[
i].final_value_m =
pop->log_init_naa[
i];
297 template <
typename Type>
299 std::shared_ptr<fims_info::Information<Type>>
info =
302 std::shared_ptr<fims_popdy::Population<Type>>
population =
303 std::make_shared<fims_popdy::Population<Type>>();
305 std::stringstream
ss;
309 population->n_years = this->n_years.
get();
312 if (this->n_ages.
get() > 0) {
314 if (
static_cast<size_t>(this->n_ages.
get()) == this->ages.
size()) {
317 throw std::invalid_argument(
318 "The size of the ages vector for population " +
319 fims::to_string(this->
id) +
" is not equal to n_ages.");
323 fleet_ids_iterator
it;
324 for (
it = this->fleet_ids->begin();
it != this->fleet_ids->end();
it++) {
333 if (this->log_f_multiplier.
size() ==
334 static_cast<size_t>(this->n_years.
get())) {
335 population->log_f_multiplier.resize(this->log_f_multiplier.
size());
338 "The log_f_multiplier vector is not of size n_years. Filling with "
340 this->log_f_multiplier.
resize((this->n_years.
get()));
342 this->log_f_multiplier[
i].initial_value_m =
static_cast<double>(0.0);
343 this->log_f_multiplier[
i].estimation_type_m.
set(
"constant");
345 population->log_f_multiplier.resize(this->log_f_multiplier.
size());
348 if (this->spawning_biomass_ratio.
size() ==
349 static_cast<size_t>(this->n_years.
get() + 1)) {
351 this->spawning_biomass_ratio.
size());
354 "Setting spawning_biomass_ratio vector to size n_years + 1.");
355 this->spawning_biomass_ratio.
resize((this->n_years.
get() + 1));
357 this->spawning_biomass_ratio.
size());
359 info->variable_map[this->spawning_biomass_ratio.
id_m] =
365 if (this->log_M[
i].estimation_type_m.
get() ==
"fixed_effects") {
367 ss <<
"Population." << this->
id <<
".log_M." << this->log_M[
i].
id_m;
368 info->RegisterParameterName(
ss.str());
371 if (this->log_M[
i].estimation_type_m.
get() ==
"random_effects") {
373 ss <<
"Population." << this->
id <<
".log_M." << this->log_M[
i].
id_m;
374 info->RegisterRandomEffectName(
ss.str());
382 this->log_f_multiplier[
i].initial_value_m;
383 if (this->log_f_multiplier[
i].estimation_type_m.
get() ==
386 ss <<
"Population." << this->
id <<
".log_f_multiplier."
387 << this->log_f_multiplier[
i].
id_m;
388 info->RegisterParameterName(
ss.str());
391 if (this->log_f_multiplier[
i].estimation_type_m.
get() ==
394 ss <<
"Population." << this->
id <<
".log_f_multiplier."
395 << this->log_f_multiplier[
i].
id_m;
396 info->RegisterRandomEffectName(
ss.str());
400 info->variable_map[this->log_f_multiplier.
id_m] =
404 population->log_init_naa[
i] = this->log_init_naa[
i].initial_value_m;
405 if (this->log_init_naa[
i].estimation_type_m.
get() ==
"fixed_effects") {
407 ss <<
"Population." << this->
id <<
".log_init_naa."
408 << this->log_init_naa[
i].
id_m;
409 info->RegisterParameterName(
ss.str());
412 if (this->log_init_naa[
i].estimation_type_m.
get() ==
"random_effects") {
414 ss <<
"Population." << this->
id <<
".log_init_naa."
415 << this->log_init_naa[
i].
id_m;
416 info->RegisterRandomEffectName(
ss.str());
Base class for all interface objects.
Definition rcpp_interface_base.hpp:575
bool finalized
Is the object already finalized? The default is false.
Definition rcpp_interface_base.hpp:580
static std::vector< std::shared_ptr< FIMSRcppInterfaceBase > > fims_interface_objects
FIMS interface object vectors.
Definition rcpp_interface_base.hpp:585
virtual bool add_to_fims_tmb()
A virtual method to inherit to add objects to the TMB model.
Definition rcpp_interface_base.hpp:590
An Rcpp interface class that defines the ParameterVector class.
Definition rcpp_interface_base.hpp:143
void resize(size_t size)
Resizes a ParameterVector to the desired length.
Definition rcpp_interface_base.hpp:288
size_t size()
Returns the size of a ParameterVector.
Definition rcpp_interface_base.hpp:281
uint32_t id_m
The local ID of the Parameter object.
Definition rcpp_interface_base.hpp:156
Parameter & get(size_t pos)
An internal accessor for calling a position of a ParameterVector from R.
Definition rcpp_interface_base.hpp:260
void set(size_t pos, const Parameter &p)
An internal setter for setting a position of a ParameterVector from R.
Definition rcpp_interface_base.hpp:276
Rcpp interface that serves as the parent class for Rcpp population interfaces. This type should be in...
Definition rcpp_population.hpp:19
virtual ~PopulationInterfaceBase()
The destructor.
Definition rcpp_population.hpp:68
PopulationInterfaceBase()
The constructor.
Definition rcpp_population.hpp:50
SharedBoolean initialize_surplus_production
Initialize the surplus production model.
Definition rcpp_population.hpp:46
uint32_t id
The local id of the PopulationInterfaceBase object.
Definition rcpp_population.hpp:28
virtual uint32_t get_id()=0
Get the ID for the child population interface objects to inherit.
PopulationInterfaceBase(const PopulationInterfaceBase &other)
Construct a new Population Interface Base object.
Definition rcpp_population.hpp:62
static uint32_t id_g
The static id of the PopulationInterfaceBase object.
Definition rcpp_population.hpp:24
static std::map< uint32_t, std::shared_ptr< PopulationInterfaceBase > > live_objects
The map associating the IDs of PopulationInterfaceBase to the objects. This is a live object,...
Definition rcpp_population.hpp:35
SharedBoolean initialize_catch_at_age
Initialize the catch at age model.
Definition rcpp_population.hpp:41
Rcpp interface for a new Population to instantiate from R: population <- methods::new(population)
Definition rcpp_population.hpp:86
std::set< uint32_t >::iterator fleet_ids_iterator
Definition rcpp_population.hpp:103
std::shared_ptr< std::set< uint32_t > > fleet_ids
Definition rcpp_population.hpp:99
ParameterVector spawning_biomass_ratio
The population spawning biomass ratio for each year.
Definition rcpp_population.hpp:135
PopulationInterface()
The constructor.
Definition rcpp_population.hpp:157
virtual uint32_t get_id()
Gets the ID of the interface base object.
Definition rcpp_population.hpp:197
void SetMaturityID(uint32_t maturity_id)
Sets the unique ID for the Maturity object.
Definition rcpp_population.hpp:215
ParameterVector log_init_naa
The natural log of the initial numbers at age.
Definition rcpp_population.hpp:143
SharedString name
The name for the population.
Definition rcpp_population.hpp:152
SharedInt n_ages
The number of age bins.
Definition rcpp_population.hpp:91
SharedInt maturity_id
The ID of the maturity module.
Definition rcpp_population.hpp:115
ParameterVector log_f_multiplier
Log of the population annual fishing mortality multiplier.
Definition rcpp_population.hpp:139
SharedInt n_years
The number of years.
Definition rcpp_population.hpp:107
void SetName(const std::string &name)
Sets the name of the population.
Definition rcpp_population.hpp:203
std::string GetName() const
Gets the name of the population.
Definition rcpp_population.hpp:209
RealVector ages
Ages that are modeled in the population, the length of this vector should equal "n_ages".
Definition rcpp_population.hpp:148
SharedInt recruitment_err_id
The ID of the recruitment process module.
Definition rcpp_population.hpp:127
ParameterVector log_M
The natural log of the natural mortality for each year.
Definition rcpp_population.hpp:131
virtual ~PopulationInterface()
The destructor.
Definition rcpp_population.hpp:191
SharedInt n_lengths
The number of length bins.
Definition rcpp_population.hpp:111
void SetGrowthID(uint32_t growth_id)
Set the unique ID for the growth object.
Definition rcpp_population.hpp:223
void AddFleet(uint32_t fleet_id)
Add a fleet id to the list of fleets operating on this population.
Definition rcpp_population.hpp:237
SharedInt growth_id
The ID of the growth module.
Definition rcpp_population.hpp:119
SharedInt recruitment_id
The ID of the recruitment module.
Definition rcpp_population.hpp:123
PopulationInterface(const PopulationInterface &other)
Construct a new Population Interface object.
Definition rcpp_population.hpp:170
virtual void finalize()
Extracts derived quantities back to the Rcpp interface object from the Information object.
Definition rcpp_population.hpp:243
SharedInt n_fleets
The number of fleets.
Definition rcpp_population.hpp:95
void SetRecruitmentID(uint32_t recruitment_id)
Set the unique ID for the recruitment object.
Definition rcpp_population.hpp:229
An Rcpp interface class that defines the RealVector class.
Definition rcpp_interface_base.hpp:375
size_t size()
Returns the size of a RealVector.
Definition rcpp_interface_base.hpp:536
A class that provides shared ownership of a boolean value.
Definition rcpp_shared_primitive.hpp:1699
A class that provides shared ownership of an integer value.
Definition rcpp_shared_primitive.hpp:24
int get() const
Retrieve the value of the integer.
Definition rcpp_shared_primitive.hpp:122
A class that provides shared ownership of a string.
Definition rcpp_shared_primitive.hpp:1508
std::string get() const
Retrieves the string value managed by the object.
Definition rcpp_shared_primitive.hpp:1612
#define FIMS_WARNING_LOG(MESSAGE)
Definition def.hpp:639
void clear_internal()
Clears the internal objects.
Definition rcpp_interface.hpp:235
The Rcpp interface to declare objects that are used ubiquitously throughout the Rcpp interface,...