Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedQualityExporter.java @ 8581:073ea4bcea58
(issue1755) Interpolate BedQuality Results
This adds an interpolation function to each various bedQuality result class.
Imho this is ok as the interpolation function can be seen as part of the result.
The interpolation function is initalized on first use and can be accessed through
get.*Interpol functions.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 16 Mar 2015 15:36:38 +0100 |
parents | e4606eae8ea5 |
children | 07c9ac22f611 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedQualityExporter.java Mon Mar 16 14:37:30 2015 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedQualityExporter.java Mon Mar 16 15:36:38 2015 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde +/* Copyright (C) 2011, 2012, 2013, 2015 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) @@ -29,6 +29,9 @@ import org.dive4elements.river.exports.AbstractExporter; import org.dive4elements.river.utils.Formatter; +import org.dive4elements.river.artifacts.access.RangeAccess; +import org.dive4elements.river.artifacts.D4EArtifact; + public class BedQualityExporter extends AbstractExporter @@ -59,43 +62,16 @@ results = new BedQualityResult[0]; } - /** Populate param kms with kms from param beds and loads, return it. */ - private TDoubleArrayList populateKmList(BedDiameterResult[] beds, - BedloadDiameterResult[] loads, - TDoubleArrayList kms) { - for (int j = 0; j < beds.length; j++) { - TDoubleArrayList bkms = beds[j].getKms(); - for (int k = 0, K = bkms.size(); k < K; k++) { - double km = bkms.get(k); - if (!kms.contains(km)) { // XXX: O(N^2) - kms.add(km); - } - } - } - for (int j = 0; j < loads.length; j++) { - TDoubleArrayList lkms = loads[j].getKms(); - for (int k = 0, L = lkms.size(); k < L; k++) { - double km = lkms.get(k); - if (!kms.contains(km)) { // XXX: O(N^2) - kms.add(km); - } - } - } - return kms; - } - /** Create double[] containing the data for rows in csv. */ private List<double[]> createDataRows() { - // Calculate how many columns and rows we need. - TDoubleArrayList kms = new TDoubleArrayList(); + + double[] kms = new RangeAccess((D4EArtifact) master).getKmSteps(); int cols = 1; for (BedQualityResult result : results) { BedDiameterResult[] beds = result.getBedResults(); BedloadDiameterResult[] loads = result.getBedloadResults(); - kms = populateKmList(beds, loads, kms); - cols += beds.length * 2; if (beds.length > 0) { cols += 4; @@ -103,22 +79,21 @@ cols += loads.length; } - kms.sort(); - - List<double[]> rows = new ArrayList<double[]>(kms.size()); - for (int i = 0, K = kms.size(); i < K; i++) { + List<double[]> rows = new ArrayList<double[]>(kms.length); + for (double km: kms) { double[] row = new double[cols]; - double km = kms.get(i); row[0] = km; for (int j = 0; j < results.length; j++) { + BedloadDiameterResult[] loads = results[j].getBedloadResults(); for(int k = 0; k < loads.length; k++) { // k + 1: shift km column. // j* loads.length: shift periods. row[(k + 1) + (j * loads.length)] = - loads[k].getDiameter(km); + loads[k].getDiameterInterpol(km); } + BedDiameterResult[] beds = results[j].getBedResults(); if (beds.length == 0) { continue; @@ -128,17 +103,18 @@ // j * beds.length * 2: shift periods. // loads.length * results.length: shift bed load columns. int ndx = (k * 2 + 1) + (j * beds.length * 2) + (loads.length * results.length); - row[ndx] = beds[k].getDiameterCap(km); - row[ndx + 1] = beds[k].getDiameterSub(km); + row[ndx] = beds[k].getDiameterCapInterpol(km); + row[ndx + 1] = beds[k].getDiameterSubInterpol(km); } + BedParametersResult[] params = results[j].getParameters(); for(int k = 0; k < params.length; k++) { // loads.length + (beds.lenght * 2) * (j + 1): shift bed and bedload columns. int ndx = 1 + (loads.length + (beds.length * 2) * (j + 1)); - row[ndx] = params[k].getLoadDensityCap(km); - row[ndx + 1] = params[k].getLoadDensitySub(km); - row[ndx + 2] = params[k].getPorosityCap(km); - row[ndx + 3] = params[k].getPorositySub(km); + row[ndx] = params[k].getDensityCapInterpol(km); + row[ndx + 1] = params[k].getDensitySubInterpol(km); + row[ndx + 2] = params[k].getPorosityCapInterpol(km); + row[ndx + 3] = params[k].getPorositySubInterpol(km); } } rows.add(row); @@ -149,7 +125,6 @@ @Override protected void writeCSVData(CSVWriter writer) throws IOException { - // TODO Auto-generated method stub writeCSVHeader(writer); NumberFormat nf = Formatter.getFormatter(context, 1, 3); @@ -177,7 +152,6 @@ @Override protected void addData(Object data) { - // TODO Auto-generated method stub log.debug("addData()"); if (!(data instanceof CalculationResult)) { log.warn("Invalid data type.");