# HG changeset patch # User Felix Wolfsteller # Date 1371711983 -7200 # Node ID 48e92ff57f236130084748cc05074df9ff510c1e # Parent be283f9bc0791ba8f269b4ee866a61fc133b3d8c SedimentLoad*: Set range to fraction/fractions values. diff -r be283f9bc079 -r 48e92ff57f23 artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoad.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoad.java Wed Jun 19 16:53:27 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoad.java Thu Jun 20 09:06:23 2013 +0200 @@ -13,6 +13,8 @@ import java.util.Set; import org.dive4elements.river.artifacts.model.NamedObjectImpl; +import org.dive4elements.river.artifacts.model.Range; + /** Gives access to Fractions (at kms). */ public class SedimentLoad @@ -89,68 +91,79 @@ return kms.get(km); } - public void setCoarse(double km, double coarse) { + public void setCoarse(double km, double coarse, Range range) { if (kms.containsKey(km)) { kms.get(km).setCoarse(coarse); } else { SedimentLoadFraction f = new SedimentLoadFraction(); f.setCoarse(coarse); - kms.put(km, f); - } - } - - public void setFineMiddle(double km, double fine_middle) { - if (kms.containsKey(km)) { - kms.get(km).setFine_middle(fine_middle); - } - else { - SedimentLoadFraction f = new SedimentLoadFraction(); - f.setFine_middle(fine_middle); - kms.put(km, f); - } - } - - public void setSand(double km, double sand) { - if (kms.containsKey(km)) { - kms.get(km).setSand(sand); - } - else { - SedimentLoadFraction f = new SedimentLoadFraction(); - f.setSand(sand); + f.setCoarseRange(range); kms.put(km, f); } } - public void setSuspSand(double km, double susp_sand) { + public void setFineMiddle(double km, double fine_middle, Range range) { if (kms.containsKey(km)) { - kms.get(km).setSusp_sand(susp_sand); + kms.get(km).setFine_middle(fine_middle); + kms.get(km).setFineMiddleRange(range); } else { SedimentLoadFraction f = new SedimentLoadFraction(); - f.setSusp_sand(susp_sand); + f.setFine_middle(fine_middle); + f.setFineMiddleRange(range); kms.put(km, f); } } - public void setSuspSandBed(double km, double susp_sand_bed) { + public void setSand(double km, double sand, Range range) { + if (kms.containsKey(km)) { + kms.get(km).setSand(sand); + kms.get(km).setSandRange(range); + } + else { + SedimentLoadFraction f = new SedimentLoadFraction(); + f.setSand(sand); + f.setSandRange(range); + kms.put(km, f); + } + } + + public void setSuspSand(double km, double susp_sand, Range range) { + if (kms.containsKey(km)) { + kms.get(km).setSusp_sand(susp_sand); + kms.get(km).setSuspSandRange(range); + } + else { + SedimentLoadFraction f = new SedimentLoadFraction(); + f.setSusp_sand(susp_sand); + f.setSuspSandRange(range); + kms.put(km, f); + } + } + + public void setSuspSandBed(double km, double susp_sand_bed, Range range) { if (kms.containsKey(km)) { kms.get(km).setSusp_sand_bed(susp_sand_bed); + kms.get(km).setSuspSandBedRange(range); } else { SedimentLoadFraction f = new SedimentLoadFraction(); f.setSusp_sand_bed(susp_sand_bed); + f.setSuspSandBedRange(range); kms.put(km, f); } } - public void setSuspSediment(double km, double susp_sediment) { + public void setSuspSediment(double km, double susp_sediment, Range range) { if (kms.containsKey(km)) { kms.get(km).setSusp_sediment(susp_sediment); + kms.get(km).setSuspSedimentRange(range); } else { SedimentLoadFraction f = new SedimentLoadFraction(); f.setSusp_sediment(susp_sediment); + f.setSuspSedimentRange(range); kms.put(km, f); } } @@ -166,13 +179,15 @@ } } - public void setTotal(double km, double total) { + public void setTotal(double km, double total, Range range) { if (kms.containsKey(km)) { kms.get(km).setTotal(total); + kms.get(km).setTotalRange(range); } else { SedimentLoadFraction f = new SedimentLoadFraction(); f.setTotal(total); + f.setTotalRange(range); kms.put(km, f); } } diff -r be283f9bc079 -r 48e92ff57f23 artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadCalculation.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadCalculation.java Wed Jun 19 16:53:27 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadCalculation.java Thu Jun 20 09:06:23 2013 +0200 @@ -155,42 +155,42 @@ SedimentLoadFraction f = load.getFraction(km); if (f.getCoarse() > 0d) { double c = resLoad.getFraction(km).getCoarse(); - resLoad.setCoarse(km, c + f.getCoarse()); + resLoad.setCoarse(km, c + f.getCoarse(), f.getCoarseRange()); cSum++; } if (f.getFine_middle() > 0d) { double fm = resLoad.getFraction(km).getFine_middle(); - resLoad.setFineMiddle(km, fm + f.getFine_middle()); + resLoad.setFineMiddle(km, fm + f.getFine_middle(), f.getFineMiddleRange()); fmSum++; } if (f.getSand() > 0d) { double s = resLoad.getFraction(km).getSand(); - resLoad.setSand(km, s + f.getSand()); + resLoad.setSand(km, s + f.getSand(), f.getSandRange()); sSum++; } if (f.getSusp_sand() > 0d) { double s = resLoad.getFraction(km).getSusp_sand(); - resLoad.setSuspSand(km, s + f.getSusp_sand()); + resLoad.setSuspSand(km, s + f.getSusp_sand(), f.getSuspSandRange()); ssSum++; } if (f.getSusp_sand_bed() > 0d) { double s = resLoad.getFraction(km).getSusp_sand_bed(); - resLoad.setSuspSandBed(km, s + f.getSusp_sand_bed()); + resLoad.setSuspSandBed(km, s + f.getSusp_sand_bed(), f.getSuspSandBedRange()); ssbSum++; } if (f.getSusp_sediment() > 0d) { double s = resLoad.getFraction(km).getSusp_sediment(); - resLoad.setSuspSediment(km, s + f.getSusp_sediment()); + resLoad.setSuspSediment(km, s + f.getSusp_sediment(), f.getSuspSedimentRange()); sseSum++; } } SedimentLoadFraction fr = resLoad.getFraction(km); - resLoad.setCoarse(km, fr.getCoarse()/cSum); - resLoad.setFineMiddle(km, fr.getFine_middle()/fmSum); - resLoad.setSand(km, fr.getSand()/sSum); - resLoad.setSuspSand(km, fr.getSusp_sand()/ssSum); - resLoad.setSuspSandBed(km, fr.getSusp_sand_bed()/ssbSum); - resLoad.setSuspSediment(km, fr.getSusp_sediment()/sseSum); + resLoad.setCoarse(km, fr.getCoarse()/cSum, fr.getCoarseRange()); + resLoad.setFineMiddle(km, fr.getFine_middle()/fmSum, fr.getFineMiddleRange()); + resLoad.setSand(km, fr.getSand()/sSum, fr.getSandRange()); + resLoad.setSuspSand(km, fr.getSusp_sand()/ssSum, fr.getSuspSandRange()); + resLoad.setSuspSandBed(km, fr.getSusp_sand_bed()/ssbSum, fr.getSuspSandBedRange()); + resLoad.setSuspSediment(km, fr.getSusp_sediment()/sseSum, fr.getSuspSedimentRange()); } resLoad.setDescription(""); resLoad.setEpoch(true); @@ -264,6 +264,7 @@ return result; } + /** Add up the loads of a year. */ private SedimentLoad calculateTotalLoad(SedimentLoad load, int year) { logger.debug("calculateTotalLoad"); boolean problemThisYear = false; @@ -319,7 +320,7 @@ fraction.getSand() + fraction.getSusp_sand() + fraction.getSusp_sediment(); - load.setTotal(km, total); + load.setTotal(km, total, fraction.getTotalRange()); } return load; } @@ -337,13 +338,13 @@ double bedSand = fraction.getSusp_sand_bed(); double sediment = fraction.getSusp_sediment(); double total = fraction.getTotal(); - load.setCoarse(km, (coarse * dens)); - load.setFineMiddle(km, (fineMiddle * dens)); - load.setSand(km, (sand * dens)); - load.setSuspSand(km, (suspSand * dens)); - load.setSuspSandBed(km, (bedSand * dens)); - load.setSuspSediment(km, (sediment * dens)); - load.setTotal(km, (total * dens)); + load.setCoarse(km, (coarse * dens), fraction.getCoarseRange()); + load.setFineMiddle(km, (fineMiddle * dens), fraction.getFineMiddleRange()); + load.setSand(km, (sand * dens), fraction.getSandRange()); + load.setSuspSand(km, (suspSand * dens), fraction.getSuspSandRange()); + load.setSuspSandBed(km, (bedSand * dens), fraction.getSuspSandBedRange()); + load.setSuspSediment(km, (sediment * dens), fraction.getSuspSedimentRange()); + load.setTotal(km, (total * dens), fraction.getTotalRange()); } return load; } diff -r be283f9bc079 -r 48e92ff57f23 artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFactory.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFactory.java Wed Jun 19 16:53:27 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFactory.java Thu Jun 20 09:06:23 2013 +0200 @@ -13,6 +13,8 @@ import java.util.Calendar; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.TreeMap; import net.sf.ehcache.Cache; import net.sf.ehcache.Element; @@ -22,7 +24,12 @@ import org.hibernate.Session; import org.hibernate.type.StandardBasicTypes; +import org.dive4elements.river.model.MeasurementStation; + import org.dive4elements.river.artifacts.cache.CacheFactory; + +import org.dive4elements.river.artifacts.model.Range; +import org.dive4elements.river.artifacts.model.RiverFactory; import org.dive4elements.river.artifacts.model.StaticSedimentLoadCacheKey; import org.dive4elements.river.backend.SessionHolder; @@ -264,6 +271,22 @@ Session session = SessionHolder.HOLDER.get(); SQLQuery sqlQuery = null; + List allStations = RiverFactory.getRiver(river).getMeasurementStations(); + TreeMap floatStations = new TreeMap(); + TreeMap suspStations = new TreeMap(); + for (MeasurementStation measurementStation: allStations) { + if (measurementStation.getMeasurementType() == null || + measurementStation.getRange() == null) { + continue; + } + if (measurementStation.getMeasurementType().equals("Schwebstoff")) { + suspStations.put(measurementStation.getRange().getA().doubleValue(), measurementStation); + } + else if (measurementStation.getMeasurementType().equals("Geschiebe")) { + floatStations.put(measurementStation.getRange().getA().doubleValue(), measurementStation); + } + } + Calendar start = Calendar.getInstance(); start.set(syear - 1, 11, 31); Calendar end = Calendar.getInstance(); @@ -289,12 +312,12 @@ (Date) row[1], null, false); - getValues("coarse", sqlQuery, load); - getValues("fine_middle", sqlQuery, load); - getValues("sand", sqlQuery, load); - getValues("suspended_sediment", sqlQuery, load); - getValues("susp_sand_bed", sqlQuery, load); - getValues("susp_sand", sqlQuery, load); + getValues("coarse", sqlQuery, load, floatStations); + getValues("fine_middle", sqlQuery, load, floatStations); + getValues("sand", sqlQuery, load, floatStations); + getValues("suspended_sediment", sqlQuery, load, suspStations); + getValues("susp_sand_bed", sqlQuery, load, suspStations); + getValues("susp_sand", sqlQuery, load, suspStations); return load; } @@ -334,12 +357,12 @@ kms.add((Double)row[3]); load.setLoadTotal((Double)row[3], (Double)row[2]); } - getValues("coarse", sqlQuery, load); - getValues("fine_middle", sqlQuery, load); - getValues("sand", sqlQuery, load); - getValues("suspended_sediment", sqlQuery, load); - getValues("susp_sand_bed", sqlQuery, load); - getValues("susp_sand", sqlQuery, load); + getValues("coarse", sqlQuery, load, floatStations); + getValues("fine_middle", sqlQuery, load, floatStations); + getValues("sand", sqlQuery, load, floatStations); + getValues("suspended_sediment", sqlQuery, load, suspStations); + getValues("susp_sand_bed", sqlQuery, load, suspStations); + getValues("susp_sand", sqlQuery, load, floatStations); return load; } return new SedimentLoad(); @@ -356,34 +379,51 @@ protected static void getValues ( String fraction, SQLQuery query, - SedimentLoad load + SedimentLoad load, + TreeMap stations ) { query.setString("grain", fraction); List results = query.list(); for (int i = 0; i < results.size(); i++) { Object[] row = results.get(i); double km = (Double)row[3]; + MeasurementStation station = stations.get(km); + MeasurementStation nextStation = stations.ceilingEntry(km + 0.1d).getValue(); + Range range = null; + if (station == null) { + log.warn("No measurement station for " + fraction + " km " + km); + } + else { + if (nextRange != null) + range = new Range(station.getRange().getA().doubleValue(), + nextStation.getRange().getA().doubleValue()); + else { + // TODO end-of-river instead of B. + range = new Range(station.getRange().getA().doubleValue(), + station.getRange().getB().doubleValue()); + } + } double v = -1; if (row[2] != null) { v = ((Double)row[2]).doubleValue(); } if (fraction.equals("coarse")) { - load.setCoarse(km, v); + load.setCoarse(km, v, range); } else if (fraction.equals("sand")) { - load.setSand(km, v); + load.setSand(km, v, range); } else if (fraction.equals("fine_middle")) { - load.setFineMiddle(km, v); + load.setFineMiddle(km, v, range); } else if (fraction.equals("suspended_sediment")) { - load.setSuspSediment(km, v); + load.setSuspSediment(km, v, range); } else if (fraction.equals("susp_sand")) { - load.setSuspSand(km, v); + load.setSuspSand(km, v, range); } else if (fraction.equals("susp_sand_bed")) { - load.setSuspSandBed(km, v); + load.setSuspSandBed(km, v, range); } } }