teichmann@6821: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@6821: * Software engineering by Intevation GmbH teichmann@6821: * teichmann@6821: * This file is Free Software under the GNU AGPL (>=v3) teichmann@6821: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@6821: * documentation coming with Dive4Elements River for details. teichmann@6821: */ teichmann@6821: teichmann@6821: package org.dive4elements.river.artifacts.model.sq; teichmann@6821: teichmann@6821: public class LogSQ extends SQ { teichmann@6821: teichmann@6821: public static final View LOG_SQ_VIEW = new View() { teichmann@6821: @Override teichmann@6821: public double getS(SQ sq) { teichmann@6821: return ((LogSQ)sq).getLogS(); teichmann@6821: } teichmann@6821: teichmann@6821: @Override teichmann@6821: public double getQ(SQ sq) { teichmann@6821: return ((LogSQ)sq).getLogQ(); teichmann@6821: } teichmann@6821: }; teichmann@6821: teichmann@6821: public static final Factory LOG_SQ_FACTORY = new Factory() { teichmann@6821: @Override teichmann@6821: public SQ createSQ(double s, double q) { teichmann@6821: return new LogSQ(s, q); teichmann@6821: } teichmann@6821: }; teichmann@6821: teichmann@6821: protected double logS; teichmann@6821: protected double logQ; teichmann@6821: teichmann@6821: protected boolean logTrans; teichmann@6821: teichmann@6821: public LogSQ() { teichmann@6821: } teichmann@6821: teichmann@6821: public LogSQ(double s, double q) { teichmann@6821: super(s, q); teichmann@6821: } teichmann@6821: teichmann@6821: /** important: We cannot process negative s/q. */ teichmann@6821: @Override teichmann@6821: public boolean isValid() { teichmann@6821: return super.isValid() && s > 0d && q > 0d; teichmann@6821: } teichmann@6821: teichmann@6821: protected void ensureLogTrans() { teichmann@6821: if (!logTrans) { teichmann@6821: logTrans = true; teichmann@6821: logS = Math.log(s); teichmann@6821: logQ = Math.log(q); teichmann@6821: } teichmann@6821: } teichmann@6821: teichmann@6821: public double getLogS() { teichmann@6821: ensureLogTrans(); teichmann@6821: return logS; teichmann@6821: } teichmann@6821: teichmann@6821: public double getLogQ() { teichmann@6821: ensureLogTrans(); teichmann@6821: return logQ; teichmann@6821: } teichmann@6821: } teichmann@6821: