Skip to content
/ adit Public
forked from openradx/adit

ADIT (Automated DICOM Transfer) is a swiss army knife to exchange DICOM data between various systems by using a convenient web frontend.

License

Notifications You must be signed in to change notification settings

lmdulz/adit

 
 

Repository files navigation

About

ADIT (Automated DICOM Transfer) is a swiss army knife to exchange DICOM data between various systems by using a convenient web frontend.

Features

  • Transfer DICOM data between DICOM / PACS servers
  • Download DICOM data to a local or network folder
  • Pseudonymize DICOM data on the fly
  • Specify a trial name for the transfered data (stored in the DICOM header)
  • Use the web interface to select studies to transfer or download (Selective Transfer)
  • Download the data to an encrpyted 7-Zip archive (only in Selective Transfer mode)
  • Upload a batch file to make multiple queries on a DICOM server (Batch Query)
  • Upload a batch file to transfer or download multiple studies (Batch Transfer)
  • Define when transfers should happen, e.g. on at night (to reduce PACS server load)
  • Fine-grained control of what users can do or can't do
  • Help modals with detailed information for the most important features

Upcoming features

  • A REST API to manage transfers programmatically from a third party application
  • An upload portal to upload DICOM images through a web interface

Screenshots

Screenshot1

Screenshot2

Screenshot3

Screenshot4

Architectural overview

The backend of ADIT is built using the Django web framework and data is stored in a PostgreSQL database. For DICOM transfer pynetdicom of the pydicom project is used. The frontend is progressively enhanced with Javascript, but also works without it.

A transfer job contains one or more transfer tasks that describe what DICOM data to transfer and how to transfer it (source, destination, pseudonym, and so on). A transfer task is processed by a Celery worker (a task scheduler) in the background running in its own Docker container. Celery internally uses RabbitMQ to send new tasks to the worker and Redis to store the results (if needed).

Redis is also used as a caching layer to relieve the PACS server of already done queries (e.g. querying for the Patient ID by using Patient Name and Patient Birth Date).

When the DICOM data to transfer needs to be modified (e.g. pseudonymized) it is downloaded temporarily to the ADIT webserver, then transformed and uploaded to the destination server resp. moved to the destination folder.

Downloading data from a DICOM server can done by using a C-GET or C-MOVE operation. C-GET is prioritized as a worker can fetch the DICOM data directly from the server. Unfortunately, C-GET is not supported by many DICOM servers. When downloading data using a C-MOVE operation, ADIT commands the source DICOM server to send the data to a C-STORE SCP server running in a separate container (named Receiver) that receives the DICOM data and sends it back to the worker using a RabbitMQ message.

Contributors

Disclaimer

ADIT is not a certified medical product. So use at your own risk.

License

  • GPLv3

About

ADIT (Automated DICOM Transfer) is a swiss army knife to exchange DICOM data between various systems by using a convenient web frontend.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 79.4%
  • HTML 15.7%
  • Shell 2.4%
  • JavaScript 1.7%
  • Other 0.8%