function [Rain,RainCum,ARRAYdateRL,ErrRainLink] = CalcoloRain(Dati_RL,ARRAYdateRL,...
    DatiElabRainLink,NuovoZeroRL,NdatiMedia,ErrRainLink,rRL,margine,Unit,...
    IDcentralina,conn,FileName)

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

if NuovoZeroRL == 1
    if NdatiMedia == 1
        ini = 2;
        Rain_Rif = Dati_RL(2,:) - Dati_RL(1,:);
    else
        ini = round(NdatiMedia/2);
        if rem(NdatiMedia,2) == 0
            ini = ini+1;
        end
        ini = ini + margine;
        if ini < 6
            ini = 6;
        end
        Rain_Rif = Dati_RL(ini,:) - Dati_RL(ini-1,:);
    end
    ErrRainLink = ErrRainLink(ini:end,:)';
    Dati_RL = Dati_RL(ini:end,:);
    DatiElabRainLink = DatiElabRainLink(ini:end,:);
    ARRAYdateRL = ARRAYdateRL(ini:end,1); 
else
    ErrRainLink = ErrRainLink';
    [rR]=size(Dati_RL);
    if rR > 1
        Rain_Rif = Dati_RL(2,:) - Dati_RL(1,:);
    else
        Rain_Rif = Dati_RL(1,:);
    end
end

[r,c] = size(Dati_RL);
Rain = zeros(r,c);

comando = ['select type_id from units where name = ''' IDcentralina ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Type = cell2mat(curs.Data); 
if Type == 7 % NESA
   Rain = Dati_RL; 
else  
    if strcmp(Unit,'SwissMetNet')
        Rain = Dati_RL;
    else
        var = diff(Dati_RL',1,2);
        varT = var';
        [a,b] = size(varT);
        for ii = 1:a
            for jj = 1:b
                if varT(ii,jj) <0
                    varT(ii,jj) = 0; % in questo modo tengo conto degli eventuali azzeramenti del contatore
                end
                if ii == 1 && Rain_Rif(1,b) < 0
                    Rain_Rif(1,b) = 0;
                end
            end
        end
        Rain(1,:) = Rain_Rif;
        for ii = 2:r
            Rain(ii,:) = varT(ii-1,:);
        end
    end
end

if NuovoZeroRL == 0
    RainCum = cumsum(Rain);
else % se ho dati precedenti, devo sommarli a quelli
    [~,cE] = size(DatiElabRainLink);
    Rif_Rain = zeros(1,rRL);
    cont = 4;
    n = 1;
    while cont<=cE
         Rif_Rain(1,n) = cell2mat(DatiElabRainLink(1,cont)); % ultimo valore di cumulata definitivo su DB
         cont=cont+4;
         n = n+1;
    end
    RainCum_p = cumsum(Rain)-Rain(1,:); % cumulata dei nuovi dati
    [row,col] = size(Rain);
    RainCum = zeros(row,col);
    for i = 1:row
        for j = 1:col
            RainCum(i,j) = RainCum_p(i,j) + Rif_Rain(1,j);
        end
    end
end

text = 'Single and cumulated rain values calculated correctly. CalcoloRain function closed';
fprintf(fileID,fmt,text);
fclose(fileID);

end