張建英,孫 菁,王 蕓
1 復(fù)旦大學(xué)附屬中山醫(yī)院放療科,上海市,200032
2 上海市楊浦區(qū)市東醫(yī)院放療科,上海市,200438
RayStation治療計(jì)劃系統(tǒng)腳本的進(jìn)階應(yīng)用
【作者】張建英1,孫 菁1,王 蕓2
1 復(fù)旦大學(xué)附屬中山醫(yī)院放療科,上海市,200032
2 上海市楊浦區(qū)市東醫(yī)院放療科,上海市,200438
該研究在RayStation4.0計(jì)劃系統(tǒng)平臺(tái)上,探討了以下功能的實(shí)現(xiàn)方法:將治療計(jì)劃的各感興趣區(qū)域名稱(chēng)等信息傳遞給Word文檔形成放療計(jì)劃處方文件;再將該文件通過(guò)UI界面?zhèn)鬟f給 RayStation計(jì)劃系統(tǒng)用于計(jì)劃中評(píng)估;最后將評(píng)估結(jié)果傳回Word處方文件,形成計(jì)劃結(jié)果報(bào)告Word文件。研究結(jié)果表明,RayStation腳本可以實(shí)現(xiàn)與Word的數(shù)據(jù)交換;在腳本中控制Word的內(nèi)容和運(yùn)行。因此,通過(guò)RayStation腳本實(shí)現(xiàn)系統(tǒng)與第三方軟件的交互、擴(kuò)展其本身功能是可行的。
治療計(jì)劃;腳本;應(yīng)用
RayStation(RaySearch Laboratories AB, Stockholm, Sweden)系統(tǒng)是剛進(jìn)入我國(guó)的腫瘤放射治療計(jì)劃系統(tǒng)。該系統(tǒng)提供了腳本功能,以往的研究已經(jīng)探明了腳本的基本應(yīng)用方法,也表明有可能通過(guò)腳本與第三方軟件進(jìn)行交互,實(shí)現(xiàn)功能的擴(kuò)展。
在放射治療計(jì)劃設(shè)計(jì)臨床上,通常需要進(jìn)行計(jì)劃的處方和評(píng)估工作。隨著放療向精細(xì)化的方向發(fā)展,放療處方和評(píng)估的項(xiàng)目也越來(lái)越多。這些填寫(xiě)的工作如單靠手工完成,極易產(chǎn)生差錯(cuò)。比較理想的方法是通過(guò)數(shù)據(jù)的傳輸來(lái)自動(dòng)完成,并將相關(guān)數(shù)據(jù)存儲(chǔ)為通用文檔(如Word文檔),并保存于電子病歷中。
本研究將微軟辦公軟件Office中的Word作為第三方軟件,以實(shí)現(xiàn)放療計(jì)劃設(shè)計(jì)中的處方和評(píng)估的數(shù)據(jù)傳輸和交互為目標(biāo),具體研究RayStation系統(tǒng)的腳本進(jìn)階應(yīng)用。
1.1軟件
本研究使用RayStation4.0計(jì)劃系統(tǒng)。系統(tǒng)安裝時(shí),也同步安裝了Ironpython2.7編程語(yǔ)言和.NET Framework4.0框架結(jié)構(gòu);還同步安裝了微軟OFFICE2010辦公系統(tǒng)專(zhuān)業(yè)版,具備 VBA(Visual Basic for Applications) 功能。
本研究首先建立了一個(gè)標(biāo)準(zhǔn)計(jì)劃處方Word文檔。文檔中間的兩行表格為劑量約束輸入表。放療治療計(jì)劃設(shè)計(jì)基本流程如下:一、劑量師在勾畫(huà)完各感興趣區(qū)域(ROI)后,調(diào)用腳本填寫(xiě)Word文檔中患者姓名和放療編號(hào)等基本信息,將所有感興趣區(qū)域名稱(chēng)傳遞給劑量約束輸入表中感興趣區(qū)域欄的下拉選擇框,最后將文檔以患者放療編號(hào)為名稱(chēng)保存;二、主管醫(yī)生用約束輸入表填寫(xiě)單個(gè)放療處方評(píng)估條件,通過(guò)“添加”按鍵將處方條件寫(xiě)入下方的計(jì)劃處方表,并保存文件;三、物理師在計(jì)劃設(shè)計(jì)過(guò)程中,通過(guò)腳本把患者的計(jì)劃處方文件打開(kāi),把計(jì)劃處方表的內(nèi)容填入RaySation系統(tǒng)計(jì)劃評(píng)估界面的Clinical Goal中;四、物理師在醫(yī)生批準(zhǔn)計(jì)劃后,將實(shí)際的計(jì)劃評(píng)估結(jié)果導(dǎo)入到患者計(jì)劃處方文件中,并將“計(jì)劃處方”改為“計(jì)劃評(píng)估”,并關(guān)閉全部的“按鍵”,保存計(jì)劃評(píng)估文件。
可以看出,本研究實(shí)際需要腳本完成的是第一、三、四步的工作。
1.2 方法
1.2.1 基本計(jì)劃處方文件的形成
在本研究中,形成計(jì)劃處方文件的基礎(chǔ)是建立腳本編程語(yǔ)言Ironpython與Word的聯(lián)系。也就是在腳本中使用Office系統(tǒng)一些類(lèi)庫(kù),在Windows層面操作Word應(yīng)用軟件,達(dá)到操作Word文件、修改其內(nèi)容的目的。
Ironpython本身就是一種基于Microsoft .NET的Python語(yǔ)言,因此它和.NET Framework具有良好的兼容性。微軟的Office辦公軟件在安裝時(shí),如果安裝了.NET Programmability Support(.net可編程支持),就可以在Ironpython中直接使用Office主 Interop 程序集。具體的做法是在Ironpython的腳本開(kāi)始加入clr. AddReference("Offce"),clr.AddReference("Microsoft. Office.Interop.Word"),from Microsoft.Office.Interop. Word import *,以此獲得Word應(yīng)用(Application)的控制以及該對(duì)象的各種屬性和方法。如對(duì)這種引用的方式理解存在困難,可以完全不用理會(huì)其原理。
本研究建立的標(biāo)準(zhǔn)處方文件中包含了諸多Word對(duì)象,如表格、下拉輸入框、命令按鍵等。為了在Word中操作這些對(duì)象,在腳本開(kāi)始還需加入clr.AddReference("Microsoft.Vbe.Interop"), from Microsoft.Vbe.Interop import *兩條語(yǔ)句,以建立Ironpython腳本與VBA的聯(lián)系。
本研究使用tmp_application=ApplicationClass( Visible=True和mydoc=tmp_application.Documents. Open(‘d:plan.docm’)獲得了標(biāo)準(zhǔn)計(jì)劃文件plan. docm在Ironpython中的對(duì)象mydoc,也獲得了Word在當(dāng)前系統(tǒng)中的應(yīng)用運(yùn)行實(shí)例對(duì)象tmp_application。
標(biāo)準(zhǔn)處方文件中存在多個(gè)相同類(lèi)型的Word對(duì)象,比如表格就有三個(gè)。本研究采用了遍歷標(biāo)準(zhǔn)文件全部表格,并根據(jù)表格標(biāo)題來(lái)選定所需的表格的方法。具體語(yǔ)句如for my_table in mydoc.Tables: 和if my_ table.Title == "info":。標(biāo)準(zhǔn)文件里表格標(biāo)題可以通過(guò)表格屬性里的“可選文字”里的標(biāo)題一欄設(shè)定。這樣可以避免使用表格序號(hào)引用表格,當(dāng)表格格式發(fā)生改變或表格由于“刪除”、“粘貼”等操作導(dǎo)致序號(hào)發(fā)生改變時(shí),代碼無(wú)需改變。
從Raystation計(jì)劃系統(tǒng)中獲取患者姓名、放療編號(hào)的方法在過(guò)去的腳本研究中已經(jīng)完成了。本研究使用“my_table.Cell(2,2).Range.Delete(1) ”先將標(biāo)準(zhǔn)計(jì)劃文件中基本信息表中對(duì)應(yīng)單元的內(nèi)容清空,再用“my_table.Cell(2,2).Range.insertAfter(patient. Physician) ”把來(lái)自Raystation的基本信息填入。
如上所述,本研究使用“ROI”作為劑量約束輸入表中感興趣區(qū)域欄的下拉選擇框的標(biāo)題,用my_ ContentControl.DropdownListEntries.Add(zjy_i.Name)將已經(jīng)勾畫(huà)的器官名稱(chēng)傳遞給下拉列表選項(xiàng)。當(dāng)然,上述語(yǔ)句中 zjy_i所代表的是來(lái)自RayStation的器官對(duì)象集中的一個(gè)元素,也就是RayStation中的一個(gè)器官對(duì)象。
在完成各項(xiàng)輸入后,本研究使用m y_ filename="d:\"+patient.PatientID組成以患者放療編號(hào)為名稱(chēng)的文件名;使用mydoc.SaveAs(my_filename)保存計(jì)劃處方文件;使用tmp_application.Quit()釋放Word程序。
1.2.2 計(jì)劃處方文件的導(dǎo)入
本研究通過(guò)腳本在RayStation中導(dǎo)入計(jì)劃處方文件的基本思路是,通過(guò)鼠標(biāo)在RayStation界面上的動(dòng)作,調(diào)用RayStation用戶(hù)界面,根據(jù)計(jì)劃處方文件里計(jì)劃處方表的內(nèi)容,建立一個(gè)Clinical Goal的條件。
在本研究中,計(jì)劃評(píng)估有四種基本界面布局,分別為A3、A4、B4、B5模式,而調(diào)用Clinical Goal的命令鍵則分別隸屬于這四個(gè)界面布局。為了使得腳本在任意界面布局情況下都可以調(diào)出添加界面,本研究在腳本中使用了“Try:… except:… finally:…”結(jié)構(gòu),分別對(duì)四個(gè)界面做嘗試,避免了腳本運(yùn)行中因調(diào)用過(guò)程出錯(cuò)導(dǎo)致異常退出。調(diào)用添加Clinical Goal的具體對(duì)象為connect.get_current('ui'). Workspace. NotifyingContentControl. A3.TabControl_ TabPages['DVH'].ClinicalGoals.Button_AddGoals。
按RayStation的設(shè)計(jì),添加Clinical Goal時(shí)必須依次選定感興趣區(qū)域(ROI)、選定約束類(lèi)型、選定約束中體積的類(lèi)型、確定約束關(guān)系,最后再填寫(xiě)具體數(shù)值。
在本研究中,通過(guò)connect.get_current('ui'). RayRadionButton['ROI'].Click()可以在添加界面中選定ROI按鈕;然后按照1.2.1所述方法,在計(jì)劃處方表中使用mytable.Cell(i,1).Range.Text提取出第i行對(duì)應(yīng)的ROI名稱(chēng),將其保存于變量zjy_z中,再通過(guò)在connect.get_current('ui'). ComboBoxItem[zjy_z].Select()在添加界面的ROI下拉框中選定對(duì)應(yīng)的ROI。需要特別指出的是,Word中直接提取的zjy_z后面包含一些特殊字符,如換行符等,需要使用字符串截取函數(shù)將其去除,否則ROI下拉列表中將會(huì)找不到匹配的ROI;在調(diào)用ROI下拉框之前,必須先使用ToggleButton.Click()命令先將下拉框展開(kāi),否則下拉框的選項(xiàng)也無(wú)法使用(被選擇)。
作為一個(gè)計(jì)劃處方約束或要求,通常有以下幾種表達(dá)方式。一,劑量體積約束,即達(dá)到或超過(guò)某一劑量的體積不大于或小于某一體積,這一體積可以是絕對(duì)體積也可是相對(duì)體積;二,體積劑量約束,即達(dá)到或超過(guò)某一體積的劑量不大于或小于某一劑量;三,特殊約束,即希望最大劑量、最小劑量或平均劑量大于或小于閾值。
本研究為了區(qū)分這幾種情況,在計(jì)劃處方文件劑量約束輸入表中設(shè)置了約束類(lèi)型一欄。當(dāng)約束類(lèi)型為V時(shí),表示約束對(duì)應(yīng)的求解閾值是體積;為D時(shí),代表約束對(duì)應(yīng)的求解閾值是劑量。比如臨床約束肺20 Gy的體積小于30%,通常用“V2000<30%”,V就是本研究中的約束類(lèi)型;臨床用“Dmax<50 Gy”,限制最高量小于50 Gy,D就是這類(lèi)約束在本研究中的約束類(lèi)型。約束輸入表的單位1會(huì)根據(jù)約束類(lèi)型更改,對(duì)于特殊約束的處理是將其約束條件的單位1設(shè)為“max”, “min”和“avg”。
以約束條件“V2000<30%”為例,本研究腳本讀出約束條件單位1為cGy,判斷其為體積約束,使用.RayRadionButton['Volume at dose'].Click()來(lái)選擇劑量體積約束;繼而根據(jù)單位2為%,了解到要求的是相對(duì)體積,不需使用.PlanningGoal._cGy_ dose_1. CheckBox設(shè)置;隨后根據(jù)關(guān)系為<,確定使用.RayRadionButton['At most'].Click()設(shè)置關(guān)系;最后使用.TextBox_GoalVolume[0].Text=30和.TextBox_ DoseLevel[0].Text=2000設(shè)置約束數(shù)值。
當(dāng)然,具體的邏輯關(guān)系比舉例要復(fù)雜很多,需要進(jìn)行較為復(fù)雜的調(diào)試和在程序中設(shè)置一些錯(cuò)誤處理機(jī)制。約束條件輸完后,本研究使用connect.get_ current('ui'). Button_Add.Click()進(jìn)行添加一條Clinical Goal。
1.2.3 計(jì)劃評(píng)估的導(dǎo)入
為確保從Clinical Goal中獲取的結(jié)果數(shù)值能與計(jì)劃處方表一一對(duì)應(yīng),腳本必須將計(jì)劃處方表中的每一條約束條件改寫(xiě)為RayStation的Clinical Goal的文字表達(dá),并將該文字表達(dá)與Clinical Goal中的表達(dá)進(jìn)行比對(duì)。
依然以“V2000<30%”為例,在Clinical Goal中其文字表述為“At most 30.00 % volume at 2000 cGy dose”。本研究的腳本根據(jù)計(jì)劃處方表中的約束關(guān)系為<,確定文字表述的第一個(gè)關(guān)鍵詞為At most。研究根據(jù)單位1為%,確定約束為相對(duì)體積約束,而文字表述中相對(duì)體積數(shù)值保留兩位小數(shù)。腳本使用"%.2f"% string.atof(zjy_z_data1)改寫(xiě)原約束條件中的相對(duì)體積數(shù)值(zjy_z_data1即為從計(jì)劃處方表中某一行約束條件中獲取的相對(duì)體積約束值)。最后將“% volume at”、“2000”、“cGy dose”等關(guān)鍵詞依次連接起來(lái)。需要指出的是,關(guān)鍵詞“cm3”需要使用編程中的轉(zhuǎn)義方法,即使用“ cmxb3 volume at ”作為關(guān)鍵詞;腳本中還需注意關(guān)鍵詞中每個(gè)單詞之間存在空格。
從Clinical Goal中獲取當(dāng)前計(jì)劃的約束結(jié)果時(shí)的對(duì)象為.DataGridRow[j].TextBlock_Result.Text。這個(gè)對(duì)象的名稱(chēng)與Clinical Goal標(biāo)題欄的名稱(chēng)并不一致。在本研究中,為了獲取一個(gè)編程對(duì)象的屬性和方法, 使用了“._ ”方法。例如,在調(diào)試中,使用“.DataGridRow[j]._ ”可以獲取DataGridRow對(duì)象的全部屬性,并在其中即可以發(fā)現(xiàn)有TextBlock_Result子對(duì)象。
在本研究中,對(duì)RayStation腳本的進(jìn)階應(yīng)用使用主要體現(xiàn)在三個(gè)方面。一是在腳本中調(diào)用Office系統(tǒng)類(lèi)庫(kù),建立了腳本和Word程序的應(yīng)用接口;二是在腳本中使用“Try:… except:… fnally: …”結(jié)構(gòu)實(shí)現(xiàn)了對(duì)程序的分支判別,也同時(shí)為腳本的應(yīng)用提供了錯(cuò)誤處理機(jī)制;三是在調(diào)式過(guò)程中使用“._ ”方法查找Raystation系統(tǒng)中各個(gè)對(duì)象的屬性和方法。
在本研究中,RayStation計(jì)劃系統(tǒng)應(yīng)用腳本調(diào)用、控制了Word軟件。其主要完成的工作任務(wù)從編程角度看可以分成兩個(gè)方面,即通過(guò)對(duì)Word對(duì)象的屬性和方法的引用實(shí)現(xiàn)了對(duì)控制Word文件控制;同時(shí)通過(guò)將計(jì)劃系統(tǒng)對(duì)象和Word對(duì)象在腳本中共存的方式實(shí)現(xiàn)Word文件與計(jì)劃系統(tǒng)的數(shù)據(jù)交換。本研究預(yù)設(shè)的主要功能已經(jīng)實(shí)現(xiàn)。
本研究所示范的腳本功能只是提供了一種方法,一種可能性。事實(shí)上,在本研究的基礎(chǔ)上,計(jì)劃處方文件的界面還可以進(jìn)一步優(yōu)化。比如,對(duì)計(jì)劃處方表中,可以對(duì)相同ROI的約束條件的第一欄進(jìn)行合并,增加其可讀性;還可以對(duì)計(jì)劃處方表進(jìn)行排序,尤其是可以根據(jù)ROI的性質(zhì)(是否為靶區(qū))排序等等。從理論上說(shuō),進(jìn)階運(yùn)用RayStation腳本,已經(jīng)可以開(kāi)發(fā)出商業(yè)化的Word處方應(yīng)用。
本研究的結(jié)果表明,通過(guò)Ironpython的腳本編程, RayStation中完全可以實(shí)現(xiàn)對(duì)Word文檔的控制和對(duì)應(yīng)的數(shù)據(jù)處理和交換。
在以往研究中,關(guān)于腳本的安全性、容錯(cuò)性的問(wèn)題通過(guò)在腳本中設(shè)置錯(cuò)誤預(yù)處理得到部分的解決。但是對(duì)于腳本多線(xiàn)程的問(wèn)題還有待進(jìn)一步研究。比如,RayStation腳本是否可以在系統(tǒng)背后運(yùn)行,隨時(shí)可以捕捉到RayStation計(jì)劃發(fā)生改變的事件,然后可以自動(dòng)填寫(xiě)計(jì)劃處方文件的問(wèn)題(也就是腳本運(yùn)行過(guò)程中實(shí)現(xiàn)掛起的動(dòng)作,等待計(jì)劃系統(tǒng)進(jìn)行觸發(fā)后再喚醒繼續(xù)執(zhí)行腳本的問(wèn)題)尚待研究。
但是,本研究已經(jīng)提示RayStation系統(tǒng)腳本功能可以進(jìn)一步開(kāi)發(fā),使用第三方軟件對(duì)其擴(kuò)展,實(shí)現(xiàn)原系統(tǒng)不具備的一些功能,也充分說(shuō)明了RayStation腳本運(yùn)用的前景。 盡管在本研究中只是使用了Word對(duì)象和方法,但是可以預(yù)期,RayStation腳本中也可以實(shí)現(xiàn)這樣一些功能,如在腳本中調(diào)用Word的宏, 或者將Word的宏(或VBA程序)用Ironpython語(yǔ)言進(jìn)行改寫(xiě)后直接在腳本中運(yùn)行。這也說(shuō)明RayStation腳本有可能在腳本環(huán)境中直接控制、調(diào)用第三方軟件,把第三方軟件作為自身功能的一個(gè)插件,實(shí)現(xiàn)類(lèi)似DIY式的功能擴(kuò)展。這些功能擴(kuò)展將可能包括但不限于算法的優(yōu)化、工作流程的規(guī)范化、治療計(jì)劃設(shè)計(jì)的自動(dòng)化以及文檔管理的自動(dòng)化等等。因此,今后關(guān)于RayStation腳本的應(yīng)用還有相當(dāng)?shù)难芯抗ぷ骺勺?。(限于篇幅,本文部分代碼和文件可以作者郵件聯(lián)系獲取。)
[1] 張建英, 孫菁, 王蕓. RayStation治療計(jì)劃系統(tǒng)腳本的初步應(yīng)用[J].中國(guó)醫(yī)療器械雜志, 2013, 37(4): 297-300.
[2] Philips Medical System. Pinnacle3 Planning reference guide[M]. 9201-5136A-ENG Rev A. Fitchburg USA, 2008.
[3] RaySearch Laboratories AB. RayStation 3.0 Reference Manual[M]. Stockholm, Sweden, 2012.
[4] Mueller JP. Professional IronPython design and develop IronPython techniques[M]. Indiana, USA: Wiley Publishing Inc, 2010.
[5] Foord MJ, Muirhead C. IronPython in Action[M]. Greenwich, USA:Manning Publications Co, 2010.
Discussion to the Advanced Application of Scripting in RayStation TPS System
【W(wǎng)riters】Zhang Jianying1, Sun Jing1, Wang Yun2
1 Department of Radiation Oncology, Zhongshan Hospital Affliated to Fudan University, Shanghai, 200032
2 Department of Radiation Oncology, East City Hospital of Yangpu District in Shanghai, Shanghai, 200438
In this study,the implementation methods for the several functions are explored on RayStation 4.0 Platform. Those functions are passing the information such as ROI names to a plan prescription Word fle. passing the fle to RayStation for plan evaluation; passing the evaluation result to form an evaluated report fle. The result shows the RayStation scripts can exchange data with Word, as well as control the running of Word and the content of a Word fle. Consequently, it’s feasible for scripts to inactive with third party softwares upgrade the performance of RayStation itself.
Treatment Planning, Script, Application
R730.55
A
10.3969/j.issn.1671-7104.2014.06.022
1671-7104(2014)06-0463-03
2014-07-11
張建英,E-mail:shzjy@126.com