Files
nappMATLAB-toolbox/beamtime/plotRgaData.m
T
2026-07-03 21:54:47 +02:00

68 lines
2.2 KiB
Matlab

function ax = plotRgaData(tbl, tStart, tEnd)
%PLOTRGADATA Plot RGA partial pressures vs time (companion to plotCryoData).
%
% ax = plotRgaData(tbl, tStart, tEnd)
% Plots every channel column of an rgaImportData table against its shared
% datetime axis. tStart/tEnd (datetime) optionally subset the range, just
% like plotCryoData. Returns a struct with the axes handle.
%
% By default the y-axis is linear (RGA scans contain small near-noise
% negatives that a log axis cannot show). To switch to the classic
% semilog view afterwards:
% set(ax.partial, 'YScale', 'log');
% (values <= 0 are simply not drawn on a log axis).
%
% EXAMPLE
% tbl = rgaImportData('rga1_Jul_01_2026_08-23-06_AM.txt');
% ax = plotRgaData(tbl);
% ax = plotRgaData(tbl, t1, t2); % zoom to a window
%
% See also RGAIMPORTDATA, PLOTCRYODATA
%--- Extract datetime column ---
dt = tbl.datetime;
%--- If start/stop provided, subset the table ---
if nargin >= 3 && ~isempty(tStart) && ~isempty(tEnd)
mask = dt >= tStart & dt <= tEnd;
tbl = tbl(mask, :);
dt = dt(mask);
end
%--- Channel columns = everything except datetime & time_s ---
chVars = setdiff(tbl.Properties.VariableNames, {'datetime','time_s'}, 'stable');
units = 'a.u.';
if isfield(tbl.Properties.UserData, 'units')
units = tbl.Properties.UserData.units;
end
%--- Plot ---
figure;
tl = tiledlayout(1, 1);
tl.TileSpacing = 'compact';
tl.Padding = 'compact';
ax.partial = nexttile;
hold on;
for k = 1:numel(chVars)
plot(dt, tbl.(chVars{k}), '-', 'LineWidth', 1, ...
'DisplayName', prettyName(chVars{k}));
end
grid on;
ylabel(sprintf('Partial pressure [%s]', units));
xlabel('Date & Time');
title('RGA partial pressures');
legend('Location', 'best', 'Interpreter', 'none');
% Match plotCryoData's datetime tick style
ax.partial.XAxis.TickLabelFormat = 'dd-MMM HH:mm';
end
% -------------------------------------------------------------------------
function s = prettyName(v)
% "Water_m18" -> "Water (m18)"
s = regexprep(v, '_m(\d+)$', ' (m$1)');
s = strrep(s, '_', ' ');
end