9#ifndef FIMS_INTERFACE_RCPP_RCPP_OBJECTS_RCPP_GROWTH_HPP
10#define FIMS_INTERFACE_RCPP_RCPP_OBJECTS_RCPP_GROWTH_HPP
39 static std::map<uint32_t, std::shared_ptr<GrowthInterfaceBase>>
live_objects;
99 template <
typename Type>
104 std::shared_ptr<fims_popdy::GrowthDerivedObservationBase<Type>>
106 std::shared_ptr<fims_info::Information<Type>> info =
110 info->growth_models.find(this->
id);
113 fims::to_string(this->
id) +
114 " not found in Information.");
118 std::shared_ptr<fims_popdy::GrowthDerivedObservationBase<Type>>
119 growth_observation = std::dynamic_pointer_cast<
121 if (!growth_observation) {
123 fims::to_string(this->
id));
127 return growth_observation;
130 template <
typename Type>
137 growth_observation)
const {
138 std::shared_ptr<fims_info::Information<Type>> info =
140 info->growth_models[growth_observation->id] = growth_observation;
168 std::shared_ptr<std::map<int, std::map<double, double>>>
ewaa;
178 this->ewaa = std::make_shared<std::map<int, std::map<double, double>>>();
180 std::make_shared<EWAAGrowthInterface>(*
this);
182 std::make_shared<EWAAGrowthInterface>(*
this));
219 std::map<int, std::map<double, double>> mymap;
220 const size_t n_years_plus_one =
static_cast<size_t>(
n_years.
get() + 1);
225 Rcpp::stop(
"EWAA Error:: n_years must be at least 1");
230 Rcpp::stop(
"EWAA Error:: ages and weights must have at least one value");
239 "weights size does not match ages size or ages size times "
240 "(n_years + 1), where the plus one is for the beginning "
241 "of the year after the terminal year spawning-biomass "
242 "calculations. weights size: " +
244 " ages size: " + std::to_string(
ages.
size()) +
245 " n_years: " + std::to_string(
n_years.
get()));
249 for (
size_t y = 0; y < n_years_plus_one; y++) {
250 for (
size_t i = 0; i <
ages.
size(); i++) {
257 for (
size_t y = 0; y < n_years_plus_one; y++) {
258 for (
size_t i = 0; i <
ages.
size(); i++) {
277 EWAAGrowth.
ewaa =
make_map(this->ages, this->weights, this->n_years);
281 Rcpp::stop(
"this empirical weight at age object is already initialized");
294 std::stringstream ss;
296 ss <<
" \"module_name\": \"Growth\",\n";
297 ss <<
" \"module_type\": \"EWAA\",\n";
298 ss <<
" \"module_id\":" << this->
id <<
",\n";
299 ss <<
" \"parameters\": [\n{\n";
300 ss <<
" \"name\": \"weight_at_age\",\n";
301 ss <<
" \"id\": null,\n";
302 ss <<
" \"type\": \"vector\",\n";
303 ss <<
" \"dimensionality\": {\n";
304 ss <<
" \"header\": [\"n_years+1\",\"n_ages\"],\n";
305 ss <<
" \"dimensions\": [" << this->n_years.
get() + 1 <<
","
306 << this->ages.
size() <<
"]\n},\n";
308 ss <<
" \"values\": [\n";
311 ss <<
"\"id\": null,\n";
312 ss <<
"\"value\": " <<
weights[i] <<
",\n";
313 ss <<
"\"estimated_value\": " <<
weights[i] <<
",\n";
314 ss <<
"\"estimation_type\": \"constant\"\n";
318 ss <<
"\"id\": null,\n";
321 ss <<
"\"estimation_type\": \"constant\"\n";
329 template <
typename Type>
330 bool add_to_fims_tmb_internal() {
331 std::shared_ptr<fims_info::Information<Type>> info =
334 std::shared_ptr<fims_popdy::EWAAGrowth<Type>> ewaa_growth =
335 std::make_shared<fims_popdy::EWAAGrowth<Type>>();
338 ewaa_growth->id = this->
id;
340 make_map(this->ages, this->weights, this->n_years);
342 info->growth_models[ewaa_growth->id] = ewaa_growth;
352 this->add_to_fims_tmb_internal<TMB_FIMS_REAL_TYPE>();
353 this->add_to_fims_tmb_internal<TMBAD_FIMS_TYPE>();
431 this->length_at_age_sd_at_reference_ages.
resize(0);
432 this->log_sd_mean_length_young.
resize(0);
433 this->log_sd_mean_length_old.
resize(0);
434 this->log_sd_growth_coefficient.
resize(0);
435 this->mean_length_young_mean_length_old_logit_corr.
resize(0);
436 this->mean_length_young_growth_coefficient_logit_corr.
resize(0);
437 this->mean_length_old_growth_coefficient_logit_corr.
resize(0);
442 std::make_shared<VonBertalanffySchnuteGrowthInterface>(*
this);
444 std::make_shared<VonBertalanffySchnuteGrowthInterface>(*
this));
486 fims::to_string(this->
id) +
487 " has been finalized already.");
492 std::shared_ptr<fims_popdy::GrowthDerivedObservationBase<double>>
493 growth_observation = this->GetGrowthObservationFromInfo<double>();
494 if (!growth_observation) {
498 std::shared_ptr<fims_popdy::VonBertalanffySchnuteGrowthModelAdapter<double>>
499 vb = std::dynamic_pointer_cast<
504 fims::to_string(this->
id));
510 for (
size_t i = 0; i < pv.
size(); i++) {
511 if (pv[i].estimation_type_m.
get() ==
"constant") {
512 pv[i].final_value_m = pv[i].initial_value_m;
516 v = fims_math::exp(v);
518 pv[i].final_value_m = v;
523 SetFinalLengthParameter(
524 this->mean_length_young,
525 FinalMeanLengthYoungFromWorkingScale(vb->MeanLengthYoungVector()));
526 SetFinalLengthParameter(
527 this->mean_length_old,
528 FinalMeanLengthOldFromWorkingScale(vb->MeanLengthYoungVector(),
529 vb->MeanLengthOldVector()));
530 set_final(this->growth_coefficient, vb->GrowthCoefficientVector(),
true);
531 set_final(this->reference_age_for_length_young,
532 vb->ReferenceAgeForLengthYoungVector(),
false);
533 set_final(this->reference_age_for_length_old,
534 vb->ReferenceAgeForLengthOldVector(),
false);
535 set_final(this->length_weight_a, vb->LengthWeightAVector(),
true);
536 set_final(this->length_weight_b, vb->LengthWeightBVector(),
true);
537 set_final(this->length_at_age_sd_at_reference_ages,
538 vb->LengthAtAgeSdAtRefAgesVector(),
true);
539 set_final(this->log_sd_mean_length_young,
540 vb->LogSdLengthAtRefAgeYoungVector(),
false);
541 set_final(this->log_sd_mean_length_old, vb->LogSdLengthAtRefAgeOldVector(),
543 set_final(this->log_sd_growth_coefficient,
544 vb->LogSdGrowthCoefficientVector(),
false);
545 set_final(this->mean_length_young_mean_length_old_logit_corr,
546 vb->LogitCorrLengthAtRefAgeYoungLengthAtRefAgeOldVector(),
false);
547 set_final(this->mean_length_young_growth_coefficient_logit_corr,
548 vb->LogitCorrLengthAtRefAgeYoungKVector(),
false);
549 set_final(this->mean_length_old_growth_coefficient_logit_corr,
550 vb->LogitCorrLengthAtRefAgeOldKVector(),
false);
555 Rcpp::stop(
"Negative age not supported");
557 if (this->n_ages.
get() <= 0) {
558 Rcpp::stop(
"n_ages not set");
560 const double age_round = std::round(age);
561 const double tol = 1e-8;
562 if (std::fabs(age - age_round) > tol) {
563 Rcpp::stop(
"Non-integer age not supported yet");
565 ValidateVonBertalanffySchnuteGrowthInputs(
false);
573 this->reference_age_for_length_young[0].initial_value_m;
575 this->reference_age_for_length_old[0].initial_value_m;
584 enum class LengthReferenceParameterization {
585 kEstimatedReferenceLengths = 0,
586 kConstantLengthYoungEstimatedLengthOld,
587 kEstimatedLengthYoungBelowConstantLengthOld,
592 return pv.
size() > 0 && pv[0].estimation_type_m.
get() !=
"constant";
595 double InitialLengthAtRefAgeYoung() {
596 return this->mean_length_young[0].initial_value_m;
599 double InitialLengthAtRefAgeOld() {
600 return this->mean_length_old[0].initial_value_m;
603 LengthReferenceParameterization GetLengthReferenceParameterization() {
604 const bool estimate_length_young = IsEstimated(this->mean_length_young);
605 const bool estimate_length_old = IsEstimated(this->mean_length_old);
607 if (estimate_length_young && estimate_length_old) {
608 return LengthReferenceParameterization::kEstimatedReferenceLengths;
610 if (!estimate_length_young && estimate_length_old) {
611 return LengthReferenceParameterization::
612 kConstantLengthYoungEstimatedLengthOld;
614 if (estimate_length_young && !estimate_length_old) {
615 return LengthReferenceParameterization::
616 kEstimatedLengthYoungBelowConstantLengthOld;
618 return LengthReferenceParameterization::kBothConstant;
621 double FinalMeanLengthYoungFromWorkingScale(
623 switch (GetLengthReferenceParameterization()) {
624 case LengthReferenceParameterization::kEstimatedReferenceLengths:
625 return fims_math::exp(mean_length_young_src[0]);
627 case LengthReferenceParameterization::
628 kConstantLengthYoungEstimatedLengthOld:
629 return InitialLengthAtRefAgeYoung();
631 case LengthReferenceParameterization::
632 kEstimatedLengthYoungBelowConstantLengthOld:
634 mean_length_young_src[0]);
636 case LengthReferenceParameterization::kBothConstant:
637 return InitialLengthAtRefAgeYoung();
640 return InitialLengthAtRefAgeYoung();
643 double FinalMeanLengthOldFromWorkingScale(
646 switch (GetLengthReferenceParameterization()) {
647 case LengthReferenceParameterization::kEstimatedReferenceLengths:
648 case LengthReferenceParameterization::
649 kConstantLengthYoungEstimatedLengthOld:
650 return fims_math::exp(mean_length_old_src[0]);
652 case LengthReferenceParameterization::
653 kEstimatedLengthYoungBelowConstantLengthOld:
654 return InitialLengthAtRefAgeOld();
656 case LengthReferenceParameterization::kBothConstant:
657 return InitialLengthAtRefAgeOld();
660 return InitialLengthAtRefAgeOld();
663 void SetFinalLengthParameter(
VariableVector& pv,
double final_value)
const {
664 for (
size_t i = 0; i < pv.
size(); i++) {
665 if (pv[i].estimation_type_m.get() ==
"constant") {
666 pv[i].final_value_m = pv[i].initial_value_m;
668 pv[i].final_value_m = final_value;
673 template <
typename Type>
674 void ConfigureLengthReferenceParameterization(
675 const std::shared_ptr<
677 switch (GetLengthReferenceParameterization()) {
678 case LengthReferenceParameterization::kEstimatedReferenceLengths:
679 vb->UseEstimatedReferenceMeanLengths();
682 case LengthReferenceParameterization::
683 kConstantLengthYoungEstimatedLengthOld:
684 vb->UseConstantMeanLengthYoungWithEstimatedMeanLengthOld(
685 static_cast<Type
>(InitialLengthAtRefAgeYoung()));
688 case LengthReferenceParameterization::
689 kEstimatedLengthYoungBelowConstantLengthOld:
690 vb->UseEstimatedMeanLengthYoungBelowConstantMeanLengthOld(
691 static_cast<Type
>(InitialLengthAtRefAgeOld()));
694 case LengthReferenceParameterization::kBothConstant:
695 vb->UseConstantReferenceMeanLengths(
696 static_cast<Type
>(InitialLengthAtRefAgeYoung()),
697 static_cast<Type
>(InitialLengthAtRefAgeOld()));
702 void ValidateVonBertalanffySchnuteGrowthInputs(
bool require_variability) {
703 if (this->mean_length_young.
size() < 1 ||
704 this->mean_length_old.size() < 1 ||
705 this->growth_coefficient.size() < 1 ||
706 this->reference_age_for_length_young.size() < 1 ||
707 this->reference_age_for_length_old.size() < 1 ||
708 this->length_weight_a.size() < 1 || this->length_weight_b.size() < 1) {
709 Rcpp::stop(
"VonBertalanffySchnuteGrowth parameters not set");
712 const bool has_sd = this->length_at_age_sd_at_reference_ages.
size() > 0;
713 const bool has_any_structured_delta =
714 this->log_sd_mean_length_young.
size() > 0 ||
715 this->log_sd_mean_length_old.
size() > 0 ||
716 this->log_sd_growth_coefficient.
size() > 0 ||
717 this->mean_length_young_mean_length_old_logit_corr.
size() > 0 ||
718 this->mean_length_young_growth_coefficient_logit_corr.
size() > 0 ||
719 this->mean_length_old_growth_coefficient_logit_corr.
size() > 0;
720 const bool has_structured_delta =
721 this->log_sd_mean_length_young.
size() > 0 &&
722 this->log_sd_mean_length_old.
size() > 0 &&
723 this->log_sd_growth_coefficient.
size() > 0 &&
724 this->mean_length_young_mean_length_old_logit_corr.
size() > 0 &&
725 this->mean_length_young_growth_coefficient_logit_corr.
size() > 0 &&
726 this->mean_length_old_growth_coefficient_logit_corr.
size() > 0;
728 if (require_variability && !has_sd && !has_any_structured_delta) {
730 "VonBertalanffySchnuteGrowth requires either "
731 "length_at_age_sd_at_reference_ages or the structured delta-method "
732 "growth variability inputs");
735 if (has_any_structured_delta && !has_structured_delta) {
737 "von Bertalanffy--Schnute growth requires all six structured "
739 "variability inputs when using that path");
742 if (has_sd && has_structured_delta) {
744 "von Bertalanffy--Schnute growth requires variability inputs for "
745 "one supported path. Supply either the interpolation inputs "
747 "length_at_age_sd_at_reference_ages or the full delta-method "
748 "variability inputs, but not both");
751 if (has_sd && this->length_at_age_sd_at_reference_ages.
size() != 2) {
752 Rcpp::stop(
"length_at_age_sd_at_reference_ages must have two values");
755 if (has_structured_delta &&
756 (this->log_sd_mean_length_young.
size() != 1 ||
757 this->log_sd_mean_length_old.size() != 1 ||
758 this->log_sd_growth_coefficient.size() != 1 ||
759 this->mean_length_young_mean_length_old_logit_corr.size() != 1 ||
760 this->mean_length_young_growth_coefficient_logit_corr.size() != 1 ||
761 this->mean_length_old_growth_coefficient_logit_corr.size() != 1)) {
763 "VonBertalanffySchnuteGrowth currently supports a single structured "
764 "delta-method variability parameter set; expected size 1 for "
765 "each structured uncertainty input");
768 const double a1 = this->reference_age_for_length_young[0].initial_value_m;
769 const double a2 = this->reference_age_for_length_old[0].initial_value_m;
772 "VonBertalanffySchnuteGrowth reference_age_for_length_old must be > "
773 "reference_age_for_length_young");
776 auto check_positive = [](
VariableVector& pv,
const std::string& base_name) {
777 for (
size_t i = 0; i < pv.
size(); i++) {
778 if (pv[i].initial_value_m <= 0.0) {
779 Rcpp::stop((base_name +
" must be > 0").c_str());
784 check_positive(this->mean_length_young,
"mean_length_young");
785 check_positive(this->mean_length_old,
"mean_length_old");
786 check_positive(this->growth_coefficient,
"growth_coefficient");
787 check_positive(this->length_weight_a,
"length_weight_a");
788 check_positive(this->length_weight_b,
"length_weight_b");
790 if (this->mean_length_old[0].initial_value_m <=
791 this->mean_length_young[0].initial_value_m) {
793 "VonBertalanffySchnuteGrowth mean_length_old must be > "
794 "mean_length_young");
798 check_positive(this->length_at_age_sd_at_reference_ages,
799 "length_at_age_sd_at_reference_ages");
805 std::stringstream ss;
808 ss <<
" \"module_name\":\"Growth\",\n";
809 ss <<
" \"module_type\": \"VonBertalanffySchnute\",\n";
810 ss <<
" \"module_id\": " << this->
id <<
",\n";
812 ss <<
" \"parameters\": [\n";
816 ss <<
" \"name\": \"mean_length_young\",\n";
817 ss <<
" \"id\":" << this->mean_length_young.
id_m <<
",\n";
818 ss <<
" \"type\": \"vector\",\n";
819 ss <<
" \"dimensionality\": {\n";
820 ss <<
" \"header\": [null],\n";
821 ss <<
" \"dimensions\": [" << this->mean_length_young.
size() <<
"]\n";
823 ss <<
" \"values\":" << this->mean_length_young <<
"\n";
828 ss <<
" \"name\": \"growth_coefficient\",\n";
829 ss <<
" \"id\":" << this->growth_coefficient.
id_m <<
",\n";
830 ss <<
" \"type\": \"vector\",\n";
831 ss <<
" \"dimensionality\": {\n";
832 ss <<
" \"header\": [null],\n";
833 ss <<
" \"dimensions\": [" << this->growth_coefficient.
size() <<
"]\n";
835 ss <<
" \"values\":" << this->growth_coefficient <<
"\n";
840 ss <<
" \"name\": \"mean_length_old\",\n";
841 ss <<
" \"id\":" << this->mean_length_old.
id_m <<
",\n";
842 ss <<
" \"type\": \"vector\",\n";
843 ss <<
" \"dimensionality\": {\n";
844 ss <<
" \"header\": [null],\n";
845 ss <<
" \"dimensions\": [" << this->mean_length_old.
size() <<
"]\n";
847 ss <<
" \"values\":" << this->mean_length_old <<
"\n";
852 ss <<
" \"name\": \"reference_age_for_length_young\",\n";
853 ss <<
" \"id\":" << this->reference_age_for_length_young.
id_m <<
",\n";
854 ss <<
" \"type\": \"vector\",\n";
855 ss <<
" \"dimensionality\": {\n";
856 ss <<
" \"header\": [null],\n";
857 ss <<
" \"dimensions\": [" << this->reference_age_for_length_young.
size()
860 ss <<
" \"values\":" << this->reference_age_for_length_young <<
"\n";
865 ss <<
" \"name\": \"reference_age_for_length_old\",\n";
866 ss <<
" \"id\":" << this->reference_age_for_length_old.
id_m <<
",\n";
867 ss <<
" \"type\": \"vector\",\n";
868 ss <<
" \"dimensionality\": {\n";
869 ss <<
" \"header\": [null],\n";
870 ss <<
" \"dimensions\": [" << this->reference_age_for_length_old.
size()
873 ss <<
" \"values\":" << this->reference_age_for_length_old <<
"\n";
878 ss <<
" \"name\": \"length_weight_a\",\n";
879 ss <<
" \"id\":" << this->length_weight_a.
id_m <<
",\n";
880 ss <<
" \"type\": \"vector\",\n";
881 ss <<
" \"dimensionality\": {\n";
882 ss <<
" \"header\": [null],\n";
883 ss <<
" \"dimensions\": [" << this->length_weight_a.
size() <<
"]\n";
885 ss <<
" \"values\":" << this->length_weight_a <<
"\n";
890 ss <<
" \"name\": \"length_weight_b\",\n";
891 ss <<
" \"id\":" << this->length_weight_b.
id_m <<
",\n";
892 ss <<
" \"type\": \"vector\",\n";
893 ss <<
" \"dimensionality\": {\n";
894 ss <<
" \"header\": [null],\n";
895 ss <<
" \"dimensions\": [" << this->length_weight_b.
size() <<
"]\n";
897 ss <<
" \"values\":" << this->length_weight_b <<
"\n";
901 auto append_optional_parameter = [&](
const std::string& name,
903 if (pv.
size() == 0) {
909 ss <<
" \"name\": \"" << name <<
"\",\n";
910 ss <<
" \"id\":" << pv.
id_m <<
",\n";
911 ss <<
" \"type\": \"vector\",\n";
912 ss <<
" \"dimensionality\": {\n";
913 ss <<
" \"header\": [null],\n";
914 ss <<
" \"dimensions\": [" << pv.
size() <<
"]\n";
916 ss <<
" \"values\":" << pv <<
"\n";
920 append_optional_parameter(
"length_at_age_sd_at_reference_ages",
921 this->length_at_age_sd_at_reference_ages);
922 append_optional_parameter(
"log_sd_mean_length_young",
923 this->log_sd_mean_length_young);
924 append_optional_parameter(
"log_sd_mean_length_old",
925 this->log_sd_mean_length_old);
926 append_optional_parameter(
"log_sd_growth_coefficient",
927 this->log_sd_growth_coefficient);
928 append_optional_parameter(
929 "mean_length_young_mean_length_old_logit_corr",
930 this->mean_length_young_mean_length_old_logit_corr);
931 append_optional_parameter(
932 "mean_length_young_growth_coefficient_logit_corr",
933 this->mean_length_young_growth_coefficient_logit_corr);
934 append_optional_parameter(
935 "mean_length_old_growth_coefficient_logit_corr",
936 this->mean_length_old_growth_coefficient_logit_corr);
944 template <
typename Type>
945 bool add_to_fims_tmb_internal() {
946 std::shared_ptr<fims_info::Information<Type>> info =
949 std::shared_ptr<fims_popdy::GrowthDerivedObservationBase<Type>>
950 growth_observation = std::make_shared<
952 std::shared_ptr<fims_popdy::VonBertalanffySchnuteGrowthModelAdapter<Type>>
953 vb = std::dynamic_pointer_cast<
958 "Failed to create VonBertalanffySchnute growth-derived observation "
967 ValidateVonBertalanffySchnuteGrowthInputs(
true);
969 std::stringstream ss;
971 const std::string& base_name,
bool log_scale) {
972 target.resize(pv.
size());
973 for (
size_t i = 0; i < pv.
size(); i++) {
974 double v = pv[i].initial_value_m;
977 Rcpp::stop((base_name +
" must be > 0").c_str());
979 v = fims_math::log(v);
981 target[i] =
static_cast<Type
>(v);
982 if (pv[i].estimation_type_m.get() ==
"fixed_effects") {
984 ss <<
"Growth." << this->
id <<
"." << base_name <<
"." << pv[i].
id_m;
985 info->RegisterParameterName(ss.str());
986 info->RegisterParameter(target[i]);
988 if (pv[i].estimation_type_m.get() ==
"random_effects") {
990 ss <<
"Growth." << this->
id <<
"." << base_name <<
"." << pv[i].
id_m;
991 info->RegisterRandomEffectName(ss.str());
992 info->RegisterRandomEffect(target[i]);
995 info->variable_map[pv.
id_m] = ⌖
998 auto load_optional_and_register =
1000 const std::string& base_name,
bool log_scale) {
1001 if (pv.
size() == 0) {
1005 load_and_register(pv, target, base_name, log_scale);
1008 ConfigureLengthReferenceParameterization<Type>(vb);
1010 load_and_register(this->mean_length_young, vb->MeanLengthYoungVector(),
1011 "mean_length_young",
true);
1012 load_and_register(this->mean_length_old, vb->MeanLengthOldVector(),
1013 "mean_length_old",
true);
1014 load_and_register(this->growth_coefficient, vb->GrowthCoefficientVector(),
1015 "growth_coefficient",
true);
1016 load_and_register(this->reference_age_for_length_young,
1017 vb->ReferenceAgeForLengthYoungVector(),
1018 "reference_age_for_length_young",
false);
1019 load_and_register(this->reference_age_for_length_old,
1020 vb->ReferenceAgeForLengthOldVector(),
1021 "reference_age_for_length_old",
false);
1022 load_and_register(this->length_weight_a, vb->LengthWeightAVector(),
1023 "length_weight_a",
true);
1024 load_and_register(this->length_weight_b, vb->LengthWeightBVector(),
1025 "length_weight_b",
true);
1026 load_optional_and_register(this->length_at_age_sd_at_reference_ages,
1027 vb->LengthAtAgeSdAtRefAgesVector(),
1028 "length_at_age_sd_at_reference_ages",
true);
1029 load_optional_and_register(this->log_sd_mean_length_young,
1030 vb->LogSdLengthAtRefAgeYoungVector(),
1031 "log_sd_mean_length_young",
false);
1032 load_optional_and_register(this->log_sd_mean_length_old,
1033 vb->LogSdLengthAtRefAgeOldVector(),
1034 "log_sd_mean_length_old",
false);
1035 load_optional_and_register(this->log_sd_growth_coefficient,
1036 vb->LogSdGrowthCoefficientVector(),
1037 "log_sd_growth_coefficient",
false);
1038 load_optional_and_register(
1039 this->mean_length_young_mean_length_old_logit_corr,
1040 vb->LogitCorrLengthAtRefAgeYoungLengthAtRefAgeOldVector(),
1041 "mean_length_young_mean_length_old_logit_corr",
false);
1042 load_optional_and_register(
1043 this->mean_length_young_growth_coefficient_logit_corr,
1044 vb->LogitCorrLengthAtRefAgeYoungKVector(),
1045 "mean_length_young_growth_coefficient_logit_corr",
false);
1046 load_optional_and_register(
1047 this->mean_length_old_growth_coefficient_logit_corr,
1048 vb->LogitCorrLengthAtRefAgeOldKVector(),
1049 "mean_length_old_growth_coefficient_logit_corr",
false);
1051 this->RegisterGrowthObservationInInfo<Type>(growth_observation);
1056 this->add_to_fims_tmb_internal<TMB_FIMS_REAL_TYPE>();
1057 this->add_to_fims_tmb_internal<TMBAD_FIMS_TYPE>();
Rcpp interface for EWAAGrowth to instantiate the object from R: ewaa <- methods::new(EWAAGrowth)....
Definition rcpp_growth.hpp:149
virtual ~EWAAGrowthInterface()
The destructor.
Definition rcpp_growth.hpp:201
SharedInt n_years
An integer specifying the number of years.
Definition rcpp_growth.hpp:163
std::shared_ptr< std::map< int, std::map< double, double > > > ewaa
A map of empirical weight-at-age values allowing multiple modules to access and modify the weights wi...
Definition rcpp_growth.hpp:168
virtual uint32_t get_id()
Gets the ID of the interface base object.
Definition rcpp_growth.hpp:207
RealVector ages
Ages (years) for each age class.
Definition rcpp_growth.hpp:158
virtual double evaluate(double age)
Evaluate the growth using empirical weight at age.
Definition rcpp_growth.hpp:271
EWAAGrowthInterface(const EWAAGrowthInterface &other)
Construct a new EWAAGrowthInterface object.
Definition rcpp_growth.hpp:190
std::map< int, std::map< double, double > > make_map(RealVector ages, RealVector weights, SharedInt n_years)
Create a map of input numeric vectors.
Definition rcpp_growth.hpp:216
bool initialized
Have weight and age vectors been set? The default is false.
Definition rcpp_growth.hpp:172
RealVector weights
Weights (mt) for each age class.
Definition rcpp_growth.hpp:154
EWAAGrowthInterface()
The constructor.
Definition rcpp_growth.hpp:177
virtual std::string to_json()
Converts the data to json representation for the output.
Definition rcpp_growth.hpp:293
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 base for growth models that can register a growth-derived observation capability with ...
Definition rcpp_growth.hpp:84
void RegisterGrowthObservationInInfo(const std::shared_ptr< fims_popdy::GrowthDerivedObservationBase< Type > > &growth_observation) const
Register a runtime growth-derived observation in Information.
Definition rcpp_growth.hpp:135
GrowthDerivedObservationInterfaceBase(const GrowthDerivedObservationInterfaceBase &other)
Copy constructor.
Definition rcpp_growth.hpp:92
std::shared_ptr< fims_popdy::GrowthDerivedObservationBase< Type > > GetGrowthObservationFromInfo() const
Look up the registered growth-derived observation object.
Definition rcpp_growth.hpp:105
Rcpp interface that serves as the parent class for Rcpp growth interfaces. This type should be inheri...
Definition rcpp_growth.hpp:24
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:39
virtual double evaluate(double age)=0
A method for each child growth interface object to inherit so each growth option can have an evaluate...
GrowthInterfaceBase(const GrowthInterfaceBase &other)
Construct a new Growth Interface Base object.
Definition rcpp_growth.hpp:57
static uint32_t id_g
The static id of the GrowthInterfaceBase object.
Definition rcpp_growth.hpp:29
virtual ~GrowthInterfaceBase()
The destructor.
Definition rcpp_growth.hpp:62
GrowthInterfaceBase()
The constructor.
Definition rcpp_growth.hpp:44
uint32_t id
The local id of the GrowthInterfaceBase object.
Definition rcpp_growth.hpp:33
virtual uint32_t get_id()=0
Get the ID for the child growth interface objects to inherit.
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
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
Rcpp-facing VonBertalanffySchnute growth module. Inherits "derived observation" capability so this gr...
Definition rcpp_growth.hpp:368
VonBertalanffySchnuteGrowthInterface(const VonBertalanffySchnuteGrowthInterface &other)
Copy constructor.
Definition rcpp_growth.hpp:451
VariableVector log_sd_growth_coefficient
Working-scale von Bertalanffy–Schnute variability parameter for sd(log(growth_coefficient)).
Definition rcpp_growth.hpp:405
virtual void finalize()
Extracts derived quantities back to the Rcpp interface object from the Information object.
Definition rcpp_growth.hpp:483
VariableVector mean_length_young
Expected length at the first reference age.
Definition rcpp_growth.hpp:371
virtual uint32_t get_id()
Get the ID for the child growth interface objects to inherit.
Definition rcpp_growth.hpp:477
VariableVector log_sd_mean_length_young
Working-scale von Bertalanffy–Schnute variability parameter for sd(log(mean_length_young)).
Definition rcpp_growth.hpp:395
VariableVector reference_age_for_length_young
First reference age for the length parameterization.
Definition rcpp_growth.hpp:378
VariableVector mean_length_young_growth_coefficient_logit_corr
Working-scale von Bertalanffy–Schnute variability parameter for corr(log(mean_length_young),...
Definition rcpp_growth.hpp:415
VariableVector length_at_age_sd_at_reference_ages
Natural-scale SD values at the two reference ages for the legacy interpolation path.
Definition rcpp_growth.hpp:390
VariableVector growth_coefficient
Growth coefficient.
Definition rcpp_growth.hpp:375
virtual double evaluate(double age)
A method for each child growth interface object to inherit so each growth option can have an evaluate...
Definition rcpp_growth.hpp:553
VonBertalanffySchnuteGrowthInterface()
Construct a new VonBertalanffySchnute growth interface.
Definition rcpp_growth.hpp:427
SharedInt n_ages
Modeled number of ages used for validation.
Definition rcpp_growth.hpp:422
VariableVector reference_age_for_length_old
Second reference age for the length parameterization.
Definition rcpp_growth.hpp:380
VariableVector length_weight_a
Coefficient in the length-weight relationship, W = a * L^b.
Definition rcpp_growth.hpp:383
VariableVector log_sd_mean_length_old
Working-scale von Bertalanffy–Schnute variability parameter for sd(log(mean_length_old)).
Definition rcpp_growth.hpp:400
VariableVector mean_length_old_growth_coefficient_logit_corr
Working-scale von Bertalanffy–Schnute variability parameter for corr(log(mean_length_old),...
Definition rcpp_growth.hpp:420
VariableVector mean_length_young_mean_length_old_logit_corr
Working-scale von Bertalanffy–Schnute variability parameter for corr(log(mean_length_young),...
Definition rcpp_growth.hpp:410
VariableVector mean_length_old
Expected length at the second reference age.
Definition rcpp_growth.hpp:373
virtual std::string to_json()
Convert the data to json representation for the output.
Definition rcpp_growth.hpp:804
VariableVector length_weight_b
Exponent in the length-weight relationship, W = a * L^b.
Definition rcpp_growth.hpp:385
Definition fims_vector.hpp:27
Generic capability interface for growth models that can feed the growth-derived age-to-length convers...
Definition growth_model_adapter.hpp:26
von Bertalanffy–Schnute growth model adapter implementing the generic growth-derived observation capa...
Definition growth_model_adapter.hpp:79
#define FIMS_WARNING_LOG(MESSAGE)
Definition def.hpp:648
A collection of mathematical functions used in FIMS.
const Type inv_logit(const Type &a, const Type &b, const Type &logit_x)
An inverse logit function for bounding of parameters.
Definition fims_math.hpp:276
Establishes the FIMS Vector class.
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,...
EWAAGrowth class that returns the EWAA function value.
Definition ewaa.hpp:23
std::map< int, std::map< double, double > > ewaa
Definition ewaa.hpp:29
virtual const Type evaluate(int year, const double &a)
Returns the weight at age a (in kg) from the input vector.
Definition ewaa.hpp:44
VonBertalanffySchnute growth functor for length-at-age and weight-at-age.
Definition vonb_schnute.hpp:32
Type mean_length_young
Expected length at the first reference age.
Definition vonb_schnute.hpp:34
Type reference_age_for_length_old
Second reference age for the length parameterization.
Definition vonb_schnute.hpp:42
Type growth_coefficient
Growth coefficient.
Definition vonb_schnute.hpp:38
Type length_weight_b
Exponent in the length-weight relationship, W = a * L^b.
Definition vonb_schnute.hpp:47
Type reference_age_for_length_young
First reference age for the length parameterization.
Definition vonb_schnute.hpp:40
Type length_weight_a
Coefficient in the length-weight relationship, W = a * L^b.
Definition vonb_schnute.hpp:45
virtual const Type evaluate(int year, const double &a) override
Calculates the growth at the independent variable value.
Definition vonb_schnute.hpp:194
Type mean_length_old
Expected length at the second reference age.
Definition vonb_schnute.hpp:36