C_FIND Query/Retrieve level

Hi,

I am trying to use the Orthanc’s C_FIND operation to query at the lowest level.
According to the spec, the lowest level available in tag (0008, 0052) value should be “IMAGE”.
However, I see that Orthanc sends the value “INSTANCE” whether I specify “Image” or “Instance” in the request body.
for example, the following url: http://localhost:8042/modalities/mypacs/query
with body: {“Level”:“IMAGE”,“Query”:{“PatientID”:“”,“PatientName”:“”, “PatientSex”:“”, “Modality”:“”, “SeriesInstanceUID”:“some value uid”}, “Limit”:1}
will use “INSTANCE” value in (0008, 0052).
Is this supposed to be this way?

Also, as a followup question - which tags can I query for in “IMAGE” level?
For example, can I query for the PixelSpacing/Rows/Columns values?
I would like to be able to understand the resolution of an image before I actually retrieve it. For this, I need these values and more…

I saw that Orthanc disregards the values if I place them in the query body, and does not add them to the actual request being sent.

Please let me know what you think,

Best regards,
Gil

For your first question, I would suggest that the word “image” is always replaced by “instance” within DICOM.

For your second question, in my experience if you add the tag to the query, then you can expect that tags’ values to be returned. I’ve a lot of experience with other DICOM servers and that’s typically the case. I’m very new to Orthanc so I can’t speak as to how the developers have decided to deal with this sort of request, but if their API and interface are anything to go by, then I would be surprised if this wasn’t also the case with Orthanc. Try it out - add the DICOM tag (0028,0030) to the tool that you’re using for querying and see what happens.

Regards,

D

Thank you for your answer!

Good to know about the first issue.

For the second issue: I actually tested this with WireShark, and I saw that the tags I added (such as PixelSpacing/Rows/Columns/etc.) are not added to the actual query being sent.
For example, if I specify the following body:
{“Level”:“instance”,“Query”:{“PatientID”:“”,“PatientName”:“”, “PatientSex”:“”, “Modality”:“”, “SeriesInstanceUID”:“1234”, “Rows”:“”, “Columns”:“”, “PixelSpacing”:“”}}

The DICOM query message sent to the PACS does not include the Rows/PixelSpacing/Columns tags:

wireshark.jpg

Am I missing anything?

Thank you very much,
Gil

בתאריך יום שני, 13 במאי 2019 בשעה 23:36:37 UTC+3, מאת Dave:

Hello,

(1) Whether to use “IMAGE” or “INSTANCE” in tag (0008, 0052) can change depending on the manufacturer of the remote modality. This is why the “DicomModalities” configuration option of Orthanc allows to specify a manufacturer. Excerpt:

/**

  • A fourth parameter is available to enable patches for
  • specific PACS manufacturers. The allowed values are currently:
    • “Generic” (default value),
    • “GenericNoWildcardInDates” (to replace “*” by “” in date fields
  • in outgoing C-Find requests originating from Orthanc),
    • “GenericNoUniversalWildcard” (to replace “*” by “” in all fields
  • in outgoing C-Find SCU requests originating from Orthanc),
    • “StoreScp” (storescp tool from DCMTK),
    • “ClearCanvas”,
    • “Dcm4Chee”,
    • “Vitrea”,
    • “GE” (Enterprise Archive, MRI consoles and Advantage Workstation
  • from GE Healthcare).

Thank you Sébastien,

(1) I hope “Instance” (as the default) is the most commonly supported option. I will however need to add support for the other options inthe UI or some other means in the future.
(2) Thanks so much for adding this option in the next release. Will Orthanc support returning these tags in IMAGE level query?

Thanks so much, I really like using the Orthanc in my product!!
Gil

בתאריך יום שלישי, 14 במאי 2019 בשעה 11:47:27 UTC+3, מאת Sébastien Jodogne:

(1) Yes - “INSTANCE” is the most common, as can be seen in the source code:
https://bitbucket.org/sjodogne/orthanc/src/Orthanc-1.5.6/Core/DicomNetworking/DicomUserConnection.cpp#lines-693

(2) Yes - The “INSTANCE” vs. “IMAGE” distinction is done depending upon the “manufacturer” option, and is transparent to the clients of the REST API.