DCM4CHEE-ARC-LIGHT - how to set folder structure in storage descriptor

1,323 views
Skip to first unread message

Docjay

unread,
Apr 3, 2018, 9:02:03 PM4/3/18
to dcm4che
Is there any way to store studes in the archive in folders that relate to the study date?

example:

c\dicom\studies\2018\01\02  (for a study with a study date of 1/2/2018)

Currently I believe it stores them in folders named for when the study was received?

thanks

gunterze

unread,
Apr 4, 2018, 5:58:30 AM4/4/18
to dcm4che
Replace Storage property
pathFormat={now,date,yyyy/MM/dd}/{0020000D,hash}/{0020000E,hash}/{00080018,hash}
by
pathFormat={00080020,date,yyyy/MM/dd}/{0020000D,hash}/{0020000E,hash}/{00080018,hash}

Docjay

unread,
Apr 5, 2018, 8:52:22 AM4/5/18
to dcm4che
Gunter,

   If I wanted to add the pateint ID to it without the hash, how would that look?

I tried what I have below, but it still used a hash of the patient ID.

pathFormat={00080020,date,yyyy/MM/dd}/{00100020}/{0020000D,hash}/{0020000E,hash}/{00080018,hash}


gunterze

unread,
Apr 9, 2018, 7:43:19 AM4/9/18
to dcm4che
Your configuration works for me:
$ dcmdump ~/wildfly-12.0.0.Final/standalone/data/fs1/null/SCSGERM/58BE7E77/9247637B/3A98E43C
0: [0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
132: (0002,0000) UL #4 [174] FileMetaInformationGroupLength
144: (0002,0001) OB #2 [0\1] FileMetaInformationVersion
158: (0002,0002) UI #26 [1.2.840.10008.5.1.4.1.1.7] MediaStorageSOPClassUID
192: (0002,0003) UI #44 [1.3.6.1.4.1.5962.1.1.0.1.1.1175775772.5723.0] MediaSt
244: (0002,0010) UI #20 [1.2.840.10008.1.2.1] TransferSyntaxUID
272: (0002,0012) UI #16 [1.2.40.0.13.1.3] ImplementationClassUID
296: (0002,0013) SH #14 [dcm4che-5.13.1] ImplementationVersionName
318: (0008,0005) CS #10 [ISO_IR 100] SpecificCharacterSet
336: (0008,0012) DA #8 [20070405] InstanceCreationDate
352: (0008,0013) TM #6 [082252] InstanceCreationTime
366: (0008,0014) UI #18 [1.3.6.1.4.1.5962.3] InstanceCreatorUID
392: (0008,0016) UI #26 [1.2.840.10008.5.1.4.1.1.7] SOPClassUID
426: (0008,0018) UI #44 [1.3.6.1.4.1.5962.1.1.0.1.1.1175775772.5723.0] SOPInst
478: (0008,0020) DA #0 [] StudyDate
486: (0008,0030) TM #0 [] StudyTime
494: (0008,0050) SH #0 [] AccessionNumber
502: (0008,0060) CS #2 [OT] Modality
512: (0008,0064) CS #4 [WSD] ConversionType
524: (0008,0070) LO #0 [] Manufacturer
532: (0008,0090) PN #4 [^^^^] ReferringPhysicianName
544: (0008,0201) SH #6 [-0400] TimezoneOffsetFromUTC
558: (0010,0010) PN #14 [Äneas^Rüdiger] PatientName
580: (0010,0020) LO #8 [SCSGERM] PatientID
:

Piero Chiacchiaretta

unread,
Apr 10, 2018, 9:37:13 AM4/10/18
to dcm4che
Hi i reproduced the error but i don’t understand the log error:

2018-04-10 14:49:31,957 INFO  [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-26) DCM4CHEE<-MR_3T(29) >> 557:C-STORE-RQ[pcid=5, prior=0
  cuid=1.2.840.10008.5.1.4.1.1.4.1 - Enhanced MR Image Storage
  iuid=1.3.46.670589.11.17514.5.20.1.1.5204.2018040917225036647 - ?
  tsuid=1.2.840.10008.1.2.1 - Explicit VR Little Endian


2018-04-10 14:59:08,867 WARN  [org.dcm4chee.arc.store.impl.StoreServiceImpl] (EE-ManagedExecutorService-default-Thread-26) DCM4CHEE<-MR_3T(29): Failed to parse received object:
: java.io.EOFException
at org.dcm4che3.util.StreamUtils.readFully(StreamUtils.java:74)
at org.dcm4che3.net.PDUDecoder.readFully(PDUDecoder.java:225)
at org.dcm4che3.net.PDUDecoder.readPDU(PDUDecoder.java:220)
at org.dcm4che3.net.PDUDecoder.nextPDU(PDUDecoder.java:176)
at org.dcm4che3.net.PDUDecoder.nextPDV(PDUDecoder.java:510)
at org.dcm4che3.net.PDUDecoder.isLastPDV(PDUDecoder.java:538)
at org.dcm4che3.net.PDUDecoder.read(PDUDecoder.java:561)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at org.dcm4che3.io.DicomInputStream.read(DicomInputStream.java:367)
at org.dcm4che3.util.StreamUtils.copy(StreamUtils.java:104)
at org.dcm4che3.imageio.codec.Transcoder.copyPixelData(Transcoder.java:418)
at org.dcm4che3.imageio.codec.Transcoder.processPixelData(Transcoder.java:386)
at org.dcm4che3.imageio.codec.Transcoder.access$200(Transcoder.java:72)
at org.dcm4che3.imageio.codec.Transcoder$1.readValue(Transcoder.java:337)
at org.dcm4che3.io.DicomInputStream.readAttributes(DicomInputStream.java:533)
at org.dcm4che3.imageio.codec.Transcoder.transcode(Transcoder.java:321)
at org.dcm4chee.arc.store.impl.StoreServiceImpl.store(StoreServiceImpl.java:179)
at org.dcm4chee.arc.store.impl.StoreServiceImpl$Proxy$_$$_WeldClientProxy.store(Unknown Source)
at org.dcm4chee.arc.store.scp.CStoreSCP.store(CStoreSCP.java:36)
at org.dcm4che3.net.service.BasicCStoreSCP.onDimseRQ(BasicCStoreSCP.java:72)
at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:38)
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)
at org.dcm4che3.net.service.DicomService$1735744439$Proxy$_$$_WeldClientProxy.onDimseRQ(Unknown Source)
at org.dcm4che3.net.service.DicomServiceRegistry.onDimseRQ(DicomServiceRegistry.java:86)
at org.dcm4che3.net.ApplicationEntity.onDimseRQ(ApplicationEntity.java:459)
at org.dcm4che3.net.Association.onDimseRQ(Association.java:696)
at org.dcm4che3.net.PDUDecoder.decodeDIMSE(PDUDecoder.java:459)
at org.dcm4che3.net.Association.handlePDataTF(Association.java:679)
at org.dcm4che3.net.State$4.onPDataTF(State.java:103)
at org.dcm4che3.net.Association.onPDataTF(Association.java:675)
at org.dcm4che3.net.PDUDecoder.nextPDU(PDUDecoder.java:177)
at org.dcm4che3.net.Association$2.run(Association.java:518)
at org.jboss.as.ee.concurrent.ControlPointUtils$ControlledRunnable.run(ControlPointUtils.java:105)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.glassfish.enterprise.concurrent.internal.ManagedFutureTask.run(ManagedFutureTask.java:141)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
at org.glassfish.enterprise.concurrent.ManagedThreadFactoryImpl$ManagedThread.run(ManagedThreadFactoryImpl.java:250)
at org.jboss.as.ee.concurrent.service.ElytronManagedThreadFactory$ElytronManagedThread.run(ElytronManagedThreadFactory.java:78)

2018-04-10 14:59:08,901 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-26) DCM4CHEE<-MR_3T(29): processing 557:C-STORE-RQ[pcid=5, prior=0
  cuid=1.2.840.10008.5.1.4.1.1.4.1 - Enhanced MR Image Storage
  iuid=1.3.46.670589.11.17514.5.20.1.1.5204.2018040917225036647 - ?
  tsuid=1.2.840.10008.1.2.1 - Explicit VR Little Endian failed. Caused by: : org.dcm4che3.net.service.DicomServiceException: java.io.EOFException
at org.dcm4chee.arc.store.impl.StoreServiceImpl.store(StoreServiceImpl.java:186)
at org.dcm4chee.arc.store.impl.StoreServiceImpl$Proxy$_$$_WeldClientProxy.store(Unknown Source)
at org.dcm4chee.arc.store.scp.CStoreSCP.store(CStoreSCP.java:36)
at org.dcm4che3.net.service.BasicCStoreSCP.onDimseRQ(BasicCStoreSCP.java:72)
at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:38)
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)
at org.dcm4che3.net.service.DicomService$1735744439$Proxy$_$$_WeldClientProxy.onDimseRQ(Unknown Source)
at org.dcm4che3.net.service.DicomServiceRegistry.onDimseRQ(DicomServiceRegistry.java:86)
at org.dcm4che3.net.ApplicationEntity.onDimseRQ(ApplicationEntity.java:459)
at org.dcm4che3.net.Association.onDimseRQ(Association.java:696)
at org.dcm4che3.net.PDUDecoder.decodeDIMSE(PDUDecoder.java:459)
at org.dcm4che3.net.Association.handlePDataTF(Association.java:679)
at org.dcm4che3.net.State$4.onPDataTF(State.java:103)
at org.dcm4che3.net.Association.onPDataTF(Association.java:675)
at org.dcm4che3.net.PDUDecoder.nextPDU(PDUDecoder.java:177)
at org.dcm4che3.net.Association$2.run(Association.java:518)
at org.jboss.as.ee.concurrent.ControlPointUtils$ControlledRunnable.run(ControlPointUtils.java:105)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.glassfish.enterprise.concurrent.internal.ManagedFutureTask.run(ManagedFutureTask.java:141)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
at org.glassfish.enterprise.concurrent.ManagedThreadFactoryImpl$ManagedThread.run(ManagedThreadFactoryImpl.java:250)
at org.jboss.as.ee.concurrent.service.ElytronManagedThreadFactory$ElytronManagedThread.run(ElytronManagedThreadFactory.java:78)
Caused by: java.io.EOFException
at org.dcm4che3.util.StreamUtils.readFully(StreamUtils.java:74)
at org.dcm4che3.net.PDUDecoder.readFully(PDUDecoder.java:225)
at org.dcm4che3.net.PDUDecoder.readPDU(PDUDecoder.java:220)
at org.dcm4che3.net.PDUDecoder.nextPDU(PDUDecoder.java:176)
at org.dcm4che3.net.PDUDecoder.nextPDV(PDUDecoder.java:510)
at org.dcm4che3.net.PDUDecoder.isLastPDV(PDUDecoder.java:538)
at org.dcm4che3.net.PDUDecoder.read(PDUDecoder.java:561)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at org.dcm4che3.io.DicomInputStream.read(DicomInputStream.java:367)
at org.dcm4che3.util.StreamUtils.copy(StreamUtils.java:104)
at org.dcm4che3.imageio.codec.Transcoder.copyPixelData(Transcoder.java:418)
at org.dcm4che3.imageio.codec.Transcoder.processPixelData(Transcoder.java:386)
at org.dcm4che3.imageio.codec.Transcoder.access$200(Transcoder.java:72)
at org.dcm4che3.imageio.codec.Transcoder$1.readValue(Transcoder.java:337)
at org.dcm4che3.io.DicomInputStream.readAttributes(DicomInputStream.java:533)
at org.dcm4che3.imageio.codec.Transcoder.transcode(Transcoder.java:321)
at org.dcm4chee.arc.store.impl.StoreServiceImpl.store(StoreServiceImpl.java:179)
... 27 more

2018-04-10 14:59:08,902 INFO  [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-26) DCM4CHEE<-MR_3T(29) << 557:C-STORE-RSP[pcid=5, status=110H, errorComment=java.io.EOFException
  tsuid=1.2.840.10008.1.2.1 - Explicit VR Little Endian
2018-04-10 14:59:08,902 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-26) DCM4CHEE<-MR_3T(29): i/o exception: java.io.EOFException in State: Sta6 - Association established and ready for data transfer
2018-04-10 14:59:08,903 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-26) DCM4CHEE<-MR_3T(29): close Socket[addr=172.18.0.1/172.18.0.1,port=49052,localport=11112]
2018-04-10 14:59:26,105 INFO  [org.dcm4che3.net.audit.AuditLogger] (EE-ManagedScheduledExecutorService-default-Thread-1) Send audit message to Socket[addr=logstash/172.18.0.5,port=8514,localport=60159]

please can help me?
--
You received this message because you are subscribed to the Google Groups "dcm4che" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dcm4che+u...@googlegroups.com.
To post to this group, send email to dcm...@googlegroups.com.
Visit this group at https://groups.google.com/group/dcm4che.
For more options, visit https://groups.google.com/d/optout.

Santiago Gala

unread,
Jun 16, 2020, 5:08:53 PM6/16/20
to dcm4che
On Wednesday, April 4, 2018 at 11:58:30 AM UTC+2 gunterze wrote:
Replace Storage property
pathFormat={now,date,yyyy/MM/dd}/{0020000D,hash}/{0020000E,hash}/{00080018,hash}
by
pathFormat={00080020,date,yyyy/MM/dd}/{0020000D,hash}/{0020000E,hash}/{00080018,hash}

Resurrecting this old question to ask something:

Study Date (00080020) is a Type 2 Required Data Element. The standard says "it is permissible that if a Value for a Type 2 element is unknown it can be encoded with zero Value Length and no Value."

My question is, how will the archive deal with such a case? What will it do if it encounters an empty or unparseable 00080020 value?

We are interested in using this kind of path format in places where they like to take objects offline after retention time, but are subject to frequent requests to recover some studies and it simplifies their administrative workflow having a precise path per Study Date.

Regards
Santiago
Reply all
Reply to author
Forward
0 new messages