function [Year,D,I,H,X,Y,Z,F]=yearmean_read_fun(file,que,fig,jump);
%
% Считывание среднегодовых данных из файла в стандарте INTERMAGNET
%
% [Year,D,I,H,X,Y,Z,F]=yearmean_read_fun(file,que,fig,jump);
%
% file - имя файла с данными
%  que - тип данных ('A' - All,'Q' - Quiet, 'D' - Disturbed)
%  fig - если = 1 - нарисовать (по умолчанию - не рисуем)
% jump - если = 1 - учитываем скачки
%
% Year - дата в годах
% D,I,H,X,Y,Z,F - среднегодовые значения (D,I - в град., остальн - нТл)
%
% скачки не учитываются

% 11.04.2009 - Хомутов С.Ю.
% 01.05.2011 - исправлена ошибка при вычислении D и I с отрицательными
%               значениями
% 28.02.2015 - исправлена ошибка при вычислении D и I с отрицательными
%               значениями
%            - сделан учет скачков
% 14.03.2015 - исправлена ошибка при вычислении D,I при отриц. значениях
% 10.03.2019 - D приводится к диапазону -180...+180
% 17.09.2019 - выводим заголовок (кооринаты)

switch nargin,
    case 1,
        que='A',fig=0; jump=1;
    case 2,
        fig=0; jump=1;
    case 3,
        jump=1;
end

if ~exist(file,'file'),
    error('!!! Yearmean data file do not found !!!')
end

fid=fopen(file,'rt');
tmpA=[]; tmpQ=[]; tmpD=[]; tmpI=[]; tmpJ=[];
while 1,
    str=fgetl(fid);
    if str==-1, break, end  % конец файла
    if length(str)<10, continue, end  % нет информации
    if ~isempty(strfind(lower(str),'colat')),   % координаты
        k=strfind(str,':');
        Lat=90-str2num(str(k(1)+1:k(1)+6));
        Lon=str2num(str(k(2)+1:k(2)+6));
        Elevation=str2num(str(k(3)+1:k(3)+4));
    end
    if ~isempty(str2num(str(1:10))),            % данные
        k=find(isletter(str));                  % коды данных, напр., "A DHZF"
        switch upper(str(k(1))),
            case 'A',   % all days
                tmpA=[tmpA; str2num(str(1:k(1)-1))];
            case 'Q',   % quiet days
                tmpQ=[tmpQ; str2num(str(1:k(1)-1))];
            case 'D',   % disturbed days
                tmpD=[tmpD; str2num(str(1:k(1)-1))];
            case 'I',   % Incomplite
                tmpI=[tmpI; str2num(str(1:k(1)-1))];
            case 'J',   % jumps
                tmpJ=[tmpJ; str2num(str(1:k(1)-1))];
        end
    end
end
fclose(fid);

[m,n]=size(tmpI);
tmpA=[tmpA; tmpI(1:3:m,:)];
[tmp,k]=sort(tmpA(:,1)); tmpA=tmpA(k,:);
if ~isempty(tmpQ),
    tmpQ=[tmpQ; tmpI(2:3:m,:)];
    [tmp,k]=sort(tmpQ(:,1)); tmpQ=tmpQ(k,:);
end
if ~isempty(tmpD),
    tmpD=[tmpD; tmpI(3:3:m,:)];
    [tmp,k]=sort(tmpD(:,1)); tmpD=tmpD(k,:);
end

switch upper(que)
    case 'A'
        Year=tmpA(:,1);
        D=dms_deg(tmpA(:,2),tmpA(:,3),zeros(length(tmpA(:,2)),1));
        I=dms_deg(tmpA(:,4),tmpA(:,5),zeros(length(tmpA(:,4)),1));
        H=tmpA(:,6); X=tmpA(:,7); Y=tmpA(:,8); Z=tmpA(:,9); F=tmpA(:,10);
    case 'Q'
        if ~isempty(tmpQ),
            Year=tmpQ(:,1); 
            D=dms_deg(tmpQ(:,2),tmpQ(:,3),zeros(length(tmpQ(:,2)),1));
            I=dms_deg(tmpQ(:,4),tmpQ(:,5),zeros(length(tmpQ(:,4)),1));
            H=tmpQ(:,6); X=tmpQ(:,7); Y=tmpQ(:,8); Z=tmpQ(:,9); F=tmpQ(:,10);
        else
            error('!!! No data !!!')
        end
    case 'D'
        if ~isempty(tmpD),
            Year=tmpD(:,1); 
            D=dms_deg(tmpD(:,2),tmpD(:,3),zeros(length(tmpD(:,2)),1));
            I=dms_deg(tmpD(:,4),tmpD(:,5),zeros(length(tmpD(:,4)),1));
            H=tmpD(:,6); X=tmpD(:,7); Y=tmpD(:,8); Z=tmpD(:,9); F=tmpD(:,10);
        else
            error('!!! No data !!!')
        end
end

% заменяем пропуски NaN-ми
D(abs(D)>900)=NaN;
I(abs(I)>900)=NaN;
H(H>99999)=NaN; Z(Z>99999)=NaN; F(F>99999)=NaN;
X(X>99999)=NaN; Y(Y>99999)=NaN;

% приводим D к диапазону -180...+180
D(D>180)=D(D>180)-360;

% корректируем скачки, если необходимо
if jump==1,
    kj=find(rem(Year,1)==0); Nj=length(kj); % скачки в YYYY.000
    dDj=D(kj); dIj=I(kj); dHj=H(kj); 
    dXj=X(kj); dYj=Y(kj); dZj=Z(kj); dFj=F(kj);
    for k=Nj:-1:1,
        kk=Year<Year(kj(k));
        D(kk)=D(kk)-dDj(k);
        I(kk)=I(kk)-dIj(k);
        H(kk)=H(kk)-dHj(k);
        X(kk)=X(kk)-dXj(k);
        Y(kk)=Y(kk)-dYj(k);
        Z(kk)=Z(kk)-dZj(k);
        F(kk)=F(kk)-dFj(k);
    end
end

% убираем записи с величиной скачков
k=rem(Year,1)~=0;
Year=Year(k); D=D(k); I=I(k); H=H(k); X=X(k); Y=Y(k); Z=Z(k); F=F(k);

if fig==1,      % рисуем
    HH=base_to_extract(H);
    XX=base_to_extract(X);
    YY=base_to_extract(Y);
    ZZ=base_to_extract(Z);
    FF=base_to_extract(F);

    figure(1)
    subplot(311),plot(Year,X-XX,'o-')
    axis tight; ylabel(['X' sprintf('%+d',XX)])
    subplot(312),plot(Year,Y-YY,'o-')
    axis tight; ylabel(['Y' sprintf('%+d',YY)])
    subplot(313),plot(Year,Z-ZZ,'o-')
    axis tight; ylabel(['Z' sprintf('%+d',ZZ)])

    figure(2)
    subplot(311),plot(Year,D,'o-')
    axis tight; ylabel('D, deg.')
    subplot(312),plot(Year,I,'o-')
    axis tight; ylabel('I, deg')
    subplot(313),plot(Year,F-FF,'o-')
    axis tight; ylabel(['F' sprintf('%+d',FF)])
end
