I want to read an Ionex file from CDDIS in MATLAB that I have a TEC map that is plotted as a TEC image

26 views (last 30 days)
The ionox file has TEC values for each latitude over a longitudinal band from -180 to 180 in each latitudinal compartment. But also, this is also in a compartment for a single hour (1), this repeats itself for 24 times to fill 24 hours, the file is attached as c2.txt. The output should be in this format, attached as outfile.txt

Answers (1)

Paras Gupta
Paras Gupta on 17 Dec 2023
Hi Rukundo,
I understand that you want to read the given IONEX file, process it to extract the TEC map data, and output the data in the desired format.
The following code illustrates one way to achieve the same in MATLAB.
clear;clc;
ionexFilePath = 'c2.txt';
fileContents = fileread(ionexFilePath);
% Extract TEC map sections between 'START OF TEC MAP' and 'END OF TEC MAP'
tecMapSections = regexp(fileContents, '(?<=START OF TEC MAP).+?(?=END OF TEC MAP)', 'match');
% Remove the last TEC map section (assumed to be for the next day)
tecMapSections = tecMapSections(1:end-1);
% Initialize a 3D array for TEC values with dimensions based on
% the number of TEC map sections (73x71x24)
tecValuesArray = zeros(73, 71, length(tecMapSections));
% Function to convert latitude to an index in the TEC values array
latitudeToIndex = @(latitude) round((latitude+87.5)/2.5)+1;
for mapIndex = 1 : length(tecMapSections)
% Split the TEC map section at the first newline character
sectionBuffer = regexp(tecMapSections{mapIndex}, '\n', 'split', 'once');
% Split again at the first newline character
sectionBuffer = regexp(sectionBuffer{2}, '\n', 'split', 'once');
% Split the string into parts at 'LAT/LON1/LON2/DLON/H'
tecDataParts = regexp(sectionBuffer{2}, 'LAT/LON1/LON2/DLON/H', 'split');
% The first part contains the latitude information
latitudeString = tecDataParts{1};
for dataPartIndex = 2 : length(tecDataParts)
% Extract the latitude value from the latitude string
latitudeValue = textscan(latitudeString,'%f%*[^\n]');
latitudeValue = latitudeValue{1};
% Read TEC values from the current part, excluding the last 60 characters
tecValues = sscanf(tecDataParts{dataPartIndex}(1:end-60), '%f');
% Update the latitude string with the last 60 characters, trimmed
latitudeString = strtrim(tecDataParts{dataPartIndex}(end-60+1:end));
% Store the TEC values in the appropriate location in the array
tecValuesArray(:,latitudeToIndex(latitudeValue),mapIndex) = tecValues;
end
end
% Calculate the mean TEC values across all TEC maps for each latitude and longitude
meanTECValues = mean(tecValuesArray, 3);
% Write the mean TEC values to an output file with tab-delimited columns
dlmwrite('outfile.txt', meanTECValues, 'delimiter', '\t');
You can refer to the following links for more information on the functions used in the code above.
Hope this helps with your query.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!