2015-02-24 24 views
0

強制我試圖DICOM發送一個dicomized pdf文件到PACS並將其附加到一個已經存在的研究在一個單獨的節點(作爲不同的系列)。唯一的例外,我得到如下:未能發送dicom文件到dcm4che PACS - 存儲將需要禁止(0020,000E)系列實例UID

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 ...

的我失去了什麼任何想法?

+0

thanili,我看到你編輯了原始的異常。這使得這個討論非常混亂和困難。無論如何,你的新例外表明,兩個匹配的標籤應該是相同的 - 你有沒有試圖讓它們相同?來自DCM4CHEE的錯誤通常很明確,應該能夠幫助您解決問題。 – cneller 2015-03-11 21:06:38

回答

4

問題是,您正在存儲一個實例,該實例的UID已存在於存檔中。歸檔文件拒絕它,因爲存儲將與該實例的現有系列實例UID相沖突。

如果你想存儲在不同的研究這個新的對象,然後,你需要不同的實例,系列研究的UID。如果你想在同一研究中,但不同系列那麼你需要不同的實例和系列的UID,但一個相同的研究UID。

+0

我確實試圖存儲具有相同instanceUID和不同SeriesInstanceUID的實例(dicom)...我想將其存儲到已存儲在不同系列節點中的研究中。因此,除了SeriesInstanceUID(0020,000E)之外,爲了達到這個目標,其他的dicom標籤應該是不同的?你的意思是哪個標籤的實例... – thanili 2015-02-24 22:02:39

+0

你的意思是說SOPInstanceUID也應該是不同的? – thanili 2015-02-24 22:59:22

+1

是的,SOP實例UID – cneller 2015-02-25 14:27:52

相關問題