Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQOutlierCurveFacet.java @ 3552:1df6984628c3
S/Q: Extented the result data model of the S/Q calculation to
store the curve coefficients for each iteration step
of the outlier elimination.
flys-artifacts/trunk@5146 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 27 Jul 2012 12:36:09 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
3551:e7f1556192b3 | 3552:1df6984628c3 |
---|---|
1 package de.intevation.flys.artifacts.model.sq; | |
2 | |
3 import de.intevation.artifactdatabase.state.Facet; | |
4 | |
5 import de.intevation.artifacts.Artifact; | |
6 import de.intevation.artifacts.CallContext; | |
7 | |
8 import de.intevation.flys.artifacts.FLYSArtifact; | |
9 | |
10 import de.intevation.flys.artifacts.math.fitting.Function; | |
11 import de.intevation.flys.artifacts.math.fitting.FunctionFactory; | |
12 | |
13 import de.intevation.flys.artifacts.model.CalculationResult; | |
14 import de.intevation.flys.artifacts.model.DataFacet; | |
15 import de.intevation.flys.artifacts.model.FacetTypes; | |
16 import de.intevation.flys.artifacts.model.Parameters; | |
17 | |
18 import de.intevation.flys.artifacts.states.DefaultState.ComputeType; | |
19 | |
20 import org.apache.log4j.Logger; | |
21 | |
22 public class SQOutlierCurveFacet | |
23 extends DataFacet | |
24 implements FacetTypes | |
25 { | |
26 private static final Logger log = | |
27 Logger.getLogger(SQOutlierCurveFacet.class); | |
28 | |
29 public static final String FUNCTION = "sq-pow"; | |
30 | |
31 public static final int BITMASK_ITERATION = (1 << 16) - 1; | |
32 | |
33 private int fractionIdx; | |
34 | |
35 public SQOutlierCurveFacet() { | |
36 } | |
37 | |
38 public SQOutlierCurveFacet( | |
39 int idx, | |
40 int fractionIdx, | |
41 String name, | |
42 String description, | |
43 String hash, | |
44 String stateId | |
45 ) { | |
46 super(idx, name, description, ComputeType.ADVANCE, hash, stateId); | |
47 this.fractionIdx = fractionIdx; | |
48 } | |
49 | |
50 | |
51 @Override | |
52 public Object getData(Artifact artifact, CallContext context) { | |
53 log.debug("SQOutlierCurveFacet.getData"); | |
54 | |
55 if (!(artifact instanceof FLYSArtifact)) { | |
56 return null; | |
57 } | |
58 | |
59 FLYSArtifact flys = (FLYSArtifact) artifact; | |
60 | |
61 CalculationResult res = (CalculationResult) flys.compute( | |
62 context, ComputeType.ADVANCE, false); | |
63 | |
64 int idx = this.index >> 16; | |
65 int iter = this.index & BITMASK_ITERATION; | |
66 | |
67 SQResult[] results = (SQResult[]) res.getData(); | |
68 SQFractionResult result = results[idx].getFraction(fractionIdx); | |
69 | |
70 Parameters params = result.getParameters(iter); | |
71 | |
72 if (params == null) { | |
73 return null; | |
74 } | |
75 | |
76 Function func = FunctionFactory.getInstance().getFunction(FUNCTION); | |
77 String [] paramNames = func.getParameterNames(); | |
78 | |
79 double [] coeffs = params.get(0, paramNames); | |
80 | |
81 if (log.isDebugEnabled()) { | |
82 for (int i = 0; i < paramNames.length; i++) { | |
83 log.debug("retrieved parameter " + paramNames[i] + | |
84 " = " + coeffs[i]); | |
85 } | |
86 } | |
87 | |
88 de.intevation.flys.artifacts.math.Function mf = | |
89 func.instantiate(coeffs); | |
90 | |
91 double [] extent = result.getQExtent(); | |
92 return new SQFunction(mf, extent[0], extent[1]); | |
93 } | |
94 | |
95 @Override | |
96 public Facet deepCopy() { | |
97 SQOutlierCurveFacet copy = new SQOutlierCurveFacet(); | |
98 copy.set(this); | |
99 return copy; | |
100 } | |
101 } | |
102 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |