Comment obtenir une liste de toutes les instances SOP qui n'ont pas été récupérées avec succès lors d'un appel C-MOVE?
J'utilise PyNetDicom pour télécharger des images (C-MOVE) à partir d'un serveur PACS. J'ai implémenté un SCU qui envoie des requêtes C-MOVE à PACS, et un SCP qui reçoit les requêtes C-STORE.
Je télécharge des études entières, c'est-à-dire quelques milliers d'images DICOM à la fois. Pour une raison quelconque, je n'en reçois pas certains. Les réponses que j'obtiens des requêtes C-MOVE montrent combien d'images ont été envoyées avec succès et combien ont échoué (ainsi que combien sont en cours, plus les avertissements).
J'aimerais savoir non seulement combien ont échoué, mais aussi lesquels ont échoué, ce qui signifie que je veux obtenir la liste des UID d'instance SOP ayant échoué. C'est la partie pertinente de mon code:
# 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
Cela ne fonctionne pas, l'identifiant est toujours None
, même si cela status.Status
montre que l'opération a échoué. Est-ce que je fais quelque chose de mal ou est-ce que le PACS que j'associe n'est pas compatible DICOM?
Réponses
Il n'existe aucun moyen d'obtenir l'identifiant (UID d'instance SOP) pour les instances ayant échoué lorsque vous agissez en tant que C-MOVE SCU.
- Vous pouvez soit engager C-MOVE SCP pour obtenir les détails / journaux séparément (en dehors de DICOM).
- Si l'échec était sur votre C-STORE SCP, vérifiez les journaux ou les détails. Cela peut ne pas être utile si l'échec s'est produit sur C-STORE SCU (autre système), vous devez les réactiver.
Ce n'est pas exactement une solution, mais vous pouvez effectuer la requête de niveau SERIES (C-FIND) avant C-MOVE et obtenir le nombre d'instances ( NumberOfSeriesRelatedInstances
) à extraire à l'avance. Mais cela ne donne qu'un compte; pas l'identifiant. Il en va de même pour les requêtes de niveau ÉTUDE et PATIENT.
L'engagement de stockage peut ne pas être utile dans ce cas car, là encore, les instances n'existent pas sur votre système; vous ne connaissez pas les identifiants.
Avec la requête de niveau IMAGE (C-FIND), vous pouvez transmettre l'UID d'instance de série et obtenir la liste des instances de cette série. Mais, je suis tombé sur certains systèmes qui forcent également l'UID d'instance SOP. Si un autre système de votre cas prend en charge cela, vous pouvez effectuer les opérations suivantes:
- Faites une requête de niveau PATIENT, ÉTUDE, SÉRIE et IMAGE (C-FIND) étape par étape. Vous pouvez vous référer à cette réponse pour plus de détails.
- Stockez la sortie quelque part (liste en mémoire ou base de données ou autre).
- Faites votre C-MOVE habituel et comparez les instances reçues avec votre liste stockée. Ce qui manque, c'est la liste de ce que vous recherchez.
Pour répondre à votre commentaire:
J'ai raté l' Failed SOP Instance UID List (0008,0058)
étiquette.
C.4.2.1.4.2 Structure des identificateurs de réponse
La liste des UID des instances SOP ayant échoué (0008,0058) spécifie une liste des UID des instances SOP de la sous-opération C-STORE pour lesquelles cette opération C-MOVE a échoué. Un identificateur dans une réponse C-MOVE doit contenir conditionnellement la liste des UID d'instance SOP ayant échoué (0008 0058) basée sur la valeur de l'état de la réponse C-MOVE. Si aucune sous-opération C-STORE n'a échoué, la liste UID d'instance SOP ayant échoué (0008 0058) est absente et, par conséquent, aucun ensemble de données ne doit être envoyé dans la réponse C-MOVE.
Référence: DICOM PS3.4 2020e - Spécifications de la classe de service
Il semble que cela devrait faire votre travail. Mais franchement, je n'ai jamais rencontré (ou n'ai pas remarqué) le SCP C-MOVE qui envoie une telle liste d'instances ayant échoué. À partir de votre code, vous ne recevez pas non plus les données. Je recommanderai de ne pas s'y fier.