📄 combine_parameters.m
字号:
function structout=combine_parameters(structin1,structin2,structout)% Combine parameters from "structin1" and "structin2" and add them to% "structout"% Written by: E. R.: September 12, 2003% Last updated:%% structout=combine_parameters(structin1,structin2,structout)% INPUT% structin1 structure which might have a field "parameter_info" (examples are % "seismic","well_log", etc.% structin2 structure which might have a field "parameter_info"% structout structure to which the combined parameters of "structin1" and % "structin2" will be added.% OUTPUT% structoutif isfield(structin1,'parameter_info') & isfield(structin2,'parameter_info') par1=structin1.parameter_info(:,1); par2=structin2.parameter_info(:,1); [dummy,idx1,idx2]=intersect(par1,par2); if isempty(dummy) % No commmon parameters structout.parameter_info=[structin1.parameter_info;structin2.parameter_info]; for ii=1:length(par1) structout=setfield(structout,par1{ii},getfield(structin1,par1{ii})); end for ii=1:length(par2) structout=setfield(structout,par2{ii},getfield(structin2,par2{ii})); end else % Common parameters% Add the parameters that the two structures do not have in common idx1a=find(~ismember(par1,dummy)); idx2a=find(~ismember(par2,dummy)); if ~isempty(idx1) & ~isempty(idx2a) structout.parameter_info=[structin1.parameter_info(idx1a,:); ... structin2.parameter_info(idx2a,:)]; elseif ~isempty(idx1a) structout.parameter_info=structin1.parameter_info(idx1a,:); elseif ~isempty(idx2a) structout.parameter_info=structin2.parameter_info(idx2a,:); else structout.parameter_info=[]; end for ii=1:length(idx1a) structout=setfield(structout,structin1.parameter_info{idx1a(ii)}, ... getfield(structin1,structin1.parameter_info{idx1a(ii)})); end for ii=1:length(idx2a) structout=setfield(structout,structin2.parameter_info{idx2a(ii)}, ... getfield(structin1,structin2.parameter_info{idx2a(ii)})); end% Check if the common parameters are the same for ii=1:length(idx1) par=par1{idx1(ii)}; val1=getfield(structin1,par); val2=getfield(structin2,par); if all(size(val1) == size(val2)) % Both parameters have the same dimension if all(val1 == val2) % Both parameters have the same value structout=setfield(structout,par,val1); structout.parameter_info=[structout.parameter_info; structin1.parameter_info(idx1(ii),:)]; else structout=setfield(structout,[par,'_1'],val1); structout=setfield(structout,[par,'_2'],val2); structout.parameter_info=[structout.parameter_info; structin1.parameter_info(idx1(ii),:)]; structout.parameter_info{end,1}=[par,'_1']; structout.parameter_info=[structout.parameter_info; structin1.parameter_info(idx2(ii),:)]; structout.parameter_info{end,1}=[par,'_2']; end else structout=setfield(structout,[par,'_1'],val1); structout=setfield(structout,[par,'_2'],val2); structout.parameter_info=[structout.parameter_info; structin1.parameter_info(idx1(ii),:)]; structout.parameter_info{end,1}=[par,'_1']; structout.parameter_info=[structout.parameter_info; structin1.parameter_info(idx2(ii),:)]; structout.parameter_info{end,1}=[par,'_2']; end end endelseif isfield(structin1,'parameter_info') structout=copy_parameters(structin1,structout);elseif isfield(structin2,'parameter_info') structout=copy_parameters(structin2,structout);end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -