Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedQualityCalculation.java @ 8587:07c9ac22f611
(issue1755) Generalise BedQuality result handling
The bedquality calculation now produces a result for each time period
which has BedQualityResultValues for each specific result type.
Formally this was split up in density, porosity and diameter classes
with some bedload diameter classes mixed in for extra fun.
The intent of this commit is to allow more shared code and generic
access patterns to the BedQuality results.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Wed, 18 Mar 2015 18:42:08 +0100 |
parents | 59b4f6cf1cf4 |
children | 36faef4f8acb |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedQualityCalculation.java Tue Mar 17 18:52:00 2015 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedQualityCalculation.java Wed Mar 18 18:42:08 2015 +0100 @@ -110,22 +110,14 @@ BedQualityResult result = new BedQualityResult(); result.setDateRange(dr); if (bedDiameter != null) { - result.add(calculateBedParameter(bedMeasurements, dr)); + result.add(calculateBedParameter(bedMeasurements)); for (String bd : bedDiameter) { - BedDiameterResult bedResult = - calculateBed(bedMeasurements, bd, dr); - - // Avoid adding empty result sets. - if (!bedResult.isEmpty()) { - result.add(bedResult); - } + result.add (calculateBed(bedMeasurements, bd)); } } if (bedloadDiameter != null) { for (String bld : bedloadDiameter) { - BedloadDiameterResult loadResult = - calculateBedload(loadMeasurements, bld, dr); - result.add(loadResult); + result.add(calculateBedload(loadMeasurements, bld)); } } results.add(result); @@ -135,14 +127,13 @@ results.toArray(new BedQualityResult[results.size()]), this); } - private BedParametersResult calculateBedParameter( - QualityMeasurements qm, - DateRange dr + private BedQualityResultValue[] calculateBedParameter( + QualityMeasurements qm ) { List<Double> kms = qm.getKms(); + TDoubleArrayList location = new TDoubleArrayList(); QualityMeasurements capFiltered = filterCapMeasurements(qm); QualityMeasurements subFiltered = filterSubMeasurements(qm); - TDoubleArrayList location = new TDoubleArrayList(); TDoubleArrayList porosityCap = new TDoubleArrayList(); TDoubleArrayList porositySub = new TDoubleArrayList(); TDoubleArrayList densityCap = new TDoubleArrayList(); @@ -173,19 +164,24 @@ densitySub.add((dSubRes / dSub.length) / 1000); } - - return new BedParametersResult( - location, - porosityCap, - porositySub, - densityCap, - densitySub); + return new BedQualityResultValue[] { + new BedQualityResultValue("porosity", + new double[][] {location.toNativeArray(), porositySub.toNativeArray()}, + "sublayer"), + new BedQualityResultValue("porosity", + new double[][] {location.toNativeArray(), porosityCap.toNativeArray()}, + "toplayer"), + new BedQualityResultValue("density", + new double[][] {location.toNativeArray(), densitySub.toNativeArray()}, + "sublayer"), + new BedQualityResultValue("density", + new double[][] {location.toNativeArray(), densityCap.toNativeArray()}, + "toplayer")}; } - protected BedDiameterResult calculateBed( + protected BedQualityResultValue[] calculateBed( QualityMeasurements qm, - String diameter, - DateRange range + String diameter ) { List<Double> kms = qm.getKms(); TDoubleArrayList location = new TDoubleArrayList(); @@ -205,11 +201,13 @@ avDiameterCap.add(avCap * 1000);// bring to mm. avDiameterSub.add(avSub * 1000); } - return new BedDiameterResult( - diameter, - avDiameterCap, - avDiameterSub, - location); + return new BedQualityResultValue[] { + new BedQualityResultValue(diameter, + new double[][] {location.toNativeArray(), avDiameterSub.toNativeArray()}, + "sublayer"), + new BedQualityResultValue(diameter, + new double[][] {location.toNativeArray(), avDiameterCap.toNativeArray()}, + "toplayer")}; } private double[] calculateDensity( @@ -241,10 +239,9 @@ return results; } - protected BedloadDiameterResult calculateBedload( + protected BedQualityResultValue calculateBedload( QualityMeasurements qm, - String diameter, - DateRange range + String diameter ) { List<Double> kms = qm.getKms(); TDoubleArrayList location = new TDoubleArrayList(); @@ -255,11 +252,9 @@ location.add(km); avDiameter.add(mid * 1000); } - return new BedloadDiameterResult( - diameter, - avDiameter, - location, - range); + return new BedQualityResultValue(diameter, + new double[][] {location.toNativeArray(), avDiameter.toNativeArray()}, + "bedload"); } protected double calculateAverage(