annotate artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculation.java @ 9448:d32b11d585cd

CSV-Export bundu.wst fehlvolumen
author gernotbelger
date Wed, 22 Aug 2018 11:51:46 +0200
parents e60584f2a531
children 7e1fb8d0cb0d
rev   line source
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
2 * Software engineering by
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
5 *
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
9 */
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
10
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
11 package org.dive4elements.river.artifacts.bundu.bezugswst;
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
12
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
13 import java.util.ArrayList;
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
14 import java.util.List;
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
15
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
16 import org.dive4elements.artifacts.CallContext;
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
17 import org.dive4elements.river.artifacts.access.FixRealizingAccess;
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
18 import org.dive4elements.river.artifacts.bundu.BUNDUArtifact;
9318
7b2b086e45f0 collision pdf details, ResultType refactoring, bezugswst result
gernotbelger
parents: 9313
diff changeset
19 import org.dive4elements.river.artifacts.bundu.BunduResultType;
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
20 import org.dive4elements.river.artifacts.common.AbstractResultType;
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.artifacts.common.GeneralResultType;
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
22 import org.dive4elements.river.artifacts.common.ResultRow;
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
23 import org.dive4elements.river.artifacts.model.Calculation;
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
24 import org.dive4elements.river.artifacts.model.Calculation.Problem;
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
25 import org.dive4elements.river.artifacts.model.CalculationResult;
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
26 import org.dive4elements.river.artifacts.model.WQKms;
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
27 import org.dive4elements.river.artifacts.model.fixings.FixRealizingCalculation;
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
28 import org.dive4elements.river.artifacts.model.fixings.FixRealizingResult;
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
29 import org.dive4elements.river.artifacts.resources.Resources;
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
30 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
31 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
32 import org.dive4elements.river.artifacts.sinfo.tkhstate.BedHeightsFinder;
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
33 import org.dive4elements.river.artifacts.sinfo.tkhstate.WinfoArtifactWrapper;
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
34 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
35 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
9323
86d2cbfe7f7f bundu bezugswst excel metadaten
gernotbelger
parents: 9318
diff changeset
36 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
37 import org.dive4elements.river.exports.WaterlevelDescriptionBuilder;
9444
ecadc9ed0ba0 Added heights and depths of cross section fields in the bundu bzws calculation and longitudinal section charts
mschaefer
parents: 9438
diff changeset
38 import org.dive4elements.river.model.BedHeightValueType;
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
39 import org.dive4elements.river.model.River;
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
40 import org.dive4elements.river.utils.Formatter;
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
41
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
42 class BezugswstCalculation {
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
43
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
44 // private static Logger log = Logger.getLogger(BezugswstCalculation.class);
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
45
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
46 /**
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
47 * Additional depth (m) to compute the excavation volume
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
48 */
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
49 private final static double EXCAVATION_DEPTH = 0.2; // REMARK Sollte von außen einstellbar sein
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
50
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
51 /**
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
52 * Excavation costs (euro) per cubic meter
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
53 */
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
54 private final static double EXPENSE_PER_CBM = 12.0; // REMARK Sollte von außen einstellbar sein
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
55
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
56 private final CallContext context;
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
57
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
58 private final List<ResultRow> rows;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
59
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
60 public BezugswstCalculation(final CallContext context) {
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
61 this.context = context;
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
62 this.rows = new ArrayList<>();
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
63 }
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
64
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
65 /**
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
66 * Calculates the result rows of a bundu bzws workflow
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
67 */
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
68 public CalculationResult calculate(final BUNDUArtifact bunduartifact) {
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
69
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
70 // Get input data
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
71 final String user = CalculationUtils.findArtifactUser(this.context, bunduartifact);
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
72 final BunduAccess access = new BunduAccess(bunduartifact);
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
73 final River river = access.getRiver();
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
74 final RiverInfo riverInfo = new RiverInfo(river);
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
75 final String calcModeLabel = Resources.getMsg(this.context.getMeta(), "bundu_bezugswst");
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
76 final boolean preprocessing = access.getPreprocessing();
9323
86d2cbfe7f7f bundu bezugswst excel metadaten
gernotbelger
parents: 9318
diff changeset
77 final int startYear = access.getStartYear();
86d2cbfe7f7f bundu bezugswst excel metadaten
gernotbelger
parents: 9318
diff changeset
78 final int endYear = access.getBezugsJahr();
86d2cbfe7f7f bundu bezugswst excel metadaten
gernotbelger
parents: 9318
diff changeset
79 final Integer ud = access.getUd();
86d2cbfe7f7f bundu bezugswst excel metadaten
gernotbelger
parents: 9318
diff changeset
80 final Double missingVolFrom = access.getMissingVolFrom();
86d2cbfe7f7f bundu bezugswst excel metadaten
gernotbelger
parents: 9318
diff changeset
81 final Double missingVolTo = access.getMissingVolTo();
9330
0a0937f33bb5 bundu.bezugswst first result for missing volume added
gernotbelger
parents: 9323
diff changeset
82
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
83 final BezugswstCalculationResults results = new BezugswstCalculationResults(calcModeLabel, user, riverInfo, access.getRange());
9330
0a0937f33bb5 bundu.bezugswst first result for missing volume added
gernotbelger
parents: 9323
diff changeset
84
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
85 final Calculation problems = new Calculation();
9331
127638669052 bundu bezugswst result 2
gernotbelger
parents: 9330
diff changeset
86
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
87 // Calculate the wspl for the selected river range as in fixa awspl
9437
751a3eff6244 bugfix bugfix (sorry!)
gernotbelger
parents: 9436
diff changeset
88 bunduartifact.addStringData("wq_isq", "true"); // macht doch Sinn hier, sorry!
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
89 final WinfoArtifactWrapper winfo = new WinfoArtifactWrapper(bunduartifact);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
90 final RiverInfoProvider riverInfoProvider = RiverInfoProvider.forRange(this.context, river, access.getRange(), true);
9438
d2f5375ede26 Replaced own W and Q facets in bundu bzws by subclass of FixWaterlevelFacet, added annotations and datacage
mschaefer
parents: 9437
diff changeset
91 final FixRealizingResult fixResult = calculateWspl(bunduartifact, problems);
d2f5375ede26 Replaced own W and Q facets in bundu bzws by subclass of FixWaterlevelFacet, added annotations and datacage
mschaefer
parents: 9437
diff changeset
92 if (fixResult == null)
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
93 return new CalculationResult(results, problems);
9438
d2f5375ede26 Replaced own W and Q facets in bundu bzws by subclass of FixWaterlevelFacet, added annotations and datacage
mschaefer
parents: 9437
diff changeset
94
d2f5375ede26 Replaced own W and Q facets in bundu bzws by subclass of FixWaterlevelFacet, added annotations and datacage
mschaefer
parents: 9437
diff changeset
95 final WQKms wqkms = fixResult.getWQKms()[0];
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
96 final WstInfo wstInfo = new WstInfo(wqkms.getName(), 0, riverInfoProvider.getReferenceGauge(), true);
9331
127638669052 bundu bezugswst result 2
gernotbelger
parents: 9330
diff changeset
97
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
98 // Fetch the bed heights of the selected sounding
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
99 final int bedHeightId = access.getBedHeightID();
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
100 final BedHeightsFinder bedHeightsFinder = BedHeightsFinder.forId(problems, bedHeightId, access.getRange());
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
101 if (bedHeightsFinder == null)
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
102 return new CalculationResult(results, problems);
9332
c64de8cc4e97 bundu.bezugswst missing volume calcResult3
gernotbelger
parents: 9331
diff changeset
103
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
104 // Fetch the river channel data
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
105 final ChannelFinder channelFinder = ChannelFinder.loadValues(problems, river, access.getBezugsJahr());
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
106 if (channelFinder == null)
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
107 return new CalculationResult(results, problems);
9332
c64de8cc4e97 bundu.bezugswst missing volume calcResult3
gernotbelger
parents: 9331
diff changeset
108
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
109 // Compute the result rows
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
110 for (int i = 0; i <= wqkms.size() - 1; i++) {
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
111 this.rows.add(createRow(wqkms.getKm(i), wqkms.getW(i), wqkms.getQ(i), bedHeightsFinder, channelFinder, riverInfoProvider, wstInfo));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
112 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
113
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
114 // Compute the missing volumes
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
115 if (access.isCalculateMissingValue()) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
116 computeMissingVolumes(access.getMissingVolFrom().doubleValue(), access.getMissingVolTo().doubleValue(), problems);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
117 // TODO Lagerungsdichte holen/berechnen (density) und Massen berechnen
9330
0a0937f33bb5 bundu.bezugswst first result for missing volume added
gernotbelger
parents: 9323
diff changeset
118 }
0a0937f33bb5 bundu.bezugswst first result for missing volume added
gernotbelger
parents: 9323
diff changeset
119
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
120 // Add the result to the results collection
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
121 final WaterlevelDescriptionBuilder descBuilder = new WaterlevelDescriptionBuilder(winfo, this.context);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
122 final String qtext = descBuilder.getMetadataQ();
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
123 final BezugswstMainCalculationResult result = new BezugswstMainCalculationResult("bundu-bzws", this.rows, bedHeightsFinder.getInfo(), wstInfo,
9438
d2f5375ede26 Replaced own W and Q facets in bundu bzws by subclass of FixWaterlevelFacet, added annotations and datacage
mschaefer
parents: 9437
diff changeset
124 access.getFunction(), preprocessing, startYear, endYear, ud, qtext, wqkms, missingVolFrom, missingVolTo);
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
125 results.addResult(result, problems);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
126
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
127 // Create the missing volume results
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
128 if (access.getMissingVolFrom() != null) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
129 final String title1 = Resources.getMsg(this.context.getMeta(), "bundu.export.csv.title.bezugswst.result1");
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
130 final BezugswstMissVolCalculationResult1 r1 = new BezugswstMissVolCalculationResult1(title1, this.rows);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
131 results.addResult(r1, null);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
132
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
133 final String title2 = Resources.getMsg(this.context.getMeta(), "bundu.export.csv.title.bezugswst.result2");
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
134 final BezugswstMissVolCalculationResult2 r2 = new BezugswstMissVolCalculationResult2(title2, this.rows);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
135 results.addResult(r2, null);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
136
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
137 final String title3 = Resources.getMsg(this.context.getMeta(), "bundu.export.csv.title.bezugswst.result3");
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
138 final List<ResultRow> totalRows = new ArrayList<>();
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
139 totalRows.add(createTotalsRow(missingVolFrom.doubleValue(), missingVolTo.doubleValue(), problems));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
140 final BezugswstMissVolCalculationResult3 r3 = new BezugswstMissVolCalculationResult3(title3, totalRows);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
141 results.addResult(r3, null);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
142 }
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
143
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
144 return new CalculationResult(results, problems);
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
145 }
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
146
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
147 /**
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
148 * Calculates a w-q-longitudinal section for a river range and Q specified in an artifact
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
149 */
9438
d2f5375ede26 Replaced own W and Q facets in bundu bzws by subclass of FixWaterlevelFacet, added annotations and datacage
mschaefer
parents: 9437
diff changeset
150 private FixRealizingResult calculateWspl(final BUNDUArtifact bundu, final Calculation problems) {
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
151
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
152 final FixRealizingAccess access = new FixRealizingAccess(bundu);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
153 final FixRealizingCalculation calc = new FixRealizingCalculation(access);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
154
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
155 final CalculationResult res = calc.calculate();
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
156
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
157 final FixRealizingResult fixRes = (FixRealizingResult) res.getData();
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
158
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
159 final List<Problem> problems2 = res.getReport().getProblems();
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
160 if (problems2 != null) {
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
161 for (final Problem problem : problems2) {
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
162 problems.addProblem(problem);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
163 }
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
164 }
9438
d2f5375ede26 Replaced own W and Q facets in bundu bzws by subclass of FixWaterlevelFacet, added annotations and datacage
mschaefer
parents: 9437
diff changeset
165 return fixRes;
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
166 }
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
167
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
168 /**
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
169 * Create a result row for a station
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
170 */
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
171 private ResultRow createRow(final double station, final double w, final double q, final BedHeightsFinder bedHeightsFinder,
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
172 final ChannelFinder channelFinder, final RiverInfoProvider riverInfoProv, final WstInfo wstInfo) {
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
173
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
174 // Set W and Q
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
175 final ResultRow row = ResultRow.create();
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
176 row.putValue(GeneralResultType.station, station);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
177 row.putValue(BunduResultType.bezugswst, w);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
178 row.putValue(GeneralResultType.dischargeQwithUnit, q);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
179 row.putValue(GeneralResultType.waterlevelLabel, wstInfo.getLabel());
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
180 row.putValue(GeneralResultType.gaugeLabel, riverInfoProv.findGauge(station));
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
181 row.putValue(GeneralResultType.location, riverInfoProv.getLocation(station));
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
182
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
183 // Set bed and channel bottom height
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
184 final double msh = bedHeightsFinder.getMeanBedHeight(station);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
185 row.putValue(SInfoResultType.meanBedHeight, msh);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
186 if (!Double.isNaN(w) && !Double.isNaN(msh))
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
187 row.putValue(SInfoResultType.flowdepth, Formatter.roundFlowDepth(w).subtract(Formatter.roundFlowDepth(msh)).doubleValue());
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
188 else
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
189 row.putValue(SInfoResultType.flowdepth, Double.NaN);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
190 final double channelDepth = channelFinder.getDepth(station);
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
191 row.putValue(BunduResultType.channelDepth, channelDepth);
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
192 double channelHeight;
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
193 if (!Double.isNaN(w) && !Double.isNaN(channelDepth))
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
194 channelHeight = Formatter.roundFlowDepth(w).subtract(Formatter.roundFlowDepth(channelDepth)).doubleValue();
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
195 else
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
196 channelHeight = Double.NaN;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
197 row.putValue(BunduResultType.channelLowerEdge, channelHeight);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
198 final double channelWidth = channelFinder.getWidth(station);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
199 row.putValue(BunduResultType.channelWidth, channelWidth);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
200
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
201 // Set field heights and missing heights
9444
ecadc9ed0ba0 Added heights and depths of cross section fields in the bundu bzws calculation and longitudinal section charts
mschaefer
parents: 9438
diff changeset
202 final List<Double> fieldHeights = new ArrayList<>();
ecadc9ed0ba0 Added heights and depths of cross section fields in the bundu bzws calculation and longitudinal section charts
mschaefer
parents: 9438
diff changeset
203 final List<Double> fieldDepths = new ArrayList<>();
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
204 final List<Double> fieldMissDepths = new ArrayList<>();
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
205 final List<Double> fieldMissWidths = new ArrayList<>();
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
206 int missFieldCnt = 0;
9444
ecadc9ed0ba0 Added heights and depths of cross section fields in the bundu bzws calculation and longitudinal section charts
mschaefer
parents: 9438
diff changeset
207 for (int i = BedHeightValueType.FIELD_FIRST_INDEX; i <= BedHeightValueType.FIELD_LAST_INDEX; i++) {
ecadc9ed0ba0 Added heights and depths of cross section fields in the bundu bzws calculation and longitudinal section charts
mschaefer
parents: 9438
diff changeset
208 final double h = bedHeightsFinder.getFieldHeight(station, i);
ecadc9ed0ba0 Added heights and depths of cross section fields in the bundu bzws calculation and longitudinal section charts
mschaefer
parents: 9438
diff changeset
209 fieldHeights.add(Double.valueOf(h));
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
210 fieldDepths.add(Double.valueOf(w - h));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
211 if (h > channelHeight + 0.001) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
212 missFieldCnt++;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
213 fieldMissDepths.add(Double.valueOf(h - channelHeight));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
214 fieldMissWidths.add(Double.valueOf(channelWidth / BedHeightValueType.FIELD_LAST_INDEX));
9448
d32b11d585cd CSV-Export bundu.wst fehlvolumen
gernotbelger
parents: 9446
diff changeset
215 } else {
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
216 fieldMissDepths.add(Double.valueOf(0.0));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
217 fieldMissWidths.add(Double.valueOf(0.0));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
218 }
9444
ecadc9ed0ba0 Added heights and depths of cross section fields in the bundu bzws calculation and longitudinal section charts
mschaefer
parents: 9438
diff changeset
219 }
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
220 row.putValue(BunduResultType.missDepthFields, fieldMissDepths);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
221 row.putValue(BunduResultType.missWidthFields, fieldMissWidths);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
222 row.putValue(BunduResultType.hasMissingDepth, (missFieldCnt >= 1));
9444
ecadc9ed0ba0 Added heights and depths of cross section fields in the bundu bzws calculation and longitudinal section charts
mschaefer
parents: 9438
diff changeset
223 row.putValue(BunduResultType.bedHeightFields, fieldHeights);
ecadc9ed0ba0 Added heights and depths of cross section fields in the bundu bzws calculation and longitudinal section charts
mschaefer
parents: 9438
diff changeset
224 row.putValue(BunduResultType.depthFields, fieldDepths);
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
225
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
226 // Preset the missing volume fields with NaN
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
227 row.putValue(BunduResultType.excavationCosts, Double.NaN);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
228 row.putValue(BunduResultType.excavationVolume, Double.NaN);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
229 row.putValue(BunduResultType.missVolumeMeanBed, Double.NaN);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
230 row.putValue(BunduResultType.missMassMeanBed, Double.NaN);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
231 row.putValue(BunduResultType.missVolumeTotal, Double.NaN);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
232 row.putValue(BunduResultType.missMassTotal, Double.NaN);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
233 row.putValue(BunduResultType.density, Double.NaN);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
234 row.putValue(BunduResultType.missStationRangeFrom, Double.NaN);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
235 row.putValue(BunduResultType.missStationRangeTo, Double.NaN);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
236
9432
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
237 return row;
d194c5b24bf8 Added bundu bzws w calculation and longitudinal sections of wspl and depth
mschaefer
parents: 9337
diff changeset
238 }
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
239
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
240 /**
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
241 * Computes the missing volumes in a km range
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
242 */
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
243 private void computeMissingVolumes(final double kmFrom, final double kmTo, final Calculation problems) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
244 // Search start km
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
245 int first = -1;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
246 for (int j = 0; j <= this.rows.size() - 1; j++) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
247 if (this.rows.get(j).getDoubleValue(GeneralResultType.station) > kmFrom - 0.0001) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
248 first = j;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
249 break;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
250 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
251 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
252 if (first < 0)
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
253 return;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
254 int last = this.rows.size() - 1;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
255 int i = first;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
256 while (i <= this.rows.size() - 1) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
257 if (this.rows.get(i).getDoubleValue(GeneralResultType.station) > kmTo + 0.0001)
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
258 break;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
259 if (this.rows.get(i).getDoubleValue(GeneralResultType.station) > kmTo - 0.0001)
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
260 last = i;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
261 final List<Double> areas = new ArrayList<>();
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
262 final List<Double> volumes = new ArrayList<>();
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
263 double vTotal = 0.0;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
264 double vExcav = 0.0;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
265 double expenses = 0.0;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
266 for (int j = BedHeightValueType.FIELD_FIRST_INDEX; j <= BedHeightValueType.FIELD_LAST_INDEX; j++) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
267 if (getFieldValue(i, BunduResultType.missDepthFields, j) > 0.0001) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
268 computeMissingVolume(volumes, areas, i, first, last, j);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
269 vTotal += volumes.get(j - 1);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
270 vExcav += volumes.get(j - 1) + areas.get(j - 1) * EXCAVATION_DEPTH;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
271 expenses += vExcav * EXPENSE_PER_CBM;
9448
d32b11d585cd CSV-Export bundu.wst fehlvolumen
gernotbelger
parents: 9446
diff changeset
272 } else {
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
273 volumes.add(Double.valueOf(0.0));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
274 areas.add(Double.valueOf(0.0));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
275 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
276 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
277 this.rows.get(i).putValue(BunduResultType.missVolumeFields, volumes);
9448
d32b11d585cd CSV-Export bundu.wst fehlvolumen
gernotbelger
parents: 9446
diff changeset
278 // TODO: berechnete masse hier einfügen!
d32b11d585cd CSV-Export bundu.wst fehlvolumen
gernotbelger
parents: 9446
diff changeset
279 this.rows.get(i).putValue(BunduResultType.missMassFields, volumes);
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
280 this.rows.get(i).putValue(BunduResultType.missAreaFields, areas);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
281 this.rows.get(i).putValue(BunduResultType.missVolumeTotal, vTotal);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
282 this.rows.get(i).putValue(BunduResultType.excavationVolume, vExcav);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
283 this.rows.get(i).putValue(BunduResultType.excavationCosts, expenses);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
284 i++;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
285 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
286 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
287
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
288 /**
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
289 * Computes the missing volume of a field of a km row
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
290 */
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
291 private void computeMissingVolume(final List<Double> volumes, final List<Double> areas, final int current, final int first, final int last,
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
292 final int field) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
293 final double areaCurr = missingArea(current, first, last, field);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
294 final double areaPrev = missingArea(current - 1, first, last, field);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
295 final double areaNext = missingArea(current + 1, first, last, field);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
296 final double kmCurr = missingKm(current);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
297 final double kmPrev = missingKm(current - 1);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
298 final double kmNext = missingKm(current + 1);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
299 if (Double.isNaN(kmPrev) || Double.isNaN(kmNext)) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
300 volumes.add(Double.valueOf(0.0));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
301 areas.add(Double.valueOf(0.0));
9448
d32b11d585cd CSV-Export bundu.wst fehlvolumen
gernotbelger
parents: 9446
diff changeset
302 } else {
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
303 final double area1 = 0.5 * (areaCurr + areaPrev);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
304 final double area2 = 0.5 * (areaCurr + areaNext);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
305 volumes.add(Double.valueOf((Math.abs(kmCurr - kmPrev) * 0.5 * area1) + (Math.abs(kmNext - kmCurr) * 0.5 * area2)));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
306 areas.add(Double.valueOf(area1 + area2));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
307 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
308 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
309
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
310 /**
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
311 * Gets the missing area of a field and a row if in range, otherwise 0.0
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
312 */
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
313 private double missingArea(final int rowIndex, final int first, final int last, final int fieldIndex) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
314 if ((first <= rowIndex) && (rowIndex <= last))
9448
d32b11d585cd CSV-Export bundu.wst fehlvolumen
gernotbelger
parents: 9446
diff changeset
315 return getFieldValue(rowIndex, BunduResultType.missDepthFields, fieldIndex) * getFieldValue(rowIndex, BunduResultType.missWidthFields, fieldIndex);
9446
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
316 else
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
317 return 0.0;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
318 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
319
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
320 /**
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
321 * Gets the km of a row if within range, otherwise NaN
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
322 */
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
323 private double missingKm(final int rowIndex) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
324 if ((0 <= rowIndex) && (rowIndex <= this.rows.size() - 1))
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
325 return this.rows.get(rowIndex).getDoubleValue(GeneralResultType.station);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
326 else
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
327 return Double.NaN;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
328 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
329
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
330 /**
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
331 * Gets a value of one of the field list types of a row
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
332 *
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
333 * @param rowIndex
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
334 * @param type
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
335 * @param fieldIndex
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
336 * 1-based field index
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
337 */
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
338 private double getFieldValue(final int rowIndex, final AbstractResultType type, final int fieldIndex) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
339 @SuppressWarnings("unchecked")
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
340 final List<Double> values = (List<Double>) this.rows.get(rowIndex).getValue(type);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
341 return values.get(fieldIndex - 1);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
342 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
343
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
344 /**
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
345 * Computes the volume and mass total of all rows with missing volumes
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
346 */
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
347 private ResultRow createTotalsRow(final double kmFrom, final double kmTo, final Calculation problems) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
348 // Search start km
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
349 double vTotal = 0.0;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
350 double mTotal = 0.0;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
351 for (final ResultRow row : this.rows) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
352 final double volume = row.getDoubleValue(BunduResultType.missVolumeMeanBed);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
353 final double mass = row.getDoubleValue(BunduResultType.missMassMeanBed);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
354 if (!Double.isNaN(volume) && !Double.isNaN(mass)) {
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
355 vTotal += volume;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
356 mTotal += mass;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
357 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
358 }
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
359 final ResultRow sumRow = ResultRow.create();
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
360 sumRow.putValue(BunduResultType.missStationRangeFrom, Double.valueOf(kmFrom));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
361 sumRow.putValue(BunduResultType.missStationRangeTo, Double.valueOf(kmTo));
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
362 sumRow.putValue(BunduResultType.missVolumeTotal, vTotal);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
363 sumRow.putValue(BunduResultType.missMassTotal, mTotal);
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
364 return sumRow;
e60584f2a531 Added bundu bzws calculation for missing volumes (masses still not yet ready) and results1/2/3
mschaefer
parents: 9444
diff changeset
365 }
9313
6ffcbb4f35d5 bundu.bezugswst first result stump
gernotbelger
parents:
diff changeset
366 }

http://dive4elements.wald.intevation.org