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) {

http://dive4elements.wald.intevation.org