Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/FixResult.java @ 6877:2d96d8240e3e
FixA: Make dates of analysis periods unique, too. TODO: Remap the indices like the reference interval.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Wed, 21 Aug 2013 01:09:25 +0200 |
parents | af13ceeba52a |
children | 8efef772a488 |
comparison
equal
deleted
inserted
replaced
6876:a071f0a80883 | 6877:2d96d8240e3e |
---|---|
6 * documentation coming with Dive4Elements River for details. | 6 * documentation coming with Dive4Elements River for details. |
7 */ | 7 */ |
8 | 8 |
9 package org.dive4elements.river.artifacts.model.fixings; | 9 package org.dive4elements.river.artifacts.model.fixings; |
10 | 10 |
11 import org.apache.log4j.Logger; | |
11 import org.dive4elements.river.artifacts.model.Parameters; | 12 import org.dive4elements.river.artifacts.model.Parameters; |
12 | 13 |
13 import org.dive4elements.river.utils.KMIndex; | 14 import org.dive4elements.river.utils.KMIndex; |
14 | 15 |
16 import gnu.trove.TIntIntHashMap; | |
17 | |
15 import java.io.Serializable; | 18 import java.io.Serializable; |
19 import java.util.Collection; | |
20 import java.util.Date; | |
21 import java.util.TreeMap; | |
22 import java.util.TreeSet; | |
16 | 23 |
17 public class FixResult | 24 public class FixResult |
18 implements Serializable | 25 implements Serializable |
19 { | 26 { |
27 private static Logger log = | |
28 Logger.getLogger(FixResult.class); | |
29 | |
20 protected Parameters parameters; | 30 protected Parameters parameters; |
21 protected KMIndex<QWD []> referenced; | 31 protected KMIndex<QWD []> referenced; |
22 protected KMIndex<QWI []> outliers; | 32 protected KMIndex<QWI []> outliers; |
23 | 33 |
24 public FixResult() { | 34 public FixResult() { |
40 | 50 |
41 public void setReferenced(KMIndex<QWD []> referenced) { | 51 public void setReferenced(KMIndex<QWD []> referenced) { |
42 this.referenced = referenced; | 52 this.referenced = referenced; |
43 } | 53 } |
44 | 54 |
55 public void makeReferenceEventsDatesUnique() { | |
56 DateUniqueMaker dum = new DateUniqueMaker(); | |
57 for (KMIndex.Entry<QWD []> entry: referenced) { | |
58 for (QWD ref: entry.getValue()) { | |
59 dum.makeUnique(ref); | |
60 } | |
61 } | |
62 } | |
63 | |
64 public Collection<Integer> getReferenceEventsIndices() { | |
65 TreeMap<Date, Integer> dates = new TreeMap<Date, Integer>(); | |
66 for (KMIndex.Entry<QWD []> entry: referenced) { | |
67 for (QWD value: entry.getValue()) { | |
68 dates.put(value.date, value.index); | |
69 } | |
70 } | |
71 return dates.values(); | |
72 } | |
73 | |
74 public void remapReferenceIndicesToRank() { | |
75 Collection<Integer> referenceIndices = getReferenceEventsIndices(); | |
76 int index = 0; | |
77 TIntIntHashMap map = new TIntIntHashMap(); | |
78 boolean debug = log.isDebugEnabled(); | |
79 for (Integer refId: referenceIndices) { | |
80 if (debug) { | |
81 log.debug("map " + refId + " -> " + index); | |
82 } | |
83 map.put(refId, index); | |
84 ++index; | |
85 } | |
86 | |
87 // Two passes: If there are shared references do not | |
88 // remap them twice. In the first pass all indices are | |
89 // mapped to negative values (assuming the original data | |
90 // is all positive). If a negative value is found ignore | |
91 // it because it was remapped before. | |
92 | |
93 for (KMIndex.Entry<QWD []> entry: referenced) { | |
94 for (QWD value: entry.getValue()) { | |
95 if (value.index >= 0) { | |
96 if (map.containsKey(value.index)) { | |
97 value.index = -(map.get(value.index) + 1); | |
98 } | |
99 else { | |
100 log.warn("Could not remap index: " + value.index); | |
101 } | |
102 } | |
103 } | |
104 } | |
105 | |
106 // In the second pass all indices are turned to positive | |
107 // values again. | |
108 for (KMIndex.Entry<QWD []> entry: referenced) { | |
109 for (QWD value: entry.getValue()) { | |
110 if (value.index < 0) { | |
111 value.index = -(value.index + 1); | |
112 } | |
113 } | |
114 } | |
115 } | |
116 | |
117 public Collection<Date> getReferenceEventsDates() { | |
118 TreeSet<Date> dates = new TreeSet<Date>(); | |
119 for (KMIndex.Entry<QWD []> entry: referenced) { | |
120 for (QWD qwd: entry.getValue()) { | |
121 dates.add(qwd.date); | |
122 } | |
123 } | |
124 return dates; | |
125 } | |
126 | |
127 | |
45 public KMIndex<QWI []> getOutliers() { | 128 public KMIndex<QWI []> getOutliers() { |
46 return outliers; | 129 return outliers; |
47 } | 130 } |
48 | 131 |
49 public void setOutliers(KMIndex<QWI []> outliers) { | 132 public void setOutliers(KMIndex<QWI []> outliers) { |