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