Sync from remote server: 2025-10-12 18:56:41
This commit is contained in:
370
Tilt/report_PL.m
Executable file
370
Tilt/report_PL.m
Executable file
@@ -0,0 +1,370 @@
|
||||
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
|
||||
Reference in New Issue
Block a user