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

📄 guisegymat.m

📁 这是用matlab对segy数据进行处理
💻 M
📖 第 1 页 / 共 2 页
字号:
function varargout = GUISegyMAT(varargin)
% GUISegyMAT : GUI to read Segyfiles.
%
% (C) 2002, Thomas Mejer Hansen
%
%  OBSOLETE
%

%
%    FIG = GUISEGYMAT launch GUISegyMAT GUI.
%    GUISEGYMAT('callback_name', ...) invoke the named callback.

% Last Modified by GUIDE v2.0 05-Jun-2002 09:19:09

if nargin == 0  % LAUNCH GUI

	fig = openfig(mfilename,'reuse');

	% Use system color scheme for figure:
	set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));

	% Generate a structure of handles to pass to callbacks, and store it. 
	handles = guihandles(fig);
	guidata(fig, handles);

    data=guidata(fig);
    
    filename = ['.',mfilename,'.mat'];
    if exist(filename)==2,
        load(filename);
        if exist('Position'), set(handles.figsegy,'Position',Position);end
        if exist('SETTINGS'), data.SETTINGS=SETTINGS; end
    else
        data.SETTINGS.cmin=[];
        data.SETTINGS.cmax=[];
        data.SETTINGS.gain=1;
        data.SETTINGS.PlotType=1; 
           % [1] Image 
           % [2] Wiggle 
           % [3] Image+Wiggle
        data.SETTINGS.tmin=[];
        data.SETTINGS.tmax=[];
        
    end
    guidata(fig,data);
    
    % Position axes
    axes(handles.axMain)
    set(handles.axMain,'XTickLabel','')
    axMainPOS=get(handles.axMain,'Position');

    axes(handles.axTop)
    set(handles.axTop,'XAxisLocation','top')
    set(handles.axTop,'YAxisLocation','Right')
    axTopPOS=get(handles.axTop,'Position');
    axTopPOS(2)=axMainPOS(2)+axMainPOS(4);
    axTopPOS(1)=axMainPOS(1);
    axTopPOS(3)=axMainPOS(3);
    set(handles.axTop,'Position',axTopPOS);

    axes(handles.axBot)
    set(handles.axBot,'YAxisLocation','Right')
    set(handles.axBot,'XAxisLocation','Bottom')
    axBotPOS=get(handles.axBot,'Position');
    axBotPOS(2)=axMainPOS(2)-axBotPOS(4);
    axBotPOS(1)=axMainPOS(1);
    axBotPOS(3)=axMainPOS(3);
    set(handles.axBot,'Position',axBotPOS);

    
    
    %% MAKE COLORMAPS MENU
    uimenu(handles.mColormaps,'label','gray','CallBack','GUISegyMAT(''actionSetColorMap'',gcbo,guidata(gcbo),''gray'')');
    uimenu(handles.mColormaps,'label','jet','CallBack','GUISegyMAT(''actionSetColorMap'',gcbo,guidata(gcbo),''jet'')');
    uimenu(handles.mColormaps,'label','hsv','CallBack','GUISegyMAT(''actionSetColorMap'',gcbo,guidata(gcbo),''hsv'')');
    uimenu(handles.mColormaps,'label','cool','CallBack','GUISegyMAT(''actionSetColorMap'',gcbo,guidata(gcbo),''cool'')');
    uimenu(handles.mColormaps,'label','copper','CallBack','GUISegyMAT(''actionSetColorMap'',gcbo,guidata(gcbo),''copper'')');
    
    
    %% MAKE TOOLS MENU
    menuAmp=uimenu(handles.mTools, 'label','Amplitude');
      %uimenu(menuAmp,'Label','AGC','CallBack','GUISegyMAT(''actionToolAmplitude'',gcbo,guidata(gcbo),''AGC'')');
    menuSort=uimenu(handles.mTools, 'label','Sort');
      %uimenu(menuAmp,'Label','CDP','CallBack','GUISegyMAT(''actionToolSort'',gcbo,guidata(gcbo),''CDP'')');
      %uimenu(menuAmp,'Label','Offset','CallBack','GUISegyMAT(''actionToolSort'',gcbo,guidata(gcbo),''OFFSET'')');

    
    set(handles.figsegy,'Visible','on')
    
	% Wait for callbacks to run and window to be dismissed:
	uiwait(fig);

	if nargout > 0
		varargout{1} = fig;
	end

    closereq
    
elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK

	try
		if (nargout)
			[varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
		else
			feval(varargin{:}); % FEVAL switchyard
		end
	catch
		disp(lasterr);
	end

end


%| ABOUT CALLBACKS:
%| GUIDE automatically appends subfunction prototypes to this file, and 
%| sets objects' callback properties to call them through the FEVAL 
%| switchyard above. This comment describes that mechanism.
%|
%| Each callback subfunction declaration has the following form:
%| <SUBFUNCTION_NAME>(H, EVENTDATA, HANDLES, VARARGIN)
%|
%| The subfunction name is composed using the object's Tag and the 
%| callback type separated by '_', e.g. 'slider2_Callback',
%| 'figure1_CloseRequestFcn', 'axis1_ButtondownFcn'.
%|
%| H is the callback object's handle (obtained using GCBO).
%|
%| EVENTDATA is empty, but reserved for future use.
%|
%| HANDLES is a structure containing handles of components in GUI using
%| tags as fieldnames, e.g. handles.figure1, handles.slider2. This
%| structure is created at GUI startup using GUIHANDLES and stored in
%| the figure's application data using GUIDATA. A copy of the structure
%| is passed to each callback.  You can store additional information in
%| this structure at GUI startup, and you can change the structure
%| during callbacks.  Call guidata(h, handles) after changing your
%| copy to replace the stored original so that subsequent callbacks see
%| the updates. Type "help guihandles" and "help guidata" for more
%| information.
%|
%| VARARGIN contains any extra arguments you have passed to the
%| callback. Specify the extra arguments by editing the callback
%| property in the inspector. By default, GUIDE sets the property to:
%| <MFILENAME>('<SUBFUNCTION_NAME>', gcbo, [], guidata(gcbo))
%| Add any extra arguments after the last argument, before the final
%| closing parenthesis.

%%% START ACTIONLIST

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function actionReadSegy(h,handles)
data=guidata(h);

if isfield(data,'SEGYFILE'),
   data.SEGYFILE=DIAOpenSEGY(data.SEGYFILE);
else    
   data.SEGYFILE=DIAOpenSEGY;
end



% ADD OPTIONS TO READ IN PART OF SEGY DATA IF NEEDED
i=0;
if data.SEGYFILE.JUMP.enable==1,
    i=i+1;segyoptions{i}='jump';
    i=i+1;segyoptions{i}=data.SEGYFILE.JUMP.jump;
end
if data.SEGYFILE.TIMERANGE.enable==1,
    i=i+1;segyoptions{i}='trange';
    i=i+1;segyoptions{i}=data.SEGYFILE.TIMERANGE.min;
    i=i+1;segyoptions{i}=data.SEGYFILE.TIMERANGE.max;
end
if data.SEGYFILE.TRACEHEADER.enable==1,
    i=i+1;segyoptions{i}='minmax';
    i=i+1;segyoptions{i}=data.SEGYFILE.TRACEHEADER.name;
    i=i+1;segyoptions{i}=data.SEGYFILE.TRACEHEADER.min;
    i=i+1;segyoptions{i}=data.SEGYFILE.TRACEHEADER.max;
end
if isfield(data.SEGYFILE,'SegyHeader')
    i=i+1;segyoptions{i}='SegyHeader';
    i=i+1;segyoptions{i}=data.SEGYFILE.SegyHeader;
end

if ~isfield(data.SEGYFILE,'filename'); return; end
filename=[data.SEGYFILE.pathname,data.SEGYFILE.filename];


% get fileextension
[p,n,ext]=fileparts(filename);


if exist('segyoptions')==1
  if strcmp(lower(ext),'.su'),
    [data.Data,data.SegyTraceHeaders,data.SegyHeader,data.HeaderInfo]=ReadSu(filename,segyoptions);
  else
    [data.Data,data.SegyTraceHeaders,data.SegyHeader,data.HeaderInfo]=ReadSegy(filename,segyoptions);
  end
else
  if strcmp(lower(ext),'.su'),
    [data.Data,data.SegyTraceHeaders,data.SegyHeader,data.HeaderInfo]=ReadSu(filename);
  else
    [data.Data,data.SegyTraceHeaders,data.SegyHeader,data.HeaderInfo]=ReadSegy(filename);
  end
end


% RESET PLOTTING PARAMETERS
  data.SETTINGS.cmin=min(data.Data(:));
  data.SETTINGS.cmax=max(data.Data(:));
  data.SETTINGS.gain=1;


guidata(h,data)
actionPlotSegy(h,handles)
actionUpdateSegyHeader(h,handles)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function actionWriteSegy(h,handles)
data=guidata(h);
[filename, pathname] = uiputfile('*.sgy;*.SGY;*.seg*;*.SEGY', 'Set name of SEGY file');
if isstr(filename)
  % MAKE SURE Segy IS the fileextension  
  [p,n,ext,v]=fileparts(filename);
  if ((strcmp('.sgy',lower(ext))==0)&(strcmp('.segy',lower(ext))==0)), ext='.segy'; end
  filename=fullfile(p,[n ext v])
  WriteSegyStructure(filename,data.SegyHeader,data.SegyTraceHeaders,data.Data);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function actionWriteSu(h,handles)
data=guidata(h);
[filename, pathname] = uiputfile('*.su;*.SU', 'Set name of SEGY file');

if isstr(filename)
  % MAKE SURE SU IS the fileextension  
  [p,n,ext,v]=fileparts(filename);
  if strcmp('.su',lower(ext))==0, ext='.su'; end
  filename=fullfile(p,[n ext v])
  WriteSuStructure([filename],data.SegyHeader,data.SegyTraceHeaders,data.Data);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function actionEditTraceHeader(h,handles)
data=guidata(h);
data.SegyTraceHeaders=GUIEditSegyTraceHeader(data.SegyTraceHeaders);
guidata(h,data)
UpdatePlotSettings(h,handles);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function actionEditSegyHeader(h,handles)
data=guidata(h);
data.SegyHeader=GUIEditSegyHeader(data.SegyHeader);
guidata(h,data)
UpdatePlotSettings(h,handles);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function actionPlotXY(h,handles)
data=guidata(h);
GUIPlotXY(data.SegyTraceHeaders);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function UpdatePlotSettings(h,handles)
data=guidata(h);
set(handles.eCaxisMin,'String',data.SETTINGS.cmin);
set(handles.eCaxisMax,'String',data.SETTINGS.cmax);
set(handles.eCaxisGain,'String',data.SETTINGS.gain);
set(handles.sCaxisGain,'Value',log10(data.SETTINGS.gain));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function actionPlotSegy(h,handles)
%% CREATE A FUNCTION THAT PLOTS THE SEISMIC DATA BASED ON 
%%  A SERIES OF PLOTTING SETTING (WIGGLE/AREA/MAX/MIN AMPLIUDE....)
data=guidata(h);

traces=1:1:size(data.Data,2);

axes(handles.axMain)
%imagesc(traces,data.HeaderInfo.t,data.Data)
wiggle(data.Data,[],data.SegyHeader.time,[traces],'VA')
caxis([data.SETTINGS.cmin./data.SETTINGS.gain data.SETTINGS.cmax./data.SETTINGS.gain])
xlabel(['offset'])    
ax=axis;
zoom on


axes(handles.axTop)
area(traces,data.HeaderInfo.offset)
axTop=axis;axis([ax(1) ax(2) axTop(3) axTop(4)]); %% MAKE SURE X AXIS IS THE SAME
ylabel('offset');

⌨️ 快捷键说明

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