1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package p3j.experiment.results;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import p3j.misc.math.Matrix2D;
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class MergeSubPopSumOverAgesSelector extends SumOverAgesSelector {
37
38
39 private final AbstractAggregationSelector[] addAggSelectors;
40
41
42 private final AbstractAggregationSelector[] subtractAggSelectors;
43
44
45 private final String fileName;
46
47
48
49
50
51
52
53
54
55
56
57 public MergeSubPopSumOverAgesSelector(
58 AbstractAggregationSelector[] selectorsForAddition,
59 AbstractAggregationSelector[] selectorsForSubtraction,
60 String customFileName) {
61
62 super(null, null, -1);
63 addAggSelectors = getCopy(selectorsForAddition);
64 subtractAggSelectors = getCopy(selectorsForSubtraction);
65 fileName = customFileName;
66 }
67
68
69
70
71
72
73
74
75
76 public MergeSubPopSumOverAgesSelector(
77 AbstractAggregationSelector[] selectorsForAddition, String customFileName) {
78 this(selectorsForAddition, new AbstractAggregationSelector[0],
79 customFileName);
80 }
81
82
83
84
85
86
87
88
89
90
91
92 public MergeSubPopSumOverAgesSelector(
93 List<AbstractAggregationSelector> selectorsForAddition,
94 List<AbstractAggregationSelector> selectorsForSubtraction,
95 String customFileName) {
96 this(selectorsForAddition != null ? selectorsForAddition
97 .toArray(new AbstractAggregationSelector[0]) : null,
98 selectorsForSubtraction != null ? selectorsForSubtraction
99 .toArray(new AbstractAggregationSelector[0]) : null, customFileName);
100 }
101
102
103
104
105
106
107
108
109
110 public MergeSubPopSumOverAgesSelector(
111 List<AbstractAggregationSelector> selectorsForAddition,
112 String customFileName) {
113 this(selectorsForAddition, null, customFileName);
114 }
115
116 @Override
117 public void consider(int trialCount, ResultsOfTrial result) {
118 List<double[]> additionArrays = new ArrayList<double[]>();
119 List<double[]> subtractionArrays = new ArrayList<double[]>();
120
121 for (AbstractAggregationSelector selector : getAddAggregationSelectors()) {
122 additionArrays
123 .add(Matrix2D.sumRows(selector.select(result)).toArray()[0]);
124 }
125 for (AbstractAggregationSelector selector : getSubtractAggregationSelectors()) {
126 subtractionArrays
127 .add(Matrix2D.sumRows(selector.select(result)).toArray()[0]);
128 }
129
130 double[] rowSum = sumPerElement(additionArrays, subtractionArrays);
131
132 System.arraycopy(rowSum, 0, aggregation[trialCount], 0, rowSum.length);
133 }
134
135 @Override
136 protected String getFileName() {
137 return fileName;
138 }
139
140 public AbstractAggregationSelector[] getAddAggregationSelectors() {
141 return addAggSelectors;
142 }
143
144 public AbstractAggregationSelector[] getSubtractAggregationSelectors() {
145 return subtractAggSelectors;
146 }
147
148 }