222 std::shared_ptr<CatchAtAgeInterface> caa =
223 std::make_shared<CatchAtAgeInterface>(*
this);
242 std::map<uint32_t, std::shared_ptr<PopulationInterfaceBase>>::iterator pit;
245 std::shared_ptr<PopulationInterfaceBase> &pop = (*pit).second;
246 pop->initialize_catch_at_age.set(
true);
262 std::shared_ptr<fims_info::Information<double>> info =
267 std::shared_ptr<fims_popdy::CatchAtAge<double>> model_ptr =
268 std::dynamic_pointer_cast<fims_popdy::CatchAtAge<double>>(
270 model_ptr->do_reporting = report;
284 std::shared_ptr<fims_info::Information<double>> info =
289 std::shared_ptr<fims_popdy::CatchAtAge<double>> model_ptr =
290 std::dynamic_pointer_cast<fims_popdy::CatchAtAge<double>>(
292 return model_ptr->do_reporting;
307 std::shared_ptr<fims_info::Information<double>> info =
312 std::shared_ptr<fims_popdy::CatchAtAge<double>> model_ptr =
313 std::dynamic_pointer_cast<fims_popdy::CatchAtAge<double>>(
315 model_ptr->report_age_to_length_conversion_derived_tensor = report;
334 std::stringstream ss;
336 typename std::map<uint32_t,
337 std::shared_ptr<PopulationInterfaceBase>>::iterator
340 population_interface->
get_id());
344 " not found in live objects.");
348 std::shared_ptr<PopulationInterface> population_interface_ptr =
349 std::dynamic_pointer_cast<PopulationInterface>((*pi_it).second);
351 std::shared_ptr<fims_info::Information<double>> info =
356 std::shared_ptr<fims_popdy::CatchAtAge<double>> model_ptr =
357 std::dynamic_pointer_cast<fims_popdy::CatchAtAge<double>>(
362 pit = info->populations.find(population_interface->
get_id());
364 if (pit != info->populations.end()) {
365 std::shared_ptr<fims_popdy::Population<double>> &pop = (*pit).second;
368 ss <<
" \"module_name\": \"Population\",\n";
369 ss <<
" \"population\": \""
372 ss <<
" \"module_id\": " << population_interface->
id <<
",\n";
373 ss <<
" \"recruitment_id\": " << population_interface->
recruitment_id
375 ss <<
" \"growth_id\": " << population_interface->
growth_id <<
",\n";
376 ss <<
" \"maturity_id\": " << population_interface->
maturity_id <<
",\n";
381 std::stringstream age;
382 age << std::fixed << std::setprecision(10);
383 for (
int i = 0; i < population_interface->
n_ages.
get(); i++) {
384 if (i > 0) age <<
", ";
387 ss <<
" \"age\": [" << age.str() <<
"],\n";
389 ss <<
" \"parameters\": [\n";
390 for (
size_t i = 0; i < pop->log_M.size(); i++) {
391 population_interface_ptr->log_M[i].final_value_m = pop->log_M[i];
394 ss <<
"{\n \"name\": \"log_M\",\n";
395 ss <<
" \"id\":" << population_interface->
log_M.
id_m <<
",\n";
396 ss <<
" \"type\": \"vector\",\n";
397 ss <<
" \"dimensionality\": {\n";
398 ss <<
" \"header\": [" <<
"\"n_years\", \"n_ages\"" <<
"],\n";
399 ss <<
" \"dimensions\": [" << population_interface->
n_years.
get() <<
", "
400 << population_interface->
n_ages.
get() <<
"]\n},\n";
401 ss <<
" \"values\": " << population_interface->
log_M <<
"\n\n";
404 for (
size_t i = 0; i < pop->log_f_multiplier.size(); i++) {
405 population_interface_ptr->log_f_multiplier[i].final_value_m =
406 pop->log_f_multiplier[i];
409 ss <<
"{\n \"name\": \"log_f_multiplier\",\n";
411 ss <<
" \"type\": \"vector\",\n";
412 ss <<
" \"dimensionality\": {\n";
413 ss <<
" \"header\": [" <<
"\"n_years\"" <<
"],\n";
414 ss <<
" \"dimensions\": [" << population_interface->
n_years.
get()
419 for (
size_t i = 0; i < pop->spawning_biomass_ratio.size(); i++) {
420 population_interface_ptr->spawning_biomass_ratio[i].final_value_m =
421 pop->spawning_biomass_ratio[i];
424 ss <<
"{\n \"name\": \"spawning_biomass_ratio\",\n";
427 ss <<
" \"type\": \"vector\",\n";
428 ss <<
" \"dimensionality\": {\n";
429 ss <<
" \"header\": [" <<
"\"n_years\"" <<
"],\n";
430 ss <<
" \"dimensions\": [" << (population_interface->
n_years.
get() + 1)
436 for (
size_t i = 0; i < pop->log_init_naa.size(); i++) {
437 population_interface_ptr->log_init_naa[i].final_value_m =
438 pop->log_init_naa[i];
440 ss <<
" {\n\"name\": \"log_init_naa\",\n";
442 ss <<
" \"type\": \"vector\",\n";
443 ss <<
" \"dimensionality\": {\n";
444 ss <<
" \"header\": [" <<
"\"n_ages\"" <<
"],\n";
445 ss <<
" \"dimensions\": [" << population_interface->
n_ages.
get()
448 ss <<
" \"values\":" << population_interface->
log_init_naa <<
"\n";
453 population_interface_ptr->proportion_female[i].final_value_m =
454 pop->proportion_female.get_force_scalar(i);
456 ss <<
" {\n\"name\": \"proportion_female\",\n";
459 ss <<
" \"type\": \"vector\",\n";
460 ss <<
" \"dimensionality\": {\n";
461 ss <<
" \"header\": [" <<
"\"n_ages\"" <<
"],\n";
462 ss <<
" \"dimensions\": ["
468 ss <<
" \"derived_quantities\": [\n";
470 std::map<std::string, fims::Vector<double>> dqs =
471 model_ptr->GetPopulationDerivedQuantities(
472 population_interface->
get_id());
474 std::map<std::string, fims_popdy::DimensionInfo> dim_info =
475 model_ptr->GetPopulationDimensionInfo(population_interface->
get_id());
480 ss <<
" \"name\": \"Population\",\n";
482 ss <<
" \"type\": \"population\",\n";
483 ss <<
" \"tag\": \"" << population_interface->
get_id()
484 <<
" not found in Information.\",\n";
485 ss <<
" \"id\": " << population_interface->
get_id() <<
",\n";
486 ss <<
" \"recruitment_id\": " << population_interface->
recruitment_id
488 ss <<
" \"growth_id\": " << population_interface->
growth_id <<
",\n";
489 ss <<
" \"maturity_id\": " << population_interface->
maturity_id <<
",\n";
490 ss <<
" \"derived_quantities\": []}\n";
504 std::stringstream ss;
506 std::stringstream dim_entry;
508 switch (dim_info.
ndims) {
510 dim_entry <<
"\"dimensionality\": {\n";
511 dim_entry <<
" \"header\": [\"" << dim_info.
dim_names[0] <<
"\"],\n";
512 dim_entry <<
" \"dimensions\": [";
513 for (
size_t i = 0; i < dim_info.
dims.
size(); ++i) {
514 if (i > 0) dim_entry <<
", ";
515 dim_entry << dim_info.
dims[i];
521 dim_entry <<
"\"dimensionality\": {\n";
522 dim_entry <<
" \"header\": [\"" << dim_info.
dim_names[0] <<
"\", \""
524 dim_entry <<
" \"dimensions\": [";
525 for (
size_t i = 0; i < dim_info.
dims.
size(); ++i) {
526 if (i > 0) dim_entry <<
", ";
527 dim_entry << dim_info.
dims[i];
533 dim_entry <<
"\"dimensionality\": {\n";
534 dim_entry <<
" \"header\": [\"" << dim_info.
dim_names[0] <<
"\", \""
537 dim_entry <<
" \"dimensions\": [";
538 for (
size_t i = 0; i < dim_info.
dims.
size(); ++i) {
539 if (i > 0) dim_entry <<
", ";
540 dim_entry << dim_info.
dims[i];
546 dim_entry <<
"\"dimensionality\": {\n";
547 dim_entry <<
" \"header\": [],\n";
548 dim_entry <<
" \"dimensions\": []\n";
555 ss <<
"\"name\":\"" << (*it).first <<
"\",\n";
556 ss << dim_entry.str() <<
",\n";
558 ss << std::fixed << std::setprecision(10);
562 for (
size_t i = 0; i < dq.
size() - 1; i++) {
580 std::map<std::string, fims_popdy::DimensionInfo> &dim_info) {
581 std::stringstream ss;
587 std::map<std::string, fims_popdy::DimensionInfo>::iterator dim_info_it;
588 std::map<std::string, fims::Vector<double>>::iterator it;
589 typename std::map<std::string, fims::Vector<double>>::iterator
590 second_to_last = dqs.end();
594 for (; it != second_to_last; ++it) {
595 dim_info_it = dim_info.find(it->first);
599 dim_info_it = dim_info.find(second_to_last->first);
600 if (dim_info_it != dim_info.end()) {
614 std::stringstream ss;
616 if (!fleet_interface) {
618 "Fleet pointer is null; cannot get id. Not found in live objects.");
622 std::shared_ptr<fims_info::Information<double>> info =
627 std::shared_ptr<fims_popdy::CatchAtAge<double>> model_ptr =
628 std::dynamic_pointer_cast<fims_popdy::CatchAtAge<double>>(
633 fit = info->fleets.find(fleet_interface->
get_id());
635 if (fit != info->fleets.end()) {
636 std::shared_ptr<fims_popdy::Fleet<double>> &fleet = (*fit).second;
639 ss <<
" \"module_name\": \"Fleet\",\n";
640 ss <<
" \"fleet\": \""
643 ss <<
" \"module_id\": " << fleet_interface->
id <<
",\n";
646 ss <<
" \"selectivity_id\": "
648 ss <<
" \"n_ages\": " << fleet_interface->
n_ages.
get() <<
",\n";
649 ss <<
" \"n_years\": " << fleet_interface->
n_years.
get() <<
",\n";
650 ss <<
" \"n_lengths\": " << fleet_interface->
n_lengths.
get() <<
",\n";
654 std::stringstream length;
655 length << std::fixed << std::setprecision(10);
656 for (
int i = 0; i < fleet_interface->
n_lengths.
get(); i++) {
657 if (i > 0) length <<
", ";
660 ss <<
" \"length\": [" << length.str() <<
"],\n";
661 ss <<
"\"data_ids\" : [\n";
664 ss <<
"{\"lengthcomp\": "
671 ss <<
"\"parameters\": [\n";
673 for (
size_t i = 0; i < fleet_interface->
log_Fmort.
size(); i++) {
674 fleet_interface->
log_Fmort[i].final_value_m = fleet->log_Fmort[i];
677 ss <<
" \"name\": \"log_Fmort\",\n";
678 ss <<
" \"id\":" << fleet_interface->
log_Fmort.
id_m <<
",\n";
679 ss <<
" \"type\": \"vector\",\n";
680 ss <<
" \"dimensionality\": {\n";
681 ss <<
" \"header\": [\"" <<
"n_years" <<
"\"],\n";
682 ss <<
" \"dimensions\": [" << fleet_interface->
n_years.
get()
684 ss <<
" \"values\": " << fleet_interface->
log_Fmort <<
"},\n";
687 for (
size_t i = 0; i < fleet->log_q.size(); i++) {
688 fleet_interface->
log_q[i].final_value_m = fleet->log_q[i];
690 ss <<
" \"name\": \"log_q\",\n";
691 ss <<
" \"id\":" << fleet_interface->
log_q.
id_m <<
",\n";
692 ss <<
" \"type\": \"vector\",\n";
693 ss <<
" \"dimensionality\": {\n";
696 if (fleet->log_q.size() > 1) {
697 ss <<
" \"header\": [\"n_years\"],\n";
699 ss <<
" \"header\": [\"na\"],\n";
701 ss <<
" \"dimensions\": [" << fleet->log_q.size() <<
"]\n},\n";
703 ss <<
" \"values\": " << fleet_interface->
log_q <<
"}\n";
705 ss <<
"], \"derived_quantities\": [";
707 std::map<std::string, fims::Vector<double>> dqs =
708 model_ptr->GetFleetDerivedQuantities(fleet_interface->
get_id());
709 std::map<std::string, fims_popdy::DimensionInfo> dim_info =
710 model_ptr->GetFleetDimensionInfo(fleet_interface->
get_id());
714 ss <<
" \"name\": \"Fleet\",\n";
715 ss <<
" \"type\": \"fleet\",\n";
716 ss <<
" \"tag\": \"" << fleet_interface->
get_id()
717 <<
" not found in Information.\",\n";
718 ss <<
" \"derived_quantities\": []}\n";
727 std::set<uint32_t> recruitment_ids;
728 std::set<uint32_t> growth_ids;
729 std::set<uint32_t> maturity_ids;
730 std::set<uint32_t> selectivity_ids;
731 std::set<uint32_t> fleet_ids;
733 typename std::set<uint32_t>::iterator module_id_it;
734 typename std::set<uint32_t>::iterator pit;
735 typename std::set<uint32_t>::iterator fids;
737 pit != this->population_ids->end(); pit++) {
738 std::shared_ptr<PopulationInterface> population_interface =
739 std::dynamic_pointer_cast<PopulationInterface>(
741 if (population_interface) {
742 recruitment_ids.insert(population_interface->recruitment_id.get());
743 growth_ids.insert(population_interface->growth_id.get());
744 maturity_ids.insert(population_interface->maturity_id.get());
746 for (fids = population_interface->fleet_ids->begin();
747 fids != population_interface->fleet_ids->end(); fids++) {
748 fleet_ids.insert(*fids);
753 for (fids = fleet_ids.begin(); fids != fleet_ids.end(); fids++) {
754 std::shared_ptr<FleetInterface> fleet_interface =
755 std::dynamic_pointer_cast<FleetInterface>(
757 if (fleet_interface) {
758 selectivity_ids.insert(fleet_interface->GetSelectivityID());
762 std::shared_ptr<fims_info::Information<double>> info =
765 std::shared_ptr<fims_popdy::CatchAtAge<double>> model =
766 std::dynamic_pointer_cast<fims_popdy::CatchAtAge<double>>(
767 info->models_map[this->
get_id()]);
769 std::shared_ptr<fims_model::Model<double>> model_internal =
770 fims_model::Model<double>::GetInstance();
773 model->do_reporting =
false;
776 double value = model_internal->Evaluate();
778 std::stringstream ss;
783 ss <<
" \"name\": \"CatchAtAge\",\n";
784 ss <<
" \"type\": \"model\",\n";
785 ss <<
" \"estimation_framework\": ";
787 ss <<
"\"Template_Model_Builder (TMB)\",";
791 ss <<
" \"id\": " << this->
get_id() <<
",\n";
792 ss <<
" \"objective_function_value\": " <<
sanitize_val(value) <<
",\n";
793 ss <<
"\"growth\":[\n";
794 for (module_id_it = growth_ids.begin(); module_id_it != growth_ids.end();
796 std::shared_ptr<GrowthInterfaceBase> growth_interface =
799 if (growth_interface != NULL) {
800 growth_interface->finalize();
801 ss << growth_interface->to_json();
802 if (std::next(module_id_it) != growth_ids.end()) {
810 ss <<
"\"recruitment\": [\n";
811 for (module_id_it = recruitment_ids.begin();
812 module_id_it != recruitment_ids.end(); module_id_it++) {
813 std::shared_ptr<RecruitmentInterfaceBase> recruitment_interface =
815 if (recruitment_interface) {
816 recruitment_interface->finalize();
817 ss << recruitment_interface->to_json();
818 if (std::next(module_id_it) != recruitment_ids.end()) {
825 ss <<
"\"maturity\": [\n";
826 for (module_id_it = maturity_ids.begin();
827 module_id_it != maturity_ids.end(); module_id_it++) {
828 std::shared_ptr<MaturityInterfaceBase> maturity_interface =
830 if (maturity_interface) {
831 maturity_interface->finalize();
832 ss << maturity_interface->to_json();
833 if (std::next(module_id_it) != maturity_ids.end()) {
840 ss <<
"\"selectivity\": [\n";
841 for (module_id_it = selectivity_ids.begin();
842 module_id_it != selectivity_ids.end(); module_id_it++) {
843 std::shared_ptr<SelectivityInterfaceBase> selectivity_interface =
845 if (selectivity_interface) {
846 selectivity_interface->finalize();
847 ss << selectivity_interface->to_json();
848 if (std::next(module_id_it) != selectivity_ids.end()) {
855 ss <<
" \"population_ids\": [";
857 pit != this->population_ids->end(); pit++) {
864 ss <<
" \"fleet_ids\": [";
866 for (fids = fleet_ids.begin(); fids != fleet_ids.end(); fids++) {
868 if (std::next(fids) != fleet_ids.end()) {
873 ss <<
"\"populations\": [\n";
874 typename std::set<uint32_t>::iterator pop_it;
875 typename std::set<uint32_t>::iterator pop_end_it;
877 typename std::set<uint32_t>::iterator pop_second_to_last_it;
879 pop_second_to_last_it = std::prev(pop_end_it);
881 pop_second_to_last_it = pop_end_it;
884 pop_it != pop_second_to_last_it; pop_it++) {
885 std::shared_ptr<PopulationInterface> population_interface =
886 std::dynamic_pointer_cast<PopulationInterface>(
888 if (population_interface) {
889 std::set<uint32_t>::iterator fids;
890 for (fids = population_interface->fleet_ids->begin();
891 fids != population_interface->fleet_ids->end(); fids++) {
892 fleet_ids.insert(*fids);
894 population_interface->finalize();
898 " not found in live objects.");
903 std::shared_ptr<PopulationInterface> population_interface =
904 std::dynamic_pointer_cast<PopulationInterface>(
906 if (population_interface) {
907 std::set<uint32_t>::iterator fids;
908 for (fids = population_interface->fleet_ids->begin();
909 fids != population_interface->fleet_ids->end(); fids++) {
910 fleet_ids.insert(*fids);
915 " not found in live objects.");
921 ss <<
"\"fleets\": [\n";
923 typename std::set<uint32_t>::iterator fleet_it;
924 typename std::set<uint32_t>::iterator fleet_end_it;
925 fleet_end_it = fleet_ids.end();
926 typename std::set<uint32_t>::iterator fleet_second_to_last_it;
928 if (fleet_end_it != fleet_ids.begin()) {
929 fleet_second_to_last_it = std::prev(fleet_end_it);
931 for (fleet_it = fleet_ids.begin(); fleet_it != fleet_second_to_last_it;
933 std::shared_ptr<FleetInterface> fleet_interface =
934 std::dynamic_pointer_cast<FleetInterface>(
936 if (fleet_interface) {
937 fleet_interface->finalize();
941 " not found in live objects.");
945 std::shared_ptr<FleetInterface> fleet_interface =
946 std::dynamic_pointer_cast<FleetInterface>(
948 if (fleet_interface) {
952 " not found in live objects.");
958 ss <<
"\"density_components\": [\n";
961 uint32_t, std::shared_ptr<DistributionsInterfaceBase>>::iterator dit;
964 std::shared_ptr<DistributionsInterfaceBase> dist_interface =
966 if (dist_interface) {
967 dist_interface->finalize();
968 ss << dist_interface->to_json();
975 ss <<
"\"data\": [\n";
976 typename std::map<uint32_t, std::shared_ptr<DataInterfaceBase>>::iterator
980 std::shared_ptr<DataInterfaceBase> data_interface = (*d_it).second;
981 if (data_interface) {
982 data_interface->finalize();
983 ss << data_interface->to_json();
992 model->do_reporting =
true;
999 template <
typename Type>
1000 bool add_to_fims_tmb_internal() {
1001 std::shared_ptr<fims_info::Information<Type>> info =
1004 std::shared_ptr<fims_popdy::CatchAtAge<Type>> model =
1005 std::make_shared<fims_popdy::CatchAtAge<Type>>();
1009 for (it = this->
population_ids->begin(); it != this->population_ids->end();
1011 model->AddPopulation((*it));
1014 std::set<uint32_t> fleet_ids;
1015 typedef typename std::set<uint32_t>::iterator fleet_ids_iterator;
1018 info->models_map[this->
get_id()] = model;
1020 for (it = this->
population_ids->begin(); it != this->population_ids->end();
1022 auto population_interface_it =
1024 if (population_interface_it ==
1027 " not found in live objects.");
1031 std::shared_ptr<PopulationInterface> population_interface =
1032 std::dynamic_pointer_cast<PopulationInterface>(
1033 population_interface_it->second);
1034 if (!population_interface) {
1036 " not found in live objects.");
1040 model->InitializePopulationDerivedQuantities(population_interface->id);
1041 std::map<std::string, fims::Vector<Type>> &derived_quantities =
1042 model->GetPopulationDerivedQuantities(population_interface->id);
1044 std::map<std::string, fims_popdy::DimensionInfo>
1045 &derived_quantities_dim_info =
1046 model->GetPopulationDimensionInfo(population_interface->id);
1048 std::stringstream ss;
1050 derived_quantities[
"total_catch_weight"] =
1051 fims::Vector<Type>(population_interface->n_years.get());
1053 derived_quantities_dim_info[
"total_catch_weight"] =
1054 fims_popdy::DimensionInfo(
1055 "total_catch_weight",
1056 fims::Vector<int>{(int)population_interface->n_years.get()},
1057 fims::Vector<std::string>{
"n_years"});
1058 info->variable_map[population_interface->total_catch_weight.id_m] =
1059 &derived_quantities[
"total_catch_weight"];
1061 derived_quantities[
"total_catch_numbers"] =
1062 fims::Vector<Type>(population_interface->n_years.get());
1064 derived_quantities_dim_info[
"total_catch_numbers"] =
1065 fims_popdy::DimensionInfo(
1066 "total_catch_numbers",
1067 fims::Vector<int>{population_interface->n_years.get()},
1068 fims::Vector<std::string>{
"n_years"});
1069 info->variable_map[population_interface->total_catch_numbers.id_m] =
1070 &derived_quantities[
"total_catch_numbers"];
1072 derived_quantities[
"mortality_F"] =
1073 fims::Vector<Type>(population_interface->n_years.get() *
1074 population_interface->n_ages.get());
1075 derived_quantities_dim_info[
"mortality_F"] = fims_popdy::DimensionInfo(
1077 fims::Vector<int>{population_interface->n_years.get(),
1078 population_interface->n_ages.get()},
1079 fims::Vector<std::string>{
"n_years",
"n_ages"});
1080 info->variable_map[population_interface->mortality_F.id_m] =
1081 &derived_quantities[
"mortality_F"];
1083 derived_quantities[
"mortality_M"] =
1084 fims::Vector<Type>(population_interface->n_years.get() *
1085 population_interface->n_ages.get());
1086 derived_quantities_dim_info[
"mortality_M"] = fims_popdy::DimensionInfo(
1088 fims::Vector<int>{population_interface->n_years.get(),
1089 population_interface->n_ages.get()},
1090 fims::Vector<std::string>{
"n_years",
"n_ages"});
1091 info->variable_map[population_interface->mortality_M.id_m] =
1092 &derived_quantities[
"mortality_M"];
1094 derived_quantities[
"mortality_Z"] =
1095 fims::Vector<Type>(population_interface->n_years.get() *
1096 population_interface->n_ages.get());
1097 derived_quantities_dim_info[
"mortality_Z"] = fims_popdy::DimensionInfo(
1099 fims::Vector<int>{population_interface->n_years.get(),
1100 population_interface->n_ages.get()},
1101 fims::Vector<std::string>{
"n_years",
"n_ages"});
1102 info->variable_map[population_interface->mortality_Z.id_m] =
1103 &derived_quantities[
"mortality_Z"];
1105 derived_quantities[
"numbers_at_age"] =
1106 fims::Vector<Type>((population_interface->n_years.get() + 1) *
1107 population_interface->n_ages.get());
1108 derived_quantities_dim_info[
"numbers_at_age"] = fims_popdy::DimensionInfo(
1110 fims::Vector<int>{(population_interface->n_years.get() + 1),
1111 population_interface->n_ages.get()},
1112 fims::Vector<std::string>{
"n_years+1",
"n_ages"});
1113 info->variable_map[population_interface->numbers_at_age.id_m] =
1114 &derived_quantities[
"numbers_at_age"];
1116 derived_quantities[
"unfished_numbers_at_age"] =
1117 fims::Vector<Type>((population_interface->n_years.get() + 1) *
1118 population_interface->n_ages.get());
1119 derived_quantities_dim_info[
"unfished_numbers_at_age"] =
1120 fims_popdy::DimensionInfo(
1121 "unfished_numbers_at_age",
1122 fims::Vector<int>{(population_interface->n_years.get() + 1),
1123 population_interface->n_ages.get()},
1124 fims::Vector<std::string>{
"n_years+1",
"n_ages"});
1125 info->variable_map[population_interface->unfished_numbers_at_age.id_m] =
1126 &derived_quantities[
"unfished_numbers_at_age"];
1128 derived_quantities[
"biomass"] =
1129 fims::Vector<Type>((population_interface->n_years.get() + 1));
1130 derived_quantities_dim_info[
"biomass"] = fims_popdy::DimensionInfo(
1132 fims::Vector<int>{(population_interface->n_years.get() + 1)},
1133 fims::Vector<std::string>{
"n_years+1"});
1134 info->variable_map[population_interface->biomass.id_m] =
1135 &derived_quantities[
"biomass"];
1137 derived_quantities[
"spawning_biomass"] =
1138 fims::Vector<Type>((population_interface->n_years.get() + 1));
1139 derived_quantities_dim_info[
"spawning_biomass"] =
1140 fims_popdy::DimensionInfo(
1142 fims::Vector<int>{(population_interface->n_years.get() + 1)},
1143 fims::Vector<std::string>{
"n_years+1"});
1144 info->variable_map[population_interface->spawning_biomass.id_m] =
1145 &derived_quantities[
"spawning_biomass"];
1147 derived_quantities[
"unfished_biomass"] =
1148 fims::Vector<Type>((population_interface->n_years.get() + 1));
1149 derived_quantities_dim_info[
"unfished_biomass"] =
1150 fims_popdy::DimensionInfo(
1152 fims::Vector<int>{(population_interface->n_years.get() + 1)},
1153 fims::Vector<std::string>{
"n_years+1"});
1154 info->variable_map[population_interface->unfished_biomass.id_m] =
1155 &derived_quantities[
"unfished_biomass"];
1157 derived_quantities[
"unfished_spawning_biomass"] =
1158 fims::Vector<Type>((population_interface->n_years.get() + 1));
1159 derived_quantities_dim_info[
"unfished_spawning_biomass"] =
1160 fims_popdy::DimensionInfo(
1161 "unfished_spawning_biomass",
1162 fims::Vector<int>{(population_interface->n_years.get() + 1)},
1163 fims::Vector<std::string>{
"n_years+1"});
1164 info->variable_map[population_interface->unfished_spawning_biomass.id_m] =
1165 &derived_quantities[
"unfished_spawning_biomass"];
1167 derived_quantities[
"proportion_mature_at_age"] =
1168 fims::Vector<Type>((population_interface->n_years.get() + 1) *
1169 population_interface->n_ages.get());
1170 derived_quantities_dim_info[
"proportion_mature_at_age"] =
1171 fims_popdy::DimensionInfo(
1172 "proportion_mature_at_age",
1173 fims::Vector<int>{(population_interface->n_years.get() + 1),
1174 population_interface->n_ages.get()},
1175 fims::Vector<std::string>{
"n_years+1",
"n_ages"});
1176 info->variable_map[population_interface->proportion_mature_at_age.id_m] =
1177 &derived_quantities[
"proportion_mature_at_age"];
1179 derived_quantities[
"expected_recruitment"] =
1180 fims::Vector<Type>((population_interface->n_years.get() + 1));
1181 derived_quantities_dim_info[
"expected_recruitment"] =
1182 fims_popdy::DimensionInfo(
1183 "expected_recruitment",
1184 fims::Vector<int>{(population_interface->n_years.get() + 1)},
1185 fims::Vector<std::string>{
"n_years+1"});
1186 info->variable_map[population_interface->expected_recruitment.id_m] =
1187 &derived_quantities[
"expected_recruitment"];
1189 derived_quantities[
"sum_selectivity"] =
1190 fims::Vector<Type>(population_interface->n_years.get() *
1191 population_interface->n_ages.get());
1192 derived_quantities_dim_info[
"sum_selectivity"] =
1193 fims_popdy::DimensionInfo(
1195 fims::Vector<int>{population_interface->n_years.get(),
1196 population_interface->n_ages.get()},
1197 fims::Vector<std::string>{
"n_years",
"n_ages"});
1198 info->variable_map[population_interface->sum_selectivity.id_m] =
1199 &derived_quantities[
"sum_selectivity"];
1203 for (fleet_ids_iterator fit = population_interface->fleet_ids->begin();
1204 fit != population_interface->fleet_ids->end(); ++fit) {
1205 fleet_ids.insert(*fit);
1209 for (fleet_ids_iterator it = fleet_ids.begin(); it != fleet_ids.end();
1214 " not found in live objects.");
1218 std::shared_ptr<FleetInterface> fleet_interface =
1219 std::dynamic_pointer_cast<FleetInterface>(fleet_interface_it->second);
1220 if (!fleet_interface) {
1222 " not found in live objects.");
1225 model->InitializeFleetDerivedQuantities(fleet_interface->id);
1226 std::map<std::string, fims::Vector<Type>> &derived_quantities =
1227 model->GetFleetDerivedQuantities(fleet_interface->id);
1229 std::map<std::string, fims_popdy::DimensionInfo>
1230 &derived_quantities_dim_info =
1231 model->GetFleetDimensionInfo(fleet_interface->id);
1235 derived_quantities[
"catch_numbers_at_age"] = fims::Vector<Type>(
1236 fleet_interface->n_years.get() * fleet_interface->n_ages.get());
1237 derived_quantities_dim_info[
"catch_numbers_at_age"] =
1238 fims_popdy::DimensionInfo(
1239 "catch_numbers_at_age",
1240 fims::Vector<int>{(fleet_interface->n_years.get()),
1241 fleet_interface->n_ages.get()},
1242 fims::Vector<std::string>{
"n_years",
"n_ages"});
1243 info->variable_map[fleet_interface->catch_numbers_at_age.id_m] =
1244 &derived_quantities[
"catch_numbers_at_age"];
1246 derived_quantities[
"catch_weight_at_age"] = fims::Vector<Type>(
1247 fleet_interface->n_years.get() * fleet_interface->n_ages.get());
1248 derived_quantities_dim_info[
"catch_weight_at_age"] =
1249 fims_popdy::DimensionInfo(
1250 "catch_weight_at_age",
1251 fims::Vector<int>{(fleet_interface->n_years.get()),
1252 fleet_interface->n_ages.get()},
1253 fims::Vector<std::string>{
"n_years",
"n_ages"});
1254 info->variable_map[fleet_interface->catch_weight_at_age.id_m] =
1255 &derived_quantities[
"catch_weight_at_age"];
1257 derived_quantities[
"catch_numbers_at_length"] = fims::Vector<Type>(
1258 fleet_interface->n_years.get() * fleet_interface->n_lengths.get());
1259 derived_quantities_dim_info[
"catch_numbers_at_length"] =
1260 fims_popdy::DimensionInfo(
1261 "catch_numbers_at_length",
1262 fims::Vector<int>{(fleet_interface->n_years.get()),
1263 fleet_interface->n_lengths.get()},
1264 fims::Vector<std::string>{
"n_years",
"n_lengths"});
1265 info->variable_map[fleet_interface->catch_numbers_at_length.id_m] =
1266 &derived_quantities[
"catch_numbers_at_length"];
1268 derived_quantities[
"catch_weight"] =
1269 fims::Vector<Type>(fleet_interface->n_years.get());
1270 derived_quantities_dim_info[
"catch_weight"] = fims_popdy::DimensionInfo(
1271 "catch_weight", fims::Vector<int>{(fleet_interface->n_years.get())},
1272 fims::Vector<std::string>{
"n_years"});
1273 info->variable_map[fleet_interface->catch_weight.id_m] =
1274 &derived_quantities[
"catch_weight"];
1276 derived_quantities[
"catch_numbers"] =
1277 fims::Vector<Type>(fleet_interface->n_years.get());
1278 derived_quantities_dim_info[
"catch_numbers"] = fims_popdy::DimensionInfo(
1279 "catch_numbers", fims::Vector<int>{(fleet_interface->n_years.get())},
1280 fims::Vector<std::string>{
"n_years"});
1281 info->variable_map[fleet_interface->catch_numbers.id_m] =
1282 &derived_quantities[
"catch_numbers"];
1284 derived_quantities[
"catch_expected"] =
1285 fims::Vector<Type>(fleet_interface->n_years.get());
1286 derived_quantities_dim_info[
"catch_expected"] = fims_popdy::DimensionInfo(
1287 "catch_expected", fims::Vector<int>{(fleet_interface->n_years.get())},
1288 fims::Vector<std::string>{
"n_years"});
1289 info->variable_map[fleet_interface->catch_expected.id_m] =
1290 &derived_quantities[
"catch_expected"];
1292 derived_quantities[
"log_catch_expected"] =
1293 fims::Vector<Type>(fleet_interface->n_years.get());
1294 derived_quantities_dim_info[
"log_catch_expected"] =
1295 fims_popdy::DimensionInfo(
1296 "log_catch_expected",
1297 fims::Vector<int>{(fleet_interface->n_years.get())},
1298 fims::Vector<std::string>{
"n_years"});
1299 info->variable_map[fleet_interface->log_catch_expected.id_m] =
1300 &derived_quantities[
"log_catch_expected"];
1302 derived_quantities[
"agecomp_proportion"] = fims::Vector<Type>(
1303 fleet_interface->n_years.get() * fleet_interface->n_ages.get());
1304 derived_quantities_dim_info[
"agecomp_proportion"] =
1305 fims_popdy::DimensionInfo(
1306 "agecomp_proportion",
1307 fims::Vector<int>{(fleet_interface->n_years.get()),
1308 fleet_interface->n_ages.get()},
1309 fims::Vector<std::string>{
"n_years",
"n_ages"});
1310 info->variable_map[fleet_interface->agecomp_proportion.id_m] =
1311 &derived_quantities[
"agecomp_proportion"];
1313 derived_quantities[
"lengthcomp_proportion"] = fims::Vector<Type>(
1314 fleet_interface->n_years.get() * fleet_interface->n_lengths.get());
1315 derived_quantities_dim_info[
"lengthcomp_proportion"] =
1316 fims_popdy::DimensionInfo(
1317 "lengthcomp_proportion",
1318 fims::Vector<int>{(fleet_interface->n_years.get()),
1319 fleet_interface->n_lengths.get()},
1320 fims::Vector<std::string>{
"n_years",
"n_lengths"});
1321 info->variable_map[fleet_interface->lengthcomp_proportion.id_m] =
1322 &derived_quantities[
"lengthcomp_proportion"];
1325 derived_quantities[
"index_numbers_at_age"] = fims::Vector<Type>(
1326 fleet_interface->n_years.get() * fleet_interface->n_ages.get());
1327 derived_quantities_dim_info[
"index_numbers_at_age"] =
1328 fims_popdy::DimensionInfo(
1329 "index_numbers_at_age",
1330 fims::Vector<int>{(fleet_interface->n_years.get()),
1331 fleet_interface->n_ages.get()},
1332 fims::Vector<std::string>{
"n_years",
"n_ages"});
1333 info->variable_map[fleet_interface->index_numbers_at_age.id_m] =
1334 &derived_quantities[
"index_numbers_at_age"];
1336 derived_quantities[
"index_weight_at_age"] = fims::Vector<Type>(
1337 fleet_interface->n_years.get() * fleet_interface->n_ages.get());
1338 derived_quantities_dim_info[
"index_weight_at_age"] =
1339 fims_popdy::DimensionInfo(
1340 "index_weight_at_age",
1341 fims::Vector<int>{(fleet_interface->n_years.get()),
1342 fleet_interface->n_ages.get()},
1343 fims::Vector<std::string>{
"n_years",
"n_ages"});
1344 info->variable_map[fleet_interface->index_weight_at_age.id_m] =
1345 &derived_quantities[
"index_weight_at_age"];
1347 derived_quantities[
"index_numbers_at_length"] = fims::Vector<Type>(
1348 fleet_interface->n_years.get() * fleet_interface->n_lengths.get());
1349 derived_quantities_dim_info[
"index_numbers_at_length"] =
1350 fims_popdy::DimensionInfo(
1351 "index_numbers_at_length",
1352 fims::Vector<int>{(fleet_interface->n_years.get()),
1353 fleet_interface->n_lengths.get()},
1354 fims::Vector<std::string>{
"n_years",
"n_lengths"});
1355 info->variable_map[fleet_interface->index_numbers_at_length.id_m] =
1356 &derived_quantities[
"index_numbers_at_length"];
1358 derived_quantities[
"index_weight"] =
1359 fims::Vector<Type>(fleet_interface->n_years.get());
1360 derived_quantities_dim_info[
"index_weight"] = fims_popdy::DimensionInfo(
1361 "index_weight", fims::Vector<int>{(fleet_interface->n_years.get())},
1362 fims::Vector<std::string>{
"n_years"});
1363 info->variable_map[fleet_interface->index_weight.id_m] =
1364 &derived_quantities[
"index_weight"];
1366 derived_quantities[
"index_numbers"] =
1367 fims::Vector<Type>(fleet_interface->n_years.get());
1368 derived_quantities_dim_info[
"index_numbers"] = fims_popdy::DimensionInfo(
1369 "index_numbers", fims::Vector<int>{(fleet_interface->n_years.get())},
1370 fims::Vector<std::string>{
"n_years"});
1371 info->variable_map[fleet_interface->index_numbers.id_m] =
1372 &derived_quantities[
"index_numbers"];
1374 derived_quantities[
"index_expected"] =
1375 fims::Vector<Type>(fleet_interface->n_years.get());
1376 derived_quantities_dim_info[
"index_expected"] = fims_popdy::DimensionInfo(
1377 "index_expected", fims::Vector<int>{(fleet_interface->n_years.get())},
1378 fims::Vector<std::string>{
"n_years"});
1379 info->variable_map[fleet_interface->index_expected.id_m] =
1380 &derived_quantities[
"index_expected"];
1382 derived_quantities[
"log_index_expected"] =
1383 fims::Vector<Type>(fleet_interface->n_years.get());
1384 derived_quantities_dim_info[
"log_index_expected"] =
1385 fims_popdy::DimensionInfo(
1386 "log_index_expected",
1387 fims::Vector<int>{(fleet_interface->n_years.get())},
1388 fims::Vector<std::string>{
"n_years"});
1389 info->variable_map[fleet_interface->log_index_expected.id_m] =
1390 &derived_quantities[
"log_index_expected"];
1392 derived_quantities[
"agecomp_expected"] = fims::Vector<Type>(
1393 fleet_interface->n_years.get() * fleet_interface->n_ages.get());
1394 derived_quantities_dim_info[
"agecomp_expected"] =
1395 fims_popdy::DimensionInfo(
1397 fims::Vector<int>{(fleet_interface->n_years.get()),
1398 (fleet_interface->n_ages.get())},
1399 fims::Vector<std::string>{
"n_years",
"n_ages"});
1400 info->variable_map[fleet_interface->agecomp_expected.id_m] =
1401 &derived_quantities[
"agecomp_expected"];
1403 derived_quantities[
"lengthcomp_expected"] = fims::Vector<Type>(
1404 fleet_interface->n_years.get() * fleet_interface->n_lengths.get());
1405 derived_quantities_dim_info[
"lengthcomp_expected"] =
1406 fims_popdy::DimensionInfo(
1407 "lengthcomp_expected",
1408 fims::Vector<int>{(fleet_interface->n_years.get()),
1409 (fleet_interface->n_lengths.get())},
1410 fims::Vector<std::string>{
"n_years",
"n_lengths"});
1411 info->variable_map[fleet_interface->lengthcomp_expected.id_m] =
1412 &derived_quantities[
"lengthcomp_expected"];
1419 this->add_to_fims_tmb_internal<TMB_FIMS_REAL_TYPE>();
1420 this->add_to_fims_tmb_internal<TMBAD_FIMS_TYPE>();