Configuring the CTPClient Application for Clinical Trials
The CTPClient application is a program for anonymizing images and transmitting them from image acquisition sites to principal investigator sites in clinical trials. This article describes how to configure, distribute, and run the program. The intended audience for this article is clinical trial administrators and their software minions.
1 Running CTPClient
CTPClient can be launched via the Java webstart mechanism, thus removing the necessity for installing CTP applications at the image acquisition sites. When run via webstart, the user accesses a URL on the principal investigator's CTP site, and the browser downloads CTPClient and starts it. The recommended method for launching CTPClient via webstart is to use the CTP Application Server on the CTP site. For general information on the Application Server, see Using the CTP Application Server.
CTPClient can also be launched as a stand-alone application installed on the client computer. When run stand-alone, the program is started by double-clicking the program's icon or by launching a command window and entering the command:
- java -jar CTPClient.jar [options]
where [options] is a series of quoted parameters, each in the form:
- "param=value"
2 The Processing Pipeline
2.1 Import Services
CTPClient has two import mechanisms.
- Locally stored files can be manually selected.
- A DICOM Storage SCP can be enabled to receive files from PACS systems or workstations.
2.2 Processing Stages
CTPClient has a fixed processing pipeline consisting of these stages, in this order:
- DicomFilter
- DicomDecompressor
- DicomPixelAnonymizer
- DicomAnonymizer
The DicomFilter and DicomPixelAnonymizer stages must be explicitly enabled using the parameters described in the next section. The DicomDecompressor stage is run only if the object being processed matches a signature of the DicomPixelAnonymizer; otherwise, the object is not decompressed. See The CTP DICOM Pixel Anonymizer for more information.
The DicomAnonymizer is always enabled.
No default script is provided for the DicomFilter.
Default scripts are provided for the DicomPixelAnonymizer and the DicomAnonymizer.
No default lookup table is provided for the DicomAnonymizer.
2.3 ExportServices
CTPClient has three export services:
- HttpExportService
- DicomExportService
- DirectoryStorageService
3 Run-time Configuration
CTPClient is designed to be configured by setting the [options] parameters for the transmitting site. When run via webstart, these parameters can be supplied by query parameters in the URL, as in this example:
Note that when a value includes whitespace or any other characters that are illegal in a URL, the value must be URL-encoded.
As mentioned in Building CTPClient, below, a special CTPClient build can be created for specific applications, including application-specific files and configuration parameters.
3.1 Configuration Parameters
The parameters supported by the program are shown below.
3.1.1 Window Display Parameters
- windowTitle: The text to be shown in the title bar of the CTP Client window. The default is "CTP Client".
- panelTitle: The text to be shown at the top of the main pane in the CTPClient UI. The default is "CTP Client".
- helpURL: The URL to be accessed when the user clicks the Help button on the CTPClient UI. If this parameter is missing, the Help button is not displayed.
3.1.2 Import Service Parameters
- showBrowseButton: Specifies whether to display a button allowing the user to browse the local disk for images to display. If an scpPort is defined and the showBrowseButton parameter is set to "no", a browse button is not displayed. If the parameter is set to any other value, the dialog button is displayed, whether an scpPort parameter is supplied or not.
- scpPort: The port on which CTPClient is to start a DICOM Storage SCP to receive objects via the DICOM protocol. If set to any integer greater than zero, CTPClient starts the SCP and accepts transfers from DICOM Storage SCUs. If the parameter is not supplied, or if it is blank or a non-integer value, the SCP is disabled. The default configuration does not enable the SCP.
- acceptNonImageObjects: Specifies whether non-image objects are to be selected for processing. If set to "yes", all objects are accepted. If set to any other value, only images are accepted. The default configuration only accepts image objects.
- dialogEnabled: Specifies whether to provide a dialog for entry of parameters at runtime. If set to "yes", a dialog is constructed from definitions in an XML file. If set to any other value, no dialog is provided.
- dialogName: The name of an XML file stored on the CTP server in the same directory as the CTPClient being served by the Application Server. If the file is not found on the server, CTPClient looks for the file in the same directory in which the program is running. If that fails, CTPClient looks for the default dialog file built into the application (DIALOG.xml). If the XML file cannot be found, the dialog is disabled, even if the dialogEnabled parameter is set to "yes". Values provided by the user in the dialog are treated as if they were options included in the start command of the program. {See The Dialog XML Schema for a description of how to configure the dialog.)
- showDialogButton: Specifies whether to display a button allowing the user to display the dialog. If set to "no", a dialog button is not displayed. If set to any other value, the dialog button is displayed.
3.1.3 Processing Pipeline Parameters
- dfEnabled: Specifies whether to use the DicomFilter to select objects for processing. If set to "yes", objects are selected using the DicomFilter script. If set to any other value, no filtering is done.
- dfScriptName: The name of a DicomFilter script file stored on the CTP server in the same directory as the CTPClient being served by the Application Server. When present, CTPClient downloads the script file from the server. When not present, CTPClient looks for the default script (DF.script) built into the application. If no default script is found, the DicomFilter stage is disabled, even if the dfEnabled parameter is set to "yes".
- dpaEnabled: Specifies whether the DicomPixelAnonymizer is to be included in the processing of objects. If set to "yes", objects are processed using the DicomPixelAnonymizer script. If set to any other value, no pixel anonymization is done.
- dpaScriptName: The name of a DicomPixelAnonymizer script file stored on the CTP server in the same directory as the CTPClient being served by the Application Server. When present, CTPClient downloads the script file from the server. When not present, CTPClient looks for the default script (DPA.script) built into the application. If no default script is found, the DicomPixelAnonymizer stage is disabled, even if the dpaEnabled parameter is set to "yes".
- setBurnedInAnnotation: Specifies whether the BurnedInAnnotation element is to be set to "NO" for DICOM objects that match a DicomPixelAnonymizer signature. If set to "yes", the element value is set, if the parameter is missing or has any other value, the element is not modified.
- daScriptName: The name of a DicomAnonymizer script file stored on the CTP server in the same directory as the CTPClient being served by the Application Server. When present, CTPClient downloads the script file from the server. When not present, CTPClient uses the default script (DA.script) built into the application.
- daLUTName: The name of a DicomAnonymizer lookup table file stored on the CTP server in the same directory as the CTPClient being served by the Application Server. When present, CTPClient downloads the lookup table file from the server. When not present, CTPClient looks for the default lookup table (LUT.properties) built into the application. If no lookup table is available, an empty lookup table is provided.
In addition to the standard parameters above, CTPClient supports special parameters for modifying the DicomAnonymizer script parameters and lookup table entries.
Any parameter name starting with the at-sign ( '@' ) is treated as an anonymizer script modification. The '@' is removed, and the rest of the parameter name is used as the name of a script PARAM. The parameter value (the text after the '=' character) is used as the value for that PARAM. The intent of this feature is to allow a standard script to be tailored for a specific image acquisition site. Note that this feature does not allow element scripts to be modified; it only allows script PARAM values to be changed.
Any parameter name starting with the dollar-sign ( '$' ) is treated as a lookup table modification. The '$' is removed, and the rest of the parameter name is used as the lookup table key. The parameter value (the text after the '=' character) is used as the value for that key. The intent of this feature is to allow a standard lookup table to be tailored for a specific image acquisition site.
For more information on anonymizer parameters and lookup tables, see The CTP DICOM Anonymizer, The CTP DICOM Anonymizer Configurator, and The CTP Lookup Table Editor.
3.1.4 Export Service Parameters
- httpURL: The URL of the destination HttpImportService. If this parameter is not supplied, or if it is blank, the HttpExportService is disabled. This parameter must be a complete URL, including the protocol (http://IP:port or https://IP:port).
- showURL: "yes" to display a UI field for entering the URL of the destination HttpImportService. "no" to suppress the UI field, thus forcing the URL to be the value of the httpURL parameter. The default value is "yes".
- zip: "yes" to zip files before transmission via HTTP. The default value is "no". This feature is intended only for transmissions to a CTP site with an HttpImportService configured with a zip parameter set to "yes".
- dicomURL: The URL of the destination DICOM Storage SCP (e.g. PACS or workstation). If this parameter is not supplied, or if it is blank, the DicomExportService is disabled. This parameter must be a complete URL, including the protocol (e.g. dicom://CalledAET:CallingAET@IP:port).
- exportDirectory: The path to a directory in which processed files are to be stored. Files are stored with names constructed from their SOPInstanceUIDs. If this parameter is not supplied, or if it is blank, the DirectoryStorageService is disabled.
- renameFiles: Whether to rename exported files in the form Study_Series_Acquisition_Instance.dcm. If this parameter is not supplied, or if its value is not "yes", files are named by their SOPInstanceUID values.
Note: If CTPClient is configured to export to an HTTP destination that requires authentication, the credentials can be included in the httpURL parameter like this: http://username:password@IPAddress:port. If the credentials are omitted from the URL and the destination requires them, CTPClient displays a dialog allowing the user to enter the credentials at the time of transmission.
3.1.5 Webstart Parameters
The Application Server supplies three parameters automatically when starting CTPClient. These are used by CTPClient to contact the server when the dfScriptName, dpaScriptName, daScriptName, or daLUTName parameters are supplied. If CTPClient is not started via webstart and the project requires that files be obtained from a server, the three parameters below must be supplied explicitly.
- protocol: The protocol to be used for communication with the CTP site's web server.
- host: The host IP address or domain name (and port) of the CTP site's web server.
- application: The name of the application ("CTPClient").
3.1.6 Debugging Parameters
When processing very large (typically multi-frame) objects, it may be necessary to allocate more than the default memory to the application using the max-heap-size attribute described in Using the CTP Application Server. To make it easy to see how much memory is in use, a button can be displayed in the application's window footer bar by enabling the showMemory parameter.
- showMemory: "yes" to display the button. The default is "no".
3.2 Default Configuration
For CTPClient instances that are run via Java webstart, it is possible to predefine parameter values in the CTPClient.xsl file stored on the server.
For CTPClient instances that are installed locally, it is possible to predefine parmeter values in a properties file. The file must be called config.default, and it must be stored in the same directory as CTPClient.jar. Here is an example:
windowTitle=My Trial PanelTitle=My Trial helpURL=http://ctp.myUniversity.edu/myTrial/help.html dialogEnabled=yes dialogName=myTrialDialog.xml showDialogButton=no dfEnabled=no dpaEnabled=yes daScriptName=myTrialDAScript.script httpURL=http://ctp.PrincipalInvestigator.org:9999 showURL=no showBrowseButton=yes
Properties files use the backslash character for escaping special characters, so if a backslash character is required in a property, it must be escaped by a backslash. Even on a Windows system, forward slashes work in specifying file paths in property values.
4 The Dialog XML Schema
When the dialogEnabled parameter is set to "yes", CTPClient loads an XML file to define the contents of a dialog allowing the user to enter values for parameters. The following is an example XML structure specifying three parameters:
<dialog title="New Patient" mode="study"> <h>Site Parameters</h> <p> Enter the ID value for this site. </p> <param name="@SITEID" label="Site ID" value=""/> <h>Patient Parameters</h> <p> Enter the ID and name values for this patient. </p> <param name="@SUBJECTID" label="Subject ID" value=""/> <param name="@SUBJECTNAME" label="Subject Name" value=""/> </dialog>
The title attribute of the root element specifies the title of the popup. The title is also used as the name of the button in the main CTPClient window for displaying the dialog, so it should be fairly short.
The mode attribute of the root element specifies the whether the dialog is to be displayed once for each study transmitted ("study" mode) or once for each click of the Start button ("session" mode). The default is study mode.
The h element specifies a heading. The element has one optional attribute, align, with allowed values left, center, and right, The default is center.
The p element specifies a paragraph. Word wrapping is not provided; lines are broken at newline characters. The element has one optional attribute, align, with allowed values left, center, and right, The default is left.
The param element specifies a parameter whose value is to be entered into the dialog by the user.
- The name attribute specifies the name of an option parameter.
- The label attribute specifies the text to be displayed beside the entry field for the parameter.
- The value attribute specifies the initial value provided in the entry field. If a value was provided by an option parameter when CTPClient was started, that value takes precedence over the value of the value attribute.
Parameter names starting with @ specify PARAM values in DicomAnonymizer scripts.
Parameter names starting with $ specify values in DicomAnonymizer lookup tables.
The param element has an optional readonly attribute. When set to yes, the entry in the table is not editable.
- If the name attribute is specified and the value attribute is missing or blank, the text displayed is the value of the specified configuration parameter.
- If the value attribute is not blank, it takes precedence over any configuration parameter specified by the name attribute.
- Examples:
<param name="@SITEID" label="Site ID:" readonly="yes"/> <param label="Note:" value="Some readonly text" readonly="yes"/>
5 Building CTPClient
In some trials, it may be desired to build a special version of CTPClient with pre-configured values in the configuration files.
The source code for CTPClient is on GitHub at https://github.com/johnperry/CTPClient.
The default configuration files are located in the source/files directory:
- config.properties
- DPA.script
- DA.script
In special situations, default files for the dialog, DicomFilter and DicomAnonymizer lookup table can be provided. The following are the names required by the application:
- DIALOG.xml
- DF.script
- LUT.properties
The program is built using ant. After the build is complete, a zip file containing all the files necessary for deployment is located in the products directory.
6 Deploying CTPClient on the CTP Application Server
As described in Using the CTP Application Server, all the files for CTPClient must be placed in the CTP/ROOT/CTPClient directory. The latest version is encapsulated in a zip file on the RSNA MIRC site at http://mirc.rsna.org/download/CTPClient.zip.
Included in the zip file is the XSL file required by the Application Server for automatic creation of the webstart jnlp file.
To deploy CTPClient, create the CTP/ROOT/CTPClient directory and copy all the files from the zip file into it.
Note: If multiple CTPClient instances are to be supported in one CTP instance, install them in subdirectories of the ROOT directory, like this:
- ROOT
- TrialX
- CTPClient
- TrialY
- CTPClient
- TrialZ
- CTPClient
- TrialX
In this situation, the URL to access a trial's CTPClient would include the trial name in the webstart path (e.g. /webstart/TrialY/CTPClient[?params]).