123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- function RDXTPS_optimSetup(Nbeamlets, patient_dir, Geometry)
- if isempty(patient_dir)
- patient_dir = uifile('getdir', 'Select the patient directory');
- end
- if isempty(Geometry)
- load(fullfile(patient_dir, 'matlab_files', 'Geometry.mat'));
- end
- prompt = {...
- sprintf('Maximum number of iterations:'), ...
- sprintf('Save result every ? interations:'), ...
- sprintf('Modulation factor:\n(typically 5 for SS, 2 for DET)') ...
- };
- defAns = {'2000', '200', '5'};
- answer = inputdlg(prompt, 'Optimization parameters', 1, defAns);
- Niterations = str2double(answer{1});
- Nperbatch = str2double(answer{2});
- modFactor = str2double(answer{3});
- optSettings = [];
- optSettings.optInfo.saveOptInfo = 'yes';
- optSettings.optInfo.Niterations = Niterations;
- optSettings.optInfo.Nperbatch = Nperbatch;
- optSettings.optInfo.optFolder = patient_dir;
- optSettings.optInfo.inputFile = 'optInput.txt';
- optSettings.optInfo.inputFolder = 'opt_input';
- optSettings.optInfo.outputFolder = 'opt_output';
- optSettings.optInfo.modFactor = modFactor;
- optSettings.initialGuessInfo.calcInitialGuessFlag = 1;
- calculateInitialGuess = 'no';
- optSettings.prescInfo.savePresc = 'yes';
- optSettings.beamletInfo.saveBeamletHeader = 'yes';
- optSettings.beamletInfo.beamletFolder = 'beamlet_batch_files';
- optSettings.beamletInfo.Nbeamlets = Nbeamlets;
- optSettings.beamletInfo.Nbeamletbatches = 1;
- ROI_names = cellfun(@(c)c.name, Geometry.ROIS, 'UniformOutput', false);
- [target_idx okay] = listdlg('ListString', ROI_names, ...
- 'SelectionMode', 'single', 'Name', 'Target Selection', ...
- 'PromptString', 'Please select the target ROI. ');
- prescTable = cell(length(Geometry.ROIS),13);
- for roi_ind = 1:length(Geometry.ROIS)
- prescTable{roi_ind,1} = Geometry.ROIS{roi_ind}.name;
- prescTable{roi_ind,2} = Geometry.ROIS{roi_ind}.name;
-
- for iloop = 3:13
- prescTable{roi_ind,iloop} = 0;
- end
-
- if roi_ind == target_idx
- prescTable{roi_ind, 3} = 100;
- prescTable{roi_ind, 4} = 1;
- prescTable{roi_ind, 5} = 60;
- prescTable{roi_ind, 6} = 1;
- prescTable{roi_ind, 7} = 60;
- prescTable{roi_ind,12} = 60;
- prescTable{roi_ind,13} = 98;
- end
- end
- [M,N,Q] = size(Geometry.rhomw);
- presc = [];
- presc.siz = [M N Q];
- ROIFlags = zeros(1,size(prescTable,1));
- for j=1:size(prescTable,1)
-
- tissName = prescTable{j,2};
-
- for k=1:length(Geometry.ROIS)
- if strcmp(tissName,strrep(Geometry.ROIS{k}.name,'%',''))
- ind = Geometry.ROIS{k}.ind;
- break;
- end
- end
-
- presc.tissue(j).name = prescTable{j,1};
- presc.tissue(j).ind = ind;
- presc.tissue(j).alpha = prescTable{j,3};
- presc.tissue(j).betaPlus = prescTable{j,4};
- presc.tissue(j).dPlus = single(zeros(size(ind)) + prescTable{j,5});
- presc.tissue(j).betaMinus = prescTable{j,6};
- presc.tissue(j).dMinus = single(zeros(size(ind)) + prescTable{j,7});
- presc.tissue(j).betaVPlus = prescTable{j,8};
- presc.tissue(j).dVPlus = prescTable{j,9};
- presc.tissue(j).vPlus = prescTable{j,10};
- presc.tissue(j).betaVMinus = prescTable{j,11};
- presc.tissue(j).dVMinus = prescTable{j,12};
- presc.tissue(j).vMinus = prescTable{j,13};
- presc.tissue(j).dPlus = single(zeros(size(ind)) + prescTable{j,5});
- presc.tissue(j).dMinus = single(zeros(size(ind)) + prescTable{j,7});
- ROIFlags(j) = 1;
- end
- if sum(ROIFlags) ~= length(ROIFlags)
- error('Missed one or more ROIS.\n');
- else
- fprintf('All ROIs located successfully for downsampled prescription\n');
- end
- optSettings.prescInfo.presc = presc;
- optSettings.beamletInfo.beamletDim = [M N Q];
- RDX_linlsqOptimization(optSettings);
|