Skip to content

Commit

Permalink
Closes #181. Touches #175. Changed PDF tag to add analysis date.
Browse files Browse the repository at this point in the history
  • Loading branch information
jrkerns committed Mar 28, 2019
1 parent 297807f commit f5268d1
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 18 deletions.
26 changes: 13 additions & 13 deletions pylinac/core/pdf.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,32 @@
from reportlab.lib.utils import ImageReader

from .. import __version__
from .io import retrieve_demo_file


class PylinacCanvas:

def __init__(self, filename: str, page_title: str, font: str="Helvetica", metadata: dict=None):
def __init__(self, filename: str, page_title: str, font: str="Helvetica", metadata: dict=None, metadata_location: tuple=(2, 25.5)):
self.canvas = Canvas(filename, pagesize=A4)
self._font = font
self._title = page_title
self._metadata = metadata
self._metadata_location = metadata_location
self._generate_pylinac_template_theme()
self._add_metadata(metadata)
self._add_metadata()

def add_new_page(self, metadata: dict=None):
def add_new_page(self):
self.canvas.showPage()
self._generate_pylinac_template_theme()
self._add_metadata(metadata)
self._add_metadata()

def _add_metadata(self, metadata: dict=None):
if metadata is None:
def _add_metadata(self):
if self._metadata is None:
return
else:
text = ['Metadata:']
for key, value in metadata.items():
for key, value in self._metadata.items():
text.append(f"{key}: {value}")
date = datetime.now().strftime("%A, %B %d, %Y")
text.append(f'Analyzed on: {date}')
self.add_text(text=text, location=(2, 25.5))
self.add_text(text=text, location=self._metadata_location)

def _generate_pylinac_template_theme(self):
# draw logo and header separation line
Expand All @@ -46,8 +45,9 @@ def _generate_pylinac_template_theme(self):
self.canvas.line(1 * cm, 26.5 * cm, 20 * cm, 26.5 * cm)
# draw title
self.add_text(text=self._title, location=(7, 28.5), font_size=24)
# draw "generated by" tag
self.add_text(f"Generated with Pylinac version {__version__}", location=(0.5, 0.5), font_size=8)
# draw "generated by pylinac" tag
date = datetime.now().strftime("%B %d, %Y at %H:%M")
self.add_text(f"Generated with Pylinac v{__version__} on {date}", location=(0.5, 0.5), font_size=8)

def add_text(self, text: Union[str, List[str]], location: Sequence, font_size: int=10):
"""Generic text drawing function.
Expand Down
36 changes: 31 additions & 5 deletions pylinac/flatsym.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,38 @@ def results(self, as_str=True) -> Union[str, list]:
"""
if not self._is_analyzed:
raise NotAnalyzed("Image is not analyzed yet. Use analyze() first.")
# do some calculations
horiz_penum = self.symmetry['horizontal']['profile'].penumbra_width() / self.dpmm
vert_penum = self.symmetry['vertical']['profile'].penumbra_width() / self.dpmm
horiz_width = self.symmetry['horizontal']['profile'].fwxm() / self.dpmm
vert_width = self.symmetry['vertical']['profile'].fwxm() / self.dpmm
upper_dist = abs(self.symmetry['vertical']['profile']._penumbra_point('left') - self.center.y) / self.dpmm
lower_dist = abs(self.symmetry['vertical']['profile']._penumbra_point('right') - self.center.y) / self.dpmm
left_dist = abs(self.symmetry['horizontal']['profile']._penumbra_point('left') - self.center.x) / self.dpmm
right_dist = abs(self.symmetry['horizontal']['profile']._penumbra_point('right') - self.center.x) / self.dpmm
results = [f'Flatness & Symmetry',
f'File: {self.truncated_path}',
"",
f'Flatness method: {self.flatness["method"].capitalize()}',
f"Vertical flatness: {self.flatness['vertical']['value']:3.3}%",
f"Horizontal flatness: {self.flatness['horizontal']['value']:3.3}%",
f'Symmetry method: {self.symmetry["method"].capitalize()}',
f"Vertical symmetry: {self.symmetry['vertical']['value']:3.3}%",
f"Horizontal symmetry: {self.symmetry['horizontal']['value']:3.3}%"
f"Horizontal symmetry: {self.symmetry['horizontal']['value']:3.3}%",
"",
"Penumbra (80/20):",
f"Horizontal: {horiz_penum:3.1f}mm",
f"Vertical: {vert_penum:3.1f}mm",
"",
"Field Size:",
f'Horizontal: {horiz_width:3.1f}mm',
f"Vertical: {vert_width:3.1f}mm",
"",
"CAX to edge distances:",
f"CAX -> Upper edge: {upper_dist:3.1f}mm",
f"CAX -> Lower edge: {lower_dist:3.1f}mm",
f"CAX -> Left edge: {left_dist:3.1f}mm",
f"CAX -> Right edge: {right_dist:3.1f}mm",
]
if as_str:
results = '\n'.join(result for result in results)
Expand Down Expand Up @@ -224,16 +248,18 @@ def publish_pdf(self, filename: str, notes: Union[str, list]=None, open_file: bo
"""
if not self._is_analyzed:
raise NotAnalyzed("Image is not analyzed yet. Use analyze() first.")
canvas = pdf.PylinacCanvas(filename, page_title="Flatness & Symmetry Analysis", metadata=metadata)
canvas = pdf.PylinacCanvas(filename, page_title="Flatness & Symmetry Analysis",
metadata=metadata, metadata_location=(2, 5))
# draw result text
text = self.results(as_str=False)
canvas.add_text(text=text, location=(3, 25.5), font_size=12)
canvas.add_text(text=text, location=(2, 25.5), font_size=14)
canvas.add_new_page()
# draw flatness & symmetry on two pages
for method in (self._plot_symmetry, self._plot_flatness):
for height, direction in zip((1, 11.5), ('vertical', 'horizontal')):
for height, direction in zip((1, 12.5), ('vertical', 'horizontal')):
data = io.BytesIO()
self._save_plot(method, data, direction=direction)
canvas.add_image(data, location=(1, height), dimensions=(19, 10))
canvas.add_image(data, location=(-4, height), dimensions=(28, 12))
canvas.add_new_page()
# draw image on last page
data = io.BytesIO()
Expand Down

0 comments on commit f5268d1

Please sign in to comment.