¿Cómo obtener una lista de todas las instancias de SOP que no se recuperaron correctamente durante una llamada C-MOVE?
Estoy usando PyNetDicom para descargar imágenes (C-MOVE) de un servidor PACS. Implementé una SCU que envía solicitudes C-MOVE a PACS y una SCP que recibe las solicitudes C-STORE.
Descargo estudios completos, es decir, varios miles de imágenes DICOM a la vez. Por alguna razón, no recibo algunos de ellos. Las respuestas que recibo de las solicitudes de C-MOVE muestran cuántas imágenes se enviaron correctamente y cuántas fallaron (así como cuántas están en progreso, además de las advertencias).
Me gustaría saber no sólo cuántos falló, sino también el que los fracasado, lo que significa que quiero obtener el SOP Lista UID Instancia no. Esta es la parte relevante de mi código:
# Not shown: Implementation of association (assoc) and making a dataset to query PACS (query_dataset)
responses = assoc.send_c_move(query_dataset, b'NAME_OF_STORAGE_SCP', StudyRootQueryRetrieveInformationModelMove)
for (status, identifier) in responses:
# This works
remaining_operations = status.NumberOfRemainingOperations
completed_operations = status.NumberOfCompletedOperations
failed_operations = status.NumberOfFailedOperations
warning_operations = status.NumberOfWarningOperations
if identifier:
failed_UID_list = identifier.FailedSOPInstanceUIDList # This does not work
Esto no funciona, el identificador es siempre None
, incluso cuando status.Status
muestra que la operación falló. ¿Estoy haciendo algo mal o el PACS con el que me estoy asociando no es compatible con DICOM?
Respuestas
No hay forma de obtener el identificador (UID de instancia SOP) para instancias fallidas cuando actúa como C-MOVE SCU.
- Puede activar C-MOVE SCP para obtener los detalles / registros por separado (fuera de DICOM).
- Si la falla estaba en su C-STORE SCP, verifique los registros o los detalles allí. Esto puede no ser útil si la falla fue en C-STORE SCU (otro sistema), debe activarlos nuevamente.
No es exactamente una solución, pero puede hacer la consulta de nivel SERIES (C-FIND) antes de C-MOVE y obtener el recuento de instancias ( NumberOfSeriesRelatedInstances
) que se extraerán por adelantado. Pero esto solo da una cuenta; no el identificador. Lo mismo ocurre con las consultas de nivel ESTUDIO y PACIENTE.
El compromiso de almacenamiento puede no ser útil en este caso porque, nuevamente, las instancias no existen en su sistema; no conoce los identificadores.
Con la consulta de nivel de IMAGEN (C-FIND), puede pasar el UID de instancia de serie y obtener la lista de instancias para esa serie. Pero, me he encontrado con algunos sistemas que también fuerzan el UID de instancia de SOP. Si otro sistema en su caso lo admite, puede hacer lo siguiente:
- Realice una consulta a nivel de PACIENTE, ESTUDIO, SERIE e IMAGEN (C-FIND) paso a paso. Puede consultar esta respuesta para obtener más detalles.
- Almacene la salida en algún lugar (lista en memoria o base de datos o lo que sea).
- Realice su C-MOVE habitual y compare las instancias recibidas con su lista almacenada. Lo que falta es la lista de lo que está buscando.
Para responder a su comentario:
Perdí la Failed SOP Instance UID List (0008,0058)
etiqueta.
C.4.2.1.4.2 Estructura del identificador de respuesta
La lista de UID de instancia SOP fallida (0008,0058) especifica una lista de UID de las instancias SOP de suboperación C-STORE para las que ha fallado esta operación C-MOVE. Un identificador en una respuesta C-MOVE contendrá condicionalmente la lista de UID de instancia SOP fallida (0008,0058) basada en el valor de estado de la respuesta C-MOVE. Si no falla ninguna suboperación C-STORE, la lista de UID de instancia SOP fallida (0008,0058) está ausente y, por lo tanto, no se enviará ningún conjunto de datos en la respuesta C-MOVE.
Referencia: DICOM PS3.4 2020e - Especificaciones de clase de servicio
Parece que debería hacer tu trabajo. Pero, francamente, nunca encontré (o no me di cuenta) el C-MOVE SCP que envía tal lista de instancias fallidas. De su código, tampoco está recibiendo los datos. Recomendaré no confiar en él.