Files
matlab-python/ATD/schemaSP.m

286 lines
11 KiB
Matlab
Executable File

% Funzione che ricostrusice i segmenti di pertinenza e la profondità dello
% spostamento relativo. In output si ha
% SpeTuL = segmento di pertinenza dei nodi di tipo Tunnel Link
% SpeRL = segmento di pertinenza dei nodi di tipo Radial Link
function [SpeTuL,SpeRL,SpeTLH,PsTLH,SpeTLHRH,PsTLHRH,SpePCL,SpePCLHR]...
= schemaSP(yesTuL,yesRL,yesTLH,yesTLHRH,yesPCL,yesPCLHR,...
NodoTunnelLink,NodoRadialLink,NodoTiltLinkH,NodoTiltLinkHRH,...
NodoPreConvLink,NodoPreConvLinkHR,rTuL,rRL,rTLH,rTLHRH,rPCL,rPCLHR,...
catena,FileName)
% Apro file di testo
fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'schemaSP function started';
fprintf(fileID,fmt,text);
Nodi = [cell2mat(catena(:,3)) cell2mat(catena(:,2)) cell2mat(catena(:,1))];
%% Tunnel Link
if yesTuL == 1
% Definizione dei segmenti di pertinenza dei singoli accelerometri
% SpeTuL = Segmento di Pertinenza del nodo (posizione i-esima del nodo i-esimo)
NodiTuL = cell2mat(NodoTunnelLink(:,2:3));
% Costruisco il segmento di pertinenza
spe0 = 0; % segmento di pertinenza dell'ancora
spe1 = ((NodiTuL(1,2) + NodiTuL(2,2))/2); % segmento di pertinenza del primo nodo
if rTuL>2
spe2 = zeros(rTuL-2,1);
for i = 2:(rTuL-1)
media1 = NodiTuL(i,2) + NodiTuL(i-1,2)/2;
media2 = NodiTuL(i,2) + NodiTuL(i+1,2)/2;
spei = media2 - media1;
spe2(i-1,1) = spei;
end
else
spe2 = [];
end
spelast = (NodiTuL(rTuL,2)-(NodiTuL(rTuL-1,2)+NodiTuL(rTuL,2))/2)*2; % segmento di pertinenza dell'ultimo nodo
SpeTuL = [spe0; spe1; spe2; spelast];
text = 'Segments of relevance of Tunnel Link defined correctly';
fprintf(fileID,fmt,text);
else
% Non ci sono nodi Tunnel Link
SpeTuL = [];
text = 'Segments of relevance of Tunnel Link not defined';
fprintf(fileID,fmt,text);
end
%% Radial Link
if yesRL == 1
% Definizione dei segmenti di pertinenza dei singoli accelerometri
% SpeRL = Segmento di Pertinenza del nodo (posizione i-esima del nodo i-esimo)
NodiRL = cell2mat(NodoRadialLink(:,2:3));
% Costruisco il segmento di pertinenza
spe0 = 0; % segmento di pertinenza dell'ancora
spe1 = ((NodiRL(1,2) + NodiRL(2,2))/2); % segmento di pertinenza del primo nodo
if rRL>2
spe2 = zeros(rRL-2,1);
for i = 2:(rRL-1)
media1 = NodiRL(i,2) + NodiRL(i-1,2)/2;
media2 = NodiRL(i,2) + NodiRL(i+1,2)/2;
spei = media2 - media1;
spe2(i-1,1) = spei;
end
else
spe2 = [];
end
spelast = (NodiRL(rRL,2)-(NodiRL(rRL-1,2)+NodiRL(rRL,2))/2)*2; % segmento di pertinenza dell'ultimo nodo
SpeRL = [spe0; spe1; spe2; spelast];
text = 'Segments of relevance of Radial Link defined correctly';
fprintf(fileID,fmt,text);
else
% Non ci sono nodi Radial Link
SpeRL = [];
text = 'Segments of relevance of Radial Link not defined';
fprintf(fileID,fmt,text);
end
%% Tilt Link H
if yesTLH == 1
% Definizione dei segmenti di pertinenza dei singoli accelerometri
% SpeTLH = Segmento di Pertinenza del nodo (posizione i-esima del nodo i-esimo)
% PsTLH = Posizione dello spostamento
NodiTLH = cell2mat(NodoTiltLinkH(:,2:3));
% Costruisco il segmento di pertinenza
spe0 = 0; % segmento di pertinenza dell'ancora
spe1 = (NodiTLH(1,2) + NodiTLH(2,2))/2; % segmento di pertinenza del primo nodo, lo considero +
if rTLH > 2
spe2 = zeros(rTLH-2,1);
for i = 2:(rTLH-1)
media1 = (abs(NodiTLH(i,2)) + abs(NodiTLH(i-1,2)))/2;
media2 = (abs(NodiTLH(i,2)) + abs(NodiTLH(i+1,2)))/2;
spei = media2 - media1;
spe2(i-1,1) = spei; % li considero positivi
end
else
spe2 = [];
end
% segmento di pertinenza dell'ultimo nodo
spelast = (NodiTLH(end,2)-((NodiTLH(rTLH-1,2)+NodiTLH(rTLH,2)))/2)*2;
SpeTLH = [spe0; spe1; spe2; spelast]; % raccolgo i segmenti di pertinenza
% Calcolo la posizione dello spostamento relativo
ps0 = NodiTLH(1,2); % posizione dell'ancora
if spe1 <= 1
ps1 = NodiTLH(1,2)+spe1; % la posizione del primo nodo TLH è data da
else
ps1 = cell2mat(NodoTiltLinkH(1,3))+0.5;
end
ps2 = zeros(rTLH-1,1);
for j = 2:rTLH
if j == 2
if SpeTLH(j+1,1) <= 1
psj = ps1 + SpeTLH(j+1,1);
else
psj = cell2mat(NodoTiltLinkH(j,3))+0.5;
end
% la posizione a cui il nodo j di tipo Tilt Link H rileva lo spostamento è data dalla
% somma fra il suo segmento di pertinenza e la posizione a cui rileva lo spostamento
% il nodo precedente
psPrec = psj;
% mi serve come appoggio per il calcolo della posizione dello spostamento del nodo successivo
else
if SpeTLH(j+1,1) <= 1
psj = psPrec + SpeTLH(j+1,1);
else
psj = cell2mat(NodoTiltLinkH(j,3))+0.5;
end
psPrec = psj;
end
ps2(j-1,1) = psj;
end
PsTLH = [ps0; ps1; ps2];
text = 'Segments of relevance of Tilt Link H defined correctly';
fprintf(fileID,fmt,text);
for i = 2:rTLH+1
if SpeTLH(i) > 1
SpeTLH(i) = 1;
end
end
else
% Non ci sono nodi Tilt Link H
SpeTLH = [];
PsTLH = [];
text = 'Segments of relevance of Tilt Link H not defined';
fprintf(fileID,fmt,text);
end
%% Tilt Link HR H
if yesTLHRH == 1
% Definizione dei segmenti di pertinenza delle ampolle
% PsTLHRH = posizione dello spostamento
NodiTLHRH = cell2mat(NodoTiltLinkHRH(:,2:3));
% Costruisco il segmento di pertinenza
spe0 = 0; % segmento di pertinenza dell'ancora
spe1 = (NodiTLHRH(1,2) + NodiTLHRH(2,2))/2; % segmento di pertinenza del primo nodo, lo considero +
if rTLHRH > 2
spe2 = zeros(rTLHRH-2,1);
for i = 2:(rTLHRH-1)
media1 = (abs(NodiTLHRH(i,2)) + abs(NodiTLHRH(i-1,2)))/2;
media2 = (abs(NodiTLHRH(i,2)) + abs(NodiTLHRH(i+1,2)))/2;
spei = media2 - media1;
spe2(i-1,1) = spei; % li considero positivi
end
else
spe2 = [];
end
% segmento di pertinenza dell'ultimo nodo
spelast = (NodiTLHRH(end,2)-((NodiTLHRH(rTLH-1,2)+NodiTLHRH(rTLHRH,2)))/2)*2;
SpeTLHRH = [spe0; spe1; spe2; spelast]; % raccolgo i segmenti di pertinenza
% Calcolo la posizione dello spostamento relativo
ps0 = Nodi(1,2); % posizione dell'ancora
if spe1 <= 1
ps1 = Nodi_HRH(1,2)+spe1; % la posizione del primo nodo TLHRH è data da ancora + segmento di pertinenza del primo nodo
else
ps1 = cell2mat(NodoTiltLinkHRH(1,3))+0.5;
end
ps2 = zeros(rTLHRH-1,1);
for j = 2:rTLHRH
if j == 2
if SpeTLHRH(j+1,1) <= 1
psj = ps1 + SpeTLHRH(j+1,1);
else
psj = cell2mat(NodoTiltLinkHRH(j,3))+0.5;
end
% la posizione a cui il nodo j di tipo Tilt Link H rileva lo spostamento è data dalla
% somma fra il suo segmento di pertinenza e la posizione a cui rileva lo spostamento
% il nodo precedente
psPrec = psj;
% mi serve come appoggio per il calcolo della posizione dello spostamento del nodo successivo
else
if SpeTLHRH(j+1,1) <= 1
psj = psPrec + SpeTLHRH(j+1,1);
else
psj = cell2mat(NodoTiltLinkHRH(j,3))+0.5;
end
psPrec = psj;
end
ps2(j-1,1) = psj;
end
PsTLHRH = [ps0; ps1; ps2];
for i = 2:rTLHRH+1
if SpeTLHRH(i) > 1
SpeTLHRH(i) = 1;
end
end
text = 'Segments of relevance of Tilt Link HR H defined correctly';
fprintf(fileID,fmt,text);
else
% Non ci sono nodi Tilt Link HR H
SpeTLHRH = [];
PsTLHRH = [];
text = 'Segments of relevance of Tilt Link HR H not defined';
fprintf(fileID,fmt,text);
end
%% PreConv Link
if yesPCL == 1
% Definizione dei segmenti di pertinenza dei singoli accelerometri
% SpePCL = Segmento di Pertinenza del nodo (posizione i-esima del nodo i-esimo)
NodiPCL = cell2mat(NodoPreConvLink(:,2:3));
% Costruisco il segmento di pertinenza
spe0 = 0; % segmento di pertinenza dell'ancora
spe1 = (NodiPCL(1,2) + NodiPCL(2,2))/2; % segmento di pertinenza del primo nodo, lo considero +
if rPCL > 2
spe2 = zeros(rPCL-2,1);
for i = 2:(rPCL-1)
media1 = (abs(NodiPCL(i,2)) + abs(NodiPCL(i-1,2)))/2;
media2 = (abs(NodiPCL(i,2)) + abs(NodiPCL(i+1,2)))/2;
spei = media2 - media1;
spe2(i-1,1) = spei; % li considero positivi
end
else
spe2 = [];
end
% segmento di pertinenza dell'ultimo nodo
spelast = (NodiPCL(end,2)-((NodiPCL(rPCL-1,2)+NodiPCL(rPCL,2)))/2)*2;
SpePCL = [spe0; spe1; spe2; spelast]; % raccolgo i segmenti di pertinenza
text = 'Segments of relevance of PreConv Link defined correctly';
fprintf(fileID,fmt,text);
else
% Non ci sono nodi PreConv Link
SpePCL = [];
text = 'Segments of relevance of PreConv Link not defined';
fprintf(fileID,fmt,text);
end
%% Pre Conv Link HR
if yesPCLHR == 1
% Definizione dei segmenti di pertinenza delle ampolle
NodiPCLHR = cell2mat(NodoPreConvLinkHR(:,2:3));
% Costruisco il segmento di pertinenza
spe0 = 0; % segmento di pertinenza dell'ancora
spe1 = (NodiPCLHR(1,2) + NodiPCLHR(2,2))/2; % segmento di pertinenza del primo nodo, lo considero +
if rPCLHR > 2
spe2 = zeros(rPCLHR-2,1);
for i = 2:(rPCLHR-1)
media1 = (abs(NodiPCLHR(i,2)) + abs(NodiPCLHR(i-1,2)))/2;
media2 = (abs(NodiPCLHR(i,2)) + abs(NodiPCLHR(i+1,2)))/2;
spei = media2 - media1;
spe2(i-1,1) = spei; % li considero positivi
end
else
spe2 = [];
end
% segmento di pertinenza dell'ultimo nodo
spelast = (NodiPCLHR(end,2)-((NodiPCLHR(rPCLHR-1,2)+NodiPCLHR(rPCLHR,2)))/2)*2;
SpePCLHR = [spe0; spe1; spe2; spelast]; % raccolgo i segmenti di pertinenza
text = 'Segments of relevance of PreConv Link HR defined correctly';
fprintf(fileID,fmt,text);
else
% Non ci sono nodi PreConv Link HR
SpePCLHR = [];
text = 'Segments of relevance of PreConv Link HR not defined';
fprintf(fileID,fmt,text);
end
%% Chiudo Testo
text = 'schemaSP function ended';
fprintf(fileID,fmt,text);
fclose(fileID);
end