function [T1,T2] = remove_pulses(T,Y,p,dt,comp,flag)
% массовая чистка выбросов (импульсов, spikes)
%
%               [T1,T2] = remove_pulses(T,Y,p,dt,comp,flag);
%
% T     - сериальная даты обрабатываемого массива
% Y     - обрабатывамый массив данных
% p     - параметр сглаживания (0 - прямая линия, 1 - чистый сплайн, 
%       по умолчанию - 0.99999)
% dt    - интервал между измерениями, в сек. (по умолчанию - 1 сек)
% comp  - код выбора составляющей (по умолчанию - "000")
% flag  - комментарий в конце строки

% 11.01.2019 - сменил флаги элеметов с "001" на "010" - для чистки D
% 14.11.2019 - можно задавать код выбора составляющей
% 18.07.2020 - убрал слово "pulse", чтобы уменьшить размер файла

if ~exist('p','var')
    p=0.99999;
end
if ~exist('dt','var')
    dt=1;
end
if ~exist('comp','var')
    comp='000';
end
if ~exist('flag','var')
    flag='';
end

Ys=csaps(T(~isnan(Y)),Y(~isnan(Y)),p,T);

figure
plot(T,Y-Ys,'.-'),datetick('x')
disp('!!! Нужно увеличить фрагмент с выбросами и нажать клавишу...')
pause

Lim=ginput(2);
T1=Lim(1,1); T2=Lim(2,1); % пределы по времени
y1=Lim(2,2); y2=Lim(1,2); % пределы по величине

kt=between_my(T,T1,T2); % отбор по времени
Ts=T(kt); dY=Y(kt)-Ys(kt);
ky=between_my(dY,y1,y2); % отбор по амплитуле
plot(Ts,dY,'.-',Ts(ky),dY(ky),'rx','MarkerSize',4),datetick('x')

dY01=dY; dY01(ky)=0; dY01(~ky)=1;   % превращаем в строгий меандр "0-1"
N0=find(abs(diff(dY01))>0.9);       % ищем границы каждого цикла

Ts1=[];Ts2=[];
kk=1;
for k=1:2:length(N0)
    Ts1(kk)=Ts(N0(k))-(dt/2)/86400;
    Ts2(kk)=Ts(N0(k+1)+1)+(dt/2)/86400;
    kk=kk+1;
end
Ts1=Ts1(:); Ts2=Ts2(:);

% объединяем перекрывающиеся каналы
N=length(Ts1);
kc=1; T1(kc)=Ts1(1); T2(kc)=Ts2(1);
for k=1:N-1
    if Ts1(k+1)<=Ts2(k) % массивы перекрываются
        T2(kc)=Ts2(k+1);
    else
        kc=kc+1;
        T1(kc)=Ts1(k+1); T2(kc)=Ts2(k+1);
        continue
    end
end
T1=T1(:); T2=T2(:);

T0=fix(mean(T));
th1=(T1-T0)*24; th2=(T2-T0)*24; N=length(th1);
[year,month,day]=datevec(ones(N,1)*T0);
tmp=[year month day th1 th2];
fid=fopen('meandr_removed.dat','wt');
for k=1:N,
    fprintf('%4d %02d %02d %07.4f %07.4f %s %% %s\n',tmp(k,:),comp,flag);
    fprintf(fid,'%4d %02d %02d %07.4f %07.4f %s %% %s\n',tmp(k,:),comp,flag);
end
fclose(fid);

disp('!!! Если нормально, нажми пробел...')
pause
close % закрываем текущее окно, чтобы не плодить

end
