%% строка 1: Пустая строка (Blank line)
%% строка 2: Шапка + данные о ПО(если это первый кадр в файле)
%% строка 3: 5 значений
FRAME.N_record_bin = z{1}(1);   %1. Номер записи в двоичном файле, откуда был взят этот EDR.(Number of the record in the binary file from where this EDR was taken.)
FRAME.N_EDR_bin = z{1}(2);      %2. Номер EDR в записи в двоичном файле (1-3).(Number of the EDR within the record in the binary file (1-3).)
FRAME.SatID = z{1}(3);           %3. ID спутника.(Satellite Flight ID (two digit integer))
FRAME.year = fix(z{1}(4)/1e4);  %4. Год, месяц, день, час, минута
FRAME.month = mod(fix(z{1}(4)/1e2),1e2);
FRAME.day = mod(z{1}(4),1e2);
FRAME.hour = fix(z{1}(5)/1e2);
FRAME.minute = mod(z{1}(5),1e2);
%% строка 4:  ЭФЕМЕРИДА (EPHEMERIS)
%% строки 5-7: по 6 значений  
for i=0:2
    a = textscan(frame(5+i).str,'%f','EmptyValue',-Inf);
    if length(a{1})==6 HEALTH=HEALTH+1; end
    % данные на секунде 00 20 40 (i=0 1 2)
    FRAME.GeoLat(i+1)=a{1}(1);     % 1. Географическая широта (градусы, север)(Geographic latitude (degrees, north))
    FRAME.GeoLong(i+1)=a{1}(2);    % 2. Географическая долгота (градусы, восток)(Geographic longitude (degrees, east))
    FRAME.ApLat(i+1)=a{1}(3);      % 3. Вершинная широта (градусы, север)(Apex latitude (degrees, north))
    FRAME.ApLong(i+1)=a{1}(4);     % 4. Вершинная долгота (градусы, восток)(Apex longitude (degrees, east))
    FRAME.ApLocalTime(i+1)=a{1}(5);% 5. Местное время Apex (часы)(градусы, восток)(Apex local time (hours))
    FRAME.SatAlt(i+1)=a{1}(6);     % 6. Высота (км)(Satellite altitude (km))    
end
%% строка 8:  Потенциал спутника (“SATELLITE POTENTIAL, LAST = SOURCE”)
%% строки 9-10:  16 значений (2х8)
FRAME.SatPot(1:8)=a{1}(1:8);    % значения для потенциала спутника (Vbias + VIP) в вольтах каждые 4 секунды     
FRAME.SatPot(9:15)=b{1}(1:7);   % values for the satellite potential (Vbias+VIP) in volts every 4 seconds
FRAME.SatPotSrc=b{1}(8);        % Измеритель потенциала (an integer (1-2) indicating the satellite potential source where:
                                % 1 - as set by the on-board microprocessor
                                % 2 - as set by the SENPOT sensor)
%% строка 11:  Потенциал спутника (“PRIMARY PLASMA DENSITY, THEN SOURCE”)
%% строки 12-21:  60 значений (6х10)
% Односекундные средние значения плотности первичной плазмы (# / см3)
% One-second averages of the primary plasma density (#/cm3)
%% строка 22:  Источник данных по плазме
% An integer (1-3) indicating the plasma density source where:
% 1 - Ion density from SM sensor
% 2 - Ion density from DM sensor
% 3 - Electron density from EP sensor (DC Mode)
%% строка 23:  Горизонтальный ионный дрейф (“HORIZONTAL ION DRIFT VELOCS”)
%% строки 24-33:  60 значений (6х10)
% Односекундные значения скорости горизонтального дрейфа (м/с) для времен от HHMM00 до HHMM59 с 6 значениями в строке и всего 60 значениями.
% One-second values for the horizontal drift speed (m/s) for times HHMM00 through HHMM59 with 6 values per line and 60 values total.
%% строка 34:  Вертикальный ионный дрейф (“VERTICAL ION DRIFT VELOCS”)
%% строки 35-44:  60 значений (6х10)
% Односекундные значения скорости вертикального дрейфа (м/с) для времен от HHMM00 до HHMM59 с 6 значениями в строке и всего 60 значениями.
% One-second values for the vertical drift speed (m/s) for times HHMM00 through HHMM59 with 6 values per line and 60 values total.
%% строка 45:  (“CKL ANALYSES, THEN SOURCE”)
%% строка 46-63:  
%% строка 64:  Источник данных по CLK
% An integer (1-3) indicating data source used for CKL calculation where:
% 1 - SM density data only
% 2 - SM density and filter data
% 3 - EP DC mode density data
a = textscan(frame(64).str,'%f','EmptyValue',-Inf);
if length(a{1})==1 HEALTH=HEALTH+1; end
FRAME.CLK_Src=a{1};
%% строка 112 (потом понадобится)
a = textscan(frame(112).str,'%f','EmptyValue',-Inf);
if length(a{1})==7 HEALTH=HEALTH+1; end
FRAME.ADC_temp=a{1}(2);     %2: ADC temperature (degrees C)
FRAME.SEP_temp=a{1}(3);     %3: SEP temperature
FRAME.DM_offsetV=a{1}(4);   %4: DM offset voltage (volts) if IES-2 or RPA plasma plate potential (volts) if SSIES-3
FRAME.DM_mode=a{1}(5);      %5: DM mode (integer)
                                % SSIES-2:
                                % -1: Undefined
                                % 0: Normal
                                % 1-8: H+
                                % 9: FIBA
                                % SSIES-3:
                                % 0: Slow
                                % 1: Normal
FRAME.EP_mode=a{1}(6);      % 6: EP mode (0-6 : A,B,BS,C,D,DS,E) (integer)
FRAME.EP_VIP=a{1}(7);       % 7: VIP at EDR start (volts)
%% строки 65-80
if (FRAME.EP_mode==0)||(FRAME.EP_mode==1)||(FRAME.EP_mode==2)||(FRAME.EP_mode==6)
    % строка 65 (“EP SWEEP ANALYSES SETS”)
    if frame(65).str(1:end-1)=="EP SWEEP ANALYSES SETS" HEALTH=HEALTH+1; end
    % EP Sweep analyses (every 4 seconds). There are 15 EP sweep analysis 
    % sets. Each is valid for either 4 (modes A, B and BS) or 2 (mode E) 
    % seconds centered on the time specified in the set. Each analysis set 
    % contains the following parameters:
    for i=1:15
        a = textscan(frame(66+(i-1)).str,'%f','EmptyValue',-Inf);    
        if length(a{1})==6 HEALTH=HEALTH+1; end
        FRAME.EP_SCT(i)=a{1}(1);    % 1: Sweep center time (UT, seconds) (integer)
        FRAME.EP_Eden(i)=a{1}(2);   % 2: Electron density (el/cm3)
        FRAME.EP_Etemp(i)=a{1}(3);  % 3: Electron temperature (degrees K)
        FRAME.EP_SatPot(i)=a{1}(4); % 4: Satellite potential (volts)
        FRAME.EP_Qualif(i)=a{1}(5); % 5: Analysis qualifier (integer). Set to zero if the on-board microprocessor did not perform the analysis, per the flag in element 415. If the on-board microprocessor was in use, then it is set to the MP EP flags word from Word 11 of Cycle 1 in the telemetry. This word can also be zero.
        FRAME.EP_PES(i)=a{1}(6);    % 6: EP photo-electron surrogate value.
    end
end    
%% строка 81 (“EP ANALYSES SOURCE”)
if frame(81).str(1:end-1)=="EP ANALYSES SOURCE" HEALTH=HEALTH+1; end 
%% строка 82
% An Integer (1-2) indicating EP analysis source where
% 1 – Ground processing analysis
% 2 – On-board microprocessor analysis
a = textscan(frame(82).str,'%f','EmptyValue',-Inf);
if length(a{1})==1 HEALTH=HEALTH+1; end
FRAME.EP_src=a{1};
%% строка 83 (“RPA SWEEP ANALYSES SETS, THEN SOURCE”)
if frame(83).str(1:end-1)=="RPA SWEEP ANALYSES SETS, THEN SOURCE" HEALTH=HEALTH+1; end 
%% строкb 84-98 (“RPA SWEEP ANALYSES SETS, THEN SOURCE”)
% RPA Sweep analyses (every 4 seconds). There are 15 RPA sweep analysis 
% sets. Each is valid for the 4 seconds centered on the time specified in 
% the set. Each analysis set contains the following parameters:
for i=1:15
    a = textscan(frame(84+(i-1)).str,'%f','EmptyValue',-Inf);
    if length(a{1})==8 HEALTH=HEALTH+1; end
    FRAME.RPA_SCT(i)=a{1}(1);       % 1: Sweep center time (UT, seconds) (integer)
    FRAME.RPA_O2den(i)=a{1}(2);     % 2: O+ density (ion/cm3)
    FRAME.RPA_HHeden(i)=a{1}(3);    % 3: Total (H+ + He+) density (ion/cm3)
    FRAME.RPA_LIF(i)=a{1}(4);       % 4: Light ion flag (integer)
                                        % 0 - No light ion
                                        % 1 - Light ion is H+
                                        % 2 - Light ion is He+
                                        % 3± = 3 + 10000 x (H+ fraction)
    FRAME.RPA_IonNemp(i)=a{1}(5);   % 5: Ion temperature (degrees K)
    FRAME.RPA_RamIonDrift(i)=a{1}(6);% 6: Ram ion drift velocity (m/s)
    FRAME.RPA_qualif(i)=a{1}(7);    % 7: Analysis qualifier (integer)
                                        % 0 - Analysis terminated unsuccessfully
                                        % 1 - Successful analysis
    FRAME.RPA_totIonDens(i)=a{1}(8);% 8: RPA-derived total ion density    
end
%% строка 99
% An integer (1-2) indicating RPA analysis source where:
% 1 - Ground processing analysis
% 2 - On-board microprocessor analysis
a = textscan(frame(99).str,'%f','EmptyValue',-Inf);
if length(a{1})==1 HEALTH=HEALTH+1; end
FRAME.RPA_src=a{1};
%% строка 100 (“DM ION DENSITY”)
if frame(100).str(1:end-1)=="DM ION DENSITY" HEALTH=HEALTH+1; end 
%% строки 101-110:  60 значений (6х10)
%DM one-second average ion density (ion/cm3) with 6 values per line and 60
% values total
z=[];
for i=101:110
    a = textscan(frame(i).str,'%f','EmptyValue',-Inf);
    if length(a{1})==6 HEALTH=HEALTH+1; end
    z=[z a{1}.'];    
end
FRAME.DM_IonDen=z; 
%% строка 111 (“ENGINEERING DATA”)
if frame(111).str(1:end-1)=="ENGINEERING DATA" HEALTH=HEALTH+1; end 
%% строка 113 (“FILLER”)
if frame(113).str(1:end-1)=="FILLER" HEALTH=HEALTH+1; end     
%% строка 114 (“FILLER”)
a = textscan(frame(114).str,'%f','EmptyValue',-Inf);
if length(a{1})>=1 HEALTH=HEALTH+1; end
FRAME.Filler=a{1};

FRAME.HEALTH=HEALTH;
end