4 #include "variable.hpp" 13 class Data :
public Structure<Data> {
29 Array<Variable<Normal>,DataYear,Quarter,ZSize>
z_ests;
35 Array<SizeFreqVariable,DataYear,Quarter,Region,Method,Size> size_freqs;
49 double exp_rate_high_ll;
54 template<
class Mirror>
57 .data(m_pl_cpue,
"m_pl_cpue")
58 .data(w_ps_cpue,
"w_ps_cpue")
59 .data(z_ests,
"z_ests")
60 .data(size_freqs,
"size_freqs")
65 m_pl_cpue.read(
"data/input/m_pl_cpue.tsv",
true);
66 w_ps_cpue.read(
"data/input/w_ps_cpue.tsv",
true);
67 size_freqs.read(
"data/input/size_freqs.tsv",
true);
68 z_ests.read(
"data/input/z_ests.tsv",
true);
72 m_pl_cpue.write(
"data/output/m_pl_cpue.tsv",
true);
73 w_ps_cpue.write(
"data/output/w_ps_cpue.tsv",
true);
74 z_ests.write(
"data/output/z_ests.tsv",
true);
75 size_freqs.write(
"data/output/size_freqs.tsv",
76 {
"value",
"proportion",
"size",
"sd"},
77 [](std::ostream& stream,
const SizeFreqVariable& var){
78 stream<<var<<
"\t"<<var.proportion<<
"\t"<<var.size<<
"\t"<<var.sd();
91 void get(uint time,
const Model& model){
92 uint year = IOSKJ::year(time);
93 uint quarter = IOSKJ::quarter(time);
96 if(year>=2000 and year<=2014){
98 m_pl_cpue(year,quarter) = model.biomass_vulnerable(MA,PL) * model.m_pl_quarter(quarter);
101 if(year==2014 and quarter==3){
102 GeometricMean geomean;
103 for(uint year=2004;year<=2012;year++){
104 for(uint quarter=0;quarter<4;quarter++){
108 double scaler = 1/geomean.result();
109 for(
auto& fit : m_pl_cpue) fit *= scaler;
114 if(year>=1985 and year<=2014){
116 static Array<double,Quarter> cpue_quarters;
118 cpue_quarters(quarter) = model.biomass_vulnerable(WE,PS);
121 w_ps_cpue(year) = geomean(cpue_quarters);
125 if(year==2014 and quarter==3){
126 GeometricMean geomean;
127 for(uint year=1991;year<=2010;year++){
130 double scaler = 1/geomean.result();
131 for(
auto& fit : w_ps_cpue) fit *= scaler;
136 if(year>=1982 and year<=2014){
139 for(
auto region : regions){
140 for(
auto method : methods){
141 Array<double,Size> composition = 0;
143 for(
auto size : sizes){
144 for(
auto age : ages){
145 composition(size) += model.numbers(region,age) *
146 model.age_size(age,size) *
147 model.selectivity_size(method,size);
151 composition /= sum(composition);
153 for(
auto size : sizes) size_freqs(year,quarter,region,method,size) = composition(size);
159 if(year>=2005 and year<=2014){
163 for(
auto z_size : z_sizes){
169 uint z_lower = 45+z_size.index()*5;
170 uint size_class = (z_lower-1)/2;
171 for(uint size=size_class;size<size_class+3;size++){
173 double numerator = 0;
174 double denominator = 0;
175 for(
auto age : ages){
177 double number = model.numbers(WE,age) * model.age_size(age,size);
179 double survival = model.survival(age) * model.escapement(WE,age);
181 numerator += survival*number;
182 denominator += number;
185 double survival = numerator/denominator;
187 if(survival>0) z += -log(survival);
188 else z += -log(0.000001);
192 z_ests(year,quarter,z_size) = z;
197 if(year==year_min) exp_rate_high = 0;
198 for(
auto& er : model.exploitation_rate){
199 if(er>0.9) exp_rate_high++;
203 double loglike(
void){
205 for(
auto& item : m_pl_cpue) m_pl_cpue_ll += item.loglike();
208 for(
auto& item : w_ps_cpue) w_ps_cpue_ll += item.loglike();
211 for(
auto& item : z_ests) z_ests_ll += item.loglike();
213 FournierRobustifiedMultivariateNormal::max_size = 30;
215 for(
auto& item : size_freqs) size_freqs_ll += item.loglike();
Definition: variable.hpp:4
Definition: dimensions.hpp:39
double exp_rate_high
Definition: data.hpp:40
double m_pl_cpue_ll
Definition: data.hpp:45
Variable< FournierRobustifiedMultivariateNormal > SizeFreqVariable
Definition: data.hpp:34
Array< Variable< Normal >, DataYear, Quarter, ZSize > z_ests
Definition: data.hpp:29
Array< Variable< Lognormal >, DataYear > w_ps_cpue
Definition: data.hpp:24
Array< Variable< Lognormal >, DataYear, Quarter > m_pl_cpue
Definition: data.hpp:19
void reflect(Mirror &mirror)
Definition: data.hpp:55