Difference between revisions of "The CTP DICOM Filter"

From MircWiki
Jump to: navigation, search
(The Script Language)
(The Script Language)
Line 23: Line 23:
  
 
*<b>equals</b> returns <b>true</b> if the value of the <b>identifier</b> exactly equals the <b>string</b> argument; otherwise, it returns <b>false</b>.
 
*<b>equals</b> returns <b>true</b> if the value of the <b>identifier</b> exactly equals the <b>string</b> argument; otherwise, it returns <b>false</b>.
*<b>equalsIgnoreCase</b> returns <b>true</b> if the value of the <b>identifier</b> equals the <b>string</b> argument; otherwise, it returns <b>false</b>. This method is not case-sensitive.
+
*<b>equalsIgnoreCase</b> is the case-insensitive version of <b>equals</b>.
  
 
*<b>matches</b> returns <b>true</b> if the value of the <b>identifier</b> matches the regular expression specified in the <b>string</b> argument; otherwise, it returns <b>false</b>.
 
*<b>matches</b> returns <b>true</b> if the value of the <b>identifier</b> matches the regular expression specified in the <b>string</b> argument; otherwise, it returns <b>false</b>.
  
 
*<b>contains</b> returns <b>true</b> if the value of the <b>identifier</b> contains the the <b>string</b> argument anywhere within it; otherwise, it returns <b>false</b>.
 
*<b>contains</b> returns <b>true</b> if the value of the <b>identifier</b> contains the the <b>string</b> argument anywhere within it; otherwise, it returns <b>false</b>.
*<b>containsIgnoreCase</b> returns <b>true</b> if the value of the <b>identifier</b> contains the the <b>string</b> argument anywhere within it; otherwise, it returns <b>false</b>. This method is not case-sensitive.
+
*<b>containsIgnoreCase</b> is the case-insensitive version of <b>contains</b>.
 +
 
  
 
*<b>startsWith</b> returns <b>true</b> if the value of the <b>identifier</b> starts with the <b>string</b> argument; otherwise, it returns <b>false</b>.
 
*<b>startsWith</b> returns <b>true</b> if the value of the <b>identifier</b> starts with the <b>string</b> argument; otherwise, it returns <b>false</b>.
*<b>startsWithIgnoreCase</b> returns <b>true</b> if the value of the <b>identifier</b> starts with the <b>string</b> argument; otherwise, it returns <b>false</b>. This method is not case-sensitive.
+
*<b>startsWithIgnoreCase</b> is the case-insensitive version of <b>startsWith</b>.
 +
 
  
 
*<b>endsWith</b> returns <b>true</b> if the value of the <b>identifier</b> ends with the <b>string</b> argument; otherwise, it returns <b>false</b>.
 
*<b>endsWith</b> returns <b>true</b> if the value of the <b>identifier</b> ends with the <b>string</b> argument; otherwise, it returns <b>false</b>.
*<b>endsWithIgnoreCase</b> returns <b>true</b> if the value of the <b>identifier</b> ends with the <b>string</b> argument; otherwise, it returns <b>false</b>. This method is not case-sensitive.
+
*<b>endsWithIgnoreCase</b> is the case-insensitive version of <b>endsWith</b>.
  
The value of an identifier is the string value stored in the DICOM object in the element associated with the identifier. If an identifier is missing from the received DICOM object, an empty string is provided. This method is not case-sensitive.
+
The value of an identifier is the string value stored in the DICOM object in the element associated with the identifier. If an identifier is missing from the received DICOM object, an empty string is provided.
  
 
<b>Script Examples</b>:
 
<b>Script Examples</b>:

Revision as of 17:22, 18 November 2009

The CTP DicomFilter is a pipeline stage that provides preprocessing of DicomObjects, quarantining those which do not meet the conditions of a script program. This article describes the script language. The intended audience for this article is CTP administrators setting up a processing pipeline.

The Script Language

The script language interrogates a DICOM object and computes a boolean result that, if true, results in the object being accepted for further processing in the pipeline, and if false, results in the object being quarantined, aborting further processing.

An expression in the language consists of terms separated by operators and/or parentheses. There are three operators, listed in order of increasing precedence:

  • + is logical or
  • * is logical and
  • ! is unary logical negation

Expression Examples:

  • term
  • !term
  • term + term * term
  • term * (term + term) + term * !term

Terms in the language are either reserved words (true. or false.) (note the periods after the words) or expressions in the form:

identifier.method("string")

An identifier is either a DICOM element name as defined in the CTP DICOM Anonymizer (e.g. SOPInstanceUID) or a DICOM tag, specified in square brackets (e.g. [0008,0018]). No spaces are permitted in identifiers, and tags are required to contain all eight hexadecimal digits identifying the group and element.

The language supports these methods:

  • equals returns true if the value of the identifier exactly equals the string argument; otherwise, it returns false.
  • equalsIgnoreCase is the case-insensitive version of equals.
  • matches returns true if the value of the identifier matches the regular expression specified in the string argument; otherwise, it returns false.
  • contains returns true if the value of the identifier contains the the string argument anywhere within it; otherwise, it returns false.
  • containsIgnoreCase is the case-insensitive version of contains.


  • startsWith returns true if the value of the identifier starts with the string argument; otherwise, it returns false.
  • startsWithIgnoreCase is the case-insensitive version of startsWith.


  • endsWith returns true if the value of the identifier ends with the string argument; otherwise, it returns false.
  • endsWithIgnoreCase is the case-insensitive version of endsWith.

The value of an identifier is the string value stored in the DICOM object in the element associated with the identifier. If an identifier is missing from the received DICOM object, an empty string is provided.

Script Examples:

Suppose that images are to be rejected if they are of type "SECONDARY". Such images could be filtered out of the pipeline with a script like:

!ImageType.contains("SECONDARY")

Note the unary negation operator, which is necessary to generate true for images which do not contain the string SECONDARY.

Suppose that images are to be rejected if they are of type "SECONDARY" or of type "DERIVED". Such images could be filtered out of the pipeline with a script like:

!(ImageType.contains("SECONDARY") + ImageType.contains("DERIVED"))

Note again the unary negation operator, and also note the parentheses and the logical or operator, all of which combine to generate true only if the type is neither SECONDARY nor DERIVED.

The same effect could be achieved with a script like:

!ImageType.contains("SECONDARY") * !ImageType.contains("DERIVED")

Note the use of the logical and operator and the way that each term is individually negated.

Finally, suppose that images containing any non-empty value in the ImageType element are to be rejected. Such images could be filtered out with a script like:

ImageType.equals("")

Note that in this case the unary negation operator is not used because if the element is missing or empty, the equals method will generate true, which is the value necessary to pass the object down the pipeline. This script could also be coded using the DICOM group and element numbers like this:

[0008,0008].equals("")