function [To,Co,Ta,Ca,dF,comp]=blv_control_fun(file_or_year,obs_code,file_path,plot_code)
% чтение данных из файла базисных значение (стандарт Интермагнета)
%
% [To,Co,Ta,Ca,dF,comp]=blv_control_fun(file_or_year,obs_code[,file_path[,plot_code]]);
%
% file_or_year - имя файла в виде CodYYYY*.* или год
%  obs_code - код обсерватории (например, nvs или aaa) или код графика
%               plot_code
% file_path - путь к файлу с данными. 
%             По умолчанию - cd\КОД_ОБСЕРВАТОРИИ\ГОД
% plot_code - 1 -рисуем (по умолчанияю), 0 - не рисуем
%
% To,Ta - сериальная дата набл. и принятых базисных
% Co,Ca - матрицы базисных значений компонент, перечисленных в comp
%    dF - разности F(Var)-F(ppm)
%  comp - компоненты, для которых представлены базисные, например, XYZF

% 08.11.2008 - Хомутов С.Ю., Новосибирск
% 22.03.2010 - адаптировано под два формата базисных IBF v1.11 (до 2009) 
%              и v2.00 (c 2009 г.)
% 18.05.2010 - добавлен пропуск данных с "88888.00"
% 12.03.2012 - сделан вывод графика "базисных" F (градиента dFgrad)
% 16.11.2013 - возможность указать файл базисных напрямую
% 26.05.2018 - проверка наличия файла. При отсутствии выводится сообщение и
%               все выходные аргументы инициализируются как пустые =[]

if isstr(file_or_year), % дается только имя файла в виде CODYYYY*.*
    year=str2num(file_or_year(4:7));
    plot_code=obs_code;
    obs_code=file_or_year(1:3);
    file=file_or_year;
else
    year=file_or_year;
    if year<2000, 
        yy=sprintf('%02d',year-1900);
    elseif year<2009,
        yy=sprintf('%02d',year-2000);
    else
        yy=sprintf('%04d',year);
    end
    if nargin<3,    % путь к файлу не указан
        file_path=['CD\' obs_code '\' sprintf('%4d',year) '\'];
        plot_code=1;
    elseif nargin<4,
        plot_code=1;
    elseif isempty(file_path),
        file_path=['CD\' obs_code '\' sprintf('%4d',year) '\'];
    end
    file=[file_path obs_code yy '.blv'];
end

if ~exist(file,'file'),
    disp(['!!! Не могу найти файл ' file])
    To=[];Co=[];Ta=[];Ca=[];dF=[];comp=[];
    return
end

fid=fopen(file,'rt');
inform_line=fgetl(fid); % first line as "XYZF 18955 BEL 2000"
comp=inform_line(1:3);
% проверяем какой формат в файле (смотрим кол-во пробелов)
k=findstr(inform_line,' ');
if length(k)==3,
    ibf_ver=111; Kc=3;
    comp=inform_line(1:3);
else
    ibf_ver=200; Kc=4;
    comp=inform_line(1:4);
end
% if isempty(findstr(lower(inform_line),lower(obs_code)))
%     error('??? Code of station error ???')
% end
% if isempty(findstr(inform_line,sprintf('%4d',year)))
%     error('??? Year (file ~= data) error ???')
% end

% Observed data
ndo=[]; Co=[];
while 1,
    str=fgetl(fid);
    if ~isempty(findstr(str,'*')), break, end % end of processing of init data
    tmp=str2num(str);
    ndo=[ndo; tmp(1)];
    Co=[Co; tmp(2:Kc+1)];
end

%Adopted data
nda=[]; Ca=[]; dF=[];
while 1,
    str=fgetl(fid);
    if ~isempty(findstr(str,'*')), break, end % end of processing of init data
    if ibf_ver==111,
        tmp=str2num(str);
    else
        tmp=str2num(str(1:length(str)-1));
    end
    nda=[nda; tmp(1)];
    Ca=[Ca; tmp(2:Kc+1)];
    dF=[dF;tmp(Kc+2)];
end
fclose(fid);

Co(fix(Co)==99999)=NaN; Co(fix(Co)==88888)=NaN;
Ca(fix(Ca)==99999)=NaN; Ca(fix(Ca)==88888)=NaN;
if ibf_ver==111,
    dF(fix(dF)==9999)=NaN;
    Co=Co/10; Ca=Ca/10;
    dF=dF/10;
    k=findstr('D',comp);
    Co(:,k)=Co(:,k)/10; Ca(:,k)=Ca(:,k)/10;
    kp=3;
else
    Co(fix(Co(:,4))==999 | fix(Co(:,4))==888,4)=NaN;
    Ca(fix(Ca(:,4))==999 | fix(Ca(:,4))==888,4)=NaN;
    dF(fix(dF)==999 | fix(dF)==888)=NaN;
    kp=4;
end

T0=datenum(year,1,1)-1;
To=T0+ndo; [yyyo,mmmo,dddo]=datevec(To);
Ta=T0+nda; [yyya,mmma,ddda]=datevec(Ta);

units=repmat(', nT   ',3,1);
k=findstr('D',comp);
if ~isempty(k),
    units(k,:)=',arcmin';
end
k=findstr('I',comp);
if ~isempty(k),
    units(k,:)=',arcmin';
end

if plot_code==1,
    CC1=base_to_extract(Co(:,1));
    CC2=base_to_extract(Co(:,2));
    CC3=base_to_extract(Co(:,3));

    figure(1)
    subplot(kp,1,1), hndl=plot(To,Co(:,1)-CC1,'ro',Ta,Ca(:,1)-CC1,'b.');
    datetick('x',3)
    set(hndl,'MarkerFaceColor','r')
    title(['Baseline values for Observatory ' upper(obs_code) '; year ' num2str(year)])
    ylabel([inform_line(1) '-' num2str(CC1) units(1,:)])

    subplot(kp,1,2), hndl=plot(To,Co(:,2)-CC2,'ro',Ta,Ca(:,2)-CC2,'b.');
    datetick('x',3)
    set(hndl,'MarkerFaceColor','r')
    ylabel([inform_line(2) '-' num2str(CC2) units(2,:)])

    subplot(kp,1,3), hndl=plot(To,Co(:,3)-CC3,'ro',Ta,Ca(:,3)-CC3,'b.');
    datetick('x',3)
    set(hndl,'MarkerFaceColor','r')
    ylabel([inform_line(3) '-' num2str(CC3) units(3,:)])

    if kp==4,
        subplot(kp,1,4)
        plot(To,Co(:,4),'ro',Ta,Ca(:,4),'b.','MarkerFaceColor','m');
        datetick('x',3), ylabel('dF\_Grad, nT')
    end

    figure(2)
    subplot(411), hndl=plot(To,Co(:,1)-CC1,'ro',Ta,Ca(:,1)-CC1,'b.');
    datetick('x',3)
    axis tight
    set(hndl,'MarkerFaceColor','r')
    title(['Baseline values for Observatory ' upper(obs_code) '; year ' num2str(year)])
    ylabel([inform_line(1) '-' num2str(CC1) units(1,:)])

    subplot(412), hndl=plot(To,Co(:,2)-CC2,'ro',Ta,Ca(:,2)-CC2,'b.');
    datetick('x',3)
    axis tight
    set(hndl,'MarkerFaceColor','r')
    ylabel([inform_line(2) '-' num2str(CC2) units(2,:)])

    subplot(413), hndl=plot(To,Co(:,3)-CC3,'ro',Ta,Ca(:,3)-CC3,'b.');
    datetick('x',3)
    axis tight
    set(hndl,'MarkerFaceColor','r')
    ylabel([inform_line(3) '-' num2str(CC3) units(3,:)])

    subplot(414), plot(Ta,dF,'r.-');
    datetick('x',3)
    axis tight
    ylabel('F-P, nT')
end
