⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 picktimes3.m,v

📁 具有特色的地震数据处理源码
💻 M,V
字号:
head	3.0;access;symbols;locks; strict;comment	@// @;3.0date	2000.06.13.19.23.19;	author gilles;	state Exp;branches;next	2.0;2.0date	99.05.21.18.48.01;	author mah;	state Exp;branches;next	1.1;1.1date	99.01.06.19.09.29;	author kay;	state Exp;branches;next	;desc@@3.0log@Release 3@text@function picktimes3(action)%meant to work on top of a figure that has one axis with seismic traces on it%this is an attempt to imitate the picking process as it is set up in%INSIGHT's vaq2%stores pick times as indexes in variable 'ptimes'%%picking is done as follows:%	first mouse button: clears a single trace pick%	second mouse button: selects a single trace pick%	third mouse button: starts dragging a line%	  followed by 1st or 3d button: erases picks on all selected traces%	  followed by 2nd button: picks times on all selected traces%%written by K.S. Beaty February, 1998%$Id: picktimes3.m,v 2.0 1999/05/21 18:48:01 mah Exp gilles $%$Log: picktimes3.m,v $%Revision 2.0  1999/05/21 18:48:01  mah%Release 2%%Revision 1.1  1999/01/06 19:09:29  kay%Initial revision%%%Copyright (C) 1998 Seismology and Electromagnetic Section/%Continental Geosciences Division/Geological Survey of Canada%%This library is free software; you can redistribute it and/or%modify it under the terms of the GNU Library General Public%License as published by the Free Software Foundation; either%version 2 of the License, or (at your option) any later version.%%This library is distributed in the hope that it will be useful,%but WITHOUT ANY WARRANTY; without even the implied warranty of%MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU%Library General Public License for more details.%%You should have received a copy of the GNU Library General Public%License along with this library; if not, write to the%Free Software Foundation, Inc., 59 Temple Place - Suite 330,%Boston, MA  02111-1307, USA.%%DSI Consortium%Continental Geosciences Division%Geological Survey of Canada%615 Booth St.%Ottawa, Ontario%K1A 0E9%%email: dsi@@cg.nrcan.gc.caglobal tempglobal ptimesrec=str2num(get(findobj('tag','EditRec1'),'string'));tr1=str2num(get(findobj('tag','EditTr1'),'string'));tr2=str2num(get(findobj('tag','EditTr2'),'string'));t1=str2num(get(findobj('tag','EditT1'),'string'));t2=str2num(get(findobj('tag','EditT2'),'string'));data=get(gcf,'userdata');axhand=data{5};dataset=data{1};ntr=tr2-tr1+1;smp=dataset.fh{8};if nargin==0 ptimes=zeros(6,ntr); headwd=str2num(get(findobj('tag','EditHead1'),'string')); ptimes(1,:)=dataset.th{rec}(headwd,tr1:tr2); t=ptimes(1,:); if (min(t)<t1 & min(t)~=0) | max(t)>t2  close(findobj('name','Pick First Breaks'))  msgbox('Pick times are not within t1 and t2.  Try again.', 'Warning','warn')  error('Pick times are not within t1 and t2'); end %if k=find(ptimes(1,:)~=0); ptimes(1,k)=round((ptimes(1,k)-t1)./smp+1); z=find(ptimes(1,:)==0); a=ptimes(1,:); a(z)=NaN; for n=5:-1:3  set(gcf,'currentaxes',axhand(n-2))  hold on  for i=k   greenpeaks([i+tr1-1,t(i),ptimes(1,i)],n-1)  end %for  temp(n)=line(tr1:tr2,(a-1)*smp+t1,'erasemode','xor');  set(temp(n),'color','r','linewidth',[2]) end %for% set(gcf,'windowbuttondownfcn','picktimes3 down1;'); return;end %ifswitch action case 'down1'  pt=get(gca,'CurrentPoint');  index=round((pt(1,2)-t1)./smp+1);  pt=[round(pt(1,1)) pt(1,2) index];  but=get(gcf,'SelectionType');  switch but   case 'alt' %button 3 - start dragging line for multiple picks/clears    temp(2)=plot(pt(1,1),pt(1,2),'ro', 'EraseMode', 'xor');    temp(1)=line('XData',[pt(1,1);pt(1,1)],'YData',[pt(1,2);pt(1,2)], 'EraseMode', 'xor');    set(temp(1),'color','r');    set(gcf,'windowbuttonmotionfcn','picktimes3 motion1;');    set(gcf,'windowbuttondownfcn','picktimes3 down2;');   case 'extend' %button 2 - pick single peak    killflg=get(findobj(gcf,'string','KILL'),'userdata');    if killflg{1}(1,round(pt(1,1))-tr1+1)~=0 %if trace has been killed     return;    end %if to ignore killed traces    if ptimes(2,pt(1,1)-tr1+1)~=0 %delete greenpeak if it exists      delete(ptimes(2:4,pt(1,1)-tr1+1))      ptimes(2:4,pt(1,1)-tr1+1)=0;    end %if    for n=1:3     set(gcf,'currentaxes',axhand(n))     greenpeaks(pt,n+1);    end %for    a=get(temp(3),'ydata');    a(pt(1,1)-tr1+1)=(ptimes(1,pt(1,1)-tr1+1)-1)*smp+t1;    for n=3:5     set(temp(n),'ydata',a)    end %for   case 'normal' %button 1 - remove pick from single trace    if ptimes(2,pt(1,1)-tr1+1)~=0      delete(ptimes(2:4,pt(1,1)-tr1+1))      ptimes(2:4,pt(1,1)-tr1+1)=0;    end %if    ptimes(1,pt(1,1)-tr1+1)=0;    a=get(temp(3),'ydata');    a(pt(1,1)-tr1+1)=NaN;    for n=3:5     set(temp(n),'ydata',a)    end %for  end %switch but case 'motion1'  newpt=get(gca,'currentpoint');  xd=get(temp(1),'xdata');  xd(2)=newpt(1,1);  yd=get(temp(1),'ydata');  yd(2)=newpt(1,2);  set(temp(1),'xdata',xd,'ydata',yd); case 'down2'  set(gcf,'windowbuttonmotionfcn','')  set(gcf,'windowbuttondownfcn','picktimes3 down1;')  down2pt=get(gca,'currentpoint');  index=round((down2pt(1,2)-t1)./smp+1);  down2pt=[round(down2pt(1,1)),down2pt(1,2),index];  delete(temp(2))  a=get(temp(1),'ydata');  pt(1,2)=a(1,1);  a=get(temp(1),'xdata');  pt(1,1)=round(a(1,1));  if pt(1,1)<down2pt(1,1)    tr=pt(1,1):down2pt(1,1);  else    tr=down2pt(1,1):pt(1,1);  end %if  previous=find(ptimes(2,tr-tr1+1)~=0);  if ~isempty(previous)   previous=previous+tr(1)-tr1;   delete(ptimes(2:4,previous))   ptimes(2:4,previous)=0;  end  but=get(gcf,'SelectionType');  switch but   case {'normal','alt'} %button 1 or 3- clears picks on selected traces    ptimes(:,tr-tr1+1)=0;    a=get(temp(3),'ydata');    a(tr-tr1+1)=NaN;    for n=3:5     set(temp(n),'ydata',a)    end %for   case 'extend' %button 2 - sets pick on selected traces    killflg=get(findobj(gcf,'string','KILL'),'userdata');    bad=find(killflg{1}(1,:)~=0);    yi=interp1([pt(1,1) down2pt(1,1)],[pt(1,2) down2pt(1,2)],tr);    if isempty(bad)     for n=1:3      set(gcf,'currentaxes',axhand(n))      for i=1:length(tr)       greenpeaks([tr(i),yi(i),round((yi(i)-t1)./smp)],n+1);      end %for     end %for    else     for n=1:3      set(gcf,'currentaxes',axhand(n))      for i=1:length(tr)       h=find(bad==tr(i)-tr1+1);       if isempty(h) %only plot peak if trace has not been killed        greenpeaks([tr(i),yi(i),round((yi(i)-t1)./smp)],n+1);       end %if      end %for     end %for    end %if/else    z=find(ptimes(1,:)==0);    a=ptimes(1,:);    a(z)=NaN;    for n=3:5     set(temp(3:5),'ydata',(a-1).*smp+t1)    end %for  end %switch but  delete(temp(1)) %take off lineend %switch action@2.0log@Release 2@text@d17 1a17 1%$Id: picktimes3.m,v 1.1 1999/01/06 19:09:29 kay Exp mah $d19 3@1.1log@Initial revision@text@d17 4a20 2%$Id: $%$Log:$d22 1@

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -