Skip to content

Commit bde3bef

Browse files
committed
Merge commit 'f288cf1b4adb180487bcae911e0268f85c62cfc1'
2 parents 2f31d1f + f288cf1 commit bde3bef

File tree

3 files changed

+46
-11
lines changed

3 files changed

+46
-11
lines changed

agrolib/interpolation/interpolation.cpp

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1932,9 +1932,18 @@ bool multipleDetrendingElevationFitting(int elevationPos, std::vector <Crit3DInt
19321932

19331933
interpolationSettings.getProxy(elevationPos)->setRegressionR2(float(R2));
19341934

1935-
std::vector<std::vector<double>> newParameters;
1936-
newParameters.push_back(parameters);
1937-
interpolationSettings.addFittingParameters(newParameters);
1935+
if (! isEqual(R2, NODATA) || ! isVectorNodataOrZero(parameters))
1936+
{
1937+
std::vector<std::vector<double>> newParameters;
1938+
newParameters.push_back(parameters);
1939+
interpolationSettings.addFittingParameters(newParameters);
1940+
}
1941+
else
1942+
{
1943+
Crit3DProxyCombination myCombination = interpolationSettings.getCurrentCombination();
1944+
myCombination.setProxySignificant(elevationPos, false);
1945+
interpolationSettings.setCurrentCombination(myCombination);
1946+
}
19381947

19391948
return true;
19401949
}
@@ -2169,33 +2178,46 @@ void detrendingOtherProxies(int elevationPos, std::vector<Crit3DInterpolationDat
21692178

21702179
std::vector<std::vector<double>> fullParameters = parameters;
21712180
std::vector<std::function<double(double, std::vector<double>&)>> fullFunc = myFunc;
2181+
bool proxyComplete = true;
21722182

21732183
// detrending
21742184
float detrendValue;
2175-
for (unsigned int i = 0; i < myPoints.size(); i++)
2185+
vector<Crit3DInterpolationDataPoint>::iterator it = myPoints.begin();
2186+
while (it != myPoints.end())
21762187
{
21772188
proxyValues.clear();
2189+
proxyComplete = true;
21782190

21792191
for (int pos=0; pos < int(interpolationSettings.getProxyNr()); pos++)
21802192
{
2181-
if (pos != elevationPos && interpolationSettings.getCurrentCombination().isProxyActive(pos) && interpolationSettings.getCurrentCombination().isProxySignificant(pos))
2193+
if (pos != elevationPos && interpolationSettings.getCurrentCombination().isProxyActive(pos) &&
2194+
interpolationSettings.getCurrentCombination().isProxySignificant(pos) &&
2195+
proxyComplete)
21822196
{
2183-
proxyValue = myPoints[i].getProxyValue(pos);
2197+
proxyValue = it->getProxyValue(pos);
21842198
if (! isEqual(proxyValue, NODATA))
21852199
proxyValues.push_back(double(proxyValue));
21862200
else
21872201
{
2188-
parameters.erase(parameters.begin()+proxyValues.size());
2189-
myFunc.erase(myFunc.begin()+proxyValues.size());
2202+
2203+
//parameters.erase(parameters.begin()+proxyValues.size());
2204+
//myFunc.erase(myFunc.begin()+proxyValues.size());
2205+
proxyComplete = false;
21902206
}
21912207
}
21922208
}
21932209

2194-
detrendValue = float(functionSum(myFunc, proxyValues, parameters));
2195-
myPoints[i].value -= detrendValue;
2210+
if (proxyComplete)
2211+
{
2212+
detrendValue = float(functionSum(myFunc, proxyValues, parameters));
2213+
it->value -= detrendValue;
2214+
it++;
2215+
}
2216+
else it = myPoints.erase(it);
21962217

21972218
myFunc = fullFunc;
21982219
parameters = fullParameters;
2220+
21992221
}
22002222
}
22012223

@@ -2657,3 +2679,14 @@ float getFirstIntervalHeightValue(std::vector <Crit3DInterpolationDataPoint> &my
26572679
return getFirstIntervalHeightValue;
26582680
}
26592681

2682+
2683+
bool isVectorNodataOrZero(std::vector <double> myVector)
2684+
{
2685+
bool myFlag = false;
2686+
for (int i = 0; i < myVector.size(); i++)
2687+
{
2688+
if (isEqual(myVector[i], NODATA) || isEqual(myVector[i], 0)) myFlag = true;
2689+
}
2690+
2691+
return myFlag;
2692+
}

agrolib/interpolation/interpolation.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,4 +186,6 @@
186186
std::vector <std::vector<double>> &paramDelta, std::vector <std::vector<double>> &paramFirstGuess,
187187
std::string &errorStr);
188188

189+
bool isVectorNodataOrZero(std::vector <double> myVector);
190+
189191
#endif // INTERPOLATION_H

agrolib/mathFunctions/furtherMathFunctions.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1512,7 +1512,7 @@ namespace interpolation
15121512
parameters[j] = bestParameters[j];
15131513
}
15141514

1515-
if (bestR2 < 0)
1515+
if (bestR2 < 0 && (RMSEindex != NODATA))
15161516
{
15171517
parameters = firstGuessCombinations[RMSEindex];
15181518
fittingMarquardt_nDimension(func,parametersMin,

0 commit comments

Comments
 (0)