| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | function [totalMCdose,totalMCerror] = dicomrt_addmcdose(MCdose,MCerror)% dicomrt_addmcdose(MCdose,MCerror)%% Add segment's contribution of Monte Carlo 3D dose distribution calculated for rtplanformc % % MCdose and MCerror are two cell arrays with the following structure%%   beam name     3d matrix/segment%  --------------------------------------%  | [beam 1] | [1st segment 3dmatrix ] |%  |          | [1st segment 3dmatrix ] |%  |          |                         |%  |          | [nth segment 3dmatrix ] |%  --------------------------------------%  |   ...               ...            |%  --------------------------------------%  | [beam 2] | [1st segment 3dmatrix ] |%  |          | [1st segment 3dmatrix ] |%  |          |                         |%  |          | [nth segment 3dmatrix ] |%  --------------------------------------%% Example:%% [totalMCdose,totalMCerror]=dicomrt_addmcdose(A,B)%% add all the 3D MC dose and errors from segments, stored respectively in A and B,  % and return them in totalMCdose and totalMCerror%% See also dicomrt_read3ddose, dicomrt_loaddose, dicomrt_loadmcdose%% Copyright (C) 2002 Emiliano Spezi (emiliano.spezi@physics.org) % Check number of argumenterror(nargchk(1,2,nargin))% Check case and set-up some parameters and variablesif nargin==1    [study_temp,type_dose,label]=dicomrt_checkinput(MCdose,1);    MCdose=dicomrt_varfilter(study_temp);else    [study_temp,type_dose,label]=dicomrt_checkinput(MCdose,1);    [studye_temp,type_dose,label]=dicomrt_checkinput(MCerror,1);    MCdose=dicomrt_varfilter(study_temp);    MCerror=dicomrt_varfilter(studye_temp);    end% Check caseif nargin==2 & (iscell(MCdose)~=1 | iscell(MCerror)~=1)    error('dicomrt_addmcdose: Dose or error matrices do not have the expected format (i.e. cell). Exit now!')elseif iscell(MCdose)~=1    error('dicomrt_addmcdose: Dose or error matrices do not have the expected format (i.e. cell). Exit now!')end% Add segment's doseif nargin == 2 % dose and error to be added    for i=1:size(MCdose,1); % loop over beam        if iscell(MCdose{i,2})==1 % likely segment contribution            for j=1:size(MCdose{i,2},2); % loop over segment                % NOTE: the sum of absolute errors is used to calculate the                % total absolute error ...                if i==1 & j==1                    totalMCdose=MCdose{i,2}{j};                    totalMCerror_abs=MCerror{i,2}{j}.*MCdose{i,2}{j};                else                    totalMCdose=totalMCdose+MCdose{i,2}{j};                    totalMCerror_abs=totalMCerror_abs+MCerror{i,2}{j}.*MCdose{i,2}{j};                end            end % end loop over segments        else % likely beam contribution            if i==1                 totalMCdose=MCdose{i,2};                totalMCerror_abs=MCerror{i,2}.*MCdose{i,2};            else                totalMCdose=totalMCdose+MCdose{i,2};                totalMCerror_abs=totalMCerror_abs+MCerror{i,2}.*MCdose{i,2};            end        end     end % end loop over beams    % ... now we calculate the relative error for the total dose    totalMCerror=totalMCerror_abs./totalMCdose;elseif nargin == 1 % only dose to be added    for i=1:size(MCdose,1); % loop over beam        if iscell(MCdose{i,2})==1 % likely segment contribution            for j=1:size(MCdose{i,2},2); % loop over segment                % NOTE: the sum of absolute errors is used to calculate the                % total absolute error ...                if i==1 & j==1                    totalMCdose=MCdose{i,2}{j};                else                    totalMCdose=totalMCdose+MCdose{i,2}{j};                end            end % end loop over segments        else % likely beam contribution            if i==1                totalMCdose=MCdose{i,2};            else                totalMCdose=totalMCdose+MCdose{i,2};            end        end     end % end loop over beamsendif nargin == 1    totalMCdose=dicomrt_restorevarformat(study_temp,totalMCdose);else    totalMCdose=dicomrt_restorevarformat(study_temp,totalMCdose);    totalMCerror=dicomrt_restorevarformat(studye_temp,totalMCerror);end
 |