Slicer3:JavaBasedChainCLMsEngine
From NAMIC Wiki
Home < Slicer3:JavaBasedChainCLMsEngine
Contents
Java Based Chain CLMs Engine
Introduction
- Java application which behaves as a regular Slicer3 module (JVM 1.5 or higher required).
- Requires as its first parameter the location of a chain descriptor.
- The rest of its parameters are the usual Slicer3 modules parameters.
- This java application is currently wrapped in a shell script; which would be the actual Slicer3 chain module.
- As such this script has to be deployed in the Slicer's Plugins folder.
- This script does pre and post processing before invoking the engine and hardcodes a chain descriptor.
Installation
- Unbundle the chain module engine right under your Slicer3 installation.
- Set the environmental variable SLICER_HOME to point to your Slicer3 installation. For example:
export SLICER_HOME=~/Slicer3.2-2008-06-02-darwin-x86
- For each chain module desired create:
- A "X-Chain.xml" chain descriptor file(see "Chain Descriptor" section for details).
- A chain script module for "X-Chain.xml"; which should look like:
#!/bin/sh # Chain Slicer Module export GWE_HOME=`ls -d -t $SLICER_HOME/gwe-*/ | head -1` export GWE_FAT_JAR=`ls $GWE_HOME/lib/gwe-*-fatjar.jar` rm -fdr $SLICER_HOME/chains mkdir $SLICER_HOME/chains java -Xmx512m -cp $GWE_HOME/conf:$GWE_FAT_JAR org.gwe.integration.slicer.chains.ChainCLMProxyApp $SLICER_HOME/lib/Slicer3/Plugins/X-Chain.xml $@ if [ "x$1" != "x--xml" ] then chmod a+x $SLICER_HOME/chains/chain.sh $SLICER_HOME/chains/chain.sh > $SLICER_HOME/chains/result.log fi
Chain Descriptor
- This is an XML file which contains all the information necessary to deterministically proxy into CLMs and:
- Build the new XML descriptor corresponding to the composition of the modules (removing chain arguments, applying namespaces, autogenerating certain values, etc.)
- Invoke them when necessary in sequential order respecting the argument piping instructions and the corresponding arguments for each modules' (using its namespaces).
- It must conform to the following schema:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:clm="http://www.na-mic.org/clm" targetNamespace="http://www.na-mic.org/clm" elementFormDefault="qualified"> <xs:element name="modules"> <xs:complexType> <xs:sequence> <xs:element name="module" type="clm:module" minOccurs="2" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="module"> <xs:sequence> <xs:element name="argument" type="clm:argument" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:string"/> </xs:complexType> <xs:complexType name="argument"> <xs:attribute name="name" type="xs:string"/> <xs:attribute name="value-ref" type="xs:string"/> </xs:complexType> </xs:schema>
- "Chain Descriptor" template example:
<?xml version="1.0" encoding="UTF-8"?> <modules xmlns="http://www.na-mic.org/clm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.na-mic.org/schemas/chainCLM.xsd"> <module id="Module1"/> <module id="Module2"> <argument name="param2A" value-ref="Module1.param1A" /> <argument name="param2B" value-ref="Module1.param1B" /> </module> <module id="Module3"> <argument name="param3C" value-ref="Module1.param1C" /> <argument name="param3D" value-ref="Module2.param2D" /> </module> </modules>
Real Examples
- Chaining modules GaussianBlurImageFilter and OtsuThresholdSegmentation:
<?xml version="1.0" encoding="UTF-8"?> <modules xmlns="http://www.na-mic.org/clm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.na-mic.org/schemas/chainCLM.xsd"> <module id="GaussianBlurImageFilter"/> <module id="OtsuThresholdSegmentation"> <argument name="inputVolume" value-ref="GaussianBlurImageFilter.outputVolume" /> </module> </modules>
- Chaining modules dwiNoiseFilter, CurvatureAnisotropicDiffusion and GradientAnisotropicDiffusion:
<?xml version="1.0" encoding="UTF-8"?> <modules xmlns="http://www.na-mic.org/clm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.na-mic.org/schemas/chainCLM.xsd"> <module id="dwiNoiseFilter"/> <module id="CurvatureAnisotropicDiffusion"> <argument name="inputVolume" value-ref="dwiNoiseFilter.outputVolume" /> </module> <module id="GradientAnisotropicDiffusion"> <argument name="inputVolume" value-ref="CurvatureAnisotropicDiffusion.outputVolume" /> </module> </modules>
Key Investigators
- UCSD BIRN-CC: Marco Ruiz
- Isomics: Steve Pieper
- GE: Jim Miller