Получение тега атрибута частного поставщика C_FIND из pixelmed - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь прочитать тег частного поставщика с сервера dicom. Единственные теги, которые я могу успешно прочитать, это стандартный тег DICOM tagFromNames, тег которого 2001,100b, и в моем примере набора файлов они определенно имеют эту запись в своем заголовке

, вот код для вызова Запрос CFIND

SpecificCharacterSet specificCharacterSet = new SpecificCharacterSet((String[])null);

        AttributeList identifier = new AttributeList();

        //specify attributes to retrieve and pass in any search criteria
        //query root of "study" to retrieve studies
        studies.removeAllElements();

        identifier.putNewAttribute(TagFromName.QueryRetrieveLevel).addValue("STUDY"); 
        identifier.putNewAttribute(TagFromName.PatientName,specificCharacterSet).addValue("*");
        identifier.putNewAttribute(TagFromName.PatientID,specificCharacterSet);
        identifier.putNewAttribute(TagFromName.StudyID);
        identifier.putNewAttribute(TagFromName.PatientAge);
        identifier.putNewAttribute(TagFromName.PatientSex);
        identifier.putNewAttribute(TagFromName.ModalitiesInStudy);
        identifier.putNewAttribute(TagFromName.AccessionNumber);
        identifier.putNewAttribute(TagFromName.StudyInstanceUID);
        identifier.putNewAttribute(TagFromName.StudyDescription);
        identifier.putNewAttribute(TagFromName.StudyDate).addValue(date);
        identifier.putNewAttribute(TagFromName.StudyTime);

        AttributeTag at = new com.pixelmed.dicom.AttributeTag("0x2001,0x100b");
        identifier.putNewAttribute(at);

        IdentifierHandler ih = new IdentifierHandler(){
            @Override
            public void doSomethingWithIdentifier(AttributeList id) throws DicomException {
               studies.add(new Study(id, reportfolder));

//Attempt to read private dicom tag from received identifier
                    System.out.println(id.get(at));
            }

        };
        new FindSOPClassSCU(serv.getAddress(),serv.getPort(), serv.getAetitle(), "ISPReporter",SOPClass.StudyRootQueryRetrieveInformationModelFind,identifier,ih);

Однако мой вывод из запроса получает 7 идентификаторов, соответствующих дате, однако, когда я пытаюсь прочитать тег 2001,100b, я получаю сообщение об ошибке:

DicomException: Нет такого элемента данных, как (0x2001,0x100b) в словаре

, если я использую эту строку вместо

identifier.put(new com.pixelmed.dicom.TextAttribute(at) {
                 public int getMaximumLengthOfEntireValue() {  return 20; }
             });

Тогда я получу:

null
null
null
null
null
null
null

( null для каждого возвращенного идентификатора)

1 Ответ

2 голосов
/ 09 апреля 2020

Две вещи (второй спорный, потому что это не сработает в любом случае из-за первого):

  1. C -FIND-запросы SCP к базе данных подмножества элементов данных ранее извлеченные из заголовка изображения DICOM и проиндексированные - только (небольшое) подмножество элементов данных, присутствующих в изображениях, фактически индексируется, как описано; стандарт требует очень мало в информационных моделях запросов , а профиль запланированного рабочего процесса IHE (SWF) - еще несколько ( таблица транзакций изображений запросов 4.14-1 ; разработчики могут индексировать каждый элемент данных (или, по крайней мере, для каждого стандартного элемента данных), но это делается редко (PixelMed этого не делает, хотя я подумал об этом адаптивно, поскольку элементы данных встречаются теперь, когда hsqldb поддерживает добавление столбцов; реализации на основе SQL это может оказаться проще )

  2. Когда вы кодируете частный элемент данных, будь то в идентификаторе запроса / ответе или в заголовке изображения, вам необходимо включить его создателя, т. Е. Для (2001, 100b), вам нужно включить (2001,0010), в противном случае создатель элемента личных данных не указан.

Дэвид

...