Pylinac のドキュメントを読んで(実践2例)
URL
https://pylinac.readthedocs.io/en/release-3.0/
読んでみたきっかけ
去年、WEBセミナーにて開催された ”実践的放射線治療人材育成セミナー” で、ちょこっとpylinacの話を聞いたような気がします。それで、Githubにてpylinac を見つけました。ドキュメントの最初の1行から「Pylinac は、Python プログラマーに TG-142 品質保証 (QA) ツールを提供します。」と書いてあったので、興味を持ちやってみようと思いました。ドキュメントは、ここ で読めます。
論文の要旨
Pylinacは、線形加速器(Linac)から生成された画像やデータを自動的に分析するPythonの品質保証(QA)ツールです。放射線医学分野のプログラマーや非プログラマーが使用できます。Pylinacは、PDFレポートの生成、ファントムの自動登録、画像の読み込みなど、さまざまな機能を提供します
現場でやっている医学物理士の感想
Pylinac General Overview
What is pylinac?
データ取り込み~文書化することができるんですね。定期的なQAを一部でもpylinacに置き換えられたらいいでしょうね。
What is pylinac NOT?
よーく存じております。「自己責任」ですね。pylinacのコミッショニングをしっかりやるということですね。
素晴らしいですね。私も何かお手伝いすることがあればいいんですが。
Philosophy、Algorithm Design Overview、Module Design は、「少ないコード量で多くの動作を表現する、短く簡潔で読みやすいスクリプト」をモットーに開発されているということなんでしょうか。しっかり設計されているんですね。
Installation
インストールは簡単にできました。
Get a Distribution Stack(環境設定)
私のpython環境は、Windows10、Winpython 3.11.1、Visual Studio Code 1.77.3、pylinac 3.10.0、です。
実践してみたのは、Winston-Lutz、Catphanの2例です。どうにかこうにか出来ました。
Winston-Lutz Test
論文に基づいているんですね。
ちなみに,私が作成したスクリプトを書いておきます。
”my_directory = r'c:\Users\...”は、ご自分の環境のパスに変更してください。
# pylinac winston-lutz
from pylinac import WinstonLutz
my_directory = r'c:\Users\放射治療研究用PC\Documents\Python\pylinac\winston_lutz'
wl = WinstonLutz(my_directory, use_filenames=True) # Insert use_filenames=True
wl.analyze(bb_size_mm=2) # 5mm -> 2mm Change!
# plot all the images
wl.plot_images()
# plot an individual image
#wl.images[3].plot()
# print to PDF
wl.publish_pdf('0428_wl.pdf')
TM-WinsとPylinacで比較しましたが、両者はほぼ一致しました。これまで比較できる検査方法が無かったので、ちょっと安心しました。
CT & CBCT QA (CatPhan)
うちのLinacに付属していたファントムは、CatPhan504でした。
CBCTでファントムを撮影し、その画像をpylinacのプログラムから呼びだします。しかし、当初テストで使っていた何枚かの画像にカウチの金属が入っていてエラーとなり、結果が表示されませんでした。ファントムをずらし、金属アーチファクトのないCBCT画像では問題なく解析できました。
同様に、私が作成したスクリプトを書いておきます。
”zip_file = r"C:\Users\...”は,ご自分の環境のパスに変更してください。
from pylinac import CatPhan504, CatPhan503, CatPhan600, CatPhan604
import os # osモジュールをインポートすることを忘れずに
import datetime
# for this example, we'll use the CatPhan504
# zip fileを用いた場合 newct.zip
# ご自分の環境のパスに変更してください.
zip_file = r"C:\Users\放射治療研究用PC\Documents\Python Scripts\CBCT\newct.zip"
cbct = CatPhan504.from_zip(zip_file)
cbct.analyze()
now = datetime.datetime.now()
formatted_date = now.strftime('%Y%m%d_%H%M%S')
# 相対パスでファイルに書き込み
file_path = os.path.join(os.path.dirname(__file__), 'CBCT_result_' + formatted_date)
# 相対パスでファイルに書き込み
with open(file_path + '.txt', 'w') as f:
f.write(cbct.results())
print(cbct.results())
Winston-Lutz Testもそうなんですけど、手作業でするよりも断然早い、客観的、間違いがない、なにより楽という点がメリットですね。
これからの課題(私がPylinacを使う場合)
今のところ、定期で行っているQAには使っていないのですが、今後当院はLinacの更新を控えているので、「新QAシステムは間違いなく動いているか」の確認用として使いたいなと思っています。
私の施設では一つハード的な問題があって、それはセキュリティの問題で放射線治療のPCのデータを取り出しにくいということです(USBメモリはダメ等)。放射線治療PCにpython環境を作ればいいんですけど、Windows7にはVersion3.8しか入らないのでpylinacが走りません。とりあえず必要があればデータを取り出し、解析用PCで解析を行って、Linacの更新のタイミングでpython環境を入れさせてもらおうかなと思っている次第です。
Pythonでスクリプトを書くという作業は「めんどくせー」と思うのですが、10行程度なので慣れれば大丈夫になりました。時間が取れたら、Starshot、Picket Fence、Field Analysisもやってみたいと思っています。
Pylinacは進化しているので、ちょくちょくGithubを覗いてみようかと思っています。
May 17, 2023