annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/sq/SQRelationCalculation.java @ 6797:e237a83fd87d

S/Q relation: Spell Ferguson with F.
author Sascha L. Teichmann <teichmann@intevation.de>
date Fri, 09 Aug 2013 18:29:08 +0200
parents 978ab716a15e
children 330ea2915168
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5396
diff changeset
9 package org.dive4elements.river.artifacts.model.sq;
3072
0d3dd8230064 Added component stubs for SQ relation calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
11 import org.dive4elements.artifacts.common.utils.StringUtils;
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5396
diff changeset
12 import org.dive4elements.river.artifacts.access.SQRelationAccess;
3304
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
13
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5396
diff changeset
14 import org.dive4elements.river.artifacts.math.fitting.Function;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5396
diff changeset
15 import org.dive4elements.river.artifacts.math.fitting.FunctionFactory;
3072
0d3dd8230064 Added component stubs for SQ relation calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
16
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5396
diff changeset
17 import org.dive4elements.river.artifacts.model.Calculation;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5396
diff changeset
18 import org.dive4elements.river.artifacts.model.CalculationResult;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5396
diff changeset
19 import org.dive4elements.river.artifacts.model.DateRange;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5396
diff changeset
20 import org.dive4elements.river.artifacts.model.Parameters;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5396
diff changeset
21
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5396
diff changeset
22 import org.dive4elements.river.backend.SedDBSessionHolder;
3289
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
23
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
24 import java.util.ArrayList;
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
25 import java.util.Arrays;
3304
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
26 import java.util.List;
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
27
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
28 import org.apache.log4j.Logger;
3072
0d3dd8230064 Added component stubs for SQ relation calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29
0d3dd8230064 Added component stubs for SQ relation calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 public class SQRelationCalculation extends Calculation {
0d3dd8230064 Added component stubs for SQ relation calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
32 private static final Logger log =
3072
0d3dd8230064 Added component stubs for SQ relation calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33 Logger.getLogger(SQRelationCalculation.class);
0d3dd8230064 Added component stubs for SQ relation calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
35 public static final boolean NON_LINEAR_FITTING =
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
36 Boolean.getBoolean("minfo.sq.calcution.non.linear.fitting");
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
37
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
38 public static final String SQ_POW_FUNCTION_NAME = "sq-pow";
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
39 public static final String SQ_LIN_FUNCTION_NAME = "linear";
3304
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
40
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
41 public static final String [] EXTRA_PARAMETERS = {
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
42 "chi_sqr",
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
43 "std_dev",
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
44 "max_q",
6797
e237a83fd87d S/Q relation: Spell Ferguson with F.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6796
diff changeset
45 "c_ferguson",
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
46 "c_duan",
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
47 "r2"
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
48 };
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
49
3426
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
50 protected String river;
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
51 protected double location;
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
52 protected DateRange period;
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
53 protected double outliers;
5396
aaf810d4ec82 Use new state 'outlier mehtod selection' in SQ-relation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4039
diff changeset
54 private String method;
3305
b24920235944 Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3304
diff changeset
55
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
56 public SQRelationCalculation() {
3079
8ad8a227d983 Added model classes for SQ calculation; generate fake results and improved the SQRelationGenerator which now draws the outliers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3072
diff changeset
57 }
8ad8a227d983 Added model classes for SQ calculation; generate fake results and improved the SQRelationGenerator which now draws the outliers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3072
diff changeset
58
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
59 public SQRelationCalculation(SQRelationAccess access) {
3079
8ad8a227d983 Added model classes for SQ calculation; generate fake results and improved the SQRelationGenerator which now draws the outliers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3072
diff changeset
60
3426
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
61 String river = access.getRiver();
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
62 Double location = access.getLocation();
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
63 DateRange period = access.getPeriod();
3426
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
64 Double outliers = access.getOutliers();
5396
aaf810d4ec82 Use new state 'outlier mehtod selection' in SQ-relation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4039
diff changeset
65 String method = access.getOutlierMethod();
3101
b31397addf2f Create Facets for each SQResult and SQFractionResult.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3079
diff changeset
66
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
67 if (river == null) {
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
68 // TODO: i18n
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
69 addProblem("sq.missing.river");
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
70 }
3101
b31397addf2f Create Facets for each SQResult and SQFractionResult.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3079
diff changeset
71
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
72 if (location == null) {
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
73 // TODO: i18n
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
74 addProblem("sq.missing.location");
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
75 }
3101
b31397addf2f Create Facets for each SQResult and SQFractionResult.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3079
diff changeset
76
3426
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
77 if (period == null) {
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
78 // TODO: i18n
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
79 addProblem("sq.missing.periods");
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
80 }
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
81
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
82 if (outliers == null) {
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
83 // TODO: i18n
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
84 addProblem("sq.missing.outliers");
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
85 }
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
86
5396
aaf810d4ec82 Use new state 'outlier mehtod selection' in SQ-relation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4039
diff changeset
87 if (method == null) {
aaf810d4ec82 Use new state 'outlier mehtod selection' in SQ-relation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4039
diff changeset
88 //TODO: i18n
aaf810d4ec82 Use new state 'outlier mehtod selection' in SQ-relation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4039
diff changeset
89 addProblem("sq.missing.method");
aaf810d4ec82 Use new state 'outlier mehtod selection' in SQ-relation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4039
diff changeset
90 }
aaf810d4ec82 Use new state 'outlier mehtod selection' in SQ-relation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4039
diff changeset
91
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
92 if (!hasProblems()) {
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
93 this.river = river;
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
94 this.location = location;
3426
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
95 this.period = period;
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
96 this.outliers = outliers;
5396
aaf810d4ec82 Use new state 'outlier mehtod selection' in SQ-relation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4039
diff changeset
97 this.method = method;
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
98 }
3079
8ad8a227d983 Added model classes for SQ calculation; generate fake results and improved the SQRelationGenerator which now draws the outliers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3072
diff changeset
99 }
8ad8a227d983 Added model classes for SQ calculation; generate fake results and improved the SQRelationGenerator which now draws the outliers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3072
diff changeset
100
3105
9592b7d76633 Generate fake data for SQ curves; Implemented the Facet and Generator stuff.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3101
diff changeset
101
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
102 public CalculationResult calculate() {
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
103 log.debug("SQRelationCalculation.calculate");
3079
8ad8a227d983 Added model classes for SQ calculation; generate fake results and improved the SQRelationGenerator which now draws the outliers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3072
diff changeset
104
3222
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
105 if (hasProblems()) {
116b342893e3 SQ: Connect calculation with artifact parameter access.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3118
diff changeset
106 return new CalculationResult(this);
3118
6fb211753674 The fake calculation for SQ relation now creates only values bigger than 0.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3105
diff changeset
107 }
3079
8ad8a227d983 Added model classes for SQ calculation; generate fake results and improved the SQRelationGenerator which now draws the outliers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3072
diff changeset
108
3289
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
109 SedDBSessionHolder.acquire();
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
110 try {
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
111 return internalCalculate();
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
112 }
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
113 finally {
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
114 SedDBSessionHolder.release();
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
115 }
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
116 }
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
117
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
118 public interface TransformCoeffs {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
119 double [] transform(double [] coeffs);
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
120 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
121
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
122 public static final TransformCoeffs IDENTITY_TRANS =
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
123 new TransformCoeffs() {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
124 @Override
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
125 public double [] transform(double [] coeffs) {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
126 return coeffs;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
127 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
128 };
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
129
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
130 public static final TransformCoeffs LINEAR_TRANS =
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
131 new TransformCoeffs() {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
132 @Override
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
133 public double [] transform(double [] coeffs) {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
134 log.debug("before transform: " + Arrays.toString(coeffs));
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
135 if (coeffs.length == 2) {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
136 coeffs = new double [] { Math.exp(coeffs[1]), coeffs[0] };
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
137 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
138 log.debug("after transform: " + Arrays.toString(coeffs));
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
139 return coeffs;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
140 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
141 };
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
142
3289
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
143 protected CalculationResult internalCalculate() {
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
144
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
145 Function powFunction = FunctionFactory
3304
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
146 .getInstance()
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
147 .getFunction(SQ_POW_FUNCTION_NAME);
3304
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
148
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
149 if (powFunction == null) {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
150 log.error("No '" + SQ_POW_FUNCTION_NAME + "' function found.");
3304
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
151 // TODO: i18n
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
152 addProblem("sq.missing.sq.function");
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
153 return new CalculationResult(new SQResult[0], this);
3304
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
154 }
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
155
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
156 Function function;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
157 SQ.View sqView;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
158 SQ.Factory sqFactory;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
159 ParameterCreator pc;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
160
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
161 if (NON_LINEAR_FITTING) {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
162 log.debug("Use non linear fitting.");
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
163 sqView = SQ.SQ_VIEW;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
164 sqFactory = SQ.SQ_FACTORY;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
165 function = powFunction;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
166 pc = new ParameterCreator(
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
167 powFunction.getParameterNames(),
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
168 powFunction.getParameterNames(),
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
169 powFunction,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
170 sqView);
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
171 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
172 else {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
173 log.debug("Use linear fitting.");
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
174 sqView = LogSQ.LOG_SQ_VIEW;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
175 sqFactory = LogSQ.LOG_SQ_FACTORY;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
176 function = FunctionFactory
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
177 .getInstance()
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
178 .getFunction(SQ_LIN_FUNCTION_NAME);
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
179 if (function == null) {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
180 log.error("No '" + SQ_LIN_FUNCTION_NAME + "' function found.");
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
181 // TODO: i18n
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
182 addProblem("sq.missing.sq.function");
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
183 return new CalculationResult(new SQResult[0], this);
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
184 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
185 pc = new LinearParameterCreator(
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
186 powFunction.getParameterNames(),
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
187 function.getParameterNames(),
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
188 function,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
189 sqView);
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
190 }
6780
b8f94e865875 S/Q relation: Part I of 'faking' fitting linear data. S/Qs can now be subclassed and processed through views. TODO: Add knob to setup a linear data path.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
191
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
192 Measurements measurements =
6780
b8f94e865875 S/Q relation: Part I of 'faking' fitting linear data. S/Qs can now be subclassed and processed through views. TODO: Add knob to setup a linear data path.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
193 MeasurementFactory.getMeasurements(
b8f94e865875 S/Q relation: Part I of 'faking' fitting linear data. S/Qs can now be subclassed and processed through views. TODO: Add knob to setup a linear data path.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
194 river, location, period, sqFactory);
3310
8af1111af180 SQ relation: More fixes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3305
diff changeset
195
3426
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
196 SQFractionResult [] fractionResults =
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
197 new SQFractionResult[SQResult.NUMBER_FRACTIONS];
3304
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
198
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
199
3426
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
200 for (int i = 0; i < fractionResults.length; ++i) {
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
201 List<SQ> sqs = measurements.getSQs(i);
3310
8af1111af180 SQ relation: More fixes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3305
diff changeset
202
3426
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
203 SQFractionResult fractionResult;
3310
8af1111af180 SQ relation: More fixes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3305
diff changeset
204
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
205 List<SQFractionResult.Iteration> iterations =
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
206 doFitting(function, sqs, sqView, pc);
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
207
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
208 if (iterations == null) {
3426
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
209 // TODO: i18n
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
210 addProblem("sq.fitting.failed." + i);
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
211 fractionResult = new SQFractionResult();
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
212 }
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
213 else {
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
214 fractionResult = new SQFractionResult(
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
215 sqs.toArray(new SQ[sqs.size()]),
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
216 iterations);
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
217 }
3310
8af1111af180 SQ relation: More fixes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3305
diff changeset
218
3426
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
219 fractionResults[i] = fractionResult;
3297
79c8e0d9fdea SQ relation: Use only first time period.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3290
diff changeset
220 }
3289
ec9aab93f292 SQ: First peek into fetching relevant data from SedDB
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3222
diff changeset
221
3310
8af1111af180 SQ relation: More fixes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3305
diff changeset
222 return new CalculationResult(
3426
e7a67407dea1 Limited the input of time periods in SQ relation calculation to 1.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3392
diff changeset
223 new SQResult[] { new SQResult(location, fractionResults) },
3310
8af1111af180 SQ relation: More fixes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3305
diff changeset
224 this);
3072
0d3dd8230064 Added component stubs for SQ relation calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
225 }
3304
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
226
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
227 protected List<SQFractionResult.Iteration> doFitting(
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
228 final Function function,
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
229 List<SQ> sqs,
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
230 SQ.View sqView,
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
231 final ParameterCreator pc
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
232 ) {
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
233 final List<SQFractionResult.Iteration> iterations =
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
234 new ArrayList<SQFractionResult.Iteration>();
3304
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
235
6780
b8f94e865875 S/Q relation: Part I of 'faking' fitting linear data. S/Qs can now be subclassed and processed through views. TODO: Add knob to setup a linear data path.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
236 boolean success = new Fitting(function, outliers, sqView).fit(
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
237 sqs,
5396
aaf810d4ec82 Use new state 'outlier mehtod selection' in SQ-relation.
Raimund Renkert <rrenkert@intevation.de>
parents: 4039
diff changeset
238 method,
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
239 new Fitting.Callback() {
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
240 @Override
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
241 public void afterIteration(
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
242 double [] coeffs,
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
243 SQ [] measurements,
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
244 SQ [] outliers,
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
245 double standardDeviation,
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
246 double chiSqr
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
247 ) {
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
248 Parameters parameters = pc.createParameters(
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
249 coeffs,
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
250 standardDeviation,
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
251 chiSqr,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
252 measurements);
3552
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
253 iterations.add(new SQFractionResult.Iteration(
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
254 parameters,
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
255 measurements,
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
256 outliers));
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
257 }
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
258 });
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
259
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
260 return success ? iterations : null;
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
261 }
1df6984628c3 S/Q: Extented the result data model of the S/Q calculation to
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3426
diff changeset
262
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
263 public static class ParameterCreator {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
264
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
265 protected String [] origNames;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
266 protected String [] proxyNames;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
267
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
268 protected Function function;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
269 protected SQ.View view;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
270
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
271 public ParameterCreator(
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
272 String [] origNames,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
273 String [] proxyNames,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
274 Function function,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
275 SQ.View view
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
276 ) {
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
277 this.origNames = origNames;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
278 this.proxyNames = proxyNames;
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
279 this.view = view;
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
280 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
281
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
282 protected double [] transformCoeffs(double [] coeffs) {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
283 return coeffs;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
284 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
285
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
286 private static double maxQ(SQ [] sqs) {
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
287 double max = -Double.MAX_VALUE;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
288 for (SQ sq: sqs) {
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
289 double q = sq.getQ(); // Don't use view here!
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
290 if (q > max) {
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
291 max = q;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
292 }
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
293 }
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
294 return Math.max(0d, max);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
295 }
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
296
6797
e237a83fd87d S/Q relation: Spell Ferguson with F.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6796
diff changeset
297 private double cFerguson(
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
298 org.dive4elements.river.artifacts.math.Function instance,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
299 SQ [] sqs
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
300 ) {
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
301 double sqrSum = 0d;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
302
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
303 for (SQ sq: sqs) {
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
304 double s = view.getS(sq);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
305 double q = view.getQ(sq);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
306 double diffS = s - instance.value(q);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
307 sqrSum += diffS*diffS;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
308 }
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
309
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
310 return Math.exp(0.5d * sqrSum/(sqs.length-2));
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
311 }
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
312
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
313 private double cDuan(
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
314 org.dive4elements.river.artifacts.math.Function instance,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
315 SQ [] sqs
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
316 ) {
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
317 double sum = 0d;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
318
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
319 for (SQ sq: sqs) {
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
320 double s = view.getS(sq);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
321 double q = view.getQ(sq);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
322 double diffS = s - instance.value(q);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
323 sum += Math.exp(diffS);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
324 }
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
325 return sum / sqs.length;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
326 }
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
327
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
328 private double r2(
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
329 org.dive4elements.river.artifacts.math.Function instance,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
330 SQ [] sqs
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
331 ) {
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
332 double xm = 0;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
333 double ym = 0;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
334 for (SQ sq: sqs) {
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
335 double s = view.getS(sq);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
336 double q = view.getQ(sq);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
337 double fs = instance.value(q);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
338 xm += s;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
339 ym += fs;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
340 }
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
341 xm /= sqs.length;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
342 ym /= sqs.length;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
343
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
344 double mixXY = 0d;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
345 double sumX = 0d;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
346 double sumY = 0d;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
347
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
348 for (SQ sq: sqs) {
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
349 double s = view.getS(sq);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
350 double q = view.getQ(sq);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
351 double fs = instance.value(q);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
352
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
353 double xDiff = xm - s;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
354 double yDiff = ym - fs;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
355
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
356 mixXY += xDiff*yDiff;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
357
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
358 sumX += xDiff*xDiff;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
359 sumY *= yDiff*yDiff;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
360 }
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
361
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
362 double r = mixXY/Math.sqrt(sumX*sumY);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
363 return r*r;
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
364 }
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
365
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
366
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
367 public Parameters createParameters(
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
368 double [] coeffs,
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
369 double standardDeviation,
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
370 double chiSqr,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
371 SQ [] measurements
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
372 ) {
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
373 String [] columns = StringUtils.join(EXTRA_PARAMETERS, origNames);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
374
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
375 Parameters parameters = new Parameters(columns);
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
376 int row = parameters.newRow();
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
377 parameters.set(row, origNames, transformCoeffs(coeffs));
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
378 parameters.set(row, "chi_sqr", chiSqr);
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
379 parameters.set(row, "std_dev", standardDeviation);
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
380 parameters.set(row, "max_q", maxQ(measurements));
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
381
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
382 // We need to instantiate the function to calculate
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
383 // the remaining values.
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
384 org.dive4elements.river.artifacts.math.Function f =
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
385 function.instantiate(coeffs);
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
386
6797
e237a83fd87d S/Q relation: Spell Ferguson with F.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6796
diff changeset
387 parameters.set(row, "c_ferguson", cFerguson(f, measurements));
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
388 parameters.set(row, "c_duan", cDuan(f, measurements));
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
389 parameters.set(row, "r2", r2(f, measurements));
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
390
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
391 return parameters;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
392 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
393 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
394
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
395 /** We need to transform the coeffs back to the original function. */
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
396 public static class LinearParameterCreator extends ParameterCreator {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
397
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
398 public LinearParameterCreator(
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
399 String [] origNames,
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
400 String [] proxyNames,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
401 Function function,
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
402 SQ.View view
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
403 ) {
6796
978ab716a15e flys/issue1347: Added missing calcutions. TODO: Bring them into the generated outs.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6787
diff changeset
404 super(origNames, proxyNames, function, view);
6787
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
405 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
406
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
407 @Override
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
408 protected double [] transformCoeffs(double [] coeffs) {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
409
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
410 int bP = StringUtils.indexOf("m", proxyNames);
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
411 int mP = StringUtils.indexOf("b", proxyNames);
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
412
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
413 int aO = StringUtils.indexOf("a", origNames);
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
414 int bO = StringUtils.indexOf("b", origNames);
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
415
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
416 if (bP == -1 || mP == -1 || aO == -1 || bO == -1) {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
417 log.error("index not found: "
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
418 + bP + " " + mP + " "
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
419 + aO + " " + bO);
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
420 return coeffs;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
421 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
422
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
423 double [] ncoeffs = (double [])coeffs.clone();
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
424 ncoeffs[aO] = Math.exp(coeffs[mP]);
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
425 ncoeffs[bO] = coeffs[bP];
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
426
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
427 if (log.isDebugEnabled()) {
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
428 log.debug("before transform: " + Arrays.toString(coeffs));
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
429 log.debug("after transform: " + Arrays.toString(ncoeffs));
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
430 }
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
431
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
432 return ncoeffs;
51eb6491c537 S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property S/Q: Excel compat completed: Now the data is linearized before fitting. This can be prevented by setting the system property "minfo.sq.calcution.non.linear.fitting" to true.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6780
diff changeset
433 }
3304
02d5731b43a2 SQ relation: Build a valid SQResult.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3297
diff changeset
434 }
3072
0d3dd8230064 Added component stubs for SQ relation calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
435 }
0d3dd8230064 Added component stubs for SQ relation calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
436 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org