1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package p3j.pppm.parameters;
17
18 import static p3j.pppm.parameters.ParameterType.FERTILITY;
19 import static p3j.pppm.parameters.ParameterType.JUMP_OFF;
20 import static p3j.pppm.parameters.ParameterType.MIGRATION;
21 import static p3j.pppm.parameters.ParameterType.MORTALITY;
22 import static p3j.pppm.parameters.ParameterType.PROP_INF_DEATHS_FIRST_6M;
23 import static p3j.pppm.parameters.ParameterType.PROP_MALE_LIVE_BIRTHS;
24 import static p3j.pppm.parameters.ParameterType.SURV_PROB_OPEN_END;
25
26 import java.util.ArrayList;
27 import java.util.List;
28
29 import org.jamesii.SimSystem;
30
31 import p3j.database.DatabaseFactory;
32 import p3j.database.IP3MDatabase;
33 import p3j.misc.MatrixDimension;
34 import p3j.pppm.ProjectionModel;
35 import p3j.pppm.SubPopulation;
36 import p3j.pppm.SubPopulationModel;
37
38
39
40
41
42
43
44
45
46
47 public class Parameters {
48
49
50 private final List<Parameter> params = new ArrayList<>();
51
52
53
54
55
56 private int sortIndexCounter = 0;
57
58
59
60
61
62
63
64 public Parameters(SubPopulationModel subPopModel) {
65
66 IP3MDatabase db = DatabaseFactory.getDatabaseSingleton();
67
68 List<Parameter> paramsToRegister = createParamsForModel(subPopModel);
69
70
71 for (Parameter p : paramsToRegister) {
72 Parameter registeredParameter = null;
73 try {
74 registeredParameter = db.newParameter(p.getName(), p.getSortingIndex(),
75 p.isGenerationDependent(), p.getValueHeight(), p.getValueWidth(),
76 p.getPopulation());
77 } catch (Exception ex) {
78 SimSystem.report(ex);
79 }
80 if (registeredParameter == null)
81 throw new IllegalStateException("Could not register parameter: " + p);
82 params.add(registeredParameter);
83 }
84 }
85
86 private List<Parameter> createParamsForModel(SubPopulationModel subPopModel) {
87 List<Parameter> parameters = new ArrayList<>();
88 for (SubPopulation subPop : subPopModel.getSubPopulations()) {
89 parameters.addAll(createParamsForSubPop(subPop));
90 }
91 return parameters;
92 }
93
94 private List<Parameter> createParamsForSubPop(SubPopulation subPop) {
95 List<Parameter> parameters = new ArrayList<>();
96
97 if (subPop.isJumpOffPopulation()) {
98 addMaleFemaleParameters(parameters, JUMP_OFF, subPop, false,
99 MatrixDimension.AGES, MatrixDimension.SINGLE);
100 } else {
101 addMaleFemaleParameters(parameters, MIGRATION, subPop, false,
102 MatrixDimension.AGES, MatrixDimension.YEARS);
103 }
104
105 addMaleFemaleParameters(parameters, SURV_PROB_OPEN_END, subPop,
106 MatrixDimension.SINGLE, MatrixDimension.YEARS);
107
108 addMaleFemaleParameters(parameters, PROP_INF_DEATHS_FIRST_6M, subPop,
109 MatrixDimension.SINGLE, MatrixDimension.YEARS);
110
111 addParameter(parameters, PROP_MALE_LIVE_BIRTHS.getLabelFor(subPop),
112 subPop.isConsistingOfDescendantGenerations(), MatrixDimension.SINGLE,
113 MatrixDimension.YEARS);
114
115 addMaleFemaleParameters(parameters, MORTALITY, subPop,
116 MatrixDimension.AGES, MatrixDimension.YEARS);
117
118 addParameter(parameters, FERTILITY.getLabelFor(subPop),
119 subPop.isConsistingOfDescendantGenerations(), MatrixDimension.AGES,
120 MatrixDimension.YEARS);
121
122 return parameters;
123 }
124
125 private void addMaleFemaleParameters(List<Parameter> parameters,
126 ParameterType paramType, SubPopulation subPopulation,
127 MatrixDimension first, MatrixDimension second) {
128 addMaleFemaleParameters(parameters, paramType, subPopulation,
129 subPopulation.isConsistingOfDescendantGenerations(), first, second);
130 }
131
132 private void addMaleFemaleParameters(List<Parameter> parameters,
133 ParameterType paramType, SubPopulation subPopulation,
134 boolean genDependent, MatrixDimension first, MatrixDimension second) {
135 addParameter(parameters, paramType.getMaleLabelFor(subPopulation),
136 genDependent, first, second);
137 addParameter(parameters, paramType.getFemaleLabelFor(subPopulation),
138 genDependent, first, second);
139 }
140
141 private void addParameter(List<Parameter> parameters, String paramName,
142 boolean genDependent, MatrixDimension first, MatrixDimension second) {
143 parameters.add(new Parameter(nextSortingIndex(), genDependent, paramName,
144 first, second, Population.CUSTOM));
145 }
146
147
148
149
150
151
152 private int nextSortingIndex() {
153 return ++sortIndexCounter;
154 }
155
156 public List<Parameter> getParams() {
157 return params;
158 }
159
160 }