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

📄 ocset.m

📁 基于matlab的反演程序,用于地球物理勘探中射线追踪及偏移成像程序.
💻 M
字号:
function object=ocset(objin,item,value,arg4)

% ocset is part of the Earth Object system and is used to set fields in 
% container objects. The first column of a container object is identical to a
% gridded object up through the 'username' field and this function therefore
% calls oset to set those fields.
% 
% NOTE: It is illegal for you to use this software for a purpose other
% than non-profit education or research UNLESS you are employed by a CREWES
% Project sponsor. By using this software, you are agreeing to the terms
% detailed in this software's Matlab source file.
 
% BEGIN TERMS OF USE LICENSE
%
% This SOFTWARE is maintained by the CREWES Project at the Department
% of Geology and Geophysics of the University of Calgary, Calgary,
% Alberta, Canada.  The copyright and ownership is jointly held by 
% its author (identified above) and the CREWES Project.  The CREWES 
% project may be contacted via email at:  crewesinfo@crewes.org
% 
% The term 'SOFTWARE' refers to the Matlab source code, translations to
% any other computer language, or object code
%
% Terms of use of this SOFTWARE
%
% 1) Use of this SOFTWARE by any for-profit commercial organization is
%    expressly forbidden unless said organization is a CREWES Project
%    Sponsor.
%
% 2) A CREWES Project sponsor may use this SOFTWARE under the terms of the 
%    CREWES Project Sponsorship agreement.
%
% 3) A student or employee of a non-profit educational institution may 
%    use this SOFTWARE subject to the following terms and conditions:
%    - this SOFTWARE is for teaching or research purposes only.
%    - this SOFTWARE may be distributed to other students or researchers 
%      provided that these license terms are included.
%    - reselling the SOFTWARE, or including it or any portion of it, in any
%      software that will be resold is expressly forbidden.
%    - transfering the SOFTWARE in any form to a commercial firm or any 
%      other for-profit organization is expressly forbidden.
%
% END TERMS OF USE LICENSE


object = objin; % start with output = input
if( ischar(item) )
	item=strunpad(item);
end

if nargin < 4
	if( ischar(item) )
		datanum=[];
		dataname = item;
		datatype = [];
	else
		datanum=item;
		dataname=[];
		datatype=[];
	end
end
if nargin < 3
  error(' Three arguments required for objset');
end

if( nargin == 4)
	if( isnumeric(arg4) )
		datanum=arg4;
		dataname=[];
		datatype = arg4;
	elseif( ischar(arg4) ) 
		dataname = arg4;
		datatype = arg4;
		datanum = -999;
	end
end

[rdat,cdat]=size(value); % save its size in case its an object
[m,n] = size(object.data); % find the number of subobjects in data

% set object version number
if( strcmp('objvernum',item) )
	object.objvernum=value;
	return;

% set the object creation date
elseif( strcmp(item,'objcreate') )
	object.objcreate=value;
	return;

% set the object modified date
elseif( strcmp('objmodified',item) )
	object.objmodified=value;
	return;

% set the object type
elseif( strcmp('objtype',item) )
	if( length(value) > 4 )
		error(' object type must be 4 characters in length');
	end
	object.objtype=value;
	return;

% set the data type
elseif( strcmp('datatype',item) )
	object.datatype=value;
	return;

% set the user name
elseif( strcmp('username',item) )
	object.username=value;
	return;

% set the object's name
elseif( strcmp('name',item) )
    object.name=value;	    
    object.objmodified=fix(clock);
    return;

% set a data name
elseif( strcmp(item,'dataname') )
 	if( nargin < 4)
                error(' data field must be specified ');
    end                           
     
    if( ~isempty(dataname) )
	   for j=1:n
	      if( strcmp(strunpad(dataname),strunpad(object.data(j).dataname)) )
	         if( object.data(j).protect==1 )
	            error(' attempt to change protected data');
	         else
	            ff=object.data(j).dataname;
	            gg=getfield(object.data,{j},ff);
	            object.data=setfield(object.data,{j},value,gg);
	            object.data=rmfield(object.data,ff);
	            object.data(j).dataname=value;
	            return;
	         end
	      end
	   end
	else
		 if( object.data(datanum).protect==1 )
		    error(' attempt to change protected data');
		 else
		    ff=object.data(datanum).dataname;
		    gg=getfield(object.data,{datanum},ff);
		    object.data=setfield(object.data,{datanum},value,gg);
		    object.data=rmfield(object.data,ff);
		    object.data(datanum).dataname=value;
		    return;  
		 end
	end
	object.objmodified=fix(clock);
	return;

% set a data modified date
elseif( strcmp(item,'datamodified') )
	if( nargin < 4)
		error(' data field must be specified ');
	end
	
	if( ~isempty(dataname) )
	   for j=1:n
	      if( strcmp(strunpad(dataname),strunpad(object.data(j).dataname)) )
	         if( object.data(j).protect==1 )
	            error(' attempt to change protected data');
	         else
	            object.data(j).datamodified=value;
	            return;
	         end
	      end
	   end
	else
		 if( object.data(datanum).protect==1 )
		    error(' attempt to change protected data');
		 else
		    object.data(datanum).datamodified=value;
		    return;  
		 end
	end

% set the data protect field 
elseif( strcmp(item,'protect') )
        if( nargin < 4)
                error(' data field must be specified ');
        end
	if( ~strcmp(value,'on') & ~strcmp(value,'off') )
		error(' invalid protection specification');
	end
	if( strcmp(value,'on') ) value = 1;
	else value = 0; end
	
	if( ~isempty(dataname) )
	   for j=1:n
	      if( strcmp(strunpad(dataname),strunpad(object.data(j).dataname)) )
	            object.data(j).protect=value;
	            return;
	      end
	   end
	else
	   object.data(datanum).protect=value;
           return;  
	end

% set the dataobjtype field 
elseif( strcmp(item,'dataobjtype') )
	if( nargin < 4)
		error( 'data field must be specified');
	end
	if( ~isempty(dataname) )
	   for j=1:n
	   	  if( strcmp(strunpad(dataname),strunpad(object.data(j).dataname)) )
	        gg=getfield(object.data,{j},'dataname');
	        hh=size( getfield(object.data,{j},gg) );
		if( isearthobj(value) )
	          object.data(j).dataobjtype = objget(value,'objtype');
 	        elseif( hh(2)==1 & hh(1)==1)
 		  object.data(j).dataobjtype = 'sclr';
 	        elseif( hh(1)>1 & hh(2)==1 )
 		  object.data(j).dataobjtype = 'cvec';
 	        elseif( hh(1)==1 & hh(2)>1 )
 		  object.data(j).dataobjtype = 'rvec';
 	        elseif( hh(2)>1 & hh(1)>1 )
 		  object.data(j).dataobjtype = 'mtrx';
 		end
 		return;
 	      end
 	   end
 	else
 		gg=getfield(object.data,{datanum},'dataname');
	        hh=size( getfield(object.data,{datanum},gg) );
 	 	if( isearthobj(value) )
	          object.data(datanum).dataobjtype = objget(value,'objtype');
 	        elseif( hh(2)==1 & hh(1)==1)
 		  object.data(datanum).dataobjtype = 'sclr';
 	        elseif( hh(1)>1 & hh(2)==1 )
 		  object.data(datanum).dataobjtype = 'cvec';
 	        elseif( hh(1)==1 & hh(2)>1 )
 		  object.data(datanum).dataobjtype = 'rvec';
 	        elseif( hh(2)>1 & hh(1)>1 )
 		  object.data(datanum).dataobjtype = 'mtrx';
 		end
 		return;
        end

% set the dataDataType field 
elseif( strcmp(item,'datadatatype') ) 
   if( nargin < 4)
        error(' data field must be specified ');
   end
   if( length(value)~=4 )
   	error(' datatypes are 4 characters in length ');
   end
   if( ~isempty(dataname) )
      	for j=1:n
 			if( strcmp(strunpad(dataname),strunpad(object.data(j).dataname)) )
     			object.data(j).datadatatype=value;
   			end
   		end
   else
   	object.data(datanum).datadatatype=value;
   end
   return;
end 
	
% At this point, we must either be setting a new dataobject or updating an existing
% one. Thus we must walk down the object until either: a) we come to a dataobject
% whos name matches item or b) we come to the end of the object in which case we
% are adding a new dataobject.

[m,n]=size(object.data);

% check for existing name and update   
if( ~isempty(dataname) ) 
   for j=1:n
      if( strcmp(strunpad(item),strunpad(object.data(j).dataname)) |...
      		 isempty(object.data(j).dataname) )
      	 if( object.data(j).protect==1 )
            error(' attempt to change protected data');
         elseif( ~isempty(value) )
            object.data(j).dataname = item;
 	    object.data(j).protect = 0;
 	    if isearthobj(value)
		object.data(j).dataobjtype = objget(value,'objtype');
     	    elseif( rdat==1 & cdat==1)
        	object.data(j).dataobjtype = 'sclr';
      	    elseif( rdat>1 & cdat==1 )
       		object.data(j).dataobjtype = 'cvec';
      	    elseif( rdat==1 & cdat>1 )
      		object.data(j).dataobjtype = 'rvec';
            elseif( rdat>1 & cdat>1 )
       		object.data(j).dataobjtype = 'mtrx';
            end
            if( isempty(datatype) )
              if( isearthobj(value) )
                object.data(j).datadatatype = objget(value,'datatype');
              elseif( ischar(value) )
                object.data(j).datadatatype = 'strg';
              else
                object.data(j).datadatatype = 'smpl';
              end
            else
              object.data(j).datadatatype= datatype;
            end
            object.data(j).datamodified = fix(clock);
 	    object.data = setfield(object.data,{j},item,value);
       	    return;
       	 elseif( isempty(value) & ~isempty(object.data(j).dataname) )
       	      object.data(j) = [];
       	      object.data = rmfield(object.data,item);
       	      return;
       	 end
      end
   end
end

% add a new data structure 
faa=char(fieldnames(object)); [faam,faan]=size(faa);
fbb=char(fieldnames(object.data));[fbbm,fbba]=size(fbb);
% check to see that new data name isn't same as existing fieldname
for j=1:faam
	aflag(j)=strcmp( strunpad(item),strunpad(faa(j,:)) );
end
for j=1:fbbm
	bflag(j)=strcmp( strunpad(item),strunpad(fbb(j,:)) );
end
if( ~isempty(dataname) )
   if( ~any(aflag) | (~any(bflag) & ~isempty(value)) )% add new dataobject 
      object.data(n+1).dataname=item;
      object.data(n+1).protect = 0;
      
      if isearthobj(value)
	object.data(n+1).dataobjtype = objget(value,'objtype');
      elseif( rdat==1 & cdat==1)
        object.data(n+1).dataobjtype = 'sclr';
      elseif( rdat>1 & cdat==1 )
        object.data(n+1).dataobjtype = 'cvec';
      elseif( rdat==1 & cdat>1 )
      	object.data(n+1).dataobjtype = 'rvec';
      elseif( rdat>1 & cdat>1 )
        object.data(n+1).dataobjtype = 'mtrx';
      end
      
      if( isempty(datatype) )
        if( isearthobj(value) )
          object.data(n+1).datadatatype = objget(value,'datatype');
        elseif( ischar(value) )
          object.data(n+1).datadatatype = 'strg';
        else
          object.data(n+1).datadatatype = 'smpl';
        end
      elseif( ~isempty(datatype) & ischar(datatype) )
        object.data(n+1).datadatatype = datatype;  
      end   
      object.data(n+1).datamodified = fix(clock);
      gg=getfield(object.data,{n+1},'dataname');
      object.data=setfield(object.data,{n+1},gg,value);
      return;
   end
end

⌨️ 快捷键说明

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