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.
Overview
The basic outline of steps required to utilize CTP include:
- Installing prerequisite software
- Installing CTP
- Configuring CTP for your needs
- Importing your data: this will apply anonymization procedure to the original data
- Processing your data
- Exporting your data
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.
1. Installing prerequisite software
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:
- Java 1.5 (or better) JRE must be present on the system. Java 1.6 is recommended. Note that only the JRE is required, not the JDK, and therefore this is already installed on most typical computers.
- If you wish to utilize some of CTP's advanced functionality you must also install the Java Advanced Imaging ImageIO Tools.
- Note that this is not required if all you wish to do is use CTP to de-identify DICOM images or submit de-identified images to NBIA. These tools are required if you want to use CTP to view images, or to create JPG thumbnails during the processing pipeline.
- Installation of the ImageIO tools in Linux requires some additional steps not outlined in Sun's installation instructions. See this page insert link for more information.
2. Installing CTP
Downloading 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.:
- http://mircwiki.rsna.org/index.php?title=CTP-The_RSNA_Clinical_Trial_Processor - The official RSNA wiki site that is updated regularly by the developer of CTP. This always contains the latest bleeding edge release of CTP.
- NBIA GForge files archive - The National Biomedical Imaging Archive (NBIA) software's download site lists all the binaries for installing NBIA. Each release of NBIA includes a .zip distribution of CTP (e.g. "nbia_CTP_Client_5.0.1.zip". This version usually lags behind the RSNA site but has been tested for compatibility with the latest NBIA release.
Extracting CTP
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.
- NBIA installer - use your favorite zip extraction tool and unzip the nbia_CTP_Client_X.X.X.zip to a location on your local hard drive.
- RSNA installer
- Windows Installation - Simply double click the CTP-installer.jar and use the GUI installer program to select the location where you'd like to install CTP.
- Linux/Mac Installation - Open a console/terminal and navigate to the location where you saved CTP-installer.jar. Then type "java -jar CTP-installer.jar" and the GUI installer program will initiate, allowing you to choose where you'd like to install CTP.
3. Configuring CTP for your needs
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.
Importing your data
There are 3 primary locations which you can import data from with CTP.
- Your local hard drive
- A DICOM compatible workstation or PACS
- A remote computer
The RSNA site's documentation contains detailed information on customizing CTP based on your incoming data source.
Importing from local hard drive
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.
Processing your data
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:
- Anonymizers - These can be used to systematically de-identify the contents of DICOM header elements, or of XML metadata.
- Filters - Very similar to Anonymizers, these can be used to check for specific conditions within DICOM or XML. If the conditions are met these can be "filtered" out for further review prior to processing.
- IDMap - This pipeline stage can be used to generate a mapping of identified and de-identified values of important DICOM elements such as PatientID, UIDs, or accession numbers.
- DatabaseVerifier - This is mainly utilized in conjunction with NBIA. It allows CTP to keep a record of every object sent to the remote NBIA server and subsequently query the NBIA database to ensure it was received to verify no images were lost in transit.
Exporting your data
The most common ways of exporting the data which you've processed in CTP include:
- DICOM export - This is useful for sending your processed data back to a PACS
- HTTP(s) export - This is the method typically utilized to submit your data to an NBIA server (or potentially XNAT - testing needs to be performed to see how this would work)
- Hard drive export - This is called a Storage Service in CTP, which can simply store the processed data to a specified location on a hard drive.
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.