29 const vector<int>& minage,
30 const vector<int>& nsex,
31 matrix<Type>& diet_obs,
32 matrix<int>& diet_ctl,
33 array<Type>& diet_prop
35 for(
int stom_ind = 0; stom_ind < diet_obs.rows(); stom_ind++) {
36 int rsp = diet_ctl(stom_ind, 0) - 1;
37 int ksp = diet_ctl(stom_ind, 1) - 1;
38 int r_sex = diet_ctl(stom_ind, 2);
39 int k_sex = diet_ctl(stom_ind, 3);
40 int r_age = diet_ctl(stom_ind, 4) - minage(rsp);
41 int k_age = diet_ctl(stom_ind, 5) - minage(ksp);
42 int flt_yr = diet_ctl(stom_ind, 6);
46 if((k_age < 0) || (r_age < 0))
continue;
52 if(r_sex == 0) { r_end = 1; }
53 else { r_start = r_sex - 1; r_end = r_sex - 1; }
59 if(k_sex == 0) { k_end = 1; }
60 else { k_start = k_sex - 1; k_end = k_sex - 1; }
63 Type obs_val = diet_obs(stom_ind, 1);
65 for(
int j = r_start; j <= r_end; j++) {
66 int r_idx = rsp + (nspp * j);
68 for(
int k = k_start; k <= k_end; k++) {
69 int k_idx = ksp + (nspp * k);
74 int yr = flt_yr - styr;
75 if(yr >= 0 && yr < nyrs_hind) {
76 diet_prop(r_idx, k_idx, r_age, k_age, yr) = obs_val;
79 else if(flt_yr == 0) {
80 for(
int yr = 0; yr < nyrs; yr++) {
81 diet_prop(r_idx, k_idx, r_age, k_age, yr) = obs_val;
100 const vector<int>& nsex,
101 const vector<int>& nages,
102 const vector<Type>& other_food,
103 array<Type>& diet_prop,
104 array<Type>& other_food_diet_prop
106 other_food_diet_prop.setZero();
107 for(
int yr = 0; yr < nyrs; yr++) {
108 for(
int rsp = 0; rsp < nspp; rsp++) {
109 for(
int r_sex = 0; r_sex < nsex(rsp); r_sex++) {
110 int r_idx = rsp + (nspp * r_sex);
111 for(
int r_age = 0; r_age < nages(rsp); r_age++) {
113 other_food_diet_prop(rsp, r_sex, r_age, yr) = Type(1.0);
115 for(
int ksp = 0; ksp < nspp; ksp++) {
116 for(
int k_sex = 0; k_sex < nsex(ksp); k_sex++) {
117 int k_idx = ksp + (nspp * k_sex);
118 for(
int k_age = 0; k_age < nages(ksp); k_age++) {
119 other_food_diet_prop(rsp, r_sex, r_age, yr) -= diet_prop(r_idx, k_idx, r_age, k_age, yr);
124 if(other_food(rsp) > 0) {
125 other_food_diet_prop(rsp, r_sex, r_age, yr) /= other_food(rsp);
127 other_food_diet_prop(rsp, r_sex, r_age, yr) = 0.0;
163 const int& nyrs_hind,
165 const vector<int>& suit_styr,
166 const vector<int>& suit_endyr,
167 const vector<int>& minage,
168 const vector<int>& nsex,
169 const vector<int>& nages,
170 matrix<Type>& diet_obs,
171 matrix<int>& diet_ctl,
172 array<Type>& avgN_at_age,
173 array<Type>& diet_prop_hat,
174 matrix<Type>& diet_hat
176 for(
int stom_ind = 0; stom_ind < diet_obs.rows(); stom_ind++) {
177 int rsp = diet_ctl(stom_ind, 0) - 1;
178 int ksp = diet_ctl(stom_ind, 1) - 1;
179 int r_sex = diet_ctl(stom_ind, 2);
180 int k_sex = diet_ctl(stom_ind, 3);
181 int r_age = diet_ctl(stom_ind, 4) - minage(rsp);
182 int k_age = diet_ctl(stom_ind, 5) - minage(ksp);
183 int flt_yr = diet_ctl(stom_ind, 6);
189 if(r_sex == 0) { r_end = 1; }
190 else { r_start = r_sex - 1; r_end = r_sex - 1; }
192 int num_r_sexes = r_end - r_start + 1;
197 if(k_sex == 0) { k_end = 1; }
198 else { k_start = k_sex - 1; k_end = k_sex - 1; }
202 int yr_start = 0, yr_end = 0;
204 yr_start = flt_yr - styr;
205 yr_end = flt_yr - styr;
206 }
else if (flt_yr == 0) {
207 yr_start = suit_styr(rsp);
208 yr_end = suit_endyr(rsp);
210 yr_start = -flt_yr - styr;
211 yr_end = -flt_yr - styr;
215 if(yr_start < nyrs_hind && yr_end < nyrs_hind) {
217 int n_yrs_evaluated = yr_end - yr_start + 1;
219 for(
int yr = yr_start; yr <= yr_end; yr++) {
223 if((k_age >= 0) & (r_age >= 0)) {
224 Type weighted_sum = 0;
225 Type total_numbers = 0;
226 for(
int r_s = r_start; r_s <= r_end; r_s++) {
227 Type pred_numbers = avgN_at_age(rsp, r_s, r_age, yr);
228 total_numbers += pred_numbers;
229 for(
int k_s = k_start; k_s <= k_end; k_s++) {
230 weighted_sum += diet_prop_hat(rsp + (nspp * r_s), ksp + (nspp * k_s), r_age, k_age, yr) * pred_numbers;
233 if(total_numbers > 0) type_accum += weighted_sum / total_numbers;
237 else if((k_age < 0) & (r_age >= 0)) {
238 Type weighted_sum = 0;
239 Type total_numbers = 0;
240 for(
int r_s = r_start; r_s <= r_end; r_s++) {
241 Type pred_numbers = avgN_at_age(rsp, r_s, r_age, yr);
242 total_numbers += pred_numbers;
243 for(
int k_s = k_start; k_s <= k_end; k_s++) {
244 for(
int k_age_tmp = 0; k_age_tmp < nages(ksp); k_age_tmp++) {
245 weighted_sum += diet_prop_hat(rsp + (nspp * r_s), ksp + (nspp * k_s), r_age, k_age_tmp, yr) * pred_numbers;
249 if(total_numbers > 0) type_accum += weighted_sum / total_numbers;
253 else if((k_age < 0) & (r_age < 0) & (r_age > -500)) {
254 Type unweighted_sum = 0;
255 for(
int r_s = r_start; r_s <= r_end; r_s++) {
256 for(
int r_age_tmp = 0; r_age_tmp < nages(rsp); r_age_tmp++) {
257 for(
int k_s = k_start; k_s <= k_end; k_s++) {
258 for(
int k_age_tmp = 0; k_age_tmp < nages(ksp); k_age_tmp++) {
259 unweighted_sum += diet_prop_hat(rsp + (nspp * r_s), ksp + (nspp * k_s), r_age_tmp, k_age_tmp, yr);
264 type_accum += unweighted_sum / (num_r_sexes * nages(rsp));
268 else if((k_age < 0) & (r_age < -500)) {
269 Type weighted_sum = 0;
270 Type total_numbers = 0;
271 for(
int r_s = r_start; r_s <= r_end; r_s++) {
272 for(
int r_age_tmp = 0; r_age_tmp < nages(rsp); r_age_tmp++) {
273 Type pred_numbers = avgN_at_age(rsp, r_s, r_age_tmp, yr);
274 total_numbers += pred_numbers;
275 for(
int k_s = k_start; k_s <= k_end; k_s++) {
276 for(
int k_age_tmp = 0; k_age_tmp < nages(ksp); k_age_tmp++) {
277 weighted_sum += diet_prop_hat(rsp + (nspp * r_s), ksp + (nspp * k_s), r_age_tmp, k_age_tmp, yr) * pred_numbers;
282 if(total_numbers > 0) type_accum += weighted_sum / total_numbers;
284 yr_accum += type_accum;
286 diet_hat(stom_ind, 1) = yr_accum / n_yrs_evaluated;
void organize_diet_obs(const int &nspp, const int &nyrs, const int &nyrs_hind, const int &styr, const vector< int > &minage, const vector< int > &nsex, matrix< Type > &diet_obs, matrix< int > &diet_ctl, array< Type > &diet_prop)
Parses empirical diet observations and maps them into a 5D proportion array.
void predict_stomach_content(const int &nspp, const int &nyrs_hind, const int &styr, const vector< int > &suit_styr, const vector< int > &suit_endyr, const vector< int > &minage, const vector< int > &nsex, const vector< int > &nages, matrix< Type > &diet_obs, matrix< int > &diet_ctl, array< Type > &avgN_at_age, array< Type > &diet_prop_hat, matrix< Type > &diet_hat)
Expected stomach content proportions given the modeled population state.