9#ifndef FIMS_INTERFACE_RCPP_RCPP_OBJECTS_RCPP_MATURITY_HPP
10#define FIMS_INTERFACE_RCPP_RCPP_OBJECTS_RCPP_MATURITY_HPP
34 static std::map<uint32_t, std::shared_ptr<MaturityInterfaceBase>>
41 this->
id = MaturityInterfaceBase::id_g++;
91 std::make_shared<LogisticMaturityInterface>(*
this);
125 LogisticMat.
inflection_point[0] = this->inflection_point[0].initial_value_m;
126 LogisticMat.
slope.resize(1);
127 LogisticMat.
slope[0] = this->slope[0].initial_value_m;
139 " has been finalized already.");
144 std::shared_ptr<fims_info::Information<double>> info =
154 " not found in Information.");
157 std::shared_ptr<fims_popdy::LogisticMaturity<double>> mat =
158 std::dynamic_pointer_cast<fims_popdy::LogisticMaturity<double>>(
162 if (this->inflection_point[i].estimation_type_m.
get() ==
"constant") {
163 this->inflection_point[i].final_value_m =
164 this->inflection_point[i].initial_value_m;
166 this->inflection_point[i].final_value_m = mat->inflection_point[i];
170 for (
size_t i = 0; i <
slope.size(); i++) {
171 if (this->slope[i].estimation_type_m.
get() ==
"constant") {
172 this->slope[i].final_value_m = this->slope[i].initial_value_m;
174 this->slope[i].final_value_m = mat->slope[i];
187 std::stringstream ss;
189 ss <<
" \"module_name\": \"Maturity\",\n";
190 ss <<
" \"module_type\": \"Logistic\",\n";
191 ss <<
" \"module_id\": " << this->
id <<
",\n";
193 ss <<
" \"parameters\": [\n{\n";
194 ss <<
" \"name\": \"inflection_point\",\n";
195 ss <<
" \"id\":" << this->inflection_point.
id_m <<
",\n";
196 ss <<
" \"type\": \"vector\",\n";
197 ss <<
" \"dimensionality\": {\n";
198 ss <<
" \"header\": [null],\n";
199 ss <<
" \"dimensions\": [1]\n},\n";
200 ss <<
" \"values\":" << this->inflection_point <<
"},\n ";
203 ss <<
" \"name\": \"slope\",\n";
204 ss <<
" \"id\":" << this->slope.
id_m <<
",\n";
205 ss <<
" \"type\": \"vector\",\n";
206 ss <<
" \"dimensionality\": {\n";
207 ss <<
" \"header\": [null],\n";
208 ss <<
" \"dimensions\": [1]\n},\n";
209 ss <<
" \"values\":" << this->slope <<
"}]\n";
218 template <
typename Type>
219 bool add_to_fims_tmb_internal() {
220 std::shared_ptr<fims_info::Information<Type>> info =
223 std::shared_ptr<fims_popdy::LogisticMaturity<Type>> maturity =
224 std::make_shared<fims_popdy::LogisticMaturity<Type>>();
227 maturity->id = this->
id;
228 std::stringstream ss;
229 maturity->inflection_point.resize(this->inflection_point.
size());
230 for (
size_t i = 0; i < this->inflection_point.
size(); i++) {
231 maturity->inflection_point[i] = this->inflection_point[i].initial_value_m;
232 if (this->inflection_point[i].estimation_type_m.
get() ==
235 ss <<
"Maturity." << this->
id <<
".inflection_point."
236 << this->inflection_point[i].
id_m;
237 info->RegisterParameterName(ss.str());
238 info->RegisterParameter(maturity->inflection_point[i]);
243 ss <<
"Maturity." << this->
id <<
".inflection_point."
245 info->RegisterRandomEffectName(ss.str());
246 info->RegisterRandomEffect(maturity->inflection_point[i]);
252 maturity->slope.resize(this->
slope.size());
253 for (
size_t i = 0; i < this->
slope.size(); i++) {
254 maturity->slope[i] = this->
slope[i].initial_value_m;
255 if (this->
slope[i].estimation_type_m.get() ==
"fixed_effects") {
257 ss <<
"Maturity." << this->
id <<
".slope." << this->
slope[i].id_m;
258 info->RegisterParameterName(ss.str());
259 info->RegisterParameter(maturity->slope[i]);
261 if (this->
slope[i].estimation_type_m.get() ==
"random_effects") {
263 ss <<
"Maturity." << this->
id <<
".slope." << this->
slope[i].id_m;
264 info->RegisterRandomEffect(maturity->slope[i]);
265 info->RegisterRandomEffectName(ss.str());
268 info->variable_map[this->
slope.id_m] = &(maturity)->
slope;
271 info->maturity_models[maturity->id] = maturity;
281 this->add_to_fims_tmb_internal<TMB_FIMS_REAL_TYPE>();
282 this->add_to_fims_tmb_internal<TMBAD_FIMS_TYPE>();
Base class for all interface objects.
Definition rcpp_interface_base.hpp:655
bool finalized
Is the object already finalized? The default is false.
Definition rcpp_interface_base.hpp:660
static std::vector< std::shared_ptr< FIMSRcppInterfaceBase > > fims_interface_objects
FIMS interface object vectors.
Definition rcpp_interface_base.hpp:665
virtual bool add_to_fims_tmb()
A virtual method to inherit to add objects to the TMB model.
Definition rcpp_interface_base.hpp:670
virtual ~LogisticMaturityInterface()
The destructor.
Definition rcpp_maturity.hpp:109
VariableVector slope
How quickly the proportion mature changes with age around the inflection point, per year of age....
Definition rcpp_maturity.hpp:84
VariableVector inflection_point
The age at which 50% of fish are mature for models that start at age zero and each age bin represents...
Definition rcpp_maturity.hpp:80
LogisticMaturityInterface()
The constructor.
Definition rcpp_maturity.hpp:89
virtual uint32_t get_id()
Gets the ID of the interface base object.
Definition rcpp_maturity.hpp:115
virtual void finalize()
Extracts derived quantities back to the Rcpp interface object from the Information object.
Definition rcpp_maturity.hpp:135
LogisticMaturityInterface(const LogisticMaturityInterface &other)
Construct a new Logistic Maturity Interface object.
Definition rcpp_maturity.hpp:101
virtual std::string to_json()
Converts the data to json representation for the output.
Definition rcpp_maturity.hpp:186
virtual double evaluate(double x)
Evaluate maturity using the logistic function.
Definition rcpp_maturity.hpp:122
virtual double evaluate(double x)=0
A method for each child maturity interface object to inherit so each maturity option can have an eval...
virtual ~MaturityInterfaceBase()
The destructor.
Definition rcpp_maturity.hpp:57
virtual uint32_t get_id()=0
Get the ID for the child maturity interface objects to inherit.
static std::map< uint32_t, std::shared_ptr< MaturityInterfaceBase > > live_objects
The map associating the IDs of MaturityInterfaceBase to the objects. This is a live object,...
Definition rcpp_maturity.hpp:35
uint32_t id
The local id of the MaturityInterfaceBase object.
Definition rcpp_maturity.hpp:28
MaturityInterfaceBase(const MaturityInterfaceBase &other)
Construct a new Maturity Interface Base object.
Definition rcpp_maturity.hpp:52
MaturityInterfaceBase()
The constructor.
Definition rcpp_maturity.hpp:40
An Rcpp interface class that defines the VariableVector class.
Definition rcpp_interface_base.hpp:143
Variable & get(size_t pos)
An internal accessor for calling a position of a VariableVector from R.
Definition rcpp_interface_base.hpp:266
uint32_t id_m
The local ID of the Variable object.
Definition rcpp_interface_base.hpp:156
size_t size()
Returns the size of a VariableVector.
Definition rcpp_interface_base.hpp:287
#define FIMS_WARNING_LOG(MESSAGE)
Definition def.hpp:648
std::string to_string(T v)
Definition def.hpp:735
Includes any .hpp files within the subfolders so that only this file needs to included in include sta...
The Rcpp interface to declare objects that are used ubiquitously throughout the Rcpp interface,...
LogisticMaturity class that returns the logistic function value from fims_math.
Definition logistic.hpp:24
fims::Vector< Type > slope
How quickly the proportion mature changes with age around the inflection point, per year of age....
Definition logistic.hpp:35
fims::Vector< Type > inflection_point
The age at which 50% of fish are mature for models that start at age zero and each age bin represents...
Definition logistic.hpp:29
virtual const Type evaluate(const Type &x)
Method of the logistic maturity class that implements the logistic function from FIMS math.
Definition logistic.hpp:49