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 argument
- error(nargchk(1,2,nargin))
- % Check case and set-up some parameters and variables
- if 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 case
- if 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 dose
- if 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 beams
- end
- if nargin == 1
- totalMCdose=dicomrt_restorevarformat(study_temp,totalMCdose);
- else
- totalMCdose=dicomrt_restorevarformat(study_temp,totalMCdose);
- totalMCerror=dicomrt_restorevarformat(studye_temp,totalMCerror);
- end
|