Link files in Radiant Database to Orthanc without copying them

112 views
Skip to first unread message

Amir Zolal

unread,
Jul 27, 2021, 3:51:31 AM7/27/21
to Orthanc Users
Hello,

I have a 1+ TB database in Radiant local store. I would like to add them to Orthanc to view them using webviewer on other computer. 

Storing them again in Orthanc is not an option - the process of reimporting / updating database is too slow and I see no reason to have the files stored twice.

So I turned the StoreDicom option off.

After that, the webviewer will not see the images.

There was an old thread here from 2016, obviously you have to use some metadata to link to the location of the original file. But there was no real solution located in that thread and the link to the documentation on how to store the metadata does not work anymore.

Does anyone have a working solution? 

Thanks in advance,

Amir

Alain Mazy

unread,
Jul 27, 2021, 10:38:59 AM7/27/21
to Amir Zolal, Orthanc Users
Hi Amir,

No, I'm afraid there are still no solution to this question.

If you use Orthanc as the primary storage, you can certainly query-retrieve the images from Radiant when you want to visualize them in Radiant (I think that Radiant has a DICOM client that can perform C-FIND and C-MOVE).

If Radiant exposes a Dicom Server (which I don't know), you could also retrieve only the data of interest in Orthanc in order to visualize them.  By using the "MaximumStorageSize" configuration, you could store data in Orthanc only temporarily and avoid using too much storage.

HTH

Alain.

--
You received this message because you are subscribed to the Google Groups "Orthanc Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to orthanc-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/orthanc-users/0b05a39f-a3ea-432a-bf42-fc0b98777465n%40googlegroups.com.

Sébastien Jodogne

unread,
Jul 30, 2021, 5:44:51 AM7/30/21
to Orthanc Users
Hello,

The solution to this question would be to create a C/C++ plugin that implements a custom storage area using "OrthancPluginRegisterStorageArea2()":

This plugin would start a thread that continuously monitors the content of the Radiant storage folder. The thread would be started/stopped by listening to the "OrthancPluginChangeType_OrthancStarted" and "OrthancPluginChangeType_OrthancStopped" events using "OrthancPluginRegisterOnChangeCallback()":

Depending on your operating system, different libraries can be used to monitor the content of a folder. Once a new DICOM file is found by the thread, the plugin would upload it to Orthanc by doing a POST call to "/instances" using "OrthancPluginRestApiPost()":

Furthermore, after POST-ing the new detected instance, the thread would store in an external database (e.g. SQLite or PostgreSQL), a row that maps the "SOPInstanceUID" DICOM tag and the Orthanc identifier to the path in the Radiant folder (in, say, "Table1"):

Now, the part of the plugin that implements the custom storage area would behave as follows:
  • When a "OrthancPluginContentType_Dicom" content type is encountered:
    • The "OrthancPluginStorageCreate" callback would parse the DICOM content in order to extract the "SOPInstanceUID" DICOM tag, and stores in the external database the mapping from the UUID of the attachment to the "SOPInstanceUID" (in, say, "Table2"): https://book.orthanc-server.com/faq/orthanc-storage.html
    • The "OrthancPluginStorageReadWhole" callback would use the database to map the provided UUID of the attachment, to the "SOPInstanceUID" (using "Table2"), then to the path in the Radiant folder (using "Table1"). The content of the file from Radiant would be returned by the callback.
    • Optionally, the "OrthancPluginStorageReadRange" callback would use the same approach as "OrthancPluginStorageReadWhole".
    • The "OrthancPluginStorageDelete" only remove the row in the database that corresponds to the UUID of the attachment (in "Table2").
  • Other content types are handled as in the "StorageArea" sample plugin: https://hg.orthanc-server.com/orthanc/file/Orthanc-1.9.6/OrthancServer/Plugins/Samples/StorageArea
Optionally, your plugin could also monitor the removal of file in the Radiant storage area, and automatically call DELETE on "/instances/{id}" by using the external database (which would avoid orphaned entries in "Table1").

Summarizing, this is definitely possible to use Orthanc as a proxy to another DICOM server, but this requires some programming. If you don't feel comfortable with this, get in touch with a professional assistance to develop this plugin for you and release it as free and open-source software:

Regards,
Sébastien-

Sébastien Jodogne

unread,
Sep 24, 2021, 11:15:17 AM9/24/21
to Orthanc Users
Hello,

For your interest, the solution I outlined in my previous message has been implemented by the new "Folder Indexer" plugin by UCLouvain:

Regards,
Sébastien-
Reply all
Reply to author
Forward
0 new messages