can I get some additional tags for Pet/Ct?

Dear Sebastien,
We are starting to put Orthanc to work for Pet/Ct. You have trimmed off some Dicom tags which we need and which are in the Dicom files sent to Orthanc.

I would be very pleased if I could send you a list of the missing tags which I need so that you could include them. There are a couple of sequences which I also need if I could get them as well.

I'll have to make a list, but first I need to know if my request is reasonable.

Thanks,
Ilan

Do you use the mainline version of Orthanc ? Some tags were indeed missing from the 1.1.0. This morning, we had this problem with veterinary specific tags and using the mainline fixed the problem.

If this does not meet your needs, you may specify custom tags in the configuration file (see section “Dictionary” at the end of the file: https://bitbucket.org/sjodogne/orthanc/raw/Orthanc-1.1.0/Resources/Configuration.json)

I.e:

  "Dictionary" : {
    "0014,1020" : [ "DA", "ValidationExpiryDate", 1, 1 ]
  }

What I want to do is introduce Orthanc to new users, primarily physicians, who are not computer savvy. I suppose we could supply a configuration file with added dictionary elements but it would be best if it "off the shelf".

The more difficult part is the sequences. I don't see any sequences in the dicom tags which are displayed.

I'm not sure what the mainline version is. I just downloaded the easiest thing available. I see it prints that it is version 1.1.0.

As a complement to Alain’s answer, the mainline version of Orthanc now uses the dictionary of DICOM tags coming from DCMTK 3.6.1-20161102 snapshot.

The full dictionary is here, and includes many tags that were missing in DCMTK 3.6.0:
https://bitbucket.org/sjodogne/orthanc/src/default/Resources/Patches/dcmtk-3.6.1-private.dic

Please could you check whether your missing tags are part of this new dictionary?

Thanks,
Sébastien-

What I want to do is introduce Orthanc to new users, primarily physicians, who are not computer savvy. I suppose we could supply a configuration file with added dictionary elements but it would be best if it “off the shelf”.

The mainline version of Orthanc will turn into a new 1.2.0 release in the next few days.

As a consequence, it is very important for us to know whether your issue is now fixed in the mainline: It this is actually the case, Orthanc 1.2.0 will just work “off the shell” for your use cases.

Thanks for the dictionary. I see these are all indeed private tags.
There are a couple of private tags I need, not many, and I will look to see if they are included.

The main tags I need are public, with a couple of sequences. One sequence is 0054,0016 in the PET data:

0054,0016 Radiopharmaceutical Information Sequence:
0018,0031 >Radiopharmaceutical: FDG -- fluorodeoxyglucose
0018,1071 >Radionuclide Volume: 0
0018,1072 >Radionuclide Start Time: 123500.00
0018,1074 >Radionuclide Total Dose: 440786912
0018,1075 >Radionuclide Half Life: 6588.000000
0018,1076 >Radionuclide Positron Fraction: 0.97000002861023

I will collect the entire list before I bother you. First I just want to know if the request is reasonable.

I will collect the entire list before I bother you. First I just want to know if the request is reasonable.

Thanks!

As said by Alain, once this list of tags is known, they can just be added to the dedicated “Dictionary” configuration option of Orthanc.

First of all there are 2 private tags which are not in your dictionary
0009 1039 DT 1 GE Advance Scan.meas_datetime
7053,1000 DS 1 SUVScalefactor PHILIPS

The rest are public tags which I don't find in your output
0002,0010
0002,0016
0008,0018
0008,002A
0008,1070
0018,0060
0018,0088
0018,1060
0018,1063
0018,1072
0018,1074
0018,1075
0018,1078
0018,1151
0018,1242
0020,0013
0020,0032
0028,1050
0028,1051
0028,1053
0028,3003
0054,0016
0054,0071
0054,0400

They might not be there because some of them are not in the input file I chose. Certainly most of them are indeed in the input file but not in the file read back from the server.

If you like I can look for their specifications, but they are fairly well known tags.

The rest are public tags which I don’t find in your output […] If you like I can look for their specifications, but they are fairly well known tags.

Sorry, my mistake: The message I sent you only contained the dictionary of private tags. The full dictionary that will be used in Orthanc 1.2.0 consists of the conjunction of 2 files:

  1. https://bitbucket.org/sjodogne/orthanc/src/default/Resources/Patches/dcmtk-3.6.1-private.dic (the dictionary of private tags used by the most recent DCMTK 3.6.1 snapshot).

  2. https://github.com/pauldotknopf/DCMTK.NET/blob/master/libs/dcmtk-3.6.0-win32-i386/share/dcmtk/dicom.dic (the dictionary of public tags used by DCMTK 3.6.0).

I have checked: All the public tags that were missing above are indeed very widespread, and are part of the second file. As a consequence, Orthanc supports all of them out of the box.

First of all there are 2 private tags which are not in your dictionary
0009 1039 DT 1 GE Advance Scan.meas_datetime
7053,1000 DS 1 SUVScalefactor PHILIPS

Regarding these two non-standard private tags, I confirm they are neither part of Orthanc, nor of DCMTK. You will have to define them in the “Dictionary”.

Please provide a sample DICOM file so that we can provide further guidance.

Regards,
Sébastien-

Thanks Sebastien,
I agree that all the public tags are in the version to be released. So we are good to go.

That Philips private tag is an embarrassment. Philips did a terrible job on defining their SUV. If you go by the standard values you get nonsense. What did Philips do about the problem? Fix the standard values? No, they put in a private tag which gives the proper value.
Until I finally heard about this tag I simply couldn't get the right numbers. I guess it isn't surprising that it isn't well known.
That one I can put in a private dictionary.

The GE is nice, but not crucial.

Ilan

Dear Sebastien,

Thank you for looking at our problem that we discovered this morning.

For Philips Private tag you can download a PET sample from my owncloud server : http://163.172.169.15/owncloud/index.php/s/v6U2YwqKynOmnJ2

In theory PET data should be in BqmL but Philips data come with "Counts" label which is Philips specific.
In the DICOM Philips gives 2 important DICOM tag :
7053, 1000 : which is the factor to translate Counts to SUV
7053, 1009 : which is the factore to translate Counts to BqmL

So I would add these two private tag.
This is not an exception, it is Philips rule ...

Best regards,

Salim

Dear Ilan and Salim,

Yes, I agree, accessing SUV information is really painful despite the existence of the DICOM standard (I also work with nuclear medicine images).

You will find enclosed with this message two documents, of which the first originates from the QIBA task force within RSNA (check out their Appendix G) [1], and the second from the 3D Slicer project. Those two documents are really helpful to correctly extract SUV information from most modalities (notably for GE and Philips). A while ago, I initiated an Orthanc plugin to do this computation, but time is definitely a sparse resource and this is still work-in-progress…

Back to your original question, here is how to write the “Dictionary” section of the Orthanc configuration file so that the tags you need from Philips are readily available:

“Dictionary” : {
“7053,1000” : [ “LO”, “SUVScaleFactor”, 1, 1, “Philips PET Private Group” ],
“7053,1003” : [ “ST”, “OriginalImageFileName”, 1, 1, “Philips PET Private Group” ],
“7053,1009” : [ “DS”, “ActivityConcentrationScaleFactor”, 1, 1, “Philips PET Private Group” ]
}

Note that this syntax will only work with the Orthanc mainline (in other words, release 1.1.0 is too old). For future reference, I extracted the VR (value representations) for these private tags from the DICOM conformance statement of “GEMINI TF Version 3.1”.

HTH,
Sébastien-

[1] http://qibawiki.rsna.org/index.php/FDG-PET_Biomarker_Ctte

QIBA_FDG-PET_Profile_v111-edits.doc (2.8 MB)

HowToReadPETDICOMFiles.doc (44.5 KB)

Just to complete the Dictionary for the GE Advance tag, I added an additional line:

  "Dictionary" : {
    "0009,103b" : [ "DT", "GE Advance Scan.admin_datetime", 1, 1, "GE Advance Private Group" ],
    "7053,1000" : [ "LO", "SUVScaleFactor", 1, 1, "Philips PET Private Group" ],
    "7053,1003" : [ "ST", "OriginalImageFileName", 1, 1, "Philips PET Private Group" ],
    "7053,1009" : [ "DS", "ActivityConcentrationScaleFactor", 1, 1, "Philips PET Private Group" ]
  }

Dear all,

Thank you for your active support.

In a long term vision maybe there is a way to integrate our viewer as a service in Orthanc.

Now we will work on add orthanc services in ImageJ/Fiji, I see a lot of possibilities that will bring many usefull features to phyisicians.

Your talking about SUV calculation, that is something we have worked on for a long time. Ilan have a great experience on SUV calculation, we made huge effort to check the acuracy of our SUV values calculated on many dataset of images comming from all over the world.

Maybe it will have a way to call Fiji/ImageJ and our viewer from orthanc to open a PET/CT studies.
The viewer we are building is not just about display and SUV calculation but also handle a lot of advanced image processing like MIP reconstruction, Metabolic tumor volume calculation, SUV derivative calculation (SUL, Peak...), follow up sync, automatic report, secondary screen capture...

However for sure we will stay in touch because we have a pretty good project to build together.

Best regards,

Salim

Hi all,

I'm sorry i'm going to ask a stupid question...

What is the aim of the Dictionnary in the configuration.json ?

In my orthanc server in the webserver I see that the private tag are all here even the private tag that I didn't declare in the dictionnary.

I wanted do know, does Orthanc do a filtering at the DICOM storage and reject the dicom tag that are unknown or does all DICOM tag are stored and the dictionnary might be a way to access the tags through API ?

In short, I want to know if my orthanc safely store all the dicom tag it recieve (and in this case for what purpose is the dictionary declaration in settings.json) or if there is some filtering in the storage.

Sorry to ask you this question that is probably stupid,

Salim

Hello,

What is the aim of the Dictionnary in the configuration.json ?

This option is used to give a symbolic name, a data type (i.e. a “value representation”), and an expected multiplicity to private tags.

In my orthanc server in the webserver I see that the private tag are all here even the private tag that I didn’t declare in the dictionnary.

Yes, the undeclared private tags do appear, but simply appear as “(Unknown Tag & Data): Null” in Orthanc Explorer. If you want to access their name and content, you can (but are not obliged to) declare such tags in the dictionary.

I wanted do know, does Orthanc do a filtering at the DICOM storage and reject the dicom tag that are unknown or does all DICOM tag are stored and the dictionnary might be a way to access the tags through API ?

No, Orthanc never modifies the DICOM files it receives. No private DICOM tag will be rejected or filtered out. It is “just” a matter of display.

Note however that an incoming DICOM file will be rejected by Orthanc if some of its declared private tag does not observe the multiplicity or the value representation, as told in the “Dictionary” configuration option. But this filtering is done at the file level, not at the tag level: In other words, the full DICOM file will be rejected, not its individual tags.

In short, I want to know if my orthanc safely store all the dicom tag it recieve (and in this case for what purpose is the dictionary declaration in settings.json) or if there is some filtering in the storage.

Orthanc will store all the DICOM tags.

HTH,
Sébastien-

Thank you so much for your very clear explanations !

Best regards,

Salim