Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
* ``un`` draws the HU uniformity image.
* ``sp`` draws the Spatial Resolution image.
* ``mtf`` draws the RMTF plot.
* ``lin`` draws the HU linearity values. Used with ``delta``.
* ``prof`` draws the HU uniformity profiles.
delta : bool
Only for use with ``lin``. Whether to plot the HU delta or actual values.
show : bool
Whether to actually show the plot.
"""
subimage = subimage.lower()
plt.clf()
plt.axis('off')
if 'hu' in subimage: # HU, GEO & thickness objects
plt.imshow(self.ctp404.image.array, cmap=get_dicom_cmap())
self.ctp404.plot_rois(plt.gca())
plt.autoscale(tight=True)
elif 'un' in subimage: # uniformity
plt.imshow(self.ctp486.image.array, cmap=get_dicom_cmap())
self.ctp486.plot_rois(plt.gca())
plt.autoscale(tight=True)
elif 'sp' in subimage: # SR objects
plt.imshow(self.ctp528.image.array, cmap=get_dicom_cmap())
self.ctp528.plot_rois(plt.gca())
plt.autoscale(tight=True)
elif 'mtf' in subimage:
plt.axis('on')
self.ctp528.plot_mtf(plt.gca())
elif 'lc' in subimage:
plt.imshow(self.ctp515.image.array, cmap=get_dicom_cmap())
self.ctp515.plot_rois(plt.gca())
show : bool
Whether to actually plot the image.
ax : matplotlib Axes, None
If None (default), creates a new figure to plot to, otherwise plots to the given axes.
"""
plt.ioff()
if ax is None:
fig, ax = plt.subplots()
# plot DMLC or OPEN image
if subimage in (DMLC, OPEN):
if subimage == DMLC:
img = self.dmlc_image
elif subimage == OPEN:
img = self.open_image
ax.imshow(img, cmap=get_dicom_cmap())
self._draw_segments(ax)
plt.sca(ax)
plt.axis('off')
plt.tight_layout()
# plot profile
elif subimage == PROFILE:
dmlc_prof, open_prof = self._median_profiles((self.dmlc_image, self.open_image))
ax.plot(dmlc_prof.values, label='DMLC')
ax.plot(open_prof.values, label='Open')
ax.autoscale(axis='x', tight=True)
ax.legend(loc=8, fontsize='large')
ax.grid()
if show:
plt.show()
def plot(ctp_module, axis):
axis.imshow(ctp_module.image.array, cmap=get_dicom_cmap())
ctp_module.plot_rois(axis)
axis.autoscale(tight=True)
axis.set_title(ctp_module.common_name)
axis.axis('off')
def _plot_image(self, axis: plt.Axes=None, title: str=''):
plt.ioff()
if axis is None:
fig, axis = plt.subplots()
axis.imshow(self.image.array, cmap=get_dicom_cmap())
# show vertical/axial profiles
left_profile = self.positions['vertical left']
right_profile = self.positions['vertical right']
axis.axvline(left_profile, color='b')
axis.axvline(right_profile, color='b')
# show horizontal/transverse profiles
bottom_profile = self.positions['horizontal bottom']
top_profile = self.positions['horizontal top']
axis.axhline(bottom_profile, color='b')
axis.axhline(top_profile, color='b')
_remove_ticklabels(axis)
axis.set_title(title)
guard_rails : bool
Do/don't plot the picket "guard rails" around the ideal picket
mlc_peaks : bool
Do/don't plot the MLC positions.
overlay : bool
Do/don't plot the alpha overlay of the leaf status.
leaf_error_subplot : bool
.. versionadded:: 1.0
If True, plots a linked leaf error subplot adjacent to the PF image plotting the average and standard
deviation of leaf error.
"""
# plot the image
fig, ax = plt.subplots(figsize=self.settings.figure_size)
ax.imshow(self.image.array, cmap=get_dicom_cmap())
# generate a leaf error subplot if desired
if leaf_error_subplot:
self._add_leaf_error_subplot(ax)
# plot guard rails and mlc peaks as desired
for p_num, picket in enumerate(self.pickets):
if guard_rails:
picket.add_guards_to_axes(ax.axes)
if mlc_peaks:
for idx, mlc_meas in enumerate(picket.mlc_meas):
mlc_meas.plot2axes(ax.axes, width=1.5)
# plot the overlay if desired.
if overlay:
o = Overlay(self.image, self.settings, self.pickets)
def plot_analyzed_subimage(self, subimage: str='wobble', ax: plt.Axes=None, show: bool=True):
"""Plot a subimage of the starshot analysis. Current options are the zoomed out image and the zoomed in image.
Parameters
----------
subimage : str
If 'wobble', will show a zoomed in plot of the wobble circle.
Any other string will show the zoomed out plot.
ax : None, matplotlib Axes
If None (default), will create a new figure to plot on, otherwise plot to the passed axes.
"""
if ax is None:
fig, ax = plt.subplots()
# show analyzed image
ax.imshow(self.image.array, cmap=get_dicom_cmap())
self.lines.plot(ax)
self.wobble.plot2axes(ax, edgecolor='green')
self.circle_profile.plot2axes(ax, edgecolor='green')
ax.autoscale(tight=True)
ax.axis('off')
# zoom in if wobble plot
if subimage == 'wobble':
xlims = [self.wobble.center.x + self.wobble.diameter, self.wobble.center.x - self.wobble.diameter]
ylims = [self.wobble.center.y + self.wobble.diameter, self.wobble.center.y - self.wobble.diameter]
ax.set_xlim(xlims)
ax.set_ylim(ylims)
ax.axis('on')
if show:
plt.show()