forked from m053m716/-io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
load_trec_depth.m
87 lines (77 loc) · 3.31 KB
/
load_trec_depth.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
function P = load_trec_depth(SUBJ, YYYY, MM, DD, options)
%LOAD_TREC_DEPTH Loads timetable with TREC drive depth information.
%
% Syntax:
% P = io.load_trec_depth(SUBJ, YYYY, MM, DD, 'Name', value, ...);
%
% Inputs:
% SUBJ - Name of subject
% YYYY - Year (numeric)
% MM - Month (numeric)
% DD - Day (numeric)
% Options:
% 'DataShareRoot': "R:/NMLShare/raw_data/primate"
%
%
% R:\NMLShare\raw_data\primate\Rupert\Rupert_2023_07_25\Rupert_2023_07_25_TREC
arguments
SUBJ {mustBeTextScalar}
YYYY (1,1) double = year(today);
MM (1,1) double = month(today);
DD (1,1) double = day(today);
options.DataShareRoot {mustBeTextScalar, mustBeFolder} = "R:/NMLShare/raw_data/primate";
options.ArtifactDelta (1,1) double = 1000; % Any jumps greater than this are probably due to spurious reset--drop corresponding row.
end
tank = sprintf('%s_%04d_%02d_%02d', SUBJ, YYYY, MM, DD);
data_folder = fullfile(options.DataShareRoot, SUBJ, tank, sprintf('%s_TREC', tank));
if exist(data_folder,'dir')==0
error("No TREC folder in raw_data for tank (%s)", tank);
end
F = dir(fullfile(data_folder, '*.csv'));
P = [];
dt = datetime(YYYY, MM, DD, 'TimeZone', 'America/New_York');
for iF = 1:numel(F)
tmp = importfile(fullfile(F(iF).folder,F(iF).name), dt);
P = [P; tmp]; %#ok<AGROW>
end
P = sortrows(P, 'Time', 'ascend');
delta = [[diff(P.Drive1); 0], [diff(P.Drive2); 0]];
P(any(abs(delta) > options.ArtifactDelta,2),:) = []; % Remove artifact rows.
function Position = importfile(filename, rec_date)
%IMPORTFILE Import data from a text file
% POSITION = IMPORTFILE(FILENAME) reads data from text file FILENAME
% for the default selection. Returns the data as a table.
%
% Example:
% Position = importfile("R:\NMLShare\raw_data\primate\Rupert\Rupert_2023_07_25\Rupert_2023_07_25_TREC\2023-07-25 12-14-33 Position.csv", [4, Inf]);
%
% See also READTABLE.
%
% Auto-generated by MATLAB on 25-Jul-2023 15:49:18
%% Set up the Import Options and import the data
opts = delimitedTextImportOptions("NumVariables", 3);
% Specify range and delimiter
opts.DataLines = [4, inf];
opts.Delimiter = ";";
% Specify column names and types
opts.VariableNames = ["Time", "Drive1", "Drive2"];
opts.VariableTypes = ["datetime", "double", "double"];
% Specify file level properties
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";
% Specify variable properties
opts = setvaropts(opts, "Time", "InputFormat", "HH:mm:ss");
% Import the data
Position = readtable(filename, opts);
Position.Time.TimeZone = 'America/New_York';
Position.Time = rec_date + hours(hour(Position.Time)) + minutes(minute(Position.Time)) + seconds(second(Position.Time));
dt_orig = diff(Position.Time);
iLoop = find([false; dt_orig < seconds(0)]);
for i_looped = 1:numel(iLoop)
Position.Time(iLoop(i_looped):end) = Position.Time(iLoop(i_looped):end) + hours(24);
end
Position = table2timetable(Position,'RowTimes','Time');
Position.Time.TimeZone = 'America/New_York';
Position.Properties.VariableUnits = {'µm','µm'};
end
end