diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQCurveFacet.java @ 3105:9592b7d76633

Generate fake data for SQ curves; Implemented the Facet and Generator stuff. flys-artifacts/trunk@4704 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Tue, 19 Jun 2012 13:55:14 +0000
parents b31397addf2f
children 8af1111af180
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQCurveFacet.java	Tue Jun 19 13:20:03 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQCurveFacet.java	Tue Jun 19 13:55:14 2012 +0000
@@ -5,9 +5,13 @@
 import de.intevation.artifacts.Artifact;
 import de.intevation.artifacts.CallContext;
 
-
+import de.intevation.flys.artifacts.FLYSArtifact;
+import de.intevation.flys.artifacts.math.fitting.Function;
+import de.intevation.flys.artifacts.math.fitting.FunctionFactory;
+import de.intevation.flys.artifacts.model.CalculationResult;
+import de.intevation.flys.artifacts.model.DataFacet;
 import de.intevation.flys.artifacts.model.FacetTypes;
-import de.intevation.flys.artifacts.model.DataFacet;
+import de.intevation.flys.artifacts.model.Parameters;
 
 import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
 
@@ -22,6 +26,9 @@
     private static final Logger log = Logger.getLogger(SQCurveFacet.class);
 
 
+    public static final String FUNCTION = "sq-pow";
+
+
     private int fractionIdx;
 
 
@@ -45,7 +52,34 @@
     @Override
     public Object getData(Artifact artifact, CallContext context) {
         log.debug("SQCurveFacet.getData");
-        log.error("NOT IMPLEMENTED!");
+
+        if (artifact instanceof FLYSArtifact) {
+            FLYSArtifact flys = (FLYSArtifact) artifact;
+
+            CalculationResult res = (CalculationResult) flys.compute(
+                context, ComputeType.ADVANCE, false);
+
+            SQResult[]       results = (SQResult[]) res.getData();
+            SQFractionResult result  = results[index].getFraction(fractionIdx);
+
+            Function func = FunctionFactory.getInstance().getFunction(FUNCTION);
+            String[] paramNames = func.getParameterNames();
+
+            Parameters params = result.getParameters();
+            double[]   coeffs = params.get(0, paramNames);
+
+            if (log.isDebugEnabled()) {
+                for (int i = 0, N = paramNames.length; i < N; i++) {
+                    log.debug("retrieved parameter " + paramNames[i] +
+                              " = " + coeffs[i]);
+                }
+            }
+
+            de.intevation.flys.artifacts.math.Function mf =
+                func.instantiate(coeffs);
+
+            return new SQFunction(mf, result.getMinQ(), result.getMaxQ());
+        }
 
         return null;
     }

http://dive4elements.wald.intevation.org