Skip to content

Commit

Permalink
Merge commit '051cd175344452f3b7ceb3108f5f2d1e100770fa'
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomei committed Sep 16, 2024
2 parents 2d6b11f + 051cd17 commit 3e705b2
Show file tree
Hide file tree
Showing 13 changed files with 93 additions and 60 deletions.
12 changes: 7 additions & 5 deletions agrolib/interpolation/interpolation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1081,7 +1081,7 @@ void localSelection(vector <Crit3DInterpolationDataPoint> &inputPoints, vector <
float x, float y, Crit3DInterpolationSettings& mySettings)
{
// search more stations to assure min points with all valid proxies
float ratioMinPoints = float(1.3);
float ratioMinPoints = float(1.2);
unsigned minPoints = unsigned(mySettings.getMinPointsLocalDetrending() * ratioMinPoints);
if (inputPoints.size() <= minPoints)
{
Expand All @@ -1094,7 +1094,7 @@ void localSelection(vector <Crit3DInterpolationDataPoint> &inputPoints, vector <
inputPoints[i].distance = gis::computeDistance(x, y, float((inputPoints[i]).point->utm.x), float((inputPoints[i]).point->utm.y));

unsigned int nrValid = 0;
float stepRadius = 1000; // [m]
float stepRadius = 7500; // [m]
float r0 = 0; // [m]
float r1 = stepRadius; // [m]
unsigned int i;
Expand All @@ -1116,6 +1116,8 @@ void localSelection(vector <Crit3DInterpolationDataPoint> &inputPoints, vector <
nrPrimaries++;
}
}
if (nrValid > int(minPoints*0.8))
stepRadius = 1000;
r0 = r1;
r1 += stepRadius;
}
Expand Down Expand Up @@ -2204,10 +2206,10 @@ float interpolate(vector <Crit3DInterpolationDataPoint> &myPoints, Crit3DInterpo
myResult = modifiedShepardIdw(myPoints, mySettings, radius, myX, myY);
}

if (int(myResult) != int(NODATA))
myResult += retrend(myVar, myProxyValues, mySettings);
else
if (int(myResult) == int(NODATA))
return NODATA;
else if (!mySettings->getUseDoNotRetrend())
myResult += retrend(myVar, myProxyValues, mySettings);

if (myVar == precipitation || myVar == dailyPrecipitation)
{
Expand Down
6 changes: 6 additions & 0 deletions agrolib/interpolation/interpolationSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,9 @@ bool Crit3DInterpolationSettings::getUseTD()
bool Crit3DInterpolationSettings::getUseLocalDetrending()
{ return useLocalDetrending;}

bool Crit3DInterpolationSettings::getUseDoNotRetrend()
{ return useDoNotRetrend;}

float Crit3DInterpolationSettings::getMaxHeightInversion()
{ return maxHeightInversion;}

Expand All @@ -528,6 +531,9 @@ void Crit3DInterpolationSettings::setUseTD(bool myValue)
void Crit3DInterpolationSettings::setUseLocalDetrending(bool myValue)
{ useLocalDetrending = myValue;}

void Crit3DInterpolationSettings::setUseDoNotRetrend(bool myValue)
{ useDoNotRetrend = myValue;}

void Crit3DInterpolationSettings::setUseDewPoint(bool myValue)
{ useDewPoint = myValue;}

Expand Down
4 changes: 4 additions & 0 deletions agrolib/interpolation/interpolationSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@
bool useMultipleDetrending;
bool useDewPoint;
bool useInterpolatedTForRH;
bool useDoNotRetrend;
int minPointsLocalDetrending;
bool meteoGridUpscaleFromDem;
aggregationMethod meteoGridAggrMethod;
Expand Down Expand Up @@ -201,6 +202,9 @@
void setUseLocalDetrending(bool myValue);
bool getUseLocalDetrending();

void setUseDoNotRetrend(bool myValue);
bool getUseDoNotRetrend();

void setUseDewPoint(bool myValue);
bool getUseDewPoint();

Expand Down
6 changes: 3 additions & 3 deletions agrolib/interpolation/spatialControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ bool computeResiduals(meteoVariable myVar, Crit3DMeteoPoint* meteoPoints, int nr

if ((interpolatedValue != NODATA) && (myValue != NODATA))
{
meteoPoints[i].residual = interpolatedValue - myValue;
meteoPoints[i].residual = myValue - interpolatedValue;
}
}
}
Expand Down Expand Up @@ -191,7 +191,7 @@ bool computeResidualsLocalDetrending(meteoVariable myVar, Crit3DTime myTime, Cri

if ((interpolatedValue != NODATA) && (myValue != NODATA))
{
meteoPoints[i].residual = interpolatedValue - myValue;
meteoPoints[i].residual = myValue - interpolatedValue;
}
}
}
Expand All @@ -213,7 +213,7 @@ float computeErrorCrossValidation(Crit3DMeteoPoint* myPoints, int nrMeteoPoints)
if (value != NODATA && residual != NODATA)
{
obsValues.push_back(value);
estValues.push_back(value + residual);
estValues.push_back(value - residual);
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions agrolib/mathFunctions/statistics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ namespace statistics
return sigma;
}

double compoundRelativeError(std::vector <float> measured, std::vector <float> simulated)
double NashSutcliffeEfficiency(std::vector <float> measured, std::vector <float> simulated)
{
if (measured.size() != simulated.size()) return NODATA;

Expand All @@ -264,7 +264,7 @@ namespace statistics
if (!isEqual(measured[i], NODATA) && !isEqual(simulated[i], NODATA))
sumError += (simulated[i] - measured[i]) * (simulated[i] - measured[i]);

return sumError / sumDev;
return 1 - (sumError / sumDev);
}

float coefficientOfVariation(float *measured , float *simulated , int nrData)
Expand Down
2 changes: 1 addition & 1 deletion agrolib/mathFunctions/statistics.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
double rootMeanSquareError(std::vector <float> measured, std::vector <float> simulated);
float meanError(std::vector<float> measured , std::vector<float> simulated );
float meanAbsoluteError(std::vector <float> measured, std::vector <float> simulated);
double compoundRelativeError(std::vector <float> measured, std::vector <float> simulated);
double NashSutcliffeEfficiency(std::vector <float> measured, std::vector <float> simulated);
float coefficientOfVariation(float *measured , float *simulated , int nrData);
float weighedMean(float *data , float *weights, int nrData);
float linearInterpolation(float x1, float y1, float x2, float y2, float xx);
Expand Down
26 changes: 13 additions & 13 deletions agrolib/pragaProject/pragaProject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2691,7 +2691,7 @@ bool PragaProject::interpolationCrossValidationPeriod(QDate dateIni, QDate dateF
if (! loadMeteoPointsData(dateIni, dateFin, myFreq == hourly, myFreq == daily, false))
return false;

crossValidationStatistics stats;
Crit3DCrossValidationStatistics stats;
QFile file(filename);
if (! file.open(QIODevice::WriteOnly | QIODevice::Text))
{
Expand All @@ -2715,29 +2715,29 @@ bool PragaProject::interpolationCrossValidationPeriod(QDate dateIni, QDate dateF
{
myTime = getCrit3DTime(myDate, myHour);

if (interpolationCv(myVar, myTime, &stats))
if (interpolationCv(myVar, myTime))
{
cvOutput << getQDateTime(myTime).toString();
cvOutput << "," << stats.getMeanAbsoluteError();
cvOutput << "," << stats.getMeanBiasError();
cvOutput << "," << stats.getRootMeanSquareError();
cvOutput << "," << stats.getCompoundRelativeError();
cvOutput << "," << stats.getR2() << '\n';
cvOutput << "," << crossValidationStatistics.getMeanAbsoluteError();
cvOutput << "," << crossValidationStatistics.getMeanBiasError();
cvOutput << "," << crossValidationStatistics.getRootMeanSquareError();
cvOutput << "," << crossValidationStatistics.getNashSutcliffeEfficiency();
cvOutput << "," << crossValidationStatistics.getR2() << '\n';
}
}
}
else
{
myTime = getCrit3DTime(myDate, 0);

if (interpolationCv(myVar, myTime, &stats))
if (interpolationCv(myVar, myTime))
{
cvOutput << getQDateTime(myTime).date().toString();
cvOutput << "," << stats.getMeanAbsoluteError();
cvOutput << "," << stats.getMeanBiasError();
cvOutput << "," << stats.getRootMeanSquareError();
cvOutput << "," << stats.getCompoundRelativeError();
cvOutput << "," << stats.getR2() << '\n';
cvOutput << "," << crossValidationStatistics.getMeanAbsoluteError();
cvOutput << "," << crossValidationStatistics.getMeanBiasError();
cvOutput << "," << crossValidationStatistics.getRootMeanSquareError();
cvOutput << "," << crossValidationStatistics.getNashSutcliffeEfficiency();
cvOutput << "," << crossValidationStatistics.getR2() << '\n';
}
}

Expand Down
6 changes: 6 additions & 0 deletions agrolib/project/dialogInterpolation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,9 @@ DialogInterpolation::DialogInterpolation(Project *myProject)

connect(localDetrendingEdit, SIGNAL(stateChanged(int)), this, SLOT(localDetrendingChanged(int)));

doNotRetrendEdit = new QCheckBox(tr("do not retrend"));
doNotRetrendEdit->setChecked(_interpolationSettings->getUseDoNotRetrend());

QLabel *labelMinPointsLocalDetrendingEdit = new QLabel(tr("minimum points for local detrending"));
QIntValidator *intValMinPoints = new QIntValidator(1, 1000, this);
minPointsLocalDetrendingEdit.setFixedWidth(30);
Expand All @@ -135,6 +138,7 @@ DialogInterpolation::DialogInterpolation(Project *myProject)
layoutDetrending->addWidget(&minPointsLocalDetrendingEdit);

layoutDetrending->addWidget(localDetrendingEdit);
layoutDetrending->addWidget(doNotRetrendEdit);

QLabel *labelElFunction = new QLabel(tr("fitting function for elevation"));
layoutDetrending->addWidget(labelElFunction);
Expand Down Expand Up @@ -201,6 +205,7 @@ DialogInterpolation::DialogInterpolation(Project *myProject)
multipleDetrendingChanged(multipleDetrendingEdit->checkState());
localDetrendingChanged(localDetrendingEdit->checkState());


exec();
}

Expand Down Expand Up @@ -300,6 +305,7 @@ void DialogInterpolation::accept()
_interpolationSettings->setUseLapseRateCode(lapseRateCodeEdit->isChecked());
_interpolationSettings->setUseBestDetrending(optimalDetrendingEdit->isChecked());
_interpolationSettings->setUseMultipleDetrending(multipleDetrendingEdit->isChecked());
_interpolationSettings->setUseDoNotRetrend(doNotRetrendEdit->isChecked());
_interpolationSettings->setUseThermalInversion(thermalInversionEdit->isChecked());
_interpolationSettings->setUseDewPoint(useDewPointEdit->isChecked());
_interpolationSettings->setUseInterpolatedTForRH((useInterpolTForRH->isChecked()));
Expand Down
1 change: 1 addition & 0 deletions agrolib/project/dialogInterpolation.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
QCheckBox* multipleDetrendingEdit;
QCheckBox* topographicDistanceEdit;
QCheckBox* localDetrendingEdit;
QCheckBox* doNotRetrendEdit;
QCheckBox* upscaleFromDemEdit;
QCheckBox* useDewPointEdit;
QCheckBox* useInterpolTForRH;
Expand Down
38 changes: 19 additions & 19 deletions agrolib/project/interpolationCmd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,86 +9,86 @@
#include "interpolationSettings.h"


float crossValidationStatistics::getMeanAbsoluteError() const
float Crit3DCrossValidationStatistics::getMeanAbsoluteError() const
{
return meanAbsoluteError;
}

void crossValidationStatistics::setMeanAbsoluteError(float newMeanAbsoluteError)
void Crit3DCrossValidationStatistics::setMeanAbsoluteError(float newMeanAbsoluteError)
{
meanAbsoluteError = newMeanAbsoluteError;
}

float crossValidationStatistics::getRootMeanSquareError() const
float Crit3DCrossValidationStatistics::getRootMeanSquareError() const
{
return rootMeanSquareError;
}

void crossValidationStatistics::setRootMeanSquareError(float newRootMeanSquareError)
void Crit3DCrossValidationStatistics::setRootMeanSquareError(float newRootMeanSquareError)
{
rootMeanSquareError = newRootMeanSquareError;
}

float crossValidationStatistics::getCompoundRelativeError() const
float Crit3DCrossValidationStatistics::getNashSutcliffeEfficiency() const
{
return compoundRelativeError;
return NashSutcliffeEfficiency;
}

void crossValidationStatistics::setCompoundRelativeError(float newCompoundRelativeError)
void Crit3DCrossValidationStatistics::setNashSutcliffeEfficiency(float newNashSutcliffeEfficiency)
{
compoundRelativeError = newCompoundRelativeError;
NashSutcliffeEfficiency = newNashSutcliffeEfficiency;
}

float crossValidationStatistics::getMeanBiasError() const
float Crit3DCrossValidationStatistics::getMeanBiasError() const
{
return meanBiasError;
}

void crossValidationStatistics::setMeanBiasError(float newMeanBiasError)
void Crit3DCrossValidationStatistics::setMeanBiasError(float newMeanBiasError)
{
meanBiasError = newMeanBiasError;
}

const Crit3DTime &crossValidationStatistics::getRefTime() const
const Crit3DTime &Crit3DCrossValidationStatistics::getRefTime() const
{
return refTime;
}

void crossValidationStatistics::setRefTime(const Crit3DTime &newRefTime)
void Crit3DCrossValidationStatistics::setRefTime(const Crit3DTime &newRefTime)
{
refTime = newRefTime;
}

const Crit3DProxyCombination &crossValidationStatistics::getProxyCombination() const
const Crit3DProxyCombination &Crit3DCrossValidationStatistics::getProxyCombination() const
{
return proxyCombination;
}

void crossValidationStatistics::setProxyCombination(const Crit3DProxyCombination &newProxyCombination)
void Crit3DCrossValidationStatistics::setProxyCombination(const Crit3DProxyCombination &newProxyCombination)
{
proxyCombination = newProxyCombination;
}

float crossValidationStatistics::getR2() const
float Crit3DCrossValidationStatistics::getR2() const
{
return R2;
}

void crossValidationStatistics::setR2(float newR2)
void Crit3DCrossValidationStatistics::setR2(float newR2)
{
R2 = newR2;
}

crossValidationStatistics::crossValidationStatistics()
Crit3DCrossValidationStatistics::Crit3DCrossValidationStatistics()
{
initialize();
}

void crossValidationStatistics::initialize()
void Crit3DCrossValidationStatistics::initialize()
{
meanAbsoluteError = NODATA;
rootMeanSquareError = NODATA;
compoundRelativeError = NODATA;
NashSutcliffeEfficiency = NODATA;
meanBiasError = NODATA;
R2 = NODATA;
}
Expand Down
10 changes: 5 additions & 5 deletions agrolib/project/interpolationCmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,18 @@

class QDate;

class crossValidationStatistics {
class Crit3DCrossValidationStatistics {
private:
Crit3DTime refTime;
Crit3DProxyCombination proxyCombination;
float meanAbsoluteError;
float rootMeanSquareError;
float compoundRelativeError;
float NashSutcliffeEfficiency;
float meanBiasError;
float R2;

public:
crossValidationStatistics();
Crit3DCrossValidationStatistics();
void initialize();

const Crit3DProxyCombination &getProxyCombination() const;
Expand All @@ -39,8 +39,8 @@
void setMeanAbsoluteError(float newMeanAbsoluteError);
float getRootMeanSquareError() const;
void setRootMeanSquareError(float newRootMeanSquareError);
float getCompoundRelativeError() const;
void setCompoundRelativeError(float newCompoundRelativeError);
float getNashSutcliffeEfficiency() const;
void setNashSutcliffeEfficiency(float newNashSutcliffeEfficiency);
float getMeanBiasError() const;
void setMeanBiasError(float newMeanBiasError);
const Crit3DTime &getRefTime() const;
Expand Down
Loading

0 comments on commit 3e705b2

Please sign in to comment.