Inicio > Informática Médica > Eclipse Scripting API, Pylinac y ARIA en una sola plataforma

Eclipse Scripting API, Pylinac y ARIA en una sola plataforma

Eclipse Scripting API, Pylinac y ARIA en una sola plataforma

Durante el proceso radioterapéutico se generan gran cantidad de datos que, una vez analizados, podrían ayudar a mejorar dicho proceso. Estos datos se generan, bien en el sistema de planificación de tratamientos…

Alejandro Barranco López1, Luis Sopeña Sanz2, Daniel Nogueira Souto3 y Álvaro Boria Alegre4

1Facultativo Especialista de Área de Radiofísica Hospitalaria. PhD en Física, MSc en Astrofísica, Física de Partículas y Cosmología. Lugar de trabajo: H.C.U. Lozano Blesa (Zaragoza). [email protected]

2Facultativo Especialista de Área de Oncología Radioterápica. Máster Internacional de Oncología Clínica. Máster en Radiocirugía y Radioterapia Estereotáxica. Máster en Oncología Intervencionista. Lugar de trabajo: H.C.U. Lozano Blesa (Zaragoza).

3Médico Interno Residente de Medicina Nuclear. Lugar de trabajo: H.C.U. Lozano Blesa (Zaragoza).

4Facultativo Especialista de Área de Radiodiagnóstico. Máster en Iniciación a la Investigación en Medicina. Lugar de trabajo: Hospital San Jorge (Huesca).

Resumen

Durante el proceso radioterapéutico se generan gran cantidad de datos que, una vez analizados, podrían ayudar a mejorar dicho proceso. Estos datos se generan, bien en el sistema de planificación de tratamientos, en el sistema de registro y verificación o bien en el propio acelerador. Para acceder a estos datos existen una serie de herramientas de diferente índole que, en el caso de soluciones de Varian, mostramos cómo unificar bajo una única plataforma de programación en Python.

Palabras clave — ESAPI, ARIA, AURA, pylinac, logfile, Python.

Abstract

 During the radiotherapy process a great amount of data is generated. Once these data were analyzed, it could help to improve the radiotherapy process. These data are generated at the treatment planning system, at the record and verify system or at the accelerator itself. To access these data there are different tools that, in the case of Varian, we show how to unify under a single Python programming platform.

Key words — ESAPI, ARIA, AURA, pylinac, logfile, Python.

1  Introducción

Con el auge de las tecnologías de la información se ha disparado la cantidad de datos generados en cualquier proceso que involucre estas tecnologías, así como el potencial para explotar estos datos. Esto no es diferente en el campo de la radioterapia, donde los modernos sistemas de tratamiento recogen gran cantidad de datos demográficos, dosimétricos y clínicos acerca de los pacientes y sus tratamientos. Es obvio que del estudio de estos datos se podría extraer información muy valiosa para la mejora del proceso radioterapéutico. Sin embargo, en gran cantidad de ocasiones estos datos se quedan sin explotar, ya que no se sabe cómo o no es fácil acceder a dichos datos por parte de los facultativos que trabajan con estas tecnologías. Por ello, presentamos en este trabajo cómo integrar bajo una misma plataforma los métodos para acceder a los datos almacenados en el sistema de planificación Eclipse, en el sistema de registro y verificación ARIA y en los logfiles generados por aceleradores lineales de electrones de Varian (por tanto, los tres sistemas mencionados son soluciones de la empresa Varian Medical Systems).

2  Material

Las diferentes herramientas que se pretenden integrar son:

Eclipse Scripting Application Programming Interface (ESAPI): ESAPI es una interfaz de programación de aplicaciones (API por sus siglas en inglés) que permite escribir programas o scripts en el lenguaje de programación C#.NET para acceder o (dependiendo de la versión) modificar información del sistema de planificación de tratamientos (TPS, por sus siglas en inglés) de radioterapia Eclipse. Estos scripts se pueden integrar en la propia interfaz del TPS Eclipse o pueden ser empleados como un ejecutable individual (standalone). En nuestro caso disponemos de la versión 15.6.

Sistema de registro y verificación ARIA: Las soluciones que ofrecen tratamientos de radioterapia cuentan, además de con un TPS, con un sistema de registro y verificación de la dosis impartida a los pacientes. En este caso nos vamos a centrar en el sistema de registro y verificación ARIA 15.1, que integra a su vez información del TPS Eclipse. Es decir, ARIA es una gran base de datos (más bien un conjunto de bases de datos) que almacena datos demográficos de los pacientes, las características de su tratamiento, el registro de la dosis impartida a los pacientes, las imágenes que se les realizan, etc. Se pueden definir, además, una serie de actividades que representarían el flujo de trabajo de todo el proceso radioterapéutico: consultas con el paciente, realización del escáner de planificación, contorneo, planificación, controles de calidad…Esto permite establecer una metodología de trabajo sin papeles [1], además, teniendo acceso a los datos de estas actividades, por ejemplo: cuando se inician, cuando se prevé que estén finalizadas, cuando se finalizan realmente, si se han tenido que repetir por algún motivo, etc. se podría analizar el funcionamiento y la calidad del proceso radioterapéutico. En particular, esta base de datos está implementada sobre Microsoft SQL Server.

ARIA Unified Reports Application (AURA): Al igual que para acceder a los datos de Eclipse Varian proporciona una API, para acceder a los datos de ARIA Varian ofrece como solución un sistema de creación de informes (AURA). Este sistema requiere de una base de datos adicional a ARIA para la elaboración de estos informes o data warehouse, formado por tablas de la base de datos de ARIA desnormalizada.

Sin embargo, esta solución es un tanto farragosa si se quisiera trabajar con los datos recuperados a través de los informes, ya que habría que obtenerlos de estos, exportándolos a diferentes formatos (los formatos a los que se permite exportar son XML, CSV, PDF, MHTML, Excel, TIFF o Word) y extrayendo los datos de cualquiera de estos archivos de la manera adecuada.

Logfiles y pylinac: Por último, los aceleradores lineales de electrones modernos generan una serie de archivos (logfiles), que contienen información acerca de su desempeño a la hora de impartir los tratamientos [2]. Recogen datos acerca de la posición de los diferentes elementos mecánicos (gantry, colimador, posiciones de las láminas…), unidades monitor impartidas, tasa de dosis, etc. Es decir, una cosa es lo que el TPS le manda al acelerador y otra es lo que este consigue en el momento de impartir cada tratamiento (obviamente las diferencias se encuentran dentro de unas tolerancias aceptables o el tratamiento sería interrumpido). En este caso hemos trabajado con los logfiles generados por un acelerador TrueBeam SVC.

Para acceder a la información contenida en estos logfiles usaremos la biblioteca pylinac [3] (versión 2.2.7) para el lenguaje de programación interpretado Python 3.6.4 [4]. La biblioteca pylinac tiene un conjunto de módulos que proporcionan herramientas para realizar los controles de calidad de aceleradores lineales de uso clínico del TG-142 [5], pero en particular, nos interesa el módulo para análisis de logfiles.

Por tanto, para acceder a todo el conjunto de datos generados en el proceso radioterapéutico, debemos usar diferentes herramientas: programas en C#.NET, informes que hay que exportar a otro tipo de archivos para manejar los datos en ellos contenidos y programas realizados en Python con la biblioteca pylinac para tener acceso a los datos contenidos en los logfiles. Para simplificar todo este proceso proponemos usar como plataforma integradora Python, ya que, afortunadamente, podemos acceder a la base de datos SQL de ARIA mediante varias bibliotecas, en este caso particular usaremos la biblioteca pyodbc [6] (versión 4.0.22) y, además, existe una interfaz para Python de la API de Eclipse, PyESAPI [7] (versión 0.2.1).

En la siguiente sección explicamos cómo integrar todas estas herramientas con el lenguaje de programación Python y la plataforma Anaconda (versión 5.1.0).

3  Método

En primer lugar, tal y como propone Varian, se recomienda trabajar desde una TBOX o puesto de trabajo no clínico, con la base de datos en modo investigación. Se pueden probar las herramientas en ese entorno seguro y, una vez que tengamos la confianza suficiente, podemos pasar a otros entornos de trabajo. Además, para tomar la misma precaución con los logfiles se recomienda realizar una copia de estos y trabajar sobre la copia, para evitar cualquier tipo de pérdida o corrupción de datos.

3.1  Instalación

Para la integración de estos componentes se recomienda primero realizar la instalación de PyESAPI, siguiendo las instrucciones de [7]:

  1. Instalar la plataforma Anaconda [8] para Python.
  2. Abrir la terminal de línea de comandos de Anaconda (Anaconda Prompt), que se puede encontrar en el menú de inicio de Windows. Dentro de esa terminal ejecutar las ordenes que se describen a continuación.
  3. Para descargar el fichero con la definición del entorno o environment de Anaconda hay que ejecutar:

curl -O https://raw.githubusercontent.com/VarianAPIs/PyESAPI/master/condaenv36.yml

  1. Con la siguiente orden se crea el entorno propiamente dicho:

conda env create -f condaenv36.yml

  1. Y finalmente, debemos activarlo con:

conda activate pyesapi36

Para incorporar al entorno anteriormente creado la biblioteca pylinac solo debemos ejecutar:

  1. pip install pylinac

A la hora de instalar PyESAPI, ya se incluye en la instalación el módulo pyodbc, en caso contrario se podría instalar de igual forma con pip install pyodbc. El orden de instalación es importante, sobre todo hay que instalar primero la parte de PyESAPI, ya que, de otra forma, se pueden ocasionar problemas. Aun así pueden aparecer errores, en nuestro caso apareció un error de compatibilidad entre las bibliotecas numpy y scikit-image (ver figura 1), que se solucionó actualizando con pip install –upgrade scikit-image.

Una vez instalado el entorno de Anaconda con todas las bibliotecas o módulos deseados se puede usar cualquiera de los entornos de desarrollo integrado (IDE, por sus siglas en inglés) incorporados en la propia plataforma de Anaconda, o exportar el entorno a cualquier otro IDE o editor de código deseado.

3.2  Código

Acceso a los logfiles:

Una vez realizada la instalación, tal y como se describe en la subsección anterior, el código de Python necesario para acceder a los logfiles aparece en la figura 2. En la primera línea de dicha figura se importa la función load_log de la biblioteca pylinac para leer los logfiles. En la segunda línea se carga en la variable homónima el archivo logfile.bin, situado en la ruta que se muestra. Y en la tercera línea aparece un ejemplo de la información que se puede llegar a obtener (en este caso, diferencia entre las unidades monitor registradas y planificadas), cuyo resultado se recoge en la figura 3. Para saber cómo extraer otro tipo de datos se puede consultar [3].

Acceso a los datos de Eclipse:

Para obtener los datos de Eclipse se puede usar el código de la figura 4. En la primera línea importamos la biblioteca pyesapi. La segunda línea, al tratarse de un script standalone, es necesaria para cargar la aplicación de ESAPI, en este ejemplo concreto con nombre «ejemplo». En la tercera línea se muestra un ejemplo en la que se imprimen en pantalla los identificadores de todos los pacientes. Finalmente, cuando se terminen de usar los recursos de la aplicación hay que ejecutar la cuarta línea. Para obtener más información acerca de cómo acceder a más datos del TPS, se puede consultar [9].

Acceso a los datos de ARIA:

El código para obtener los datos de ARIA es un poco más elaborado. En primer lugar, hay que determinar el nombre de la base de datos a la que uno se desea conectar. Siguiendo la recomendación del comienzo de la sección, es deseable comenzar conectándose a una base de datos no clínica. Más tarde se puede conectar con la base de datos de ARIA. El código necesario para esto es el que aparece en la figura 5.

La clave está en la conexión con la base de datos (líneas 2–5). Hay que determinar el nombre del equipo que aloja el servidor al que nos queremos conectar, el cual se puede obtener haciendo uso de la aplicación Varian Service Portal. Abriendo dicha aplicación vamos a Configuración del Sistema, Mostrar base de datos y en Nombre host del servidor de la base de datos aparecerá el nombre buscado. También hay que determinar el nombre de la base de datos, que aparece debajo del Nombre host del servidor de la base de datos. Dependiendo de si estamos trabajando en una estación clínica o no, nos aparecerá el servidor correspondiente a una u otra base de datos.

En los campos de usuario y contraseña, habría que introducir aquellos con permiso de acceso a estos servidores. Estos dos campos se podrían sustituir por «Trusted_Connection=yes», de forma que se accedería al servidor con las credenciales del usuario que ejecutara el programa, por ejemplo, se tendría acceso si se ejecutara como administrador. En cualquier caso, se puede preguntar a Varian para que proporcione estos datos.

Posteriormente, se muestra un ejemplo en el que se realiza una consulta muy simple de SQL con la cual se seleccionan el Id, nombre y apellido de todos los pacientes de la tabla Patient (líneas 7–8) de la base de datos, datos que se imprimen por pantalla (líneas 10–13).

Para realizar estas consultas es necesario conocer el esquema de la base de datos con la que se está trabajando y la descripción de las tablas de las que se componen. Para esto es útil consultar la documentación de Varian [10, 11].

De manera parecida se podría conectar con cualquiera de las bases de datos de AURA.

4  Discusión y conclusiones

Se ha presentado en este trabajo la manera de integrar en Python las herramientas necesarias para acceder a los datos almacenados en el TPS Eclipse, en el sistema de registro y verificación ARIA (o en AURA) y en los logfiles generados por un acelerador lineal de electrones.

Con estas herramientas se podrían automatizar gran cantidad de procesos constituyentes del proceso radioterapéutico. Por ejemplo, en [12] se automatiza la revisión de unidades monitor impartidas a los pacientes durante los tratamientos de radioterapia externa; o en [13] se automatiza el uso de listas de comprobación o checklists. Las posibilidades van más allá de estos ejemplos, dado el gran potencial del acceso a todos estos datos.

Eclipse-Scripting-API-Pylinac-ARIA

Referencias

[1] N. Pereda, M. Fernández. A. Montejo, et al. Implantación de un Fluho de Trabajo “Paperless” en Radioterapia a partir de Vías Clínicas en ARIA. Sexto Congreso Conjunto SEFM/SEPR, 2019.

[2] Varian Medical Systems. Truebeam trajectory log file specification. 2011.

[3] James Kerns. pylinac. Recuperado en febrero de 2020 de https://pylinac.readthedocs.io/en/stable/.X

[4] Python Software Foundation. Recuperado en febrero de 2020 de https://www.python.org/.X

[5] E. E. Klein, J. Hanley, J. Bayouth et al. Task Group 142 report: Quality assurance of medical accelerators. Am. Assoc. Phys. Med, 2009.

[6] Pyodbc. Recuperado en noviembre de 2019 de https://github.com/mkleehammer/pyodbc.X

[7] Michael Folkerts. pyesapi. Recuperado en febrero de 2020 de

https://github.com/VarianAPIs/PyESAPI.X

[8] Anaconda. Recuperado en noviembre de 2019 de https://www.anaconda.com/.X

[9] J. Pyyry y W. Keranen. Varian APIs. A handbook for programming in the Varian oncology software ecosystem. Julio 2018.

[10] Varian Medical Systems. ARIA OIS v13 variansystem Database Reports Schema. P1001658-002-B. Septiembre de 2015.

[11] Varian Medical Systems. ARIA Database Reference Guide. Varian System Database for ARIA Radiation Therapy Management Version 13. P1001657-003. Marzo 2014.

[12] A. Barranco López, L. Sopeña Sanz, A. Boria Alegre y D. Nogueira Souto. Verificación semanal de las hojas de tratamientos de radioterapia externa mediante el uso de logfiles. Revista Electrónica de PortalesMedicos.com (en prensa).

[13] A. Barranco López D. Nogueira Souto, A. Boria Alegre y L. Sopeña Sanz. Un ejemplo de aplicación de Eclipse Scripting API para la automatización en la verificación de planificaciones de radioterapia. Revista Electrónica de PortalesMedicos.com (en prensa).