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

📄 refdata.m

📁 Univ. of Calgary CREWS的免费地震研究软件
💻 M
📖 第 1 页 / 共 2 页
字号:
% Function storing all the useful variables, vectors and matrices
% under the handle menu of the main figure (Refrac)

function answer = refdata(action, parm, value)

if( strcmp(action,'set'))         % Sets a value
   ;
elseif( strcmp(action,'get'))     % Returns a value
   ;
elseif( strcmp(action,'init'))    % Init is the first-time action
   ;
elseif( strcmp(action,'clear'))   % Clears all variables except menu handles
   ;
else
  errs = sprintf('refdata: illegal action: %s',action);
  error(errs);
end

if( strcmp(action,'set') & nargin < 3 )
   error('Wrong number of parameters for REFDATA function. SET needs 3 or 4.');
end

if( strcmp(action,'get') & nargin ~= 2 )
   error('Wrong number of parameters for REFDATA function. GET needs 2.');
end

% Define the size of the parameter array and the menu handle array.
pasize = 25;
mhsize = 27;

if( strcmp(action, 'init') )    % ----------------------------------------
   if( nargin < 3 )
      error('refdata: init action needs 3 parmeters (''figure'' and gcf)');
   end

   figure = value;
   userdata = get(figure, 'userdata');   
   if( length(userdata) ~= 19 )
      error('Internal error: Figure userdata not setup for refdata.');
   end
   pahandle = userdata(1);   % Store parameter array in (1)
   fbthandle = userdata(2);  % Store the FB times matrix in (2)
   fbchandle = userdata(3);  % Store the FB coordinate matrix in (3)
   schandle  = userdata(4);  % Store the shot coordinate array in (4)
   dmhandle  = userdata(5);  % Store the Reciprocal difference matrix (5)
   cihandle  = userdata(6);  % Store the crossoverpoint for shot i matrix (6)
   cjhandle  = userdata(7);  % Store the crossoverpoint for shot j matrix (7)
   cahandle = userdata(8);   % Store the averaged crossover points (8)
   v1handle = userdata(9);   % Store the velocity of the first layer (9)
   v2handle = userdata(10);  % Store the velocity of the second layer (10)
   td1handle = userdata(11); % Store the Plus time of the first layer (11)
   hgahandle = userdata(12); % Store the depth average of the first layer (12)
   sehandle = userdata(13);  % Store the shot elevation (13)
   rehandle = userdata(14);  % Store the receiver elevation (14)
   uphandle = userdata(15);  % Store the uphole time (15)
   rshandle = userdata(16);  % Store the receiver elevation and weathering statics (16)
   sshandle = userdata(17);  % Store the shot elevation and weathering statics (17)
   plthandle = userdata(18); % Store the Plus time average and statistic (18)
   menuhandle = userdata(19); % Store the array of menu handles

   % Define the array that will hold all of the parameters.
   pa = zeros([1 pasize]);
   pa(1) = 0;        % rtrange   - (0=all 1=single pair)
   pa(2) = 1;        % rtpair1   - first shot in pair (i) (only if rtrange=1)
   pa(3) = 1;        % rtpair2   - 2nd shot in pair (j)
   pa(4) = 5;        % mint      - reciprocal time check min. time.
   pa(5) = 0;        % aprange   - autopick range (0=all 1=single shot pair)
   pa(6) = 1;        % appair1   - first shot in pair (only if aprange = 1)
   pa(7) = 1;        % appair2   - 2nd shot in pair
   pa(8) = 0;        % apsub     - subtract if rt bigger than rtmax
   pa(9) = 0;        % rtmax     - maximum rt for subtraction
   pa(10) = 5;       % window    - median filter window 
   pa(11) = 0;       % nshots    - Number of shots
   pa(12) = 0;       % nrecs     - Number of receivers/shot
   pa(13) = 0;	     % dev       - Standard deviation constant
   pa(14) = 0;       % standard  - Use standard or constant deviation
   pa(15) = 0;       % plustreject -Do Plus Time rejection (Y/N)
   pa(16) = 0;       % datum     - Datum elevation
   pa(17) = 0;       % repvel    - Replacement velocity
   pa(18) = 1;       % nd        - Seperation for differentiation
   pa(19) = 1;       % shotgap   - Used in TD stacking - edit CVP average
   pa(20) = 1;       % shotlength- # of shots/side stacked - edit CVP average
   pa(21) = 0.01;    % flatslope - Maximum slope considered flat
   pa(22) = NaN;     % windmn    - Window length for median filter
   pa(23) = NaN;     % offsetrange1 -Offset limit range for CVPautopick
   pa(24) = NaN;     % offsetrange2 -Offset limit range for CVPautopick
   pa(25) = NaN;     % offsetpt  - Offset limit for Time analysis function

   set(pahandle, 'userdata', pa);

   % Define the menu handles
   mh = zeros([1 mhsize]);
   mh(1)  = 0;       % autorejectm - Handle of the autoreject menu
   mh(2)  = 0;       % avgcvpm   - Handle of the avgcvp menu
   mh(3)  = 0;       % calcvelm  - Handle of the calcvelm menu
   mh(4)  = 0;       % timeanalm - Handle of the timeanalm menu
   mh(5)  = 0;       % delaytm   - Handle of the delaytm menu
   mh(6)  = 0;       % avgdepthm - Handle of the avgdepthm mean
   mh(7)  = 0;       % staticm   - Handle of the staticm menu
   mh(8)  = 0;       % timerejectm - Handle of the time rejection menu
   mh(9)  = 0;	     % rectimem  - Handle of the rectimem menu
   mh(10)  = 0;	     % autopickm  - Handle of the autopickm menu
   mh(11) = 0;	     % dispshotsm  - Handle of the dispshotsm menu
   mh(12) = 0;	     % disprectimem  - Handle of the disprectimem menu
   mh(13) = 0;	     % dispcvpstatm  - Handle of the dispcvpstatm menu
%  mh(13) = 0;	     % dispcvpstat2m  - Handle of the dispcvpstat2m menu
   mh(14) = 0;	     % dispcvpavgm  - Handle of the dispcvpavgm menu
   mh(15) = 0;	     % dispvelm  - Handle of the dispvelm menu
   mh(16) = 0;	     % dispdepthm  - Handle of the dispdepthm menu
   mh(17) = 0;	     % dispstaticm  - Handle of the dispstaticm menu
   mh(18) = 0;	     % editcvpm  - Handle of the editcvpm menu
   mh(19) = 0;	     % editcvpavgm  - Handle of the editcvpavgm menu
   mh(20) = 0;	     % editvelm  - Handle of the editvelm menu
   mh(21) = 0;	     % editdepthm  - Handle of the editdepthm menu
   mh(22) = 0;	     % dispplustm  - Handle of the dispplustm menu
   mh(23) = 0;       % expvelm    - Handle of the expvelm menu
   mh(24) = 0;       % expdepthm  - Handle of the expdepthm menu
   mh(25) = 0;       % expstatm   - Handle of the expstatm menu
   mh(26) = 0;       % disppolym  - Handle of the disppoly menu
   mh(27) = 0;       % repickcvpm - Handle of the repickcvp menu

   set(menuhandle, 'userdata', mh);

   % Define the FB time matrix (fbtime).
   fbtime = [];
   set(fbthandle, 'userdata', fbtime);

   % Define the FB coordinate matrix (fbcoord)
   fbcoord = [];
   set(fbchandle, 'userdata', fbcoord);

   % Define the shot coordinate array (shotcoord)
   shotcoord = [];
   set(schandle, 'userdata', shotcoord);

   % Define the difference matrix (diffmat)
   diffmat = [];
   set(dmhandle, 'userdata', diffmat);
 
   % Define crossoverpoints for shot i matrix (cvpi)
   cvpi = [];
   set(cihandle, 'userdata', cvpi);

   % Define crossoverpoints for shot j matrix (cvpi)
   cvpj = [];
   set(cjhandle, 'userdata', cvpj);

   % Define the averaged crossover point matrix (cvpavg)
   % This is a matrix of two columns (col 1 is avg(cvpi)(left) 
   % and col 2 is avg(cvpj)(right)
   cvpavg = [];
   set(cahandle, 'userdata', cvpavg);

   % Define the velocity V1 matrix (v1)
   v1rec = [];
   set(v1handle, 'userdata', v1rec);

   % Define the velocity V2 matrix (v2)
   v2rec = [];
   set(v2handle, 'userdata', v2rec);

   % Define the first layer Plus time  matrix (hg1)
   % This is a matrix of (nshots*nshots)*nfbcoord
   td1 = [];
   set(td1handle, 'userdata', td1);

   % Define the first layer average depth array (with fold, standard deviation)
   % This is an array of the total fbcoord possible
   depth = [];
   set(hgahandle, 'userdata', depth);

   % Define the receiver elevation array
   recelev = [];
   set(rehandle, 'userdata', recelev);

   % Define the shot elevation array
   shotelev = [];
   set(sehandle, 'userdata', shotelev);

   % Define the shot uphole time array
   uphole = [];
   set(uphandle, 'userdata', uphole);

   % Define the receiver statics (elevation and weathering)
   recstat = [];
   set(rshandle, 'userdata', recstat);

   % Define the shot statics (elevation and weathering)
   shotstat = [];
   set(sshandle, 'userdata', shotstat);

   % Define the Plus time average and statistic
   plust = [];
   set(plthandle,'userdata',plust);

else               % ------------------------------------------------------

   % If we are not doing an 'init' action, then we need to get at the
   % userdata matricies from the various menus.
   userdata = get( gcf, 'userdata' );
   [tmp hdls] = size(userdata);

   % This magic number is the number of userdata spaces used: 19
   if( hdls ~= 19 )
      error('Please make the REFRAC window the current figure and re-try.');
   end
   pahandle = userdata(1);
   fbthandle = userdata(2);
   fbchandle = userdata(3);
   schandle  = userdata(4);
   dmhandle = userdata(5);
   cihandle = userdata(6);
   cjhandle = userdata(7);
   cahandle = userdata(8);
   v1handle = userdata(9);
   v2handle = userdata(10);
   td1handle = userdata(11);
   hgahandle = userdata(12);
   rehandle = userdata(13);
   sehandle = userdata(14);
   uphandle = userdata(15);
   rshandle = userdata(16);
   sshandle = userdata(17);
   plthandle = userdata(18);
   mhhandle = userdata(19);

   pa = get(pahandle, 'userdata');
   mh = get(mhhandle, 'userdata');
   fbtime = get(fbthandle, 'userdata');
   fbcoord = get(fbchandle, 'userdata');
   shotcoord = get(schandle, 'userdata');
   diffmat = get(dmhandle, 'userdata');
   cvpi = get(cihandle,'userdata');
   cvpj = get(cjhandle,'userdata');
   cvpavg = get(cahandle, 'userdata');
   v1rec = get(v1handle,'userdata');
   v2rec = get(v2handle,'userdata');
   td1 = get(td1handle,'userdata');
   depth = get(hgahandle,'userdata');
   recelev = get(rehandle,'userdata');
   shotelev = get(sehandle,'userdata');
   uphole = get(uphandle,'userdata');
   recstat = get(rshandle,'userdata');
   shotstat = get(sshandle,'userdata');
   plust = get(plthandle,'userdata');

   if( length(pa) ~= pasize )
      error('refdata: whoa! parameter array is wrong size (%d).\n', length(pa));
   end
end


if( strcmp(action,'clear') )   % ---------------------------------------
   % Clear out the parameter array (pa) and all of the matricies
   pa = zeros([1 pasize]);
   % For these initial values, see the pa initialization in the 'init' action
   pa(2) = 1;   pa(3) = 1;   pa(4) = 5; 
   pa(6) = 1;   pa(7) = 1;   pa(10) = 5;
   pa(18) = 1;  pa(19) = 1;  pa(20) = 1;
   pa(21) = 0.01; pa(22) = NaN;  pa(23) = NaN;
   pa(24) = NaN;  pa(25) = NaN;

   set(fbthandle, 'userdata', [] );
   set(schandle, 'userdata', [] );
   set(dmhandle, 'userdata', [] );
   set(cihandle, 'userdata', [] );
   set(cjhandle, 'userdata', [] );
   set(cahandle, 'userdata', [] );
   set(v1handle, 'userdata', [] );
   set(v2handle, 'userdata', [] );
   set(td1handle, 'userdata', [] );
   set(hgahandle, 'userdata', [] );
   set(rehandle, 'userdata', [] );
   set(sehandle, 'userdata', [] );
   set(uphandle, 'userdata', [] );
   set(rshandle, 'userdata', [] );
   set(sshandle, 'userdata', [] );
   set(plthandle,'userdata', [] );
end


if( strcmp(action,'get') | strcmp(action,'set') )
   if( strcmp( parm, 'rtrange') )        % Set parameter array values
      index = 1;
      parmset = 1;
   elseif( strcmp( parm, 'rtpair1') )
      index = 2;
      parmset = 1;
   elseif( strcmp( parm, 'rtpair2') )
      index = 3;
      parmset = 1;
   elseif( strcmp( parm, 'mint') )
      index = 4;
      parmset = 1;
   elseif( strcmp( parm, 'aprange') )
      index = 5;
      parmset = 1;
   elseif( strcmp( parm, 'appair1') )
      index = 6;
      parmset = 1;
   elseif( strcmp( parm, 'appair2') )
      index = 7;
      parmset = 1;
   elseif( strcmp( parm, 'apsub') )
      index = 8;
      parmset = 1;
   elseif( strcmp( parm, 'rtmax') )
      index = 9;
      parmset = 1;
   elseif( strcmp( parm, 'window') )
      index = 10;
      parmset = 1;
   elseif( strcmp( parm, 'nshots') )
      index = 11;
      parmset = 1;
   elseif( strcmp( parm, 'nrecs') )
      index = 12;
      parmset = 1;
   elseif( strcmp( parm, 'dev') )
      index = 13;
      parmset = 1;
   elseif( strcmp( parm, 'standard') )
      index = 14;
      parmset = 1;
   elseif( strcmp( parm, 'plustreject') )
      index = 15;
      parmset = 1;
   elseif( strcmp( parm, 'datum') )
      index = 16;
      parmset = 1;
   elseif( strcmp( parm, 'repvel') )
      index = 17;
      parmset = 1;
   elseif( strcmp( parm, 'nd') )
      index = 18;
      parmset = 1;
   elseif( strcmp( parm, 'shotgap') )
      index = 19;
      parmset = 1;
   elseif( strcmp( parm, 'shotlength') )
      index = 20;
      parmset = 1;
   elseif( strcmp( parm, 'flatslope') )
      index = 21;
      parmset = 1;
   elseif( strcmp( parm, 'windmn') )
      index = 22;
      parmset = 1;
   elseif( strcmp( parm, 'offsetrange1') )
      index = 23;
      parmset = 1;
   elseif( strcmp( parm, 'offsetrange2') )
      index = 24;
      parmset = 1;
   elseif( strcmp( parm, 'offsetpt') )
      index = 25;
      parmset = 1;

   elseif( strcmp(parm, 'fbtime'))          % Set matrix index values
      index = 1;
      parmset = 2;
   elseif( strcmp(parm, 'fbcoord') )
      index = 2;
      parmset = 2;
   elseif( strcmp(parm, 'shotcoord') )
      index = 3;
      parmset = 2;
   elseif( strcmp(parm, 'diffmat') )
      index = 4;
      parmset = 2;
   elseif( strcmp(parm, 'cvpi') )
      index = 5;
      parmset = 2;
   elseif( strcmp(parm, 'cvpj') )
      index = 6;
      parmset = 2;
   elseif( strcmp(parm, 'cvpavg') )
      index = 7;
      parmset = 2;
   elseif( strcmp(parm, 'v1rec') )
      index = 8;
      parmset = 2;
   elseif( strcmp(parm, 'v2rec') )
      index = 9;
      parmset = 2;
   elseif( strcmp(parm, 'td1') )
      index = 10;
      parmset = 2;
   elseif( strcmp(parm, 'depth') )
      index = 11;
      parmset = 2;
   elseif( strcmp(parm, 'recelev') )
      index = 12;
      parmset = 2;
   elseif( strcmp(parm, 'shotelev') )
      index = 13;
      parmset = 2;
   elseif( strcmp(parm, 'uphole') )
      index = 14;
      parmset = 2;
   elseif( strcmp(parm, 'recstat') )
      index = 15;
      parmset = 2;
   elseif( strcmp(parm, 'shotstat') )
      index = 16;
      parmset = 2;
   elseif( strcmp(parm, 'plust') )
      index = 17;
      parmset = 2;

   elseif( strcmp( parm, 'autorejectm') )    % Set menu handle index values
      index = 1;
      parmset = 3;
   elseif( strcmp( parm, 'avgcvpm') )
      index = 2;
      parmset = 3;
   elseif( strcmp( parm, 'calcvelm') )
      index = 3;
      parmset = 3;
   elseif( strcmp( parm, 'timeanalm') )
      index = 4;
      parmset = 3;
   elseif( strcmp( parm, 'delaytm' ) )
      index = 5;
      parmset = 3;
   elseif( strcmp( parm, 'avgdepthm') )
      index = 6;
      parmset = 3;
   elseif( strcmp( parm, 'staticm') )
      index = 7;
      parmset = 3;
   elseif( strcmp( parm, 'timerejectm') )
      index = 8;
      parmset = 3;
   elseif( strcmp( parm, 'rectimem') )
      index = 9;
      parmset = 3;
   elseif( strcmp( parm, 'autopickm') )
      index = 10;
      parmset = 3;
   elseif( strcmp( parm, 'dispshotsm') )
      index = 11;
      parmset = 3;
   elseif( strcmp( parm, 'disprectimem') )
      index = 12;
      parmset = 3;
   elseif( strcmp( parm, 'dispcvpstatm') )
      index = 13;
      parmset = 3;
%   elseif( strcmp( parm, 'dispcvpstat2m') )
%      index = 13;
%      parmset = 3;
   elseif( strcmp( parm, 'dispcvpavgm') )
      index = 14;
      parmset = 3;
   elseif( strcmp( parm, 'dispvelm') )
      index = 15;
      parmset = 3;
   elseif( strcmp( parm, 'dispdepthm') )
      index = 16;
      parmset = 3;
   elseif( strcmp( parm, 'dispstaticm') )
      index = 17;
      parmset = 3;
   elseif( strcmp( parm, 'editcvpm') )
      index = 18;
      parmset = 3;
   elseif( strcmp( parm, 'editcvpavgm') )
      index = 19;
      parmset = 3;
   elseif( strcmp( parm, 'editvelm') )
      index = 20;
      parmset = 3;
   elseif( strcmp( parm, 'editdepthm') )
      index = 21;
      parmset = 3;
   elseif( strcmp( parm, 'dispplustm') )
      index = 22;
      parmset = 3;
   elseif( strcmp( parm, 'expvelm') )
      index = 23;
      parmset = 3;
   elseif( strcmp( parm, 'expdepthm') )
      index = 24;
      parmset = 3;
   elseif( strcmp( parm, 'expstatm') )
      index = 25;
      parmset = 3;
   elseif( strcmp( parm, 'disppolym') )
      index = 26;
      parmset = 3;
   elseif( strcmp( parm, 'repickcvpm') )
      index = 27;
      parmset = 3;


   else
      errs = sprintf('refdata: parameter %s not found!\n', parm);
      error(errs);
   end
end

if( strcmp(action, 'get') )    % ---------------------------------------
   if( parmset == 1 )
      answer = pa(index);
      fprintf(1,'refdata: getting %s (%d) is %f\n',parm,index,answer);
   elseif( parmset == 3 )
      answer = mh(index);
   elseif( parmset == 2 )
      if( index == 1 )
         answer = get(fbthandle, 'userdata');
      elseif( index == 2 )
         answer = get(fbchandle, 'userdata');
      elseif( index == 3 )
         answer = get(schandle, 'userdata');
      elseif( index == 4 )
         answer = get(dmhandle, 'userdata');
      elseif( index == 5 )
         answer = get(cihandle, 'userdata');
      elseif( index == 6 )
         answer = get(cjhandle, 'userdata');
      elseif( index == 7 )
         answer = get(cahandle, 'userdata');
      elseif( index == 8 )
         answer = get(v1handle, 'userdata');
      elseif( index == 9 )
         answer = get(v2handle, 'userdata');
      elseif( index == 10 )
         answer = get(td1handle, 'userdata');
      elseif( index == 11 )
         answer = get(hgahandle, 'userdata');
      elseif( index == 12 )
         answer = get(rehandle, 'userdata');
      elseif( index == 13 )
         answer = get(sehandle, 'userdata');
      elseif( index == 14 )
         answer = get(uphandle, 'userdata');
      elseif( index == 15 )
         answer = get(rshandle, 'userdata');
      elseif( index == 16 )
         answer = get(sshandle, 'userdata');
      elseif( index == 17 )
         answer = get(plthandle, 'userdata');
      end
   end
end

if( strcmp(action, 'set') )     % ---------------------------------------
   if( parmset == 1 )
      % If the value is null, it will screw up the parameter array
      if( isempty(value) )   
         value = 0;
      end
      pa(index) = value;
      fprintf(1,'refdata: setting %s (%d) to %f\n',parm,index,value);
      set(pahandle, 'userdata', pa);
   elseif( parmset == 3 )
      % If the value is null, it will screw up the parameter array
      if( isempty(value) )   
         value = 0;
      end
      mh(index) = value;
      set(mhhandle, 'userdata', mh);
   elseif( parmset == 2 )
      if( index == 1 )
         set(fbthandle, 'userdata', value);
      elseif( index == 2 )
         set(fbchandle, 'userdata', value);
      elseif( index == 3 )
         set(schandle, 'userdata', value);
      elseif( index == 4 )
         set(dmhandle, 'userdata', value);
      elseif( index == 5 )
         set(cihandle, 'userdata', value);      
      elseif( index == 6 )
         set(cjhandle, 'userdata', value);
      elseif( index == 7 )
         set(cahandle, 'userdata', value);
      elseif( index == 8 )
         set(v1handle, 'userdata', value);
      elseif( index == 9 )
         set(v2handle, 'userdata', value);
      elseif( index == 10 )
         set(td1handle, 'userdata', value);
      elseif( index == 11 )
         set(hgahandle, 'userdata', value);
     elseif( index == 12 )
         set(rehandle, 'userdata', value);
     elseif( index == 13 )
         set(sehandle, 'userdata', value);
     elseif( index == 14 )
         set(uphandle, 'userdata', value);
     elseif( index == 15 )
         set(rshandle, 'userdata', value);
     elseif( index == 16 )
         set(sshandle, 'userdata', value);
     elseif( index == 17 )
         set(plthandle, 'userdata', value);
     end
   end
end










⌨️ 快捷键说明

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