teichmann@5831: package org.dive4elements.river.artifacts.model.minfo; rrenkert@4672: rrenkert@4672: import org.apache.log4j.Logger; rrenkert@4672: teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: import org.dive4elements.river.artifacts.FLYSArtifact; teichmann@5831: import org.dive4elements.river.artifacts.access.RiverAccess; teichmann@5831: import org.dive4elements.river.artifacts.context.FLYSContext; teichmann@5831: import org.dive4elements.river.artifacts.model.CalculationResult; teichmann@5831: import org.dive4elements.river.artifacts.model.DataFacet; teichmann@5831: import org.dive4elements.river.artifacts.math.MovingAverage; teichmann@5831: import org.dive4elements.river.artifacts.model.ZoomScale; teichmann@5831: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; rrenkert@4672: rrenkert@4672: rrenkert@4672: public class BedDiffEpochFilterFacet rrenkert@4672: extends DataFacet rrenkert@4672: { rrenkert@4672: private static Logger logger = Logger.getLogger(BedDensityFacet.class); rrenkert@4672: rrenkert@4672: public BedDiffEpochFilterFacet() { rrenkert@4672: } rrenkert@4672: rrenkert@4672: public BedDiffEpochFilterFacet(int idx, String name, String description, rrenkert@4672: ComputeType type, String stateId, String hash) { rrenkert@4672: super(idx, name, description, type, hash, stateId); rrenkert@4672: } rrenkert@4672: rrenkert@4672: public Object getData(Artifact artifact, CallContext context) { rrenkert@4672: logger.debug("Get data for bed density at index: " + index); rrenkert@4672: rrenkert@4672: FLYSArtifact flys = (FLYSArtifact) artifact; rrenkert@4672: rrenkert@4672: CalculationResult res = (CalculationResult) flys.compute(context, hash, rrenkert@4672: stateId, type, false); rrenkert@4672: rrenkert@4672: BedDiffEpochResult[] data = rrenkert@4672: (BedDiffEpochResult[]) res.getData(); // TODO CAST TO SPECIFIC CLASS rrenkert@4672: Double start = (Double)context.getContextValue("startkm"); rrenkert@4672: Double end = (Double)context.getContextValue("endkm"); rrenkert@4672: rrenkert@4672: if(start != null && end != null) { rrenkert@4672: FLYSContext fc = (FLYSContext)context.globalContext(); rrenkert@4672: ZoomScale scales = (ZoomScale)fc.get("zoomscale"); rrenkert@4672: RiverAccess access = new RiverAccess((FLYSArtifact)artifact); rrenkert@4672: String river = access.getRiver(); rrenkert@4672: rrenkert@4672: double radius = scales.getRadius(river, start, end); rrenkert@4672: BedDiffEpochResult oldData = data[index]; rrenkert@4672: BedDiffEpochResult newData = new BedDiffEpochResult(); rrenkert@4672: newData.setStart(oldData.getStart()); rrenkert@4672: newData.setEnd(oldData.getEnd()); rrenkert@4672: double[][] diffs = MovingAverage.weighted(oldData.getDifferencesData(), radius); rrenkert@4672: double[][] heights1 = MovingAverage.weighted(oldData.getHeights1Data(), radius); rrenkert@4672: double[][] heights2 = MovingAverage.weighted(oldData.getHeights2Data(), radius); rrenkert@4672: for(int j = 0; j < diffs[0].length; j++) { rrenkert@4672: newData.addKm(diffs[0][j]); rrenkert@4672: newData.addDifference(diffs[1][j]); rrenkert@4672: newData.addHeight1(heights1[1][j]); rrenkert@4672: newData.addHeight2(heights2[1][j]); rrenkert@4672: } rrenkert@4672: return newData; rrenkert@4672: } rrenkert@4672: return data != null && data.length > index ? data[index] : null; rrenkert@4672: } rrenkert@4672: rrenkert@4672: /** Copy deeply. */ rrenkert@4672: @Override rrenkert@4672: public Facet deepCopy() { rrenkert@4672: BedDiffEpochFilterFacet copy = new BedDiffEpochFilterFacet(); rrenkert@4672: copy.set(this); rrenkert@4672: copy.type = type; rrenkert@4672: copy.hash = hash; rrenkert@4672: copy.stateId = stateId; rrenkert@4672: return copy; rrenkert@4672: } rrenkert@4672: } rrenkert@4672: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :