1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package p3j.experiment.results;
17
18
19
20
21
22
23
24
25 public class MergeSubPopChooseAgesSingleYearSelector extends
26 ChooseAgesForSingleYearSelector {
27
28
29 private final AbstractAggregationSelector[] addAggSelectors;
30
31
32 private final AbstractAggregationSelector[] subtractAggSelectors;
33
34
35 private final String fileName;
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public MergeSubPopChooseAgesSingleYearSelector(
50 AbstractAggregationSelector[] selectorsForAddition,
51 AbstractAggregationSelector[] selectorsForSubtraction,
52 int yearForSelection, String customFileName) {
53
54 super(null, null, -1, yearForSelection);
55 addAggSelectors = getCopy(selectorsForAddition);
56 subtractAggSelectors = getCopy(selectorsForSubtraction);
57 fileName = customFileName;
58 }
59
60
61
62
63
64
65
66
67
68 public MergeSubPopChooseAgesSingleYearSelector(
69 MergeSubPopSumOverAgesSelector mergeSumSelector, int yearForSelection) {
70 this(mergeSumSelector.getAddAggregationSelectors(), mergeSumSelector
71 .getSubtractAggregationSelectors(), yearForSelection, mergeSumSelector
72 .getFileName());
73 }
74
75
76
77
78
79
80 @Override
81 protected String getFileName() {
82 return getPrefix() + fileName;
83 }
84
85 @Override
86 public void consider(int trialCount, ResultsOfTrial result) {
87 double[] currentData = new double[getNumberOfAgeClasses()];
88 processSelectors(result, currentData, addAggSelectors, true);
89 processSelectors(result, currentData, subtractAggSelectors, false);
90 System.arraycopy(currentData, 0, aggregation[trialCount], 0,
91 getNumberOfAgeClasses());
92 }
93
94
95
96
97
98
99
100
101
102
103
104
105
106 private void processSelectors(ResultsOfTrial result, double[] currentData,
107 AbstractAggregationSelector[] selectors, boolean add) {
108 if (selectors != null) {
109 for (AbstractAggregationSelector selector : selectors) {
110 double[][] selectedData = selector.select(result).toArray();
111 for (int i = 0; i < getNumberOfAgeClasses(); i++) {
112 currentData[i] = currentData[i]
113 + (add ? selectedData[i][getYear()] : -1
114 * selectedData[i][getYear()]);
115 }
116 }
117 }
118 }
119 }