0001 function PVdata = VMT_PlotPlanViewQuiversMAT(zPathName,zFileName,zf,drng,ascale,QuiverSpacing,pvsmwin,pshore,plot_english)
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 warning off
0027 disp('Plotting Plan View with Depth-Averaged Velocity Vectors...')
0028
0029
0030
0031
0032
0033
0034
0035 savebathy = 0;
0036
0037 if exist('plot_english')==0
0038 plot_english = 0;
0039 disp('No units specified, plotting in metric units by default')
0040 end
0041
0042
0043
0044
0045
0046
0047
0048 if isnan(drng)
0049 drng = [];
0050 end
0051
0052 windowSize = pvsmwin;
0053
0054 plan_view_figure = figure(2); clf
0055
0056 if zf > 1
0057 mapmult = 1;
0058 else
0059 mapmult = 0;
0060 end
0061 gradDAV = [];
0062 gradDAVx = [];
0063 gradDAVy = [];
0064 ve = [];
0065 vn = [];
0066 xa = [];
0067 ya = [];
0068 xp = [];
0069 yp = [];
0070 bs = [];
0071 vp = [];
0072 vv = [];
0073 vs = [];
0074 dp = [];
0075
0076
0077
0078 if zf~=numel(zFileName)
0079 zf = numel(zFileName);
0080 end
0081
0082 for n=1:zf
0083 try
0084 eval(['load ' zPathName '\' zFileName{n}]);
0085 catch
0086 errstrng = {'An unknown error occurred when reading the MAT file.'...
0087 'This error may have occurred if Matlab was unable to find selected files. '...
0088 'Ensure the filenames and path to the selected files are free of white spaces and special '...
0089 'characters (e.g. *?<>|) and try again.'};
0090 warndlg(errstrng, 'VMT Error')
0091 end
0092
0093
0094 dx = V.mcsX(1,1) - V.mcsX(1,2);
0095 dy = V.mcsY(1,1) - V.mcsY(1,2);
0096 hgns = sqrt(dx.^2 + dy.^2);
0097
0098 if ~isempty(drng)
0099 indx = find(V.mcsDepth(:,1) < drng(1) | V.mcsDepth(:,1) > drng(2));
0100
0101
0102 V.mcsX(indx,:) = nan;
0103 V.mcsY(indx,:) = nan;
0104 V.mcsEast(indx,:) = nan;
0105 V.mcsNorth(indx,:) = nan;
0106 V.mcsDepth(indx,:) = nan;
0107 V.mcsBack(indx,:) = nan;
0108 V.w(indx,:) = nan;
0109 V.vp(indx,:) = nan;
0110 V.vs(indx,:) = nan;
0111
0112 if n == 1
0113 if plot_english
0114 disp(['Plotting Depth Range ' num2str(drng(1)*3.281) 'ft to ' num2str(drng(2)*3.281) 'ft'])
0115 else
0116 disp(['Plotting Depth Range ' num2str(drng(1)) 'm to ' num2str(drng(2)) 'm'])
0117 end
0118 end
0119
0120 clear indx
0121 end
0122
0123
0124 V.mcsX1 = nanmean(V.mcsX,1);
0125 V.mcsY1 = nanmean(V.mcsY,1);
0126
0127 if 0;
0128 V.mcsEast1 = nanmean(V.mcsEast,1);
0129 V.mcsNorth1 = nanmean(V.mcsNorth,1);
0130
0131 else
0132 V.mcsEast1 = VMT_LayerAveMean(V.mcsDepth,V.mcsEast);
0133 V.mcsNorth1 = VMT_LayerAveMean(V.mcsDepth,V.mcsNorth);
0134 V.mcsBack1 = VMT_LayerAveMean(V.mcsDepth,V.mcsBack);
0135 V.w1 = VMT_LayerAveMean(V.mcsDepth,V.w);
0136 V.vp1 = VMT_LayerAveMean(V.mcsDepth,V.vp);
0137 V.vs1 = VMT_LayerAveMean(V.mcsDepth,V.vs);
0138 end
0139
0140
0141
0142
0143 if windowSize == 0
0144 V.mcsX1sm = V.mcsX1;
0145 V.mcsY1sm = V.mcsY1;
0146 V.mcsEast1sm = V.mcsEast1;
0147 V.mcsNorth1sm = V.mcsNorth1;
0148 else
0149
0150
0151
0152
0153
0154 V.mcsEast1sm = nanmoving_average(V.mcsEast1,windowSize);
0155 V.mcsNorth1sm = nanmoving_average(V.mcsNorth1,windowSize);
0156 V.mcsX1sm = V.mcsX1;
0157 V.mcsY1sm = V.mcsY1;
0158
0159 end
0160
0161
0162 for zi = 1:z
0163 Mag(:,:,zi) = A(zi).Comp.mcsMag(:,:);
0164 end
0165 numavg = nansum(~isnan(Mag),3);
0166 numavg(numavg==0) = NaN;
0167 enscnt = nanmean(numavg,1);
0168 [I,J] = ind2sub(size(enscnt),find(enscnt>=1));
0169
0170 et = windowSize+J(1):QuiverSpacing:J(end);
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182 if n == 1
0183
0184 lenp = 0;
0185 end
0186
0187 len = length(V.mcsX1sm(1,et));
0188
0189 toquiv(lenp+1:len+lenp,1)=V.mcsX1sm(1,et);
0190 toquiv(lenp+1:len+lenp,2)=V.mcsY1sm(1,et);
0191 toquiv(lenp+1:len+lenp,3)=nanmean(V.mcsEast1sm(:,et),1);
0192 toquiv(lenp+1:len+lenp,4)=nanmean(V.mcsNorth1sm(:,et),1);
0193
0194 lenp = length(V.mcsX1sm(1,et))+lenp;
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208 xa = [xa V.mcsX1(1,1:end)];
0209 ya = [ya V.mcsY1(1,1:end)];
0210 xp = [xp V.mcsX1(1,et)];
0211 yp = [yp V.mcsY1(1,et)];
0212 ve = [ve V.mcsEast1(:,et)];
0213 vn = [vn V.mcsNorth1(:,et)];
0214 vv = [vv V.w1(:,et)];
0215 if 0
0216 vp = [vp -V.vp1(:,et)];
0217 else
0218 vp = [vp V.vp1(:,et)];
0219 end
0220 vs = [vs V.vs1(:,et)];
0221 bs = [bs V.mcsBack1(:,et)];
0222 dp = [dp V.mcsBed(1:end)];
0223
0224
0225 if mapmult
0226 clear A V z Mag numavg enscnt I J latlon idx namecut
0227 end
0228 end
0229 vr = sqrt(toquiv(:,3).^2+toquiv(:,4).^2);
0230
0231
0232 gdindx = find(~isnan(vr));
0233 toquiv = toquiv(gdindx,:);
0234
0235 figure(2); hold all
0236
0237
0238
0239 if pshore
0240 if isstruct(Map)
0241 VMT_PlotShoreline(Map)
0242 else
0243 disp('No Shoreline File Loaded')
0244 end
0245 end
0246
0247
0248 if plot_english
0249 figure(2); hold on
0250 quiverc(toquiv(:,1),toquiv(:,2),toquiv(:,3)*0.03281,toquiv(:,4)*0.03281,ascale);
0251 colorbar_handle = colorbar;
0252 if sum(~isnan(vr)) == 0
0253 errordlg('No Data in Specified Depth Range','Plotting Error');
0254 end
0255 disp(['DAV range (ft/s) = ' num2str(nanmin(vr)*0.03281) ' to ' num2str(nanmax(vr)*0.03281)])
0256 caxis([nanmin(vr*0.03281) nanmax(vr*0.03281)])
0257 if ~isempty(drng)
0258 title_handle = title({'Depth-Averaged Velocities (ft/s)'; ['Averaged over depths ' num2str(drng(1)*3.281) 'ft to ' num2str(drng(2)*3.281) 'ft']},'Color','w');
0259 else
0260 title_handle = title('Depth-Averaged Velocities (ft/s)','Color','w');
0261 end
0262
0263 else
0264 figure(2); hold on
0265 quiverc(toquiv(:,1),toquiv(:,2),toquiv(:,3),toquiv(:,4),ascale);
0266 colorbar_handle = colorbar('FontSize',16,'XColor','w','YColor','w');
0267 if sum(~isnan(vr)) == 0
0268 errordlg('No Data in Specified Depth Range','Plotting Error');
0269 end
0270 disp(['DAV range (cm/s) = ' num2str(nanmin(vr)) ' to ' num2str(nanmax(vr))])
0271 caxis([nanmin(vr) nanmax(vr)])
0272 if ~isempty(drng)
0273 title_handle = title({'Depth-Averaged Velocities (cm/s)'; ['Averaged over depths ' num2str(drng(1)) 'm to ' num2str(drng(2)) 'm']},'Color','w');
0274 else
0275 title_handle = title('Depth-Averaged Velocities (cm/s)','Color','w');
0276 end
0277 end
0278 xlabel_handle = xlabel('UTM Easting (m)');
0279 ylabel_handle = ylabel('UTM Northing (m)');
0280
0281
0282
0283 set(colorbar_handle, 'Tag','ColorBar')
0284 set(title_handle, 'Tag','PlanViewPlotTitle')
0285 set(ylabel_handle, 'Tag','yLabelText')
0286 set(xlabel_handle, 'Tag','xLabelText')
0287
0288
0289
0290 figure(2); box on
0291 set(gcf,'Color',[0 0 0])
0292 set(gca,...
0293 'DataAspectRatio',[1 1 1],...
0294 'PlotBoxAspectRatio',[1 1 1],...
0295 'TickDir','out')
0296 set(get(gca,'Title'), 'FontSize',14,'Color','w')
0297 set(get(gca,'xlabel'), 'FontSize',14,'Color','w')
0298 set(get(gca,'ylabel'), 'FontSize',14,'Color','w')
0299 set(colorbar_handle,...
0300 'FontSize',14,...
0301 'XColor','w',...
0302 'YColor','w');
0303 if 0
0304 CC = cptcmap('printvelocity.cpt');
0305 colormap(CC)
0306 end
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329
0330
0331 ticks_format('%6.0f','%8.0f');
0332 hdlzm = zoom;
0333 set(hdlzm,'ActionPostCallback',@mypostcallback_zoom);
0334 set(hdlzm,'Enable','on');
0335 hdlpn = pan;
0336 set(hdlpn,'ActionPostCallback',@mypostcallback_pan);
0337 set(hdlpn,'Enable','on');
0338
0339
0340 outmat = zeros(size(toquiv,1),5);
0341 outmat(:,1:2) = toquiv(:,1:2);
0342 outmat(:,4:5) = toquiv(:,3:4)./100;
0343
0344
0345 goodrows = [];
0346 for i = 1:length(outmat)
0347 rowsum = sum(isnan(outmat(i,:)));
0348 if rowsum == 0
0349 goodrows = [goodrows; i];
0350 end
0351 end
0352
0353 PVdata.outmat = outmat(goodrows,:)';
0354
0355
0356
0357 if 0
0358
0359 var = 'backscatter';
0360
0361 indx = ~isnan(ve) & ~isnan(vn) & ~isnan(vv);
0362 xg = xp(indx);
0363 yg = yp(indx);
0364 ve = ve(indx);
0365 vn = vn(indx);
0366 vm = sqrt(ve.^2 + vn.^2);
0367 vv = vv(indx);
0368 vp = vp(indx);
0369 vs = vs(indx);
0370 bs = bs(1:end);
0371 dp = dp(1:end);
0372
0373
0374
0375 figure(4); clf
0376 if isstruct(Map)
0377 VMT_PlotShoreline(Map)
0378 indxmap = find(Map.UTMe >= min(xa) & Map.UTMe <= max(xa)...
0379 & Map.UTMn >= min(ya) & Map.UTMn <= max(ya));
0380 xa = [xa Map.UTMe(indxmap)'];
0381 ya = [ya Map.UTMn(indxmap)'];
0382 xp = [xp Map.UTMe(indxmap)'];
0383 yp = [yp Map.UTMn(indxmap)'];
0384 yg = [yg Map.UTMn(indxmap)'];
0385 xg = [xg Map.UTMe(indxmap)'];
0386 vm = [vm zeros(size(Map.UTMe(indxmap)'))];
0387 ve = [ve zeros(size(Map.UTMe(indxmap)'))];
0388 vn = [vn zeros(size(Map.UTMe(indxmap)'))];
0389 vv = [vv zeros(size(Map.UTMe(indxmap)'))];
0390 vp = [vp zeros(size(Map.UTMe(indxmap)'))];
0391 vs = [vs zeros(size(Map.UTMe(indxmap)'))];
0392 bs = [bs nan*ones(size(Map.UTMe(indxmap)'))];
0393 dp = [dp zeros(size(Map.UTMe(indxmap)'))];
0394
0395
0396 else
0397 disp('No Shoreline File Loaded')
0398 end
0399 clvls = 60;
0400
0401 xgrdpts = 500;
0402 ygrdpts = xgrdpts;
0403
0404 switch var
0405 case{'magnitude'}
0406 gridvar = vm;
0407 [ZI,XI,YI] = gridfit(xg,yg,gridvar,xgrdpts,ygrdpts);
0408 case{'vertical'}
0409 gridvar = vv;
0410 [ZI,XI,YI] = gridfit(xg,yg,gridvar,xgrdpts,ygrdpts,'smoothness',2);
0411 case{'primary'}
0412 gridvar = vp;
0413 [ZI,XI,YI] = gridfit(xg,yg,gridvar,xgrdpts,ygrdpts);
0414 case{'secondary'}
0415 gridvar = vs;
0416 [ZI,XI,YI] = gridfit(xg,yg,gridvar,xgrdpts,ygrdpts);
0417 case{'backscatter'}
0418 gridvar = bs;
0419 [ZI,XI,YI] = gridfit(xp,yp,gridvar,xgrdpts,ygrdpts);
0420 case{'shear'}
0421 gridvar = vm;
0422 [ZI,XI,YI] = gridfit(xg,yg,gridvar,xgrdpts,ygrdpts);
0423 HX = [0 diff(XI)];
0424 HY = [0 diff(YI)];
0425 case{'secopri'}
0426 gridvar = abs(vs)./abs(vp);
0427 [ZI,XI,YI] = gridfit(xg,yg,gridvar,xgrdpts,ygrdpts,'smoothness',1);
0428 case{'depth'}
0429 gridvar = dp;
0430 [ZI,XI,YI] = gridfit(xa,ya,gridvar,xgrdpts,ygrdpts,'smoothness',1);
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440 end
0441
0442 switch var
0443 case{'shear'}
0444 [gradX,gradY] = gradient(ZI./100,HX,HY);
0445 ZI = sqrt(gradX.^2 + gradY.^2);
0446 gridvar = ZI;
0447 end
0448
0449 if isstruct(Map)
0450 OUT = ~inpolygon(XI,YI,Map.UTMe,Map.UTMn);
0451 ZI(OUT) = nan;
0452 end
0453
0454 zmin = floor(nanmin(nanmin(ZI)));
0455 zmax = ceil(nanmax(nanmax(ZI)));
0456 zinc = (zmax - zmin) / clvls;
0457 zlevs = zmin:zinc:zmax;
0458 switch var
0459 case{'secopri'}
0460 zmax = 1.0;
0461 zinc = (zmax - 0) / clvls;
0462 zlevs = 0:zinc:zmax;
0463 case{'depth'}
0464 zmin = 0;
0465 zmax = ceil(nanmax(nanmax(gridvar)));
0466 zinc = (zmax - zmin) / clvls;
0467 zlevs = zmin:zinc:zmax;
0468 end
0469
0470
0471
0472 contour(XI,YI,ZI,zlevs,'Fill','on','Linestyle','none'); hold on
0473 colorbar('FontSize',16,'XColor','w','YColor','w');
0474
0475
0476 if 0
0477 for j = 1:length(gridvar)
0478 text(xg(j),yg(j),num2str(gridvar(j)),'FontSize',6); hold on
0479 end
0480 end
0481
0482
0483 if isstruct(Map)
0484 VMT_BlankShoreline(xa,ya,Map);
0485
0486 end
0487 quiver(xg,yg,ve,vn,'k','Filled'); hold on
0488
0489
0490
0491 if ~isempty(drng)
0492 switch var
0493 case{'magnitude'}
0494 title({'Depth-Averaged Horizontal Velocity Magnitude (cm/s)'; ['Averaged over depths ' num2str(drng(1)) 'm to ' num2str(drng(2)) 'm']},'Color','w')
0495 case{'vertical'}
0496 title({'Depth-Averaged Vertical Velocity (cm/s)'; ['Averaged over depths ' num2str(drng(1)) 'm to ' num2str(drng(2)) 'm']},'Color','w')
0497 case{'primary'}
0498 title({'Depth-Averaged Primary Velocity (cm/s)'; ['Averaged over depths ' num2str(drng(1)) 'm to ' num2str(drng(2)) 'm']},'Color','w')
0499 case{'secondary'}
0500 title({'Depth-Averaged Secondary Velocity (cm/s)'; ['Averaged over depths ' num2str(drng(1)) 'm to ' num2str(drng(2)) 'm']},'Color','w')
0501 case{'backscatter'}
0502 title({'Depth-Averaged Backscatter (dB)'; ['Averaged over depths ' num2str(drng(1)) 'm to ' num2str(drng(2)) 'm']},'Color','w')
0503 case{'shear'}
0504 title({'Depth-Averaged Shear (s^{-1})'; ['Averaged over depths ' num2str(drng(1)) 'm to ' num2str(drng(2)) 'm']},'Color','w')
0505 case{'secopri'}
0506 title({'Depth-Averaged Ratio of Secondary to Primary Velocity'; ['Averaged over depths ' num2str(drng(1)) 'm to ' num2str(drng(2)) 'm']},'Color','w');
0507 case{'depth'}
0508 title('Average Bed Depth (m)','Color','w');
0509 end
0510 else
0511 switch var
0512 case{'magnitude'}
0513 title('Depth-Averaged Horizontal Velocity Magnitude (cm/s)','Color','w')
0514 case{'vertical'}
0515 title('Depth-Averaged Vertical Velocity (cm/s)','Color','w')
0516 case{'primary'}
0517 title('Depth-Averaged Primary Velocity (cm/s)','Color','w')
0518 case{'secondary'}
0519 title('Depth-Averaged Secondary Velocity (cm/s)','Color','w')
0520 case{'backscatter'}
0521 title('Depth-Averaged Backscatter (dB)','Color','w')
0522 case{'shear'}
0523 title('Depth-Averaged Shear (s^{-1})','Color','w')
0524 case{'secopri'}
0525 title('Depth-Averaged Ratio of Secondary to Primary Velocity','Color','w');
0526 case{'depth'}
0527 title('Average Bed Depth (m)','Color','w');
0528 end
0529 end
0530 figure(4); box on
0531 set(gcf,'Color',[0 0 0])
0532 if isstruct(Map)
0533 set(gca,'Color',[0.8,0.733,0.533])
0534 else
0535 set(gca,'Color',[0 0 0])
0536 end
0537 set(gca,'DataAspectRatio',[1 1 1],'PlotBoxAspectRatio',[1 1 1])
0538 set(gca,'TickDir','out')
0539 set(gca,'XColor','w')
0540 set(gca,'YColor','w')
0541
0542 end
0543
0544
0545 function mypostcallback_zoom(obj,evd)
0546 ticks_format('%6.0f','%8.0f');
0547
0548 function mypostcallback_pan(obj,evd)
0549 ticks_format('%6.0f','%8.0f');
0550