teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.model.fixings; sascha@3203: teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallContext; sascha@3086: teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; raimund@3043: teichmann@5831: import org.dive4elements.river.artifacts.access.FixAnalysisAccess; teichmann@5831: teichmann@5831: import org.dive4elements.river.artifacts.math.fitting.Function; teichmann@5831: import org.dive4elements.river.artifacts.math.fitting.FunctionFactory; teichmann@5831: teichmann@5831: import org.dive4elements.river.artifacts.model.CalculationResult; teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.model.Parameters; teichmann@5831: teichmann@5831: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; raimund@3043: sascha@3086: import org.apache.log4j.Logger; raimund@3043: raimund@3043: raimund@3043: /** raimund@3043: * Facet to show the W|Q values. raimund@3043: * raimund@3043: * @author Raimund Renkert raimund@3043: */ raimund@3043: public class FixDerivateFacet bjoern@4442: extends FixingsFacet raimund@3043: implements FacetTypes { raimund@3043: teichmann@8202: /** House log. */ teichmann@8202: private static Logger log = Logger.getLogger(FixDerivateFacet.class); raimund@3043: raimund@3080: raimund@3043: /** Trivial Constructor. */ raimund@3043: public FixDerivateFacet() { raimund@3043: } raimund@3043: raimund@3043: raimund@3043: /** raimund@3043: * @param name raimund@3043: */ raimund@3043: public FixDerivateFacet(String name, String description) { raimund@3043: super(0, name, description, ComputeType.ADVANCE, null, null); raimund@3043: } raimund@3043: christian@3192: public FixDerivateFacet(int index, String name, String description) { christian@3192: super(index, name, description, ComputeType.ADVANCE, null, null); christian@3192: } christian@3192: raimund@3043: raimund@3043: /** raimund@3043: * Returns the data this facet requires. raimund@3043: * raimund@3043: * @param artifact the owner artifact. raimund@3043: * @param context the CallContext (ignored). raimund@3043: * raimund@3043: * @return the data. raimund@3043: */ raimund@3043: @Override raimund@3043: public Object getData(Artifact artifact, CallContext context) { raimund@3043: teichmann@8202: log.debug("FixDerivateFacet.getData"); teichmann@5867: if (!(artifact instanceof D4EArtifact)) { teichmann@8202: log.debug("Not an instance of FixationArtifact."); raimund@3043: return null; raimund@3043: } sascha@3215: teichmann@5867: D4EArtifact flys = (D4EArtifact)artifact; teichmann@6101: FixAnalysisAccess access = new FixAnalysisAccess(flys); sascha@3215: sascha@3215: CalculationResult res = sascha@3215: (CalculationResult) flys.compute(context, sascha@3215: ComputeType.ADVANCE, sascha@3215: false); sascha@3215: sascha@3415: FixAnalysisResult result = (FixAnalysisResult) res.getData(); bjoern@4442: double currentKm = getCurrentKm(context); sascha@3215: sascha@3215: String function = access.getFunction(); sascha@3215: Function ff = FunctionFactory.getInstance().getFunction(function); sascha@3215: Function.Derivative fd = ff.getDerivative(); sascha@3215: sascha@3215: Parameters params = result.getParameters(); sascha@3215: double maxQ = FixFacetUtils.getMaxQ(params, currentKm); sascha@3215: sascha@3215: String[] paramNames = ff.getParameterNames(); sascha@3215: sascha@3215: double[] coeffs = params.interpolate("km", currentKm, paramNames); sascha@3215: if (coeffs == null) { teichmann@8202: log.warn("getData: coeffs == null"); sascha@3215: return null; sascha@3215: } sascha@3215: teichmann@5831: org.dive4elements.river.artifacts.math.Function mf = sascha@3215: fd.instantiate(coeffs); sascha@3215: sascha@3215: FixFunction fix = new FixFunction( sascha@3215: "", sascha@3215: fd.getDescription(), sascha@3215: mf, sascha@3215: maxQ); sascha@3215: sascha@3215: return fix; raimund@3043: } raimund@3043: raimund@3043: raimund@3043: /** raimund@3043: * Create a deep copy of this Facet. raimund@3043: * @return a deep copy. raimund@3043: */ raimund@3043: @Override raimund@3043: public FixDerivateFacet deepCopy() { raimund@3043: FixDerivateFacet copy = new FixDerivateFacet(); raimund@3043: copy.set(this); raimund@3043: return copy; raimund@3043: } raimund@3043: } raimund@3043: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :