teichmann@5831: package org.dive4elements.river.artifacts.model; sascha@2256: teichmann@5831: import org.dive4elements.river.artifacts.math.Function; teichmann@5831: import org.dive4elements.river.artifacts.math.Identity; teichmann@5831: import org.dive4elements.river.artifacts.math.AddScaleFunction; sascha@2256: sascha@2256: public class WWAxisTypes sascha@2256: { sascha@2256: protected boolean inCm1; sascha@2256: protected boolean inCm2; sascha@2256: sascha@2256: public WWAxisTypes() { sascha@2256: inCm1 = inCm2 = true; sascha@2256: } sascha@2256: sascha@2256: public WWAxisTypes(WW ww) { sascha@2256: this(); sascha@2256: classify(ww); sascha@2256: } sascha@2256: sascha@2256: public void classify(WW ww) { sascha@2256: if (!ww.startAtGauge()) inCm1 = false; sascha@2256: if (!ww.endAtGauge()) inCm2 = false; sascha@2256: } sascha@2256: sascha@2407: public boolean getInCm(int index) { sascha@2407: switch (index) { sascha@2407: case 0: return inCm1; sascha@2407: case 1: return inCm2; sascha@2407: default: return false; sascha@2407: } sascha@2407: } sascha@2407: sascha@2256: public boolean getInCm1() { sascha@2256: return inCm1; sascha@2256: } sascha@2256: sascha@2256: public void setInCm1(boolean inCm1) { sascha@2256: this.inCm1 = inCm1; sascha@2256: } sascha@2256: sascha@2256: public boolean getInCm2() { sascha@2256: return inCm2; sascha@2256: } sascha@2256: sascha@2256: public void setInCm2(boolean inCm2) { sascha@2256: this.inCm2 = inCm2; sascha@2256: } sascha@2256: sascha@2256: public WW.ApplyFunctionIterator transform(WW ww) { sascha@2278: return transform(ww, false); sascha@2278: } sascha@2278: sascha@2410: private static final double zero(Double d) { sascha@2410: return d == null ? 0 : d; sascha@2410: } sascha@2410: sascha@2278: public WW.ApplyFunctionIterator transform(WW ww, boolean normalized) { sascha@2278: sascha@2281: Function function1; sascha@2281: Function function2; sascha@2256: sascha@2281: if (!normalized) { sascha@2281: function1 = inCm1 sascha@2410: ? new AddScaleFunction(-ww.getStartDatum(), 100d) sascha@2281: : Identity.IDENTITY; sascha@2281: sascha@2281: function2 = inCm2 sascha@2410: ? new AddScaleFunction(-ww.getEndDatum(), 100d) sascha@2281: : Identity.IDENTITY; sascha@2281: } sascha@2281: else { sascha@2281: double minW1 = ww.minWs(); sascha@2281: double minW2 = ww.minWs2(); sascha@2281: double scale1 = inCm1 ? 100d : 1d; sascha@2281: double scale2 = inCm2 ? 100d : 1d; sascha@2410: function1 = new AddScaleFunction(-minW1, scale1); sascha@2410: function2 = new AddScaleFunction(-minW2, scale2); sascha@2281: } sascha@2281: sascha@2256: return new WW.ApplyFunctionIterator(ww, function1, function2); sascha@2256: } sascha@2256: } sascha@2256: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :