123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443 |
- function make_ROI_goals (Geometry, beamlets, beamlets_joined, patient)
-
- switch patient
- case 'patient'
- ROI_goals.optGoal = make_ROI_goals_Pat(Geometry, beamlets);
- ROI_goals.optGoal_beam = make_ROI_goals_Pat(Geometry, beamlets_joined);
-
- ROI_goals.optGoal_idx=[1,2];
- ROI_goals.targetMinMax_idx=[1,3];
-
- case 'tomoPhantom'
- ROI_goals.optGoal = make_ROI_goals_Pat2(Geometry, beamlets);
- ROI_goals.optGoal_beam = make_ROI_goals_Pat2(Geometry, beamlets_joined);
-
- ROI_goals.optGoal_idx=[1,3];
- ROI_goals.targetMinMax_idx=[1,2];
-
- case 'phantom_HD'
- ROI_goals.optGoal = make_ROI_goals(Geometry, beamlets);
- ROI_goals.optGoal_beam = make_ROI_goals(Geometry, beamlets_joined);
-
- ROI_goals.optGoal_idx=[1,3];
- ROI_goals.targetMinMax_idx=[1,2];
-
- case 'doggo'
- ROI_goals.optGoal = make_ROI_goals_DOG_2(Geometry, beamlets);
- ROI_goals.optGoal_beam = make_ROI_goals_DOG_2(Geometry, beamlets_joined);
-
- ROI_goals.optGoal_idx=[1,2];
- ROI_goals.targetMinMax_idx=[1,3];
- case 'gbm_005'
- ROI_goals.optGoal = make_ROI_goals_gbm_005(Geometry, beamlets);
- ROI_goals.optGoal_beam = make_ROI_goals_gbm_005(Geometry, beamlets_joined);
-
- ROI_goals.optGoal_idx=[1,3];
- ROI_goals.targetMinMax_idx=[1,2];
- otherwise
- error('invalid case')
- end
-
- save(['C:\010-work\003_localGit\WiscPlan_v2\optGoals\' patient, '.mat'], 'ROI_goals')
- end
- function optGoal = make_ROI_goals_Pat(Geometry, beamlets)
- optGoal={};
-
-
- goal_1.name = 'Target_min';
- goal_1.ROI_name = Geometry.ROIS{1, 2}.name;
- ROI_idx = Geometry.ROIS{1, 2}.ind;
- goal_1.ROI_idx = ROI_idx;
- goal_1.imgDim = size(Geometry.data);
- goal_1.D_final = 60;
- goal_1.function = 'min';
- goal_1.beamlets_pruned = beamlets(ROI_idx, :);
- goal_1.target = ones(numel(ROI_idx), 1) * goal_1.D_final;
- goal_1.opt_weight = 10 / numel(ROI_idx);
- goal_1.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_1;
-
-
-
- goal_2.name = 'Target_max';
- goal_2.ROI_name = Geometry.ROIS{1, 2}.name;
- ROI_idx = Geometry.ROIS{1, 2}.ind;
- goal_2.ROI_idx = ROI_idx;
- goal_2.imgDim = size(Geometry.data);
- goal_2.D_final = 65;
- goal_2.function = 'max';
- goal_2.beamlets_pruned = beamlets(ROI_idx, :);
- goal_2.target = ones(numel(ROI_idx), 1) * goal_2.D_final;
- goal_2.opt_weight = 0.8 / numel(ROI_idx);
- goal_2.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_2;
-
-
-
- goal_3.name = 'ROI 1_max';
- goal_3.ROI_name = Geometry.ROIS{1, 3}.name;
- ROI_idx = Geometry.ROIS{1, 3}.ind;
- goal_3.ROI_idx = ROI_idx;
- goal_3.imgDim = size(Geometry.data);
- goal_3.D_final = 10;
- goal_3.function = 'max';
- goal_3.beamlets_pruned = beamlets(ROI_idx, :);
- goal_3.target = ones(numel(ROI_idx), 1) * goal_3.D_final;
- goal_3.opt_weight = 2 / numel(ROI_idx);
- goal_3.dvh_col = [0.2, 0.9, 0.2];
-
- optGoal{end+1}=goal_3;
-
-
- end
- function optGoal = make_ROI_goals_Pat2(Geometry, beamlets)
- optGoal={};
-
-
- goal_1.name = 'Target_min';
- goal_1.ROI_name = Geometry.ROIS{1, 2}.name;
- ROI_idx = Geometry.ROIS{1, 2}.ind;
- goal_1.ROI_idx = ROI_idx;
- goal_1.imgDim = size(Geometry.data);
- goal_1.D_final = 62;
- goal_1.function = 'min';
- goal_1.beamlets_pruned = beamlets(ROI_idx, :);
- goal_1.target_alpha = 1.00;
- goal_1.target = ones(numel(ROI_idx), 1) * goal_1.D_final;
- goal_1.opt_weight = 10 / numel(ROI_idx);
- goal_1.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_1;
-
-
-
- goal_2.name = 'Target_max';
- goal_2.ROI_name = Geometry.ROIS{1, 2}.name;
- ROI_idx = Geometry.ROIS{1, 2}.ind;
- goal_2.ROI_idx = ROI_idx;
- goal_2.imgDim = size(Geometry.data);
- goal_2.D_final = 63;
- goal_2.function = 'max';
- goal_2.beamlets_pruned = beamlets(ROI_idx, :);
- goal_1.target_alpha = 1.05;
- goal_2.target = ones(numel(ROI_idx), 1) * goal_2.D_final;
- goal_2.opt_weight = 2 / numel(ROI_idx);
- goal_2.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_2;
-
-
- goal_3.name = 'ROI 1_max';
- goal_3.ROI_name = Geometry.ROIS{1, 3}.name;
- ROI_idx = Geometry.ROIS{1, 3}.ind;
- goal_3.ROI_idx = ROI_idx;
- goal_3.imgDim = size(Geometry.data);
- goal_3.D_final = 10;
- goal_3.function = 'max';
- goal_3.beamlets_pruned = beamlets(ROI_idx, :);
- goal_3.target = ones(numel(ROI_idx), 1) * goal_3.D_final;
- goal_3.opt_weight = 2 / numel(ROI_idx);
- goal_3.dvh_col = [0.2, 0.9, 0.2];
-
- optGoal{end+1}=goal_3;
-
-
-
- goal_4.name = 'Ring_max';
- goal_4.ROI_name = Geometry.ROIS{1, 6}.name;
- ROI_idx = Geometry.ROIS{1, 6}.ind;
- goal_4.ROI_idx = ROI_idx;
- goal_4.imgDim = size(Geometry.data);
- goal_4.D_final = 56;
- goal_4.function = 'max_sq';
- goal_4.beamlets_pruned = beamlets(ROI_idx, :);
- goal_4.target = ones(numel(ROI_idx), 1) * goal_4.D_final;
- goal_4.opt_weight = 1 / numel(ROI_idx);
- goal_4.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_4;
-
-
- end
- function optGoal = make_ROI_goals_DOG(Geometry, beamlets)
- optGoal={};
-
-
- goal_1.name = 'Target_min';
- goal_1.ROI_name = Geometry.ROIS{1, 1}.name;
- ROI_idx = Geometry.ROIS{1, 1}.ind;
- goal_1.ROI_idx = ROI_idx;
- goal_1.imgDim = size(Geometry.data);
- goal_1.D_final = 62;
- goal_1.function = 'min_sq';
- goal_1.beamlets_pruned = beamlets(ROI_idx, :);
- goal_1.target = ones(numel(ROI_idx), 1) * goal_1.D_final;
- goal_1.opt_weight = 10 / numel(ROI_idx);
- goal_1.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_1;
-
-
-
- goal_2.name = 'Doggo_max';
- goal_2.ROI_name = Geometry.ROIS{1, 4}.name;
- ROI_idx = Geometry.ROIS{1, 4}.ind;
- goal_2.ROI_idx = ROI_idx;
- goal_2.imgDim = size(Geometry.data);
- goal_2.D_final = 20;
- goal_2.function = 'max_sq';
- goal_2.beamlets_pruned = beamlets(ROI_idx, :);
- goal_2.target = ones(numel(ROI_idx), 1) * goal_2.D_final;
- goal_2.opt_weight = 0.2 / numel(ROI_idx);
- goal_2.dvh_col = [0.2, 0.9, 0.2];
-
- optGoal{end+1}=goal_2;
-
-
-
- goal_3.name = 'Target_max';
- goal_3.ROI_name = Geometry.ROIS{1, 1}.name;
- ROI_idx = Geometry.ROIS{1, 1}.ind;
- goal_3.ROI_idx = ROI_idx;
- goal_3.imgDim = size(Geometry.data);
- goal_3.D_final = 63;
- goal_3.function = 'max_sq';
- goal_3.beamlets_pruned = beamlets(ROI_idx, :);
- goal_3.target = ones(numel(ROI_idx), 1) * goal_3.D_final;
- goal_3.opt_weight = 2 / numel(ROI_idx);
- goal_3.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_3;
-
-
-
- goal_3.name = 'Doggo_max2';
- goal_3.ROI_name = Geometry.ROIS{1, 4}.name;
- ROI_idx = Geometry.ROIS{1, 4}.ind;
- goal_3.ROI_idx = ROI_idx;
- goal_3.imgDim = size(Geometry.data);
- goal_3.D_final = 50;
- goal_3.function = 'max_sq';
- goal_3.beamlets_pruned = beamlets(ROI_idx, :);
- goal_3.target = ones(numel(ROI_idx), 1) * goal_3.D_final;
- goal_3.opt_weight = 1 / numel(ROI_idx);
- goal_3.dvh_col = [0.2, 0.9, 0.2];
-
- optGoal{end+1}=goal_3;
-
-
- end
- function optGoal = make_ROI_goals_DOG_2(Geometry, beamlets)
- optGoal={};
-
-
- goal_1.name = 'Target_min';
- goal_1.ROI_name = Geometry.ROIS{1, 1}.name;
- ROI_idx = Geometry.ROIS{1, 1}.ind;
- goal_1.ROI_idx = ROI_idx;
- goal_1.imgDim = size(Geometry.data);
- goal_1.D_final = 62;
- goal_1.function = 'min_sq';
- goal_1.beamlets_pruned = beamlets(ROI_idx, :);
- goal_1.target_alpha = 1.00;
- goal_1.target = ones(numel(ROI_idx), 1) * goal_1.D_final;
- goal_1.opt_weight = 10 / numel(ROI_idx);
- goal_1.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_1;
-
-
-
- goal_2.name = 'Doggo_max';
- goal_2.ROI_name = Geometry.ROIS{1, 4}.name;
- ROI_idx = Geometry.ROIS{1, 4}.ind;
- goal_2.ROI_idx = ROI_idx;
- goal_2.imgDim = size(Geometry.data);
- goal_2.D_final = 20;
- goal_2.function = 'max_sq';
- goal_2.beamlets_pruned = beamlets(ROI_idx, :);
- goal_2.target = ones(numel(ROI_idx), 1) * goal_2.D_final;
- goal_2.opt_weight = 0.2 / numel(ROI_idx);
- goal_2.dvh_col = [0.2, 0.9, 0.2];
-
- optGoal{end+1}=goal_2;
-
-
-
- goal_3.name = 'Target_max';
- goal_3.ROI_name = Geometry.ROIS{1, 1}.name;
- ROI_idx = Geometry.ROIS{1, 1}.ind;
- goal_3.ROI_idx = ROI_idx;
- goal_3.imgDim = size(Geometry.data);
- goal_3.D_final = 63;
- goal_3.function = 'max_sq';
- goal_3.beamlets_pruned = beamlets(ROI_idx, :);
- goal_3.target_alpha = 1.05;
- goal_3.target = ones(numel(ROI_idx), 1) * goal_3.D_final;
- goal_3.opt_weight = 2 / numel(ROI_idx);
- goal_3.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_3;
-
-
-
- goal_4.name = 'Doggo_max2';
- goal_4.ROI_name = Geometry.ROIS{1, 4}.name;
- ROI_idx = Geometry.ROIS{1, 4}.ind;
- goal_4.ROI_idx = ROI_idx;
- goal_4.imgDim = size(Geometry.data);
- goal_4.D_final = 50;
- goal_4.function = 'max_sq';
- goal_4.beamlets_pruned = beamlets(ROI_idx, :);
- goal_4.target = ones(numel(ROI_idx), 1) * goal_4.D_final;
- goal_4.opt_weight = 1 / numel(ROI_idx);
- goal_4.dvh_col = [0.2, 0.9, 0.2];
-
- optGoal{end+1}=goal_4;
-
-
- end
- function optGoal = make_ROI_goals_DOG_3(Geometry, beamlets)
- optGoal={};
-
-
- goal_1.name = 'Target_min';
- goal_1.ROI_name = Geometry.ROIS{1, 1}.name;
- ROI_idx = Geometry.ROIS{1, 1}.ind;
- goal_1.ROI_idx = ROI_idx;
- goal_1.imgDim = size(Geometry.data);
- goal_1.D_final = 62;
- goal_1.function = 'min_perc_Volume';
- goal_1.beamlets_pruned = beamlets(ROI_idx, :);
- goal_1.target_alpha = 1.00;
- goal_1.target = ones(numel(ROI_idx), 1) * goal_1.D_final;
- goal_1.opt_weight = 10 / numel(ROI_idx);
- goal_1.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_1;
-
-
-
- goal_2.name = 'Doggo_max';
- goal_2.ROI_name = Geometry.ROIS{1, 4}.name;
- ROI_idx = Geometry.ROIS{1, 4}.ind;
- goal_2.ROI_idx = ROI_idx;
- goal_2.imgDim = size(Geometry.data);
- goal_2.D_final = 20;
- goal_2.function = 'max_sq';
- goal_2.beamlets_pruned = beamlets(ROI_idx, :);
- goal_2.targetImg = ones(numel(ROI_idx), 1) * goal_2.D_final;
- goal_2.target = ones(numel(ROI_idx), 1) * goal_2.D_final;
- goal_2.opt_weight = 0.2 / numel(ROI_idx);
- goal_2.dvh_col = [0.2, 0.9, 0.2];
-
- optGoal{end+1}=goal_2;
-
-
-
- goal_3.name = 'Target_max';
- goal_3.ROI_name = Geometry.ROIS{1, 1}.name;
- ROI_idx = Geometry.ROIS{1, 1}.ind;
- goal_3.ROI_idx = ROI_idx;
- goal_3.imgDim = size(Geometry.data);
- goal_3.D_final = 63;
- goal_3.function = 'max_perc_Volume';
- goal_3.beamlets_pruned = beamlets(ROI_idx, :);
- goal_3.target_alpha = 1.05;
- goal_3.target = ones(numel(ROI_idx), 1) * goal_3.D_final;
- goal_3.opt_weight = 0.5 / numel(ROI_idx);
- goal_3.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_3;
-
-
-
- goal_4.name = 'Doggo_max2';
- goal_4.ROI_name = Geometry.ROIS{1, 4}.name;
- ROI_idx = Geometry.ROIS{1, 4}.ind;
- goal_4.ROI_idx = ROI_idx;
- goal_4.imgDim = size(Geometry.data);
- goal_4.D_final = 50;
- goal_4.function = 'max_sq';
- goal_4.beamlets_pruned = beamlets(ROI_idx, :);
- goal_4.target = ones(numel(ROI_idx), 1) * goal_4.D_final;
- goal_4.opt_weight = 1 / numel(ROI_idx);
- goal_4.dvh_col = [0.2, 0.9, 0.2];
-
- optGoal{end+1}=goal_4;
-
-
- end
- function optGoal = make_ROI_goals_gbm_005(Geometry, beamlets)
- optGoal={};
-
- pathIn = '\\Mpufs5\data_wnx1\_Data\Glioma_aus\FET_FGL005\B1\Processed\';
- [minDose, minDose_meta] = nrrdread([pathIn 'RODP_files\FET_FGL005_B1_DP_minDose.nrrd']);
- [maxDose, maxDose_meta] = nrrdread([pathIn 'RODP_files\FET_FGL005_B1_DP_maxDose.nrrd']);
- minDose = double(minDose);
- maxDose = double(maxDose);
-
-
- goal_1.name = 'CTV_min';
- goal_1.ROI_name = Geometry.ROIS{1, 1}.name;
- ROI_idx = Geometry.ROIS{1, 1}.ind;
- goal_1.ROI_idx = ROI_idx;
- goal_1.imgDim = size(Geometry.data);
- goal_1.D_final = minDose(ROI_idx);
- goal_1.function = 'min';
- goal_1.beamlets_pruned = beamlets(ROI_idx, :);
- goal_1.target = 60
- goal_1.opt_weight = 40 / numel(ROI_idx);
- goal_1.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_1;
-
-
-
- goal_2.name = 'CTV_max';
- goal_2.ROI_name = Geometry.ROIS{1, 1}.name;
- ROI_idx = Geometry.ROIS{1, 1}.ind;
- goal_2.ROI_idx = ROI_idx;
- goal_2.imgDim = size(Geometry.data);
- goal_2.D_final = maxDose(ROI_idx);
- goal_2.function = 'max_sq';
- goal_2.beamlets_pruned = beamlets(ROI_idx, :);
- goal_2.target = 60
- goal_2.opt_weight = 2 / numel(ROI_idx);
- goal_2.dvh_col = [0.9, 0.2, 0.2];
-
- optGoal{end+1}=goal_2;
-
-
-
- goal_3.name = 'head_max';
- goal_3.ROI_name = Geometry.ROIS{1, 2}.name;
- ROI_idx = Geometry.ROIS{1, 2}.ind;
- goal_3.ROI_idx = ROI_idx;
- goal_3.imgDim = size(Geometry.data);
- goal_3.D_final = 0.1;
- goal_3.function = 'max_sq';
- goal_3.beamlets_pruned = beamlets(ROI_idx, :);
- goal_3.target = ones(numel(ROI_idx), 1) * goal_3.D_final;
- goal_3.opt_weight = 7 / numel(ROI_idx);
- goal_3.dvh_col = [0.2, 0.9, 0.2];
-
- optGoal{end+1}=goal_3;
-
-
- end
|