function [hh,mm,ss,dx,dy,dz,heat1,heat2]=lemi_read_fun(date0,hours,data_path,flag)
% Считывание данных LEMI-008 из исходных часовых файлов типа Ldd_hhmm.MMM
% и восстановление пропусков в 04m22s
% Выполняется учет разворота блока датчиков
%
%  [hh,mm,ss,dx,dy,dz,heat1,heat2]=lemi_read_fun(date0,hours,data_path);
%
% date0 - дата (string) в формате 'DD.MM.YYYY'
% hours - часы (UT), длЯ которых требуетсЯ извлечь данные
% data_path     - каталог с суточными ZIP-архивами
%
% hh,mm,ss      - часы, минуты, секунды времени измерений
% dx,dy,dz      - измеренные вариации (нТл), разворот датчиков (углы
%                   Эйлера) учтен
% heat1,heat2   - температура блока датчиков и блока электроники (град.С)
% flag          - 1 - выводим список часовых файлов, 0 - без вывода (по
%                   умолчению)

% 01.05.2010    - Хомутов С.Ю. (адаптировано из lemi_read_ini.m)
%               - консольное UNZIP.exe заменено на матлабовскую unzip()
%               - данные считываются для заданного интервала времени
%               - для MatLab вер.7 и выше используетcz textscan()
%               - заложен учет разворота датчиков
% 05.08.2010    - при полном отсутствии данных за сутки выход по ошибке
%                   error() замен на return 
%                   с hh=0; mm=0; ss=0; dx=NaN; dy=NaN; dz=NaN; ... 
% 06.04.2019    - вывод списка считываемых файлов задаётся флагом

LEMI_length_rec=45;     % длина записи в файл LEMI-008, включаЯ CR и LF
lemi_fmt='%d:%d:%d %f %f %f %d %d'; % формат записи данных LEMI
ML_ver=version;

if nargin<3
    data_path='..\data\lemi\';  % каталог с архивами часовых файлов
    flag=0;
elseif nargin<4
    flag=0;
end
temp_dir='data_hour';    % каталог для извлечения часовых файлов из ZIP-архивов

T0=my_datenum(date0);
[year,mon,day]=datevec(T0);
T0_str=datestr(T0);
t_str=datestr(datenum(year,mon,day,hours,0,0),0);
th1=fix(hours(1)); th2=fix(hours(2));   % начальный и конечный час

% Извлекаем часовые файлы из суточного архива
% file_zip=[data_path date0(7:10) '_' date0(4:5)...
%                  '\lemi' date0(4:5) date0(1:2) '.zip'];
file_zip=[data_path date0(7:10) '\lemi_' date0(7:10) date0(4:5) date0(1:2) '.zip'];
if ~exist(file_zip),
    disp('!!! Нет данных для LEMI-008 !!!')
    hh=0;mm=0;ss=0;dx=NaN;dy=NaN;dz=NaN;heat1=NaN;heat2=NaN;
    return
end
unzip(file_zip,temp_dir);
% Считываем список файлов за нужную дату
D=dir([temp_dir '\L' date0(1:2) '*.' T0_str(4:6)]);
% n_files=length(D);
% сортировка?
file=char(D.name);

% Выбираем файлы для часов в заданных пределах
kf=find(ismember(str2num(file(:,5:6)),(th1:th2)'));
if isempty(kf), 
%     error('!!! Нет данных длЯ LEMI-008 !!!') 
    disp('!!! Нет данных для LEMI-008 !!!')
    hh=0;mm=0;ss=0;dx=NaN;dy=NaN;dz=NaN;heat1=NaN;heat2=NaN;
    return
end
file=sortrows(file(kf,:)); DD=D(kf);
n_file=length(DD);   % кол-во требуемых файлов

% контроль формата записи (по длине строки)
n_rec=0;
for kf=1:n_file,
    if rem(DD(kf).bytes,LEMI_length_rec)~=0,
        error(['Ошибка формата записи в файле -> ' file(kf,:)]);
    end
    n_rec=n_rec+DD(kf).bytes/LEMI_length_rec;   % кол-во записей в файлах
end

% инициализациЯ массивов
hh=zeros(n_rec,1); mm=zeros(n_rec,1); ss=zeros(n_rec,1);
dx=zeros(n_rec,1); dy=zeros(n_rec,1); dz=zeros(n_rec,1);
heat1=zeros(n_rec,1); heat2=zeros(n_rec,1);

n1=0;
for kf=1:n_file,
    if flag==1, disp(file(kf,:)); end
    D=dir([temp_dir '\' file(kf,:)]);
    n_rec=D.bytes/LEMI_length_rec;
    fid=fopen([temp_dir '\' file(kf,:)],'r');
    if ML_ver(1)>'6',
            C=textscan(fid,lemi_fmt);   % структура, считанная по формату
        fclose(fid);
        n2=n1+n_rec;
        tmp=cell2mat(C(1:3));      % время (hh mm ss)
            hh(n1+1:n2,1)=tmp(:,1);
            mm(n1+1:n2,1)=tmp(:,2);
            ss(n1+1:n2,1)=tmp(:,3);
        tmp=cell2mat(C(4:6));      % магнитные данные (dx dy dz)
            dx(n1+1:n2,1)=tmp(:,1);
            dy(n1+1:n2,1)=tmp(:,2);
            dz(n1+1:n2,1)=tmp(:,3);
        tmp=cell2mat(C(7:8));      % температура (TR1 TR2)
            heat1(n1+1:n2,1)=tmp(:,1);
            heat2(n1+1:n2,1)=tmp(:,2);
    else
        tmp=fread(fid,[LEMI_length_rec, n_rec]);% считываем бинарно
        fclose(fid);
        tmp=char(tmp');                         % превращаем в символьный массив
        n2=n1+n_rec;
        hh(n1+1:n2,1)=str2num(tmp(:,1:2));
        mm(n1+1:n2,1)=str2num(tmp(:,4:5));
        ss(n1+1:n2,1)=str2num(tmp(:,7:8));
        dx(n1+1:n2,1)=str2num(tmp(:,10:17));
        dy(n1+1:n2,1)=str2num(tmp(:,19:26));
        dz(n1+1:n2,1)=str2num(tmp(:,28:35));
        heat1(n1+1:n2,1)=str2num(tmp(:,37:39));
        heat2(n1+1:n2,1)=str2num(tmp(:,41:43));
    end
    n1=n2;
end

% удалЯем пропуски в HH:04:22 (если есть)
% lemi=lemi_gps_correct([hh mm ss dx dy dz heat1 heat2]);

% учитываем поворот датчика
[FI,TETA,PSI]=lemi_angles_rot_select(T0);  % углы поворота LEMI-008
Arot=rot_matrix(FI,TETA,PSI);
[dx,dy,dz]=vec_rotation(dx,dy,dz,Arot);
