Files
matlab-python/ATD/report_PL.m

370 lines
19 KiB
Matlab
Executable File

function [GI_LivelloFaldaPL,GI_ProfPL,GI_DatePL,PL_A,PL_D,ATTIVA,FIG,FIG_ENG] = report_PL(...
rPL,rTL,rIPL,m,NodoPiezoLink,PL_A,PL_D,toolrif,unitrif,datarif,Font_caption,Font_tools,toolrifID,...
siteID,DT,DT_ENG,FIG,FIG_ENG,br,status,ATTIVA,activeEN,conn,FileName)
fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'report_PL function started';
fprintf(fileID,fmt,text);
import mlreportgen.dom.*
import mlreportgen.report.*
% Make sure DOM is compilable
makeDOMCompilable()
GI_LivelloFaldaPL = [];
GI_ProfPL = [];
GI_DatePL = [];
titolo = 1;
check = 0;
NODATA(m,1) = 0;
while check == 0
if status(m,1) == 1
if ATTIVA == 1
testo = Paragraph('Catena non ancora installata o inattiva.');
ATTIVA = 0;
add(DT,testo);
if activeEN == 1
testo = Paragraph('Array not installed or inactive.');
add(DT_ENG,testo);
end
misuraPL = cell(1,3);
for p = 1:rPL(m,1)
NodeNum = num2str(NodoPiezoLink(p,m));
comando = ['select num, depth, measurment from nodes where tool_id = ''' num2str(cell2mat(toolrifID))...
''' and num = ''' NodeNum ''' and nodetype_id = 2 '];
curs = exec(conn,comando);
curs = fetch(curs);
Leggo = curs.Data;
misuraPL(1,p) = Leggo(1,3); % unità di misura del piezometro
% pressione assoluta vs relativa
PL_A(p) = 0;
PL_D(p) = 0;
if strcmp(misuraPL(1,p),'VW kPa') == 1 || strcmp(misuraPL(1,p),'VW kg/cm2') == 1
PL_A(p) = PL_A(p)+1;
else
PL_D(p) = PL_D(p)+1;
end
end
end
check = 1;
elseif status(m,1) == 3
if ATTIVA == 1
testo = Paragraph(['Monitoraggio completato. Invitiamo a visitare la '...
'piattaforma web per la visione dei dati storici.']);
ATTIVA = 0;
add(DT,testo);
if activeEN == 1
testo = Paragraph(['Monitoring completed. Please log into the web-based platform '...
'to access the complete dataset.']);
add(DT_ENG,testo);
end
for p = 1:rPL(m,1)
NodeNum = num2str(NodoPiezoLink(p,m));
comando = ['select num, depth, measurment from nodes where tool_id = ''' num2str(cell2mat(toolrifID))...
''' and num = ''' NodeNum ''' and nodetype_id = 2 '];
curs = exec(conn,comando);
curs = fetch(curs);
Leggo = curs.Data;
misuraPL(1,p) = Leggo(1,3); % unità di misura del piezometro
% pressione assoluta vs relativa
PL_A(p) = 0;
PL_D(p) = 0;
if strcmp(misuraPL(1,p),'VW kPa') == 1 || strcmp(misuraPL(1,p),'VW kg/cm2') == 1
PL_A(p) = PL_A(p)+1;
else
PL_D(p) = PL_D(p)+1;
end
end
end
check = 1;
else
SE = Section();
if activeEN == 1
SE_ENG = Section();
end
for p = 1:rPL(m,1)
NodeNum = num2str(NodoPiezoLink(p,m));
comando = ['select EventDate, EventTime, water_level, pressure from ElabDataView where EventDate >= ''' ...
datarif ''' and ToolNameID = ''' char(toolrif) ''' and UnitName = ''' char(unitrif) ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Dati = curs.Data;
comando = ['select num, depth, measurment from nodes where tool_id = ''' num2str(cell2mat(toolrifID))...
''' and num = ''' NodeNum ''' and nodetype_id = 2 '];
curs = exec(conn,comando);
curs = fetch(curs);
Leggo = curs.Data;
% Modifico il formato di data e ora
[rD,rC] = size(Dati);
[~,PZc] = size(Leggo);
if rC ~= 1 && PZc > 1
T = [cell2mat(Dati(:,1)) repmat(' ', [rD,1]) cell2mat(Dati(:,2))];
Date = datenum(T); % Data
if p == 1 % Il primo lo scrivo e creo la variabile di controllo
check = 1;
else
[rS,~] = size(waterlevel);
if rD ~= rS
NODATA(m,1) = 2;
check = 0;
break
else
check = 1;
end
end
waterlevel(:,p) = cell2mat(Dati(:,3)); % altezza falda
pressure(:,p) = cell2mat(Dati(:,4)); % pressione
comando = ['select depth from nodes where tool_id = ''' num2str(cell2mat(toolrifID))...
''' and num = ''' NodeNum ''' and nodetype_ID = 2 '];
curs = exec(conn,comando);
curs = fetch(curs);
ProfPL(1,p) = curs.Data; % profondità piezometro
misuraPL(1,p) = Leggo(1,3); % unità di misura del piezometro
% pressione assoluta vs relativa
tipopressione = 'assoluta ';
if activeEN == 1
tipopressione = 'absolute ';
end
PL_A(p) = 0;
PL_D(p) = 0;
if strcmp(misuraPL(1,p),'VW kPa') == 1 || strcmp(misuraPL(1,p),'VW kg/cm2') == 1
tipopressione = 'relativa ';
if activeEN == 1
tipopressione = 'relative ';
end
PL_A(p) = PL_A(p)+1;
else
PL_D(p) = PL_D(p)+1;
end
else
NODATA(m,1) = 1;
check = 1;
end
if NODATA(m,1) == 0
% grafico livello falda e pressione interstiziale NELL'ULTIMO MESE
figure(3)
plot(Date,waterlevel(:,p),'LineWidth',1.5);
yyaxis left
ylabel(['Profondit' char(224) ' [m da p.c.]']);
var = max(abs(waterlevel(:,p)-waterlevel(1,p)));
media = mean(waterlevel(:,p));
if var < 0.7
ylim([media-0.5 media+0.5]);
end
title(['Livello idrico e pressione ' tipopressione ' - Sensore a ' num2str(cell2mat(ProfPL(1,p))) ' m da p.c.']);
xlabel('Data [gg/mm/aaaa]');
hold on
yyaxis right
porepress = plot(Date,pressure(:,p),'--');
ylabel(['Pressione ' tipopressione ' [Pa]']);
xlim([Date(1)-1 Date(end)+1]);
h = gca;
h.XAxis.MinorTick = 'on';
datetick('x','dd/mm/yyyy','keepticks','keeplimits');
xtickangle(20);
grid on
grid minor
TempName = char(strcat('Report',siteID,'-', char(toolrif),'-Piezo',num2str(cell2mat(ProfPL(1,p))), '.png'));
saveas(porepress,TempName);
ChartPL = Image(TempName);
if rPL(p,1) == 1
ChartPL.Style = {Height('8cm'),HAlign('center')};
elseif rPL(p,1) == 2
ChartPL.Style = {Height('7.5cm'),HAlign('center')};
else
ChartPL.Style = {Height('8cm'),HAlign('center')};
end
if rPL(p,1) == 2
ChartPL_cap = Paragraph(['Fig. ' num2str(FIG) ' - Livello idrico e pressione ' tipopressione...
' registrati dal piezometro posto alla profondit' ...
char(224) ' di ' num2str(cell2mat(ProfPL(1,p))) ' metri']);
ChartPL_cap.Style = {HAlign('center'),FontSize(Font_caption),Italic(1),Color('midnightblue')};
else
ChartPL_cap = Paragraph(['Fig. ' num2str(FIG) ' - Livello idrico e pressione ' tipopressione...
' registrati durante il periodo temporale di riferimento dal piezometro posto alla profondit' ...
char(224) ' di ' num2str(cell2mat(ProfPL(1,p))) ' metri']);
ChartPL_cap.Style = {HAlign('justify'),FontSize(Font_caption),Italic(1),Color('midnightblue')};
end
FIG = FIG+1;
if titolo == 1
sezPiezo = Heading3('Piezo Link');
sezPiezo.Style = {OuterMargin('0in','0in','0.15in','0in'),FontSize(Font_tools),Bold(1),Italic(1)};
SE.Title = sezPiezo;
add(DT,sezPiezo);
titolo = 0;
end
escludi2 = 0;
if rPL(p,1) == 2
if p == 1
testo = Paragraph(['I grafici seguenti riportano i valori di livello idrico e pressione ' tipopressione...
' misurati nel corso del periodo di riferimento dai piezometri presenti nella catena. '...
'Il sensore situato a una profondit' char(224) ' di ' ...
num2str(cell2mat(ProfPL(1,p))) ' m da p.c. ha rilevato un''altezza '...
'di falda massima pari a ' num2str(round(max(waterlevel(:,p)),2), '%0.2f') ' m ed un valore minimo pari a '...
num2str(round(min(waterlevel(:,p)),2), '%0.2f') ' m, per una variazione massima di '...
num2str(round(max(waterlevel(:,p)),2)-round(min(waterlevel(:,p)),2),'%0.2f') ' m.']);
testo.HAlign = 'justify';
escludi2 = 1;
add(DT,testo);
elseif p == 2
testo = Paragraph(['Il sensore situato a una profondit' char(224) ' di ' ...
num2str(cell2mat(ProfPL(1,p))) ' m da p.c. ha rilevato un''altezza '...
'di falda massima pari a ' num2str(round(max(waterlevel(:,p)),2), '%0.2f') ' m ed un valore minimo pari a '...
num2str(round(min(waterlevel(:,p)),2), '%0.2f') ' m, per una variazione massima di '...
num2str(round(max(waterlevel(:,p)),2)-round(min(waterlevel(:,p)),2),'%0.2f') ' m.']);
testo.HAlign = 'justify';
escludi2 = 1;
add(DT,testo);
end
elseif p == 1
testo = Paragraph(['I grafici seguenti riportano i valori di livello idrico e pressione ' tipopressione...
' misurati nel corso del periodo di riferimento dai piezometri presenti nella catena.']);
testo.HAlign = 'justify';
add(DT,testo);
end
if escludi2 == 0
testo2 = Paragraph(['Il sensore situato a una profondit' char(224) ' di ' ...
num2str(cell2mat(ProfPL(1,p))) ' m da p.c. ha rilevato un''altezza '...
'di falda massima pari a ' num2str(round(max(waterlevel(:,p)),2), '%0.2f') ' m ed un valore minimo pari a '...
num2str(round(min(waterlevel(:,p)),2), '%0.2f') ' m, per una variazione massima di '...
num2str(round(max(waterlevel(:,p)),2)-round(min(waterlevel(:,p)),2),'%0.2f') ' m.']);
testo2.HAlign = 'justify';
add(DT,testo2);
end
add(DT,ChartPL);
add(DT,ChartPL_cap);
if p == rPL(m,1) || p == 1 && rPL(m,1) > 2 || rTL(m,1) == 0 && p == 1 && rIPL(m,1) == 0 && p == 1
add(DT,br);
end
close(figure(3));
% Inglese
if activeEN == 1
% grafico livello falda e pressione interstiziale NELL'ULTIMO MESE
figure(3)
plot(Date,waterlevel(:,p),'LineWidth',1.5);
yyaxis left
ylabel('Depth [m b.g.l.]');
if var < 1
ylim([media-0.5 media+0.5]);
end
title(['Water level and ' tipopressione ' pressure - Sensor at ' ...
num2str(cell2mat(ProfPL(1,p))) ' m of depth']);
xlabel('Date [dd/mm/yyyy]');
hold on
yyaxis right
porepress = plot(Date,pressure(:,p),'--');
ylabel([tipopressione ' pressure [Pa]']);
xlim([Date(1)-1 Date(end)+1]);
h = gca;
h.XAxis.MinorTick = 'on';
datetick('x','dd/mm/yyyy','keepticks','keeplimits');
xtickangle(20);
grid on
grid minor
TempName = char(strcat('Report',siteID,'-', char(toolrif),'-Piezo',num2str(cell2mat(ProfPL(1,p))), '_ENG.png'));
saveas(porepress,TempName);
ChartPL = Image(TempName);
if rPL(p,1) == 1
ChartPL.Style = {Height('8cm'),HAlign('center')};
elseif rPL(p,1) == 2
ChartPL.Style = {Height('7.5cm'),HAlign('center')};
else
ChartPL.Style = {Height('8cm'),HAlign('center')};
end
if rPL(p,1) == 2
ChartPL_cap = Paragraph(['Fig. ' num2str(FIG_ENG) ' - Water level and ' tipopressione...
' pressure recorded by the piezometer at a depth of ' num2str(cell2mat(ProfPL(1,p))) ' m']);
ChartPL_cap.Style = {HAlign('center'),FontSize(Font_caption),Italic(1),Color('midnightblue')};
else
ChartPL_cap = Paragraph(['Fig. ' num2str(FIG_ENG) ' - Water level and ' tipopressione...
' pressure recorded during the reference time period by the sensor placed at a depth of ' ...
num2str(cell2mat(ProfPL(1,p))) ' m']);
ChartPL_cap.Style = {HAlign('justify'),FontSize(Font_caption),Italic(1),Color('midnightblue')};
end
FIG_ENG = FIG_ENG+1;
if titolo == 1
SE_ENG.Title = sezPiezo;
add(DT_ENG,sezPiezo);
titolo = 0;
end
escludi2 = 0;
if rPL(p,1) == 2
if p == 1
testo = Paragraph(['The following graphs shows the water level and ' tipopressione...
' pressure values recorded during the reference time period by the piezometers placed on site. '...
'Sensor at a depth of ' num2str(cell2mat(ProfPL(1,p))) ' m b.g.l. registered a maximum water level '...
'that equals ' num2str(round(max(waterlevel(:,p)),2), '%0.2f') ' m. The minimum value is '...
num2str(round(min(waterlevel(:,p)),2), '%0.2f') ' m, while the maximum variation is '...
num2str(round(max(waterlevel(:,p)),2)-round(min(waterlevel(:,p)),2),'%0.2f') ' m.']);
testo.HAlign = 'justify';
escludi2 = 1;
add(DT_ENG,testo);
elseif p == 2
testo = Paragraph(['Sensor at a depth of ' num2str(cell2mat(ProfPL(1,p))) ' m b.g.l. registered a maximum water level '...
'that equals ' num2str(round(max(waterlevel(:,p)),2), '%0.2f') ' m. The minimum value is '...
num2str(round(min(waterlevel(:,p)),2), '%0.2f') ' m, while the maximum variation is '...
num2str(round(max(waterlevel(:,p)),2)-round(min(waterlevel(:,p)),2),'%0.2f') ' m.']);
testo.HAlign = 'justify';
escludi2 = 1;
add(DT_ENG,testo);
end
elseif p == 1
testo = Paragraph(['The following graphs shows the water level and ' tipopressione...
' pressure values recorded during the reference time period by the piezometers placed on the Array. ']);
testo.HAlign = 'justify';
add(DT_ENG,testo);
end
if escludi2 == 0
testo2 = Paragraph(['Sensor at a depth of ' num2str(cell2mat(ProfPL(1,p))) ' m b.g.l. registered a maximum water level '...
'that equals ' num2str(round(max(waterlevel(:,p)),2), '%0.2f') ' m. The minimum value is '...
num2str(round(min(waterlevel(:,p)),2), '%0.2f') ' m, while the maximum variation is '...
num2str(round(max(waterlevel(:,p)),2)-round(min(waterlevel(:,p)),2),'%0.2f') ' m.']);
testo2.HAlign = 'justify';
add(DT_ENG,testo2);
end
add(DT_ENG,ChartPL);
add(DT_ENG,ChartPL_cap);
if p == rPL(m,1) || p == 1 && rPL(m,1) > 2 || rTL(m,1) == 0 && p == 1 && rIPL(m,1) == 0 && p == 1
add(DT_ENG,br);
end
close(figure(3));
end
% per grafici integrati
diffP = waterlevel-waterlevel(1,:);
maxP = max(diffP);
MAX = max(maxP);
ind = find(maxP==MAX);
GI_LivelloFaldaPL = diffP(:,ind);
GI_ProfPL = cell2mat(ProfPL(1,ind));
GI_DatePL = Date;
else
if ATTIVA == 1
testo = Paragraph('Non sono presenti dati relativi al periodo temporale considerato.');
ATTIVA = 0;
add(DT,testo);
if activeEN == 1
testo = Paragraph('No data available for the reference time period.');
add(DT_ENG,testo);
end
check = 1;
end
end
end
end
end
text = 'report_PL function executed correctly';
fprintf(fileID,fmt,text);
fclose(fileID);
end