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,FIG_ENG] = report_TuL(IDcentralina,DTcatena,rTuL,m,NodoTunnelLink,toolrif,... unitrif,datarif,firstdata_num,Font_caption,Font_tools,siteID,DT,DT_ENG,FIG,FIG_ENG,br,... colonna2,colonna2bis,status,ATTIVA,activeEN,conn,FileName) fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'report_TuL function started'; fprintf(fileID,fmt,text); 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('Catena non ancora installata o inattiva.'); add(DT,testo); if activeEN == 1 testo = Paragraph('Array not installed or inactive.'); add(DT_ENG,testo); end end check = 1; elseif status(m,1) == 3 if ATTIVA == 1 ATTIVA = 0; testo = Paragraph(['Monitoraggio completato. Invitiamo a visitare la '... 'piattaforma web per la visione dei dati storici.']); 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 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('Risultante 2D degli spostamenti locali'); xlabel('Spostamento [mm]'); ylabel('Nodo [-]'); 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('Periodo di riferimento','Intero periodo','Location','northeast'); else % SX legend('Periodo di riferimento','Intero periodo','Location','northwest'); end TempName = char(strcat('Report',siteID,'-', char(toolrif),'Convergenza.png')); saveas(div_conv(1),TempName); ChartCIR = Image(TempName); ChartCIR.Style = {HAlign('justify'),ScaleToFit}; ChartCIR_cap = Paragraph(['Fig. ' num2str(FIG) ' - Risultante 2D degli '... 'spostamenti differenziali locali nel piano della sezione registrati durante '... 'il periodo temporale di riferimento e l''intero periodo di monitoraggio']); FIG = FIG+1; ChartCIR_cap.Style = {HAlign('justify'),FontSize(Font_caption),Italic(1),Color('midnightblue')}; close(figure(1)) % ENG if activeEN == 1 % Istogramma convergenza/divergenza dei singoli nodi figure(2) div_conv = barh(nodi_grafico,RIS); title('2D local displacements'); xlabel('Displacement [mm]'); ylabel('Node [-]'); h = gca; h.XAxis.MinorTick = 'on'; h.YAxis.MinorTick = 'off'; 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_ENG = Image(TempName); ChartCIR_ENG.Style = {HAlign('justify'),ScaleToFit}; ChartCIR_ENG_cap = Paragraph(['Fig. ' num2str(FIG_ENG) ' - 2D Local differential displacements '... 'recorded in the section plane by the 3D MEMS sensors during the reference and the '... 'complete monitoring period']); FIG_ENG = FIG_ENG+1; ChartCIR_ENG_cap.Style = {HAlign('justify'),FontSize(Font_caption),Italic(1),Color('midnightblue')}; end close(figure(2)) % --- 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(3) 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 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 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({'Geometria della sezione','Nodi convergenti','Nodi divergenti','Nodi stabili'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC_Mese > 1 && contaD_Mese > 1 && conta0_Mese == 1 legend({'Geometria della sezione','Nodi convergenti','Nodi divergenti'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC_Mese > 1 && contaD_Mese == 1 && conta0_Mese > 1 legend({'Geometria della sezione','Nodi convergenti','Nodi stabili'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC_Mese == 1 && contaD_Mese > 1 && conta0_Mese > 1 legend({'Geometria della sezione','Nodi divergenti','Nodi stabili'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC_Mese > 1 && contaD_Mese == 1 && conta0_Mese == 1 legend({'Geometria della sezione','Nodi convergenti'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC_Mese == 1 && contaD_Mese > 1 && conta0_Mese == 1 legend({'Geometria della sezione','Nodi divergenti','Nodi stabili'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC_Mese == 1 && contaD_Mese == 1 && conta0_Mese > 1 legend({'Geometria della sezione','Nodi stabili'},'Position',[0.37 0.37 0.3 0.2]); end title('Spostamenti Locali - Periodo di riferimento'); xlabel('X [m]'); ylabel('Z [m]'); h = gca; h.XAxis.MinorTick = 'on'; grid off TempName = char(strcat('Report',siteID,'-', char(toolrif),'SezCIR.png')); saveas(sez,TempName); ChartSEZ = Image(TempName); ChartSEZ.Style = {HAlign('center'),Height('6.5cm')}; close(figure(3)) % ENG if activeEN == 1 % Grafico Sezione Mese figure(4) 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 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 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_ENG = Image(TempName); ChartSEZ_ENG.Style = {HAlign('center'),Height('6.5cm')}; end close(figure(4)) % Grafico Sezione Globali figure(5) 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 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 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({'Geometria della sezione','Nodi convergenti','Nodi divergenti','Nodi stabili'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC > 1 && contaD > 1 && conta0 == 1 legend({'Geometria della sezione','Nodi convergenti','Nodi divergenti'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC > 1 && contaD == 1 && conta0 > 1 legend({'Geometria della sezione','Nodi convergenti','Nodi stabili'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC == 1 && contaD > 1 && conta0 > 1 legend({'Geometria della sezione','Nodi divergenti','Nodi stabili'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC > 1 && contaD == 1 && conta0 == 1 legend({'Geometria della sezione','Nodi convergenti'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC == 1 && contaD > 1 && conta0 == 1 legend({'Geometria della sezione','Nodi divergenti','Nodi stabili'},'Position',[0.37 0.37 0.3 0.2]); elseif contaC == 1 && contaD == 1 && conta0 > 1 legend({'Geometria della sezione','Nodi stabili'},'Position',[0.37 0.37 0.3 0.2]); end title('Spostamenti Locali - Intero periodo'); xlabel('X [m]'); ylabel('Z [m]'); h = gca; h.XAxis.MinorTick = 'on'; grid off TempName = char(strcat('Report',siteID,'-', char(toolrif),'SezCIR2.png')); saveas(sez,TempName); ChartSEZ2 = Image(TempName); ChartSEZ2.Style = {HAlign('center'),Height('6.5cm')}; ChartSEZ_cap = Paragraph(['Fig. ' num2str(FIG) ' - Direzione della '... 'risultante del vettore di spostamento 2D differenziale locale '... 'registrata durante il periodo temporale di riferimento e a '... 'partire dalla data di riferimento definita in Tabella 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%')}; close(figure(5)) if activeEN == 1 % Grafico Sezione Globali figure(6) 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 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 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_ENG = Image(TempName); ChartSEZ2_ENG.Style = {HAlign('center'),Height('6.5cm')}; ChartSEZ_ENG_cap = Paragraph(['Fig. ' num2str(FIG_ENG) ' - 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_ENG = FIG_ENG+1; ChartSEZ_ENG_cap.Style = {HAlign('justify'),FontSize(Font_caption),Italic(1),Color('midnightblue')}; lot_ENG = Table({ChartSEZ_ENG, ChartSEZ2_ENG}); lot_ENG.Style = {ResizeToFitContents(false), Width('100%')}; end close(figure(6)) % immagine stella di convergenza nome = char(strcat(char(unitrif),'-', char(toolrif),'-Star.png')); Star = Image(nome); Star.Style = {Height('6.5cm')}; Star_ENG = Image(nome); Star_ENG.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(7) Seg = [varseg_Mese varseg_tot]; segmenti = barh(numseg,Seg); title('Variazione dei segmenti di convergenza'); ylabel('Segmento [-]'); xlabel('Variazione di lunghezza [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('Periodo di riferimento','Intero periodo','Location','northeast'); else % SX legend('Periodo di riferimento','Intero periodo','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.png')); saveas(segmenti(1),TempName); ChartSEG = Image(TempName); ChartSEG.Style = {Height('6.8cm')}; ChartSEG_cap = Paragraph(['Fig. ' num2str(FIG) ' - Variazione della '... 'lunghezza dei segmenti di convergenza durante il periodo temporale '... 'di riferimento e l''intero periodo di monitoraggio']); 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%')}; close(figure(7)) if activeEN == 1 figure(8) segmenti = barh(numseg,Seg); title('Convergence segments variation'); ylabel('Segment [-]'); xlabel('Length variation [mm]'); h = gca; h.XAxis.MinorTick = 'on'; 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_ENG = Image(TempName); ChartSEG_ENG.Style = {Height('6.8cm')}; ChartSEG_ENG_cap = Paragraph(['Fig. ' num2str(FIG_ENG) ' - Length variations of each convergence segment '... 'recorded during the reference and the complete monitoring periods']); FIG_ENG = FIG_ENG+1; ChartSEG_ENG_cap.Style = {HAlign('justify'),FontSize(Font_caption),Italic(1),Color('midnightblue')}; lot2_ENG = Table({Star_ENG, ChartSEG_ENG}); lot2_ENG.Style = {ResizeToFitContents(false), Width('100%')}; end close(figure(8)) 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(['Il grafico riportato di seguito mostra l''entit' char(224) ' e '... 'la direzione dei vettori di spostamento differenziale locale nel piano '... 'della sezione, misurati dai sensori Tunnel Link '... 'relativamente al periodo temporale di riferimento e all''intero periodo di monitoraggio. '... 'Il vettore ' char(232) ' ottenuto come risultante '... 'delle componenti nel piano X-Z, ovvero larghezza ed altezza della sezione. '... 'In particolare, valori negativi di spostamento indicano una convergenza '... 'del nodo verso il centro della sezione, mentre spostamenti '... 'positivi caratterizzano una divergenza del sensore in oggetto.']); parte1 = ['La figura seguente riassume la direzione dei singoli nodi '... 'rappresentati sulla geometria di progetto della sezione. Nel periodo '... 'temporale di riferimento, l''analisi degli spostamenti ha evidenziato ' ... num2str(contaC_Mese-1) ]; if contaC_Mese-1 == 1 parte2 = ' nodo convergente'; else parte2 = ' nodi convergenti'; end parte3 = [', ' num2str(contaD_Mese-1) ]; if contaD_Mese-1 == 1 parte4 = ' nodo divergente '; else parte4 = ' nodi divergenti '; end parte5 = ['e ' num2str(conta0_Mese-1) ]; if conta0_Mese-1 == 1 parte6 = ' nodo stabile. '; else parte6 = ' nodi stabili. '; end parte7 = ['La medesima analisi con riferimento all''intero '... 'periodo di monitoraggio mostra ' num2str(contaC-1) ]; if conta0-1 == 0 if contaC-1 == 1 parte8 = [' nodo convergente e ' num2str(contaD-1)]; else parte8 = [' nodi convergenti e ' num2str(contaD-1)]; end if contaD-1 == 1 parte9 = ' nodo divergente. '; else parte9 = ' nodi divergenti. '; end else if contaC-1 == 1 parte8 = [' nodo convergente, ' num2str(contaD-1)]; else parte8 = [' nodi convergenti, ' num2str(contaD-1)]; end if contaD-1 == 1 parte9 = ' nodo divergente '; else parte9 = ' nodi divergenti '; end parte10 = ['e ' num2str(conta0-1)]; if conta0-1 == 1 parte11 = ' nodo stabile. '; else parte11 = ' nodi stabili. '; end end parte12 = ['Si noti che in questa rappresentazione vengono '... 'considerati stabili i nodi caratterizzati da uno spostamento con '... 'modulo inferiore a 0.5 mm.']; 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(['Vengono inoltre riportate le variazioni di lunghezza '... 'dei segmenti di convergenza durante il periodo temporale di riferimento '... 'e l''intero periodo di monitoraggio. I segmenti sono definiti con '... 'l''ausilio della stella topografica riportata in figura. ' ... 'In particolare, la maggior variazione relativa al periodo di riferimento ' ... char(232) ' osservabile nel segmento S' num2str(maxsegindex_Mese(1,1)) ... ' ed ' char(232) ' pari a ' num2str(round(maxseg_Mese(1,1),1)) ' mm. '... 'Facendo riferimento all''intero periodo, S' num2str(maxsegindex(1,1)) ... ' risulta essere il segmento maggiormente attivo, con uno spostamento pari a '... 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); if activeEN == 1 sezCIR_ENG = Heading3('Tunnel Link'); sezCIR_ENG.Style = {FontSize(Font_tools),Bold(1),Italic(1)}; CC_ENG = Section(); CC_ENG.Title = sezCIR_ENG; % 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_ENG,sezCIR_ENG); add(DT_ENG,testo1M); add(DT_ENG,ChartCIR_ENG); add(DT_ENG,ChartCIR_ENG_cap); add(DT_ENG,testo2M); add(DT_ENG,spazio); add(DT_ENG,lot); add(DT_ENG,ChartSEZ_ENG_cap); add(DT_ENG,testo3M); add(DT_ENG,lot2); add(DT_ENG,ChartSEG_ENG_cap); add(DT_ENG,br); end else if ATTIVA == 1 testo = Paragraph('Non sono presenti dati relativi al periodo temporale considerato.'); ATTIVA = 0; add(DT,testo); check = 1; if activeEN == 1 testo = Paragraph('No data available for the reference time period.'); add(DT,testo); end end end end end text = 'report_TuL function executed correctly'; fprintf(fileID,fmt,text); fclose(fileID); end