Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/ARPA-SIMC/PRAGA
Browse files Browse the repository at this point in the history
  • Loading branch information
Antonio Volta authored and Antonio Volta committed Jan 22, 2024
2 parents 982819b + 0e0d064 commit 901bc1f
Show file tree
Hide file tree
Showing 7 changed files with 114 additions and 43 deletions.
28 changes: 14 additions & 14 deletions agrolib/climate/dbClimate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ bool saveDailyElab(QSqlDatabase db, QString *myError, QString id, std::vector<fl
QSqlQuery qry(db);
if (db.driverName() == "QSQLITE")
{
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_daily` (days INTEGER, id_point TEXT, elab TEXT, value REAL, PRIMARY KEY(days,id_point,elab));");
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_daily` (TimeIndex INTEGER, id_point TEXT, elab TEXT, value REAL, PRIMARY KEY(TimeIndex,id_point,elab));");
if( !qry.exec() )
{
*myError = qry.lastError().text();
Expand All @@ -22,14 +22,14 @@ bool saveDailyElab(QSqlDatabase db, QString *myError, QString id, std::vector<fl
}
else if (db.driverName() == "QMYSQL")
{
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_daily` (days smallint(5), id_point varchar(20), elab varchar(100), value float(6,1), PRIMARY KEY(days,id_point,elab) );");
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_daily` (TimeIndex smallint(5), id_point varchar(10), elab varchar(80), value float(6,1), PRIMARY KEY(TimeIndex,id_point,elab) );");
if( !qry.exec() )
{
*myError = qry.lastError().text();
return false;
}
}
qry.prepare( "REPLACE INTO `climate_daily` (days, id_point, elab, value)"
qry.prepare( "REPLACE INTO `climate_daily` (TimeIndex, id_point, elab, value)"
" VALUES (?, ?, ?, ?)" );


Expand Down Expand Up @@ -161,7 +161,7 @@ bool saveDecadalElab(QSqlDatabase db, QString *myError, QString id, std::vector<
QSqlQuery qry(db);
if (db.driverName() == "QSQLITE")
{
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_decadal` (decades INTEGER, id_point TEXT, elab TEXT, value REAL, PRIMARY KEY(decades,id_point,elab));");
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_decadal` (TimeIndex INTEGER, id_point TEXT, elab TEXT, value REAL, PRIMARY KEY(TimeIndex,id_point,elab));");
if( !qry.exec() )
{
*myError = qry.lastError().text();
Expand All @@ -171,14 +171,14 @@ bool saveDecadalElab(QSqlDatabase db, QString *myError, QString id, std::vector<
}
else if (db.driverName() == "QMYSQL")
{
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_decadal` (decades smallint(5), id_point varchar(20), elab varchar(100), value float(6,1), PRIMARY KEY(decades,id_point,elab) );");
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_decadal` (TimeIndex smallint(5), id_point varchar(10), elab varchar(80), value float(6,1), PRIMARY KEY(TimeIndex,id_point,elab) );");
if( !qry.exec() )
{
*myError = qry.lastError().text();
return false;
}
}
qry.prepare( "REPLACE INTO `climate_decadal` (decades, id_point, elab, value)"
qry.prepare( "REPLACE INTO `climate_decadal` (TimeIndex, id_point, elab, value)"
" VALUES (?, ?, ?, ?)" );

for (unsigned int i = 0; i < allResults.size(); i++)
Expand All @@ -203,7 +203,7 @@ bool saveMonthlyElab(QSqlDatabase db, QString *myError, QString id, std::vector<
QSqlQuery qry(db);
if (db.driverName() == "QSQLITE")
{
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_monthly` (months INTEGER, id_point TEXT, elab TEXT, value REAL, PRIMARY KEY(months,id_point,elab));");
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_monthly` (TimeIndex INTEGER, id_point TEXT, elab TEXT, value REAL, PRIMARY KEY(TimeIndex,id_point,elab));");
if( !qry.exec() )
{
*myError = qry.lastError().text();
Expand All @@ -213,14 +213,14 @@ bool saveMonthlyElab(QSqlDatabase db, QString *myError, QString id, std::vector<
}
else if (db.driverName() == "QMYSQL")
{
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_monthly` (months smallint(5), id_point varchar(20), elab varchar(100), value float(6,1), PRIMARY KEY(months,id_point,elab) );");
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_monthly` (TimeIndex smallint(5), id_point varchar(10), elab varchar(80), value float(6,1), PRIMARY KEY(TimeIndex,id_point,elab) );");
if( !qry.exec() )
{
*myError = qry.lastError().text();
return false;
}
}
qry.prepare( "REPLACE INTO `climate_monthly` (months, id_point, elab, value)"
qry.prepare( "REPLACE INTO `climate_monthly` (TimeIndex, id_point, elab, value)"
" VALUES (?, ?, ?, ?)" );

for (unsigned int i = 0; i < allResults.size(); i++)
Expand All @@ -245,7 +245,7 @@ bool saveSeasonalElab(QSqlDatabase db, QString *myError, QString id, std::vector
QSqlQuery qry(db);
if (db.driverName() == "QSQLITE")
{
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_seasonal` (season INTEGER, id_point TEXT, elab TEXT, value REAL, PRIMARY KEY(season,id_point,elab));");
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_seasonal` (TimeIndex INTEGER, id_point TEXT, elab TEXT, value REAL, PRIMARY KEY(TimeIndex,id_point,elab));");
if( !qry.exec() )
{
*myError = qry.lastError().text();
Expand All @@ -255,14 +255,14 @@ bool saveSeasonalElab(QSqlDatabase db, QString *myError, QString id, std::vector
}
else if (db.driverName() == "QMYSQL")
{
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_seasonal` (season smallint(5), id_point varchar(20), elab varchar(100), value float(6,1), PRIMARY KEY(season,id_point,elab) );");
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_seasonal` (TimeIndex smallint(5), id_point varchar(10), elab varchar(80), value float(6,1), PRIMARY KEY(TimeIndex,id_point,elab) );");
if( !qry.exec() )
{
*myError = qry.lastError().text();
return false;
}
}
qry.prepare( "REPLACE INTO `climate_seasonal` (season, id_point, elab, value)"
qry.prepare( "REPLACE INTO `climate_seasonal` (TimeIndex, id_point, elab, value)"
" VALUES (?, ?, ?,?)" );

for (unsigned int i = 0; i < allResults.size(); i++)
Expand Down Expand Up @@ -297,7 +297,7 @@ bool saveAnnualElab(QSqlDatabase db, QString *myError, QString id, float result,
}
else if (db.driverName() == "QMYSQL")
{
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_annual` (id_point varchar(20), elab varchar(100), value float(6,1), PRIMARY KEY(id_point,elab) );");
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_annual` (id_point varchar(10), elab varchar(80), value float(6,1), PRIMARY KEY(id_point,elab) );");
if( !qry.exec() )
{
*myError = qry.lastError().text();
Expand Down Expand Up @@ -335,7 +335,7 @@ bool saveGenericElab(QSqlDatabase db, QString *myError, QString id, float result
}
else if (db.driverName() == "QMYSQL")
{
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_generic` (id_point varchar(20), elab varchar(100), value float(6,1), PRIMARY KEY(id_point,elab) );");
qry.prepare("CREATE TABLE IF NOT EXISTS `climate_generic` (id_point varchar(10), elab varchar(80), value float(6,1), PRIMARY KEY(id_point,elab) );");
if( !qry.exec() )
{
*myError = qry.lastError().text();
Expand Down
24 changes: 24 additions & 0 deletions agrolib/dbMeteoGrid/dbMeteoGrid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3466,6 +3466,30 @@ bool Crit3DMeteoGridDbHandler::saveCellCurrentGridHourlyFF(QString& errorStr, QS
}


bool Crit3DMeteoGridDbHandler::isDaily()
{
if ( ! _firstDailyDate.isValid() || _firstDailyDate.year() == 1800
|| ! _lastDailyDate.isValid() || _lastDailyDate.year() == 1800 )
{
return false;
}

return true;
}


bool Crit3DMeteoGridDbHandler::isHourly()
{
if ( ! _firstHourlyDate.isValid() || _firstHourlyDate.year() == 1800
|| ! _lastHourlyDate.isValid() || _lastHourlyDate.year() == 1800 )
{
return false;
}

return true;
}


QDate Crit3DMeteoGridDbHandler::getFirstDailyDate() const
{
if (_firstDailyDate.year() == 1800)
Expand Down
3 changes: 3 additions & 0 deletions agrolib/dbMeteoGrid/dbMeteoGrid.h
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,9 @@
QDate getFirsMonthlytDate() const;
QDate getLastMonthlyDate() const;

bool isDaily();
bool isHourly();

bool saveLogProcedures(QString *myError, QString nameProc, QDate date);

private:
Expand Down
41 changes: 27 additions & 14 deletions agrolib/meteoWidget/meteoWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -382,14 +382,20 @@ Crit3DMeteoWidget::~Crit3DMeteoWidget()
}


void Crit3DMeteoWidget::setDateInterval(QDate first, QDate last)
void Crit3DMeteoWidget::setDateIntervalDaily(QDate firstDate, QDate lastDate)
{
firstDailyDate = first;
firstHourlyDate = first;
lastDailyDate = last;
lastHourlyDate = last;
firstDailyDate = firstDate;
lastDailyDate = lastDate;
}


void Crit3DMeteoWidget::setDateIntervalHourly(QDate firstDate, QDate lastDate)
{
firstHourlyDate = firstDate;
lastHourlyDate = lastDate;
}


void Crit3DMeteoWidget::draw(Crit3DMeteoPoint mp, bool isAppend)
{
if (! isInitialized) return;
Expand Down Expand Up @@ -556,11 +562,11 @@ void Crit3DMeteoWidget::resetValues()
QList<QString> elementsName = pointName.split(' ');
if (elementsName.size() == 1)
{
pointName = elementsName[0].left(8);
pointName = elementsName[0].left(10);
}
else
{
pointName = elementsName[0].left(4)+elementsName[elementsName.size()-1].left(4);
pointName = elementsName[0].left(5) + elementsName[elementsName.size()-1].left(5);
}
line->setName(QString::fromStdString(meteoPoints[mp].id)+"_"+pointName+"_"+nameLines[i]);
//QColor lineColor = colorLine[i];
Expand Down Expand Up @@ -597,11 +603,11 @@ void Crit3DMeteoWidget::resetValues()
QList<QString> elementsName = pointName.split(' ');
if (elementsName.size() == 1)
{
pointName = elementsName[0].left(8);
pointName = elementsName[0].left(10);
}
else
{
pointName = elementsName[0].left(4)+elementsName[elementsName.size()-1].left(4);
pointName = elementsName[0].left(5) + elementsName[elementsName.size()-1].left(5);
}
name = QString::fromStdString(meteoPoints[mp].id)+"_"+pointName+"_"+nameBar[i];
QBarSet* set = new QBarSet(name);
Expand Down Expand Up @@ -1175,6 +1181,18 @@ void Crit3DMeteoWidget::drawHourlyVar()
{
if (! isInitialized) return;

categories.clear();
categoriesVirtual.clear();
m_tooltip = new Callout(chart);
m_tooltip->hide();

if (! firstHourlyDate.isValid() || ! lastHourlyDate.isValid()
|| firstHourlyDate.year() == 1800 || lastHourlyDate.year() == 1800)
{
// nothing to draw
return;
}

FormInfo formInfo;
formInfo.showInfo("Draw hourly data...");

Expand All @@ -1188,11 +1206,6 @@ void Crit3DMeteoWidget::drawHourlyVar()
int nrDays = firstDate->date().daysTo(lastDate->date())+1;
int nrValues = nrDays*24;

categories.clear();
categoriesVirtual.clear();
m_tooltip = new Callout(chart);
m_tooltip->hide();

// virtual x axis
int nrIntervals;
if (nrValues <= 36)
Expand Down
31 changes: 21 additions & 10 deletions agrolib/meteoWidget/meteoWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include <QtWidgets>
#include <QtCharts>
#include "meteo.h"
#include "meteoPoint.h"
#include "callout.h"

Expand All @@ -15,13 +16,19 @@
public:
Crit3DMeteoWidget(bool isGrid, QString projectPath, Crit3DMeteoSettings* meteoSettings_);
~Crit3DMeteoWidget() override;

int getMeteoWidgetID() const;
void setMeteoWidgetID(int value);

void setCurrentDate(QDate myDate);
void setDateInterval(QDate date0, QDate date1);
void draw(Crit3DMeteoPoint mp, bool isAppend);
void setDateIntervalDaily(QDate firstDate, QDate lastDate);
void setDateIntervalHourly(QDate firstDate, QDate lastDate);

void addMeteoPointsEnsemble(Crit3DMeteoPoint mp);

void draw(Crit3DMeteoPoint mp, bool isAppend);
void drawEnsemble();

void resetValues();
void resetEnsembleValues();
void drawDailyVar();
Expand Down Expand Up @@ -54,7 +61,18 @@
bool isEnsemble;
bool isInitialized;
int nrMembers;

QVector<Crit3DMeteoPoint> meteoPoints;
QVector<Crit3DMeteoPoint> meteoPointsEnsemble;
Crit3DMeteoSettings* meteoSettings;

frequencyType currentFreq;
QDate firstDailyDate;
QDate lastDailyDate;
QDate firstHourlyDate;
QDate lastHourlyDate;
QDate currentDate;

QPushButton *addVarButton;
QPushButton *dailyButton;
QPushButton *hourlyButton;
Expand Down Expand Up @@ -87,14 +105,7 @@
QVector<QVector<QBarSet*>> setVector;
QList<QString> categories;
QList<QString> categoriesVirtual;
QVector<Crit3DMeteoPoint> meteoPoints;
QVector<Crit3DMeteoPoint> meteoPointsEnsemble;
frequencyType currentFreq;
QDate firstDailyDate;
QDate lastDailyDate;
QDate firstHourlyDate;
QDate lastHourlyDate;
QDate currentDate;

bool isLine;
bool isBar;
Callout *m_tooltip;
Expand Down
25 changes: 22 additions & 3 deletions agrolib/project/project.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3172,6 +3172,7 @@ void Project::importHourlyMeteoData(const QString& csvFileName, bool importAllFi
}
}


void Project::showMeteoWidgetPoint(std::string idMeteoPoint, std::string namePoint, bool isAppend)
{
logInfoGUI("Loading data...");
Expand Down Expand Up @@ -3243,7 +3244,10 @@ void Project::showMeteoWidgetPoint(std::string idMeteoPoint, std::string namePoi
meteoPointsDbHandler->loadDailyData(getCrit3DDate(firstDaily), getCrit3DDate(lastDaily), &mp);
meteoPointsDbHandler->loadHourlyData(getCrit3DDate(firstHourly.date()), getCrit3DDate(lastHourly.date()), &mp);

meteoWidgetPoint->setDateInterval(firstDate, lastDate);
// TODO add check on hourly
meteoWidgetPoint->setDateIntervalDaily(firstDate, lastDate);
meteoWidgetPoint->setDateIntervalHourly(firstDate, lastDate);

meteoWidgetPoint->setCurrentDate(this->currentDate);
meteoWidgetPoint->draw(mp, isAppend);
}
Expand Down Expand Up @@ -3327,7 +3331,14 @@ void Project::showMeteoWidgetGrid(std::string idCell, bool isAppend)
int nMembers = meteoGridDbHandler->gridStructure().nrMembers();
if (meteoGridDbHandler->meteoGrid()->findMeteoPointFromId(&row,&col,idCell))
{
meteoWidgetGrid->setDateInterval(firstDate, lastDate);
if (meteoGridDbHandler->isDaily())
{
meteoWidgetGrid->setDateIntervalDaily(firstDate, lastDate);
}
if (meteoGridDbHandler->isHourly())
{
meteoWidgetGrid->setDateIntervalHourly(firstDate, lastDate);
}
}
else
{
Expand Down Expand Up @@ -3359,7 +3370,15 @@ void Project::showMeteoWidgetGrid(std::string idCell, bool isAppend)
unsigned col;
if (meteoGridDbHandler->meteoGrid()->findMeteoPointFromId(&row,&col,idCell))
{
meteoWidgetGrid->setDateInterval(firstDate, lastDate);
if (meteoGridDbHandler->isDaily())
{
meteoWidgetGrid->setDateIntervalDaily(firstDate, lastDate);
}
if (meteoGridDbHandler->isHourly())
{
meteoWidgetGrid->setDateIntervalHourly(firstDate, lastDate);
}

meteoWidgetGrid->draw(meteoGridDbHandler->meteoGrid()->meteoPoint(row,col), isAppend);
}
}
Expand Down
5 changes: 3 additions & 2 deletions agrolib/proxyWidget/proxyWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Crit3DProxyWidget::Crit3DProxyWidget(Crit3DInterpolationSettings* interpolationS
QHBoxLayout *selectionOptionEditLayout = new QHBoxLayout;

detrended.setText("Detrended data");
climatologicalLR.setText("Climatological lapse rate");
climatologicalLR.setText("Climate lapserate");
modelLR.setText("Model lapse rate");

QLabel *r2Label = new QLabel(tr("R2"));
Expand Down Expand Up @@ -103,7 +103,8 @@ Crit3DProxyWidget::Crit3DProxyWidget(Crit3DInterpolationSettings* interpolationS
}
myVar = getKeyMeteoVarMeteoMap(MapHourlyMeteoVarToString, comboVariable.currentText().toStdString());
}
comboVariable.setSizeAdjustPolicy(QComboBox::AdjustToContents);
//comboVariable.setSizeAdjustPolicy(QComboBox::AdjustToContents);
comboVariable.setMinimumWidth(100);

selectionChartLayout->addWidget(variableLabel);
selectionChartLayout->addWidget(&comboVariable);
Expand Down

0 comments on commit 901bc1f

Please sign in to comment.