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

📄 pi_openfile.asv

📁 基于matlab的反演程序,用于地球物理勘探中射线追踪及偏移成像程序.
💻 ASV
📖 第 1 页 / 共 2 页
字号:
function OpenFile(smat,t,dist)
ylbl='Samples';
xlbl='Columns';
if(nargin<=1)
    t=[];
    dataout=[];
    tdat=[];
    sampint=[];
    dist=[];
    val=get(gcbo,'userdata');
elseif(nargin==1)
    t=[];
    dataout=smat;
    tdat=[];
    sampint=[];
    dist=[];
    val={4};
    file='Plotimage';
elseif(nargin>=2)
    dataout=smat;
    if(isempty(t))
        tdat=[];
        sampint=[];
    else
        ylbl='Time';
        t=t;
        sampint=t(2)-t(1);
    end
    if(isempty(dist))
        dist=[];
    else
        dist=dist;
        xlbl='Meters';
    end
    val={4};
    file='Plotimage';
end
lasterr=[];

% Opening Files for Plotimage
global SCALE_OPT NUMBER_OF_COLORS GRAY_PCT CLIP COLOR_MAP NOBRIGHTEN PICKS PICKCOLOR XAXISTOP ZOOM_VALUE ZOOM_LOCKS
global SIESMAT
h=get(gcf,'userdata');
hmsg=h(2);
hscale=h(6);
hclip=h(7);
hmaster=h(10);
hvertscrol=h(16);
hhorscrol=h(17);
hposax=findobj(gcf,'type','axes','tag','POSITIONAXES');
QuickMenu=findobj(gcf,'type','uimenu','tag','QUICK_OPENFILE');
udat=get(QuickMenu,'userdata');
quickhandles=udat{3};
originalpath=udat{4};
lastpath=udat{5};
presentpath=[];
filename=[];
sampint=1;
try
    switch round(val{1})
        case [1]    % opening PRE arranged .mat file
            [file,path]=myuifile(gcf,'.mat','Choose .mat file','get');
            if(isempty(findstr('.mat',file)))
                return  % didn't choose a .mat file
            end
            cd(path);
            DataOut=load([path file]);
            nms=fieldnames(DataOut);
            if(length(nms)>=2)   
                % not set as SeisStrucutre
                DataOut=matinterrogator([path file],[3]);
                if(isempty(DataOut)) 
                    return
                else
                    DataOut=Check_Data(DataOut);
                    dataout=DataOut{1};
                    tdat=DataOut{2};
                    t=tdat{1};
                    ylbl=tdat{2};
                    dist=DataOut{3};
                end
            else
                if(~strcmp(nms,'SeisStruct'))
                    return
                end
                SeisStruct=getfield(DataOut,'SeisStruct');
                dataout=SeisStruct.data;
                t=SeisStruct.t;
                samptint=t(2)-t(1);
                dist=SeisStruct.x;
            end
            filename=[path file];
        case [2]    % opening segy file
            [file,path]=myuifile(gcf,'*.*','Choose SEGY file','get');
            filename=[path file];
            if(filename(1,1)==0)
                return
            end
            if(isempty(findstr('.sgy',file(end-4:end))))
                StringInfo=['"' [path file] '" is not a SEGY file.'];
                errordlg(StringInfo);
                return
            end
            [dataout,sampint]=altreadsegy([path file]);
        case [3]    % opening file from menu item
            filename=get(gcbo,'label');
            try
                if(~isempty(findstr('.sgy',filename(end-4:end))))
                    [dataout,sampint] = altreadsegy(filename);
                elseif(~isempty(findstr('.mat',filename(end-4:end))))
                    DataOut=load([filename]);
                    nms=fieldnames(DataOut);
                    if(length(nms)>1)
                        % not set as SeisStrucutre
                        DataOut=matinterrogator(filename,[3]);
                        if(isempty(DataOut))
                            return
                        else
                            DataOut=Check_Data(DataOut);
                            dataout=DataOut{1};
                            tdat=DataOut{2};
                            t=tdat{1};
                            ylbl=tdat{2};
                            dist=DataOut{3};
                        end
                    else
                        if(~strcmp(nms,'SeisStruct'))
                            % SesiStruct's have not been created yet August 8th, 2002
                            DataOut=Check_Data(DataOut);
                            dataout=DataOut{1};
                            tdat=DataOut{2};
                            t=tdat{1};
                            ylbl=tdat{2};
                            dist=DataOut{3};
                        else
                            SeisStruct=getfield(DataOut,'SeisStruct');
                            dataout=SeisStruct.data;
                            t=SeisStruct.t;
                            depth=SeisStruct.depth;
                            t=t(2)-t(1);
                            dist=SeisStruct.x;
                        end
                    end
                end
                tp=findstr(filename,'\');
                file=filename(tp(end)+1:end);
            catch
                errordlg(lasterr);                    
            end
        case 4 % data has been sent via user
            % MUST MAKE USER DATA INTO A STRUCTURE!!!!
            % field names do not matter due to way data pull appart
            DataOut.dataout=dataout;
            DataOut.t=t;
            DataOut.dist=dist;
            DataOut=Check_Data(DataOut);
            dataout=DataOut{1};
            tdat=DataOut{2};
            t=tdat{1};
            ylbl=tdat{2};
            dist=DataOut{3};
    end
    set(hscale,'value',[2]);
    set(hclip,'value',[11],'visible','off');
    % checking data
    if(iscomplex(dataout))
        questinfo={'Do you want to continue?  ',...
                'Main array is complex'};
        checkwuser=questdlg(questinfo,'Main array has both complex and real parts.',...
            'Real','Complex','Cancel','Real');
        switch checkwuser
            case 'Real'
                dataout=real(dataout);
            case 'Complex'
                dataout=imag(dataout);
            case 'Cancel'
                stringinfo='Action Canceled';
                set(hmsg,'string',stringinfo,'backgroundcolor',[1 1 1]);
                return
        end
    end  
    if(isempty(dataout)|~isnumeric(dataout)|iscomplex(t)|iscomplex(dist))
        lasterr='Neither depth nor distance array should be complex';
        if(isempty(dataout))
            lasterr='Main array not found';
        end            
        errordlg(lasterr);
        return
    elseif(isempty(t)|length(t)<=1)
        sampint=1;
        nrows=size(dataout,1);
        t=(0:1:nrows-1)*sampint;    
    end
    ncols=size(dataout,2);
    if(isempty(dist))
        dist=1:ncols;
    else
        checkdist=dist(end)-dist(1);
        if(checkdist==0)
            % something is wrong with the distance 
            questinfo={'Do you want to continue?',...
                    'Plotimage will change horizontal sample rate if continueing'};
            checkwuser=questdlg(questinfo,'Distance is not consistant',...
                'Continue','Change sample rate','Cancel','Coninue');
            switch checkwuser
                case 'Continue'
                    dist=1:ncols;
                case 'Change sample rate'
                    masterfig=gcf;
                    qst={'New Sample Rate'};
                    a={'1'};
                    flags=[1];
                    ansfini=askthingsle(masterfig,qst,a,flags);
                    if(isempty(ansfini))
                        stringinfo='Action Canceled';
                        set(hmsg,'string',stringinfo,'backgroundcolor',[1 1 1]);
                        return
                    elseif(~isnumeric(str2num(ansfini{1})))
                        stringinfo='Need a numberical value for sample rate';
                        set(hmsg,'string',stringinfo,'backgroundcolor',[1 1 0]);
                        return
                    end
                    dx=str2num(ansfini{1});
                    dist=[1:dx:ncols-1];
                case 'Cancel'
                    stringinfo='Action Canceled';
                    set(hmsg,'string',stringinfo,'backgroundcolor',[1 1 1]);
                    return
                    
            end
        end
    end
    nrows=size(dataout,1);    
    clips=[30 25 20 15 10 9 8 7 6 5 4 3 2 1 .5 .25 .1 .05 .01 .005 .001];
    iclip=get(hclip,'userdata');
    clip=clips(iclip); %make sure we have a sanctioned value
    if(length(dist)>1)
        bnds=(max(dist)-min(dist))/(length(dist)+1);
    else
        bnds=max(dataout-min(dataout))/2;
    end
    try
        load('plotimageproperties.mat');
    catch
        disp('No properties');
    end
    if(isempty(NOBRIGHTEN)) nobrighten=0; else nobrighten=NOBRIGHTEN; end
    if (isempty(SCALE_OPT)) scaleopt=2; else scaleopt=SCALE_OPT; end %default to max scaling
    if (isempty(NUMBER_OF_COLORS)) number_of_colors=64; 
    else number_of_colors=NUMBER_OF_COLORS; end %default to 64 gray levels
    if (isempty(GRAY_PCT)) gray_pct=50; else gray_pct=GRAY_PCT; end %default to 50% gray transition
    if (isempty(CLIP)) clip=4; else clip=CLIP; end %default to clip of 4
    if (isempty(COLOR_MAP)|strcmp(COLOR_MAP,'seisclrs'))
        COLOR_MAP=seisclrs(number_of_colors,gray_pct);
        [nkols,m]=size(COLOR_MAP);
    else
        COLOR_MAP=COLOR_MAP;
        cm=get(gcf,'colormap');
        [nkols,m]=size(cm);
    end
    if (isempty(PICKCOLOR))
        PICKCOLOR='r';
    end
    % COLOR_MAP=get(gcf,'colormap');
    
    mxs=full(max(max(abs(dataout))));
    %determine clipping
    smean=full(mean(mean(dataout)));
    stddev=full(sqrt( sum(sum((dataout-smean).^2 ) )...
        /prod(size(dataout))));
    smean2=smean;
    mxs2=mxs;
    stddev2=stddev;
    ampflag=2;
    if(ampflag==2)
        global SMEAN STDDEV MXS
        SMEAN=smean;
        STDDEV=stddev;
        MXS=mxs;
    elseif(ampflag==3)
        global SMEAN STDDEV MXS
        smean2=SMEAN;
        stddev2=STDDEV;
        mxs2=MXS;
    end
    if( scaleopt ==1) %mean scaling
        if(~isnan(clip))
            mxsprime=min([smean2+clip*stddev2,mxs2]);
        end
        mns=-mxsprime;
        seis = (dataout -mns)/(mxsprime-mns)*(nkols-1)+1;
        clear smat
    elseif( scaleopt==2 )
        mns=-mxs;
        %mns=0;
        seis = (dataout -mns)/(mxs-mns)*(nkols-1)+1;
        clear dataout
    else
        error('invalid scaling option');
    end
    
    dataout=[];
    
    ix=1:length(dist);
    dx=dist(2)-dist(1);
    dt=t(2)-t(1);
    if(dx~=(dist(3)-dist(2)))
        dx=0;
    end
    if(dt~=(t(3)-t(2)))
        dt=0;
    end
    seis=seis(:,ix);
    haxis=findobj(gcf,'type','axes','tag','MAINAXES');
    set(gcf,'currentaxes',haxis);
    % the image operation completely destroys all data associated with the
    % axes in question. 

⌨️ 快捷键说明

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