|
@@ -1,35 +1,37 @@
|
|
|
|
|
|
|
|
|
-function [Geometry patient_dir] = nrrd2geometry
|
|
|
+function [Geometry] = load2geometry
|
|
|
|
|
|
%% -----===== Get CT files =====-----
|
|
|
- [IMG_in, IMG_path, filterIdx] = uigetfile([{'*.nrrd'; '*.am'}], 'Select CT image', 'C:\Box Sync\Optimal Stopping\Data\CDP\CDP001\');
|
|
|
-
|
|
|
-% IMG_in = 'test_ct.nrrd';
|
|
|
-% IMG_path = 'C:\010-work\003_localGit\WiscPlan_v2\PhantomData\';
|
|
|
+ Geometry.data_dir = uigetdir('C:\Box Sync\Optimal Stopping\Data\CDP', 'Select folder with patient data');
|
|
|
+ [IMG_in, IMG_path, filterIdx] = uigetfile([{'*.nrrd'; '*.am'}], 'Select CT image', Geometry.data_dir);
|
|
|
+% 'C:\Box Sync\Optimal Stopping\Data\CDP\CDP001\'
|
|
|
|
|
|
total_num_steps = 4;
|
|
|
hWaitbar = waitbar(0);
|
|
|
|
|
|
+ % -- geometry explained --
|
|
|
% geometry_file important parts:
|
|
|
% Geometry.ROIS - actually only to get the binary mask of the target
|
|
|
% Geometry.data - CT image in HU
|
|
|
- % Geometry.voxel_size - self explanatory
|
|
|
- % Geometry.start - self explanatory
|
|
|
+ % Geometry.voxel_size - size of voxels in cm
|
|
|
+ % Geometry.start - image coordinate origin
|
|
|
|
|
|
% these are derived from above:
|
|
|
% +Geometry.rhomw - CT image with values in relative water density
|
|
|
% +Geometry.Smw - very similair to rhomw
|
|
|
% +Geometry.Fmw2
|
|
|
- % +Geometry.BTV
|
|
|
- % +Geometry.ring
|
|
|
+ % +Geometry.BTV
|
|
|
+ % +Geometry.ring - a ring around PTV used to pull down IMRT optimization
|
|
|
+ % --------------------------
|
|
|
|
|
|
switch filterIdx
|
|
|
case 0
|
|
|
- warning('No file selected!')
|
|
|
+ warning('No file selected, aborting!')
|
|
|
+ return
|
|
|
case 1
|
|
|
[Geometry.data, meta]=nrrdread([IMG_path, IMG_in]);
|
|
|
-% warning('NRRD file loaded!')
|
|
|
+ disp('NRRD file loaded!')
|
|
|
Geometry.rhomw = CT2dens(Geometry.data, 'pinn');
|
|
|
Geometry.rhomw(Geometry.rhomw < 0.0012) = 0.0012;
|
|
|
[Geometry.Smw Geometry.Fmw2] = dens2mstp(Geometry.rhomw);
|
|
@@ -38,7 +40,7 @@ function [Geometry patient_dir] = nrrd2geometry
|
|
|
case 2
|
|
|
imgIn=am2mat([IMG_path, IMG_in]);
|
|
|
Geometry.data = permute(imgIn.data, [2,1,3]);
|
|
|
-% warning('NRRD file loaded!')
|
|
|
+ disp('NRRD file loaded!')
|
|
|
Geometry.rhomw = CT2dens(Geometry.data, 'pinn');
|
|
|
Geometry.rhomw(Geometry.rhomw < 0.0012) = 0.0012;
|
|
|
[Geometry.Smw Geometry.Fmw2] = dens2mstp(Geometry.rhomw);
|
|
@@ -47,6 +49,7 @@ function [Geometry patient_dir] = nrrd2geometry
|
|
|
Geometry.start=imgIn.start;
|
|
|
case 3
|
|
|
% something selected
|
|
|
+ error('please do not select *all* in file selection')
|
|
|
otherwise
|
|
|
% error('You should never see this.')
|
|
|
end
|
|
@@ -55,23 +58,24 @@ function [Geometry patient_dir] = nrrd2geometry
|
|
|
% Geometry.ROIS
|
|
|
|
|
|
%% -----===== Get mask/contour files =====-----
|
|
|
- [TRGT_in, TRGT_path, filterIdx2] = uigetfile([{'*.nrrd'; '*.am'}], 'Select file with Target', 'C:\Box Sync\Optimal Stopping\Data\CDP\CDP001\');
|
|
|
+ [TRGT_in, TRGT_path, filterIdx2] = uigetfile([{'*.nrrd'; '*.am'}], 'Select file with Target', Geometry.data_dir);
|
|
|
|
|
|
switch filterIdx2
|
|
|
case 0
|
|
|
warning('No file selected!')
|
|
|
case 1
|
|
|
[TRGT_img, meta]=nrrdread([TRGT_path, TRGT_in]);
|
|
|
- warning('NRRD file loaded!')
|
|
|
+ disp('NRRD file loaded!')
|
|
|
Geometry.ROIS{1}.ind = find(TRGT_img>0);
|
|
|
Geometry.ROIS{1}.name= 'Target';
|
|
|
case 2
|
|
|
TRGT_in=am2mat([TRGT_path, TRGT_in]);
|
|
|
- warning('AM file loaded!')
|
|
|
+ disp('AM file loaded!')
|
|
|
TRGT_img = permute(TRGT_in.data, [2,1,3]);
|
|
|
Geometry.ROIS{1}.ind = find(TRGT_img>0);
|
|
|
Geometry.ROIS{1}.name= 'Target';
|
|
|
case 3
|
|
|
+ error('please do not select *all* in file selection')
|
|
|
% something selected
|
|
|
otherwise
|
|
|
% error('You should never see this.')
|
|
@@ -80,15 +84,17 @@ function [Geometry patient_dir] = nrrd2geometry
|
|
|
|
|
|
%% -----===== Save geometry files =====-----
|
|
|
patient_dir = uifile('getdir', 'Save the patient data to directory');
|
|
|
+ Geometry.patient_dir = patient_dir;
|
|
|
+
|
|
|
% patient_dir = 'C:\010-work\003_localGit\WiscPlan_v2\data\PatientData\';
|
|
|
|
|
|
% make directories
|
|
|
- mkdir(patient_dir);
|
|
|
- mkdir(fullfile(patient_dir, 'beamlet_batch_files'));
|
|
|
- mkdir(fullfile(patient_dir, 'geometry_files'));
|
|
|
- mkdir(fullfile(patient_dir, 'matlab_files'));
|
|
|
- mkdir(fullfile(patient_dir, 'opt_input'));
|
|
|
- mkdir(fullfile(patient_dir, 'opt_output'));
|
|
|
+ mkdir(Geometry.patient_dir);
|
|
|
+ mkdir(fullfile(Geometry.patient_dir, 'beamlet_batch_files'));
|
|
|
+ mkdir(fullfile(Geometry.patient_dir, 'geometry_files'));
|
|
|
+ mkdir(fullfile(Geometry.patient_dir, 'matlab_files'));
|
|
|
+ mkdir(fullfile(Geometry.patient_dir, 'opt_input'));
|
|
|
+ mkdir(fullfile(Geometry.patient_dir, 'opt_output'));
|
|
|
|
|
|
%% -----===== BTV and Ring creation =====-----
|
|
|
% waitbar(1/total_num_steps, hWaitbar, 'Step 2: Assign target and BTV margin');
|
|
@@ -153,32 +159,28 @@ function [Geometry patient_dir] = nrrd2geometry
|
|
|
%% -----===== Save the matlab files =====-----
|
|
|
waitbar(2.33/total_num_steps, hWaitbar, 'Step 3: Save matlab geometry files');
|
|
|
% Save matlab geometry file
|
|
|
- save(fullfile(patient_dir, 'matlab_files', 'Geometry.mat'), 'Geometry');
|
|
|
+ save(fullfile(Geometry.patient_dir, 'matlab_files', 'Geometry.mat'), 'Geometry');
|
|
|
|
|
|
waitbar(2.66/total_num_steps, hWaitbar, 'Step 3: Save raw geometry files');
|
|
|
% Write binary geometry files
|
|
|
- fid = fopen(fullfile(patient_dir, 'geometry_files', 'rhomw.bin'), 'w');
|
|
|
+ fid = fopen(fullfile(Geometry.patient_dir, 'geometry_files', 'rhomw.bin'), 'w');
|
|
|
fwrite(fid, Geometry.rhomw, 'single');
|
|
|
fclose(fid);
|
|
|
|
|
|
- fid = fopen(fullfile(patient_dir, 'geometry_files', 'Smw.bin'), 'w');
|
|
|
+ fid = fopen(fullfile(Geometry.patient_dir, 'geometry_files', 'Smw.bin'), 'w');
|
|
|
fwrite(fid, Geometry.Smw, 'single');
|
|
|
fclose(fid);
|
|
|
|
|
|
- fid = fopen(fullfile(patient_dir, 'geometry_files', 'Fmw2.bin'), 'w');
|
|
|
+ fid = fopen(fullfile(Geometry.patient_dir, 'geometry_files', 'Fmw2.bin'), 'w');
|
|
|
fwrite(fid, Geometry.Fmw2, 'single');
|
|
|
fclose(fid);
|
|
|
|
|
|
-% fid = fopen(fullfile(patient_dir, 'geometry_files', 'target_mask.bin'), 'w');
|
|
|
-% fwrite(fid, Geometry.BTV, 'single');
|
|
|
-% fclose(fid);
|
|
|
-
|
|
|
- % hWaitbar = waitbar(1/total_num_steps, 'Step 4, Create optimization geometry');
|
|
|
-
|
|
|
delete(hWaitbar);
|
|
|
- waitfor(msgbox(['Plan geometry created successfully in ' '"' patient_dir '"']));
|
|
|
-
|
|
|
-
|
|
|
+ waitfor(msgbox(['Plan geometry created successfully in ' '"' Geometry.patient_dir '"']));
|
|
|
|
|
|
|
|
|
-end
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|