% Filtro che considera 2 deviazioni standard in una finestra centrata di
% due settimane (una in avanti e una all'indietro) e mette a zero lo
% spsotamento se è inferiore a tale valore
% E' previsto un secondo filtro forfettario se lo spostamento è minore di
% un determinato valore

function [dNS,dEO,dZ] = filtro(dNS,dEO,dZ,Ndevst,Wdevst,FileName)

fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'filtro function started';
fprintf(fileID,fmt,text);

dNS = dNS';
dEO = dEO';
dZ = dZ';
calcoloNS = dNS;
calcoloEO = dEO;
calcoloZ = dZ;
[r,c]=size(dNS); % riga date, colonna nodi
filtroNS = zeros(r,c);
filtroEO = zeros(r,c);
filtroZ = zeros(r,c);
finestra = Wdevst;
N_dev_st = Ndevst;
contN = 0;
contE = 0;
contZ = 0;

for j = 1:c % nodi
    for i = 1:r
        if r <= finestra/2 - 0.5
            varNS = 0;
            varEO = 0;
            varZ = 0;
        else
            if i <= finestra/2 - 0.5
                varNS = calcoloNS(1:i+(finestra/2-0.5),j);
                varEO = calcoloEO(1:i+(finestra/2-0.5),j);
                varZ = calcoloZ(1:i+(finestra/2-0.5),j);
            elseif i >= (finestra/2+0.5) && i <= (r-(finestra/2-0.5))
                varNS = calcoloNS((i-(finestra/2-0.5)):(i+(finestra/2-0.5)),j);
                varEO = calcoloEO((i-(finestra/2-0.5)):(i+(finestra/2-0.5)),j);
                varZ = calcoloZ((i-(finestra/2-0.5)):(i+(finestra/2-0.5)),j);
            elseif i > (r-(finestra/2-0.5))
                varNS = calcoloNS((i-(finestra/2-0.5):r),j);
                varEO = calcoloEO((i-(finestra/2-0.5):r),j);
                varZ = calcoloZ((i-(finestra/2-0.5):r),j);
            end
        end
        % Nord Sud
        filtroNS(i,j) = N_dev_st*std(varNS);
        if abs(dNS(i,j)) <= filtroNS(i,j)
            if abs(dNS(i,j)) ~=  0
               contN = contN+1;
            end                
            dNS(i,j) = 0;
        end
        % Est Ovest
        filtroEO(i,j) = N_dev_st*std(varEO);
        if abs(dEO(i,j)) <= filtroEO(i,j)
           if abs(dEO(i,j)) ~=  0
               contE = contE+1;
            end 
            dEO(i,j) = 0;
        end
        % Z
        filtroZ(i,j) = N_dev_st*std(varZ);
        if abs(dZ(i,j)) <= filtroZ(i,j)
            if abs(dZ(i,j)) ~=  0
                contZ = contZ+1;
            end 
            dZ(i,j) = 0;
        end
    end
end

dNS = dNS';
dEO = dEO';
dZ = dZ';

textN = [num2str(contN) ' data filtered along North-South direction'];
textE = [num2str(contE) ' data filtered along East-West direction'];
textD = [num2str(contZ) ' data filtered along Down direction'];
fprintf(fileID,fmt,textN);
fprintf(fileID,fmt,textE);
fprintf(fileID,fmt,textD);
text = 'filtro function closed';
fprintf(fileID,fmt,text);
fclose(fileID);

end