comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/FixingColumn.java @ 9415:9744ce3c3853

Rework of fixanalysis computation and dWt and WQ facets. Got rid of strange remapping and bitshifting code by explicitely saving the column information and using it in the facets. The facets also put the valid station range into their xml-metadata
author gernotbelger
date Thu, 16 Aug 2018 16:27:53 +0200
parents
children
comparison
equal deleted inserted replaced
9414:096f151a0a9f 9415:9744ce3c3853
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
2 * Software engineering by
3 * Björnsen Beratende Ingenieure GmbH
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
5 *
6 * This file is Free Software under the GNU AGPL (>=v3)
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
8 * documentation coming with Dive4Elements River for details.
9 */
10 package org.dive4elements.river.artifacts.model.fixings;
11
12 import java.util.ArrayList;
13 import java.util.Date;
14 import java.util.List;
15
16 import org.dive4elements.river.artifacts.model.GaugeFinder;
17 import org.dive4elements.river.artifacts.model.GaugeRange;
18 import org.dive4elements.river.artifacts.model.Range;
19
20 public class FixingColumn extends Range {
21
22 private static final long serialVersionUID = 1L;
23
24 private Fixing fixing;
25
26 private int columnId;
27
28 private Date startTime;
29
30 private String name;
31
32 private List<SectorRange> sectors;
33
34 public FixingColumn() {
35 }
36
37 public FixingColumn(final Fixing fixing, final int columnId, final Date startTime, final String name) {
38 this.fixing = fixing;
39 this.columnId = columnId;
40 this.startTime = startTime;
41 this.name = name;
42
43 this.sectors = new ArrayList<>();
44 }
45
46 public int getId() {
47 return this.columnId;
48 }
49
50 public Fixing getFixing() {
51 return this.fixing;
52 }
53
54 public Date getStartTime() {
55 return this.startTime;
56 }
57
58 public String getName() {
59 return this.name;
60 }
61
62 public String getDescription() {
63 return this.fixing.getDescription() + "/" + this.name;
64 }
65
66 public List<SectorRange> getSectors() {
67 return this.sectors;
68 }
69
70 public boolean hasSectorsInRange(final Range range) {
71 for (final SectorRange sector : this.sectors) {
72 if (sector.intersects(range)) {
73 return true;
74 }
75 }
76 return false;
77 }
78
79 public List<SectorRange> getSectors(final Range range) {
80
81 final List<SectorRange> result = new ArrayList<>(this.sectors.size());
82
83 for (final SectorRange src : this.sectors) {
84 final SectorRange dst = new SectorRange(src);
85 if (range == null || dst.clip(range)) {
86 result.add(dst);
87 }
88 }
89
90 return result;
91 }
92
93 public int findQSector(final double km) {
94 for (final SectorRange sector : this.sectors) {
95 if (sector.inside(km)) {
96 return sector.getSector();
97 }
98 }
99 return -1;
100 }
101
102 public void buildSectors(final GaugeFinder gaugeFinder, final List<QRange> qRanges) {
103 for (final QRange qRange : qRanges) {
104 for (final GaugeRange gRange : gaugeFinder.getGauges()) {
105 final SectorRange sector = new SectorRange(qRange);
106 if (!sector.clip(gRange)) {
107 continue;
108 }
109 sector.setSector(gRange.classify(qRange.q));
110
111 if (this.sectors.isEmpty() || !this.sectors.get(this.sectors.size() - 1).enlarge(sector)) {
112 this.sectors.add(sector);
113 }
114 } // for all gauges
115 } // for all Q ranges
116 }
117
118 public void loadKmRange(final KMRangeLoader loader) {
119
120 final double[] range = loader.get(this.columnId);
121
122 if (range == null) {
123 FixingsOverview.log.warn("No km range for column " + this.columnId + ".");
124 return;
125 }
126 this.setStart(range[0]);
127 this.setEnd(range[1]);
128 }
129
130 public void loadQRanges(final ColumnQRangeLoader loader, final GaugeFinder gaugeFinder) {
131 final List<double[]> qrs = loader.get(this.columnId);
132 if (qrs == null) {
133 FixingsOverview.log.warn("No q ranges found for column " + this.columnId);
134 return;
135 }
136
137 final List<QRange> qRanges = new ArrayList<>(qrs.size());
138
139 for (final double[] qr : qrs) {
140 final double q = qr[0];
141 final double start = qr[1];
142 final double end = qr[2];
143
144 final QRange qRange = new QRange(start, end, q);
145 if (qRange.clip(this)) {
146 qRanges.add(qRange);
147 }
148 }
149
150 buildSectors(gaugeFinder, qRanges);
151 }
152 }

http://dive4elements.wald.intevation.org