Inicio > Informática Médica > Solución de un error de importación de ARIA mediante el uso de pydicom

Solución de un error de importación de ARIA mediante el uso de pydicom

Solución de un error de importación de ARIA mediante el uso de pydicom

A la hora de importar ciertas imágenes de varios pacientes en el sistema de registro y verificación ARIA aparece un error relacionado con la duplicidad de entradas en la tabla dbo.Equipment de la base de datos de ARIA.

Alejandro Barranco López1, Álvaro Boria Alegre2, Luis Sopeña Sanz3 y Daniel Nogueira Souto4

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).

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

3Facultativo 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).

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

30/03/20

Resumen

 A la hora de importar ciertas imágenes de varios pacientes en el sistema de registro y verificación ARIA aparece un error relacionado con la duplicidad de entradas en la tabla dbo.Equipment de la base de datos de ARIA. Este error tiene una sencilla solución, la edición de uno de los atributos DICOM que se mencionan en el informe del error. Se muestra aquí un script de Python que soluciona dicho error, haciendo uso del módulo pydicom para la edición de multiples archivos DICOM.

Palabras clave — ARIA, DICOM, pydicom, Python.

Abstract

 When importing certain images from several patients into the ARIA record and verify system, an error appears related to duplicate entries in the ARIA database table dbo.Equipment. This error has a simple solution, editing one of the DICOM attributes that the error log mentions. It is shown here a Python script that solves this error by using the pydicom library to edit multiple DICOM files.

Key words — ARIA, DICOM, pydicom, Python.

1  Introducción

El sistema de registro y verificación ARIA (Varian Medical Systems) es un sistema que va más allá de registrar y almacenar la dosis impartida a los pacientes en tratamientos de radioterapia. Es un sistema muy completo que integra bastantes módulos, sin embargo, su módulo de exportación e importación de archivos del estándar DICOM, a la hora de importar ciertas series de imágenes, genera el error que se muestra en la figura 1 y cierra inesperadamente el programa.

En este trabajo presentamos una herramienta para solucionarlo, que sirve, también, como ejemplo de manejo y edición de archivos tipo DICOM. Esta herramienta consiste en el uso del módulo pydicom del lenguaje de programación Python. Por tanto, este trabajo sigue la línea de [1-3], de incluir herramientas de las tecnologías de la información de elaboración propia en el proceso radioterapéutico.

2  Material

Las herramientas que se han empleado en este trabajo, todas ellas pertencientes al ámbito de las tecnologías de la información, son:

DICOM: Es el acrónimo de Digital Imaging and Communications in Medicine [4] y corresponde al estándar internacional para transmitir, solicitar, almacenar, procesar o mostrar cualquier tipo de imagen médica, como los generados por equipos de rayos-X, ultrasonidos, tomografía computerizada, resonancia magnética…Incluso va más allá de el uso de imágenes, porque contempla también el manejo de planes de radioterapia, incluyendo los mapas de dosis en 3 dimensiones, estructuras contorneadas, etc. Este estándar también incluye un protocolo de red para el intercambio de este tipo de archivos e información entre clientes y servidores.

Los archivos tipo DICOM están constituidos por una serie de elementos o atributos, por ejemplo, en la figura 2 se muestra parte de la estructura de uno de los archivos DICOM que se pretendían importar en ARIA y daba error. Cada línea corresponde a un atributo y cada atributo se compone de una etiqueta o tag, tipo de dato o VR (Value Representation), longitud y valor.

Tag: Cada atributo tiene una etiqueta que lo identifica y define sus propiedades. Esta etiqueta se compone de dos números enteros sin signo de 16 bits cada uno, grupo y elemento, de forma que los atributos relacionados suelen tener el mismo grupo.

VR: Es un código de dos caracteres, de un byte cada uno, que define el tipo de dato que almacena el valor del atributo. Normalmente, ya viene prefijado por la etiqueta del atributo, al menos de forma implícita, por lo que puede no aparecer, aunque no es lo recomendable.

Longitud: Un número entero sin signo de 16 o 32 bits que contiene la longitud explícita, en número de bytes, del valor almacenado en el atributo (y siempre ha de ser par).

Valor: Un número par de bytes, determinado por el campo “Longitud”, que contiene el valor del atributo.

Por ejemplo, en la figura 2 se muestra resaltado en azul el atributo Manufacturer, cuya etiqueta corresponde al grupo 0008 y al elemento 0070. El VR de esta etiqueta es LO o Long String y tiene como valor SIEMENS.

Para más información acerca de este estándar se puede consultar [4] o [5] y, más concretamente, [6] para conocer más sobre la estructura de los archivos DICOM.

ARIA: Es el sistema de registro y verificación de Varian Medical Systems. Este sistema de registro y verificación no sólo permite realizar las tareas propias de tal sistema, como registrar y almacenar la dosis suministrada a los pacientes de radioterapia, sino que también tiene una serie de herramientas que permiten la integración de gran parte de subprocesos de todo el proceso radioterapéutico bajo la plataforma ARIA. Por ejemplo: permite registrar y almacenar gran cantidad de datos demográficos y clínicos de los pacientes; tiene integrado el sistema de planificación de tratamiento Eclipse, con el correspondiente módulo de contorneo de estructuras; módulo de visualización offline de imágenes tomadas durante el tratamiento; definición de actividades y tareas para conformar una vía clínica, necesaria para trabajar sin papeles [7]; y otras muchas utilidades. En particular, el módulo que nos atañe es el de importación y exportación de archivos DICOM. Disponemos de la versión de ARIA 15.1.

Python: Python es un lenguaje de programación interpretado de alto nivel y de propósito general [8]. Hemos trabajado con la versión 3.6.4.

pydicom: Es una biblioteca de Python para trabajar con archivos de tipo DICOM, para leerlos y extraer su información y, también, editarlos [9]. Hemos trabajado con la versión 1.3.0.

DICOM Validation Toolkit (DVTk): A la hora de manejar archivos DICOM es conviente tener una idea de la estructura de estos. Aunque se ha explicado más arriba la estructura de los elementos que constituyen este tipo de archivos, los atributos, es bastante difícil conocer qué atributo almacena determinadas cosas. Para ello uno podría consultar el registro de elementos DICOM (DICOM Data Elements) [10], pero es mejor abrir el archivo DICOM en cuestión con un visor que muestre cada etiqueta con su descripción y su valor. Esto es precisamente lo que hace el programa DICOM Validation Toolkit [11]. Además, también permite la edición de los valores de los atributos. Precisamente, la figura 2 es una imagen de este programa.

3  Método

Como ya se ha comentado, a la hora de importar ciertas series de imágenes en ARIA obtenemos el error que se muestra en la figura 1. De acuerdo con el informe del error generado parece que hay un problema en cómo ARIA almacena en su base de datos los datos de las imágenes importadas de forma que se duplica un valor clave de la tabla dbo.Equipment. En este caso

(SIEMENS, PET, CT41168, <NULL>, Emotion Duo, 41168, VB10B)

es el valor duplicado. Por tanto, modificando alguno de los atributos anteriores podríamos solucionar el problema. En concreto, vamos a suprimir el valor que aparece como SIEMENS.

Si se estuviera importando un único archivo DICOM, esto se podría editar fácilmente con el programa DVTk o cualquier otro similar, abriríamos el archivo DICOM en cuestión con este programa, buscaríamos el atributo donde aparece SIEMENS y borraríamos el contenido de su valor. Normalemente esto no va a ser tan sencillo, por ejemplo, en nuestro caso queremos importar las imágenes de un PET/TC, formadas por 1424 archivos DICOM. Obviamente, editar a mano todos estos archivos no es una solución.

Para automatizar este proceso usamos el script que aparece en la figura 3. Este se describe a continuación, línea a línea:

Línea 1. En la línea 1 se carga la función listdir del módulo os que sirve para obtener una lista con todos los archivos de la carpeta o directorio que se le pasa como parámetro.

Línea 2. En la línea 2 se carga la función dcmread, necesaria para abrir archivos DICOM y acceder a su información, y la clase DataElement, para definir elementos o atributos del estándar DICOM. Ambas del paquete pydicom.

Línea 4. Se define la variable FOLDER de tipo StringType que contiene la dirección de la carpeta donde se encuentran los archivos DICOM a editar.

Línea 6. Se itera sobre todos los archivos contenidos en la dirección almacenada en la variable FOLDER. El nombre de cada archivo quedará almacenado en la variable f durante cada iteración.

Línea 7. Usando la función dcmread leemos el archivo DICOM cuyo nombre está almacenado en f y, ahora sí, almacenamos el propio archivo o dataset en la variable dicomFile. Si ejecutáramos la orden dicomFile en la consola de Python obtendríamos una visión del archivo DICOM en cuestión, similar a la que nos proporciona DVTk en la figura 2.

Línea 8. Creamos una instancia de la clase DataElement, es decir, un atributo. Para ello necesitamos pasar como parámetros la etiqueta del atributo, el VR y el valor que contendrá el atributo. En particular, el atributo que contiene el valor SIEMENS es el (0008, 0070) que tiene como descripción Manufacturer y corresponde al fabricante del equipo con el que se han tomado las imágenes. Por tanto, el atributo que debemos de pasar como primer parámetro es 0x00080070, (0x0008, 0x0070) o [0x0008, 0x0070], en cualquiera de las diferentes formas mostradas. Este atributo tiene como VR ’LO’, por ello aparece como segundo parámetro. Y, finalmente, el tercer parámetro es el nuevo valor que queremos darle al atributo, en este caso una cadena de carácteres vacía.

La instancia así creada se almacena en el atributo (0008, 0070) del archivo DICOM que representa la variable dicomFile, atributo que se obtiene mediante la sintaxis dicomFile[’0008’, ’0070’].

Línea 9. Finalmente, sobrescribimos el archivo DICOM que estamos modificando con la función save_as, guardándolo con el mismo nombre y en el mismo directorio que el original.

Una vez ejecutado el script, todos los archivos DICOM contenidos en la carpeta almacenada en la variable FOLDER tendrán el atributo (0008, 0070) vacío, y a la hora de importar estos archivos en ARIA ya no aparece ningún tipo de error y se pueden asociar al paciente en cuestión de forma correcta.

4  Discusión y conclusiones

Hemos resuelto el problema de importación de imágenes DICOM en ARIA con un pequeño script que apenas ocupa 9 líneas de código y que sirve de ejemplo de la potencia del paquete pydicom de Python para la edición de archivos del estándar DICOM. Sin embargo, este pequeño script ha de ejecutarse desde la consola o desde cualquier entorno de desarrollo integrado para Python, por ello, se podría extender para hacerlo más amigable con el usuario, dotándolo de una interfaz gráfica.

Eclipse

Referencias

[1] A. Barranco López, L. Sopeña Sanz, D. Nogueira Souto y A. Boria Alegre. Eclipse Scripting API, Pylinac y ARIA en una sola plataforma. Revista Electrónica de PortalesMedicos.com (en prensa).

[2] 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).

[3] 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).

[4] National Electrical Manufacturers Association (NEMA). Digital Imaging and Communications in Medicine. Recuperado en febrero de 2020 de https://www.dicomstandard.org/

[5] P. Mildenberg, M, Eichelberg y E. Martin. Itroduction to the DICOM standard. Eur Radiol (2002) 12:920-927.

[6] National Electrical Manufacturers Association (NEMA). Data Structures and Encoding. DICOM PS3.5 2019e.

[7] 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.

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

[9] Darcy Mason et al. Recuperado en febrero de 2020 de https://pypi.org/project/pydicom/

[10] National Electrical Manufacturers Association (NEMA). Data Dictionary. DICOM PS3.6 2020a.

[11] DICOM Validation Toolkit. Recuperado en febrero de 2020 de https://www.dvtk.org/