diff --git a/examples/matRad_example10_4DphotonRobust.m b/examples/matRad_example10_4DphotonRobust.m index 363a3797a..6bbd53ca8 100644 --- a/examples/matRad_example10_4DphotonRobust.m +++ b/examples/matRad_example10_4DphotonRobust.m @@ -241,30 +241,38 @@ maxDose = max([max(resultGUI.([pln.propOpt.quantityOpt])(:,:,slice)) max(resultGUIrobust.([pln.propOpt.quantityOpt])(:,:,slice))])+1e-4; doseIsoLevels = linspace(0.1 * maxDose,maxDose,10); figure, -subplot(121),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.([pln.propOpt.quantityOpt '_' 'beam1']) ,plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('conventional plan - beam1') -subplot(122),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.([pln.propOpt.quantityOpt]) ,plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('conventional plan') +subplot(121),matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUI.([pln.propOpt.quantityOpt '_' 'beam1']) ,'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 maxDose], 'doseIsoLevels', doseIsoLevels);title('conventional plan - beam1') +subplot(122),matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUI.([pln.propOpt.quantityOpt]) ,'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 maxDose], 'doseIsoLevels', doseIsoLevels);title('conventional plan') +%subplot(121),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.([pln.propOpt.quantityOpt '_' 'beam1']) ,plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('conventional plan - beam1') +%subplot(122),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.([pln.propOpt.quantityOpt]) ,plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('conventional plan') figure -subplot(121),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.([pln.propOpt.quantityOpt '_' 'beam1']),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('robust plan - beam1') -subplot(122),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.([pln.propOpt.quantityOpt]),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('robust plan') +subplot(121),matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUIrobust.([pln.propOpt.quantityOpt '_' 'beam1']) ,'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 maxDose], 'doseIsoLevels', doseIsoLevels);title('robust plan - beam1') +subplot(122),matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUIrobust.([pln.propOpt.quantityOpt]) ,'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 maxDose], 'doseIsoLevels', doseIsoLevels);title('robust plan') +%subplot(121),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.([pln.propOpt.quantityOpt '_' 'beam1']),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('robust plan - beam1') +%subplot(122),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.([pln.propOpt.quantityOpt]),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('robust plan') figure -subplot(131),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust4D.([pln.propOpt.quantityOpt]),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('robust plan') -subplot(132),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust4D.('accPhysicalDose'),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('robust plan dose accumulation') +subplot(131),matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUIrobust4D.([pln.propOpt.quantityOpt]) ,'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 maxDose], 'doseIsoLevels', doseIsoLevels);title('robust plan') +subplot(132),matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUIrobust4D.('accPhysicalDose') ,'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 maxDose], 'doseIsoLevels', doseIsoLevels);title('robust plan dose accumulation') +%subplot(131),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust4D.([pln.propOpt.quantityOpt]),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('robust plan') +%subplot(132),matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust4D.('accPhysicalDose'),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels);title('robust plan dose accumulation') % create an interactive plot to slide through individual scnearios f = figure; title('individual scenarios'); numScen = 1; maxDose = max(max(resultGUIrobust.([pln.propOpt.quantityOpt '_scen' num2str(round(numScen))])(:,:,slice)))+0.2; doseIsoLevels = linspace(0.1 * maxDose,maxDose,10); -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.([pln.propOpt.quantityOpt '_scen' num2str(round(numScen))]),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUIrobust.([pln.propOpt.quantityOpt '_scen' num2str(round(numScen))]) ,'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 maxDose], 'doseIsoLevels', doseIsoLevels); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.([pln.propOpt.quantityOpt '_scen' num2str(round(numScen))]),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels); [env,envver] = matRad_getEnvironment(); if strcmp(env,'MATLAB') || str2double(envver(1)) >= 5 b = uicontrol('Parent',f,'Style','slider','Position',[50,5,419,23],... 'value',numScen, 'min',1, 'max',pln.multScen.totNumScen,'SliderStep', [1/(pln.multScen.totNumScen-1) , 1/(pln.multScen.totNumScen-1)]); - set(b,'Callback',@(es,ed) matRad_plotSliceWrapper(gca,ct,cst,round(get(es,'Value')),resultGUIrobust.([pln.propOpt.quantityOpt '_scen' num2str(round(get(es,'Value')))]),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels)); + set(b,'Callback',@(es,ed) matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', round(get(es,'Value')), 'dose', resultGUIrobust.([pln.propOpt.quantityOpt '_scen' num2str(round(get(es,'Value')))]) ,'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 maxDose], 'doseIsoLevels', doseIsoLevels)); + %matRad_plotSliceWrapper(gca,ct,cst,round(get(es,'Value')),resultGUIrobust.([pln.propOpt.quantityOpt '_scen' num2str(round(get(es,'Value')))]),plane,slice,[],[],colorcube,[],[0 maxDose],doseIsoLevels)); end %% Indicator calculation and show DVH and QI @@ -282,10 +290,12 @@ [cstStatRob, resultGUISampRob, metaRob] = matRad_samplingAnalysis(ct,cst,plnSampRob,caSampRob, mSampDoseRob, resultGUInomScen); figure,title('std dose cube based on sampling - conventional') -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUISamp.stdCube,plane,slice,[],[],colorcube,[],[0 max(resultGUISamp.stdCube(:))]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUISamp.stdCube ,'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 max(resultGUISamp.stdCube(:))]); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUISamp.stdCube,plane,slice,[],[],colorcube,[],[0 max(resultGUISamp.stdCube(:))]); figure,title('std dose cube based on sampling - robust') -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUISampRob.stdCube,plane,slice,[],[],colorcube,[],[0 max(resultGUISampRob.stdCube(:))]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUISampRob.stdCube ,'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 max(resultGUISampRob.stdCube(:))]); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUISampRob.stdCube,plane,slice,[],[],colorcube,[],[0 max(resultGUISampRob.stdCube(:))]); diff --git a/examples/matRad_example1_phantom.m b/examples/matRad_example1_phantom.m index 866e7ce10..2f16d265c 100644 --- a/examples/matRad_example1_phantom.m +++ b/examples/matRad_example1_phantom.m @@ -143,7 +143,8 @@ doseWindow = [0 max([resultGUI.physicalDose(:)])]; figure,title('phantom plan') -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.physicalDose,plane,slice,[],[],colorcube,[],doseWindow,[]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUI.physicalDose, 'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', doseWindow); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.physicalDose,plane,slice,[],[],colorcube,[],doseWindow,[]); %% % We export the the created phantom & dose as dicom. This is handled by the diff --git a/examples/matRad_example2_photons.m b/examples/matRad_example2_photons.m index e1b6536a4..7df0c7b73 100644 --- a/examples/matRad_example2_photons.m +++ b/examples/matRad_example2_photons.m @@ -198,9 +198,11 @@ doseWindow = [0 max([resultGUI.physicalDose(:); resultGUI_coarse.physicalDose(:)])]; figure,title('original plan - fine beam spacing') -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.physicalDose,plane,slice,[],0.75,colorcube,[],doseWindow,[]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUI.physicalDose, 'plane', plane, 'slice', slice, 'alpha', 0.75, 'contourColorMap', colorcube, 'doseWindow', doseWindow); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.physicalDose,plane,slice,[],0.75,colorcube,[],doseWindow,[]); figure,title('modified plan - coarse beam spacing') -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI_coarse.physicalDose,plane,slice,[],0.75,colorcube,[],doseWindow,[]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUI_coarse.physicalDose, 'plane', plane, 'slice', slice, 'alpha', 0.75, 'contourColorMap', colorcube, 'doseWindow', doseWindow); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI_coarse.physicalDose,plane,slice,[],0.75,colorcube,[],doseWindow,[]); %% % At this point we would like to see the absolute difference of the first @@ -208,7 +210,8 @@ % beam spacing) absDiffCube = resultGUI.physicalDose-resultGUI_coarse.physicalDose; figure,title( 'fine beam spacing plan - coarse beam spacing plan') -matRad_plotSliceWrapper(gca,ct,cst,1,absDiffCube,plane,slice,[],[],colorcube); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', absDiffCube, 'plane', plane, 'slice', slice, 'contourColorMap', colorcube); +%matRad_plotSliceWrapper(gca,ct,cst,1,absDiffCube,plane,slice,[],[],colorcube); %% Obtain dose statistics % Two more columns will be added to the cst structure depicting the DVH and diff --git a/examples/matRad_example5_protons.m b/examples/matRad_example5_protons.m index 82a7dfdde..b1be3bbcb 100644 --- a/examples/matRad_example5_protons.m +++ b/examples/matRad_example5_protons.m @@ -124,13 +124,16 @@ doseWindow = [0 max([resultGUI.RBExDose(:); resultGUI_isoShift.RBExDose(:)])]; figure,title('original plan') -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.RBExDose,plane,slice,[],0.75,colorcube,[],doseWindow,[]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUI.RBExDose, 'plane', plane, 'slice', slice, 'alpha', 0.75, 'contourColorMap', colorcube, 'doseWindow', doseWindow); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.RBExDose,plane,slice,[],0.75,colorcube,[],doseWindow,[]); figure,title('shifted plan') -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI_isoShift.RBExDose,plane,slice,[],0.75,colorcube,[],doseWindow,[]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUI_isoShift.RBExDose, 'plane', plane, 'slice', slice, 'alpha', 0.75, 'contourColorMap', colorcube, 'doseWindow', doseWindow); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI_isoShift.RBExDose,plane,slice,[],0.75,colorcube,[],doseWindow,[]); absDiffCube = resultGUI.RBExDose-resultGUI_isoShift.RBExDose; figure,title('absolute difference') -matRad_plotSliceWrapper(gca,ct,cst,1,absDiffCube,plane,slice,[],[],colorcube); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', absDiffCube, 'plane', plane, 'slice', slice, 'contourColorMap', colorcube); +%matRad_plotSliceWrapper(gca,ct,cst,1,absDiffCube,plane,slice,[],[],colorcube); % Let's plot single profiles that are perpendicular to the beam direction ixProfileY = matRad_world2cubeIndex(pln.propStf.isoCenter(1,:),ct); diff --git a/examples/matRad_example7_carbon.m b/examples/matRad_example7_carbon.m index dd7f80acd..d57cf9a93 100644 --- a/examples/matRad_example7_carbon.m +++ b/examples/matRad_example7_carbon.m @@ -165,17 +165,20 @@ doseWindow = [0 max([resultGUI_effect.RBExDose(:); resultGUI_tissue.RBExDose(:)])]; figure, -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI_effect.RBExDose,plane,slice,[],[],colorcube,[],doseWindow,[]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUI_effect.RBExDose, 'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', doseWindow); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI_effect.RBExDose,plane,slice,[],[],colorcube,[],doseWindow,[]); title('original plan') figure, -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI_tissue.RBExDose,plane,slice,[],[],colorcube,[],doseWindow,[]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUI_tissue.RBExDose, 'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', doseWindow); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI_tissue.RBExDose,plane,slice,[],[],colorcube,[],doseWindow,[]); title('manipulated plan') %% % At this point we would like to see the absolute difference of the original optimization and the % recalculation. absDiffCube = resultGUI_effect.RBExDose-resultGUI_tissue.RBExDose; figure, -matRad_plotSliceWrapper(gca,ct,cst,1,absDiffCube,plane,slice,[],[],colorcube); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', absDiffCube, 'plane', plane, 'slice', slice, 'contourColorMap', colorcube); +%matRad_plotSliceWrapper(gca,ct,cst,1,absDiffCube,plane,slice,[],[],colorcube); title('absolute difference') %% % Plot both doses with absolute difference and gamma analysis diff --git a/examples/matRad_example8_protonsRobust.m b/examples/matRad_example8_protonsRobust.m index 7c1fb0a64..9e7dee90b 100644 --- a/examples/matRad_example8_protonsRobust.m +++ b/examples/matRad_example8_protonsRobust.m @@ -125,19 +125,23 @@ slice = matRad_world2cubeIndex(pln.propStf.isoCenter(1,:),ct); slice = slice(3); -figure,matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.RBExDose_beam1 ,plane,slice,[],[],colorcube,[],[0 max(resultGUI.RBExDose_beam1(:))],[]);title('conventional plan - beam1') -figure,matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.RBExDose_beam1,plane,slice,[],[],colorcube,[],[0 max(resultGUIrobust.RBExDose_beam1(:))],[]);title('robust plan - beam1') +figure,matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUI.RBExDose_beam1, 'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 max(resultGUI.RBExDose_beam1(:))]);title('conventional plan - beam1') +figure,matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUIrobust.RBExDose_beam1, 'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 max(resultGUIrobust.RBExDose_beam1(:))]);title('robust plan - beam1') +%figure,matRad_plotSliceWrapper(gca,ct,cst,1,resultGUI.RBExDose_beam1 ,plane,slice,[],[],colorcube,[],[0 max(resultGUI.RBExDose_beam1(:))],[]);title('conventional plan - beam1') +%figure,matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.RBExDose_beam1,plane,slice,[],[],colorcube,[],[0 max(resultGUIrobust.RBExDose_beam1(:))],[]);title('robust plan - beam1') % create an interactive plot to slide through individual scnearios f = figure;title('individual scenarios'); numScen = 1;doseWindow = [0 3.5]; -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.(['RBExDose_scen' num2str(round(numScen))]),plane,slice,[],[],colorcube,[],doseWindow,[]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUIrobust.(['RBExDose_scen' num2str(round(numScen))]), 'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', doseWindow); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.(['RBExDose_scen' num2str(round(numScen))]),plane,slice,[],[],colorcube,[],doseWindow,[]); [env,envver] = matRad_getEnvironment(); if strcmp(env,'MATLAB') || str2double(envver(1)) >= 5 b = uicontrol('Parent',f,'Style','slider','Position',[50,5,419,23],... 'value',numScen, 'min',1, 'max',pln.multScen.totNumScen,'SliderStep', [1/(pln.multScen.totNumScen-1) , 1/(pln.multScen.totNumScen-1)]); - set(b,'Callback',@(es,ed) matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.(['RBExDose_scen' num2str(round(get(es,'Value')))]),plane,slice,[],[],colorcube,[],doseWindow,[])); + set(b,'Callback',@(es,ed) matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUIrobust.(['RBExDose_scen' num2str(round(get(es,'Value')))]), 'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', doseWindow)); + %matRad_plotSliceWrapper(gca,ct,cst,1,resultGUIrobust.(['RBExDose_scen' num2str(round(get(es,'Value')))]),plane,slice,[],[],colorcube,[],doseWindow,[])); end %% Indicator calculation and show DVH and QI @@ -152,8 +156,10 @@ [cstStatRob, resultGUISampRob, metaRob] = matRad_samplingAnalysis(ct,cst,plnSampRob,caSampRob, mSampDoseRob, resultGUInomScen); figure,title('std dose cube based on sampling - conventional') -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUISamp.stdCube,plane,slice,[],[],colorcube,[],[0 max(resultGUISamp.stdCube(:))]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUISamp.stdCube, 'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 max(resultGUISamp.stdCube(:))]); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUISamp.stdCube,plane,slice,[],[],colorcube,[],[0 max(resultGUISamp.stdCube(:))]); figure,title('std dose cube based on sampling - robust') -matRad_plotSliceWrapper(gca,ct,cst,1,resultGUISampRob.stdCube,plane,slice,[],[],colorcube,[],[0 max(resultGUISampRob.stdCube(:))]); +matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', resultGUISampRob.stdCube, 'plane', plane, 'slice', slice, 'contourColorMap', colorcube, 'doseWindow', [0 max(resultGUISampRob.stdCube(:))]); +%matRad_plotSliceWrapper(gca,ct,cst,1,resultGUISampRob.stdCube,plane,slice,[],[],colorcube,[],[0 max(resultGUISampRob.stdCube(:))]); diff --git a/matRad/planAnalysis/matRad_compareDose.m b/matRad/planAnalysis/matRad_compareDose.m index f03f63a8b..f79feb831 100644 --- a/matRad/planAnalysis/matRad_compareDose.m +++ b/matRad/planAnalysis/matRad_compareDose.m @@ -173,8 +173,9 @@ hfig.(planeName{plane}).('cube1').Ct,... hfig.(planeName{plane}).('cube1').Contour,... hfig.(planeName{plane}).('cube1').IsoDose] = ... - matRad_plotSliceWrapper(gca,ct,cstHandle,1,cube1,plane,sliceName{plane},[],[],colorcube,jet,doseWindow,[],100); - + matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cstHandle, 'cubeIdx', 1, 'dose', cube1, 'plane', plane, 'slice', sliceName{plane}, 'contourColorMap', colorcube, 'doseColorMap', jet, 'doseWindow', doseWindow, 'voiSelection', 100); + %matRad_plotSliceWrapper(gca,ct,cstHandle,1,cube1,plane,sliceName{plane},[],[],colorcube,jet,doseWindow,[],100); + % Plot Dose 2 hfig.(planeName{plane}).('cube2').Axes = subplot(2,2,2,colorSpec{:}); [hfig.(planeName{plane}).('cube2').CMap,... @@ -182,7 +183,8 @@ hfig.(planeName{plane}).('cube2').Ct,... hfig.(planeName{plane}).('cube2').Contour,... hfig.(planeName{plane}).('cube2').IsoDose] = ... - matRad_plotSliceWrapper(gca,ct,cstHandle,1,cube2,plane,sliceName{plane},[],[],colorcube,jet,doseWindow,[],100); + matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cstHandle, 'cubeIdx', 1, 'dose', cube2, 'plane', plane, 'slice', sliceName{plane}, 'contourColorMap', colorcube, 'doseColorMap', jet, 'doseWindow', doseWindow, 'voiSelection', 100); + %matRad_plotSliceWrapper(gca,ct,cstHandle,1,cube2,plane,sliceName{plane},[],[],colorcube,jet,doseWindow,[],100); % Plot absolute difference hfig.(planeName{plane}).('diff').Axes = subplot(2,2,3,colorSpec{:}); @@ -191,7 +193,8 @@ hfig.(planeName{plane}).('diff').Ct,... hfig.(planeName{plane}).('diff').Contour,... hfig.(planeName{plane}).('diff').IsoDose] = ... - matRad_plotSliceWrapper(gca,ct,cstHandle,1,differenceCube,plane,sliceName{plane},[],[],colorcube,diffCMap,doseDiffWindow,[],100); + matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cstHandle, 'cubeIdx', 1, 'dose', differenceCube, 'plane', plane, 'slice', sliceName{plane}, 'contourColorMap', colorcube, 'doseColorMap', diffCMap, 'doseWindow', doseDiffWindow, 'voiSelection', 100); + %matRad_plotSliceWrapper(gca,ct,cstHandle,1,differenceCube,plane,sliceName{plane},[],[],colorcube,diffCMap,doseDiffWindow,[],100); % Plot gamma analysis hfig.(planeName{plane}).('gamma').Axes = subplot(2,2,4,colorSpec{:}); @@ -201,7 +204,8 @@ hfig.(planeName{plane}).('gamma').Ct,... hfig.(planeName{plane}).('gamma').Contour,... hfig.(planeName{plane}).('gamma').IsoDose]=... - matRad_plotSliceWrapper(gca,ct,cstHandle,1,gammaCube,plane,sliceName{plane},[],[],colorcube,gammaCMap,doseGammaWindow,[],100); + matRad_plotSlice(ct, 'axesHandle', gca, 'cst', cstHandle, 'cubeIdx', 1, 'dose', gammaCube, 'plane', plane, 'slice', sliceName{plane}, 'contourColorMap', colorcube, 'doseColorMap', gammaCMap, 'doseWindow', doseGammaWindow, 'voiSelection', 100); + %matRad_plotSliceWrapper(gca,ct,cstHandle,1,gammaCube,plane,sliceName{plane},[],[],colorcube,gammaCMap,doseGammaWindow,[],100); % Adjusting axes matRad_plotAxisLabels(hfig.(planeName{plane}).('cube1').Axes,ct,plane,sliceName{plane},[],100); diff --git a/matRad/planAnalysis/samplingAnalysis/matRad_createAnimationForLatexReport.m b/matRad/planAnalysis/samplingAnalysis/matRad_createAnimationForLatexReport.m index 050b2632f..136ff19e0 100644 --- a/matRad/planAnalysis/samplingAnalysis/matRad_createAnimationForLatexReport.m +++ b/matRad/planAnalysis/samplingAnalysis/matRad_createAnimationForLatexReport.m @@ -103,7 +103,8 @@ function matRad_createAnimationForLatexReport(confidenceValue, ct, cst, slice, m for f=1:nFrames sampleCube = zeros(size(meanCube)); sampleCube(selectIx) = samples(:,f); - matRad_plotSliceWrapper(gca,ct,cst,1,sampleCube,3,slice,0,alpha,colorcube,jet,[0.01*dPres dPres*1.3],[0.1 0.25 0.6 0.9 0.95 1 1.05 1.25]'*dPres,[],legendColorbar,false);%,figXzoom,[figYzoom]); + matRad_plotSlice(ct,'axesHandle', gca, 'cst', cst, 'cubeIdx', 1, 'dose', sampleCube, 'plane', 3, 'slice', slice, 'thresh', 0, 'alpha', alpha, 'contourColorMap', colorcube, 'doseColorMap', jet, 'doseWindow', [0.01*dPres dPres*1.3], 'doseIsoLevels', [0.1 0.25 0.6 0.9 0.95 1 1.05 1.25]'*dPres, 'colorBarLabel', legendColorbar, 'boolPlotLegend', false); + %matRad_plotSliceWrapper(gca,ct,cst,1,sampleCube,3,slice,0,alpha,colorcube,jet,[0.01*dPres dPres*1.3],[0.1 0.25 0.6 0.9 0.95 1 1.05 1.25]'*dPres,[],legendColorbar,false);%,figXzoom,[figYzoom]); F(f) = getframe(gcf); im = frame2im(F(f)); [imind,cm] = rgb2ind(im,256); diff --git a/matRad/planAnalysis/samplingAnalysis/matRad_latexReport.m b/matRad/planAnalysis/samplingAnalysis/matRad_latexReport.m index a6bb26a73..21bde12ea 100644 --- a/matRad/planAnalysis/samplingAnalysis/matRad_latexReport.m +++ b/matRad/planAnalysis/samplingAnalysis/matRad_latexReport.m @@ -245,7 +245,8 @@ colorMapLabel = 'physical Dose [Gy]'; end fileSuffix = 'nominal'; - matRad_plotSliceWrapper(ax,ct,cst,1,doseCube,plane,slice,[],[],colors,[],[],[],[],colorMapLabel); + matRad_plotSlice(ct,'axesHandle', ax, 'cst', cst, 'cubeIdx', 1, 'dose', doseCube, 'plane', plane, 'slice', slice, 'contourColorMap', colors, 'colorBarLabel', colorMapLabel); + %matRad_plotSliceWrapper(ax,ct,cst,1,doseCube,plane,slice,[],[],colors,[],[],[],[],colorMapLabel); elseif cubesToPlot == 2 @@ -253,7 +254,8 @@ colorMapLabel = 'gamma index'; fileSuffix = 'gamma'; gammaColormap = matRad_getColormap('gammaIndex'); - matRad_plotSliceWrapper(ax,ct,cst,1,doseCube,plane,slice,[],[],colors,gammaColormap,[0 2],[],[],colorMapLabel); + matRad_plotSlice(ct,'axesHandle', ax, 'cst', cst, 'cubeIdx', 1, 'dose', doseCube, 'plane', plane, 'slice', slice, 'contourColorMap', colors, 'doseColorMap', gammaColormap, 'doseWindow', [0 2], 'colorBarLabel', colorMapLabel); + %matRad_plotSliceWrapper(ax,ct,cst,1,doseCube,plane,slice,[],[],colors,gammaColormap,[0 2],[],[],colorMapLabel); elseif cubesToPlot == 3 @@ -264,7 +266,8 @@ end doseCube = doseStat.stdCubeW; fileSuffix = 'stdW'; - matRad_plotSliceWrapper(ax,ct,cst,1,doseCube,plane,slice,[],[],colors,[],[],[],[],colorMapLabel); + matRad_plotSlice(ct,'axesHandle', ax, 'cst', cst, 'cubeIdx', 1, 'dose', doseCube, 'plane', plane, 'slice', slice, 'contourColorMap', colors, 'colorBarLabel', colorMapLabel); + %matRad_plotSliceWrapper(ax,ct,cst,1,doseCube,plane,slice,[],[],colors,[],[],[],[],colorMapLabel); end drawnow(); diff --git a/matRad/plotting/matRad_plotIsoDoseLines.m b/matRad/plotting/matRad_plotIsoDoseLines.m index 195ffb8ae..bbeb32278 100644 --- a/matRad/plotting/matRad_plotIsoDoseLines.m +++ b/matRad/plotting/matRad_plotIsoDoseLines.m @@ -58,11 +58,11 @@ %fly if isempty(isoContours) if plane == 1 - C = contourc(doseCube(slice,:,:),isoLevels); + C = contourc(squeeze(doseCube(slice,:,:)),isoLevels); elseif plane == 2 - C = contourc(doseCube(:,slice,:),isoLevels); + C = contourc(squeeze(doseCube(:,slice,:)),isoLevels); elseif plane == 3 - C = contourc(doseCube(:,:,slice),isoLevels); + C = contourc(squeeze(doseCube(:,:,slice)),isoLevels); end isoContours{slice,plane} = C; end diff --git a/matRad/util/matRad_plotSlice.m b/matRad/util/matRad_plotSlice.m new file mode 100644 index 000000000..8e328d59d --- /dev/null +++ b/matRad/util/matRad_plotSlice.m @@ -0,0 +1,226 @@ +function [hCMap,hDose,hCt,hContour,hIsoDose] = matRad_plotSlice(ct, varargin) +% matRad tool function to directly plot a complete slice of a ct with dose +% optionally including contours and isolines +% +% call +% [] = matRad_plotSlice(ct, dose, varargin) +% +% input (required) +% ct matRad ct struct +% +% input (optional/empty) to be called as Name-value pair arguments: +% dose dose cube +% axesHandle handle to axes the slice should be displayed in +% cst matRad cst struct +% cubeIdx Index of the desired cube in the ct struct +% plane plane view (coronal=1,sagittal=2,axial=3) +% slice slice in the selected plane of the 3D cube +% thresh threshold for display of dose values +% alpha alpha value for the dose overlay +% contourColorMap colormap for the VOI contours +% doseColorMap colormap for the dose +% doseWindow dose value window +% doseIsoLevels levels defining the isodose contours +% voiSelection logicals defining the current selection of contours +% that should be plotted. Can be set to [] to plot +% all non-ignored contours. +% colorBarLabel string defining the yLabel of the colorBar +% boolPlotLegend boolean if legend should be plottet or not +% showCt boolean if CT slice should be displayed or not +% varargin Additional MATLAB Line or Text Properties (e.g. 'LineWidth', 'FontSize', etc.) +% +% References +% - +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Copyright 2025 the matRad development team. +% +% This file is part of the matRad project. It is subject to the license +% terms in the LICENSE file found in the top-level directory of this +% distribution and at https://github.com/e0404/matRad/LICENSE.md. No part +% of the matRad project, including this file, may be copied, modified, +% propagated, or distributed except according to the terms contained in the +% LICENSE file. +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +defaultDose = []; +defaultCst = []; +defaultSlice = floor(min(ct.cubeDim)./2); +defaultAxesHandle = gca; +defaultCubeIdx = 1; +defaultPlane = 1; +defaultDoseWindow = []; +defaultThresh = []; +defaultAlpha = []; +defaultDoseColorMap = jet; +defaultDoseIsoLevels = []; +defaultVOIselection = []; +defaultContourColorMap = []; +defaultBoolPlotLegend = false; +defaultColorBarLabel = []; +defaultShowCt = true; + +isDose = @(x) isnumeric(x) && all(size(x) == ct.cubeDim); +isSlice = @(x) x>=1 && x<=max(ct.cubeDim) && floor(x)==x; +isAxes = @(x) strcmp(get(gca, 'type'), 'axes'); +isCubeIdx = @(x) isscalar(x); +isPlane = @(x) isscalar(x) && (sum(x==[1, 2, 3])==1); +isDoseWindow = @(x) (length(x) == 2 && isvector(x)); +isThresh = @(x) (isscalar(x) && (x>=0) && (x<=1)) || isempty(x); +isAlpha = @(x) isscalar(x) && (x>=0) && (x<=1) || isempty(x); +isDoseColorMap = @(x) isnumeric(x) && (size(x, 2)==3) && all(x(:) >= 0) && all(x(:) <= 1); +isDoseIsoLevels = @(x) isnumeric(x) && isvector(x)|| isempty(x); +isVOIselection = @(x) isnumeric(x) || isempty(x); %all(x(:)==1 | x(:)==0) || isempty(x); +isContourColorMap = @(x) isnumeric(x) && (size(x, 2)==3) && size(x, 1)>=2 && all(x(:) >= 0) && all(x(:) <= 1); +isBoolPlotLegend = @(x) x==0 || x ==1; +isColorBarLabel = @(x) isstring(x) || ischar(x) || isempty(x); +isShowCt = @(x) isscalar(x) && (x==0) || (x==1); + +p = inputParser; +p.KeepUnmatched = true; +addRequired(p, 'ct') + +addParameter(p, 'dose', defaultDose, isDose) +addParameter(p, 'cst', defaultCst) +addParameter(p, 'slice', defaultSlice, isSlice) +addParameter(p, 'axesHandle', defaultAxesHandle, isAxes) +addParameter(p, 'cubeIdx', defaultCubeIdx, isCubeIdx) +addParameter(p, 'plane', defaultPlane, isPlane) +addParameter(p, 'doseWindow', defaultDoseWindow, isDoseWindow) +addParameter(p, 'thresh', defaultThresh, isThresh) +addParameter(p, 'alpha', defaultAlpha, isAlpha) +addParameter(p, 'doseColorMap', defaultDoseColorMap, isDoseColorMap) +addParameter(p, 'doseIsoLevels', defaultDoseIsoLevels, isDoseIsoLevels) +addParameter(p, 'voiSelection', defaultVOIselection, isVOIselection) +addParameter(p, 'contourColorMap', defaultContourColorMap, isContourColorMap) +addParameter(p, 'boolPlotLegend', defaultBoolPlotLegend, isBoolPlotLegend) +addParameter(p, 'colorBarLabel', defaultColorBarLabel, isColorBarLabel) +addParameter(p, 'showCt', defaultShowCt, isShowCt) + +parse(p, ct, varargin{:}); + +%% Unmatched properties +% General properties +lineFieldNames = fieldnames(set(line)); +textFieldNames = fieldnames(set(text)); +% Filter line properties from Unmatched +unmParamNames = fieldnames(p.Unmatched); +lineFields = unmParamNames(ismember(unmParamNames, lineFieldNames)); +lineValues = struct2cell(p.Unmatched); +lineValues = lineValues(ismember(unmParamNames, lineFieldNames)); +lineVarargin = reshape([lineFields, lineValues]', 1, []); +% Filter text properties from Unmatched +textFields = unmParamNames(ismember(unmParamNames, textFieldNames)); +textValues = struct2cell(p.Unmatched); +textValues = textValues(ismember(unmParamNames, textFieldNames)); +textVarargin = reshape([textFields, textValues]', 1, []); + +%% Plot ct slice +matRad_cfg = MatRad_Config.instance(); + +% Flip axes direction +set(p.Results.axesHandle,'YDir','Reverse'); +% plot ct slice +if p.Results.showCt + hCt = matRad_plotCtSlice(p.Results.axesHandle,p.Results.ct.cubeHU,p.Results.cubeIdx,p.Results.plane,p.Results.slice, [], []); +end +hold on; + +%% Plot dose +if ~isempty(p.Results.dose) + doseWindow = [min(p.Results.dose(:)) max(p.Results.dose(:))]; + if ~isempty(p.Results.doseWindow) && p.Results.doseWindow(2) - p.Results.doseWindow(1) <= 0 + doseWindow = p.Results.doseWindow; + end + [hDose,doseColorMap,doseWindow] = matRad_plotDoseSlice(p.Results.axesHandle, p.Results.dose, p.Results.plane, p.Results.slice, p.Results.thresh, p.Results.alpha, p.Results.doseColorMap, doseWindow); + hold on; + + %% Plot iso dose lines + hIsoDose = []; + if ~isempty(p.Results.doseIsoLevels) + hIsoDose = matRad_plotIsoDoseLines(p.Results.axesHandle,p.Results.dose,[],p.Results.doseIsoLevels,false,p.Results.plane,p.Results.slice,p.Results.doseColorMap,p.Results.doseWindow, lineVarargin{:}); + end + + %% Set Colorbar + hCMap = matRad_plotColorbar(p.Results.axesHandle,doseColorMap,doseWindow,'Location','EastOutside'); + set(hCMap,'Color',matRad_cfg.gui.textColor); + if ~isempty(p.Results.colorBarLabel) + set(get(hCMap,'YLabel'),'String', p.Results.colorBarLabel,'FontSize',matRad_cfg.gui.fontSize); + end + set(get(hCMap,'YLabel'),'String', p.Results.colorBarLabel, textVarargin{:}); +end +%% Plot VOI contours & Legend + +if ~isempty(p.Results.cst) + [hContour,~] = matRad_plotVoiContourSlice(p.Results.axesHandle, p.Results.cst, p.Results.ct, p.Results.cubeIdx, p.Results.voiSelection, p.Results.plane, p.Results.slice, p.Results.contourColorMap, lineVarargin{:}); + + if p.Results.boolPlotLegend + visibleOnSlice = (~cellfun(@isempty,hContour)); + hContourTmp = cellfun(@(X) X(1),hContour(visibleOnSlice),'UniformOutput',false); + voiSelection = visibleOnSlice; + if ~isempty(p.Results.voiSelection) + voiSelection = visibleOnSlice(find(p.Results.voiSelection)); + end + hLegend = legend(p.Results.axesHandle,[hContourTmp{:}],[p.Results.cst(voiSelection,2)],'AutoUpdate','off','TextColor',matRad_cfg.gui.textColor); + set(hLegend,'Box','On'); + set(hLegend,'TextColor',matRad_cfg.gui.textColor); + if ~isempty(textVarargin) + set(hLegend, textVarargin{:}); + else + set(hLegend,'FontSize',matRad_cfg.gui.fontSize); + end + end +else + hContour = []; +end + +%% Adjust axes +axis(p.Results.axesHandle,'tight'); +set(p.Results.axesHandle,'xtick',[],'ytick',[]); +colormap(p.Results.axesHandle,p.Results.doseColorMap); +fontSize = []; +if isfield(p.Unmatched, 'FontSize') + fontSize = p.Unmatched.FontSize; +end +matRad_plotAxisLabels(p.Results.axesHandle,p.Results.ct,p.Results.plane,p.Results.slice, fontSize, []) + +% Set axis ratio. +ratios = [1/p.Results.ct.resolution.x 1/p.Results.ct.resolution.y 1/p.Results.ct.resolution.z]; + +set(p.Results.axesHandle,'DataAspectRatioMode','manual'); +if p.Results.plane == 1 + res = [ratios(3) ratios(2)]./max([ratios(3) ratios(2)]); + set(p.Results.axesHandle,'DataAspectRatio',[res 1]) +elseif p.Results.plane == 2 % sagittal plane + res = [ratios(3) ratios(1)]./max([ratios(3) ratios(1)]); + set(p.Results.axesHandle,'DataAspectRatio',[res 1]) +elseif p.Results.plane == 3 % Axial plane + res = [ratios(2) ratios(1)]./max([ratios(2) ratios(1)]); + set(p.Results.axesHandle,'DataAspectRatio',[res 1]) +end + +%% Set text properties +if ~isempty(textVarargin) + set(p.Results.axesHandle, textVarargin{:}) + set(p.Results.axesHandle.Title, textVarargin{:}) +end + +if ~exist('hCMap', 'var') + hCMap = []; +end +if ~exist('hDose', 'var') + hDose = []; +end +if ~exist('hCt', 'var') + hCt = []; +end +if ~exist('hContour', 'var') + hContour = []; +end +if ~exist('hIsoDose', 'var') + hIsoDose = []; +end + +end \ No newline at end of file diff --git a/matRad/util/matRad_plotSliceWrapper.m b/matRad/util/matRad_plotSliceWrapper.m index bcc7d9436..4e73d3796 100644 --- a/matRad/util/matRad_plotSliceWrapper.m +++ b/matRad/util/matRad_plotSliceWrapper.m @@ -101,76 +101,9 @@ matRad_cfg = MatRad_Config.instance(); -set(axesHandle,'YDir','Reverse'); -% plot ct slice -hCt = matRad_plotCtSlice(axesHandle,ct.cubeHU,cubeIdx,plane,slice); -hold on; +matRad_cfg.dispDeprecationWarning('Deprecation warning: matRad_plotSliceWrapper is deprecated. Using matRad_plot_Slice instead'); -% plot dose -if ~isempty(doseWindow) && doseWindow(2) - doseWindow(1) <= 0 - doseWindow = [0 2]; -end - -[hDose,doseColorMap,doseWindow] = matRad_plotDoseSlice(axesHandle,dose,plane,slice,thresh,alpha,doseColorMap,doseWindow); - -% plot iso dose lines -if ~isempty(doseIsoLevels) - hIsoDose = matRad_plotIsoDoseLines(axesHandle,dose,[],doseIsoLevels,false,plane,slice,doseColorMap,doseWindow,varargin{:}); - hold on; -else - hIsoDose = []; -end - -%plot VOI contours -if ~isempty(cst) - - [hContour,~] = matRad_plotVoiContourSlice(axesHandle,cst,ct,cubeIdx,voiSelection,plane,slice,contourColorMap,varargin{:}); - -if boolPlotLegend - visibleOnSlice = (~cellfun(@isempty,hContour)); - ixLegend = find(voiSelection); - hContourTmp = cellfun(@(X) X(1),hContour(visibleOnSlice),'UniformOutput',false); - if ~isempty(voiSelection) - hLegend = legend(axesHandle,[hContourTmp{:}],[cst(ixLegend(visibleOnSlice),2)],'AutoUpdate','off','TextColor',matRad_cfg.gui.textColor); - else - hLegend = legend(axesHandle,[hContourTmp{:}],[cst(visibleOnSlice,2)],'AutoUpdate','off','TextColor',matRad_cfg.gui.textColor); - end - set(hLegend,'Box','Off'); - set(hLegend,'TextColor',matRad_cfg.gui.textColor); - set(hLegend,'FontSize',matRad_cfg.gui.fontSize); - -end -else - hContour = []; -end - -axis(axesHandle,'tight'); -set(axesHandle,'xtick',[],'ytick',[]); -colormap(axesHandle,doseColorMap); - -matRad_plotAxisLabels(axesHandle,ct,plane,slice,[]) - -% set axis ratio - -ratios = [1/ct.resolution.x 1/ct.resolution.y 1/ct.resolution.z]; - -set(axesHandle,'DataAspectRatioMode','manual'); -if plane == 1 - res = [ratios(3) ratios(2)]./max([ratios(3) ratios(2)]); - set(axesHandle,'DataAspectRatio',[res 1]) -elseif plane == 2 % sagittal plane - res = [ratios(3) ratios(1)]./max([ratios(3) ratios(1)]); - set(axesHandle,'DataAspectRatio',[res 1]) -elseif plane == 3 % Axial plane - res = [ratios(2) ratios(1)]./max([ratios(2) ratios(1)]); - set(axesHandle,'DataAspectRatio',[res 1]) -end - -hCMap = matRad_plotColorbar(axesHandle,doseColorMap,doseWindow,'Location','EastOutside'); -set(hCMap,'Color',matRad_cfg.gui.textColor); -if ~isempty(colorBarLabel) - set(get(hCMap,'YLabel'),'String', colorBarLabel,'FontSize',matRad_cfg.gui.fontSize); -end +[hCMap,hDose,hCt,hContour,hIsoDose] = matRad_plotSlice(ct, 'axesHandle', axesHandle, 'cst', cst, 'cubeIdx', cubeIdx, 'dose', dose, 'plane', plane, 'slice', slice,'thresh', thresh, 'alpha', alpha, 'contourColorMap', contourColorMap, 'doseColorMap', doseColorMap, 'doseWindow', doseWindow, 'doseIsoLevels', doseIsoLevels, 'voiSelection', voiSelection, 'colorBarLabel', colorBarLabel, 'boolPlotLegend', boolPlotLegend, 'others', varargin); end diff --git a/test/util/test_plotSlice.m b/test/util/test_plotSlice.m new file mode 100644 index 000000000..50e6b66be --- /dev/null +++ b/test/util/test_plotSlice.m @@ -0,0 +1,106 @@ +function test_suite = test_plotSlice + +test_functions=localfunctions(); + +initTestSuite; + +function test_plot_ct_only + + load BOXPHANTOM.mat + figure() + [hCMap,hDose,hCt,hContour,hIsoDose] = matRad_plotSlice(ct); + assertTrue(isempty(hCMap)); + assertTrue(isempty(hDose)); + assertFalse(isempty(hCt)); + if ~moxunit_util_platform_is_octave + assertTrue(isa(hCt, 'matlab.graphics.primitive.Image')) + end + assertTrue(isempty(hContour)); + assertTrue(isempty(hIsoDose)); + + load PROSTATE.mat + figure() + [hCMap,hDose,hCt,hContour,hIsoDose] = matRad_plotSlice(ct, 'slice', 91, 'cst', cst); + assertTrue(isempty(hCMap)); + assertTrue(isempty(hDose)); + assertFalse(isempty(hCt)); + if ~moxunit_util_platform_is_octave + assertTrue(isa(hCt, 'matlab.graphics.primitive.Image')) + end + assertTrue(isa(hContour, 'cell')); + assertTrue(isempty(hIsoDose)); + + +function test_plot_dose_slice + + load protons_testData.mat + figure(); + [hCMap,hDose,hCt,hContour,hIsoDose] = matRad_plotSlice(ct, 'dose', resultGUI.physicalDose); + assertFalse(isempty(hCt)); + assertTrue(isempty(hContour)); + assertTrue(isempty(hIsoDose)); + if ~moxunit_util_platform_is_octave + assertTrue(isa(hCMap, 'matlab.graphics.illustration.ColorBar')); + assertTrue(isa(hDose, 'matlab.graphics.primitive.Image')); + assertTrue(isa(hCt, 'matlab.graphics.primitive.Image')) + end + + load helium_testData.mat + figure(); + [hCMap,hDose,hCt,hContour,hIsoDose] = matRad_plotSlice(ct, 'dose', resultGUI.physicalDose); + assertFalse(isempty(hCt)); + assertTrue(isempty(hContour)); + assertTrue(isempty(hIsoDose)); + if ~moxunit_util_platform_is_octave + assertTrue(isa(hCMap, 'matlab.graphics.illustration.ColorBar')); + assertTrue(isa(hDose, 'matlab.graphics.primitive.Image')); + assertTrue(isa(hCt, 'matlab.graphics.primitive.Image')) + end + + load carbon_testData.mat + figure(); + [hCMap,hDose,hCt,hContour,hIsoDose] = matRad_plotSlice(ct, 'dose', resultGUI.physicalDose); + assertFalse(isempty(hCt)); + assertTrue(isempty(hContour)); + assertTrue(isempty(hIsoDose)); + if ~moxunit_util_platform_is_octave + assertTrue(isa(hCMap, 'matlab.graphics.illustration.ColorBar')); + assertTrue(isa(hDose, 'matlab.graphics.primitive.Image')); + assertTrue(isa(hCt, 'matlab.graphics.primitive.Image')) + end + + load photons_testData.mat + figure(); + [hCMap,hDose,hCt,hContour,hIsoDose] = matRad_plotSlice(ct, 'dose', resultGUI.physicalDose, 'plane', 3); + assertFalse(isempty(hCt)); + assertTrue(isempty(hContour)); + assertTrue(isempty(hIsoDose)); + if ~moxunit_util_platform_is_octave + assertTrue(isa(hCMap, 'matlab.graphics.illustration.ColorBar')); + assertTrue(isa(hDose, 'matlab.graphics.primitive.Image')); + assertTrue(isa(hCt, 'matlab.graphics.primitive.Image')) + end + +function test_optional_input + + load photons_testData.mat + figure(); + doseCube = resultGUI.physicalDose; + boolVOIselection = ones(1, size(cst, 1)); + [hCMap,hDose,hCt,hContour,hIsoDose] = matRad_plotSlice(ct, ... + 'dose', doseCube, 'axesHandle', gca, ... + 'cst', cst, 'cubeIdx', 1, 'plane', 3, 'slice', 5, ... + 'thresh', 0.1*max(doseCube(:)), 'alpha', 0.8, ... + 'contourColorMap', white, 'doseColorMap', jet, ... + 'doseWindow', [min(doseCube(:)) 1.1*max(doseCube(:))], ... + 'doseIsoLevels', max(doseCube(:)).*[0.5, 0.6, 0.7, 0.8, 0.9, 0.92, 0.95, 0.97, 0.99], ... + 'voiSelection', boolVOIselection, ... + 'colorBarLabel', 'Absorbed Dose [Gy]', ... + 'boolPlotLegend', 1, 'showCt', 0, 'FontSize', 13); + + assertTrue(isempty(hCt)); + assertTrue(isa(hContour, "cell")); + assertTrue(isa(hIsoDose, "cell")); + if ~moxunit_util_platform_is_octave + assertTrue(isa(hDose, 'matlab.graphics.primitive.Image')); + end