Skip to content

Commit

Permalink
JUICE function just to quickly plot S/C parameters
Browse files Browse the repository at this point in the history
The parameters of interest to RPWI have already been extracted from ESAs
system into plain text .csv files for RPWI (at IRF Uppsala). This
function just quickly loads these .csv into Matlab timetables for easy
plotting.
  • Loading branch information
thomas-nilsson-irfu committed Dec 6, 2024
1 parent c577d22 commit 2e627a2
Showing 1 changed file with 247 additions and 0 deletions.
247 changes: 247 additions & 0 deletions mission/juice/+jui/import_sc_param.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
function JUI_tt = import_sc_param(getParam)
% JUI_tt=JUI.IMPORT_SC_PARAM(getParam) reads JUICE S/C parameters
% which have been extracted to csv files into a Matlab timetable returned
% in JUI_tt
%
% Argument 'getParam' must be one of the following:
% 'HGAandMGAtx', 'JACSstatus', 'MGAdirection', 'RPWIpowerDraw',
% 'RPWIpowerStatus', 'RPWIstatusPa', 'RPWItempSC', 'RPWIvaultTempSC',
% 'RWangMomEst', 'RWpulseCounters', 'SAhingeAngles', 'SolarArrayPower',
% 'thrStatus'.
%
% Example:
% JUI_tt = jui.import_sc_param('RPWIvaultTempSC');
% % then create a simple plot of it
% plot(JUI_tt, [JUI_tt.Properties.VariableNames], 'marker', '*');
% legend([JUI_tt.Properties.VariableNames], 'interpreter', 'none');
% grid on;

narginchk(1, 1);

%% Where to look for JUICE .csv exported files with S/C parameters (NOTE: edit this)
csv_dir = [filesep, 'data', filesep, 'juice', filesep, 'sc_parameters'];

%%
opts = getInstrumentSpecificOpts(getParam);

% loop over all files and concatinate timetables
CSVs = dir([csv_dir, filesep, 'JUI_', getParam, '*.csv']);
for iFile=1:length(CSVs)
% Import the data
JUItmp = readtimetable([CSVs(iFile).folder, filesep, CSVs(iFile).name], ...
opts);
if exist('JUI_tt', 'var')
JUI_tt = [JUI_tt; JUItmp]; %#ok AGROW
else
JUI_tt = JUItmp;
end
end

%% Helper function
function opts = getInstrumentSpecificOpts(instrument)
narginchk(1, 1);
switch instrument
case 'HGAandMGAtx'
% Specify column names and types
vars = ["date", ...
"PPEPA299_PCDUA_DST1_TxPwr28VR_ST_None", ...
"PPEPA316_PCDUA_DST2_TxPwr28VR_ST_None"];
varTypes = ["datetime", ...
"categorical", ...
"categorical"];
case 'JACSstatus'
% Specify column names and types
vars = ["date", ...
"RUPA1673_RIUA_JACS_1_status_None", ...
"RUPA1674_RIUA_JACS_2_status_None"];
varTypes = ["datetime", ...
"categorical", ...
"categorical"];
case 'MGAdirection'
% Specify column names and types
vars = ["date", ...
"AAT00007_apmeAzimuthMeas_rad", ...
"AAT00008_apmeElevationMeas_rad"];
varTypes = ["datetime", ...
"double", ...
"double"];
case 'RPWIpowerDraw'
% Specify column names and types
vars = ["date", ...
"PPEPE101_PCDUA_RPWIEUa_Pwr28VR_A", ...
"PPEPE183_PCDUA_BAT_VBUS_28V_NOM_V"];
varTypes = ["datetime", ...
"double", ...
"double"];
case 'RPWIpowerStatus'
% Specify column names and types
vars = ["date", ...
"PPEPA482_PCDUA_RPWIEUa_Pwr28VR_ST_None", ...
"PPEPA516_PCDUA_RPWIEUb_Pwr28VR_ST_None"];
varTypes = ["datetime", ...
"categorical", ...
"categorical"];
case 'RPWIstatusPa'
% Specify column names and types
vars = ["date", ...
"PPEPA439_PCDUAL134N_RpwiPa1St_None", ...
"PPEPA426_PCDUAL135N_RpwiPa2St_None", ...
"PPEPA548_PCDUAL136N_RpwiPa3St_None", ...
"PPEPA672_PCDUAL137N_RpwiPa4St_None"];
varTypes = ["datetime", ...
"single", ...
"single", ...
"single", ...
"single"];
case 'RPWItempSC'
% Specify column names and types
vars = ["date", ...
"RUPA0137_THAHL134_RIUb_RpwiPa1_degC", ...
"RUPA0138_THAHL135_RIUb_RpwiPa2_degC", ...
"RUPA0139_THAHL136_RIUb_RpwiPa3_degC", ...
"RUPA0140_THAHL137_RIUb_RpwiPa4_degC", ...
"RUPA0249_THAHL134_RIUb_RpwiPa1_degC", ...
"RUPA0250_THAHL135_RIUb_RpwiPa2_degC", ...
"RUPA0251_THAHL136_RIUb_RpwiPa3_degC", ...
"RUPA0252_THAHL137_RIUb_RpwiPa4_degC", ...
"RUPA0457_THAHL134_RIUb_RpwiPa1_degC", ...
"RUPA0458_THAHL135_RIUb_RpwiPa2_degC", ...
"RUPA0459_THAHL136_RIUb_RpwiPa3_degC", ...
"RUPA0460_THAHL137_RIUb_RpwiPa4_degC"];
varTypes = ["datetime", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double"];
case 'RPWIvaultTempSC'
% Specify column names and types
vars = ["date", ...
"RUPA1731_THAHL143_RIUa_VltMxPy1Hp_degC", ...
"RUPA1732_THAHL144_RIUa_VltMxPy2Hp_degC", ...
"RUPA1737_THBHL143_RIUa_VltMxPy1Hp_degC", ...
"RUPA1738_THBHL144_RIUa_VltMxPy2Hp_degC", ...
"RUPA1743_THCHL143_RIUb_VltMxPy1Hp_degC", ...
"RUPA1744_THCHL144_RIUb_VltMxPy2Hp_degC"];
varTypes = ["datetime", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double"];
case 'RWangMomEst'
% Specify column names and types
vars = ["date", ...
"AAT005F5_rwAngMomEst_B1_Nms", ...
"AAT005F6_rwAngMomEst_B2_Nms", ...
"AAT005F7_rwAngMomEst_B1_Nms", ...
"AAT005F8_rwAngMomEst_U1_Nms", ...
"AAT005F9_rwAngMomEst_U2_Nms", ...
"AAT005FA_rwAngMomEst_U3_Nms", ...
"AAT005FB_rwAngMomEst_U4_Nms"];
varTypes = ["datetime", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double", ...
"double"];
case 'RWpulseCounters'
% Specify column names and types
vars = ["date", ...
"CFT0232F_RW1_tacho_pulse_counter_None",...
"CFT02336_RW2_tacho_pulse_counter_None",...
"CFT0233D_RW3_tacho_pulse_counter_None",...
"CFT02344_RW4_tacho_pulse_counter_None"];
varTypes = ["datetime", ...
"uint32", ...
"uint32", ...
"uint32", ...
"uint32"];
case 'SAhingeAngles'
% Specify column names and types
vars = ["date", ...
"AAT001CC_saAngleYm_rad", ...
"AAT001CD_saAngleYp_rad"];
varTypes = ["datetime", ...
"double", ...
"double"];
case 'SolarArrayPower'
% Specify column names and types
vars = ["date", ...
"CFD00114_Solar_array_power_W"];
varTypes = ["datetime", ...
"double"];
case 'thrStatus'
% Specify column names and types
vars = ["date", ...
"AAT00071_isUsedThr_1_None",...
"AAT00072_isUsedThr_2_None",...
"AAT00073_isUsedThr_3_None",...
"AAT00074_isUsedThr_4_None",...
"AAT00075_isUsedThr_5_None",...
"AAT00076_isUsedThr_6_None",...
"AAT00077_isUsedThr_7_None",...
"AAT00078_isUsedThr_8_None",...
"AAT00079_isUsedThr_9_None",...
"AAT0007A_isUsedThr_10_None",...
"AAT0007B_isUsedThr_11_None",...
"AAT0007C_isUsedThr_12_None",...
"AAT0007D_isUsedThr_13_None",...
"AAT0007E_isUsedThr_14_None",...
"AAT0007F_isUsedThr_15_None",...
"AAT00080_isUsedThr_16_None",...
"AAT00081_isUsedThr_17_None",...
"AAT00082_isUsedThr_18_None",...
"AAT00083_isUsedThr_19_None",...
"AAT00084_isUsedThr_20_None"];
varTypes = ["datetime", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical", ...
"logical"];
otherwise
error('Not yet implemented');
end
% Generic settings for all csv files
opts = delimitedTextImportOptions("NumVariables", length(vars));
opts.VariableNames = vars;
opts.VariableTypes = varTypes;
% Specify range and delimiter
opts.DataLines = [2, Inf];
opts.Delimiter = ",";
% Specify file level properties
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";
% Specify variable properties
opts = setvaropts(opts, [vars(2:end)], ...
"EmptyFieldRule", "auto");
opts = setvaropts(opts, vars(1), ...
"InputFormat", "yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'");
end
end

0 comments on commit 2e627a2

Please sign in to comment.