Skip to search.

Breaking News Visit Yahoo! News for the latest.

×Close this window

pixelmed_dicom · PixelMed Dicom Toolkit

The Yahoo! Groups Product Blog

Check it out!

Group Information

  • Members: 315
  • Category: Open Source
  • Founded: Oct 15, 2005
  • Language: English
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Message search is now enhanced, find messages faster. Take it for a spin.

Messages

Advanced
Messages Help
Messages 463 - 492 of 1134   Oldest  |  < Older  |  Newer >  |  Newest
Messages: Show Message Summaries Sort by Date ^  
#463 From: "jimirrer" <irrer@...>
Date: Thu Oct 4, 2007 8:23 pm
Subject: Re: using MoveSOPClassSCU
jimirrer
Send Email Send Email
 
Never mind - I figured it out.  I was asking for DICOM studies on the
PACS server that had been deleted.  Asking for one that still
exists works fine.

Thanks,

- Jim

--- In pixelmed_dicom@yahoogroups.com, "jimirrer" <irrer@...> wrote:
>
> Hi -
>
> I'm trying to use the MoveSOPClassSCU and
> StorageSOPClassSCPDispatcher classes to effect a C-MOVE from
> a Conquest PACS server.  I've turned on debugging, and the the
> StorageSOPClassSCPDispatcher message shows the following and
> then just hangs.  I'm not sure what the
> "waitForPDataPDUsUntilHandlerReportsDone" indicates.  The
> directory where files are supposed to be put has write
> permission to all and is empty afterwards.
>
> (The output from MoveSOPClassSCU is below
> that, if that's useful).
>
> I've had this working before, and am at a loss as to why it no
> longer does.
>
> Thanks for any insights,
>
> - Jim
>
> Jim Irrer     irrer at umich.edu    (734) 647-4409
> University of Michigan Hospital Radiation Oncology
> 519 W. William St.             Ann Arbor, MI 48103
>
> ----------------------------------------------------------------
> ----------------------------------------------------------------
> ----------------------------------------------------------------
> ----- StorageSOPClassSCPDispatcher Debug Output Follows --------
> ----------------------------------------------------------------
>
>
> StorageSOPClassSCPDispatcher.run(): Trying to bind to port 2424
> StorageSOPClassSCPDispatcher:run(): applicationEntityMap = AE
>
[dicomAETitle=SOFTDEV,hostname=0.0.0.0,port=2424,queryModel=STUDYROOT,primaryDev\
iceType=null]
>
> Association[0].setSocketOptions(): getReceiveBufferSize() = 43690
> Association[0].setSocketOptions(): getSendBufferSize() = 8192
> Association[0].setSocketOptions(): getSoLinger() = -1
> Association[0].setSocketOptions(): getSoTimeout() = 0
> Association[0].setSocketOptions(): getTcpNoDelay() = false
> Association[0].setSocketOptions(): asking to change receiveBufferSize
> to = 65536
> Association[0].setSocketOptions(): receiveBufferSize changed to = 65536
> Association[0]: Them: PDU Type: 0x1 (length 0x192)
> Association[0]: Them:
>         0 (0x00000000): 01 00 00 00 01 92 00 01 00 00 53 4f 46 54 44
> 45 .....メ....SOFTDE
>        16 (0x00000010): 56 20 20 20 20 20 20 20 20 20 43 4f 4e 51 55
> 45 V         CONQUE
>        32 (0x00000020): 53 54 53 52 56 55 4d 20 20 20 00 00 00 00 00
> 00 STSRVUM   ......
>        48 (0x00000030): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 00 ................
>        64 (0x00000040): 00 00 00 00 00 00 00 00 00 00 10 00 00 15 31
> 2e ..............1.
>        80 (0x00000050): 32 2e 38 34 30 2e 31 30 30 30 38 2e 33 2e 31
> 2e 2.840.10008.3.1.
>        96 (0x00000060): 31 2e 31 20 00 00 36 d5 00 00 00 30 00 00 19
> 31 1.1 ..6%G・U・@...0...1
>       112 (0x00000070): 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e
> 31 .2.840.10008.5.1
>       128 (0x00000080): 2e 34 2e 31 2e 31 2e 32 40 00 00 11 31 2e 32
> 2e .4.1.1.2@...
>       144 (0x00000090): 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00
> 00 840.10008.1.2 ..
>       160 (0x000000a0): 3a d9 00 00 00 30 00 00 1d 31 2e 32 2e 38 34
> 30 :....0...1.2.840
>       176 (0x000000b0): 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e
> 31 .10008.5.1.4.1.1
>       192 (0x000000c0): 2e 34 38 31 2e 35 40 00 00 11 31 2e 32 2e 38
> 34 .481.5@...
>       208 (0x000000d0): 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3a
> dd 0.10008.1.2 ..:.
>       224 (0x000000e0): 00 00 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e
> 31 ...0...1.2.840.1
>       240 (0x000000f0): 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e
> 34 0008.5.1.4.1.1.4
>       256 (0x00000100): 38 31 2e 33 40 00 00 11 31 2e 32 2e 38 34 30
> 2e 81.3@...
>       272 (0x00000110): 31 30 30 30 38 2e 31 2e 32 20 00 00 3a e1 00
> 00 10008.1.2 ..:!L..
>       288 (0x00000120): 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30
> 30 .0...1.2.840.100
>       304 (0x00000130): 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34 38
> 31 08.5.1.4.1.1.481
>       320 (0x00000140): 2e 31 40 00 00 11 31 2e 32 2e 38 34 30 2e 31
> 30 .1@...
>       336 (0x00000150): 30 30 38 2e 31 2e 32 50 00 00 3d 51 00 00 04
> 00 008.1.2P..=Q....
>       352 (0x00000160): 00 40 00 52 00 00 22 31 2e 32 2e 38 32 36 2e
> 30 .@.R.."1.2.826.0
>       368 (0x00000170): 2e 31 2e 33 36 38 30 30 34 33 2e 32 2e 31 33
> 35 .1.3680043.2.135
>       384 (0x00000180): 2e 31 30 36 36 2e 31 30 31 55 00 00 0b 31 2e
> 34 .1066.101U...1.4
>       400 (0x00000190): 2e 33 2f 57 49 4e 33 32 .3/WIN32
> PDU Type: 0x1 (A-ASSOCIATE-RQ)
> Length: 0x192
> Protocol Version: 0x1
> Called AET:  SOFTDEV
> Calling AET: CONQUESTSRVUM
> Item Type: 0x10 (length 0x15) (Application Context)
>

#464 From: "strongsteeeve" <stefan@...>
Date: Wed Oct 10, 2007 11:51 am
Subject: Pixelmed for Creating Multiframe DICOM files
strongsteeeve
Send Email Send Email
 
Hi Everybody!

I have a short question for you, as I could not find an answer
somewhere else. :(

I need to create multiframe DICOM files using Java.
As I am already used to the Pixelmed Library for creating DICOM files
from images (jpg, bmp, ...) I would like to use it again for creating
multiframe DICOM files from videofiles.


My question(s) is (are):

- Is it possible to create multiframe DICOM images with the Pixelmed
Toolkit?

- If yes (hopefully ;) - How? Any examples or source-snippets?

I, for myself, was thinking about reading the videofile with kind of
a BufferedReader (or something) else and pass it along as the payload
of the DICOM file. Possible?

Thanks in Advance!

Stefan

#465 From: "jo.wagnet" <jo.wagnet@...>
Date: Wed Oct 10, 2007 3:03 pm
Subject: Converting a BMP to DICOM
jo.wagnet
Send Email Send Email
 
Hi there,
first of all, thank you for this great framework.
I'am trying to convert an existing images into the DICOM-Format.
I found the Class "ImageToDicom" in the package "com.pixelmed.dicom" with which i assume i can do this. 
But i encounter some problem converting a BMP (created by mspaint):

Heres the Exception:
org.dicom4j.dicom.DicomException: internal error - wrong value type for attribute (0x0028,0x0100) Unknow
    at org.dicom4j.data.elements.DataElement.addValue(DataElement.java:212)
    at com.pixelmed.dicom.ImageToDicom.<init>(ImageToDicom.java:127)
    at com.pixelmed.dicom.ImageToDicom.main(ImageToDicom.java:303)

 The Program was started with the following args:
"C:\testpic.bmp" "C:\dsf"  "john doe" 0 0 0 0
I assume that something is wrong with the input image ... "0x0028,0x0100" has to do with the "Bits allocated" (of the image ?)

Does the converter require some specific image setting?(number of colors, sizie, etc...)

Or does anybody know a nother program with which i can perform such a conversion?

I would be thankful if somebody can help me.

Thanks







#466 From: David Clunie <dclunie@...>
Date: Wed Oct 10, 2007 3:41 pm
Subject: Re: Converting a BMP to DICOM
dclunie99
Send Email Send Email
 
Hi

The exception seems to be thrown in somebody else's DICOM
toolkit (org.dicom4j.dicom) and not mine - do you have some
other toolkit in the classpath for some reason ?

David

jo.wagnet wrote:
> Hi there,
> first of all, thank you for this great framework.
> I'am trying to convert an existing images into the DICOM-Format.
> I found the Class "ImageToDicom" in the package "com.pixelmed.dicom"
> with which i assume i can do this.
> But i encounter some problem converting a BMP (created by mspaint):
>
> Heres the Exception:
>
>     org.dicom4j.dicom.DicomException: internal error - wrong value type
>     for attribute (0x0028,0x0100) Unknow
>         at
>     org.dicom4j.data.elements.DataElement.addValue(DataElement.java:212)
>         at com.pixelmed.dicom.ImageToDicom.<init>(ImageToDicom.java:127)
>         at com.pixelmed.dicom.ImageToDicom.main(ImageToDicom.java:303)
>
>  The Program was started with the following args:
>
>     "C:\testpic.bmp" "C:\dsf"  "john doe" 0 0 0 0
>
> I assume that something is wrong with the input image ...
> "0x0028,0x0100" has to do with the "Bits allocated" (of the image ?)
>
> Does the converter require some specific image setting?(number of
> colors, sizie, etc...)
>
> Or does anybody know a nother program with which i can perform such a
> conversion?
>
> I would be thankful if somebody can help me.
>
> Thanks
>
>
>
>
>
>
>

--
Dr. David A. Clunie                         mailto:dclunie@...
Chief Technology Officer                       http://www.radpharm.com/
RadPharm, Inc                               Phone 609-936-2600 ext 2413
100 Overlook Center                                    Fax 609-514-4890
Princeton NJ 08540                              http://www.dclunie.com/
Attachment: vcard [not shown]

#467 From: David Clunie <dclunie@...>
Date: Wed Oct 10, 2007 3:50 pm
Subject: Re: Pixelmed for Creating Multiframe DICOM files
dclunie99
Send Email Send Email
 
Sure.

If the video frames are uncompressed (or have been decompressed),
as long as you can feed an array of bytes or an array of shorts
to the OtherByteAttribute or OtherWordAttrbute setValues() method,
this should be easy ... see the source of ImageToDicom.

Of course, if your multi-frame image will not fit in memory, you
will have to do more work. You could try writing the raw bytes or
shorts to a temporary file and use OtherByteAttributeOnDisk or
OtherWordAttributeOnDisk.

To create a valid SOP Class, you would need to choose the appropriate
multi-frame image SOP Class and populate the ncessary header
attributes appropriately (at the very least, NumberOfFrames, for
instance).

There is currently no support for encapsulating compressed video
streams, however (whether they be motion JPEG or MPEG).

David

strongsteeeve wrote:
> Hi Everybody!
>
> I have a short question for you, as I could not find an answer
> somewhere else. :(
>
> I need to create multiframe DICOM files using Java.
> As I am already used to the Pixelmed Library for creating DICOM files
> from images (jpg, bmp, ...) I would like to use it again for creating
> multiframe DICOM files from videofiles.
>
>
> My question(s) is (are):
>
> - Is it possible to create multiframe DICOM images with the Pixelmed
> Toolkit?
>
> - If yes (hopefully ;) - How? Any examples or source-snippets?
>
> I, for myself, was thinking about reading the videofile with kind of
> a BufferedReader (or something) else and pass it along as the payload
> of the DICOM file. Possible?
>
> Thanks in Advance!
>
> Stefan
>
>
>
>
> Yahoo! Groups Links
>
>
>
>
>

--
Dr. David A. Clunie                         mailto:dclunie@...
Chief Technology Officer                       http://www.radpharm.com/
RadPharm, Inc                               Phone 609-936-2600 ext 2413
100 Overlook Center                                    Fax 609-514-4890
Princeton NJ 08540                              http://www.dclunie.com/
Attachment: vcard [not shown]

#468 From: "rauberger" <rauberger@...>
Date: Wed Oct 10, 2007 5:18 pm
Subject: Allow wildcards in StudyRootQueryInformationModel / Remove QueryTreeModel nodes
rauberger
Send Email Send Email
 
Hello!

Thanks, Mr. Clunie, for this greatly useful Toolkit!
I am a masters student of Health Care IT from Austria and am
establishing a DICOM-Networking part for a visualization program. The
main use is to query a server for DICOM series for later 3D
visualization. The toolkit runs well, no problem at this part, but I
would like to enable wild card entries in the filtering attribute.
I know that this is not possible with C-FIND, as a query for e.g.
patient name "Alf" wont return any patient named "Alfred", but exactly
those named "Alf". My thought was therefore to query a superset from
the server, where no patient name is specified at all - and then
remove any false hits in the QueryTreeModel by reading patients name
and compare with e.g. "contains("Alf")".

Unfortunately (for this special purpose) the QueryTreeRecord class
implements TreeNode, and not MutableTreeNode. Thus I am quarreling
with the classes QueryTreeRecord, QueryTreeModel,
StudyRootQueryInformationModel, and QueryTreeBrowser trying to add any
handling allowing me to remove nodes from the model. As this seems to
be a tough and complex way I am asking if there is a better solution
to this problem. Any critique, help and advice is greatly appreciated!

Sincerely,
Martin Rauberger

#469 From: David Clunie <dclunie@...>
Date: Wed Oct 10, 2007 5:47 pm
Subject: Re: Allow wildcards in StudyRootQueryInformationModel / Remove QueryTreeModel nodes
dclunie99
Send Email Send Email
 
Hi Martin

Why not just send "*Alf*" in the Patient Name in the C-FIND
request ?

The attached screenshots show DicomImageViewer used as
both the SCU and SCP to demonstrate this.

David

rauberger wrote:
> Hello!
>
> Thanks, Mr. Clunie, for this greatly useful Toolkit!
> I am a masters student of Health Care IT from Austria and am
> establishing a DICOM-Networking part for a visualization program. The
> main use is to query a server for DICOM series for later 3D
> visualization. The toolkit runs well, no problem at this part, but I
> would like to enable wild card entries in the filtering attribute.
> I know that this is not possible with C-FIND, as a query for e.g.
> patient name "Alf" wont return any patient named "Alfred", but exactly
> those named "Alf". My thought was therefore to query a superset from
> the server, where no patient name is specified at all - and then
> remove any false hits in the QueryTreeModel by reading patients name
> and compare with e.g. "contains("Alf")".
>
> Unfortunately (for this special purpose) the QueryTreeRecord class
> implements TreeNode, and not MutableTreeNode. Thus I am quarreling
> with the classes QueryTreeRecord, QueryTreeModel,
> StudyRootQueryInformationModel, and QueryTreeBrowser trying to add any
> handling allowing me to remove nodes from the model. As this seems to
> be a tough and complex way I am asking if there is a better solution
> to this problem. Any critique, help and advice is greatly appreciated!
>
> Sincerely,
> Martin Rauberger
Attachment: vcard [not shown]

#470 From: "rauberger" <rauberger@...>
Date: Thu Oct 11, 2007 8:41 am
Subject: Re: Allow wildcards in StudyRootQueryInformationModel / Remove QueryTreeModel no
rauberger
Send Email Send Email
 
Thanks David,

Well I thought to know that C-FIND would not allow any wildcards...
Obviously I was wrong and the solution was there all the time :-).
Thanks very much for your fast answer and advice!!

Best regards,
Martin

--- In pixelmed_dicom@yahoogroups.com, David Clunie <dclunie@...> wrote:
>
> Hi Martin
>
> Why not just send "*Alf*" in the Patient Name in the C-FIND
> request ?
>
> The attached screenshots show DicomImageViewer used as
> both the SCU and SCP to demonstrate this.
>
> David
>
> rauberger wrote:
> > Hello!
> >
> > Thanks, Mr. Clunie, for this greatly useful Toolkit!
> > I am a masters student of Health Care IT from Austria and am
> > establishing a DICOM-Networking part for a visualization program. The
> > main use is to query a server for DICOM series for later 3D
> > visualization. The toolkit runs well, no problem at this part, but I
> > would like to enable wild card entries in the filtering attribute.
> > I know that this is not possible with C-FIND, as a query for e.g.
> > patient name "Alf" wont return any patient named "Alfred", but exactly
> > those named "Alf". My thought was therefore to query a superset from
> > the server, where no patient name is specified at all - and then
> > remove any false hits in the QueryTreeModel by reading patients name
> > and compare with e.g. "contains("Alf")".
> >
> > Unfortunately (for this special purpose) the QueryTreeRecord class
> > implements TreeNode, and not MutableTreeNode. Thus I am quarreling
> > with the classes QueryTreeRecord, QueryTreeModel,
> > StudyRootQueryInformationModel, and QueryTreeBrowser trying to add any
> > handling allowing me to remove nodes from the model. As this seems to
> > be a tough and complex way I am asking if there is a better solution
> > to this problem. Any critique, help and advice is greatly appreciated!
> >
> > Sincerely,
> > Martin Rauberger
>

#471 From: "jo.wagnet" <jo.wagnet@...>
Date: Thu Oct 11, 2007 8:13 am
Subject: Re: Converting a BMP to DICOM
jo.wagnet
Send Email Send Email
 
Hello, thank you for your very fast answer.
Redownloading the Toolkit has solved the problem. I just dont know
where the other realse were from :-) If just every problem could be
solved so easy...

Greetings


--- In pixelmed_dicom@yahoogroups.com, David Clunie <dclunie@...> wrote:
>
> Hi
>
> The exception seems to be thrown in somebody else's DICOM
> toolkit (org.dicom4j.dicom) and not mine - do you have some
> other toolkit in the classpath for some reason ?
>
> David
>
> jo.wagnet wrote:
> > Hi there,
> > first of all, thank you for this great framework.
> > I'am trying to convert an existing images into the DICOM-Format.
> > I found the Class "ImageToDicom" in the package "com.pixelmed.dicom"
> > with which i assume i can do this.
> > But i encounter some problem converting a BMP (created by mspaint):
> >
> > Heres the Exception:
> >
> >     org.dicom4j.dicom.DicomException: internal error - wrong value
type
> >     for attribute (0x0028,0x0100) Unknow
> >         at
> >
org.dicom4j.data.elements.DataElement.addValue(DataElement.java:212)
> >         at
com.pixelmed.dicom.ImageToDicom.<init>(ImageToDicom.java:127)
> >         at com.pixelmed.dicom.ImageToDicom.main(ImageToDicom.java:303)
> >
> >  The Program was started with the following args:
> >
> >     "C:\testpic.bmp" "C:\dsf"  "john doe" 0 0 0 0
> >
> > I assume that something is wrong with the input image ...
> > "0x0028,0x0100" has to do with the "Bits allocated" (of the image ?)
> >
> > Does the converter require some specific image setting?(number of
> > colors, sizie, etc...)
> >
> > Or does anybody know a nother program with which i can perform such a
> > conversion?
> >
> > I would be thankful if somebody can help me.
> >
> > Thanks
> >
> >
> >
> >
> >
> >
> >
>
> --
> Dr. David A. Clunie                         mailto:dclunie@...
> Chief Technology Officer                       http://www.radpharm.com/
> RadPharm, Inc                               Phone 609-936-2600 ext 2413
> 100 Overlook Center                                    Fax 609-514-4890
> Princeton NJ 08540                              http://www.dclunie.com/
>

#472 From: "David Clunie" <dclunie@...>
Date: Thu Oct 11, 2007 11:29 am
Subject: Re: Allow wildcards in StudyRootQueryInformationModel / Remove QueryTreeModel no
dclunie99
Send Email Send Email
 
--- In pixelmed_dicom@yahoogroups.com, "rauberger" <rauberger@...> wrote:
>
> Thanks David,
>
> Well I thought to know that C-FIND would not allow any wildcards...
> Obviously I was wrong and the solution was there all the time :-).
> Thanks very much for your fast answer and advice!!

The types of "matching", including wildcards, are described in
the standard in PS 3.4 C.2.2.2 Attribute Matching, in case you
need more detail.

David

#473 From: "jimirrer" <irrer@...>
Date: Fri Oct 12, 2007 4:58 pm
Subject: C-MOVE adds extra content to DICOM files
jimirrer
Send Email Send Email
 
Hi -

I am trying to perform a C-MOVE from a Conquest PACS with the
library, and it works, except that the imported DICOM files
have extra information in them.  Specifically, the
group="0002" information shown in the XML listing below
(lines 3 through 33)

We have a legacy system that we are trying to feed this file
to, and though it can handle the DICOM file from the PACS in
it's original form (if we simply copy it over), it can not
handle this expanded form.

So my question is, how can I perform a C-MOVE with the
library and tell it not to add the extra group="0002" content?

       1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
       2 <DicomObject>
       3     <FileMetaInformationGroupLength element="0000"
group="0002" vr="UL">
       4         <value number="1">198</value>
       5     </FileMetaInformationGroupLength>
       6
       7     <FileMetaInformationVersion element="0001" group="0002"
vr="OB"/>
       8
       9     <MediaStorageSOPClassUID element="0002" group="0002" vr="UI">
      10         <value number="1">1.2.840.10008.5.1.4.1.1.2</value>
      11     </MediaStorageSOPClassUID>
      12
      13     <MediaStorageSOPInstanceUID element="0003" group="0002"
vr="UI">
      14         <value
number="1">1.2.840.113619.2.30.1.1762856302.1788.1191930259.861</value>
      15     </MediaStorageSOPInstanceUID>
      16
      17     <TransferSyntaxUID element="0010" group="0002" vr="UI">
      18         <value number="1">1.2.840.10008.1.2.1</value>
      19     </TransferSyntaxUID>
      20
      21     <ImplementationClassUID element="0012" group="0002" vr="UI">
      22         <value number="1">1.3.6.1.4.1.5962.99.2</value>
      23     </ImplementationClassUID>
      24
      25     <ImplementationVersionName element="0013" group="0002"
vr="SH">
      26         <value number="1">PIXELMEDJAVA001</value>
      27     </ImplementationVersionName>
      28
      29     <SourceApplicationEntityTitle element="0016" group="0002"
vr="AE"/>
      30
      31     <SpecificCharacterSet element="0005" group="0008" vr="CS">
      32         <value number="1">ISO_IR 100</value>
      33     </SpecificCharacterSet>
      34
      35     <ImageType element="0008" group="0008" vr="CS">
      36         <value number="1">ORIGINAL</value>
      37         <value number="2">PRIMARY</value>
      38         <value number="3">AXIAL</value>
      39     </ImageType>
      40
      41     <SOPClassUID element="0016" group="0008" vr="UI">
      42         <value number="1">1.2.840.10008.5.1.4.1.1.2</value>
      43     </SOPClassUID>
      44
      45     <SOPInstanceUID element="0018" group="0008" vr="UI">
      46         <value
number="1">1.2.840.113619.2.30.1.1762856302.1788.1191930259.861</value>
      47     </SOPInstanceUID>
      48
      49     <StudyDate element="0020" group="0008" vr="DA">
      50         <value number="1">20071009</value>
      51     </StudyDate>
      52
      53     <SeriesDate element="0021" group="0008" vr="DA">
      54         <value number="1">20071009</value>
      55     </SeriesDate>
      56
      57     <AcquisitionDate element="0022" group="0008" vr="DA">
      58         <value number="1">20071009</value>
      59     </AcquisitionDate>
      60     .
      61     .
      62     .

Thanks,

- Jim

Jim Irrer     irrer at umich.edu       (734) 647-4409
University of Michigan Hospital Radiation Oncology
519 W. William St.             Ann Arbor, MI 48103

#474 From: David Clunie <dclunie@...>
Date: Fri Oct 12, 2007 10:54 pm
Subject: Re: C-MOVE adds extra content to DICOM files
dclunie99
Send Email Send Email
 
Hi Jim

DICOM files on media are supposed to have the meta-header
(group 0002 elements) - if not, how would one know, for
example, what transfer syntax the dataset was encoded in ?

Are you:

a) C-MOVE'ing the objects to a StorageSCP instance, and
then trying to manually "import" the resulting Part 10
files into your legacy application, (sounds like it), or

b) C-MOVE'ing the objects directly to the legacy application,
which is itself a DICOM Storage SCP ?

In the latter case, there should be no group 0002 elements
transferred over the DICOM network transfer, and if there
are it is a problem of the sender (Conquest), which is
pretty unlikely.

In the former case, if the legacy application cannot "import"
a valid Part 10 file, then it really sucks, since that is
the only "legitimate" type of DICOM "file".

There is no provision in the PixelMed toolkit's StorageSCP
class to not write the Part 10 header, and frankly I am
not very interested in adding such an option as a matter of
policy, since DICOM files without meta-headers are a VERY
BAD THING.

You could potentially edit the com.pixelmed.network.
StorageSOPClassSCP.java file and remove the section of
code that creates the FileMetaInformation and then writes
it to the output stream; you probably also want to be
sure that the Transfer Syntax accepted and sent is the
one that your legacy application will accept. I.e., if
it doesn't like meta-information headers it probably
will only accept Implicit VR Little Endian and no other
transfer syntax. You would constrain this in the call
to AssociationFactory by providing your own list of
constrained PresentationContexts

Alternatively, it might be easier for you to process the
files after they have been received and before you feed
them to your legacy application; this could be done by
supplying a ReceivedObjectHandler that did a read and
then write of the file received, e.g., as described in
the Javadoc of AttributeList, but leaving out the call to
FileMetaInformation.addFileMetaInformation(). E.g., perhaps
something like the following (which I have not tested):

class OurReceivedObjectHandler extends ReceivedObjectHandler {
   public void sendReceivedObjectIndication(String dicomFileName,
       String transferSyntax,String callingAETitle)
       throws DicomNetworkException, DicomException, IOException {
     if (dicomFileName != null) {
       File dicomFile = new File(dicomFileName);
       DicomInputStream i = new DicomInputStream(
         new BufferedInputStream(new FileInputStream(dicomFile)));
       AttributeList list = new AttributeList();
       list.read(i);
       i.close();
       list.removeGroupLengthAttributes();
       list.removeMetaInformationHeaderAttributes();
       list.remove(TagFromName.DataSetTrailingPadding);

       File temporaryFile=new File(savedImagesFolder,
         FileUtilities.makeTemporaryFileName());
       list.write(temporaryFile,TransferSyntax.ImplicitVRLittleEndian,
         false/* i.e., no meta-header */,true);
       dicomFile.delete();
       temporaryFile.renameTo(dicomFileName);
     }
   }
}

David

jimirrer wrote:
> Hi -
>
> I am trying to perform a C-MOVE from a Conquest PACS with the
> library, and it works, except that the imported DICOM files
> have extra information in them.  Specifically, the
> group="0002" information shown in the XML listing below
> (lines 3 through 33)
>
> We have a legacy system that we are trying to feed this file
> to, and though it can handle the DICOM file from the PACS in
> it's original form (if we simply copy it over), it can not
> handle this expanded form.
>
> So my question is, how can I perform a C-MOVE with the
> library and tell it not to add the extra group="0002" content?
>
>       1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>       2 <DicomObject>
>       3     <FileMetaInformationGroupLength element="0000"
> group="0002" vr="UL">
>       4         <value number="1">198</value>
>       5     </FileMetaInformationGroupLength>
>       6
>       7     <FileMetaInformationVersion element="0001" group="0002"
> vr="OB"/>
>       8
>       9     <MediaStorageSOPClassUID element="0002" group="0002" vr="UI">
>      10         <value number="1">1.2.840.10008.5.1.4.1.1.2</value>
>      11     </MediaStorageSOPClassUID>
>      12
>      13     <MediaStorageSOPInstanceUID element="0003" group="0002"
> vr="UI">
>      14         <value
> number="1">1.2.840.113619.2.30.1.1762856302.1788.1191930259.861</value>
>      15     </MediaStorageSOPInstanceUID>
>      16
>      17     <TransferSyntaxUID element="0010" group="0002" vr="UI">
>      18         <value number="1">1.2.840.10008.1.2.1</value>
>      19     </TransferSyntaxUID>
>      20
>      21     <ImplementationClassUID element="0012" group="0002" vr="UI">
>      22         <value number="1">1.3.6.1.4.1.5962.99.2</value>
>      23     </ImplementationClassUID>
>      24
>      25     <ImplementationVersionName element="0013" group="0002"
> vr="SH">
>      26         <value number="1">PIXELMEDJAVA001</value>
>      27     </ImplementationVersionName>
>      28
>      29     <SourceApplicationEntityTitle element="0016" group="0002"
> vr="AE"/>
>      30
>      31     <SpecificCharacterSet element="0005" group="0008" vr="CS">
>      32         <value number="1">ISO_IR 100</value>
>      33     </SpecificCharacterSet>
>      34
>      35     <ImageType element="0008" group="0008" vr="CS">
>      36         <value number="1">ORIGINAL</value>
>      37         <value number="2">PRIMARY</value>
>      38         <value number="3">AXIAL</value>
>      39     </ImageType>
>      40
>      41     <SOPClassUID element="0016" group="0008" vr="UI">
>      42         <value number="1">1.2.840.10008.5.1.4.1.1.2</value>
>      43     </SOPClassUID>
>      44
>      45     <SOPInstanceUID element="0018" group="0008" vr="UI">
>      46         <value
> number="1">1.2.840.113619.2.30.1.1762856302.1788.1191930259.861</value>
>      47     </SOPInstanceUID>
>      48
>      49     <StudyDate element="0020" group="0008" vr="DA">
>      50         <value number="1">20071009</value>
>      51     </StudyDate>
>      52
>      53     <SeriesDate element="0021" group="0008" vr="DA">
>      54         <value number="1">20071009</value>
>      55     </SeriesDate>
>      56
>      57     <AcquisitionDate element="0022" group="0008" vr="DA">
>      58         <value number="1">20071009</value>
>      59     </AcquisitionDate>
>      60     .
>      61     .
>      62     .
>
> Thanks,
>
> - Jim
>
> Jim Irrer     irrer at umich.edu       (734) 647-4409
> University of Michigan Hospital Radiation Oncology
> 519 W. William St.             Ann Arbor, MI 48103
Attachment: vcard [not shown]

#475 From: "Michèle" Fayad <michele_fayad_cme@...>
Date: Mon Oct 15, 2007 12:40 pm
Subject: Querying Dicom server with passing multiple Accession Numbers
michele_faya...
Send Email Send Email
 
Dear Mr. Clunie,
 
I am using the pixelmed library to query dicom servers using the
StudyRootQueryInformationModel class. Everything is working fine when i use an AttributeList to which i add one AccessionNumber attribute as follows:
 
AttributeTag t = TagFromName.
AccessionNumber;
Attribute a =
new CodeStringAttribute(t);
a.addValue(acc_num);
identifier.put(t, a);
 
However, I want to be able to pass more then one accessionNumber in the AttributeList to be able to look for studies that have either one of the accession numbers i would pass.
But I am not able to know how to do it :( Can you tell me how this can be possible?
 
Thank you,
Michelle.


Need a vacation? Get great deals to amazing places on Yahoo! Travel.

#476 From: "David Clunie" <dclunie@...>
Date: Mon Oct 15, 2007 12:57 pm
Subject: Re: Querying Dicom server with passing multiple Accession Numbers
dclunie99
Send Email Send Email
 
Hi Michele

First, Accession Number is a ShortString, not a CodeString VR.

Second, DICOM does not allow "list of value" matching for
anything other than UIDs, so you are out of luck. This is
not a PixelMed limitation, but a DICOM standard limitation.

If you want to query for more than one AccessionNumber, you
just need to do several successive queries and create the
union of the responses.

David

--- In pixelmed_dicom@yahoogroups.com, "Michèle" Fayad
<michele_fayad_cme@...> wrote:
>
> Dear Mr. Clunie,
>
>   I am using the pixelmed library to query dicom servers using the
>   StudyRootQueryInformationModel class. Everything is working fine
when i use an AttributeList to which i add one AccessionNumber
attribute as follows:
>
>   AttributeTag t = TagFromName.AccessionNumber;
>   Attribute a = new CodeStringAttribute(t);
>
> a.addValue(acc_num);
>   identifier.put(t, a);
>
>   However, I want to be able to pass more then one accessionNumber
in the AttributeList to be able to look for studies that have either
one of the accession numbers i would pass.
>   But I am not able to know how to do it :( Can you tell me how this
can be possible?
>
>   Thank you,
>   Michelle.
>
>
> ---------------------------------
> Need a vacation? Get great deals to amazing places on Yahoo! Travel.
>

#477 From: "Michèle" Fayad <michele_fayad_cme@...>
Date: Mon Oct 15, 2007 1:53 pm
Subject: Re: Re: Querying Dicom server with passing multiple Accession Numbers
michele_faya...
Send Email Send Email
 
Thanks a lot for the response!

David Clunie <dclunie@...> wrote:
Hi Michele

First, Accession Number is a ShortString, not a CodeString VR.

Second, DICOM does not allow "list of value" matching for
anything other than UIDs, so you are out of luck. This is
not a PixelMed limitation, but a DICOM standard limitation.

If you want to query for more than one AccessionNumber, you
just need to do several successive queries and create the
union of the responses.

David

--- In pixelmed_dicom@yahoogroups.com, "Michèle" Fayad
<michele_fayad_cme@...> wrote:
>
> Dear Mr. Clunie,
>
> I am using the pixelmed library to query dicom servers using the
> StudyRootQueryInformationModel class. Everything is working fine
when i use an AttributeList to which i add one AccessionNumber
attribute as follows:
>
> AttributeTag t = TagFromName.AccessionNumber;
> Attribute a = new CodeStringAttribute(t);
>
> a.addValue(acc_num);
> identifier.put(t, a);
>
> However, I want to be able to pass more then one accessionNumber
in the AttributeList to be able to look for studies that have either
one of the accession numbers i would pass.
> But I am not able to know how to do it :( Can you tell me how this
can be possible?
>
> Thank you,
> Michelle.
>
>
> ---------------------------------
> Need a vacation? Get great deals to amazing places on Yahoo! Travel.
>



Need a vacation? Get great deals to amazing places on Yahoo! Travel.

#478 From: "nwbeeson" <nwbeeson@...>
Date: Mon Oct 15, 2007 7:07 pm
Subject: PixelMed listening port?
nwbeeson
Send Email Send Email
 
I am porting PixelMed to an OpenVMS cluster. In this setting we tell
our DICOM server to trust only those computers for which the DICOM
server has:

CallingAETitle
IP address
Client port number

I need to know how PixelMed is generating the client port number it is
listening on for a response from the DICOM server, when it generates a
DICOM service request using FindSOPClassSCU().

Actually all I really need is some way to tell PixelMed what port to
listen on (use) when making this call.

Thank you.

#479 From: "jimirrer" <irrer@...>
Date: Mon Oct 15, 2007 8:21 pm
Subject: Re: C-MOVE adds extra content to DICOM files
jimirrer
Send Email Send Email
 
David -

We're doing a) . At this point we think that the best (and
right, though difficult) solution is to fix the legacy
application, which we are coming to understand was designed
around some faulty assumptions.

I agree that Pixelmed should not have an option for the
toolkit's StorageSCP class to not write the Part 10 header.
I've played around with commenting out that code and
re-building the toolkit, and that does work, but after
learning more about Implicit VR Little Endian it seems
like a very poor solution.

Thank you very much for your help,

- Jim




--- In pixelmed_dicom@yahoogroups.com, David Clunie <dclunie@...> wrote:
>
> Hi Jim
>
> DICOM files on media are supposed to have the meta-header
> (group 0002 elements) - if not, how would one know, for
> example, what transfer syntax the dataset was encoded in ?
>
> Are you:
>
> a) C-MOVE'ing the objects to a StorageSCP instance, and
> then trying to manually "import" the resulting Part 10
> files into your legacy application, (sounds like it), or
>
> b) C-MOVE'ing the objects directly to the legacy application,
> which is itself a DICOM Storage SCP ?
>
> In the latter case, there should be no group 0002 elements
> transferred over the DICOM network transfer, and if there
> are it is a problem of the sender (Conquest), which is
> pretty unlikely.
>
> In the former case, if the legacy application cannot "import"
> a valid Part 10 file, then it really sucks, since that is
> the only "legitimate" type of DICOM "file".
>
> There is no provision in the PixelMed toolkit's StorageSCP
> class to not write the Part 10 header, and frankly I am
> not very interested in adding such an option as a matter of
> policy, since DICOM files without meta-headers are a VERY
> BAD THING.
>
> You could potentially edit the com.pixelmed.network.
> StorageSOPClassSCP.java file and remove the section of
> code that creates the FileMetaInformation and then writes
> it to the output stream; you probably also want to be
> sure that the Transfer Syntax accepted and sent is the
> one that your legacy application will accept. I.e., if
> it doesn't like meta-information headers it probably
> will only accept Implicit VR Little Endian and no other
> transfer syntax. You would constrain this in the call
> to AssociationFactory by providing your own list of
> constrained PresentationContexts
>
> Alternatively, it might be easier for you to process the
> files after they have been received and before you feed
> them to your legacy application; this could be done by
> supplying a ReceivedObjectHandler that did a read and
> then write of the file received, e.g., as described in
> the Javadoc of AttributeList, but leaving out the call to
> FileMetaInformation.addFileMetaInformation(). E.g., perhaps
> something like the following (which I have not tested):
>
> class OurReceivedObjectHandler extends ReceivedObjectHandler {
>   public void sendReceivedObjectIndication(String dicomFileName,
>       String transferSyntax,String callingAETitle)
>       throws DicomNetworkException, DicomException, IOException {
>     if (dicomFileName != null) {
>       File dicomFile = new File(dicomFileName);
>       DicomInputStream i = new DicomInputStream(
>         new BufferedInputStream(new FileInputStream(dicomFile)));
>       AttributeList list = new AttributeList();
>       list.read(i);
>       i.close();
>       list.removeGroupLengthAttributes();
>       list.removeMetaInformationHeaderAttributes();
>       list.remove(TagFromName.DataSetTrailingPadding);
>
>       File temporaryFile=new File(savedImagesFolder,
>         FileUtilities.makeTemporaryFileName());
>       list.write(temporaryFile,TransferSyntax.ImplicitVRLittleEndian,
>         false/* i.e., no meta-header */,true);
>       dicomFile.delete();
>       temporaryFile.renameTo(dicomFileName);
>     }
>   }
> }
>
> David
>
> jimirrer wrote:
> > Hi -
> >
> > I am trying to perform a C-MOVE from a Conquest PACS with the
> > library, and it works, except that the imported DICOM files
> > have extra information in them.  Specifically, the
> > group="0002" information shown in the XML listing below
> > (lines 3 through 33)
> >
> > We have a legacy system that we are trying to feed this file
> > to, and though it can handle the DICOM file from the PACS in
> > it's original form (if we simply copy it over), it can not
> > handle this expanded form.
> >
> > So my question is, how can I perform a C-MOVE with the
> > library and tell it not to add the extra group="0002" content?
> >
> >       1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> >       2 <DicomObject>
> >       3     <FileMetaInformationGroupLength element="0000"
> > group="0002" vr="UL">
> >       4         <value number="1">198</value>
> >       5     </FileMetaInformationGroupLength>
> >       6
> >       7     <FileMetaInformationVersion element="0001" group="0002"
> > vr="OB"/>
> >       8
> >       9     <MediaStorageSOPClassUID element="0002" group="0002"
vr="UI">
> >      10         <value number="1">1.2.840.10008.5.1.4.1.1.2</value>
> >      11     </MediaStorageSOPClassUID>
> >      12
> >      13     <MediaStorageSOPInstanceUID element="0003" group="0002"
> > vr="UI">
> >      14         <value
> >
number="1">1.2.840.113619.2.30.1.1762856302.1788.1191930259.861</value>
> >      15     </MediaStorageSOPInstanceUID>
> >      16
> >      17     <TransferSyntaxUID element="0010" group="0002" vr="UI">
> >      18         <value number="1">1.2.840.10008.1.2.1</value>
> >      19     </TransferSyntaxUID>
> >      20
> >      21     <ImplementationClassUID element="0012" group="0002"
vr="UI">
> >      22         <value number="1">1.3.6.1.4.1.5962.99.2</value>
> >      23     </ImplementationClassUID>
> >      24
> >      25     <ImplementationVersionName element="0013" group="0002"
> > vr="SH">
> >      26         <value number="1">PIXELMEDJAVA001</value>
> >      27     </ImplementationVersionName>
> >      28
> >      29     <SourceApplicationEntityTitle element="0016" group="0002"
> > vr="AE"/>
> >      30
> >      31     <SpecificCharacterSet element="0005" group="0008" vr="CS">
> >      32         <value number="1">ISO_IR 100</value>
> >      33     </SpecificCharacterSet>
> >      34
> >      35     <ImageType element="0008" group="0008" vr="CS">
> >      36         <value number="1">ORIGINAL</value>
> >      37         <value number="2">PRIMARY</value>
> >      38         <value number="3">AXIAL</value>
> >      39     </ImageType>
> >      40
> >      41     <SOPClassUID element="0016" group="0008" vr="UI">
> >      42         <value number="1">1.2.840.10008.5.1.4.1.1.2</value>
> >      43     </SOPClassUID>
> >      44
> >      45     <SOPInstanceUID element="0018" group="0008" vr="UI">
> >      46         <value
> >
number="1">1.2.840.113619.2.30.1.1762856302.1788.1191930259.861</value>
> >      47     </SOPInstanceUID>
> >      48
> >      49     <StudyDate element="0020" group="0008" vr="DA">
> >      50         <value number="1">20071009</value>
> >      51     </StudyDate>
> >      52
> >      53     <SeriesDate element="0021" group="0008" vr="DA">
> >      54         <value number="1">20071009</value>
> >      55     </SeriesDate>
> >      56
> >      57     <AcquisitionDate element="0022" group="0008" vr="DA">
> >      58         <value number="1">20071009</value>
> >      59     </AcquisitionDate>
> >      60     .
> >      61     .
> >      62     .
> >
> > Thanks,
> >
> > - Jim
> >
> > Jim Irrer     irrer at umich.edu       (734) 647-4409
> > University of Michigan Hospital Radiation Oncology
> > 519 W. William St.             Ann Arbor, MI 48103
>

#480 From: "Markus Simmer" <louis.cypher@...>
Date: Fri Oct 19, 2007 9:01 am
Subject: Dicom to JPEG conversion, problems with overlay
catweazle77de
Send Email Send Email
 
Hi all,

this is my first post to this group which already has been of much
help to me so far. Hopefully someone can help me with the following
problem.

I use the ConsumerFormatImageMaker class to convert a DICOM file to a
JPEG image. For most files this works flawlessly, but when processing
DICOM files that contain an overlay, only the image without the
overlay is written as JPEG.

Is there any way to include the overlay in the resulting JPEG?
Pointers on where to look or maybe even code snippets would be a
great help to me.

Thanks for all your efforts,

Markus

#481 From: "Markus Simmer" <louis.cypher@...>
Date: Mon Oct 22, 2007 2:22 pm
Subject: Re: Dicom to JPEG conversion, problems with overlay
catweazle77de
Send Email Send Email
 
Hi, me again,

after having time to look into the problem I've come up with the
following:

Apparently the problem is caused, at least inpart, by the fact that
for Tags such as OverlayRows, OverlayColumns, OverlayData, etc. no
correct VR is encoded in the class DicomDictionary. Hence, something
like

Attribute ovlRows = list.get(TagFromName.OverlayRows);
System.out.println(ovlRows.getVRAsString());

returns VR == UN.

So, I think that although the information exists in the DICOM file,
the pixelmed methods cannot access it correctly since it doesn't know
how to interpret the corresponding values.

Could someone who knows please comment if this is correct so far?

My question now is: how do I "teach" pixelmed the correct VRs?
Reading the values afterwards should be straightforward, right?
Do I modify DicomDictionary and rebuild or is there another way to do
this?

It would be a great help if someone could give a short feedback.

Thanks again,

Markus

--- In pixelmed_dicom@yahoogroups.com, "Markus
Simmer" <louis.cypher@...> wrote:
>
>
> Hi all,
>
> this is my first post to this group which already has been of much
> help to me so far. Hopefully someone can help me with the following
> problem.
>
> I use the ConsumerFormatImageMaker class to convert a DICOM file to
a
> JPEG image. For most files this works flawlessly, but when
processing
> DICOM files that contain an overlay, only the image without the
> overlay is written as JPEG.
>
> Is there any way to include the overlay in the resulting JPEG?
> Pointers on where to look or maybe even code snippets would be a
> great help to me.
>
> Thanks for all your efforts,
>
> Markus
>

#482 From: "pefe00" <pe.fe@...>
Date: Thu Oct 25, 2007 1:47 pm
Subject: Storage Commitment Push Model
pefe00
Send Email Send Email
 
Hi David,

have you planed to support "Storage Commitment Push Model" in the role
of an SCU? Or can you give me some hints on how I can do that myself
based on the pixelmed toolkit?

Thanks a lot
Peter

#483 From: "Markus Simmer" <louis.cypher@...>
Date: Mon Oct 29, 2007 8:44 am
Subject: Re: Dicom to JPEG conversion, problems with overlay -- solved
catweazle77de
Send Email Send Email
 
Hi,me again.

I figured out how to include the overlay data in the result JPEG, so
I thought I'd share what I did with the rest of the community, in
case somebody else needs to do this and isn't sure how.

Basically you have to change the DicomDictionary class to include the
relevant tags (OverlayData, OvelaryRows/Columns,
OverlayBitsAllocated..) with their respective VR.

Now you can access this data through list.get(...) and process it in
some way. I set the original image's pixel to white where the
corresponding overlay bit was equal to 1, which worked well for me.

So, maybe this will help somebody on their way.

To all others: sorry if this was obvious and I just didn't see it.
I'll try not to post too many dumb questions in the future :-)

Cheers!

#484 From: "oncualtuntas" <oncualtuntas@...>
Date: Sun Nov 4, 2007 4:02 am
Subject: Problem Reading CR,MG like images ?
oncualtuntas
Send Email Send Email
 
Hello All,

I am trying to read CR,MG like images by use of AttributeList.read
(DicomInputStream) method directly from a Modality console. The method
throws no exception but when I watch the data I saw that the
Attributes after the ImageType Tag seems to be a single big attribute
even if they are not. I write the stream to a file by use of
AttributeList.write() and try to read this file but I failed to
retrieve tags except MetaInfo. I tested the modality with some other
non-open source tools to be sure if the modality has some errors but
they worked fine, then I try to read files from disk that have gotten
from modality by other tools, by use of AttributeList.read(file) and
it also works fine. Any idea about my problem?

Thanks in Advance
Oncu Altuntas

#485 From: "pmaneikandan" <pmaneikandan@...>
Date: Thu Dec 6, 2007 3:03 pm
Subject: drawing lines over ct images ....
pmaneikandan
Send Email Send Email
 
hi david sir,

in my application i'm going to show some ct images .

in that i  need to draw a line or rectangle and make some measurements
like in inches,mm,cm.

how can i do that ?

is there any formula for doing this work..

could anyone help me on this ?

thanks in advance.

#486 From: "nwbeeson" <nwbeeson@...>
Date: Sat Dec 22, 2007 4:22 pm
Subject: DICOM AtributeList generated from an SCU request
nwbeeson
Send Email Send Email
 
I am writing a Java program which will be a client to a propriatary
clinical information database, and which will be a DICOM SCP.

I intend to "import" PixelMed into my Java project, since it contains
a *complete* DICOM dictionary. I am convinced that there is a place in
Pixelmed where it has finished parsing the incoming SCU's C-MOVE and
C-FIND requests into an AttributeList. My plan is to "extend" this
PixelMed.class to intercept the process and use the Pixelmed generated
AttributeList to retrieve from our propriatary clinical information
database.

I have spent way too long looking unsuccessfully for this point in
PixelMed. Can someone please tell me at which class.method() the
AttributeList is constructed.

Thanks for any help.

#487 From: "David Clunie" <dclunie@...>
Date: Sat Dec 22, 2007 5:12 pm
Subject: Re: DICOM AtributeList generated from an SCU request
dclunie99
Send Email Send Email
 
--- In pixelmed_dicom@yahoogroups.com, "nwbeeson" <nwbeeson@...> wrote:
>
> I am writing a Java program which will be a client to a propriatary
> clinical information database, and which will be a DICOM SCP.
>
> I intend to "import" PixelMed into my Java project, since it contains
> a *complete* DICOM dictionary. I am convinced that there is a place in
> Pixelmed where it has finished parsing the incoming SCU's C-MOVE and
> C-FIND requests into an AttributeList. My plan is to "extend" this
> PixelMed.class to intercept the process and use the Pixelmed generated
> AttributeList to retrieve from our propriatary clinical information
> database.
>
> I have spent way too long looking unsuccessfully for this point in
> PixelMed. Can someone please tell me at which class.method() the
> AttributeList is constructed.

If you look at how StorageSOPClassSCPDispatcher listens for incoming
data and calls the ReceivedObjectHandler that you supply, you will get
the idea. See the following javadoc:

http://www.dclunie.com/pixelmed/software/javadoc/com/pixelmed/network/StorageSOP\
ClassSCPDispatcher.html
http://www.dclunie.com/pixelmed/software/javadoc/com/pixelmed/network/ReceivedOb\
jectHandler.html

This describes how to store incoming instances.

When you also need to respond to query and retrieval requests, then
you need to provide StorageSOPClassSCPDispatcher with a
QueryResponseGeneratorFactory and a RetrieveResponseGeneratorFactory
as well. For what is expected of the instances returned by these
factories, see:

http://www.dclunie.com/pixelmed/software/javadoc/com/pixelmed/query/QueryRespons\
eGenerator.html
http://www.dclunie.com/pixelmed/software/javadoc/com/pixelmed/query/RetrieveResp\
onseGenerator.html

The AttributeList that has been received by the StorageSOPClassSCP for
either the C-Move or C-Find request is passed as an argument when the
StorageSOPClassSCP calls the
RetrieveResponseGenerator.performRetrieve() or
QueryResponseGenerator.performQuery() method of the instances of the
classes that your factory classes have supplied.

You can look at the com.pixelmed.database query and retrieve response
generators for example code ... I would caution you however, that
there is a lot of work for you to do to map the semantics of the
various different types of database tables and models and ways to
encode (and use escape characters in) and match values to the manner
in which DICOM defines it ... you may well be better off using the
database and query classes in the toolkit as they are and creating a
specialization of the supplied DicomDatabaseInformationModel class
that is specific to your database.

David

#488 From: "davidave81" <davidave81@...>
Date: Mon Jan 7, 2008 1:52 pm
Subject: Display multiple Images Problem
davidave81
Send Email Send Email
 
Hallo everyone,

I am new to Dicom and Pixelmed but worked for a little while now with
it (sourcerelease 20070806). I am sorry to bother you guys, as my
question will surely be very beginner like.
One thing I haven't quite understood is how to display and browse
multiple Images.

What is the difference between multiple frames and multiple images
(e.g. of a Dicom series)?

I got some Dicom images in my local database.
Take as an example Patient123, with the study x.
This study consists of multiple series, where each series itself has
multiple images (the single images just have one frame).
What I would like to do, is to just click on a specific series and
then the first image of this series is displayed. After that (as
implemented in SingleImagePanel) I want to browse the images (e.g.
with the dragged middle mouse button).
This should also be possible, when I open a single image from series
y (which contains other images).

Can you please explain to me, how to achieve this?
Maybe do "loadMultiPanelWithImage(imagePanel,sImg,list);"
whenever middle mouse is dragged?

I am somehow clueless and desperate...

Thanks in advance,
Davidave

#489 From: "jimirrer" <irrer@...>
Date: Mon Jan 7, 2008 4:55 pm
Subject: Re: Display multiple Images Problem
jimirrer
Send Email Send Email
 
Davidave -

I'm not quite sure if I'm interpreting your message
correctly, but I think that you are under the impression
that Pixelmed is an end-user software package, when
it is actually a software toolkit for software developers.
Many of the classes that have "main" methods only have them
as a demonstration/test, though there are several that are
extremely useful as utilities on their own.

To get an application to perform exactly the way you want
with the interface you expect will require some programming.
Pixelmed does make it much easier to do this.

Thanks, and apologies if I mistook your intent.

- Jim



--- In pixelmed_dicom@yahoogroups.com, "davidave81" <davidave81@...>
wrote:
>
> Hallo everyone,
>
> I am new to Dicom and Pixelmed but worked for a little while now with
> it (sourcerelease 20070806). I am sorry to bother you guys, as my
> question will surely be very beginner like.
> One thing I haven't quite understood is how to display and browse
> multiple Images.
>
> What is the difference between multiple frames and multiple images
> (e.g. of a Dicom series)?
>
> I got some Dicom images in my local database.
> Take as an example Patient123, with the study x.
> This study consists of multiple series, where each series itself has
> multiple images (the single images just have one frame).
> What I would like to do, is to just click on a specific series and
> then the first image of this series is displayed. After that (as
> implemented in SingleImagePanel) I want to browse the images (e.g.
> with the dragged middle mouse button).
> This should also be possible, when I open a single image from series
> y (which contains other images).
>
> Can you please explain to me, how to achieve this?
> Maybe do "loadMultiPanelWithImage(imagePanel,sImg,list);"
> whenever middle mouse is dragged?
>
> I am somehow clueless and desperate...
>
> Thanks in advance,
> Davidave
>

#490 From: "davidave81" <davidave81@...>
Date: Tue Jan 8, 2008 12:44 pm
Subject: Re: Display multiple Images Problem
davidave81
Send Email Send Email
 
Hi Jim,

> I'm not quite sure if I'm interpreting your message
> correctly, but I think that you are under the impression
> that Pixelmed is an end-user software package, when
> it is actually a software toolkit for software developers.
>...
> To get an application to perform exactly the way you want
> with the interface you expect will require some programming.
> Pixelmed does make it much easier to do this.
>


I know that this toolkit is for software develeopers and programming
is heavily involved.

And this is why I contacted you guys, in order to help me out with my
programming problem, as I can't imagine to be the first person
wanting the application to behave as mentioned in my first post.

Maybe you can tell me if this idea solves the image browsing problem
well, or you got a better suggestion:

A mousewheel-listener catches the corresponding events and makes a
navigation step (up or down) in the local database Tree.
After this the actually selected Image is loaded in a new SourceImage.

Is it possible to load all images of a single patient study (I can
take care, that the number of images is not that large) in a single
SourceImage-buffer?

Thank you,
Davidave

#491 From: "tonyuccello" <tonyu@...>
Date: Wed Jan 16, 2008 9:01 pm
Subject: SCPECG to DICOM
tonyuccello
Send Email Send Email
 
Hello Dr. Clunie,
thanks for this great toolkit.

I'm currently working with an SCPECG obtained from a new device
prototype recieved in a String [] buffer which I'd like to convert into
a DICOM ECG Waveform and send to a DICOM-aware PACS server.

At first I was thinking of using our ECGPrint class which would create
a JPEG of the 12-lead study and then utilize the ImageToDicom Class in
the com.pixelmed.dicom package to create a Secondary Capture and try
sending it to the DICOM Server. However, eventually we will need "REAL"
ECG Waveforms stored so wondering how to go about this task.

Any help would be much appreciated.

Cheers,
Tony Uccello.

#492 From: "David Clunie" <dclunie@...>
Date: Sun Jan 20, 2008 6:05 pm
Subject: Re: SCPECG to DICOM
dclunie99
Send Email Send Email
 
Hi Tony

--- In pixelmed_dicom@yahoogroups.com, "tonyuccello" <tonyu@...> wrote:
>> I'm currently working with an SCPECG obtained from a new device
> prototype recieved in a String [] buffer which I'd like to convert into
> a DICOM ECG Waveform and send to a DICOM-aware PACS server.
>
> At first I was thinking of using our ECGPrint class which would create
> a JPEG of the 12-lead study and then utilize the ImageToDicom Class in
> the com.pixelmed.dicom package to create a Secondary Capture and try
> sending it to the DICOM Server.

Actually, the preference in the IHE Cardiology group is to use DICOM
Encapsulated PDFs for this, rather than secondary capture images.

> However, eventually we will need "REAL"
> ECG Waveforms stored so wondering how to go about this task.

There is already a (not very robust or well tested) SCPECG decoder in
the toolkit; theoretically you could take the decoded waveform in an
instance of com.pixelmed.displaywave.SCPSourceECG, and use it to build
your own DICOM waveform instance by populating the necessary
attributes and putting the data into Waveform Data, though I have not
implemented this in the toolkit.

Currently the toolkit can display SCPECG and some types of DICOM
waveform, but not actually convert between them or create them.

David

Messages 463 - 492 of 1134   Oldest  |  < Older  |  Newer >  |  Newest
Add to My Yahoo!      XML What's This?

Copyright © 2010 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines NEW - Help