0001 function [PVdata,fig_planview_handle,log_text] = VMT_PlotPlanViewQuivers(z,A,V,Map,drng,ascale,QuiverSpacing,pvsmwin,pshore,plot_english,varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 warning off
0029
0030
0031
0032
0033
0034
0035 if exist('plot_english')==0
0036 plot_english = 0;
0037 disp('No units specified, plotting in metric units by default')
0038 end
0039
0040
0041
0042 if isnan(drng)
0043 drng = [];
0044 end
0045
0046 windowSize = pvsmwin;
0047
0048
0049 fig_planview_handle = findobj(0,'name','Plan View Map');
0050
0051 if ~isempty(fig_planview_handle) && ishandle(fig_planview_handle)
0052 figure(fig_planview_handle); clf
0053 else
0054 fig_planview_handle = figure('name','Plan View Map'); clf
0055
0056 end
0057
0058
0059 disableMenuBar(fig_planview_handle)
0060
0061
0062 minrng = [];
0063 maxrng = [];
0064 usecolormap = [];
0065 cptfullfile = [];
0066 if ~isempty(varargin)
0067 if iscell(varargin{1})
0068 mapmult = true;
0069 zf = length(varargin{1});
0070 else
0071 mapmult = false;
0072 zf = 1;
0073 end
0074 zPathName = varargin{2};
0075 zFileName = varargin{1};
0076
0077
0078
0079 if size(varargin,2) > 2
0080 minrng = varargin{3};
0081 maxrng = varargin{4};
0082 usecolormap = varargin{5};
0083 cptfullfile = varargin{6};
0084 end
0085 else
0086 mapmult = false;
0087 zf = 1;
0088 end
0089
0090 for n=1:zf
0091 if mapmult
0092 eval(['load (' sprintf( '\''' ) fullfile(zPathName,zFileName{n}) sprintf( '\''' ) ')']);
0093 end
0094
0095 if ~isempty(drng)
0096 indx = find(V.mcsDepth(:,1) < drng(1) | V.mcsDepth(:,1) > drng(2));
0097
0098
0099 V.mcsX(indx,:) = nan;
0100 V.mcsY(indx,:) = nan;
0101 V.mcsEast(indx,:) = nan;
0102 V.mcsNorth(indx,:) = nan;
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112 clear indx
0113 end
0114
0115
0116 V.mcsX1 = nanmean(V.mcsX,1);
0117 V.mcsY1 = nanmean(V.mcsY,1);
0118
0119 if 0;
0120 V.mcsEast1 = nanmean(V.mcsEast,1);
0121 V.mcsNorth1 = nanmean(V.mcsNorth,1);
0122
0123 else
0124 V.mcsEast1 = VMT_LayerAveMean(V.mcsDepth,V.mcsEast);
0125 V.mcsNorth1 = VMT_LayerAveMean(V.mcsDepth,V.mcsNorth);
0126 end
0127
0128
0129
0130
0131 if windowSize == 0
0132 V.mcsX1sm = V.mcsX1;
0133 V.mcsY1sm = V.mcsY1;
0134 V.mcsEast1sm = V.mcsEast1;
0135 V.mcsNorth1sm = V.mcsNorth1;
0136 else
0137
0138
0139
0140
0141
0142 V.mcsEast1sm = nanmoving_average(V.mcsEast1,windowSize);
0143 V.mcsNorth1sm = nanmoving_average(V.mcsNorth1,windowSize);
0144 V.mcsX1sm = V.mcsX1;
0145 V.mcsY1sm = V.mcsY1;
0146 end
0147
0148 for zi = 1 : z
0149 Mag(:,:,zi) = A(zi).Comp.mcsMag(:,:);
0150
0151 end
0152 numavg = nansum(~isnan(Mag),3);
0153 numavg(numavg==0) = NaN;
0154 enscnt = nanmean(numavg,1);
0155 [I,J] = ind2sub(size(enscnt),find(enscnt>=1));
0156
0157 et = windowSize+J(1):QuiverSpacing:J(end);
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169 if n == 1
0170 toquiv(1:493,1:4)=NaN;
0171 lenp = 0;
0172 end
0173
0174 len = length(V.mcsX1sm(1,et));
0175
0176 toquiv(lenp+1:len+lenp,1)=V.mcsX1sm(1,et);
0177 toquiv(lenp+1:len+lenp,2)=V.mcsY1sm(1,et);
0178 toquiv(lenp+1:len+lenp,3)=nanmean(V.mcsEast1sm(:,et),1);
0179 toquiv(lenp+1:len+lenp,4)=nanmean(V.mcsNorth1sm(:,et),1);
0180
0181 lenp = length(V.mcsX1sm(1,et))+lenp;
0182
0183
0184
0185
0186
0187 if mapmult
0188 clear A V z Mag numavg enscnt I J latlon idx namecut
0189 end
0190 end
0191 vr = sqrt(toquiv(:,3).^2+toquiv(:,4).^2);
0192
0193
0194 gdindx = find(~isnan(vr));
0195 toquiv = toquiv(gdindx,:);
0196
0197 figure(fig_planview_handle); hold on
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207 if plot_english
0208
0209 quiverc(toquiv(:,1),toquiv(:,2),toquiv(:,3)*0.03281,toquiv(:,4)*0.03281,ascale,...
0210 minrng,...
0211 maxrng,...
0212 usecolormap,...
0213 cptfullfile);
0214 colorbar
0215 if sum(~isnan(vr)) == 0
0216 errordlg('No Data in Specified Depth Range','Plotting Error');
0217 end
0218 log_text = {sprintf(' DAV range: %6.3f to %6.3f ft/s', nanmin(vr)*0.03281,nanmax(vr)*0.03281)};
0219
0220
0221 if ~isempty(minrng)
0222 caxis([minrng maxrng])
0223 else
0224 caxis([nanmin(vr*0.03281) nanmax(vr*0.03281)])
0225 end
0226 if ~isempty(drng)
0227 title({'Depth-Averaged Velocities (ft/s)'; ['Averaged over depths ' num2str(drng(1)*3.281) 'ft to ' num2str(drng(2)*3.281) 'ft']})
0228 else
0229 title('Depth-Averaged Velocities (ft/s)')
0230 end
0231 else
0232
0233 quiverc(toquiv(:,1),toquiv(:,2),toquiv(:,3),toquiv(:,4),ascale,...
0234 minrng,...
0235 maxrng,...
0236 usecolormap,...
0237 cptfullfile);
0238 colorbar
0239 if sum(~isnan(vr)) == 0
0240 errordlg('No Data in Specified Depth Range','Plotting Error');
0241 end
0242 log_text = {sprintf(' DAV range: %6.3f to %6.3f m/s', nanmin(vr),nanmax(vr))};
0243
0244
0245 if ~isempty(minrng)
0246 caxis([minrng maxrng])
0247 else
0248 caxis([nanmin(vr) nanmax(vr)])
0249 end
0250
0251 if ~isempty(drng)
0252 title({'Depth-Averaged Velocities (cm/s)'; ['Averaged over depths ' num2str(drng(1)) 'm to ' num2str(drng(2)) 'm']})
0253 else
0254 title('Depth-Averaged Velocities (cm/s)')
0255 end
0256 end
0257
0258 xlabel('UTM Easting (m)')
0259 ylabel('UTM Northing (m)')
0260 figure(fig_planview_handle); box on
0261
0262
0263 set(gca,'DataAspectRatio',[1 1 1],'PlotBoxAspectRatio',[1 1 1])
0264 set(gca,'TickDir','out')
0265
0266
0267 ticks_format('%6.0f','%8.0f');
0268 hdlzm = zoom;
0269 set(hdlzm,'ActionPostCallback',@mypostcallback_zoom);
0270 set(hdlzm,'Enable','on');
0271 hdlpn = pan;
0272 set(hdlpn,'ActionPostCallback',@mypostcallback_pan);
0273 set(hdlpn,'Enable','on');
0274
0275
0276
0277
0278
0279
0280 outmat = zeros(size(toquiv,1),5);
0281 outmat(:,1:2) = toquiv(:,1:2);
0282 outmat(:,4:5) = toquiv(:,3:4)./100;
0283
0284
0285 goodrows = [];
0286 for i = 1:length(outmat)
0287 rowsum = sum(isnan(outmat(i,:)));
0288 if rowsum == 0
0289 goodrows = [goodrows; i];
0290 end
0291 end
0292
0293 PVdata.outmat = outmat(goodrows,:)';
0294
0295 function mypostcallback_zoom(obj,evd)
0296 ticks_format('%6.0f','%8.0f');
0297
0298 function mypostcallback_pan(obj,evd)
0299 ticks_format('%6.0f','%8.0f');
0300
0301