1 |
% |
---|
2 |
% extractDbd.m |
---|
3 |
% |
---|
4 |
% Purpose: Save a .mat file with flight characteristics. |
---|
5 |
% |
---|
6 |
% NOTE: At top of file, set glider index and deployment number |
---|
7 |
% |
---|
8 |
% MATLAB folder - contains util, seawater, |
---|
9 |
% |
---|
10 |
% |
---|
11 |
% Author: Adapted from William Stark by Chris Calloway |
---|
12 |
% Marine Sciences Department |
---|
13 |
% UNC-Chapel Hill |
---|
14 |
% |
---|
15 |
% Created: March 2013 |
---|
16 |
% |
---|
17 |
%////////////////////////////////////////////////////////////////////////// |
---|
18 |
|
---|
19 |
clear all; |
---|
20 |
|
---|
21 |
% add paths for required files... |
---|
22 |
addpath('MATLAB/util/'); |
---|
23 |
|
---|
24 |
% SET THE GLIDER INDEX (Pelagia = 1, Ramses = 2) ... |
---|
25 |
for gliderIndex=1:2 |
---|
26 |
|
---|
27 |
% SET THE DEPLOYMENT NUMBER (1, 2 or 3) ... |
---|
28 |
for deploymentNumber=1:3 |
---|
29 |
|
---|
30 |
clearvars -except gliderIndex deploymentNumber; |
---|
31 |
|
---|
32 |
% glider name string... |
---|
33 |
if (gliderIndex==1) |
---|
34 |
strGliderName = 'Pelagia'; |
---|
35 |
else |
---|
36 |
strGliderName = 'Ramses'; |
---|
37 |
end |
---|
38 |
|
---|
39 |
disp(['Extracting ', strGliderName, 'Deployment ', num2str(deploymentNumber)]); |
---|
40 |
|
---|
41 |
% populate arrays for the deployment start and end dates... |
---|
42 |
% ex. strStart(2, 3) is start date for Ramses, Deployment 3 |
---|
43 |
strStart = {'26-Jan-2012', '16-Feb-2012', '16-Mar-2012'; '26-Jan-2012', '16-Feb-2012', '16-Mar-2012'}; |
---|
44 |
strEnd = {'14-Feb-2012', '08-Mar-2012', '04-Apr-2012'; '14-Feb-2012', '12-Mar-2012', '03-Apr-2012'}; |
---|
45 |
|
---|
46 |
% deployment number string... |
---|
47 |
strDeploymentNumber = num2str(deploymentNumber); |
---|
48 |
|
---|
49 |
% deployment start date string... |
---|
50 |
strStartDate = strStart(gliderIndex, deploymentNumber); |
---|
51 |
|
---|
52 |
% deployment end date string... |
---|
53 |
strEndDate = strEnd(gliderIndex, deploymentNumber); |
---|
54 |
|
---|
55 |
% define the path to the glider ascii files... |
---|
56 |
%datadir = strcat('/Users/haloboy/Documents/MASC/MATLAB/CTD_data_correction/GLIDER_CTD_DATA_LEVEL0/',... |
---|
57 |
datadir = strcat('GLIDER_DATA_LEVEL0/', strGliderName, '_Deployment', strDeploymentNumber, '/'); |
---|
58 |
|
---|
59 |
%########################################################################################## |
---|
60 |
|
---|
61 |
|
---|
62 |
%*** READ IN DBD DATA ***************************************************** |
---|
63 |
% declare variables for storing data... |
---|
64 |
ptime_dbd=[]; |
---|
65 |
altitude=[]; |
---|
66 |
horizontalVelocity=[]; |
---|
67 |
depth = []; |
---|
68 |
pitch=[]; |
---|
69 |
avgDepthRate = []; |
---|
70 |
angleOfAttack = []; |
---|
71 |
|
---|
72 |
% try to load all *.dbdasc files at once... |
---|
73 |
[files, Dstruct] = wilddir(datadir, '.dbdasc'); |
---|
74 |
nfile = size(files, 1); |
---|
75 |
|
---|
76 |
clear data; |
---|
77 |
|
---|
78 |
for i=1:nfile |
---|
79 |
% protect against empty dbd file |
---|
80 |
if(Dstruct(i).bytes>0) |
---|
81 |
data = read_gliderasc2([datadir, files(i,:)]); |
---|
82 |
%data = read_gliderasc3([datadir, files(i,:)]); |
---|
83 |
|
---|
84 |
% if the number of values (in data.data) is less than the number of |
---|
85 |
% vars (in data.vars), this means that the data were not completely read |
---|
86 |
% in. To correct this, pad data.data with NaNs until its length |
---|
87 |
% equals that of data.vars... |
---|
88 |
if (length(data.data) < length(data.vars)) |
---|
89 |
data.data = padarray(data.data, [0 length(data.vars)-length(data.data)], NaN, 'post'); |
---|
90 |
end |
---|
91 |
|
---|
92 |
% populate variables with data... |
---|
93 |
if(~isempty(data.data)) |
---|
94 |
ptime_dbd = [ptime_dbd; data.data(:,strmatch('m_present_time', data.vars, 'exact'))]; |
---|
95 |
altitude = [altitude; data.data(:,strmatch('m_altitude', data.vars, 'exact'))]; |
---|
96 |
horizontalVelocity = [horizontalVelocity; data.data(:,strmatch('m_speed', data.vars, 'exact'))]; |
---|
97 |
depth = [depth; data.data(:,strmatch('m_depth', data.vars, 'exact'))]; |
---|
98 |
pitch = [pitch; data.data(:,strmatch('m_pitch', data.vars, 'exact'))]; |
---|
99 |
avgDepthRate = [avgDepthRate; data.data(:,strmatch('m_avg_depth_rate', data.vars, 'exact'))]; |
---|
100 |
angleOfAttack = [angleOfAttack; data.data(:,strmatch('u_angle_of_attack', data.vars, 'exact'))]; |
---|
101 |
end |
---|
102 |
|
---|
103 |
data = []; |
---|
104 |
end |
---|
105 |
end |
---|
106 |
%************************************************************************** |
---|
107 |
|
---|
108 |
|
---|
109 |
[Y,I] = sort(ptime_dbd); |
---|
110 |
ptime_dbd = Y; |
---|
111 |
altitude = altitude(I); |
---|
112 |
horizontalVelocity = horizontalVelocity(I); |
---|
113 |
depth = depth(I); |
---|
114 |
pitch = pitch(I); |
---|
115 |
avgDepthRate = avgDepthRate(I); |
---|
116 |
angleOfAttack = angleOfAttack(I); |
---|
117 |
|
---|
118 |
% convert pitch and angle of attack from radians to degrees... |
---|
119 |
pitch = pitch*180/pi; |
---|
120 |
angleOfAttack = angleOfAttack*180/pi; |
---|
121 |
|
---|
122 |
% % compute actual glide angle = pitch + angle of attack... |
---|
123 |
% glideAngle = pitch + angleOfAttack; |
---|
124 |
|
---|
125 |
% convert ptime into datenum style...for plotting I think, commenting out |
---|
126 |
% ptime_datenum = ptime/3600/24+datenum(1970, 1, 1, 0, 0, 0); |
---|
127 |
ptime_datenum_dbd = ptime_dbd/3600/24+datenum(1970, 1, 1, 0, 0, 0); |
---|
128 |
%ptimehrly = fix(ptime_datenum*24)/24; |
---|
129 |
%ptimedaily = fix(ptime_datenum); |
---|
130 |
%ptimedaily2 = unique(ptimedaily); |
---|
131 |
%ptimedaily2 = ptimedaily2(1:2:end); |
---|
132 |
|
---|
133 |
% create configuration struct... |
---|
134 |
units = struct('altitude', 'm',... |
---|
135 |
'angleOfAttack', 'decimal degrees',... |
---|
136 |
'avgDepthRate', 'm/s',... |
---|
137 |
'depth', 'm',... |
---|
138 |
'horizontalVelocity', 'm/s',... |
---|
139 |
'pitch', 'decimal degrees',... |
---|
140 |
'ptime_dbd', 'seconds since 0000-01-01T00:00',... |
---|
141 |
'ptime_datenum_dbd', 'days since 1970-01-01T00:00'); |
---|
142 |
|
---|
143 |
variable_description = struct('altitude', 'altimeter measured distance from bottom',... |
---|
144 |
'angleOfAttack', 'difference between pitch and glider angle',... |
---|
145 |
'avgDepthRate', 'average rate of change of depth, >0 is down',... |
---|
146 |
'depth', 'depth calculated as function of pressure and position latitude',... |
---|
147 |
'horizontalVelocity', 'vehicle horizontal speed through water',... |
---|
148 |
'pitch', 'vehicle angle of inclination, >0 is nose up',... |
---|
149 |
'ptime_dbd', 'time vector reported by glider',... |
---|
150 |
'ptime_datenum_dbd', 'Serial Date Number string'); |
---|
151 |
|
---|
152 |
config = struct('glider_name', strGliderName,... |
---|
153 |
'deployment_number', strDeploymentNumber,... |
---|
154 |
'start_date', strStartDate,... |
---|
155 |
'end_date', strEndDate,... |
---|
156 |
'var_descriptions', variable_description,... |
---|
157 |
'var_units', units); |
---|
158 |
|
---|
159 |
% set Level 1 data mat file name... |
---|
160 |
strMatFileName = strcat(strGliderName, '_Deployment', strDeploymentNumber, '_Flight_L1.mat'); |
---|
161 |
|
---|
162 |
|
---|
163 |
|
---|
164 |
% save flight data to mat file... |
---|
165 |
save(strMatFileName,... |
---|
166 |
'config',... |
---|
167 |
'altitude',... |
---|
168 |
'angleOfAttack',... |
---|
169 |
'avgDepthRate',... |
---|
170 |
'depth',... |
---|
171 |
'horizontalVelocity',... |
---|
172 |
'pitch',... |
---|
173 |
'ptime_dbd',... |
---|
174 |
'ptime_datenum_dbd'); |
---|
175 |
|
---|
176 |
end |
---|
177 |
end |
---|