1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- function [beamlets, beamlets_joined, numBeamlet, numBeam, beam_i_list] = get_beam_lets(Geometry, patient_dir)
- % this function loads and returns beamlets and joined beams
- beamlet_batch_filename = [patient_dir '\' 'batch_dose.bin'];
- beamlet_cell_array = read_ryan_beamlets(beamlet_batch_filename, 'ryan');
- numVox = numel(Geometry.data);
- numBeamlet = size(beamlet_cell_array,2);
- if size(Geometry.data, 1)<129
- batchSize = 400;
- else
- batchSize = 200;
- end
- beamlets = get_beamlets(beamlet_cell_array, numVox, batchSize);
- % join beamlets into beams
- load([patient_dir '\all_beams.mat'])
- beamletOrigin=[0 0 0];
- beam_i=0;
- beam_i_list=[];
- for beamlet_i = 1:numel(all_beams)
- newBeamletOrigin = all_beams{beamlet_i}.ip;
- if any(newBeamletOrigin ~= beamletOrigin)
- beam_i = beam_i+1;
- beamletOrigin = newBeamletOrigin;
- end
- beam_i_list=[beam_i_list, beam_i];
- end
- wbar2 = waitbar(0, 'merging beamlets into beams');
- numBeam=numel(unique(beam_i_list));
- beamlets_joined=sparse(size(beamlets,1), numBeam);
- for beam_i = 1:numel(unique(beam_i_list))
- beam_full = sum(beamlets(:,beam_i_list == beam_i), 2);
- beamlets_joined(:,beam_i) = beam_full;
- waitbar(beam_i/numBeam, wbar2)
- end
- close(wbar2)
- end
- % ---- GET BEAMLETS ----
- function beamlets = get_beamlets(beamlet_cell_array, numVox, batchSize);
- wbar1 = waitbar(0, 'Creating beamlet array');
- numBeam = size(beamlet_cell_array,2);
- beamlets = sparse(0, 0);
- for beam_i=1:numBeam
- % for each beam define how much dose it delivers on each voxel
- idx=beamlet_cell_array{1, beam_i}.non_zero_indices;
- % break the beamlets into multiple batches
- if rem(beam_i, batchSize)==1;
- beamlet_batch = sparse(numVox, batchSize);
- beam_i_temp=1;
- end
- beamlet_batch(idx, beam_i_temp) = 1000*beamlet_cell_array{1, beam_i}.non_zero_values;
- waitbar(beam_i/numBeam, wbar1, ['Adding beamlet array: #', num2str(beam_i)])
- % add the batch to full set when filled
- if rem(beam_i, batchSize)==0;
- beamlets =[beamlets, beamlet_batch];
- end
- % crop and add the batch to full set when completed
- if beam_i==numBeam;
- beamlet_batch=beamlet_batch(:, 1:beam_i_temp);
- beamlets =[beamlets, beamlet_batch];
- end
- beam_i_temp=beam_i_temp+1;
- end
- close(wbar1)
- end
- function show_joint_beamlets(beamlets, IMGsize, Beam_list)
- % this function overlays and plots multiple beamlets. The goal is to
- % check whether some beamlets are part of the same beam manually.
-
- beam=sum(beamlets(:, Beam_list), 2);
-
- beamImg=reshape(full(beam), IMGsize);
-
- orthoslice(beamImg)
-
- end
|