Files
nappMATLAB-toolbox/import/LabView_importData.m
T
2023-08-10 09:19:49 +02:00

157 lines
6.6 KiB
Matlab

function LabView = LabView_importData(fullFileName,varargin)
%
% LabView_importData reads data log ASCII files stored by LabView into
% a Matlab time series.
%
% LabView = LabView_importData(A) imports file A
% and stores its content as time series in a structure called "LabView".
%
% LabView = LabView_importData(A,LabView) imports file A
% and appends its content as time series to the LabView structure.
%
%
% Example
% LabView = LabView_importData('exmpl.dat',LabView)
%
% Input
% * Napp_chamber_file: Complete and absolute path to the Napp chamber log file.
% * LabView: name of output structure. Always call this'LabView'
%
% Output
% * LabView: time series, the name starting with "ts"
% followed by date and time the recording started.
%
% See also LABVIEW_COMBINE, LABVIEW_PLOT, LABVIEW_CUTDATA
%
%% Data Structure
%
% Data structure before 4.3.2019
% col 1: Date
% col 2: Time
% col 3: Reservoir "Pressure 1" - Unit "1 water" - mbar -> ts.Data:2
% col 4: Reservoir "Pressure 2" - Unit "2 other" - mbar -> ts.Data:3
% col 5: Baratron 1 - cell - 1mbar max - mbar -> ts.Data:4
% col 6: Baratron 2 - cell - 10mbar max - mbar -> ts.Data:8
% col 7: Baratron 3 - cell - 0.05mbar max - mbar -> ts.Data:9
% col 8: Baratron 4 - - mbar
% col 9: Temp.Ice Sample - °C -> ts.Data:1
% col 10: Temp.Heated Sample
% col 11: none
% col 12: Temp. Reservoir "Cooler 1" - °C -> ts.Data:5
% col 13: Temp. Reservoir "Cooler 2" - °C -> ts.Data:6
% col 14: Flow He(cryoholder) - l/min -> ts.Data:7
% col 15: none
% col 16: none
%
% Data structure after 4.3.2019
% col 1: Date
% col 2: Time
% col 3: Reservoir "Pressure 1" - Unit "1 water" - mbar -> ts.Data:2
% col 4: Reservoir "Pressure 2" - Unit "2 other" - mbar -> ts.Data:3
% col 5: Baratron 1 - cell - 1mbar max - mbar -> ts.Data:4
% col 6: Baratron 2 - cell - 10mbar max - mbar -> ts.Data:8
% col 7: Baratron 3 - cell - 0.05mbar max - mbar -> ts.Data:9
% col 8: Baratron 4 - - mbar
% col 9: Temp.Ice Sample - °C -> ts.Data:1
% col 10: Temp.Heated Sample
% col 11: Temp. Reservoir "Cooler 1" - °C -> ts.Data:5
% col 12: Temp. Reservoir "Cooler 2" - °C -> ts.Data:6
% col 13: Flow He(cryoholder) - l/min -> ts.Data:7
% col 14: Flow gas 1
% col 15: Pressure chamber - mbar
% col 16: x-position of cryoholder - mm -> ts.Data:10
% col 17: y-position of cryoholder - mm -> ts.Data:11
% col 18: z-position of cryoholder - mm -> ts.Data:12
% col 19: nothing
% col 20: Temp.Sealing - °C -> ts.Data:13
%%
% Create an InputParser object
p = inputParser;
% Add inputs to the scheme.
defaultAppendToStructure = 0;
addRequired(p,'fullFileName',@isfile);
addOptional(p,'appendToStructure',defaultAppendToStructure,@isstruct);
% Parse the inputs.
parse(p,fullFileName,varargin{:})
%%
% get filedate
[~,name,~] = fileparts(p.Results.fullFileName);
tmp = strsplit(name,'_PC');
filedate = datenum(tmp{1},'yyyy-mm-dd_HH.MM.SS');
clearvars name tmp
%%
% parse structure to append to
if isstruct(p.Results.appendToStructure)
LabView = p.Results.appendToStructure;
end
%%
if datenum(filedate) <= datenum('04-Mar-2019 13:30:00')
fid = fopen(p.Results.fullFileName);
data = textscan(fid, ...
'%s %s %f %f %f %f %f %f %f %f %f %f %f %f %f %f',...
'HeaderLines',1); % data file has 2 text columns, followed by 14 numeric columns
fclose(fid);
% define time series
LabView.(['ts_' datestr(datenum([char(data{1}{1}), char(data{2}{1})],'dd.mm.yyyyHH:MM:SS'),'YYYYmmdd_HHMM')]) ...
= timeseries([data{9} data{3} data{4} data{5} data{12} ...
data{13} data{14} data{6} data{7}] , ...
datestr(datenum([char(data{1}), char(data{2})],...
'dd.mm.yyyyHH:MM:SS'),0));
LabView.(['ts_' datestr(datenum([char(data{1}{1}), char(data{2}{1})],'dd.mm.yyyyHH:MM:SS'),'YYYYmmdd_HHMM')]).Name ...
= 'Readout Napp Chamber raw signal';
clear fid ans formatOut nans t x
elseif datenum(filedate) >= datenum('15-Sep-2021 01:00:00')
fid = fopen(p.Results.fullFileName);
data = textscan(fid, ...
'%s %s %s %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f',...
'HeaderLines',1); %
fclose(fid);
% the date formating in the dat file is really messed up. Try to make
% it consitent with MATLAB. The problem is that MATLAB does not
% understand 1 digit month and hours.
%
%
% Split the date in column 1 into year,month,day
newDateSplit = cellfun(@(x) split(char(x),'/'),data{1},'UniformOutput', false);
% Split the time in column 2 into hours, minutes, seconds
newTimeSplit = cellfun(@(x) split(char(x),':'),data{2},'UniformOutput', false);
% combine both with the am/pm string in column 3 to a new datestring
customDateStr = cellfun(@(x,y,z) [datestr(datenum([str2double(x{3}),str2double(x{1}),str2double(x{2}),str2double(y{1}),str2double(y{2}),str2double(y{3})])), ' ', char(z)], newDateSplit,newTimeSplit,data{3}, 'uniformOutput',false) ;
% define time series
LabView.(['ts_' datestr(customDateStr{1},'YYYYmmdd_HHMM')]) ...
= timeseries([data{10} data{4} data{5} data{6} data{12} ...
data{13} data{14} data{7} data{8} data{17} data{18} data{19} data{21}], ...
customDateStr);
LabView.(['ts_' datestr(customDateStr{1},'YYYYmmdd_HHMM')]).Name ...
= 'Readout Napp Chamber raw signal';
clearvars fid ans formatOut nans t x new* custom*
else
fid = fopen(p.Results.fullFileName);
data = textscan(fid, ...
'%s %s %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f',...
'HeaderLines',1); % data file has 2 text columns, followed by 16 numeric columns
fclose(fid);
% define time series
LabView.(['ts_' datestr(datenum([char(data{1}{1}), char(data{2}{1})],'dd.mm.yyyyHH:MM:SS'),'YYYYmmdd_HHMM')]) ...
= timeseries([data{9} data{3} data{4} data{5} data{11} ...
data{12} data{13} data{6} data{7} data{16} data{17} data{18} data{20}] , ...
datestr(datenum([char(data{1}), char(data{2})],...
'dd.mm.yyyyHH:MM:SS'),0));
LabView.(['ts_' datestr(datenum([char(data{1}{1}), char(data{2}{1})],'dd.mm.yyyyHH:MM:SS'),'YYYYmmdd_HHMM')]).Name ...
= 'Readout Napp Chamber raw signal';
clear fid ans formatOut nans t x
end
end