0001 function dva = calc_difference_data( data1, data2, fwd_model)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 data_width= max(num_frames(data1), num_frames(data2));
0022
0023 try if data1.type == 'data'
0024 data1= data1.meas;
0025 end; end
0026
0027 try if data2.type == 'data'
0028 data2= data2.meas;
0029 end; end
0030
0031 if all(size(data1) == [1,1]) && (data1 == 0)
0032 dva = filt_data( fwd_model, data2, data_width );
0033 return;
0034 end
0035
0036 if ~isfield(fwd_model,'normalize_measurements')
0037 fwd_model.normalize_measurements = 0;
0038 end
0039
0040 fdata1 = filt_data( fwd_model, data1, data_width );
0041 fdata2 = filt_data( fwd_model, data2, data_width );
0042
0043 if fwd_model.normalize_measurements
0044 dva= fdata2 ./ fdata1 - 1;
0045 else
0046 dva= fdata2 - fdata1;
0047 end
0048
0049 function nf= num_frames(d0)
0050 if isnumeric( d0 )
0051 nf= size(d0,2);
0052 elseif strcmp( d0(1).type, 'data' );
0053 nf= length(d0);
0054 else
0055 error('Problem calculating number of frames');
0056 end
0057
0058
0059 function d2= filt_data(fwd_model, d0, data_width )
0060 if ~isnumeric( d0 )
0061
0062
0063 l_obj = length(d0);
0064 d1 = zeros( length( d0(1).meas ), l_obj);
0065 for i=1:l_obj
0066 if strcmp( d0(i).type, 'data' )
0067 d1(:,i) = d0(i).meas;
0068 else
0069 error('expecting an object of type data');
0070 end
0071 end
0072
0073 else
0074
0075 d1 = d0;
0076 end
0077
0078 d1= double(d1);
0079
0080 if isfield(fwd_model,'meas_select') && ...
0081 ~isempty(fwd_model.meas_select);
0082
0083
0084 meas_select= fwd_model.meas_select;
0085 if size(d1,1) == length(meas_select)
0086 d2= d1(meas_select,:);
0087 elseif size(d1,1) == sum(meas_select==1)
0088 d2= d1;
0089 else
0090 error('data size does not match meas_select');
0091 end
0092 else
0093 d2= d1;
0094 end
0095
0096 if nargin==3
0097 d2_width= size(d2,2);
0098 if d2_width == data_width
0099
0100 elseif d2_width == 1
0101 d2= d2(:,ones(1,data_width));
0102 else
0103 error('inconsistent difference data: (%d ~= %d)', ...
0104 d2_width, data_width);
0105 end
0106 end
0107