Home > reduc > flag > flagplot.m

flagplot

PURPOSE ^

function allflags=flagplot(allflags,xy,bs,bn)

SYNOPSIS ^

function [allflags newFlag]=flagplot(d,allflags,xy,bs,bn)

DESCRIPTION ^

 function allflags=flagplot(allflags,xy,bs,bn)

 d - data structure
 allflags - bit oriented flag array like in allFlags
 xy - data structure where xy{1,:} is x values, xy{2,:} is y values.
 bs - channel number
 bn - time stream number

 flag - flag array

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function [allflags newFlag]=flagplot(d,allflags,xy,bs,bn)
0002 
0003 % function allflags=flagplot(allflags,xy,bs,bn)
0004 %
0005 % d - data structure
0006 % allflags - bit oriented flag array like in allFlags
0007 % xy - data structure where xy{1,:} is x values, xy{2,:} is y values.
0008 % bs - channel number
0009 % bn - time stream number
0010 %
0011 % flag - flag array
0012 %
0013 
0014 
0015 % get what are the new flags we get from this function
0016 for m=1:size(allflags,2)
0017   newFlag{m} = logical(zeros(size(allflags{1,m})));
0018   orgFlag{m} = allflags{1,m};
0019   oldFlag{m} = allflags{2,m};
0020 end
0021 
0022 % get x and y set up
0023 for m=1:size(xy,2)
0024   x{m} = xy{1,m};
0025   y{m} = xy{2,m};
0026 end
0027 clear xy;
0028 
0029 % initialize flag array
0030 dcm=toggleCursor;
0031 hold on
0032 
0033 % store axis limit
0034 x_axis=get(gca,'xlim');
0035 y_axis=get(gca,'ylim');
0036 
0037 % default mode
0038 % flag mode={'s','c', 't', '-', '='}
0039 fmode='s';
0040 % global mode={'s','a'};
0041 gmode='a';
0042 % emode={'f','u','y','x','z'}
0043 emode='f';
0044 
0045 % initialize counter
0046 ccnt=1;
0047 
0048 disp('Entering flagging mode')
0049 
0050 while(1)
0051   w=waitforbuttonpress;
0052 
0053   if (w)
0054     % if in the middle of 'c' mode, have the user make
0055     % another selection
0056     ch=get(gcf,'CurrentCharacter');
0057     gbuf=gmode;
0058     ebuf=emode;
0059     if (strcmp(ch,'g'))
0060       grid
0061     else
0062       [fmode,emode,gmode]=setmodes(ch,fmode,emode,gmode);
0063       if (fmode=='q')
0064     break;
0065       elseif (fmode=='c' | emode=='i' | fmode=='t' | emode=='z' | ...
0066           emode=='y' | emode=='x')
0067     datacursormode off
0068     [ptx,pty]=ginput(2);
0069     pts(1).Position(1)=ptx(1);
0070     pts(1).Position(2)=pty(1);
0071     pts(2).Position(1)=ptx(2);
0072     pts(2).Position(2)=pty(2);
0073     [newFlag]=flagpts(newFlag,orgFlag,oldFlag,x,y,bs,bn,...
0074         fmode,emode,gmode,pts);
0075     pts=[];
0076     % reinitialize mode specifiers
0077     fmode='a';
0078     emode=ebuf;
0079     gmode=gbuf;
0080     disp('Returning to all channels mode');
0081     datacursormode on
0082       elseif (fmode=='-' | fmode=='=')
0083     datacursormode off
0084     [ptx,pty]=ginput(1);
0085     pts.Position(1)=ptx;
0086     pts.Position(2)=pty;
0087     [newFlag]=flagpts(newFlag,orgFlag,oldFlag,x,y,bs,bn,...
0088         fmode,emode,gmode,pts);
0089     pts=[];
0090     fmode='a';
0091     emode=ebuf;
0092     gmode=gbuf;
0093     disp('Returning to all channels mode');
0094     datacursormode on
0095       elseif (gmode=='e')
0096     disp('Erasing new flags')
0097     flag=orgFlag;
0098         scriptflag=orgScriptflag;
0099     if (exist('pts'))
0100     [newFlag]=flagpts(newFlag,orgFlag,oldFlag,x,y,bs,bn,...
0101         fmode,emode,gmode,pts);
0102     else
0103       disp('No new flags to erase!')
0104     end
0105     gmode=gbuf;
0106       elseif (emode=='o')
0107     emode=ebuf;
0108     xlim([x_axis(1) x_axis(2)])
0109     ylim([y_axis(1) y_axis(2)])
0110       end
0111     end
0112   else
0113     pts=getCursorInfo(dcm);
0114     if (isempty(pts))
0115       disp(' ')
0116       disp('Please click closer to the desired point')
0117     else
0118       [newFlag]=flagpts(newFlag,orgFlag,oldFlag,x,y,bs,bn,...
0119       fmode,emode,gmode,pts);  
0120       pts=[];
0121       dcm=toggleCursor;
0122     end
0123   end
0124 end
0125 
0126 % update the flags
0127 % these newFlags become a part of allflags{1,:}
0128 for m=1:size(allflags,2)
0129   allflags{1,m} = allflags{1,m} | newFlag{m};
0130 end
0131 
0132 hold off
0133 datacursormode off
0134 return;
0135 
0136 
0137 
0138 %%%%%%%%%%%%%%%%%%%%%%%%%%%
0139 function [newFlag]=flagpts(newFlag,orgFlag, oldFlag,x,y,...
0140     bs,bn,fmode,emode,gmode,pt)
0141 
0142 
0143 % get a buffer for the flags
0144 switch gmode
0145   % single
0146   case 's'
0147     ind=getindex(fmode,pt,x,y,bs,bn);
0148     if(iscell(ind))
0149       % y+ or y- flag -- only applies to that channel
0150       for m=1:length(ind)
0151     newFlag{m}(ind{m},bn) = 1;
0152       end
0153     else
0154       newFlag{bs}(ind,bn)=1;     
0155     end
0156     
0157     
0158         
0159   % all channels
0160   case 'a'
0161     for i=1:size(newFlag{bs},2);
0162       ind=getindex(fmode,pt,x,y,bs,bn);
0163       if(iscell(ind))
0164     % y+ or y- flag -- only applies to that channel
0165     for m=1:length(ind)
0166       newFlag{m}(ind{m},bn) = 1;
0167     end
0168       else
0169     newFlag{bs}(ind,i)=1;     
0170       end
0171     end
0172   
0173   case 'e'
0174     plot(x{bs},y{bs}(:,bn),'b.');
0175     f=find(newFlag{bs}(:,bn)==1);
0176     plot(x{bs}(f),y{bs}(f,bn),'r.');
0177     if (~isempty(autoflag))
0178       f=find(autoflag{bs}(:,bn)~=0);
0179       plot(x{bs}(f),y{bs}(f,bn),'m.');
0180     end
0181     return
0182     for m=1:length(newFlag)
0183       newFlag{m} = logical(zeros(size(newFlag{m})));
0184     end    
0185     
0186     
0187 end
0188 
0189 % get current "ind" for plotting purposes
0190 ind=getindex(fmode,pt,x,y,bs,bn);
0191 if(iscell(ind))
0192   ind = ind{bs};
0193 end
0194 
0195 
0196 switch emode
0197   case 'f'
0198     % flag
0199     plot(x{bs}(ind),y{bs}(ind,bn),'r.');
0200     
0201   case 'u'
0202     disp(' unflagging')
0203     % unflag
0204     newFlag{bs} = -newFlag{bs};
0205     plot(x{bs}(ind),y{bs}(ind,bn),'b.');
0206 
0207 %  case 'i'
0208 %    % of ind, find those that are not already flagged
0209 %    ind = unflagged(ind,flag(:,bs,bn),autoflag(:,bs,bn));
0210 %    plot(x(ind),y(ind,bs,bn),'g.');
0211 %    disp(' ')
0212 %    disp('   X:')
0213 %    disp(sprintf('     mean: %f',nanmean(x(ind))));
0214 %    disp(sprintf('     max:  %f',max(x(ind))));
0215 %    disp(sprintf('     min:  %f',min(x(ind))));
0216 %    disp(sprintf('     std:  %f',nanstd(x(ind))));
0217 %    disp(' ')
0218 %    disp('   Y: ')
0219 %    disp(sprintf('     mean: %f',nanmean(y(ind,bs,bn))));
0220 %    disp(sprintf('     max:  %f',max(y(ind,bs,bn))));
0221 %    disp(sprintf('     min:  %f',min(y(ind,bs,bn))));
0222 %    disp(sprintf('     std:  %f',nanstd(y(ind,bs,bn))));
0223 %    disp(' ')
0224 %    disp('click or hit any key to continue')
0225 %    w=waitforbuttonpress;
0226 %    % return to original display state
0227 %    plot(x(ind),y(ind,bs,bn),'b.')
0228 
0229   case 'z'
0230     xlimit=sort([pt(1).Position(1) pt(2).Position(1)]);
0231     ylimit=sort([pt(1).Position(2) pt(2).Position(2)]);
0232     if (any(isnan(xlimit)) | any(isnan(ylimit)))
0233       disp('x/y limit cannot contain NaN values')
0234       return
0235     elseif (xlimit(1)==xlimit(2) | ylimit(1)==ylimit(2))
0236       disp('x/y limits cannot have the same values')
0237       return
0238     end
0239     xlim([xlimit(1) xlimit(2)]);
0240     ylim([ylimit(1) ylimit(2)]);
0241     
0242   case 'x'
0243     xlim(sort([pt(1).Position(1) pt(2).Position(1)]))
0244     
0245   case 'y'
0246     ylimit=[pt(1).Position(2) pt(2).Position(2)];
0247     ylimit=sort(ylimit);
0248     ylim([ylimit(1) ylimit(2)])
0249     
0250 end
0251 
0252 return;
0253 
0254 
0255 %%%%%%%%%%%%%%%%%%%%%%%%%%%
0256 function ind=getindex(fmode,pts,x,y,bs,bn)
0257 
0258 % sometimes the x and y are of different type, column v. row
0259 if (size(x)~=size(y))
0260   error('can not getindex');
0261 end
0262 
0263 for i=1:length(pts)
0264   xval(i)=pts(i).Position(1);
0265   yval(i)=pts(i).Position(2);
0266 end
0267 
0268 if (length(xval)==1)
0269   if (fmode=='-')
0270 %    ind=getindex(fmode,pt,x,y,bs,bn);
0271 %    ind=getindex(fmode,pt,x{bs},y{bs}(:,bn),x,y,bn);
0272     for m=1:length(y)
0273       ind{m} = y{m}(:,bn)<=yval;
0274     end
0275   elseif (fmode=='=')
0276     for m=1:length(y)
0277       ind{m} = y{m}(:,bn)>=yval;
0278     end    
0279   else
0280     ind=x{bs}==xval;
0281   end
0282 else
0283   xval=sort(xval);
0284   yval=sort(yval);
0285   if (fmode=='t')
0286     ind=(x{bs}>=xval(1) & x{bs}<=xval(2));
0287   else
0288     ind=(x{bs}>=xval(1) & x{bs}<=xval(2) & y{bs}(:,bn)>=yval(1) & y{bs}(:,bn)<=yval(2));  
0289   end
0290 end
0291 
0292 
0293 return;
0294 
0295 %%%%%%%%%%%%%%%%%%%%%%%%%%%
0296 function [fmode,emode,gmode]=setmodes(mode,fmode,emode,gmode)
0297 
0298 switch mode
0299   case 's'
0300     disp('Single channel mode')
0301     gmode=mode;
0302     fmode=mode;
0303     
0304   case 'a'
0305     disp('All Channels mode')
0306     gmode=mode;
0307     
0308   case 'c' 
0309     disp('Data chunk - Please choose two points')
0310     fmode=mode;
0311     gmode='s';
0312     
0313   case 't'
0314     disp('Time chunk - Please choose two points')
0315     fmode=mode;
0316     
0317   case '-'
0318     disp('Y limit - below')
0319     fmode=mode;
0320     
0321   case '='
0322     disp('Y limit - above')
0323     fmode=mode;
0324     
0325   case 'f'
0326     disp('Flag mode   ')
0327     emode=mode;
0328     
0329   case 'u'
0330     disp('Unflag mode')
0331     emode=mode;
0332     
0333   case 'q'
0334     disp('exitting flagging')
0335     fmode=mode;
0336     
0337   case 'e'
0338     gmode=mode;
0339     
0340   case 'z'
0341     emode=mode;
0342     disp('Box zoom')
0343     
0344   case 'x'
0345     emode=mode;
0346     disp('Zoom x-axis')
0347     
0348   case 'y'
0349     emode=mode;
0350     disp('Zoom y-axis')
0351     
0352   case 'o'
0353     emode=mode;
0354     disp('Unzooming')
0355     
0356   case 'h'
0357     printhelp;
0358     
0359   otherwise
0360     disp('Invalid Command');
0361     
0362 end
0363 
0364 
0365 %%%%%%%%%%%%%%%%%%%%%%%%%%%
0366 function ind=unflagged(ind,flag,autoflag)
0367 
0368 f=flag(ind)==1;
0369 ff=autoflag(ind)~=0;
0370 f=f|ff;
0371 
0372 s=find(ind==1);
0373 ind(s(find(f==1)))=0;
0374 
0375 
0376 
0377 %%%%%%%%%%%%%%%%%%%%%%%%%%%
0378 function dcm=toggleCursor
0379 
0380 datacursormode off
0381 dcm=datacursormode(gcf);
0382 set(dcm,'Enable','on','DisplayStyle','window','SnapToDataVertex','on');    
0383 
0384 return;
0385 
0386 
0387 %%%%%%%%%%%%%%%%%%%%%%%%%%%
0388 function allflags=updateflags(allflags,flag,orgFlag,...
0389     scriptflag,orgScriptflag, newFlag)
0390 
0391 % repack allflags
0392 for m=1:length(flag)
0393   flag{m}=uint8(flag{m});
0394   scriptflag{m} = uint8(scriptflag{m});
0395   allflags{m} = bitor(uint8(allflags{m}),bitshift(uint8(newFlag{m}),2));
0396 %  allflags{m} = compareflags(allflags{m},flag{m},orgFlag{m},2);
0397 
0398   allflags{m} = bitor(uint8(allflags{m}),bitshift(scriptflag{m},4));
0399 %  allflags{m} = compareflags(allflags{m},scriptflag{m},orgScriptflag{m},2);
0400 end
0401 
0402 return;
0403 
0404 
0405 %%%%%%%%%%%%%%%%%%%%%%%%%%%
0406 function allflags=compareflags(allflags,flag,orgFlag,bitnum)
0407 
0408 % compare with original flags and find all
0409 % unflagged points
0410 f = find(orgFlag==0);
0411 flag = bitshift(flag, bitnum);
0412 flag(f) = sum(bitset(0,[1:8]));
0413 allflags = bitand(allflags,flag);
0414 
0415 return;
0416 
0417 
0418 
0419 %%%%%%%%%%%%%%%%%%%%%%%%%%%
0420 function printhelp()
0421 
0422 disp(' ')
0423 disp('**Flagging**')
0424 disp(' ')
0425 disp('GLOBAL TYPE COMMANDS')
0426 disp('s - flag single channel');
0427 disp('a - all channels for this timestamp');
0428 disp(' ')
0429 disp('LOCAL TYPE COMMANDS')
0430 disp('c - chunk of data. click 2 corners of a rectangle')
0431 disp('t - time chunk.  like ''c'' but only uses x-axis as constraint')
0432 disp('- - flags everything below y-value for all times of this channel only')
0433 disp('= - flags everything above y-value for all times of this channel only')
0434 disp('m - flags specific bands')
0435 disp('n - flags specific baselines/antennas')
0436 disp(' ')
0437 disp('EDIT TYPE COMMANDS')
0438 disp('f - flag mode')
0439 disp('u - unflag mode')
0440 disp('e - erases all new flags')
0441 disp(' ')
0442 disp('**Zoom**')
0443 disp('z - box zoom')
0444 disp('x - zoom x axis')
0445 disp('y - zoom y axis')
0446 disp('o - original plot (unzoom)')
0447 disp(' ')
0448 disp('**Misc Display**')
0449 disp('g - toggle grid on/off')
0450 disp('q - exit flag mode')
0451 disp('h - help')
0452 disp(' ')
0453     
0454   
0455

Generated on Sun 14-Jun-2015 17:12:45 by m2html © 2005