Как получить список всех экземпляров SOP, которые не были успешно получены во время вызова C-MOVE?

Dec 22 2020

Я использую PyNetDicom для загрузки изображений (C-MOVE) с сервера PACS. Я реализовал SCU, который отправляет запросы C-MOVE в PACS, и SCP, который получает запросы C-STORE.

Я загружаю целые исследования, то есть несколько тысяч изображений DICOM за раз. Некоторые из них я почему-то не получаю. Ответы, которые я получаю на запросы C-MOVE, показывают, сколько изображений было отправлено успешно, а сколько не удалось (а также сколько изображений находится в процессе, а также какие-либо предупреждения).

Я хотел бы знать не только сколько из них не удалось, но и какие из них не удалось, то есть я хочу получить список UID экземпляров Failed SOP. Это соответствующая часть моего кода:

# 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

Это не работает, идентификатор есть всегда None , даже когда status.Statusпоказывает, что операция не удалась. Я что-то делаю не так, или PACS, с которым я связываюсь, не совместим с DICOM?

Ответы

3 AmitJoshi Dec 22 2020 at 11:40

Невозможно получить идентификатор (UID экземпляра SOP) для отказавших экземпляров, когда вы действуете как C-MOVE SCU.

  1. Вы можете либо задействовать C-MOVE SCP, чтобы получить детали / журналы отдельно (из DICOM).
  2. Если сбой произошел на вашем C-STORE SCP, проверьте журналы или подробную информацию там. Это может быть бесполезно, если сбой произошел в C-STORE SCU (другой системе), вам нужно задействовать их снова.

Не совсем решение, но вы можете выполнить запрос уровня SERIES (C-FIND) перед C-MOVE и NumberOfSeriesRelatedInstancesзаранее получить количество экземпляров ( ), которые будут извлечены. Но это только дает счет; не идентификатор. То же самое верно для запросов уровня ИССЛЕДОВАНИЯ и ПАЦИЕНТА.

Обязательство по хранению может быть бесполезным в этом случае, потому что, опять же, в вашей системе не существует экземпляров; вы не знаете идентификаторов.

С помощью запроса уровня IMAGE (C-FIND) вы можете передать UID экземпляра серии и получить список экземпляров для этой серии. Но я встречал некоторые системы, которые также используют UID экземпляра SOP. Если другая система в вашем случае поддерживает это, вы можете сделать следующее:

  • Выполните шаг за шагом запрос на уровне ПАЦИЕНТА, ИССЛЕДОВАНИЯ, СЕРИИ и ИЗОБРАЖЕНИЯ (C-FIND). Вы можете обратиться к этому ответу для получения более подробной информации.
  • Сохраните вывод где-нибудь (список в памяти, база данных или что-то еще).
  • Сделайте свой обычный C-MOVE и сравните полученные экземпляры с вашим сохраненным списком. Все, чего не хватает, - это список того, что вы ищете.

Чтобы ответить на ваш комментарий:

Я пропустил Failed SOP Instance UID List (0008,0058)метку.

C.4.2.1.4.2 Структура идентификатора ответа
Список UID отказавшего экземпляра SOP (0008,0058) определяет список UID экземпляров SOP подоперации C-STORE, для которых эта операция C-MOVE не удалась. Идентификатор в ответе C-MOVE должен условно содержать список UID отказавшего экземпляра SOP (0008,0058) на основе значения статуса ответа C-MOVE. Если ни одна из подопераций C-STORE не завершилась неудачно, список UID экземпляра Failed SOP (0008,0058) отсутствует, и поэтому в ответе C-MOVE не должен передаваться набор данных.
Ссылка: DICOM PS3.4 2020e - Спецификации классов обслуживания

Похоже, он должен делать вашу работу. Но, честно говоря, я никогда не встречал (или не замечал) SCP C-MOVE, который отправляет такой список неудачных экземпляров. Из вашего кода вы также не получаете данные. Рекомендую не полагаться на это.