function [th,dH,dD,dZ,TR,par]=read_mvs_fun(date_str,time_lim,path_data,code_units,spike_lim);
% Считывание данных ЦМВС из суточного файла длЯ требуемого времени UT
%
% [th,dH,dD,dZ,TR,par]=read_mvs_fun(date_str,hours,path_data,code_units,spike_lim);
%
% date_str      - дата в формате "DD.MM.YYYY"
% time_lim      - начальное и конечное времЯ UT, длЯ которого требуютсЯ данные
%                 [ut1 ut2]
% path_data     - путь к файлу данных (вида C:\users\data\).
%                 По умолчанию - в подкаталоге D:\USERS\DATA\CMVS\..
% code_units    - определяет вывод данных:
%                   0 - мВ; 1 - нТл/arc.min, oC (по умолчанию)
% spike_lim     - значение для отбраковки выбросов (если 0 - не
%                   отбраковываются), если вектор - то раздельно 
%                   для каналов H,D,Z,TR
% ====
% th            - моменты измерений ЦМВС в час.
% dH,dD,dZ      - данные (магнитные)
% TR            - температура
% par           - коэффициенты преобразования

% 01.05.2010    - С.Ю. Хомутов
% 23.05.2010    - добавлена передача структуры с параметрами
% 12.12.2012    - вывод информации о критических ошибках таймера - в
%                   time_critical.log

if nargin<3,
    path_data='..\DATA\CMVS\';   % пусть к данным по умолчанию
    code_units=1;       % данные в физ. единицах по умолчанию
    spike_lim=[10 10 10];   % величина отбраковка выбросов (градиент нТл/сек)
end
if length(spike_lim)==1, % делаем вектор, если пределы выброса заданы одним значением
    spike_lim=ones(1,3)*spike_lim;
end
file=[path_data date_str(7:10) '_' date_str(4:5) ...
           '\C_' date_str(9:10) date_str(4:5) date_str(1:2) '.dat'];
if exist(file,'file')==0,
%     error(['Не могу найти файл ... ' file])
    disp(['Не могу найти файл ... ' file])
    th=[];dH=[];dD=[];dZ=[];TR=[];par=[];
    % выбираем необходимые коэф-ты преобразованиЯ ЦМВС
    Tser0=my_datenum(date_str);
    par=conversion_read(Tser0,'..\DATA\Ini_parameters\Conversion_cmvs.dat');
    if code_units==1,
        disp(['-------------   ' datestr(Tser0) '  ----------------']);
        disp(['Use the instrumental parameters for date - ' datestr(par.T)])
        fprintf('GD, GH, GZ, (GT, shift T)    ... %+7.4f, %+7.4f, %+7.4f, %+7.4f, %+6.1f\n',...
            par.GD,par.GH,par.GZ,par.GT,par.T_shift)
        fprintf('K(dD/dT), K(dH/dT), K(dZ/dT) ... %+7.4f, %+7.4f, %+7.4f\n',...
            par.K_dDdT,par.K_dHdT,par.K_dZdT)
    end
    return
end

Tser0=my_datenum(date_str);
% выбираем необходимые коэф-ты преобразованиЯ ЦМВС
par=conversion_read(Tser0,'..\DATA\Ini_parameters\Conversion_cmvs.dat');
if code_units==1,
    disp(['-------------   ' datestr(Tser0) '  ----------------']);
    disp(['Use the instrumental parameters for date - ' datestr(par.T)])
    fprintf('GD, GH, GZ, (GT, shift T)    ... %+7.4f, %+7.4f, %+7.4f, %+7.4f, %+6.1f\n',...
        par.GD,par.GH,par.GZ,par.GT,par.T_shift)
    fprintf('K(dD/dT), K(dH/dT), K(dZ/dT) ... %+7.4f, %+7.4f, %+7.4f\n',...
        par.K_dDdT,par.K_dHdT,par.K_dZdT)
%     fprintf('K(dZ/dH) ....................... %+7.4f\n',par.K_dZdH)
%     fprintf('K(dH/dZ) ....................... %+7.4f\n',par.K_dHdZ)
end

tmp=load(file);
th=dms_deg(tmp(:,1:3));
% выбираем данные из заданного интервала времени
k=between(th,time_lim(1),time_lim(2),'11');
th=th(k);

if code_units==1,   % значения в натур. единицах
    dH=tmp(k,4)*par.GH; dD=tmp(k,5)*par.GD; dZ=tmp(k,6)*par.GZ; 
    TR=tmp(k,7)*par.GT+par.T_shift;
    fprintf('Чистка выбросов в каналах H,D,Z по уровням %2d, %2d, %2d нТл\n',...
              spike_lim');
    if spike_lim>0,    % отбраковка выбросов
        dH=spike_remove(th,dH,spike_lim(1));
        dD=spike_remove(th,dD,spike_lim(2));
        dZ=spike_remove(th,dZ,spike_lim(3));
    end
else                % значения в мВ, отбраковки нет
    dH=tmp(k,4); dD=tmp(k,5); dZ=tmp(k,6);
    TR=tmp(k,7);
%     par=[];
end

% контроль таймера
k_err=find([1;diff(th)*3600]<=0);
if ~isempty(k_err),
    disp('ВНИМАНИЕ! Есть критические ошибки таймера (см. time_critical.log)')
    fid=fopen('time_critical.log','wt');
    fprintf(fid,'hhmm.sss ---> Critical timer errors\n');
    fprintf(fid,'%08.3f\n',deg2dms(th(k_err)'));
    fclose(fid);
end
k_gaps=find([1;diff(th)*3600]>=2);
if ~isempty(k_gaps),
    disp('ВНИМАНИЕ! Есть пропуски данных (см. time.log)')
    fid=fopen('time.log','wt');
    fprintf(fid,'hhmm.sss ---> Gaps in data\n');
    fprintf(fid,'%08.3f\n',deg2dms(th(k_gaps)'));
    fclose(fid);
end
