% 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