NCCOOS Trac Projects: Top | Web | Platforms | Processing | Viz | Sprints | Sandbox | (Wind)

root/gliderproc/trunk/gliderCurrents_Generate_L1_Data.m

Revision 518 (checked in by cbc, 10 years ago)

Add lat/lon and include non-nan final_vx.

Line 
1 %
2 %  gliderCurrents_Generate_L1_Data.m
3 %
4 %  Purpose: Generate Level 1 data mat files for vx/vy data.
5 %
6 %  Requires:
7 %  MATLAB folder - contains util
8 %
9 %  Authors:  Chris Calloway
10 %            Marine Sciences Department
11 %            UNC-Chapel Hill
12 %
13 %  Created: January 2014
14 %
15 %//////////////////////////////////////////////////////////////////////////
16
17 clear all;
18
19 % add paths for required files...
20 addpath('MATLAB/util/');
21
22 % populate arrays for the deployment start and end dates...
23 % ex. strStart(2, 3) is start date for Ramses, Deployment 3
24 strStart = {'26-Jan-2012', '16-Feb-2012', '16-Mar-2012'; ...
25             '26-Jan-2012', '16-Feb-2012', '16-Mar-2012'};
26 strEnd   = {'14-Feb-2012', '08-Mar-2012', '04-Apr-2012'; ...
27             '14-Feb-2012', '12-Mar-2012', '03-Apr-2012'};
28
29 % SET THE GLIDER INDEX (Pelagia = 1, Ramses = 2) ...
30 for gliderIndex=1:2
31    
32     % SET THE DEPLOYMENT NUMBER (1, 2 or 3) ...
33     for deploymentNumber=1:3
34        
35         clearvars -except gliderIndex deploymentNumber strStart strEnd;
36
37         % glider name string...
38         if (gliderIndex==1)
39             strGliderName = 'Pelagia';
40         else
41             strGliderName = 'Ramses';
42         end
43
44         % deployment number string...
45         strDeploymentNumber = num2str(deploymentNumber);
46
47         % deployment start date string...
48         strStartDate = strStart(gliderIndex, deploymentNumber);
49
50         % deployment end date string...
51         strEndDate = strEnd(gliderIndex, deploymentNumber);
52
53         % define the path to the glider ascii files...
54         datadir = strcat('GLIDER_DATA_LEVEL0/', strGliderName, ...
55                          '_Deployment', strDeploymentNumber, '/');
56
57         disp(['Processing Currents data for ', strGliderName, ' Deployment ', strDeploymentNumber]);
58        
59         %*** READ IN DBD DATA ****
60         % declare arrays for accumulating data
61         final_vx = [];
62         initial_vx = [];
63         delta_vx = [];
64         vx = [];
65         prior_seg_vx = [];
66         final_vy = [];
67         initial_vy = [];
68         delta_vy = [];
69         vy = [];
70         prior_seg_vy = [];
71         lat = [];
72         lon = [];
73         gps_lat = [];
74         gps_lon = [];
75         ptime_dbd = [];
76         ptime_ebd = [];
77        
78         % try to load all *.dbdasc files at once...
79         [files, Dstruct] = wilddir(datadir, '.dbdasc');
80         nfile = size(files, 1);
81
82         for i=1:nfile-1
83             % protect against empty dbd file
84             if(Dstruct(i).bytes>0)
85                 data = read_gliderasc2([datadir, files(i,:)]);
86
87                 % if the number of values (in data.data) is less than the number
88                 % of vars (in data.vars), this means that the data were not
89                 % completely read in. To correct this, pad data.data with NaNs
90                 % until its length equals that of data.vars...
91                 if (length(data.data) < length(data.vars))
92                     data.data = padarray(data.data, ...
93                         [0 length(data.vars)-length(data.data)], ...
94                         NaN, 'post');
95                 end
96
97                 % concatenate variables with data...
98                 if(~isempty(data.data))
99                     final_vx = [final_vx; ...
100                         data.data(:,strmatch('m_final_water_vx',...
101                                              data.vars, 'exact'))];
102                     initial_vx = [initial_vx; ...
103                         data.data(:,strmatch('m_initial_water_vx',...
104                                              data.vars, 'exact'))];
105                     delta_vx = [delta_vx; ...
106                         data.data(:,strmatch('m_water_delta_vx',...
107                                              data.vars, 'exact'))];
108                     vx = [vx; ...
109                         data.data(:,strmatch('m_water_vx',...
110                                              data.vars, 'exact'))];
111                     prior_seg_vx = [prior_seg_vx; ...
112                         data.data(:,strmatch('x_prior_seg_water_vx',...
113                                              data.vars, 'exact'))];
114                     final_vy = [final_vy; ...
115                         data.data(:,strmatch('m_final_water_vy',...
116                                              data.vars, 'exact'))];
117                     initial_vy = [initial_vy; ...
118                         data.data(:,strmatch('m_initial_water_vy',...
119                                              data.vars, 'exact'))];
120                     delta_vy = [delta_vy; ...
121                         data.data(:,strmatch('m_water_delta_vy',...
122                                              data.vars, 'exact'))];
123                     vy = [vy; ...
124                         data.data(:,strmatch('m_water_vy',...
125                                              data.vars, 'exact'))];
126                     prior_seg_vy = [prior_seg_vy; ...
127                         data.data(:,strmatch('x_prior_seg_water_vy',...
128                                              data.vars, 'exact'))];
129                     lat = [lat; ...
130                         data.data(:,strmatch('m_lat',...
131                                              data.vars, 'exact'))];
132                     lon = [lon; ...
133                         data.data(:,strmatch('m_lon',...
134                                              data.vars, 'exact'))];
135                     gps_lat = [gps_lat; ...
136                         data.data(:,strmatch('m_gps_lat',...
137                                              data.vars, 'exact'))];
138                     gps_lon = [gps_lon; ...
139                         data.data(:,strmatch('m_gps_lon',...
140                                              data.vars, 'exact'))];
141                     ptime_dbd = [ptime_dbd; ...
142                         data.data(:,strmatch('m_present_time',...
143                                              data.vars, 'exact'))];
144                     ptime_ebd = [ptime_ebd; ...
145                         data.data(:,strmatch('sci_m_present_time',...
146                                              data.vars, 'exact'))];
147                 end
148
149                 data = [];
150             end 
151         end
152         %*** END READ IN DBD DATA ****
153        
154         % include only not NaNs from DBD data for either vx or final_vx...
155         i = find(~(isnan(vx) & isnan(final_vx)));
156         vx = vx(i);
157         final_vx = final_vx(i);
158         initial_vx = initial_vx(i);
159         delta_vx = delta_vx(i);
160         prior_seg_vx = prior_seg_vx(i);
161         vy = vy(i);
162         final_vy = final_vy(i);
163         initial_vy = initial_vy(i);
164         delta_vy = delta_vy(i);
165         prior_seg_vy = prior_seg_vy(i);
166         lat = lat(i);
167         lon = lon(i);
168         gps_lat = gps_lat(i);
169         gps_lon = gps_lon(i);
170         ptime_dbd = ptime_dbd(i);
171         ptime_ebd = ptime_ebd(i);
172        
173         % apply the sort() function to ptime_dbd
174         % to make sure it increases monotonically...
175         [Y,I] = sort(ptime_dbd);
176         ptime_dbd = Y;
177         vx = vx(I);
178         final_vx = final_vx(I);
179         initial_vx = initial_vx(I);
180         delta_vx = delta_vx(I);
181         prior_seg_vx = prior_seg_vx(I);
182         vy = vy(I);
183         final_vy = final_vy(I);
184         initial_vy = initial_vy(I);
185         delta_vy = delta_vy(I);
186         prior_seg_vy = prior_seg_vy(I);
187         lat = lat(I);
188         lon = lon(I);
189         gps_lat = gps_lat(I);
190         gps_lon = gps_lon(I);
191         ptime_ebd = ptime_ebd(I);
192
193         % convert ptime into datenum style...
194         ptime_dbd_datenum = (ptime_dbd/3600/24) + datenum(1970, 1, 1, 0, 0, 0);
195         ptime_ebd_datenum = (ptime_ebd/3600/24) + datenum(1970, 1, 1, 0, 0, 0);
196
197         % create configuration struct...
198         units = struct( ...
199             'vx', 'm/s', ...
200             'final_vx', 'm/s', ...
201             'initial_vx', 'm/s', ...
202             'delta_vx', 'm/s', ...
203             'prior_seg_vx', 'm/s', ...
204             'vy', 'm/s', ...
205             'final_vy', 'm/s', ...
206             'initial_vy', 'm/s', ...
207             'delta_vy', 'm/s', ...
208             'prior_seg_vy', 'm/s', ...
209             'lat', 'decimal degrees', ...
210             'lon', 'decimal degrees', ...
211             'gps_lat', 'decimal degrees', ...
212             'gps_lon', 'decimal degrees', ...
213             'ptime_dbd', 'seconds since 0000-01-01T00:00', ...
214             'ptime_dbd_datenum', 'days since 1970-01-01T00:00', ...
215             'ptime_ebd', 'seconds since 0000-01-01T00:00', ...
216             'ptime_ebd_datenum', 'days since 1970-01-01T00:00');
217        
218         variable_description = struct( ...
219             'vx', 'Eastward water velocity', ...
220             'final_vx', 'Final eastward water velocity', ...
221             'initial_vx', 'Initial eastward water velocity', ...
222             'delta_vx', 'Change in eastward water velocity', ...
223             'prior_seg_vx', 'Eastward water velocity of prior segment', ...
224             'vy', 'Northward water velocity', ...
225             'final_vy', 'Final northward water velocity', ...
226             'initial_vy', 'Initial northward water velocity', ...
227             'delta_vy', 'Change in northward water velocity', ...
228             'prior_seg_vy', 'Northward water velocity of prior segment', ...
229             'lat', 'north/south vehicle position', ...
230             'lon', 'east/west vehicle position', ...
231             'gps_lat', 'GPS fix latitude', ...
232             'gps_lon', 'GPS fix longitude', ...
233             'ptime_dbd', 'flight computer time', ...
234             'ptime_dbd_datenum', 'flight computer date', ...
235             'ptime_ebd', 'science computer time', ...
236             'ptime_ebd_datenum', 'science computer date');
237
238         config = struct('glider_name', strGliderName,...
239                         'deployment_number', strDeploymentNumber,...
240                         'start_date', strStartDate,...
241                         'end_date', strEndDate,...
242                         'var_descriptions', variable_description,...
243                         'var_units', units);
244
245         % set Level 1 data mat file name...
246         strMatFileName = strcat(strGliderName, '_Deployment', strDeploymentNumber, '_Currents_L1.mat');
247
248         % save flight data to mat file...
249         save(strMatFileName,...
250              'config', ...
251              'vx', ...
252              'final_vx', ...
253              'initial_vx', ...
254              'delta_vx', ...
255              'prior_seg_vx', ...
256              'vy', ...
257              'final_vy', ...
258              'initial_vy', ...
259              'delta_vy', ...
260              'prior_seg_vy', ...
261              'lat', ...
262              'lon', ...
263              'gps_lat', ...
264              'gps_lon', ...
265              'ptime_dbd', ...
266              'ptime_dbd_datenum', ...
267              'ptime_ebd', ...
268              'ptime_ebd_datenum');
269
270     end
271 end
Note: See TracBrowser for help on using the browser.