Files
matlab-python/ATD/report_TuL_ENG.m

722 lines
33 KiB
Matlab
Executable File

function [GI_Cir_Q1,GI_Cir_Q2,GI_Cir_Q3,GI_Cir_Q4,GI_Cir_Q1_Num,GI_Cir_Q2_Num,...
GI_Cir_Q3_Num,GI_Cir_Q4_Num,GI_Cir_Seg,GI_Cir_Z,GI_Cir_Date,GI_TuL_RL,...
ATTIVA,FIG] = report_TuL_ENG(IDcentralina,DTcatena,rTuL,m,NodoTunnelLink,toolrif,...
unitrif,datarif,firstdata_num,Font_caption,Font_tools,siteID,DT,FIG,br,colonna2,...
colonna2bis,status,ATTIVA,conn,FileName)
import mlreportgen.dom.*
import mlreportgen.report.*
% Make sure DOM is compilable
makeDOMCompilable()
GI_Cir_Q1 = [];
GI_Cir_Q2 = [];
GI_Cir_Q3 = [];
GI_Cir_Q4 = [];
GI_Cir_Q1_Num = [];
GI_Cir_Q2_Num = [];
GI_Cir_Q3_Num = [];
GI_Cir_Q4_Num = [];
GI_Cir_Seg = [];
GI_Cir_Z = [];
GI_Cir_Date = [];
GI_TuL_RL = [];
check = 0;
while check == 0
if status(m,1) == 1
if ATTIVA == 1
ATTIVA = 0;
testo = Paragraph('Array not installed or inactive.');
add(DT,testo);
end
check = 1;
elseif status(m,1) == 3
if ATTIVA == 1
ATTIVA = 0;
testo = Paragraph(['Monitoring completed. Please log into the web-based platform '...
'to access the complete dataset.']);
add(DT,testo);
end
check = 1;
else
[~,Segmenti,~,~,~,Antiorario] = star(IDcentralina,DTcatena,FileName);
[dim,~] = size(Segmenti); % numero di punti per il calcolo della stella
NODATA(m,1) = 0;
Num = zeros(rTuL(m,1),1);
for n = 1:rTuL(m,1)
NodeNum = num2str(NodoTunnelLink(n,m));
% dati del mese
comando = ['select EventDate, EventTime, XShift, ZShift, HShift, '...
'HShift_local, X, Z 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;
Num(n,1) = NodoTunnelLink(n,m);
datarifNEW = datestr(firstdata_num{m+1,1},'yyyy-mm-dd'); % data riferimento definita sul sito
temporifNEW = datestr(firstdata_num{m+1,1},'HH:MM:SS');
% primo dato per la stella
comando = ['select HShift from ElabDataView where EventDate = ''' ...
datarifNEW ''' and EventTime >= ''' temporifNEW ''' and '...
'ToolNameID = ''' char(toolrif) ''' and UnitName = ''' ...
char(unitrif) ''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Stella1 = cell2mat(curs.Data);
% Scarico ay che mi serve per orientare gli spostamenti in
% convergenze/divergenza a seconda del quadrante - Inizio mese
comando = ['select Val1, Val6 from RawDataView where Date >= ''' datarif ...
''' and UnitName = ''' char(unitrif) ''' and ToolNameID = ''' char(toolrif) ...
''' and NodeNum = ' NodeNum ' '];
curs = exec(conn,comando);
curs = fetch(curs);
DatiaccY_Mese = curs.Data;
% Scarico i parametri di calibrazione di ay
comando = ['select Cal0, Cal1, Cal2, Cal3, Cal4, Cal5, Cal6, Cal7, Cal8, '...
'CalA, CalB from CalibrationView where UnitName = ''' char(unitrif) ...
''' and ToolNameID = ''' char(toolrif) ''' and NodeNum = ''' NodeNum ''''];
curs = exec(conn,comando);
curs = fetch(curs);
DCalTuL = curs.Data;
[r,c] = size(DCalTuL);
MATconv = zeros(r,c);
for ii = 1:r
for jj = 1:c
MATconv(ii,jj) = DCalTuL{ii,jj};
end
end
DCalTuL = MATconv;
caY_Tu = DCalTuL(:,4);
pIntY_Tu = DCalTuL(:,5);
iIntY_Tu = DCalTuL(:,6);
[rD,rC] = size(Dati);
if rC ~= 1
T = [cell2mat(Dati(:,1)) repmat(' ', [rD,1]) cell2mat(Dati(:,2))];
Date = datenum(T); % Data
if n == 1 % Il primo lo scrivo e creo la variabile di controllo
else
[rS,~] = size(asseX);
if rD ~= rS
NODATA(m,1) = 1;
check = 0;
break
else
check = 1;
end
end
% divergenza/convergenza dei singoli nodi dall'inizio
asseX(:,n) = cell2mat((Dati(:,3)));
asseZ(:,n) = cell2mat(Dati(:,4));
X_TuL_Mese(:,n) = cell2mat(Dati(:,7));
Z_TuL_Mese(:,n) = cell2mat(Dati(:,8));
accY_raw(:,n) = str2double(DatiaccY_Mese(:,1));
t_TuL(:,n) = str2double(DatiaccY_Mese(:,2));
accY_Mese(:,n) = accY_raw(:,n)*caY_Tu+(t_TuL(:,n)*pIntY_Tu+iIntY_Tu);
diffX(:,n) = asseX(:,n)-asseX(1,n);
diffZ(:,n) = asseZ(:,n)-asseZ(1,n);
RIS_XZ(:,n) = 1000*cell2mat((Dati(:,6)));
if n <= dim
stella_Rif(:,n) = 1000*(cell2mat(Dati(:,5))-Stella1(1,1));
stella_Mese(:,n) = 1000*(cell2mat(Dati(:,5))-cell2mat(Dati(1,5)));
end
% dati relativi al mese
RIS_XZ_Mese(1,n) = sqrt(diffX(end,n)^2 + diffZ(end,n)^2)*1000;
[rAY,~] = size(accY_Mese);
if isnan(accY_Mese(end,n)) == 1
for d = 1:rAY
if isnan(accY_Mese(end-d+1,n)) == 0
diffaccY(1,n) = accY_Mese(end-d+1,n)-accY_Mese(1,n);
break
end
end
else
diffaccY(1,n) = accY_Mese(end,n)-accY_Mese(1,n);
end
% correggo segno risultante
if diffaccY(1,n) < 0
if Antiorario(n,1) == 1 || Antiorario(n,1) == 4
RIS_XZ_Mese(1,n) = -1*RIS_XZ_Mese(1,n);
end
elseif diffaccY(1,n) > 0
if Antiorario(n,1) == 2 || Antiorario(n,1) == 3
RIS_XZ_Mese(1,n) = -1*RIS_XZ_Mese(1,n);
end
end
else
NODATA(m,1) = 1;
check = 1;
end
end
if NODATA(m,1) == 0
date = datestr(datenum(colonna2{m+1,1},'dd-mm-yyyy'),'yyyy-mm-dd'); % data riferimento definita sul sito
% posizione di progetto dei nodi
comando = ['select EventDate, EventTime, X, Z from ElabDataView where EventDate >= ''' ...
date ''' and ToolNameID = ''' char(toolrif) ''' and UnitName = ''' char(unitrif) ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
SezioneXZ = curs.Data;
Datasez = SezioneXZ(1,1);
Orasez = SezioneXZ(1,2);
[rz,~] = size(SezioneXZ);
scrivi = 1;
for rr = 1:rz
if strcmp(SezioneXZ(rr,1),Datasez)==1 && strcmp(SezioneXZ(rr,2),Orasez) ==1
CoordX(scrivi,1) = SezioneXZ(rr,3);
CoordZ(scrivi,1) = SezioneXZ(rr,4);
scrivi = scrivi+1;
end
end
if strcmp(colonna2bis(m+1,1),colonna2(m+1,1)) == 0 % data zero diversa data riferimento
datarifNEW = datestr(firstdata_num{m+1,1},'yyyy-mm-dd'); % data riferimento definita sul sito
for nw = 1:rTuL(m,1)
NodeNum = num2str(NodoTunnelLink(nw,m));
comando = ['select EventDate, EventTime, XShift, ZShift, X, Z, '...
'from ElabDataView where EventDate = ''' datarifNEW ''' and ToolNameID = ''' char(toolrif) ...
''' and UnitName = ''' char(unitrif) ''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
DatiNEW = curs.Data; % dati registrati alla data di riferimento
Num(nw,1) = NodoTunnelLink(nw,m);
[~,rC] = size(DatiNEW);
if rC ~= 1
% dalla data di riferimento
% divergenza/convergenza dei singoli nodi dall'inizio
asseX(:,nw) = asseX(:,nw)-cell2mat(DatiNEW(1,3));
asseZ(:,nw) = asseZ(:,nw)-cell2mat(DatiNEW(1,4));
X_TuL_Rif(:,nw) = cell2mat(DatiNEW(1,5));
Z_TuL_Rif(:,nw) = cell2mat(DatiNEW(1,6));
% Scarico ay che mi serve per orientare gli spostamenti in
% convergenze/divergenza a seconda del quadrante - dati
% dalla data di riferimento
comando = ['select Val1, Val6 from RawDataView where Date >= ''' datarifNEW ...
''' and UnitName = ''' char(unitrif) ''' and ToolNameID = ''' char(toolrif) ...
''' and NodeNum = ' NodeNum ' '];
curs = exec(conn,comando);
curs = fetch(curs);
DatiaccY_Rif = curs.Data;
accY_raw(:,n) = str2double(DatiaccY(:,1));
t_TuL(:,n) = str2double(DatiaccY(:,2));
accY_Rif(:,n) = accY_raw(:,n)*caY_Tu+(t_TuL(:,n)*pIntY_Tu+iIntY_Tu);
diffX(:,n) = asseX(:,n)-asseX(1,n);
diffZ(:,n) = asseZ(:,n)-asseZ(1,n);
% Risultati dalla data di riferimento
RIS_XZ(:,n) = 1000*((asseX(:,n).^2+asseZ(:,n).^2).^0.5);
diffaccY_Rif(1,n) = accY_Mese(end,n)-accY_Rif(1,n);
% correggo segno risultante
if diffaccY_Rif(1,n) < 0
if Antiorario(n,1) == 1 || Antiorario(n,1) == 4
RIS_XZ(1,n) = -1*RIS_XZ(1,n);
end
elseif diffaccY_Rif(1,n) > 0
if Antiorario(n,1) == 2 || Antiorario(n,1) == 3
RIS_XZ(1,n) = -1*RIS_XZ(1,n);
end
end
% dati relativi al mese
RIS_XZ_Mese(:,n) = sqrt(diffX(end,n).^2 + diffZ(end,n)^2)*1000;
diffaccY_Mese(:,n) = accY_Mese(:,n)-accY_Mese(1,n);
% correggo segno risultante
[rA,~] = size(accY_Mese);
for aa = 1:rA
if diffaccY_Mese(1,n) < 0
if Antiorario(n,1) == 1 || Antiorario(n,1) == 4
RIS_XZ_Mese(aa,n) = -1*RIS_XZ_Mese(aa,n);
end
elseif diffaccY_Mese(1,n) > 0
if Antiorario(n,1) == 2 || Antiorario(n,1) == 3
RIS_XZ_Mese(aa,n) = -1*RIS_XZ_Mese(aa,n);
end
end
end
else
NODATA(m,1) = 1;
end
end
end
q1 = find(Antiorario==1);
q2 = find(Antiorario==2);
q3 = find(Antiorario==3);
q4 = find(Antiorario==4);
m1 = max(abs(RIS_XZ_Mese(end,q1)));
g1 = find(m1==abs(RIS_XZ_Mese));
GI_Cir_Q1 = RIS_XZ_Mese(end,g1(1));
m2 = max(abs(RIS_XZ_Mese(end,q2)));
g2 = find(m2==abs(RIS_XZ_Mese));
GI_Cir_Q2 = RIS_XZ_Mese(end,g2(1));
m3 = max(abs(RIS_XZ_Mese(end,q3)));
g3 = find(m3==abs(RIS_XZ_Mese));
GI_Cir_Q3 = RIS_XZ_Mese(end,g3(1));
m4 = max(abs(RIS_XZ_Mese(end,q4)));
g4 = find(m4==abs(RIS_XZ_Mese));
GI_Cir_Q4 = RIS_XZ_Mese(end,g4(1));
GI_Cir_Q1_Num = Num(g1(1));
GI_Cir_Q2_Num = Num(g2(1));
GI_Cir_Q3_Num = Num(g3(1));
GI_Cir_Q4_Num = Num(g4(1));
GI_Cir_Seg = stella_Mese(end,:);
GI_Cir_Date = Date;
% Cerco eventuali correlazioni con PreConv Array
NomeFile = strcat('Report',siteID,'-PCLvsTuL.txt');
Filetesto = importdata(NomeFile);
[rF,~] = size(Filetesto);
AAA = 1;
Var = 0;
ind = 1;
while AAA < rF % A un Cir compete (se c'è) uno ed un solo PreConv. Lo vado a cercare
check1 = Filetesto(AAA,1);
if check1 == 99999 % Non ci sono PreConv Array o non ci sono Cir
AAA = 2;
else
check2 = Filetesto(AAA+1,1);
if check1 == str2num(DTcatena(end-2:end)) % Il Cir è da prendere in considerazione ed è riportato nella prima riga del file
Nodo = Filetesto(AAA+2,1);
Var = 1;
elseif check2 == str2num(DTcatena(end-2:end)) % Il Cir è da prendere in considerazione ed è riportato nella seconda riga del file
Nodo = Filetesto(AAA+3,1);
Var = 1;
end
AAA = AAA+4;
end
end
if Var == 1
GI_Cir_Z(:,ind) = (asseZ(:,Nodo)-asseZ(1,Nodo))*1000;
ind = ind+1;
Var = 0;
end
% Cerco eventuali correlazioni con Rad Array
NomeFile = strcat('Report',siteID,'-TuLvsRL.txt');
Filetesto = importdata(NomeFile);
[rF,~] = size(Filetesto);
AAA = 1;
Var = 0;
ind = 1;
while AAA < rF % A un Cir compete un Rad Array. Lo vado a cercare
check1 = Filetesto(AAA,1);
if check1 == 99999 % Non ci sono Rad Array o non ci sono Cir
AAA = 2;
else
check2 = Filetesto(AAA+1,1);
if check1 == str2num(DTcatena(end-2:end)) % Il Cir è da prendere in considerazione ed è riportato nella prima riga del file
Nodo = Filetesto(AAA+2,1);
Var = 1;
elseif check2 == str2num(DTcatena(end-2:end)) % Il Cir è da prendere in considerazione ed è riportato nella seconda riga del file
Nodo = Filetesto(AAA+3,1);
Var = 1;
end
AAA = AAA+4;
end
if Var == 1
GI_TuL_RL(:,ind) = sqrt(diffX(:,Nodo).^2 + diffZ(:,Nodo).^2)*1000; % ad un Cir possono competere più Rad. Il cir è unico
ind = ind+1;
Var = 0;
end
end
% Istogramma convergenza/divergenza dei singoli nodi
figure(1)
[~,nn] = size(RIS_XZ_Mese(end,:));
for w = 1:nn
nodi_grafico(1,w) = w;
end
RIS = [RIS_XZ_Mese(end,:)' RIS_XZ(end,:)'];
div_conv = barh(nodi_grafico,RIS);
title('2D local displacement');
xlabel('Displacement [mm]');
ylabel('Node [-]');
h = gca;
h.XAxis.MinorTick = 'on';
h.YAxis.MinorTick = 'off';
Max(1) = max(RIS_XZ_Mese(end,:));
Max(2) = max(RIS_XZ(end,:));
MAX = max(Max);
Min(1) = min(RIS_XZ_Mese(end,:));
Min(2) = min(RIS_XZ(end,:));
MIN = min(Min);
in1 = find(Max == MAX);
in2 = find(Min == MIN);
MM = [abs(MIN) MAX];
MAXX = max(MM);
in3 = find(MM == MAXX);
if in3 == 1 % DX
if in2 == 1
POS = find(RIS_XZ_Mese == Min(1));
else
POS = find(RIS_XZ == Min(2));
end
else % SX
if in1 == 1
POS = find(RIS_XZ_Mese == Max(1));
else
POS = find(RIS_XZ == Max(2));
end
end
if MAXX < 10 % mm
xlim([-10 10]);
else
xlim([-MAXX MAXX])
end
ylim([0 nn+2]);
yticks(0:1:nn);
grid on
if in3 == 1 % DX
legend('Reference time period','Complete monitoring period','Location','northeast');
else % SX
legend('Reference time period','Complete monitoring period','Location','northwest');
end
TempName = char(strcat('Report',siteID,'-', char(toolrif),'Convergenza_ENG.png'));
saveas(div_conv(1),TempName);
ChartCIR = Image(TempName);
ChartCIR.Style = {HAlign('justify'),ScaleToFit};
ChartCIR_cap = Paragraph(['Fig. ' num2str(FIG) ' - 2D Local differential displacements '...
'recorded in the section plane by the 3D MEMS sensors during the reference and the '...
'complete monitoring period']);
FIG = FIG+1;
ChartCIR_cap.Style = {HAlign('justify'),FontSize(Font_caption),Italic(1),Color('midnightblue')};
% --- Sezione - MESE ---
contaC_Mese = 1;
contaD_Mese = 1;
conta0_Mese = 1;
for ris = 1:nn
if RIS_XZ_Mese(end,ris)< -0.5
nodiCX_Mese(contaC_Mese,1) = CoordX(ris,1);
nodiCZ_Mese(contaC_Mese,1) = CoordZ(ris,1);
contaC_Mese = contaC_Mese + 1;
elseif RIS_XZ_Mese(end,ris)> 0.5
nodiDX_Mese(contaD_Mese,1) = CoordX(ris,1);
nodiDZ_Mese(contaD_Mese,1) = CoordZ(ris,1);
contaD_Mese = contaD_Mese + 1;
else
nodiFX_Mese(conta0_Mese,1) = CoordX(ris,1);
nodiFZ_Mese(conta0_Mese,1) = CoordZ(ris,1);
conta0_Mese = conta0_Mese + 1;
end
end
% --- Sezione - GLOBALI ---
contaC = 1;
contaD = 1;
conta0 = 1;
for ris = 1:nn
if RIS_XZ(end,ris)< -0.5
nodiCX_tot(contaC,1) = CoordX(ris,1);
nodiCZ_tot(contaC,1) = CoordZ(ris,1);
contaC = contaC + 1;
elseif RIS_XZ(end,ris)> 0.5
nodiDX_tot(contaD,1) = CoordX(ris,1);
nodiDZ_tot(contaD,1) = CoordZ(ris,1);
contaD = contaD + 1;
else
nodiFX_tot(conta0,1) = CoordX(ris,1);
nodiFZ_tot(conta0,1) = CoordZ(ris,1);
conta0 = conta0 + 1;
end
end
% Grafico Sezione Mese
figure(2)
CoordX = [CoordX(:,1); CoordX(1,1); CoordX(1,1)];
CoordZ = [CoordZ(:,1); CoordZ(end,1); CoordZ(1,1)];
sez = plot(cell2mat(CoordX(:,1)),cell2mat(CoordZ(:,1)),'-','Color','black');
hold on
if contaC_Mese > 1
sezC = plot(cell2mat(nodiCX_Mese(:,1)),cell2mat(nodiCZ_Mese(:,1)),'o','Color','red');
set(sezC, 'markerfacecolor', get(sezC, 'color'));
end
hold on
if contaD_Mese > 1
sezD = plot(cell2mat(nodiDX_Mese(:,1)),cell2mat(nodiDZ_Mese(:,1)),'o','Color',[0.4660 0.6740 0.1880]);
set(sezD, 'markerfacecolor', get(sezD, 'color'));
end
hold on
if conta0_Mese > 1
sezF = plot(cell2mat(nodiFX_Mese(:,1)),cell2mat(nodiFZ_Mese(:,1)),'o','Color','black');
set(sezF, 'markerfacecolor', get(sezF, 'color'));
end
if contaC_Mese > 1 && contaD_Mese > 1 && conta0_Mese > 1
legend({'Array geometry','Convergent nodes','Divergent nodes','Stable nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC_Mese > 1 && contaD_Mese > 1 && conta0_Mese == 1
legend({'Array geometry','Convergent nodes','Divergent nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC_Mese > 1 && contaD_Mese == 1 && conta0_Mese > 1
legend({'Array geometry','Convergent nodes','Stable nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC_Mese == 1 && contaD_Mese > 1 && conta0_Mese > 1
legend({'Array geometry','Divergent nodes','Stable nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC_Mese > 1 && contaD_Mese == 1 && conta0_Mese == 1
legend({'Array geometry','Convergent nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC_Mese == 1 && contaD_Mese > 1 && conta0_Mese == 1
legend({'Array geometry','Divergent nodes','Stable nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC_Mese == 1 && contaD_Mese == 1 && conta0_Mese > 1
legend({'Array geometry','Stable nodes'},'Position',[0.37 0.37 0.3 0.2]);
end
title('Local displacements - Reference time period');
xlabel('X [m]');
ylabel('Z [m]');
h = gca;
h.XAxis.MinorTick = 'on';
grid off
TempName = char(strcat('Report',siteID,'-', char(toolrif),'SezCIR_ENG.png'));
saveas(sez,TempName);
ChartSEZ = Image(TempName);
ChartSEZ.Style = {HAlign('center'),Height('6.5cm')};
% Grafico Sezione Globali
figure(3)
sez = plot(cell2mat(CoordX(:,1)),cell2mat(CoordZ(:,1)),'-','Color','black');
hold on
if contaC > 1
sezC = plot(cell2mat(nodiCX_tot(:,1)),cell2mat(nodiCZ_tot(:,1)),'o','Color','red');
set(sezC, 'markerfacecolor', get(sezC, 'color'));
end
hold on
if contaD > 1
sezD = plot(cell2mat(nodiDX_tot(:,1)),cell2mat(nodiDZ_tot(:,1)),'o','Color',[0.4660 0.6740 0.1880]);
set(sezD, 'markerfacecolor', get(sezD, 'color'));
end
hold on
if conta0 > 1
sezF = plot(cell2mat(nodiFX_tot(:,1)),cell2mat(nodiFZ_tot(:,1)),'o','Color','black');
set(sezF, 'markerfacecolor', get(sezF, 'color'));
end
if contaC > 1 && contaD > 1 && conta0 > 1
legend({'Array geometry','Convergent nodes','Divergent nodes','Stable nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC > 1 && contaD > 1 && conta0 == 1
legend({'Array geometry','Convergent nodes','Divergent nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC > 1 && contaD == 1 && conta0 > 1
legend({'Array geometry','Convergent nodes','Stable nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC == 1 && contaD > 1 && conta0 > 1
legend({'Array geometry','Divergent nodes','Stable nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC > 1 && contaD == 1 && conta0 == 1
legend({'Array geometry','Convergent nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC == 1 && contaD > 1 && conta0 == 1
legend({'Array geometry','Divergent nodes','Stable nodes'},'Position',[0.37 0.37 0.3 0.2]);
elseif contaC == 1 && contaD == 1 && conta0 > 1
legend({'Array geometry','Stable nodes'},'Position',[0.37 0.37 0.3 0.2]);
end
title('Local displacements - Complete monitoring period');
xlabel('X [m]');
ylabel('Z [m]');
h = gca;
h.XAxis.MinorTick = 'on';
grid off
TempName = char(strcat('Report',siteID,'-', char(toolrif),'SezCIR2_ENG.png'));
saveas(sez,TempName);
ChartSEZ2 = Image(TempName);
ChartSEZ2.Style = {HAlign('center'),Height('6.5cm')};
ChartSEZ_cap = Paragraph(['Fig. ' num2str(FIG) ' - Direction of the '...
'2D local differential displacement vector '...
'observed during the reference time period and strarting from the reference date '...
'reported in Table 1']);
FIG = FIG+1;
ChartSEZ_cap.Style = {HAlign('justify'),FontSize(Font_caption),Italic(1),Color('midnightblue')};
lot = Table({ChartSEZ, ChartSEZ2});
lot.Style = {ResizeToFitContents(false), Width('100%')};
% immagine stella di convergenza
nome = char(strcat(char(unitrif),'-', char(toolrif),'-Star.png'));
Star = Image(nome);
Star.Style = {Height('6.5cm')};
Star2 = Image(nome);
Star2.Style = {Height('6.5cm')};
% --- Segmenti di convergenza MESE ---
[~,cs] = size(stella_Mese);
for y = 1:cs
varseg_Mese(y,1) = stella_Mese(end,y);
end
maxseg_Mese = max(abs(varseg_Mese));
maxsegindex_Mese = find(abs(varseg_Mese) == maxseg_Mese);
maxseg_Mese = varseg_Mese(maxsegindex_Mese);
% --- Segmenti di convergenza Globale ---
[~,cs] = size(stella_Rif);
for y = 1:cs
varseg_tot(y,1) = stella_Rif(end,y);
numseg(y,1) = y;
end
maxseg = max(abs(varseg_tot));
maxsegindex = find(abs(varseg_tot) == maxseg);
maxseg = varseg_tot(maxsegindex);
figure(4)
Seg = [varseg_Mese varseg_tot];
segmenti = barh(numseg,Seg);
title('Convergence segments variation');
ylabel('Segment [-]');
xlabel('Length variation [mm]');
h = gca;
h.XAxis.MinorTick = 'on';
Max(1) = max(varseg_Mese);
Max(2) = max(varseg_tot);
MAX = max(Max);
Min(1) = min(varseg_Mese);
Min(2) = min(varseg_tot);
MIN = min(Min);
MAXX = max(abs(MIN),MAX);
MM = [abs(MIN) MAX];
in3 = find(MM == MAXX); % Dx-Sx
if in3 == 1 % DX
legend('Reference time period','Complete monitoring period','Location','northeast');
else % SX
legend('Reference time period','Complete monitoring period','Location','northwest');
end
ylim([0 cs+2]);
yticks(0:1:nn);
if MAXX < 10 % mm
xlim([-10 10]);
else
xlim([-MAXX MAXX])
end
grid on
grid minor
TempName = char(strcat('Report',siteID,'-', char(toolrif),'StarSeg_ENG.png'));
saveas(segmenti(1),TempName);
ChartSEG = Image(TempName);
ChartSEG.Style = {Height('6.8cm')};
ChartSEG_cap = Paragraph(['Fig. ' num2str(FIG) ' - Length variations of each convergence segment '...
'recorded during the reference and the complete monitoring periods']);
FIG = FIG+1;
ChartSEG_cap.Style = {HAlign('justify'),FontSize(Font_caption),Italic(1),Color('midnightblue')};
lot2 = Table({Star, ChartSEG});
lot2.Style = {ResizeToFitContents(false), Width('100%')};
sezCIR = Heading3('Tunnel Link');
sezCIR.Style = {FontSize(Font_tools),Bold(1),Italic(1)};
CC = Section();
CC.Title = sezCIR;
% Testi relativi all'ultimo mese
testo1M = Paragraph(['Following graphs display the magnitude and direction of local differential displacements in the section plane '...
'measured by the 3D MEMS sensors, both during the reference and complete monitoring period. '... '...
'The 2D vector is the resultant of displacement components in the X-Z plane, representing the section width and '...
'height, respectively. In particular, negative values indicate that the node is converging towards the centre of '...
'the section, while positive ones correspond to a divergent movement.']);
parte1 = ['The following figure summarizes the displacement direction of each single node, '...
'which are represented on the section geometry. During the reference time period, the analysis evidenced '...
num2str(contaC_Mese-1) ];
if contaC_Mese-1 == 1
parte2 = ' convergent node';
else
parte2 = ' convergent nodes';
end
parte3 = [', ' num2str(contaD_Mese-1) ];
if contaD_Mese-1 == 1
parte4 = ' divergent sensor ';
else
parte4 = ' divergent sensors ';
end
parte5 = ['and ' num2str(conta0_Mese-1) ];
if conta0_Mese-1 == 1
parte6 = ' stable one. ';
else
parte6 = ' stable ones. ';
end
parte7 = ['The same analysis performed on the complete monitoring period '...
'resulted in ' num2str(contaC-1) ];
if conta0-1 == 0
if contaC-1 == 1
parte8 = [' convergent node and ' num2str(contaD-1)];
else
parte8 = [' convergent nodes and ' num2str(contaD-1)];
end
if contaD-1 == 1
parte9 = ' divergent sensor. ';
else
parte9 = ' divergent sensors. ';
end
else
if contaC-1 == 1
parte8 = [' convergent node, ' num2str(contaD-1)];
else
parte8 = [' convergent nodes, ' num2str(contaD-1)];
end
if contaD-1 == 1
parte9 = ' divergent sensor ';
else
parte9 = ' divergent sensors ';
end
parte10 = ['and ' num2str(conta0-1)];
if conta0-1 == 1
parte11 = ' stable one. ';
else
parte11 = ' stable ones. ';
end
end
parte12 = ['In this specific representation, nodes featuring displacement values less than 0.5 mm '...
'are assumed to be stable.'];
if conta0-1 == 0
testo2M = Paragraph([parte1 parte2 parte3 parte4 parte5 parte6 parte7 parte8 ...
parte9 parte12]);
else
testo2M = Paragraph([parte1 parte2 parte3 parte4 parte5 parte6 parte7 parte8 ...
parte9 parte10 parte11 parte12]);
end
testo3M = Paragraph(['Moreover, the following graph reports the length variation of '...
'each convergence segment referred to the monitored tunnel section, both during the reference '...
'and complete monitoring periods. Segments definition is based on the topographic star displayed ' ...
'in the corresponding figure. In this case, segment S' num2str(maxsegindex_Mese(1,1)) ' presented the '...
'maximum length variation observed during the reference time period, ' ...
'with a difference of ' num2str(round(maxseg_Mese(1,1),1)) ' mm. '...
'Taking into account the complete monitoring period, the maximum variation is obsverved on segment S' num2str(maxsegindex(1,1)) ...
', with a difference of '...
num2str(round(maxseg(1,1),1)) ' mm.']);
spazio = Paragraph('');
testo1M.HAlign = 'justify';
testo2M.HAlign = 'justify';
testo3M.HAlign = 'justify';
add(DT,sezCIR);
add(DT,testo1M);
add(DT,ChartCIR);
add(DT,ChartCIR_cap);
add(DT,testo2M);
add(DT,spazio);
add(DT,lot);
add(DT,ChartSEZ_cap);
add(DT,testo3M);
add(DT,lot2);
add(DT,ChartSEG_cap);
add(DT,br);
close(figure(1));
close(figure(2));
close(figure(3));
close(figure(4));
else
if ATTIVA == 1
testo = Paragraph('No data available for the reference time period.');
ATTIVA = 0;
add(DT,testo);
check = 1;
end
end
end
end
fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'report_TuL_ENG function executed correctly';
fprintf(fileID,fmt,text);
fclose(fileID);
end