Как создать DICOM MWL-запрос, используя dcm4che3 в Java? - PullRequest
1 голос
/ 30 мая 2019

Я создаю клиент DICOM с использованием библиотеки dcm4che3, и меня немного смущает, как я должен создавать запрос dicom.Я вызываю метод CFIND для класса Association.

Я выяснил, как создать базовый запрос (например, поиск по PatientID) следующим образом:

Attributes query = new Attributes();
query.setString(Tag.PatientID, VR.LO, "12345");

Итакпока все хорошо.

Но когда я хочу сделать запрос, используя что-то вроде ScheduledProcedureStepStartDate, мне нужно создать последовательность с подзапросом, например, так:

Attributes query = new Attributes();
Sequence sequence = query.newSequence(Tag.ScheduledProcedureStepSequence, 1);
Attributes subQuery = new Attributes();
subQuery.setDate(Tag.ScheduledProcedureStepStartDate, VR.DA, date);
sequence.add(subQuery);

Я незнать формат DICOM в деталях.Так что я понял это методом проб и ошибок, используя другой эмулятор клиента DICOM и перехватывая его запросы, чтобы попытаться выяснить, как он работает.

Итак, у меня есть 3 вопроса:

  1. Как я могу запросить ScheduledProcedureStepStartDate между двумя датами (т. Е. С использованием даты От и До).
  2. При создании запроса можно ли из библиотеки dcm4che3 выяснитькак сделать последовательности, чтобы я мог просто указать тег, VR и значение, которое я хочу в запросе?
  3. Когда я запрашиваю, используя элементы последовательности (например, ScheduledProcedureStepSequence -> Modality), это не 'Кажется, не работает.Есть ли какая-нибудь хитрость, чтобы заставить это работать?

1 Ответ

1 голос
/ 31 мая 2019
  1. Как запросить ScheduledProcedureStepStartDate между двумя датами (т. Е. С использованием даты От и До).

The *Элемент 1010 *Scheduled Procedure Step Start Date (0040,0002) является частью Scheduled Procedure Step Sequence (0040,0100).Это поддерживает Комбинированное сопоставление диапазонов .

Комбинированные ключи для даты и времени объединяются.Например, Дата обучения «20060705-20060707» и Время обучения «1000-1800» будут соответствовать периоду времени 5 июля с 10:00 до 7 июля 18:00 вместо трех периодов с 10:00 до 18:00 каждогоот 5 июля, 6 июля и 7 июля.

Таким образом, вы можете указать две даты, разделенные дефисом (-), для поиска между двумя датами.Пример приведен в цитате выше.

При создании запроса можно ли в библиотеке dcm4che3 выяснить, как создавать последовательности, чтобы я мог просто указать тег, VR и значение, которое я хочу в запросе?

иерархия элементов DICOM очень проста;вызывающий может легко создавать последовательности по мере необходимости.В большинстве случаев MWL-запрос содержит только одну упомянутую вами последовательность.

Для того, что вы запрашиваете, требуется оболочка над базовым классом набора данных.Наиболее широко используемые наборы инструментов не поддерживают обертку над набором данных DICOM для упрощения обработки последовательности;Я знаю, мало кто делает.Я не эксперт в инструментарии;но AFAIK, такой оболочки не существует для dcm4che.Вы должны сами создавать и управлять элементами последовательности.

Когда я запрашиваю, используя элементы Sequence (например, ScheduledProcedureStepSequence -> Modality), это не работает.Есть какой-нибудь трюк, чтобы заставить эту работу?

Это не ясно;« это не похоже на работу » не объясняет этого.Элемент Sequence содержит Item.Item содержит дополнительные элементы.Каждый Item может снова рассматриваться как набор данных.

Ниже показано, как должен выглядеть ваш запрос:

MQL Query

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

...