- regexp - https://www.mathworks.com/help/matlab/ref/regexp.html
- textscan - https://www.mathworks.com/help/matlab/ref/textscan.html
- sscanf - https://www.mathworks.com/help/matlab/ref/sscanf.html
- strtrim - https://www.mathworks.com/help/matlab/ref/strtrim.html
- dlmwrite - https://www.mathworks.com/help/matlab/ref/dlmwrite.html
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)
Show older comments
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
0 Comments
Answers (1)
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.
1 Comment
ahmad Saad
on 30 Jul 2024
Hi Paras Gupta
why your output is not similar to the desired outfile.txt given by Rukundo Wellen
Alos how i can plot the result ?
See Also
Categories
Find more on Web Services in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!