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

root/gliderproc/trunk/extractDbd.m

Revision 503 (checked in by cbc, 11 years ago)

Test code fo gliderOptode_Generate_L1_Data.m

Line 
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
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
Note: See TracBrowser for help on using the browser.