370 lines
19 KiB
Matlab
Executable File
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 |