Java 无法将dicom文件发送到dcm4che PACS-存储将需要禁止强制(002000E)系列实例UID
我正在尝试DICOM向PACS发送一个经编辑的pdf文件,并将其附加到一个单独节点(作为不同系列)中已经存在的研究中。我得到的例外情况如下:Java 无法将dicom文件发送到dcm4che PACS-存储将需要禁止强制(002000E)系列实例UID,java,dicom,dcm4che,Java,Dicom,Dcm4che,我正在尝试DICOM向PACS发送一个经编辑的pdf文件,并将其附加到一个单独节点(作为不同系列)中已经存在的研究中。我得到的例外情况如下: 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.2
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与我尝试存储此dicom的现有研究(在pacs中)相同
但是,pacs服务器似乎不接受具有不同SOPInstanceUID的dicom
您知道我遗漏了什么吗?问题是您正在存储一个实例,其实例UID已经在存档中。存档拒绝它,因为存储将与该实例的现有series实例UID冲突
如果希望将此新对象存储在不同的研究中,则需要不同的实例、系列和研究UID。如果您希望它位于同一研究中但不同的系列,则需要不同的实例和系列UID,但需要相同的研究UID。问题在于您正在存储一个实例,该实例的实例UID已经在存档中。存档拒绝它,因为存储将与该实例的现有series实例UID冲突
如果希望将此新对象存储在不同的研究中,则需要不同的实例、系列和研究UID。如果您希望它位于同一研究中,但不同的系列则需要不同的实例和系列UID,但需要相同的研究UID。我确实在尝试使用相同的实例UID和不同的系列INSTANCEID存储实例(dicom)。。。我想存储到另一个系列节点中已存储的研究中。那么要实现这一点,除了SerieInstanceUID(002000E)之外,还有哪些其他dicom标签应该不同呢?您所说的实例是指哪个标记…您的意思是SOPInstanceUID也应该不同吗?是的,SOP instanceUID确实正在尝试使用相同的instanceUID和不同的SeriesInstanceUID存储实例(dicom)。。。我想存储到另一个系列节点中已存储的研究中。那么要实现这一点,除了SerieInstanceUID(002000E)之外,还有哪些其他dicom标签应该不同呢?你所说的实例是指哪个标记…你的意思是SOPInstanceUID也应该不同吗?是的,SOP instance UIDthanili,我看到你编辑了原始异常。这使得下面的讨论非常混乱和困难。无论如何,您的新异常表明两个匹配的标记应该是相同的-您是否尝试过使它们相同?DCM4CHEE中的错误通常非常明确,应该能够帮助您解决问题。thanili,我看到您编辑了原始异常。这使得下面的讨论非常混乱和困难。无论如何,您的新异常表明两个匹配的标记应该是相同的-您是否尝试过使它们相同?DCM4CHEE的错误通常非常明确,应该能够帮助您解决问题。