The purpose of this page is to serve as a beginner's guide to Clinical Trials Processor (CTP) with particular emphasis on internal de-identification of DICOM images and submission of this data to an instance of NBIA or XNAT. If you are already familiar with how CTP works and just want help with configuring it please proceed to the Example CTP use cases and configuration files page.
Note: This page is currently a work in progress. This note will be removed once documentation is considered mostly complete.
The basic outline of steps required to utilize CTP include:
Each step is described in detail below. At the end of the page there is also a section with customized configuration files and scripts for the most common CTP use cases.
It's possible you may not actually need to install anything prior to using CTP and there are only 2 potential things you may need to obtain prior to using CTP:
CTP can be found in 2 locations. Generally the two packages stay reasonably close together in terms of functionality. If you are looking for a new feature that you've heard about in CTP use the RSNA link. If you're just looking for a stable way to de-identify your data or if you need to submit de-identified data to NBIA use the GForge link.:
Once you have downloaded CTP you will need to extract it to a location on your local hard drive. The method for doing this varies by operating system and the installer you chose to download.
Once you've installed CTP you must setup some configuration options prior to running it. All of these options are specified with the config.xml file located in the root of the CTP installation directory. This can be easily modified using any text editor and is divided into several "pipeline stages" for importing, processing, and exporting your data. The rest of this section explains the basic structure of the config.xml file.
An example below describes a customized config.xml file is shown below. The pipeline described by this script will receive DICOM data on port 24104, anonymize them using the script and lookup table you can specify, and save the anonymized data in the specified root. Script, lookup table and root are marked in the script.
<Configuration> <Server port="24080"/> <Pipeline name="Main Pipeline"> <ImportService name="dicomImport" id="dicomImport" class="org.rsna.ctp.stdstages.DicomImportService" root="roots/dicomImportService" port="24104" logConnections="no" suppressDuplicates="no" /> <Processor name="pixel-checker" id="pixel-checker" class="org.rsna.ctp.stdstages.DicomFilter" root="roots/pixel-checker" script="scripts/pixel-checker-filter.script" quarantine="quarantines/pixel-checker" /> <Processor name="idmap" class="org.rsna.ctp.stdstages.IDMap" root="roots/idmap" /> <StorageService name="storage" id="storage" class="org.rsna.ctp.stdstages.FileStorageService" root="/projects/qin/CTPStorageDir" <!-- ROOT: CUSTOMIZE THIS! --!> type="month" timeDepth="0" acceptDuplicateUIDs="yes" acceptDicomObjects="yes" acceptXmlObjects="no" acceptZipObjects="no" acceptFileObjects="no" returnStoredFile="yes" quarantine="quarantines/storage" /> <Anonymizer name="DicomAnonymizer" class="org.rsna.ctp.stdstages.DicomAnonymizer" root="de-id/dicom-anonymizer" script="scripts/QIN-PROSTATE-BWH.script" <!-- SCRIPT: CUSTOMIZE THIS! --!> lookupTable="scripts/bwh_deid_list_internal.txt" <!-- LOOKUP TABLE: CUSTOMIZE THIS! --!> quarantine="quarantines/dicom-anonymizer" /> </Pipeline> </Configuration> |
Anonymizer script defines the rules for DICOM anonymization. You can use the default CIP CTP script available here: https://wiki.nci.nih.gov/download/attachments/39295860/ctp-s142-cleaner.script as the starting point for customization. This script allows you to choose which tags you would like to keep/remove/change, and allows you to offset the dates.
Lookup table is optional, and when specified, it allows to map the original IDs to the anonymized patient IDs. The format of this file is the following:
ptid/ORIGINAL_SUBJECT_ID=DEIDENTIFIED_SUBJECT_ID |
Once you configured the import pipeline, you can launch CTP service using the launcher located in the installation directory – see the directions on running CTP here: http://mircwiki.rsna.org/index.php?title=CTP-The_RSNA_Clinical_Trial_Processor#Running_CTP. You should use the web interface of CTP to monitor the progress of transmission. You can also use it to change your deidentification script, check the mapping of subject IDs, and shutdown the CTP service once the transmission is finished.
There are 3 primary locations which you can import data from with CTP.
The RSNA site's documentation contains detailed information on customizing CTP based on your incoming data source.
You can use the utility FileSender http://mircwiki.rsna.org/index.php?title=FileSender to send the original data from your hard drive to CTP. Considering you configured CTP to listen on port 24104 as described in the config file above, you can set the Destination field in FileSender to dicom://CTP:FS@localhost:24104, choose the directory on the left panel, and send the data to CTP.
CTP contains a number of specialized processing "pipelines" for modifying the contents of your data. Again the RSNA wiki site explains all of the CTP Processors in full detail, but below you will find a list of the most common types of processing pipelines and a short summary of their function:
The most common ways of exporting the data which you've processed in CTP include:
Full details relating to how each of these can be customized along with the other export methods can be found on the RSNA wiki in the Export Services section and the Storage Service section respectively.