1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package p3j.experiment.results;
17
18 import java.io.File;
19 import java.io.IOException;
20 import java.util.ArrayList;
21 import java.util.List;
22 import java.util.logging.Level;
23
24 import org.jamesii.SimSystem;
25
26
27
28
29
30
31
32
33 public class YearlyAgeTrialMatrixSelector extends AbstractAggregationSelector {
34
35
36 private final AbstractAggregationSelector[] addSelectors;
37
38
39 private final AbstractAggregationSelector[] subSelectors;
40
41
42 private final String fileName;
43
44
45 private final int year;
46
47
48
49
50
51
52
53
54
55
56
57
58
59 public YearlyAgeTrialMatrixSelector(AbstractAggregationSelector[] addSels,
60 AbstractAggregationSelector[] subSels, String customFileName,
61 int yearOfInterest) {
62 super(null, null, -1);
63 addSelectors = getCopy(addSels);
64 subSelectors = getCopy(subSels);
65 year = yearOfInterest;
66 fileName = customFileName + year + ".csv";
67 }
68
69
70
71
72
73
74
75
76
77
78
79
80
81 public YearlyAgeTrialMatrixSelector(
82 List<AbstractAggregationSelector> selectorsForAddition,
83 List<AbstractAggregationSelector> selectorsForSubtraction,
84 String customFileName, int yearOfInterest) {
85 this(selectorsForAddition != null ? selectorsForAddition
86 .toArray(new AbstractAggregationSelector[0]) : null,
87 selectorsForSubtraction != null ? selectorsForSubtraction
88 .toArray(new AbstractAggregationSelector[0]) : null,
89 customFileName, yearOfInterest);
90 }
91
92 @Override
93 public void init(int numOfTrials, int numOfYears, int numOfAgeClasses) {
94 aggregation = new double[numOfTrials][numOfAgeClasses];
95 }
96
97 @Override
98 public void consider(int trialCount, ResultsOfTrial result) {
99 List<double[]> additionArrays = new ArrayList<double[]>();
100 List<double[]> subtractionArrays = new ArrayList<double[]>();
101
102 for (AbstractAggregationSelector selector : addSelectors) {
103 additionArrays.add(selector.select(result).viewColumn(year).toArray());
104 }
105
106 for (AbstractAggregationSelector selector : subSelectors) {
107 subtractionArrays.add(selector.select(result).viewColumn(year).toArray());
108 }
109
110 double[] ageStructure = sumPerElement(additionArrays, subtractionArrays);
111
112 System.arraycopy(ageStructure, 0, aggregation[trialCount], 0,
113 ageStructure.length);
114 }
115
116 @Override
117 public void finish(File destinationDir, List<Integer> indexOrdering,
118 ResultExport resultExport) throws IOException {
119 double[][] aggregatedData = cutOffUnused(aggregation, indexOrdering.size());
120 SimSystem.report(Level.INFO, "Writing aggregated data...");
121 resultExport.writeResult(destinationDir, aggregatedData, fileName);
122 SimSystem.report(Level.INFO, "\t\tdone.");
123 }
124
125 }