Невозможно отправить файл dicom в dcm4che PACS - для хранения потребуется запрещенное принуждение UID экземпляра серии (0020,000E)

Я пытаюсь DICOM Отправить dicomized pdf-файл в PACS и прикрепить его к уже существующему исследованию в отдельном узле (как другая серия). Я получаю следующее исключение:

org.dcm4che.net.DcmServiceException: SOP Instance UID in Dataset [2.25.227860789054905865463149387539476701251] differs from Affected SOP Instance UID[1.3.12.2.1107.5.2.30.26419.20
15022512062559209947045]
    at org.dcm4chex.archive.dcm.storescp.StoreScp.checkSOPInstanceUID(StoreScp.java:1334)

в dizomized pdf, который я отправляю, я повторно заполнил все необходимые теги для исследования следующим кодом:

public void repopulateAnonData(String strDcmFilePath, DicomSeriesMeta dcmMeta) throws IOException {

    log.info("repopulating anonymized data for file: " + strDcmFilePath);
    CheckIfIsDicom dcmCheck = new CheckIfIsDicom();

    Path dcmFilePath = Paths.get(strDcmFilePath);

    DicomObject dcmObj6;
    DicomInputStream din6 = null;
    din6 = new DicomInputStream(dcmFilePath.toFile());
    dcmObj6 = din6.readDicomObject();

    try {

        log.info("Repopulating AccessionNumber: " + dcmMeta.getAccessionNumber());
        dcmObj6.putString(Tag.AccessionNumber, VR.SH ,dcmMeta.getAccessionNumber());

        log.info("Repopulating InstitutionAddress: " + dcmMeta.getInstitutionAddress());
        dcmObj6.putString(Tag.InstitutionAddress, VR.ST ,dcmMeta.getInstitutionAddress());

        log.info("Repopulating InstitutionName: " + dcmMeta.getInstitutionName());
        dcmObj6.putString(Tag.InstitutionName, VR.LO ,dcmMeta.getInstitutionName());

        log.info("Repopulating IssuerOfPatientID: " + dcmMeta.getIssuerOfPatientID());
        dcmObj6.putString(Tag.IssuerOfPatientID, VR.LO ,dcmMeta.getIssuerOfPatientID());

        log.info("Repopulating MediaStorageSOPInstanceUID: " + dcmMeta.getMediaStorageSOPInstanceUID());
        dcmObj6.putString(Tag.MediaStorageSOPInstanceUID, VR.UI ,dcmMeta.getMediaStorageSOPInstanceUID());

        log.info("Repopulating OperatorsName: " + dcmMeta.getOperatorsName());
        dcmObj6.putString(Tag.OperatorsName, VR.PN ,dcmMeta.getOperatorsName());

        log.info("Repopulating OtherPatientIDs: " + dcmMeta.getOtherPatientIDs());
        dcmObj6.putString(Tag.OtherPatientIDs, VR.LO ,dcmMeta.getOtherPatientIDs());

        log.info("Repopulating PatientAge: " + dcmMeta.getPatientAge());
        dcmObj6.putString(Tag.PatientAge, VR.AS ,dcmMeta.getPatientAge());

        log.info("Repopulating PatientBirthDate: " + dcmMeta.getPatientBirthDate());
        dcmObj6.putString(Tag.PatientBirthDate, VR.DA ,dcmMeta.getPatientBirthDate());

        log.info("Repopulating PatientID: " + dcmMeta.getPatientID());
        dcmObj6.putString(Tag.PatientID, VR.LO ,dcmMeta.getPatientID());

        log.info("Repopulating PatientName: " + dcmMeta.getPatientName());
        dcmObj6.putString(Tag.PatientName, VR.PN ,dcmMeta.getPatientName());

        log.info("Repopulating PatientSex: " + dcmMeta.getPatientSex());
        dcmObj6.putString(Tag.PatientSex, VR.CS ,dcmMeta.getPatientSex());

        log.info("Repopulating PhysiciansOfRecord: " + dcmMeta.getPhysiciansOfRecord());
        dcmObj6.putString(Tag.PhysiciansOfRecord,VR.PN ,dcmMeta.getPhysiciansOfRecord());

        log.info("Repopulating ReferringPhysicianName: " + dcmMeta.getReferringPhysicianName());
        dcmObj6.putString(Tag.ReferringPhysicianName, VR.PN ,dcmMeta.getReferringPhysicianName());

        log.info("Repopulating RequestingPhysician: " + dcmMeta.getRequestingPhysician());
        dcmObj6.putString(Tag.RequestingPhysician, VR.PN ,dcmMeta.getRequestingPhysician());

        //log.info("Repopulating SOPInstanceUID: " + dcmMeta.getsOPInstanceUID());
        //dcmObj6.putString(Tag.SOPInstanceUID, VR.UI ,dcmMeta.getsOPInstanceUID());

        log.info("Repopulating StudyDate: " + dcmMeta.getStudyDate());
        dcmObj6.putString(Tag.StudyDate, VR.DA ,dcmMeta.getStudyDate());

        log.info("Repopulating StudyID: " + dcmMeta.getStudyID());
        dcmObj6.putString(Tag.StudyID, VR.SH ,dcmMeta.getStudyID());

        log.info("Repopulating StudyInstanceUID: " + dcmMeta.getStudyInstanceUID());
        dcmObj6.putString(Tag.StudyInstanceUID, VR.UI,dcmMeta.getStudyInstanceUID());            

        log.info("Repopulating SeriesDescription: " + "REPORT");
        dcmObj6.putString(Tag.SeriesDescription, VR.LO,"REPORT");

        FileOutputStream fos = new FileOutputStream( new File(dcmFilePath.toString()), false);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        DicomOutputStream dos = new DicomOutputStream(bos);

        dos.writeDicomFile(dcmObj6);                

        dos.close();
        bos.close();
        fos.close();

    } catch (Exception ex) {
        log.log(Level.ERROR, null, ex);;
    } finally {
        din6.close();
        if (!dcmCheck.checkIfDicomObjectFileB(dcmFilePath.toFile())) {
                log.info("Fetched file is not a DICOM.");
        }
    }

    CheckIfIsDicom checker = new CheckIfIsDicom();
    try {
            if(checker.checkIfDicomObjectFileB(dcmFilePath.toFile())) {
                log.info("Dicomization SUCCESS!");
                ParseDicomHeader parseHeader =  new ParseDicomHeader();
                parseHeader.parseDicomHeaderFile(dcmFilePath.toFile());
            } else {
                log.info("Dicomization NOT SUCCESS!");
            }
    } catch (IOException ex) {
            log.log(Level.ERROR, null, ex);
    }            

}

Однако я не повторно заполнял SeriesInstanceUID и SOPInstanceUID, так как я хочу, чтобы файл dicom сохранялся в рамках определенного исследования в другом узле серии, но studyID такой же, как и существующее исследование (в pacs), в котором я пытаюсь сохранить этот dicom.

Однако pacs-сервер, похоже, не принимает dicom с другим SOPInstanceUID ...

Любые идеи о том, что мне не хватает?


person thanili    schedule 24.02.2015    source источник
comment
thanili, я вижу, вы отредактировали исходное исключение. Это делает обсуждение этого обсуждения очень запутанным и трудным. В любом случае ваше новое исключение указывает на то, что два совпадающих тега должны быть одинаковыми - вы пробовали сделать их одинаковыми? Ошибки DCM4CHEE обычно довольно явные и могут помочь вам в решении ваших проблем.   -  person cneller    schedule 12.03.2015


Ответы (1)


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

Если вы хотите, чтобы этот новый объект был сохранен в другом исследовании, вам потребуются другие UID экземпляра, серии и исследования. Если вы хотите использовать его в одном исследовании, но в другой серии, вам понадобятся разные UID экземпляра и серии, но идентичный UID исследования.

person cneller    schedule 24.02.2015
comment
Я действительно пытаюсь сохранить экземпляр (dicom) с тем же instanceUID и другим SeriesInstanceUID ... Я хочу сохранить в уже сохраненном исследовании в другом узле серии. Итак, чтобы добиться этого, какие другие теги dicom должны отличаться от SeriesInstanceUID (0020, 000E)? Какой тег вы имеете в виду под экземпляром ... - person thanili; 25.02.2015
comment
ты хочешь сказать, что SOPInstanceUID тоже должен быть другим? - person thanili; 25.02.2015
comment
Да, UID экземпляра SOP - person cneller; 25.02.2015