FIMS  v0.10.0
Loading...
Searching...
No Matches
rcpp_selectivity.hpp
Go to the documentation of this file.
1
9#ifndef FIMS_INTERFACE_RCPP_RCPP_OBJECTS_RCPP_SELECTIVITY_HPP
10#define FIMS_INTERFACE_RCPP_RCPP_OBJECTS_RCPP_SELECTIVITY_HPP
11
14
20 public:
24 static uint32_t id_g;
28 uint32_t id;
34 static std::map<uint32_t, std::shared_ptr<SelectivityInterfaceBase>>
36
42 /* Create instance of map: key is id and value is pointer to
43 SelectivityInterfaceBase */
44 // SelectivityInterfaceBase::live_objects[this->id] = this;
45 }
46
54
59
63 virtual uint32_t get_id() = 0;
64
69 virtual double evaluate(double x) = 0;
70};
71
78 public:
87
93 std::make_shared<LogisticSelectivityInterface>(*this);
96 }
97
107
112
117 virtual uint32_t get_id() { return this->id; }
118
124 virtual double evaluate(double x) {
126 LogisticSel.inflection_point.resize(1);
127 LogisticSel.inflection_point[0] = this->inflection_point[0].initial_value_m;
128 LogisticSel.slope.resize(1);
129 LogisticSel.slope[0] = this->slope[0].initial_value_m;
130 return LogisticSel.evaluate(x);
131 }
132
137 virtual void finalize() {
138 if (this->finalized) {
139 // log warning that finalize has been called more than once.
140 FIMS_WARNING_LOG("Logistic Selectivity " + fims::to_string(this->id) +
141 " has been finalized already.");
142 }
143
144 this->finalized = true; // indicate this has been called already
145
146 std::shared_ptr<fims_info::Information<double>> info =
148
150
151 // search for maturity in Information
152 it = info->selectivity_models.find(this->id);
153 // if not found, just return
154 if (it == info->selectivity_models.end()) {
155 FIMS_WARNING_LOG("Logistic Selectivity " + fims::to_string(this->id) +
156 " not found in Information.");
157 return;
158 } else {
159 std::shared_ptr<fims_popdy::LogisticSelectivity<double>> sel =
160 std::dynamic_pointer_cast<fims_popdy::LogisticSelectivity<double>>(
161 it->second);
162
163 for (size_t i = 0; i < inflection_point.size(); i++) {
164 if (this->inflection_point[i].estimation_type_m.get() == "constant") {
165 this->inflection_point[i].final_value_m =
166 this->inflection_point[i].initial_value_m;
167 } else {
168 this->inflection_point[i].final_value_m = sel->inflection_point[i];
169 }
170 }
171
172 for (size_t i = 0; i < slope.size(); i++) {
173 if (this->slope[i].estimation_type_m.get() == "constant") {
174 this->slope[i].final_value_m = this->slope[i].initial_value_m;
175 } else {
176 this->slope[i].final_value_m = sel->slope[i];
177 }
178 }
179 }
180 }
181
188 virtual std::string to_json() {
189 std::stringstream ss;
190
191 ss << "{\n";
192 ss << " \"module_name\":\"Selectivity\",\n";
193 ss << " \"module_type\": \"Logistic\",\n";
194 ss << " \"module_id\": " << this->id << ",\n";
195
196 ss << " \"parameters\": [\n{\n";
197 ss << " \"name\": \"inflection_point\",\n";
198 ss << " \"id\":" << this->inflection_point.id_m << ",\n";
199 ss << " \"type\": \"vector\",\n";
200 ss << " \"dimensionality\": {\n";
201 ss << " \"header\": [null],\n";
202 ss << " \"dimensions\": [1]\n},\n";
203 ss << " \"values\":" << this->inflection_point << "},\n ";
204
205 ss << "{\n";
206 ss << " \"name\": \"slope\",\n";
207 ss << " \"id\":" << this->slope.id_m << ",\n";
208 ss << " \"type\": \"vector\",\n";
209 ss << " \"dimensionality\": {\n";
210 ss << " \"header\": [null],\n";
211 ss << " \"dimensions\": [1]\n},\n";
212 ss << " \"values\":" << this->slope << "}]\n";
213
214 ss << "}";
215
216 return ss.str();
217 }
218
219#ifdef TMB_MODEL
220
221 template <typename Type>
222 bool add_to_fims_tmb_internal() {
223 std::shared_ptr<fims_info::Information<Type>> info =
225
226 std::shared_ptr<fims_popdy::LogisticSelectivity<Type>> selectivity =
227 std::make_shared<fims_popdy::LogisticSelectivity<Type>>();
228 std::stringstream ss;
229 // set relative info
230 selectivity->id = this->id;
231 selectivity->inflection_point.resize(this->inflection_point.size());
232 for (size_t i = 0; i < this->inflection_point.size(); i++) {
233 selectivity->inflection_point[i] =
234 this->inflection_point[i].initial_value_m;
235 if (this->inflection_point[i].estimation_type_m.get() ==
236 "fixed_effects") {
237 ss.str("");
238 ss << "Selectivity." << this->id << ".inflection_point."
239 << this->inflection_point[i].id_m;
240 info->RegisterParameterName(ss.str());
241 info->RegisterParameter(selectivity->inflection_point[i]);
242 }
243 if (this->inflection_point[i].estimation_type_m.get() ==
244 "random_effects") {
245 ss.str("");
246 ss << "Selectivity." << this->id << ".inflection_point."
247 << this->inflection_point[i].id_m;
248 info->RegisterRandomEffect(selectivity->inflection_point[i]);
249 info->RegisterRandomEffectName(ss.str());
250 }
251 }
252 info->variable_map[this->inflection_point.id_m] =
253 &(selectivity)->inflection_point;
254
255 selectivity->slope.resize(this->slope.size());
256 for (size_t i = 0; i < this->slope.size(); i++) {
257 selectivity->slope[i] = this->slope[i].initial_value_m;
258 if (this->slope[i].estimation_type_m.get() == "fixed_effects") {
259 ss.str("");
260 ss << "Selectivity." << this->id << ".slope." << this->slope[i].id_m;
261 info->RegisterParameterName(ss.str());
262 info->RegisterParameter(selectivity->slope[i]);
263 }
264 if (this->slope[i].estimation_type_m.get() == "random_effects") {
265 ss.str("");
266 ss << "Selectivity." << this->id << ".slope." << this->slope[i].id_m;
267 info->RegisterRandomEffectName(ss.str());
268 info->RegisterRandomEffect(selectivity->slope[i]);
269 }
270 }
271 info->variable_map[this->slope.id_m] = &(selectivity)->slope;
272
273 // add to Information
274 info->selectivity_models[selectivity->id] = selectivity;
275
276 return true;
277 }
278
283 virtual bool add_to_fims_tmb() {
284 this->add_to_fims_tmb_internal<TMB_FIMS_REAL_TYPE>();
285 this->add_to_fims_tmb_internal<TMBAD_FIMS_TYPE>();
286
287 return true;
288 }
289
290#endif
291};
292
299 public:
311 std::make_shared<DoubleLogisticSelectivityInterface>(*this);
314 }
315
328
330
332 virtual uint32_t get_id() { return this->id; }
333
338 virtual double evaluate(double x) {
340 DoubleLogisticSel.inflection_point_asc.resize(1);
341 DoubleLogisticSel.inflection_point_asc[0] =
342 this->inflection_point_asc[0].initial_value_m;
343 DoubleLogisticSel.slope_asc.resize(1);
344 DoubleLogisticSel.slope_asc[0] = this->slope_asc[0].initial_value_m;
345 DoubleLogisticSel.inflection_point_desc.resize(1);
346 DoubleLogisticSel.inflection_point_desc[0] =
347 this->inflection_point_desc[0].initial_value_m;
348 DoubleLogisticSel.slope_desc.resize(1);
349 DoubleLogisticSel.slope_desc[0] = this->slope_desc[0].initial_value_m;
350 return DoubleLogisticSel.evaluate(x);
351 }
356 virtual void finalize() {
357 if (this->finalized) {
358 // log warning that finalize has been called more than once.
359 FIMS_WARNING_LOG("Double Logistic Selectivity " +
360 fims::to_string(this->id) +
361 " has been finalized already.");
362 }
363
364 this->finalized = true; // indicate this has been called already
365
366 std::shared_ptr<fims_info::Information<double>> info =
368
370
371 // search for maturity in Information
372 it = info->selectivity_models.find(this->id);
373 // if not found, just return
374 if (it == info->selectivity_models.end()) {
375 FIMS_WARNING_LOG("Double Logistic Selectivity " +
376 fims::to_string(this->id) +
377 " not found in Information.");
378 return;
379 } else {
380 std::shared_ptr<fims_popdy::DoubleLogisticSelectivity<double>> sel =
381 std::dynamic_pointer_cast<
383
384 for (size_t i = 0; i < inflection_point_asc.size(); i++) {
385 if (this->inflection_point_asc[i].estimation_type_m.get() ==
386 "constant") {
387 this->inflection_point_asc[i].final_value_m =
388 this->inflection_point_asc[i].initial_value_m;
389 } else {
390 this->inflection_point_asc[i].final_value_m =
391 sel->inflection_point_asc[i];
392 }
393 }
394
395 for (size_t i = 0; i < slope_asc.size(); i++) {
396 if (this->slope_asc[i].estimation_type_m.get() == "constant") {
397 this->slope_asc[i].final_value_m = this->slope_asc[i].initial_value_m;
398 } else {
399 this->slope_asc[i].final_value_m = sel->slope_asc[i];
400 }
401 }
402
403 for (size_t i = 0; i < inflection_point_desc.size(); i++) {
404 if (this->inflection_point_desc[i].estimation_type_m.get() ==
405 "constant") {
406 this->inflection_point_desc[i].final_value_m =
407 this->inflection_point_desc[i].initial_value_m;
408 } else {
409 this->inflection_point_desc[i].final_value_m =
410 sel->inflection_point_desc[i];
411 }
412 }
413
414 for (size_t i = 0; i < slope_desc.size(); i++) {
415 if (this->slope_desc[i].estimation_type_m.get() == "constant") {
416 this->slope_desc[i].final_value_m =
417 this->slope_desc[i].initial_value_m;
418 } else {
419 this->slope_desc[i].final_value_m = sel->slope_desc[i];
420 }
421 }
422 }
423 }
424
428 virtual std::string to_json() {
429 std::stringstream ss;
430
431 ss << "{\n";
432 ss << " \"module_name\": \"Selectivity\",\n";
433 ss << " \"module_type\": \"DoubleLogistic\",\n";
434 ss << " \"module_id\": " << this->id << ",\n";
435
436 ss << " \"parameters\":[\n{\n";
437 ss << " \"name\": \"inflection_point_asc\",\n";
438 ss << " \"id\":" << this->inflection_point_asc.id_m << ",\n";
439 ss << " \"type\": \"vector\",\n";
440 ss << " \"dimensionality\": {\n";
441 ss << " \"header\": [null],\n";
442 ss << " \"dimensions\": [1]\n},\n";
443 ss << " \"values\":" << this->inflection_point_asc << "},\n";
444
445 ss << "{\n";
446 ss << " \"name\": \"slope_asc\",\n";
447 ss << " \"id\":" << this->slope_asc.id_m << ",\n";
448 ss << " \"type\": \"vector\",\n";
449 ss << " \"dimensionality\": {\n";
450 ss << " \"header\": [null],\n";
451 ss << " \"dimensions\": [1]\n},\n";
452 ss << " \"values\":" << this->slope_asc << "},\n";
453
454 ss << " {\n";
455 ss << " \"name\": \"inflection_point_desc\",\n";
456 ss << " \"id\":" << this->inflection_point_desc.id_m << ",\n";
457 ss << " \"type\": \"vector\",\n";
458 ss << " \"dimensionality\": {\n";
459 ss << " \"header\": [null],\n";
460 ss << " \"dimensions\": [1]\n},\n";
461 ss << " \"values\":" << this->inflection_point_desc << "},\n";
462
463 ss << "{\n";
464 ss << " \"name\": \"slope_desc\",\n";
465 ss << " \"id\":" << this->slope_desc.id_m << ",\n";
466 ss << " \"type\": \"vector\",\n";
467 ss << " \"dimensionality\": {\n";
468 ss << " \"header\": [null],\n";
469 ss << " \"dimensions\": [1]\n},\n";
470 ss << " \"values\":" << this->slope_desc << "}]\n";
471
472 ss << "}";
473
474 return ss.str();
475 }
476
477#ifdef TMB_MODEL
478
479 template <typename Type>
480 bool add_to_fims_tmb_internal() {
481 std::shared_ptr<fims_info::Information<Type>> info =
483
484 std::shared_ptr<fims_popdy::DoubleLogisticSelectivity<Type>> selectivity =
485 std::make_shared<fims_popdy::DoubleLogisticSelectivity<Type>>();
486
487 std::stringstream ss;
488 // set relative info
489 selectivity->id = this->id;
490 selectivity->inflection_point_asc.resize(this->inflection_point_asc.size());
491 for (size_t i = 0; i < this->inflection_point_asc.size(); i++) {
492 selectivity->inflection_point_asc[i] =
493 this->inflection_point_asc[i].initial_value_m;
494 if (this->inflection_point_asc[i].estimation_type_m.get() ==
495 "fixed_effects") {
496 ss.str("");
497 ss << "Selectivity." << this->id << ".inflection_point_asc."
498 << this->inflection_point_asc[i].id_m;
499 info->RegisterParameterName(ss.str());
500 info->RegisterParameter(selectivity->inflection_point_asc[i]);
501 }
502 if (this->inflection_point_asc[i].estimation_type_m.get() ==
503 "random_effects") {
504 ss.str("");
505 ss << "Selectivity." << this->id << ".inflection_point_asc."
506 << this->inflection_point_asc[i].id_m;
507 info->RegisterRandomEffectName(ss.str());
508 info->RegisterRandomEffect(selectivity->inflection_point_asc[i]);
509 }
510 }
511 info->variable_map[this->inflection_point_asc.id_m] =
512 &(selectivity)->inflection_point_asc;
513
514 selectivity->slope_asc.resize(this->slope_asc.size());
515 for (size_t i = 0; i < this->slope_asc.size(); i++) {
516 selectivity->slope_asc[i] = this->slope_asc[i].initial_value_m;
517
518 if (this->slope_asc[i].estimation_type_m.get() == "fixed_effects") {
519 ss.str("");
520 ss << "Selectivity." << this->id << ".slope_asc."
521 << this->slope_asc[i].id_m;
522 info->RegisterParameterName(ss.str());
523 info->RegisterParameter(selectivity->slope_asc[i]);
524 }
525 if (this->slope_asc[i].estimation_type_m.get() == "random_effects") {
526 ss.str("");
527 ss << "Selectivity." << this->id << ".slope_asc."
528 << this->slope_asc[i].id_m;
529 info->RegisterRandomEffectName(ss.str());
530 info->RegisterRandomEffect(selectivity->slope_asc[i]);
531 }
532 }
533 info->variable_map[this->slope_asc.id_m] = &(selectivity)->slope_asc;
534
535 selectivity->inflection_point_desc.resize(
536 this->inflection_point_desc.size());
537 for (size_t i = 0; i < this->inflection_point_desc.size(); i++) {
538 selectivity->inflection_point_desc[i] =
539 this->inflection_point_desc[i].initial_value_m;
540
541 if (this->inflection_point_desc[i].estimation_type_m.get() ==
542 "fixed_effects") {
543 ss.str("");
544 ss << "Selectivity." << this->id << ".inflection_point_desc."
545 << this->inflection_point_desc[i].id_m;
546 info->RegisterParameterName(ss.str());
547 info->RegisterParameter(selectivity->inflection_point_desc[i]);
548 }
549 if (this->inflection_point_desc[i].estimation_type_m.get() ==
550 "random_effects") {
551 ss.str("");
552 ss << "Selectivity." << this->id << ".inflection_point_desc."
553 << this->inflection_point_desc[i].id_m;
554 info->RegisterRandomEffectName(ss.str());
555 info->RegisterRandomEffect(selectivity->inflection_point_desc[i]);
556 }
557 }
558 info->variable_map[this->inflection_point_desc.id_m] =
559 &(selectivity)->inflection_point_desc;
560
561 selectivity->slope_desc.resize(this->slope_desc.size());
562 for (size_t i = 0; i < this->slope_desc.size(); i++) {
563 selectivity->slope_desc[i] = this->slope_desc[i].initial_value_m;
564
565 if (this->slope_desc[i].estimation_type_m.get() == "fixed_effects") {
566 ss.str("");
567 ss << "Selectivity." << this->id << ".slope_desc."
568 << this->slope_desc[i].id_m;
569 info->RegisterParameterName(ss.str());
570 info->RegisterParameter(selectivity->slope_desc[i]);
571 }
572 if (this->slope_desc[i].estimation_type_m.get() == "random_effects") {
573 ss.str("");
574 ss << "Selectivity." << this->id << ".slope_desc."
575 << this->slope_desc[i].id_m;
576 info->RegisterRandomEffectName(ss.str());
577 info->RegisterRandomEffect(selectivity->slope_desc[i]);
578 }
579 }
580
581 info->variable_map[this->slope_desc.id_m] = &(selectivity)->slope_desc;
582
583 // add to Information
584 info->selectivity_models[selectivity->id] = selectivity;
585
586 return true;
587 }
588
593 virtual bool add_to_fims_tmb() {
594 this->add_to_fims_tmb_internal<TMB_FIMS_REAL_TYPE>();
595 this->add_to_fims_tmb_internal<TMBAD_FIMS_TYPE>();
596
597 return true;
598 }
599
600#endif
601};
602
609 public:
626
632 std::make_shared<AgeSpecificSelectivityInterface>(*this);
635 }
636
648
653
658 virtual uint32_t get_id() { return this->id; }
659
665 virtual double evaluate(double x) {
667 AgeSpecificSel.n_ages = this->n_ages.get();
668 if (this->ages.size() > 0) {
669 AgeSpecificSel.min_age = static_cast<size_t>(*std::min_element(
670 this->ages.storage_m->begin(), this->ages.storage_m->end()));
671 } else {
672 AgeSpecificSel.min_age = static_cast<size_t>(this->min_age.get());
673 }
674 AgeSpecificSel.logit_sel_at_age.resize(this->logit_sel_at_age.size());
675 for (size_t i = 0; i < this->logit_sel_at_age.size(); i++) {
676 AgeSpecificSel.logit_sel_at_age[i] =
677 this->logit_sel_at_age[i].initial_value_m;
678 }
679 return AgeSpecificSel.evaluate(x);
680 }
681
686 virtual void finalize() {
687 if (this->finalized) {
688 // log warning that finalize has been called more than once.
689 FIMS_WARNING_LOG("Age Specific Selectivity " + fims::to_string(this->id) +
690 " has been finalized already.");
691 }
692
693 this->finalized = true; // indicate this has been called already
694
695 std::shared_ptr<fims_info::Information<double>> info =
697
699
700 // search for maturity in Information
701 it = info->selectivity_models.find(this->id);
702 // if not found, just return
703 if (it == info->selectivity_models.end()) {
704 FIMS_WARNING_LOG("Age Specific Selectivity " + fims::to_string(this->id) +
705 " not found in Information.");
706 return;
707 } else {
708 std::shared_ptr<fims_popdy::AgeSpecificSelectivity<double>> sel =
709 std::dynamic_pointer_cast<fims_popdy::AgeSpecificSelectivity<double>>(
710 it->second);
711 for (size_t i = 0; i < logit_sel_at_age.size(); i++) {
712 if (this->logit_sel_at_age[i].estimation_type_m.get() == "constant") {
713 this->logit_sel_at_age[i].final_value_m =
714 this->logit_sel_at_age[i].initial_value_m;
715 } else {
716 this->logit_sel_at_age[i].final_value_m = sel->logit_sel_at_age[i];
717 }
718 }
719 }
720 }
721
728 virtual std::string to_json() {
729 std::stringstream ss;
730
731 ss << "{\n";
732 ss << " \"module_name\":\"Selectivity\",\n";
733 ss << " \"module_type\": \"AgeSpecific\",\n";
734 ss << " \"module_id\": " << this->id << ",\n";
735
736 ss << " \"parameters\": [\n{\n";
737 ss << " \"name\": \"logit_sel_at_age\",\n";
738 ss << " \"id\":" << this->logit_sel_at_age.id_m << ",\n";
739 ss << " \"type\": \"vector\",\n";
740 ss << " \"dimensionality\": {\n";
741 ss << " \"header\": [\"n_ages\"],\n";
742 ss << " \"dimensions\": [" << this->n_ages.get() << "]\n},\n";
743 ss << " \"values\":" << this->logit_sel_at_age << "}]\n";
744
745 ss << "}";
746
747 return ss.str();
748 }
749
750#ifdef TMB_MODEL
751
752 template <typename Type>
753 bool add_to_fims_tmb_internal() {
754 std::shared_ptr<fims_info::Information<Type>> info =
756
757 std::shared_ptr<fims_popdy::AgeSpecificSelectivity<Type>> selectivity =
758 std::make_shared<fims_popdy::AgeSpecificSelectivity<Type>>();
759 std::stringstream ss;
760 // set relative info
761 selectivity->id = this->id;
762 selectivity->n_ages = this->n_ages.get();
763 selectivity->min_age = *std::min_element(this->ages.storage_m->begin(),
764 this->ages.storage_m->end());
765 selectivity->logit_sel_at_age.resize(this->logit_sel_at_age.size());
766 for (size_t i = 0; i < this->logit_sel_at_age.size(); i++) {
767 selectivity->logit_sel_at_age[i] =
768 this->logit_sel_at_age[i].initial_value_m;
769 if (this->logit_sel_at_age[i].estimation_type_m.get() ==
770 "fixed_effects") {
771 ss.str("");
772 ss << "Selectivity." << this->id << ".logit_sel_at_age."
773 << this->logit_sel_at_age[i].id_m;
774 info->RegisterParameterName(ss.str());
775 info->RegisterParameter(selectivity->logit_sel_at_age[i]);
776 }
777 if (this->logit_sel_at_age[i].estimation_type_m.get() ==
778 "random_effects") {
779 ss.str("");
780 ss << "Selectivity." << this->id << ".logit_sel_at_age."
781 << this->logit_sel_at_age[i].id_m;
782 info->RegisterRandomEffect(selectivity->logit_sel_at_age[i]);
783 info->RegisterRandomEffectName(ss.str());
784 }
785 }
786 info->variable_map[this->logit_sel_at_age.id_m] =
787 &(selectivity)->logit_sel_at_age;
788
789 // add to Information
790 info->selectivity_models[selectivity->id] = selectivity;
791
792 return true;
793 }
794
799 virtual bool add_to_fims_tmb() {
800 this->add_to_fims_tmb_internal<TMB_FIMS_REAL_TYPE>();
801 this->add_to_fims_tmb_internal<TMBAD_FIMS_TYPE>();
802
803 return true;
804 }
805
806#endif
807};
808
809#endif
Rcpp interface for selectivity_at_age to instantiate the object from R: selectivity_at_age <- methods...
Definition rcpp_selectivity.hpp:608
VariableVector logit_sel_at_age
Age-specific selectivity parameter values.
Definition rcpp_selectivity.hpp:625
virtual ~AgeSpecificSelectivityInterface()
The destructor.
Definition rcpp_selectivity.hpp:652
virtual uint32_t get_id()
Gets the ID of the interface base object.
Definition rcpp_selectivity.hpp:658
SharedInt n_ages
The number of age bins.
Definition rcpp_selectivity.hpp:613
virtual void finalize()
Extracts derived quantities back to the Rcpp interface object from the Information object.
Definition rcpp_selectivity.hpp:686
AgeSpecificSelectivityInterface()
The constructor.
Definition rcpp_selectivity.hpp:630
virtual double evaluate(double x)
Evaluate selectivity using fims_math::inv_logit.
Definition rcpp_selectivity.hpp:665
RealVector ages
Vector of ages.
Definition rcpp_selectivity.hpp:617
virtual std::string to_json()
Converts the data to json representation for the output.
Definition rcpp_selectivity.hpp:728
AgeSpecificSelectivityInterface(const AgeSpecificSelectivityInterface &other)
Construct a new Selectivity-at-age Interface object.
Definition rcpp_selectivity.hpp:642
SharedInt min_age
Minimum observed age.
Definition rcpp_selectivity.hpp:621
Rcpp interface for logistic selectivity as an S4 object. To instantiate from R: logistic_selectivity ...
Definition rcpp_selectivity.hpp:298
DoubleLogisticSelectivityInterface(const DoubleLogisticSelectivityInterface &other)
Construct a new Double Logistic Selectivity Interface object.
Definition rcpp_selectivity.hpp:321
VariableVector slope_desc
Definition rcpp_selectivity.hpp:307
virtual double evaluate(double x)
evaluate the double logistic selectivity function
Definition rcpp_selectivity.hpp:338
virtual uint32_t get_id()
returns the id for the double logistic selectivity interface
Definition rcpp_selectivity.hpp:332
VariableVector slope_asc
Definition rcpp_selectivity.hpp:303
VariableVector inflection_point_asc
Definition rcpp_selectivity.hpp:300
VariableVector inflection_point_desc
Definition rcpp_selectivity.hpp:304
virtual std::string to_json()
Convert the data to json representation for the output.
Definition rcpp_selectivity.hpp:428
virtual void finalize()
finalize function. Extracts derived quantities back to the Rcpp interface object from the Information...
Definition rcpp_selectivity.hpp:356
Base class for all interface objects.
Definition rcpp_interface_base.hpp:656
bool finalized
Is the object already finalized? The default is false.
Definition rcpp_interface_base.hpp:661
static std::vector< std::shared_ptr< FIMSRcppInterfaceBase > > fims_interface_objects
FIMS interface object vectors.
Definition rcpp_interface_base.hpp:666
virtual bool add_to_fims_tmb()
A virtual method to inherit to add objects to the TMB model.
Definition rcpp_interface_base.hpp:671
Rcpp interface for logistic selectivity to instantiate the object from R: logistic_selectivity <- met...
Definition rcpp_selectivity.hpp:77
virtual void finalize()
Extracts derived quantities back to the Rcpp interface object from the Information object.
Definition rcpp_selectivity.hpp:137
VariableVector slope
The width of the curve at the inflection point.
Definition rcpp_selectivity.hpp:86
LogisticSelectivityInterface()
The constructor.
Definition rcpp_selectivity.hpp:91
virtual std::string to_json()
Converts the data to json representation for the output.
Definition rcpp_selectivity.hpp:188
virtual ~LogisticSelectivityInterface()
The destructor.
Definition rcpp_selectivity.hpp:111
virtual uint32_t get_id()
Gets the ID of the interface base object.
Definition rcpp_selectivity.hpp:117
VariableVector inflection_point
The index value at which the response reaches 0.5.
Definition rcpp_selectivity.hpp:82
LogisticSelectivityInterface(const LogisticSelectivityInterface &other)
Construct a new Logistic Selectivity Interface object.
Definition rcpp_selectivity.hpp:103
virtual double evaluate(double x)
Evaluate selectivity using the logistic function.
Definition rcpp_selectivity.hpp:124
An Rcpp interface class that defines the RealVector class.
Definition rcpp_interface_base.hpp:432
size_t size()
Returns the size of a RealVector.
Definition rcpp_interface_base.hpp:603
std::shared_ptr< std::vector< double > > storage_m
real storage.
Definition rcpp_interface_base.hpp:441
Rcpp interface that serves as the parent class for Rcpp selectivity interfaces. This type should be i...
Definition rcpp_selectivity.hpp:19
virtual ~SelectivityInterfaceBase()
The destructor.
Definition rcpp_selectivity.hpp:58
SelectivityInterfaceBase()
The constructor.
Definition rcpp_selectivity.hpp:40
virtual uint32_t get_id()=0
Get the ID for the child selectivity interface objects to inherit.
SelectivityInterfaceBase(const SelectivityInterfaceBase &other)
Construct a new Selectivity Interface Base object.
Definition rcpp_selectivity.hpp:52
static uint32_t id_g
The static id of the SelectivityInterfaceBase.
Definition rcpp_selectivity.hpp:24
virtual double evaluate(double x)=0
A method for each child selectivity interface object to inherit so each selectivity option can have a...
uint32_t id
The local id of the SelectivityInterfaceBase object.
Definition rcpp_selectivity.hpp:28
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
A class that provides shared ownership of an integer value.
Definition rcpp_shared_primitive.hpp:29
int get() const
Retrieve the value of the integer.
Definition rcpp_shared_primitive.hpp:127
An Rcpp interface class that defines the VariableVector class.
Definition rcpp_interface_base.hpp:144
Variable & get(size_t pos)
An internal accessor for calling a position of a VariableVector from R.
Definition rcpp_interface_base.hpp:267
uint32_t id_m
The local ID of the Variable object.
Definition rcpp_interface_base.hpp:157
void resize(size_t size)
Resizes a VariableVector to the desired length.
Definition rcpp_interface_base.hpp:295
size_t size()
Returns the size of a VariableVector.
Definition rcpp_interface_base.hpp:288
std::map< uint32_t, std::shared_ptr< fims_popdy::SelectivityBase< Type > > > selectivity_models
Definition information.hpp:83
std::map< uint32_t, std::shared_ptr< fims_popdy::SelectivityBase< Type > > >::iterator selectivity_models_iterator
Definition information.hpp:87
static std::shared_ptr< Information< Type > > GetInstance()
Returns a singleton Information object for type T.
Definition information.hpp:269
#define FIMS_WARNING_LOG(MESSAGE)
Definition def.hpp:648
The Rcpp interface to declare objects that are used ubiquitously throughout the Rcpp interface,...
Includes any .hpp files within the subfolders so that only this file needs to included in include sta...
Age-specific selectivity calculated using one parameter per age bin.
Definition age_specific.hpp:49
size_t min_age
Minimum modeled age, used to map input age to logit_sel_at_age.
Definition age_specific.hpp:65
virtual const Type evaluate(const Type &x)
Calculates selectivity for an age using its age-specific parameter.
Definition age_specific.hpp:89
size_t n_ages
Stores the number of modeled age bins.
Definition age_specific.hpp:60
fims::Vector< Type > logit_sel_at_age
Stores the age-specific selectivity parameters on the logit scale.
Definition age_specific.hpp:55
DoubleLogisticSelectivity class that returns the double logistic function value from fims_math.
Definition double_logistic.hpp:23
fims::Vector< Type > inflection_point_asc
Definition double_logistic.hpp:24
fims::Vector< Type > slope_asc
Definition double_logistic.hpp:27
fims::Vector< Type > slope_desc
Definition double_logistic.hpp:33
fims::Vector< Type > inflection_point_desc
Definition double_logistic.hpp:30
virtual const Type evaluate(const Type &x)
Method of the double logistic selectivity class that implements the double logistic function from FIM...
Definition double_logistic.hpp:52
LogisticSelectivity class that returns the logistic function value from fims_math.
Definition logistic.hpp:29
fims::Vector< Type > slope
Definition logistic.hpp:33
virtual const Type evaluate(const Type &x)
Method of the logistic selectivity class that implements the logistic function from FIMS math.
Definition logistic.hpp:56
fims::Vector< Type > inflection_point
Definition logistic.hpp:31