function [tlim,dx] = vertical_jump(t,x,T0)
%Интерактивная подгонка (смещение) фргмента кривой по вертикали
%       [tlim,dx] = vertical_jump(t,x[,T0]);
% t,x - ряд, для которого делается подгонка. Например, если
%       нарисовано plot(thj,Zj-53000), то вызов будет
%       [tlim,dZshift]=vertical_jump(thj,Zj-ZZ)
%  T0 - сериальная дата текущих суток (если задано, то выводится
%       форматированная строка)
% tlim - левая и правая границы смещаемого фрагмента
%   dx - итоговая величина смещения, рисуется как title для subplot
%
% После вызова ф-ции:
% - выделить левую и правую границу кривой, которую нужно смещать
% (крестом на графике) - она пометится точками
% - затем графическим курсором отметить место, куда нужно сместить кривую
% по вертикали (обычно - у левой или правой границы). Кривая прорисуется в
% новом положении
% - если это положение устраивает - нажимаем букву "e" (англ., от End),
% будет сделан выход из ф-ции
% - если не устраивает, нажать "Пробел" и отметить новое положение. Так
% повторяем, пока не будет нормально
% - если нужно завершить - в командном окне нажать Ctrl-C
%
% Границы по времени будут в тех же единицах, что и ось времени. Если в
% часах, то можно Tlim=T0+tlim/24; datestr(Tlim)

% 07.09.2022 - Sergey Y. Khomutov, Geophysical observatory "Paratunka"

fig_id=gcf; % handle of active figure

% задаём границы интервала по времени
[tlim,xlim]=ginput(2);
ksel=between_my(t,tlim(1),tlim(2));
hold on, plot(t(ksel),x(ksel),'.'), hold off

%
disp('Устанавливаете новое место для фрагмента (<e> - если конец)')
while 1
    [tnew,xnew]=ginput(1);
%     disp([tnew xnew])
    % ищем ближайшую по времени точку
    knew=find(abs(t-tnew)==min(abs(t-tnew)));
    dx=xnew-x(knew);
    hold on
        plot(t(ksel),x(ksel)+dx,'.-','Color',[rand rand rand])
        title(sprintf('Смещение ... %+f',dx))
    hold off
    waitforbuttonpress;
    key=get(fig_id,'CurrentCharacter');
    if (key == 'e')
        display('...Закончили...')
        break;
    else
        display('Enter next point')
    end
end
if exist('T0','var') % задано T0
    Tlim=T0+tlim/24;
    disp(sprintf('%s %s %+07.3f\n',...
        datestr(Tlim(1), 'yyyy mm dd HH MM SS'),...
        datestr(Tlim(2), 'yyyy mm dd HH MM SS'),...
        dx))
end

