Проблема с установкой команды, заданной в ответе N_CREATE, pydicom

#dicom #pydicom #pynetdicom

Вопрос:

Я работаю над SCP MPPS, как описано здесь: MPPS SCP как базовая структура.

Я смог немного протестировать его с помощью DVTk, с некоторыми инструментами, которые доступны здесь: DVTk

Большая часть из них, похоже, работает правильно, но проблема, с которой я, похоже, сталкиваюсь, заключается в том, что в ответе предполагается, что теги с группой 0000 возвращаются в «Наборе команд», а не в самом возвращаемом наборе данных: я действительно установил их в наборе данных, просто чтобы убедиться, что получаю правильные значения, например:

 python_mpps_1         | (0000, 0000) Command Group Length  ????
python_mpps_1         | (0000, 0002) Affected SOP Class UID              UI: Modality Performed Procedure Step SOP Class
python_mpps_1         | (0000, 0100) Command Field                       US: 33088
python_mpps_1         | (0000, 0120) Message ID Being Responded To       US: 2
python_mpps_1         | (0000, 0800) Command Data Set Type               US: 0
python_mpps_1         | (0000, 0900) Status                              US: 0
python_mpps_1         | (0008, 0016) SOP Class UID                       UI: Modality Performed Procedure Step SOP Class
 

Я не совсем уверен, какой должна быть Длина группы команд, Поле команд и Тип набора данных команд, но, что более важно, я не знаю, как их правильно настроить. Я не думаю, что они должны быть установлены в наборе данных, но являются частью объекта набора команд для ответа N_CREATE:

 #     'N-CREATE-RSP': (
#         'CommandGroupLength', 'AffectedSOPClassUID', 'CommandField',
#         'MessageIDBeingRespondedTo', 'CommandDataSetType', 'Status',
#         'AffectedSOPInstanceUID',
#         'ErrorID', 'ErrorComment'
#     ),
 

Использование DVTk в качестве инструмента тестирования, MPPS.Сценарий SCU в их примерах сценариев, похоже, все работает, за исключением значений набора команд, которые не отправляются в ответе. Немного покопавшись, я думаю, что их нужно установить по-другому, но я не уверен, как это сделать.

В документации pynetdicom может быть дополнительная информация об этом (первая ссылка), но я не смог ее найти.

Комментарии:

1. Не могли бы вы опубликовать какой — нибудь код, воспроизводящий вашу проблему? pynetdicom должен автоматически устанавливать необходимые элементы набора команд

Ответ №1:

Это Command Group Length (0000,0000) общее количество байтов вашего двоичного кодированного сообщения. Обычно это должно быть установлено используемым вами инструментарием (см. Комментарий от Scaramillion).

Ваш тип команды-это N-CREATE ответ, и обычно он приходит без какого-либо набора данных. Не зная сценария DVT, я предполагаю, что ваш сценарий не ожидает, что набор данных будет присоединен к набору команд.

Т. е. SOP Class UID (0008, 0016) не должно присутствовать (оно уже является частью набора команд as Affected SOP Class UID (0000,0002) ), и Command Data Set Type (0000, 0800) должно быть установлено 0x0101 значение, указывающее, что набор данных не следует за набором команд.

По крайней мере, это имеет значение для успешной N-CREATE операции.

Комментарии:

1. Спасибо. Я думаю, что pynetdicom позаботится о наборе команд, как сказал скарамаллион. Мне придется проверить дальше, но я посмотрю. Что касается ответа, я на самом деле хочу немного изменить список attr_list, чтобы добавить некоторые элементы, которые отсутствуют в определенных ситуациях. Это связано с тем, что модальность не поддерживает заполнение всех желаемых тегов DICOM из MWL, но я могу сделать это из ответа MPPS. Я вижу, как это сделать, но это один из способов, которым можно использовать N_CREATE, чтобы слегка изменить список attr_list ?

2. Я отредактирую свой код дальше, снова протестирую и посмотрю, какой журнал снова создается в DVTk. Мне нужно будет посмотреть, сможет ли он захватить и зарегистрировать набор команд. Это хороший пакет, DVTk, даже несмотря на то, что он работает в Windows. По крайней мере, это бесплатно.

3. На самом деле, N-CREATE предназначен для SCU (Модальности), чтобы «объявить» атрибуты, которые будут установлены в сообщении N-SET. Поэтому я не вижу особой пользы в добавлении/изменении атрибутов в ответе N-CREATE. От ООП не ожидается какой-либо реакции на это в любом случае. Существует что-то вроде «принуждения атрибутов», применимого к MPPS-SCP, но это не включает отправку принудительных атрибутов обратно в SCU. То есть: для дальнейшей внутренней обработки вы можете делать все, что хотите (DICOM это не регулирует), но для связи я бы рекомендовал не отправлять дополнительные атрибуты обратно в SCU

4. Спасибо. Это полезно. Похоже, что основная цель MPPS тогда состоит в том, чтобы управлять рабочим списком, зная, когда исследование начато и когда оно завершено, а затем я могу внести изменения в исследование после отправки сообщения N_SET и выполнить некоторые базовые действия с точки зрения управления рабочими списками ? На самом деле я уже делаю что-то подобное на бэкэнде, изменяя экземпляры, когда это необходимо.

5. «принуждение атрибутов» — это на самом деле то, что меня интересует, потому что в некоторых случаях некоторые атрибуты либо будут отсутствовать (т. Е. сервер RIS или MWL был отключен), и техник может просто ввести идентификатор присоединения или базовый идентификатор, а затем исследование должно быть «исправлено», или, как в одном случае, модальность не заполняет исследование тегами, которые на самом деле находятся в файле MWL. Я так понимаю, как я «исправляю» теги, я должен обрабатывать в обработчике N_SET ?