高大地,王佳舟,罗 吉,钟 阳,翟 鹏,杨彦举
(复旦大学附属肿瘤医院 放疗射治疗中心,上海 200032)
目前放射治疗为肿瘤治疗主要治疗手段之一[1],在肿瘤的综合治疗手段中占有重要的地位.放射治疗过程中,医用直线加速器产生射线照射肿瘤以达到治愈肿瘤的目的.近些年来,肿瘤精确放射治疗技术要求提高射线照射区域的照射剂量[2],同时降低肿瘤周围正常组织吸收剂量,即提高放射治疗执行的准确性.医用直线加速器的质量保证(Quality Assurance,QA)是保证放射治疗准确执行、提高治疗效果、控制不必要照射和防止辐射事故的关键,因此质量保证在放射治疗流程中具有重要意义[3,4].
我国放射治疗QA 流程在整体上正在不断完善,但一些问题仍尚未解决,如QA 流程复杂繁琐以及流程规范性差等,导致放疗过程中的QA 高效完成仍有一定障碍[5].在互联网技术高速发展的大环境下,建立放疗QA 数字化分析系统,实现放疗设备QA 数据的数字存储与智能分析,可极大地简化放疗QA 流程,提高物理师工作效率,符合精准放疗时代所提出的基本要求[6–8].
Pylinac是一套提供AAPM TG-l42 报告相关的加速器QA 分析的开源代码[9,10],用于分析日常加速器QA的数据和图片.本研究利用Python 编程语言调用Pylinac中各函数模块,基于Django Web 开发框架和MySQL 数据库建立QA 数字化分析系统.其可分析物理师导入的加速器QA 流程中数字、图片或日志数据并得出分析结果.同时,QA 数字化分析系统可简化并规范放疗设备安装后的验收检查和放疗流程中质量保证,提高放疗工作效率,节省物理师工作时间,降低放疗差错和放疗事故的发生概率.
本文中放射治疗QA 数字化分析系统是一款专用于放射治疗流程中质量保证工作的分析系统.该系统基于B/S 架构进行设计,包含数据上传、QA 数据分析和可视化展示3个功能模块,实现QA 数字化分析流程中QA 数据的导入、自动处理分析、结果展示和存储下载功能.
本文中放射治疗QA 数字化分析系统采用分层架构设计模式,其应用层、服务层和数据层之间保持相互独立且各层内部迭代互不影响,系统整体架构如图1所示.以浏览器作为用户交互界面,交互界面包含数据上传模块和可视化展示模块.数据上传模块具有从Django 框架中加载前端界面模板与上传QA 数据和图片至Django 框架功能;可视化展示模块可具有将图表等直观的形式展示分析结果和下载分析结果功能.Django 服务框架将数据上传模块上传的数据和图片进行处理后保存至数据库中,同时将数据导入QA 分析模块.QA 分析模块可完成对数据和图片的自动分析,一方面将结果保存于数据库,另一方面将结果进行格式化封装封装后返回到Django 服务框架.
图1 放射治疗QA 系统程序架构
1.2.1 数据上传模块设计
数据上传模块在QA 数字化分析系统中主要负责将QA 分析所需要的数据、图片及日志文件上传至Django 服务框架,主要包括前端界面加载功能和数据上传功能.前端界面加载功能将前端界面加载展示到浏览器以用于用户交互,其中包括需要QA 分析功能选择区,数据上传区与结果展示区.数据上传功能实现将数据上传区的数据上传至Django 服务框架中.
1.2.2 QA 数据分析模块设计
QA 数据分析模块主要负责将导入的医用加速器数据进行自动化分析得到结果.数据分析模块主要包括数据存储、数据比对分析与结果格式化封装3个功能.数据存储功能实现QA 数据分析流程中数据的保存与读取,可将Django 框架中QA 初始数据和QA 分析结果保存至数据库,亦可从数据库读取初始数据和分析结果.数据分析功能对QA 原始数据的内容和格式进行判断,若数据缺失或格式错误,则向前端界面返回数据错误提示;若数据齐全且格式正确,则模块调用分析函数进行QA 数据分析并给出分析结果.结果格式化封装功能将分析结果生成前端界面所需要的JSON 格式数据并返回到Django 服务框架供可视化结果显示使用.
1.2.3 可视化展示模块设计
可视化展示模块包括可视化界面展示和结果下载两个部分.可视化展示功能是将数据分析功能模块返回到Django 服务框架中的QA 分析结果以表和图的形式展示在前端界面.结果下载功能是将QA 分析结果以PDF的形式下载,方便交流与研究.
基于上文系统的架构设计和各个功能模块的设计需求,需选择开发语言、开发框架和数据库对各个模块功能进行实现.系统服务端选用Python 3.7 语言,并基于Django 框架进行开发.该框架是MVC (Model View Controller)软件架构的扩展与延伸,具有耦合性低,重用性高和开发周期短的特点.系统客户端基于Bootstrap 开发框架对前端界面进行编写.Bootstrap为聚合HTML、CSS和JS 开发语音的前端开发框架,可用于开发响应式布局、移动设备优先的Web 项目.系统数据库采用MySQL 数据库管理系统对QA 数据、图片、日志文件及结果进行存取管理.
数据上传模块完成QA 数据、图片和日志文件的上传至Django 系统框架的功能.模块功能主要包块界面加载功能和文件上传功能.在系统开发过程中,各个QA 分析前端界面中页头和侧边栏部分完全一样,若各界面单独编写前端代码,则增加了工作量,更为后期更新升级带来不便,故在界面加载中选用Django 模板继承方式,将界面中顶部和侧边栏写入base.html 模板中,各功能界面通过{% extends "base.html" %}载入‘base’模板.因此,各个界面只需编写模块功能代码,大大减少冗余内容.
文件上传功能中通过基于加jQuery的Ajax (Asynchronous javascript and xml)方式完成QA 数据、图片和日志的上传.引用jQuery 文件以方便使用文件中Ajax 文件上传模板.在数据输入表单中载入QA 数据,点击上传按钮触发文件上传事件.系统通过jQuery 技术$("#id").val()得到form 表单数据,创建一个formdata对象并将form 表单数据以键值对的形式保存,Ajax 携带formdata 对象以post 方式上传至指定Django 后台中的url.py 文件进行数据处理.Django 后台将接收到的数据后会自动识别其信息类型,若是数字型或字符串型则通过request.POST.get 方式读取数据;若是图片和日志文件则request.FILES.get 方式读取文件.获取数据和文件后对格式进行判断,若文件格式错误,返回上传文件错误提示;若上传正确,则将文件发送至数据分析模块.
文件上传功能通过Ajax 方式完成QA 数据、图片和日志的上传,接收服务端返回数据并处理的关键代码如下:
$.ajax({
url:"{% url "planarimagingleeds" %}",
type:"post",
data:formdata,
contentType:false,
processData:false,
success:function (data) {
if(data.status=='success') {
var hc_rois_points=data.hc_rois;
am4core.ready(function() {···});
var constant_points=data.contrast_constant;
var noise_points=data.contrast_to_noise;
am4core.ready(function() {···});
$('#MTF').val(data.MTF);
$('#median_Contrast').val(data.median_Contrast);
$('#Median_CNR').val(data.Median_CNR);
$('#result_image').attr("src","../../"+data.result_img);
}else if(data.status=='fail'){
$('#jsEditUserForm').html(data.msg)
}}});
QA 数据分析模块是系统的核心功能模块,具有存储数据、QA 数据分析和格式化封装结果三项功能.存储数据功能选用MySQL 数据库管理系统对数据进行管理,采用ORM 模型来操作数据库.首先在settings.py中配置DATABASES中数据库信息;然后在model.py中以类继承models.Model的方式生成数据表;最后在view.py 文件中获取models.py 对应数据表对象,从而完成前端上传数据和QA 数据分析结果的存取操作.
对于QA 数据分析功能,首先新建功能类继承Pylinac 库中类来实现QA 数据与图片的分析功能;然后通过数据表对象获取QA 数据并将数据导入功能类中使用analyze 函数分析;最后通过get()函数和save_image_image()分别得到数据结果与图表结果.以平板成像模块中Leeds TOR 18 部分为例,QA 数据分析功能新建功能类核心代码如下所示:
class myLeedsTOR(LeedsTOR):
def plot_image_image(self):
self.plot_analyzed_image(low_contrast=False,high_contrast=False)
def get_hc_rois(self):
hc_rois=[roi.mtf for roi in self.hc_rois]
return hc_rois
def get_contrast_constant(self):
contrast_constant=[roi.contrast_constant for roi in self.lc_rois]
return contrast_constant
def get_contrast_to_noise(self):
contrast_to_noise=[roi.contrast_to_noise for roi in self.lc_rois]
return contrast_to_noise
def save_image_image(self,filename,**kwargs):
self.plot_analyzed_image(show=False,low_contrast=False,high_contrast=False,**kwargs)
plt.savefig(filename,**kwargs)
其中,plot_image_image()与save_image_image()函数完成图表结果的绘制与保存工作.get_hc_rois()、get_contrast_constant()和get_contrast_to_noise()分别具有获得平板成像的高频相对调制传递函数值、低频率对比度和载噪比数值功能.
结果格式化封装功能将分析结果整理成json 类型数据,通过HttpResponse(json.dumps(result_dict),content_type='application/json')将json 数据返回到指定HTML 前端界面用于可视化展示.
可视化展示模块包括可视化界面展示和结果下载两项功能.可视化界面展示功能主要实现将QA 分析结果以图表形式直观的展现出来.首先通过Ajax的异步调用获取服务器端返回的json 类型数据,然后使用amCharts 定制图表加载数据的方法将QA 分析结果进行动态加载实现可视化展示功能.在使用amCharts 定制图表时,先通过DIV 标签设置图表的位置和大小,然后在标签中调用amCharts中var chart=am4core.create("ID",am4charts.XYChart)方法来得到图表div;然后通过对象定义完成图表属性的相关设置,如xAxes、yAxes、color 以及图表数据data 等相关信息;最后通过chart.series.push(new am4charts.LineSeries())设置图表属性.结果下载功能实现对可视化结果以PDF 形式下载,点击下载按钮触发download 事件,调用download(request)函数将分析结果以数据流的方式下载.
amCharts 定制平板成像模块中Leeds TOR 18 图表的核心代码如下所示:
am4core.ready(function() {
var chart=am4core.create("rMTF_Chart",am4charts.XYChart);
chart.data=get_hc_rois_points(hc_rois_points);
var dateAxis=chart.xAxes.push(new am4charts.CategoryAxis());
dateAxis.dataFields.category="date";
dateAxis.title.text="线对值";
dateAxis.renderer.minGridDistance=5;
var contrastAxis=chart.yAxes.push(new am4charts.ValueAxis());
contrastAxis.title.text="相对MTF";
contrastAxis.renderer.grid.template.disabled=false;
var rMTF_Series=chart.series.push(new am4charts.LineSeries());
rMTF_Series.dataFields.valueY="hc_rois";
rMTF_Series.dataFields.categoryX="date";
rMTF_Series.yAxis=contrastAxis;
rMTF_Series.tooltipText="{date}:{hc_rois}";
rMTF_Series.name="相对MTF";
rMTF_Series.strokeWidth=2;}
放射治疗QA 数字化分析系统的主界面如图2所示,左侧为QA 分析模块操作侧边栏,包括日常周检查和月检查所需QA 分析操作.其中剂量校准模块依据TG51 协议可完成对医用直线加速器输出剂量的测定和校准数据计算.等中心验证模块通过分析胶片图像,既可验证机架旋转轴与辐射束等中心一致性,也可完成准直器旋转轴与辐射束等中心一致性的验证.容积调强质控模块主要包括剂量率与机架旋转速率的联合测试和多叶光栅速率与剂量率的联合测试两个部分.该模块加载电子投影影像设备(EPID)采集的DICOM图像文件并分析VMAT/Rapid Arc的误差变化.平板成像模块通过分析直线加速器MV 图像或KV 图像来判断MV 探测板及KV 探测板成像质量,其支持Leeds TOR 18、Standard Imaging QC-3和Las Vegas 模体的分析.Winston_Lutz 分析模块可加载winston_lutz 图像,分析验证医用直线加速器的机械等中心与辐射束等中心的重合度.光栅运动检测模块通过分析EPID 采集的DICOM 图像来确定多叶光栅的峰值,判断多叶光栅的运动状况,并给出通过、警告或失败的可视化指示.CT 质量检查模块对上传的CBCT 或CT 图像进行分析,得到CT 图像的空间分辨率、图像噪声和低对比度分辨率结果.平坦度与对称性模块依据平坦度/对称性计算标准,可以加载和分析胶片或EPID 图像来检查直线加速器辐射束的平坦度与对称性.日志分析模块可读取及分析瓦里安直线加速器机器的日志,包括动态日志和轨迹日志.
图2 放射治疗QA 数字化分析系统主界面
选择界面左侧QA 分析操作侧边栏对应QA 分析操作,右侧主界面会加载QA 分析操作与结果界面,其包括参数设置、文件上传、结果可视化和结果下载.文件上传部分支持图片上传格式为TIF 格式、JPEG格式和DICOM 格式,同时也支持文件压缩包上传及文件夹上传.参数设置部分需要设定QA中测定的参数值和预定的影响QA 结果的值,其中测定值主要包括:温度、气压和跳数、参考值、误差值和对比度阈值等.
本文选用KV/MV 影像分析中分析KV/MV 影像质量的Leeds TOR Phantom为例来介绍QA 数字化分析系统分析操作界面.使用本院医用直线加速器Varian Edge 拍摄Leeds TOR Phantom 图像用于MV 平板质量分析.如图3Leeds TOR Phantom 分析操作与结果界面所示,在左上方文件上传部分输入低对比度阈值和高对比度阈值并载入加速器拍摄dicom 类型MV平板分析文件.点击上传按钮,对数据和文件进行上传.上传数据及文件后,系统可自动进行分析并返回可视化结果,结果呈现部分以图表的形式展现QA的分析结果.Leeds TOR Phantom的可视化结果分别在分析结果、高频相对MTF 结果和低频率对比度与载噪比结果3个区域展示.在可视化结果界面点击“下载”,既可进入结果下载界面.结果下载界面中根据日期排序列出分析结果,点击“下载”即可得到分析结果的PDF 文件.Leeds TOR Phantom 传统QA 流程是物理师采集到模体图像后,在高对比度区域通过肉眼判断得出高对比度结果,在低对比度画圈读出低对比度结果.QA 数字化分析系统改变了传统QA 流程,通过分析上传的模体图片可得到结果,减少了因为技能水平差异而造成的分析结果误差,将影像质量评定缩短至数分钟内可以完成的任务.
图3 Leeds TOR Phantom 分析操作与结果界面
在系统可靠性和实用性测试中,分别将本院七台医用直线加速器2019年度年检QA 数据与图片QA导入用数字化分析系统进行分析,使用对比分析法将分析结果与年检结果进行比较后得到两者偏差的概率小于千分之一.
经测试结果表明,我们搭建的放射治疗QA 数字化分析系统可以成功识别并自动处理前端界面表单中添加的放疗设备参数、图像或日志文件,帮助物理师得到QA 分析计算结果并根据QA 标准检查设备工作质量.
放射治疗的QA是保证和提高肿瘤治疗水平的基础,也是放射治疗的安全与有效的关键[11,12].高水平的质量保证工作不但减少或避免放疗差错及放疗事故的发生,而且使直线加速器保持良好的工作状态.通过精确地输送处方剂量到放疗靶区,减少附近正常组织的受照量,进而使患者能够获得更好的治疗[13–15].
在传统的QA 过程中,物理师使用QA 设备得到QA 数值或图像后,通过人工计算或观察评估医用直线加速器QA是否通过[16–18].由于QA 工作繁重且计算复杂,在进行手动计算的时,可能存在人为失误导致重新计算或数据采集,会进一步增加了物理师的工作量.此外,物理师个人之间的工作能力与QA 评价标准也存在差别,需要分析的图片数量多且复杂,观察评估QA是否通过存在较大主观性和间接性[19,20].基于Pylinac开发的QA 数字化分析系统很好地解决了这方面的问题,物理师将采集的数据导入系统,系统自动分析得到QA 结果,从而可直观的判断直线加速器QA 能否通过.本系统的测试结果显示,医用加速器QA 工作流程得以顺利的实现,物理师工作内容得到简化,工作效率得到明显的改善和提高.
随着互联网与自动化技术的发展,越来越多放射治疗QA 管理系统被物理师接触并使用,如Darcis M 开发设计的加速器等中心检验系统[21,22].但这样的系统往往功能单一,缺乏系统整合,物理师对直线加速器进行不同项目的QA 时需要打开多个软件.本设计将加速器性能检测的所有项目都集成到一个系统中,极大地简化了工作流程,提高工作效率.
综上所述,基于Pylinac的放射治疗QA 数字化分析系统改变了物理师传统的QA 流程,使质量保证过程得到进一步规范;建立QA 流程标准化体系和数据数字化管理并自动化分析QA 数据,提高了物理师工作效率,从而具有推动放射治疗事业向前发展的作用.