📄 guisegymat.m
字号:
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 + -