📄 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:09if 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); endend%| 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 NEEDEDi=0;if data.SEGYFILE.JUMP.enable==1, i=i+1;segyoptions{i}='jump'; i=i+1;segyoptions{i}=data.SEGYFILE.JUMP.jump;endif 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;endif 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;endif isfield(data.SEGYFILE,'SegyHeader') i=i+1;segyoptions{i}='SegyHeader'; i=i+1;segyoptions{i}=data.SEGYFILE.SegyHeader;endif ~isfield(data.SEGYFILE,'filename'); return; endfilename=[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); endelse 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); endend% 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 onaxes(handles.axTop)area(traces,data.HeaderInfo.offset)axTop=axis;axis([ax(1) ax(2) axTop(3) axTop(4)]); %% MAKE SURE X AXIS IS THE SAMEylabel('offset');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -