# HG changeset patch # User Raimund Renkert # Date 1370874143 -7200 # Node ID 267119b38779fe6763a99ed16807761684e49e47 # Parent 8eb0e5c8db3fc5c2e9c69731cda46872851f0c42 Added container and facet for bed diameter measurements. diff -r 8eb0e5c8db3f -r 267119b38779 artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiameterData.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiameterData.java Mon Jun 10 16:22:23 2013 +0200 @@ -0,0 +1,27 @@ +package org.dive4elements.river.artifacts.model.minfo; + +import gnu.trove.TDoubleArrayList; + + +public class BedDiameterData +extends BedQualityDiameterResult +{ + + private TDoubleArrayList data; + + public BedDiameterData() { + super(); + } + + public BedDiameterData ( + String type, + TDoubleArrayList kms, + TDoubleArrayList data) { + super(type, kms); + this.data = data; + } + + public double[][] getDiameterData() { + return new double[][]{kms.toNativeArray(), data.toNativeArray()}; + } +} diff -r 8eb0e5c8db3f -r 267119b38779 artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiameterDataFacet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiameterDataFacet.java Mon Jun 10 16:22:23 2013 +0200 @@ -0,0 +1,97 @@ +package org.dive4elements.river.artifacts.model.minfo; + +import gnu.trove.TDoubleArrayList; + +import org.apache.log4j.Logger; +import org.dive4elements.artifactdatabase.state.Facet; +import org.dive4elements.artifacts.Artifact; +import org.dive4elements.artifacts.CallContext; +import org.dive4elements.river.artifacts.D4EArtifact; +import org.dive4elements.river.artifacts.access.BedQualityAccess; +import org.dive4elements.river.artifacts.model.DataFacet; +import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; + +public class BedDiameterDataFacet +extends DataFacet +{ + private static final Logger logger = Logger.getLogger(BedDiameterDataFacet.class); + + private String diameter; + private boolean subCap; + + public BedDiameterDataFacet() { + } + + public BedDiameterDataFacet( + int ndx, + String name, + String description, + ComputeType type, + String stateId, + String hash + ) { + super(ndx, name, description, type, hash, stateId); + } + + public Object getData(Artifact artifact, CallContext context) { + D4EArtifact d4e = (D4EArtifact) artifact; + BedQualityAccess access = new BedQualityAccess(d4e, context); + int ndx = getIndex() & 7; + int top = (getIndex() >> 3) & 1; + int diam = (getIndex() >> 4); + String diameter = ""; + switch (diam) { + case 1: diameter = "d10"; break; + case 2: diameter = "d16"; break; + case 3: diameter = "d20"; break; + case 4: diameter = "d25"; break; + case 5: diameter = "d30"; break; + case 6: diameter = "d40"; break; + case 7: diameter = "d50"; break; + case 8: diameter = "d60"; break; + case 9: diameter = "d70"; break; + case 10: diameter = "d75"; break; + case 11: diameter = "d80"; break; + case 12: diameter = "d84"; break; + case 13: diameter = "d90"; break; + case 14: diameter = "dmin"; break; + case 15: diameter = "dmax"; break; + case 16: diameter = "dm"; break; + default: return null; + } + + QualityMeasurements measurements = + QualityMeasurementFactory.getBedMeasurements( + access.getRiver(), + access.getFrom(), + access.getTo(), + access.getDateRanges().get(ndx).getFrom(), + access.getDateRanges().get(ndx).getTo()); + TDoubleArrayList kms = new TDoubleArrayList(); + TDoubleArrayList data = new TDoubleArrayList(); + for (QualityMeasurement m : measurements.getMeasurements()) { + if (top == 1 && m.getDepth1() == 0d && m.getDepth2() <= 0.3) { + kms.add(m.getKm()); + data.add(m.getDiameter(diameter)*1000); + } + else if (top == 0 && m.getDepth1() > 0d && m.getDepth2() <= 0.5){ + kms.add(m.getKm()); + data.add(m.getDiameter(diameter)* 1000); + } + } + BedDiameterData bdd = new BedDiameterData(diameter, kms, data); + return bdd; + } + + /** Copy deeply. */ + @Override + public Facet deepCopy() { + BedDiameterDataFacet copy = new BedDiameterDataFacet(); + copy.set(this); + copy.type = type; + copy.hash = hash; + copy.stateId = stateId; + copy.diameter = diameter; + return copy; + } +}