Wie erhalte ich eine Liste aller SOP-Instanzen, die während eines C-MOVE-Aufrufs nicht erfolgreich abgerufen wurden?

Dec 22 2020

Ich verwende PyNetDicom, um Bilder von einem PACS-Server herunterzuladen (C-MOVE). Ich habe eine SCU implementiert, die C-MOVE-Anforderungen an PACS sendet, und einen SCP, der die C-STORE-Anforderungen empfängt.

Ich lade ganze Studien herunter, dh einige tausend DICOM-Bilder gleichzeitig. Aus irgendeinem Grund bekomme ich einige von ihnen nicht. Die Antworten, die ich von den C-MOVE-Anfragen erhalte, zeigen, wie viele Bilder erfolgreich gesendet wurden und wie viele fehlgeschlagen sind (sowie wie viele in Bearbeitung sind und Warnungen).

Ich möchte nicht nur wissen, wie viele fehlgeschlagen sind, sondern auch, welche fehlgeschlagen sind, was bedeutet, dass ich die UID-Liste der fehlgeschlagenen SOP-Instanzen erhalten möchte. Dies ist der relevante Teil meines Codes:

# 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

Dies funktioniert nicht, die Kennung ist immer None , auch wenn status.Statusangezeigt wird, dass der Vorgang fehlgeschlagen ist. Mache ich etwas falsch oder ist das PACS, mit dem ich assoziiere, nicht DICOM-konform?

Antworten

3 AmitJoshi Dec 22 2020 at 11:40

Es gibt keine Möglichkeit, die Kennung (SOP-Instanz-UID) für fehlgeschlagene Instanzen abzurufen, wenn Sie als C-MOVE-SCU fungieren.

  1. Sie können entweder C-MOVE SCP aktivieren, um die Details / Protokolle separat abzurufen (von DICOM).
  2. Wenn der Fehler in Ihrem C-STORE SCP aufgetreten ist, überprüfen Sie die Protokolle oder Details dort. Dies ist möglicherweise nicht hilfreich, wenn bei C-STORE SCU (einem anderen System) ein Fehler aufgetreten ist. Sie müssen diese erneut aktivieren.

Nicht gerade eine Lösung, aber Sie können die Abfrage auf SERIES-Ebene (C-FIND) vor C-MOVE ausführen und die Anzahl der Instanzen ( NumberOfSeriesRelatedInstances) abrufen, die im Voraus abgerufen werden sollen. Dies gibt aber nur eine Zählung; nicht die Kennung. Gleiches gilt für Abfragen auf STUDY- und PATIENTEN-Ebene.

In diesem Fall ist die Speicherverpflichtung möglicherweise nicht hilfreich, da auf Ihrem System wiederum keine Instanzen vorhanden sind. Sie kennen die Bezeichner nicht.

Mit der Abfrage auf IMAGE-Ebene (C-FIND) können Sie die UID der Serieninstanz weitergeben und die Liste der Instanzen für diese Serie abrufen. Ich bin jedoch auf einige Systeme gestoßen, die auch die SOP-Instanz-UID erzwingen. Wenn ein anderes System in Ihrem Fall dies unterstützt, können Sie Folgendes tun:

  • Führen Sie Schritt für Schritt eine Abfrage auf PATIENTEN-, STUDIEN-, SERIEN- und BILD-Ebene (C-FIND) durch. Weitere Informationen finden Sie in dieser Antwort.
  • Speichern Sie die Ausgabe irgendwo (In-Memory-Liste oder Datenbank oder was auch immer).
  • Führen Sie Ihren regulären C-MOVE durch und vergleichen Sie die empfangenen Instanzen mit Ihrer gespeicherten Liste. Was fehlt, ist die Liste dessen, wonach Sie suchen.

Um Ihren Kommentar zu beantworten:

Ich habe den Failed SOP Instance UID List (0008,0058)Tag verpasst .

C.4.2.1.4.2 Struktur der Antwortkennung
Die UID-Liste der fehlgeschlagenen SOP-Instanzen (0008,0058) gibt eine Liste der UIDs der SOP-Instanzen der C-STORE-Unteroperation an, für die diese C-MOVE-Operation fehlgeschlagen ist. Eine Kennung in einer C-MOVE-Antwort muss bedingt die UID-Liste der fehlgeschlagenen SOP-Instanzen (0008,0058) enthalten, die auf dem C-MOVE-Antwortstatuswert basiert. Wenn keine C-STORE-Unteroperation fehlgeschlagen ist, fehlt die UID-Liste der fehlgeschlagenen SOP-Instanzen (0008,0058), und daher wird in der C-MOVE-Antwort kein Datensatz gesendet.
Referenz: DICOM PS3.4 2020e - Serviceklassenspezifikationen

Es scheint, dass es Ihren Job machen sollte. Aber ehrlich gesagt bin ich nie auf den C-MOVE SCP gestoßen (oder habe ihn nicht bemerkt), der eine solche Liste fehlgeschlagener Instanzen sendet. Von Ihrem Code erhalten Sie auch keine Daten. Ich werde empfehlen, sich nicht darauf zu verlassen.