raimund@3028: package de.intevation.flys.artifacts.model.fixings; raimund@3028: raimund@3028: import de.intevation.artifacts.Artifact; raimund@3028: import de.intevation.artifacts.CallContext; raimund@3028: raimund@3028: import de.intevation.flys.artifacts.FLYSArtifact; sascha@3203: sascha@3408: import de.intevation.flys.artifacts.access.FixAnalysisAccess; raimund@3035: sascha@3074: import de.intevation.flys.artifacts.math.fitting.Function; sascha@3074: import de.intevation.flys.artifacts.math.fitting.FunctionFactory; sascha@3074: sascha@3074: import de.intevation.flys.artifacts.model.CalculationResult; sascha@3074: import de.intevation.flys.artifacts.model.DataFacet; raimund@3028: import de.intevation.flys.artifacts.model.FacetTypes; raimund@3035: import de.intevation.flys.artifacts.model.Parameters; raimund@3035: sascha@3074: import de.intevation.flys.artifacts.states.DefaultState.ComputeType; raimund@3028: sascha@3074: import org.apache.log4j.Logger; raimund@3028: raimund@3028: /** raimund@3028: * Facet to show the W|Q values. raimund@3028: * raimund@3028: * @author Raimund Renkert raimund@3028: */ raimund@3028: public class FixWQCurveFacet raimund@3028: extends DataFacet raimund@3028: implements FacetTypes { raimund@3028: raimund@3028: /** House logger. */ raimund@3028: private static Logger logger = Logger.getLogger(FixWQCurveFacet.class); raimund@3028: raimund@3028: /** Trivial Constructor. */ raimund@3028: public FixWQCurveFacet() { raimund@3028: } raimund@3028: raimund@3028: raimund@3028: /** felix@3269: * @param description Description of the facet. raimund@3028: */ raimund@3028: public FixWQCurveFacet(String description) { raimund@3028: super(0, FIX_WQ_CURVE, description, ComputeType.ADVANCE, null, null); raimund@3028: } raimund@3028: christian@3192: public FixWQCurveFacet(int index, String description) { christian@3192: super(index, FIX_WQ_CURVE, description, ComputeType.ADVANCE, null, null); christian@3192: } christian@3192: raimund@3028: raimund@3028: /** raimund@3028: * Returns the data this facet requires. raimund@3028: * raimund@3028: * @param artifact the owner artifact. raimund@3028: * @param context the CallContext (ignored). raimund@3028: * raimund@3028: * @return the data. raimund@3028: */ raimund@3028: @Override raimund@3028: public Object getData(Artifact artifact, CallContext context) { raimund@3028: logger.debug("FixWQCurveFacet.getData"); raimund@3035: if (artifact instanceof FLYSArtifact) { raimund@3035: FLYSArtifact flys = (FLYSArtifact)artifact; sascha@3408: FixAnalysisAccess access = new FixAnalysisAccess(flys); raimund@3035: raimund@3035: CalculationResult res = raimund@3035: (CalculationResult) flys.compute(context, raimund@3035: ComputeType.ADVANCE, raimund@3035: false); raimund@3035: ingo@3466: FixResult result = (FixResult) res.getData(); raimund@3088: double currentKm = raimund@3088: ((Double)context.getContextValue("currentKm")).doubleValue(); raimund@3035: christian@3081: logger.debug("getData: km = " + currentKm); raimund@3035: raimund@3035: String function = access.getFunction(); raimund@3035: Function ff = FunctionFactory.getInstance().getFunction(function); raimund@3035: sascha@3074: if (ff == null) { christian@3081: logger.warn("getData: ff == null"); sascha@3074: return null; sascha@3074: } sascha@3074: raimund@3035: Parameters params = result.getParameters(); sascha@3073: String[] paramNames = ff.getParameterNames(); sascha@3073: raimund@3080: double [] coeffs = params.interpolate("km", currentKm, paramNames); sascha@3073: sascha@3073: if (coeffs == null) { christian@3081: logger.warn("getData: coeffs == null"); sascha@3073: return null; christian@3056: } raimund@3035: raimund@3035: de.intevation.flys.artifacts.math.Function mf = raimund@3035: ff.instantiate(coeffs); raimund@3035: christian@3091: double maxQ = FixFacetUtils.getMaxQ(params, currentKm); christian@3056: logger.debug("getData: maxQ = " + maxQ); raimund@3035: raimund@3035: FixFunction fix = new FixFunction( raimund@3035: ff.getName(), raimund@3035: ff.getDescription(), raimund@3035: mf, raimund@3035: maxQ); raimund@3035: raimund@3035: return fix; raimund@3035: } raimund@3035: else { felix@4308: logger.debug("Not an instance of FLYSArtifact / FixationArtifact."); raimund@3035: return null; raimund@3035: } raimund@3028: } raimund@3028: raimund@3028: /** raimund@3028: * Create a deep copy of this Facet. raimund@3028: * @return a deep copy. raimund@3028: */ raimund@3028: @Override raimund@3028: public FixWQCurveFacet deepCopy() { raimund@3028: FixWQCurveFacet copy = new FixWQCurveFacet(); raimund@3028: copy.set(this); raimund@3028: return copy; raimund@3028: } raimund@3028: } raimund@3028: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :