FIMS  v0.9.2
Loading...
Searching...
No Matches
rcpp_interface.hpp
Go to the documentation of this file.
1
8#ifndef FIMS_INTERFACE_RCPP_INTERFACE_HPP
9#define FIMS_INTERFACE_RCPP_INTERFACE_HPP
10#include "../../common/model.hpp"
11#include "../../utilities/fims_json.hpp"
23
28 std::signal(SIGSEGV, &fims::WriteAtExit);
29 std::signal(SIGINT, &fims::WriteAtExit);
30 std::signal(SIGABRT, &fims::WriteAtExit);
31 std::signal(SIGFPE, &fims::WriteAtExit);
32 std::signal(SIGILL, &fims::WriteAtExit);
33 std::signal(SIGTERM, &fims::WriteAtExit);
34}
35
76
77 // clear first
78 // base model
79 std::shared_ptr<fims_info::Information<TMB_FIMS_REAL_TYPE>> info0 =
81 info0->Clear();
82
83 std::shared_ptr<fims_info::Information<TMBAD_FIMS_TYPE>> info =
85 info->Clear();
86
87 for (size_t i = 0; i < FIMSRcppInterfaceBase::fims_interface_objects.size();
88 i++) {
90 }
91
92 // base model
93 info0->CreateModel();
94 info0->CheckModel();
95
96 info->CreateModel();
97
98 // instantiate the model? TODO: Ask Matthew what this does
99 std::shared_ptr<fims_model::Model<TMB_FIMS_REAL_TYPE>> m0 =
101
102 return true;
103}
104
105/* Dictionary block for shared documentation.
106 [details_set_x_parameters]
107 Updates the internal parameter values for the model base of type
108 TMB_FIMS_REAL_TYPE. It is typically called before finalize() or
109 @ref CatchAtAgeInterface::to_json "`get_output()`" to ensure the correct
110 values are used because TMB doesn't always keep the updated parameters in
111 the "double" version of the tape. So we need to update those first.
112 \n\n
113 Usage example in R:
114 \code{.R}
115 set_fixed_parameters(c(1, 2, 3))
116 set_random_parameters(c(1, 2, 3))
117 catch_at_age$get_output()
118 \endcode
119 [details_set_x_parameters]
120*/
121/* Dictionary block for shared documentation.
122 [param_par]
123 @param par A vector of parameter values.
124 [param_par]
125 */
126
133void set_fixed_parameters(Rcpp::NumericVector par) {
134 // base model
135 std::shared_ptr<fims_info::Information<TMB_FIMS_REAL_TYPE>> info0 =
137
138 for (size_t i = 0; i < info0->fixed_effects_parameters.size(); i++) {
139 *info0->fixed_effects_parameters[i] = par[i];
140 }
141}
142
148Rcpp::NumericVector get_fixed_parameters_vector() {
149 // base model
150 std::shared_ptr<fims_info::Information<TMB_FIMS_REAL_TYPE>> info0 =
152
153 Rcpp::NumericVector p;
154
155 for (size_t i = 0; i < info0->fixed_effects_parameters.size(); i++) {
156 p.push_back(*info0->fixed_effects_parameters[i]);
157 }
158
159 return p;
160}
161
168void set_random_parameters(Rcpp::NumericVector par) {
169 // base model
170 std::shared_ptr<fims_info::Information<TMB_FIMS_REAL_TYPE>> info0 =
172
173 for (size_t i = 0; i < info0->random_effects_parameters.size(); i++) {
174 *info0->random_effects_parameters[i] = par[i];
175 }
176}
177
183Rcpp::NumericVector get_random_parameters_vector() {
184 // base model
185 std::shared_ptr<fims_info::Information<TMB_FIMS_REAL_TYPE>> d0 =
187
188 Rcpp::NumericVector p;
189
190 for (size_t i = 0; i < d0->random_effects_parameters.size(); i++) {
191 p.push_back(*d0->random_effects_parameters[i]);
192 }
193
194 return p;
195}
196
203Rcpp::List get_parameter_names(Rcpp::List pars) {
204 // base model
205 std::shared_ptr<fims_info::Information<TMB_FIMS_REAL_TYPE>> d0 =
207
208 pars.attr("names") = d0->parameter_names;
209
210 return pars;
211}
212
219Rcpp::List get_random_names(Rcpp::List pars) {
220 // base model
221 std::shared_ptr<fims_info::Information<TMB_FIMS_REAL_TYPE>> d0 =
223
224 pars.attr("names") = d0->random_effects_names;
225
226 return pars;
227}
228
234template <typename Type>
236 std::shared_ptr<fims_info::Information<Type>> d0 =
238 d0->Clear();
239}
240
244void clear() {
245 // rcpp_interface_base.hpp
247
248 // Parameter and ParameterVector
249 Parameter::id_g = 1;
251 // rcpp_data.hpp
254
257
260
263
266
267 // rcpp_fleets.hpp
270
273
274 // rcpp_growth.hpp
277
280
281 // rcpp_maturity.hpp
284
287
288 // rcpp_population.hpp
291
294
295 // rcpp_recruitment.hpp
298
301
302 // rcpp_selectivity.hpp
305
308
311
312 // rcpp_distribution.hpp
315
318
321
324
327
330
332}
333
337std::string get_log() { return fims::FIMSLog::fims_log->get_log(); }
338
342std::string get_log_errors() { return fims::FIMSLog::fims_log->get_errors(); }
343
347std::string get_log_warnings() {
348 return fims::FIMSLog::fims_log->get_warnings();
349}
350
354std::string get_log_info() { return fims::FIMSLog::fims_log->get_info(); }
355
359void write_log(bool write) { fims::FIMSLog::fims_log->write_on_exit = write; }
360
364void set_log_path(const std::string &path) {
365 fims::FIMSLog::fims_log->set_path(path);
366}
367
371void set_log_throw_on_error(bool throw_on_error) {
372 fims::FIMSLog::fims_log->throw_on_error = throw_on_error;
373}
374
378void log_info(std::string log_entry) {
379 fims::FIMSLog::fims_log->info_message(log_entry, -1, "R_env",
380 "R_script_entry");
381}
382
386void log_warning(std::string log_entry) {
387 fims::FIMSLog::fims_log->warning_message(log_entry, -1, "R_env",
388 "R_script_entry");
389}
390
397std::string escapeQuotes(const std::string &input) {
398 std::string result = input;
399 std::string search = "\"";
400 std::string replace = "\\\"";
401
402 // Find each occurrence of `"` and replace it with `\"`
403 size_t pos = result.find(search);
404 while (pos != std::string::npos) {
405 result.replace(pos, search.size(), replace);
406 pos = result.find(search,
407 pos + replace.size()); // Move past the replaced position
408 }
409 return result;
410}
411
415void log_error(std::string log_entry) {
416 std::stringstream ss;
417 ss << "capture.output(traceback(4))";
420
421 PROTECT(expression = R_ParseVector(Rf_mkString(ss.str().c_str()), 1, &status,
422 R_NilValue));
423 if (status != PARSE_OK) {
424 Rcpp::Rcout << "Error parsing expression" << std::endl;
425 UNPROTECT(1);
426 }
427 Rcpp::Rcout << "before call.";
429 Rcpp::Rcout << "after call.";
430 UNPROTECT(2);
431 std::stringstream ss_ret;
432 ss_ret << "traceback: ";
433 for (int j = 0; j < LENGTH(result); j++) {
434 std::string str(CHAR(STRING_ELT(result, j)));
435 ss_ret << escapeQuotes(str) << "\\n";
436 }
437
438 std::string ret =
439 ss_ret.str(); //"find error";//Rcpp::as<std::string>(result);
440
441 fims::FIMSLog::fims_log->error_message(log_entry, -1, "R_env", ret.c_str());
442}
443#endif // FIMS_INTERFACE_RCPP_INTERFACE_HPP
static uint32_t id_g
The static id of the DataInterfaceBase object.
Definition rcpp_data.hpp:32
static std::map< uint32_t, std::shared_ptr< DataInterfaceBase > > live_objects
The map associating the IDs of DataInterfaceBase to the objects. This is a live object,...
Definition rcpp_data.hpp:43
static uint32_t id_g
The static ID of the DistributionsInterfaceBase object.
Definition rcpp_distribution.hpp:24
static std::map< uint32_t, std::shared_ptr< DistributionsInterfaceBase > > live_objects
The map associating the ID of the DistributionsInterfaceBase to the DistributionsInterfaceBase object...
Definition rcpp_distribution.hpp:67
static std::vector< std::shared_ptr< FIMSRcppInterfaceBase > > fims_interface_objects
FIMS interface object vectors.
Definition rcpp_interface_base.hpp:585
static uint32_t id_g
The static id of the FleetInterfaceBase object.
Definition rcpp_models.hpp:47
static std::map< uint32_t, std::shared_ptr< FisheryModelInterfaceBase > > live_objects
The map associating the IDs of FleetInterfaceBase to the objects. This is a live object,...
Definition rcpp_models.hpp:58
static uint32_t id_g
The static id of the FleetInterfaceBase object.
Definition rcpp_fleet.hpp:25
static std::map< uint32_t, std::shared_ptr< FleetInterfaceBase > > live_objects
The map associating the IDs of FleetInterfaceBase to the objects. This is a live object,...
Definition rcpp_fleet.hpp:35
static std::map< uint32_t, std::shared_ptr< GrowthInterfaceBase > > live_objects
The map associating the IDs of GrowthInterfaceBase to the objects. This is a live object,...
Definition rcpp_growth.hpp:34
static uint32_t id_g
The static id of the GrowthInterfaceBase object.
Definition rcpp_growth.hpp:24
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
static uint32_t id_g
The static id of the MaturityInterfaceBase object.
Definition rcpp_maturity.hpp:24
static uint32_t id_g
The static ID of the Parameter object.
Definition rcpp_interface_base.hpp:148
static uint32_t id_g
The static ID of the Parameter object.
Definition rcpp_interface_base.hpp:37
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
static uint32_t id_g
The static id of the RecruitmentInterfaceBase object.
Definition rcpp_recruitment.hpp:25
static std::map< uint32_t, std::shared_ptr< RecruitmentInterfaceBase > > live_objects
The map associating the IDs of RecruitmentInterfaceBase to the objects. This is a live object,...
Definition rcpp_recruitment.hpp:40
static uint32_t id_g
The static id of the SelectivityInterfaceBase.
Definition rcpp_selectivity.hpp:24
static std::map< uint32_t, std::shared_ptr< SelectivityInterfaceBase > > live_objects
The map associating the IDs of SelectivityInterfaceBase to the objects. This is a live object,...
Definition rcpp_selectivity.hpp:35
static std::shared_ptr< FIMSLog > fims_log
A singleton instance of the log, i.e., where there is only one log. The object is created when the ....
Definition def.hpp:263
static std::shared_ptr< Information< Type > > GetInstance()
Returns a singleton Information object for type T.
Definition information.hpp:238
static std::shared_ptr< Model< Type > > GetInstance()
Evaluate. Calculates the joint negative log-likelihood function.
Definition model.hpp:54
The Rcpp interface to declare different types of data, e.g., age-composition and index data....
The Rcpp interface to declare different distributions, e.g., normal and log normal....
The Rcpp interface to declare fleets. Allows for the use of methods::new() in R.
The Rcpp interface to declare different types of growth, e.g., empirical weight-at-age data....
void set_log_path(const std::string &path)
Sets the path for the log file to be written to.
Definition rcpp_interface.hpp:364
std::string get_log_warnings()
Gets the warning entries from the log as a string in JSON format.
Definition rcpp_interface.hpp:347
std::string escapeQuotes(const std::string &input)
Escapes quotations.
Definition rcpp_interface.hpp:397
bool CreateTMBModel()
Initialize and construct the FIMS model using TMB.
Definition rcpp_interface.hpp:74
std::string get_log_info()
Gets the info entries from the log as a string in JSON format.
Definition rcpp_interface.hpp:354
void log_error(std::string log_entry)
Adds a error entry to the log from the R environment.
Definition rcpp_interface.hpp:415
void set_random_parameters(Rcpp::NumericVector par)
Update random effect parameters in the tape, so the output is correct.
Definition rcpp_interface.hpp:168
std::string get_log_errors()
Gets the error entries from the log as a string in JSON format.
Definition rcpp_interface.hpp:342
void log_warning(std::string log_entry)
Adds a warning entry to the log from the R environment.
Definition rcpp_interface.hpp:386
Rcpp::List get_parameter_names(Rcpp::List pars)
Gets the parameter names object.
Definition rcpp_interface.hpp:203
void set_log_throw_on_error(bool throw_on_error)
If true, throws a runtime exception when an error is logged.
Definition rcpp_interface.hpp:371
std::string get_log()
Gets the log entries as a string in JSON format.
Definition rcpp_interface.hpp:337
void clear_internal()
Clears the internal objects.
Definition rcpp_interface.hpp:235
void log_info(std::string log_entry)
Adds an info entry to the log from the R environment.
Definition rcpp_interface.hpp:378
void clear()
Clears the vector of independent variables.
Definition rcpp_interface.hpp:244
Rcpp::NumericVector get_fixed_parameters_vector()
Gets the fixed parameters vector object.
Definition rcpp_interface.hpp:148
Rcpp::NumericVector get_random_parameters_vector()
Gets the random parameters vector object.
Definition rcpp_interface.hpp:183
void write_log(bool write)
If true, writes the log on exit.
Definition rcpp_interface.hpp:359
void init_logging()
Definition rcpp_interface.hpp:27
void set_fixed_parameters(Rcpp::NumericVector par)
Update fixed parameters in the tape, so the output is correct.
Definition rcpp_interface.hpp:133
Rcpp::List get_random_names(Rcpp::List pars)
Gets the random effects names object.
Definition rcpp_interface.hpp:219
The Rcpp interface to declare objects that are used ubiquitously throughout the Rcpp interface,...
The Rcpp interface to declare different maturity options, e.g., logistic. Allows for the use of metho...
The Rcpp interface to declare different types of models. Allows for the use of methods::new() in R.
The Rcpp interface to declare different types of natural mortality. Allows for the use of methods::ne...
The Rcpp interface to declare different types of populations. Allows for the use of methods::new() in...
The Rcpp interface to declare different types of recruitment, e.g., Beverton–Holt stock–recruitment r...
The Rcpp interface to declare different types of selectivity, e.g., logistic and double logistic....