<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.slicer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fbudin</id>
	<title>Slicer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.slicer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fbudin"/>
	<link rel="alternate" type="text/html" href="https://www.slicer.org/wiki/Special:Contributions/Fbudin"/>
	<updated>2026-05-31T12:55:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions&amp;diff=51421</id>
		<title>Documentation/Nightly/Developers/Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions&amp;diff=51421"/>
		<updated>2017-04-25T21:20:11Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* error when starting Slicer: NameError: name 'getSlicerRCFileName' is not defined */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{:{{FULLPAGENAME}}/Prerequisites}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/CheckoutSourceCode}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/Configure}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/Compile}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/Run}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/Test}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/Package}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== DEBUG Slicer ==&lt;br /&gt;
&lt;br /&gt;
To be able to debug Slicer application, you are expected to build it with Debug symbols in a clean directory.&lt;br /&gt;
&lt;br /&gt;
{|width = &amp;quot;100%&amp;quot;&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Linux or MacOSX&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Windows (Visual Studio)&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
Configure Slicer using &amp;lt;code&amp;gt;-DCMAKE_BUILD_TYPE:STRING=Debug&amp;lt;/code&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
Selecting &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; configuration in Visual Studio.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|width = &amp;quot;100%&amp;quot;&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Linux or MacOSX&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Windows (Visual Studio)&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{wip}} TBD&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Press &amp;quot;Win-R,&amp;quot; type &amp;quot;cmd&amp;quot; and press &amp;quot;Enter&amp;quot; to open a Command Prompt session.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Start Visual Studio with Slicer environment:&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;pre&amp;gt;&amp;amp;gt; cd \path\to\Slicer-SuperBuild\Slicer-build&lt;br /&gt;
&amp;amp;gt; Slicer.exe --VisualStudio Slicer.sln&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Common errors ==&lt;br /&gt;
&lt;br /&gt;
=== CMake complains during configuration ===&lt;br /&gt;
CMake may not directly show what's wrong; try to look for log files of the form BUILD/CMakeFiles/*.log (where BUILD is your build directory) to glean further information.&lt;br /&gt;
&lt;br /&gt;
=== A tool returned an error code from &amp;quot;Generating vtksysProcessFwd9xEnc.c&amp;quot; ===&lt;br /&gt;
 The application has failed to start because its side-by-side configuration is incorrect.&lt;br /&gt;
 Please see the application event log or use the command-line sxstrace.exe tool for more detail.&lt;br /&gt;
 Project : error PRJ0019: A tool returned an error code from &amp;quot;Generating&lt;br /&gt;
 vtksysProcessFwd9xEnc.c&amp;quot;&lt;br /&gt;
'''Suggested solution: [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites#Windows|Install SP1 of Visual Studio]]'''&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
* [http://www.kitware.com/blog/home/post/4|&amp;quot;Deploying on Windows with DLL Manifest Issues&amp;quot;] (Bill Hoffman, Kitware blog).&lt;br /&gt;
* [https://stackoverflow.com/questions/13217174/how-to-properly-setup-vs2008-for-x64-programing/13222870#13222870| How to create a custom installer to correct a missing WinSXS manifest entry] (StackOverflow).&lt;br /&gt;
&lt;br /&gt;
=== error: ‘class QList&amp;lt;QString&amp;gt;’ has no member named ‘reserve’ ===&lt;br /&gt;
 /nfs/Users/blowekamp/QtSDK/Desktop/Qt/474/gcc/include/QtCore/qdatastream.h: In function ‘QDataStream&amp;amp; operator&amp;gt;&amp;gt;(QDataStream&amp;amp;, QList&amp;lt;T&amp;gt;&amp;amp;) [with T = QString]’:&lt;br /&gt;
 /nfs/Users/blowekamp/QtSDK/Desktop/Qt/474/gcc/include/QtCore/qstringlist.h:247:   instantiated from here&lt;br /&gt;
 /nfs/Users/blowekamp/QtSDK/Desktop/Qt/474/gcc/include/QtCore/qdatastream.h:246: error: ‘class QList&amp;lt;QString&amp;gt;’ has no member named ‘reserve’&lt;br /&gt;
You have multiple Qt versions installed on your machine. Try removing the Qt version installed on the system.&lt;br /&gt;
&lt;br /&gt;
=== libarchive.so: undefined reference to `SHA256_Update' ===&lt;br /&gt;
&lt;br /&gt;
 Linking CXX executable ../../../../../bin/MRMLLogicCxxTests&lt;br /&gt;
 /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `SHA256_Update'&lt;br /&gt;
 /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `SHA256_Final'&lt;br /&gt;
 /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `SHA256_Init'&lt;br /&gt;
 /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `MD5_Init'&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
 cd Slicer-SuperBuild&lt;br /&gt;
 rm -rf LibArchive-*&lt;br /&gt;
 make -j4&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* http://na-mic.org/Mantis/view.php?id=1616&lt;br /&gt;
* http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=18923&lt;br /&gt;
* http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=18969&lt;br /&gt;
&lt;br /&gt;
=== No rule to make target `/usr/lib/x86_64-linux-gnu/libGL.so' ===&lt;br /&gt;
See http://techtidings.blogspot.com/2012/01/problem-with-libglso-on-64-bit-ubuntu.html&lt;br /&gt;
&lt;br /&gt;
=== X11 Window errors at start time ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X Error: BadWindow (invalid Window parameter) 3&lt;br /&gt;
  Extension:    137 (Uknown extension)&lt;br /&gt;
  Minor opcode: 4 (Unknown request)&lt;br /&gt;
  Resource id:  0x4200199&lt;br /&gt;
X Error: BadWindow (invalid Window parameter) 3&lt;br /&gt;
  Extension:    137 (Uknown extension)&lt;br /&gt;
  Minor opcode: 4 (Unknown request)&lt;br /&gt;
  Resource id:  0x42001a6&lt;br /&gt;
X Error: BadWindow (invalid Window parameter) 3&lt;br /&gt;
  Extension:    137 (Uknown extension)&lt;br /&gt;
  Minor opcode: 4 (Unknown request)&lt;br /&gt;
  Resource id:  0x42001b3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution: &lt;br /&gt;
* Reinstall Nvidia drivers (that also rewrite the xorg.conf file).&lt;br /&gt;
&lt;br /&gt;
=== error C2061: syntax error : identifier 'ssize_t' ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4&amp;gt;1&amp;gt;Compiling...&lt;br /&gt;
4&amp;gt;1&amp;gt;version.c&lt;br /&gt;
4&amp;gt;1&amp;gt;c:\chene\winbin64\slicer4\cmcurl\urldata.h(585) : error C2061: syntax error : identifier 'ssize_t'&lt;br /&gt;
4&amp;gt;1&amp;gt;c:\chene\winbin64\slicer4\cmcurl\urldata.h(593) : error C2365: 'fread' : redefinition; previous definition was 'function'&lt;br /&gt;
4&amp;gt;1&amp;gt;        C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(248) : see declaration of 'fread'&lt;br /&gt;
4&amp;gt;1&amp;gt;c:\chene\winbin64\slicer4\cmcurl\urldata.h(610) : error C2059: syntax error : '}'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
* See [[#A_tool_returned_an_error_code_from_.22Performing_configure_step_for_....22]]&lt;br /&gt;
&lt;br /&gt;
=== ld: framework not found QtWebKit ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
Linking CXX shared library libPythonQt.dylib&lt;br /&gt;
ld: framework not found QtWebKit&lt;br /&gt;
clang: error: linker command failed with exit code 1 (use -v to see invocation)&lt;br /&gt;
make[8]: *** [libPythonQt.dylib] Error 1&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See Slicer issue [http://na-mic.org/Mantis/view.php?id=2860 #2860]&lt;br /&gt;
&lt;br /&gt;
Workaround:&lt;br /&gt;
* See http://public.kitware.com/Bug/view.php?id=13765#c31824&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
* Use a [http://www.cmake.org/files/dev/?C=M;O=D recent nightly build of CMake]. It includes patch [http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cc676c3a cc676c3a]. Note also that the coming version of CMake 2.8.11 will work as expected.&lt;br /&gt;
&lt;br /&gt;
=== On MacOSX 10.8, CMake hangs forever ===&lt;br /&gt;
&lt;br /&gt;
Issue: http://www.na-mic.org/Bug/view.php?id=2957&lt;br /&gt;
&lt;br /&gt;
Solution: Use CMake build &amp;gt;= 2.8.10.20130220-g53b279. See http://www.cmake.org/files/dev/cmake-2.8.10.20130220-g53b279-Darwin-universal.tar.gz&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
&lt;br /&gt;
CMake folks (Thanks Brad King :)) fixed an issue that was preventing the most recent nightly from being used to successfully compile Slicer. The fix has been tested and is known to work. Tomorrow nightly build of CMake and by extension the coming release of CMake 2.8.11 will work.&lt;br /&gt;
&lt;br /&gt;
If you are curious about the details, check the commit message:&lt;br /&gt;
&lt;br /&gt;
 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1df09e57 [^]&lt;br /&gt;
&lt;br /&gt;
The associated CMake test have also been updated: &lt;br /&gt;
&lt;br /&gt;
 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=bff3d9ce [^]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== On MacOSX 10.8/10.9 with XQuartz, 'X11/Xlib.h' file not found ===&lt;br /&gt;
&lt;br /&gt;
Issue: http://www.na-mic.org/Bug/view.php?id=3405&lt;br /&gt;
&lt;br /&gt;
Workaround: Build with -DSlicer_USE_PYTHONQT_WITH_TCL:BOOL=OFF&lt;br /&gt;
&lt;br /&gt;
Tcl is required only for EMSegment module.&lt;br /&gt;
&lt;br /&gt;
Details: See http://www.na-mic.org/Bug/view.php?id=3405&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== svn: E175002: Unable to connect to a repository at URL XXX ===&lt;br /&gt;
&lt;br /&gt;
Issue: Cisco AnyConnect is installed with the &amp;quot;Web Security&amp;quot; option checked (default), which blocks Subversion checkouts even when inactive!&lt;br /&gt;
&lt;br /&gt;
Solution:  Uninstall and reinstall Cisco AnyConnect, deselecting the &amp;quot;Web Security&amp;quot; feature during install&lt;br /&gt;
&lt;br /&gt;
[[File:CiscoAnyConnectInstallOptions.png]]&lt;br /&gt;
&lt;br /&gt;
=== My antivirus software reports that files in my build directory are infected ===&lt;br /&gt;
&lt;br /&gt;
Although usually antivirus software does not interfere with the build process, it is recommended to disable antivirus and search indexing for build directories to improve performance and minimize the chance of concurrent file access problems.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio compiler crashes ===&lt;br /&gt;
&lt;br /&gt;
* If you use Visual Studio 2008, make sure Visual Studio 2008 service pack 1 is installed&lt;br /&gt;
* Build Slicer in a short directory, for example source code in C:\S4, binary directory C:\S4D or C:\S4R&lt;br /&gt;
&lt;br /&gt;
=== 'QSslSocket' : is not a class or namespace name ===&lt;br /&gt;
&lt;br /&gt;
This error message occurs if Slicer is configured to use SSL but Qt is built without SSL support.&lt;br /&gt;
&lt;br /&gt;
Either set Slicer_USE_PYTHONQT_WITH_OPENSSL to OFF when configuring Slicer build in CMake, or build Qt with SSL support.&lt;br /&gt;
&lt;br /&gt;
=== error: Missing Qt module QTWEBKIT ===&lt;br /&gt;
&lt;br /&gt;
 CMake Error at CMake/SlicerBlockFindQtAndCheckVersion.cmake:43 (message):&lt;br /&gt;
  error: Missing Qt module QTWEBKIT&lt;br /&gt;
 Call Stack (most recent call first):&lt;br /&gt;
  CMake/SlicerBlockFindQtAndCheckVersion.cmake:88 (__SlicerBlockFindQtAndCheckVersion_find_qt)&lt;br /&gt;
  CMakeLists.txt:607 (include)&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
 sudo apt-get -y install libqtwebkit-dev&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* http://slicer-devel.65872.n3.nabble.com/Re-slicer-devel-Digest-Vol-143-Issue-39-td4037122.html&lt;br /&gt;
&lt;br /&gt;
=== error when starting Slicer: NameError: name 'getSlicerRCFileName' is not defined ===&lt;br /&gt;
&lt;br /&gt;
./Slicer&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;string&amp;gt;&amp;quot;, line 7, in &amp;lt;module&amp;gt;&lt;br /&gt;
  File &amp;quot;/home/fbudin/Devel/Slicer-SuperBuild-Release/Slicer-build/bin/Python/slicer/slicerqt.py&amp;quot;, line 6, in &amp;lt;module&amp;gt;&lt;br /&gt;
    import vtk&lt;br /&gt;
  File &amp;quot;/home/fbudin/Devel/Slicer-SuperBuild-Release/VTKv7-build/Wrapping/Python/vtk/__init__.py&amp;quot;, line 41, in &amp;lt;module&amp;gt;&lt;br /&gt;
    from .vtkCommonKit import *&lt;br /&gt;
  File &amp;quot;/home/fbudin/Devel/Slicer-SuperBuild-Release/VTKv7-build/Wrapping/Python/vtk/vtkCommonKit.py&amp;quot;, line 9, in &amp;lt;module&amp;gt;&lt;br /&gt;
    from vtkCommonKitPython import *&lt;br /&gt;
ImportError: /home/fbudin/Devel/Slicer-SuperBuild-Release/VTKv7-build/lib/./libvtkCommonKitPython27D-7.1.so.1: undefined symbol: PyUnicodeUCS2_DecodeUTF8&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;string&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
NameError: name 'getSlicerRCFileName' is not defined&lt;br /&gt;
Number of registered modules: 138&lt;br /&gt;
error: [/home/fbudin/Devel/Slicer-SuperBuild-Release/Slicer-build/bin/./SlicerApp-real] exit abnormally - Report the problem.&lt;br /&gt;
&lt;br /&gt;
Solution and details [http://na-mic.org/Mantis/view.php?id=3574 here]&lt;br /&gt;
&lt;br /&gt;
== Quick Build on Debian ==&lt;br /&gt;
 sudo aptitude update&lt;br /&gt;
 sudo aptitude install subversion git gcc g++ make cmake-curses-gui libqt4-dev&lt;br /&gt;
 svn co http://svn.slicer.org/Slicer4/trunk Slicer&lt;br /&gt;
 mkdir Slicer-SuperBuild-Debug&lt;br /&gt;
 cd Slicer-SuperBuild-Debug&lt;br /&gt;
 cmake ../Slicer&lt;br /&gt;
 make -j5&lt;br /&gt;
 &lt;br /&gt;
 # runtime dependency:&lt;br /&gt;
 sudo aptitude install python-tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Build on Fedora 20 ==&lt;br /&gt;
&lt;br /&gt;
Thanks to Bill Lorensen, you will find below the instruction to quickly build Slicer on Fedora 20:&lt;br /&gt;
&lt;br /&gt;
 yum groupinstall &amp;quot;C Development Tools&amp;quot;&lt;br /&gt;
 yum install git-core&lt;br /&gt;
 yum install svn&lt;br /&gt;
 yum install libX11-devel&lt;br /&gt;
 yum install libXt-devel&lt;br /&gt;
 yum install mesa-libGL-devel&lt;br /&gt;
 yum install mesa-libGLU-devel&lt;br /&gt;
 yum install cmake&lt;br /&gt;
 yum install tcl-devel&lt;br /&gt;
 yum install python-devel&lt;br /&gt;
 yum install qt-devel&lt;br /&gt;
 yum install qt-webkit-devel&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.slicer.org/Slicer4/trunk Slicer&lt;br /&gt;
 mkdir Slicer-SuperBuild-Debug&lt;br /&gt;
 cd Slicer-SuperBuild-Debug&lt;br /&gt;
 cmake ../Slicer&lt;br /&gt;
 make -j5&lt;br /&gt;
&lt;br /&gt;
Reference: http://slicer-devel.65872.n3.nabble.com/Fedora-20-Slicer-Experience-tt4030845.html&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions&amp;diff=51418</id>
		<title>Documentation/Nightly/Developers/Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions&amp;diff=51418"/>
		<updated>2017-04-25T21:19:37Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* Common errors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{:{{FULLPAGENAME}}/Prerequisites}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/CheckoutSourceCode}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/Configure}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/Compile}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/Run}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/Test}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/Package}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== DEBUG Slicer ==&lt;br /&gt;
&lt;br /&gt;
To be able to debug Slicer application, you are expected to build it with Debug symbols in a clean directory.&lt;br /&gt;
&lt;br /&gt;
{|width = &amp;quot;100%&amp;quot;&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Linux or MacOSX&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Windows (Visual Studio)&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
Configure Slicer using &amp;lt;code&amp;gt;-DCMAKE_BUILD_TYPE:STRING=Debug&amp;lt;/code&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
Selecting &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; configuration in Visual Studio.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|width = &amp;quot;100%&amp;quot;&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Linux or MacOSX&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Windows (Visual Studio)&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{wip}} TBD&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Press &amp;quot;Win-R,&amp;quot; type &amp;quot;cmd&amp;quot; and press &amp;quot;Enter&amp;quot; to open a Command Prompt session.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Start Visual Studio with Slicer environment:&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;pre&amp;gt;&amp;amp;gt; cd \path\to\Slicer-SuperBuild\Slicer-build&lt;br /&gt;
&amp;amp;gt; Slicer.exe --VisualStudio Slicer.sln&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Common errors ==&lt;br /&gt;
&lt;br /&gt;
=== CMake complains during configuration ===&lt;br /&gt;
CMake may not directly show what's wrong; try to look for log files of the form BUILD/CMakeFiles/*.log (where BUILD is your build directory) to glean further information.&lt;br /&gt;
&lt;br /&gt;
=== A tool returned an error code from &amp;quot;Generating vtksysProcessFwd9xEnc.c&amp;quot; ===&lt;br /&gt;
 The application has failed to start because its side-by-side configuration is incorrect.&lt;br /&gt;
 Please see the application event log or use the command-line sxstrace.exe tool for more detail.&lt;br /&gt;
 Project : error PRJ0019: A tool returned an error code from &amp;quot;Generating&lt;br /&gt;
 vtksysProcessFwd9xEnc.c&amp;quot;&lt;br /&gt;
'''Suggested solution: [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites#Windows|Install SP1 of Visual Studio]]'''&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
* [http://www.kitware.com/blog/home/post/4|&amp;quot;Deploying on Windows with DLL Manifest Issues&amp;quot;] (Bill Hoffman, Kitware blog).&lt;br /&gt;
* [https://stackoverflow.com/questions/13217174/how-to-properly-setup-vs2008-for-x64-programing/13222870#13222870| How to create a custom installer to correct a missing WinSXS manifest entry] (StackOverflow).&lt;br /&gt;
&lt;br /&gt;
=== error: ‘class QList&amp;lt;QString&amp;gt;’ has no member named ‘reserve’ ===&lt;br /&gt;
 /nfs/Users/blowekamp/QtSDK/Desktop/Qt/474/gcc/include/QtCore/qdatastream.h: In function ‘QDataStream&amp;amp; operator&amp;gt;&amp;gt;(QDataStream&amp;amp;, QList&amp;lt;T&amp;gt;&amp;amp;) [with T = QString]’:&lt;br /&gt;
 /nfs/Users/blowekamp/QtSDK/Desktop/Qt/474/gcc/include/QtCore/qstringlist.h:247:   instantiated from here&lt;br /&gt;
 /nfs/Users/blowekamp/QtSDK/Desktop/Qt/474/gcc/include/QtCore/qdatastream.h:246: error: ‘class QList&amp;lt;QString&amp;gt;’ has no member named ‘reserve’&lt;br /&gt;
You have multiple Qt versions installed on your machine. Try removing the Qt version installed on the system.&lt;br /&gt;
&lt;br /&gt;
=== libarchive.so: undefined reference to `SHA256_Update' ===&lt;br /&gt;
&lt;br /&gt;
 Linking CXX executable ../../../../../bin/MRMLLogicCxxTests&lt;br /&gt;
 /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `SHA256_Update'&lt;br /&gt;
 /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `SHA256_Final'&lt;br /&gt;
 /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `SHA256_Init'&lt;br /&gt;
 /home/benjaminlong/work/slicer/Slicer-SuperBuild-Debug/LibArchive-install/lib/libarchive.so: undefined reference to `MD5_Init'&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
 cd Slicer-SuperBuild&lt;br /&gt;
 rm -rf LibArchive-*&lt;br /&gt;
 make -j4&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* http://na-mic.org/Mantis/view.php?id=1616&lt;br /&gt;
* http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=18923&lt;br /&gt;
* http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=18969&lt;br /&gt;
&lt;br /&gt;
=== No rule to make target `/usr/lib/x86_64-linux-gnu/libGL.so' ===&lt;br /&gt;
See http://techtidings.blogspot.com/2012/01/problem-with-libglso-on-64-bit-ubuntu.html&lt;br /&gt;
&lt;br /&gt;
=== X11 Window errors at start time ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
X Error: BadWindow (invalid Window parameter) 3&lt;br /&gt;
  Extension:    137 (Uknown extension)&lt;br /&gt;
  Minor opcode: 4 (Unknown request)&lt;br /&gt;
  Resource id:  0x4200199&lt;br /&gt;
X Error: BadWindow (invalid Window parameter) 3&lt;br /&gt;
  Extension:    137 (Uknown extension)&lt;br /&gt;
  Minor opcode: 4 (Unknown request)&lt;br /&gt;
  Resource id:  0x42001a6&lt;br /&gt;
X Error: BadWindow (invalid Window parameter) 3&lt;br /&gt;
  Extension:    137 (Uknown extension)&lt;br /&gt;
  Minor opcode: 4 (Unknown request)&lt;br /&gt;
  Resource id:  0x42001b3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution: &lt;br /&gt;
* Reinstall Nvidia drivers (that also rewrite the xorg.conf file).&lt;br /&gt;
&lt;br /&gt;
=== error C2061: syntax error : identifier 'ssize_t' ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4&amp;gt;1&amp;gt;Compiling...&lt;br /&gt;
4&amp;gt;1&amp;gt;version.c&lt;br /&gt;
4&amp;gt;1&amp;gt;c:\chene\winbin64\slicer4\cmcurl\urldata.h(585) : error C2061: syntax error : identifier 'ssize_t'&lt;br /&gt;
4&amp;gt;1&amp;gt;c:\chene\winbin64\slicer4\cmcurl\urldata.h(593) : error C2365: 'fread' : redefinition; previous definition was 'function'&lt;br /&gt;
4&amp;gt;1&amp;gt;        C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(248) : see declaration of 'fread'&lt;br /&gt;
4&amp;gt;1&amp;gt;c:\chene\winbin64\slicer4\cmcurl\urldata.h(610) : error C2059: syntax error : '}'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
* See [[#A_tool_returned_an_error_code_from_.22Performing_configure_step_for_....22]]&lt;br /&gt;
&lt;br /&gt;
=== ld: framework not found QtWebKit ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
Linking CXX shared library libPythonQt.dylib&lt;br /&gt;
ld: framework not found QtWebKit&lt;br /&gt;
clang: error: linker command failed with exit code 1 (use -v to see invocation)&lt;br /&gt;
make[8]: *** [libPythonQt.dylib] Error 1&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See Slicer issue [http://na-mic.org/Mantis/view.php?id=2860 #2860]&lt;br /&gt;
&lt;br /&gt;
Workaround:&lt;br /&gt;
* See http://public.kitware.com/Bug/view.php?id=13765#c31824&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
* Use a [http://www.cmake.org/files/dev/?C=M;O=D recent nightly build of CMake]. It includes patch [http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cc676c3a cc676c3a]. Note also that the coming version of CMake 2.8.11 will work as expected.&lt;br /&gt;
&lt;br /&gt;
=== On MacOSX 10.8, CMake hangs forever ===&lt;br /&gt;
&lt;br /&gt;
Issue: http://www.na-mic.org/Bug/view.php?id=2957&lt;br /&gt;
&lt;br /&gt;
Solution: Use CMake build &amp;gt;= 2.8.10.20130220-g53b279. See http://www.cmake.org/files/dev/cmake-2.8.10.20130220-g53b279-Darwin-universal.tar.gz&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
&lt;br /&gt;
CMake folks (Thanks Brad King :)) fixed an issue that was preventing the most recent nightly from being used to successfully compile Slicer. The fix has been tested and is known to work. Tomorrow nightly build of CMake and by extension the coming release of CMake 2.8.11 will work.&lt;br /&gt;
&lt;br /&gt;
If you are curious about the details, check the commit message:&lt;br /&gt;
&lt;br /&gt;
 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1df09e57 [^]&lt;br /&gt;
&lt;br /&gt;
The associated CMake test have also been updated: &lt;br /&gt;
&lt;br /&gt;
 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=bff3d9ce [^]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== On MacOSX 10.8/10.9 with XQuartz, 'X11/Xlib.h' file not found ===&lt;br /&gt;
&lt;br /&gt;
Issue: http://www.na-mic.org/Bug/view.php?id=3405&lt;br /&gt;
&lt;br /&gt;
Workaround: Build with -DSlicer_USE_PYTHONQT_WITH_TCL:BOOL=OFF&lt;br /&gt;
&lt;br /&gt;
Tcl is required only for EMSegment module.&lt;br /&gt;
&lt;br /&gt;
Details: See http://www.na-mic.org/Bug/view.php?id=3405&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== svn: E175002: Unable to connect to a repository at URL XXX ===&lt;br /&gt;
&lt;br /&gt;
Issue: Cisco AnyConnect is installed with the &amp;quot;Web Security&amp;quot; option checked (default), which blocks Subversion checkouts even when inactive!&lt;br /&gt;
&lt;br /&gt;
Solution:  Uninstall and reinstall Cisco AnyConnect, deselecting the &amp;quot;Web Security&amp;quot; feature during install&lt;br /&gt;
&lt;br /&gt;
[[File:CiscoAnyConnectInstallOptions.png]]&lt;br /&gt;
&lt;br /&gt;
=== My antivirus software reports that files in my build directory are infected ===&lt;br /&gt;
&lt;br /&gt;
Although usually antivirus software does not interfere with the build process, it is recommended to disable antivirus and search indexing for build directories to improve performance and minimize the chance of concurrent file access problems.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio compiler crashes ===&lt;br /&gt;
&lt;br /&gt;
* If you use Visual Studio 2008, make sure Visual Studio 2008 service pack 1 is installed&lt;br /&gt;
* Build Slicer in a short directory, for example source code in C:\S4, binary directory C:\S4D or C:\S4R&lt;br /&gt;
&lt;br /&gt;
=== 'QSslSocket' : is not a class or namespace name ===&lt;br /&gt;
&lt;br /&gt;
This error message occurs if Slicer is configured to use SSL but Qt is built without SSL support.&lt;br /&gt;
&lt;br /&gt;
Either set Slicer_USE_PYTHONQT_WITH_OPENSSL to OFF when configuring Slicer build in CMake, or build Qt with SSL support.&lt;br /&gt;
&lt;br /&gt;
=== error: Missing Qt module QTWEBKIT ===&lt;br /&gt;
&lt;br /&gt;
 CMake Error at CMake/SlicerBlockFindQtAndCheckVersion.cmake:43 (message):&lt;br /&gt;
  error: Missing Qt module QTWEBKIT&lt;br /&gt;
 Call Stack (most recent call first):&lt;br /&gt;
  CMake/SlicerBlockFindQtAndCheckVersion.cmake:88 (__SlicerBlockFindQtAndCheckVersion_find_qt)&lt;br /&gt;
  CMakeLists.txt:607 (include)&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
 sudo apt-get -y install libqtwebkit-dev&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* http://slicer-devel.65872.n3.nabble.com/Re-slicer-devel-Digest-Vol-143-Issue-39-td4037122.html&lt;br /&gt;
&lt;br /&gt;
=== error when starting Slicer: NameError: name 'getSlicerRCFileName' is not defined ===&lt;br /&gt;
&lt;br /&gt;
./Slicer&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;string&amp;gt;&amp;quot;, line 7, in &amp;lt;module&amp;gt;&lt;br /&gt;
  File &amp;quot;/home/fbudin/Devel/Slicer-SuperBuild-Release/Slicer-build/bin/Python/slicer/slicerqt.py&amp;quot;, line 6, in &amp;lt;module&amp;gt;&lt;br /&gt;
    import vtk&lt;br /&gt;
  File &amp;quot;/home/fbudin/Devel/Slicer-SuperBuild-Release/VTKv7-build/Wrapping/Python/vtk/__init__.py&amp;quot;, line 41, in &amp;lt;module&amp;gt;&lt;br /&gt;
    from .vtkCommonKit import *&lt;br /&gt;
  File &amp;quot;/home/fbudin/Devel/Slicer-SuperBuild-Release/VTKv7-build/Wrapping/Python/vtk/vtkCommonKit.py&amp;quot;, line 9, in &amp;lt;module&amp;gt;&lt;br /&gt;
    from vtkCommonKitPython import *&lt;br /&gt;
ImportError: /home/fbudin/Devel/Slicer-SuperBuild-Release/VTKv7-build/lib/./libvtkCommonKitPython27D-7.1.so.1: undefined symbol: PyUnicodeUCS2_DecodeUTF8&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;string&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;
NameError: name 'getSlicerRCFileName' is not defined&lt;br /&gt;
Number of registered modules: 138&lt;br /&gt;
error: [/home/fbudin/Devel/Slicer-SuperBuild-Release/Slicer-build/bin/./SlicerApp-real] exit abnormally - Report the problem.&lt;br /&gt;
&lt;br /&gt;
Solution [http://na-mic.org/Mantis/view.php?id=3574 here]&lt;br /&gt;
&lt;br /&gt;
== Quick Build on Debian ==&lt;br /&gt;
 sudo aptitude update&lt;br /&gt;
 sudo aptitude install subversion git gcc g++ make cmake-curses-gui libqt4-dev&lt;br /&gt;
 svn co http://svn.slicer.org/Slicer4/trunk Slicer&lt;br /&gt;
 mkdir Slicer-SuperBuild-Debug&lt;br /&gt;
 cd Slicer-SuperBuild-Debug&lt;br /&gt;
 cmake ../Slicer&lt;br /&gt;
 make -j5&lt;br /&gt;
 &lt;br /&gt;
 # runtime dependency:&lt;br /&gt;
 sudo aptitude install python-tk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Build on Fedora 20 ==&lt;br /&gt;
&lt;br /&gt;
Thanks to Bill Lorensen, you will find below the instruction to quickly build Slicer on Fedora 20:&lt;br /&gt;
&lt;br /&gt;
 yum groupinstall &amp;quot;C Development Tools&amp;quot;&lt;br /&gt;
 yum install git-core&lt;br /&gt;
 yum install svn&lt;br /&gt;
 yum install libX11-devel&lt;br /&gt;
 yum install libXt-devel&lt;br /&gt;
 yum install mesa-libGL-devel&lt;br /&gt;
 yum install mesa-libGLU-devel&lt;br /&gt;
 yum install cmake&lt;br /&gt;
 yum install tcl-devel&lt;br /&gt;
 yum install python-devel&lt;br /&gt;
 yum install qt-devel&lt;br /&gt;
 yum install qt-webkit-devel&lt;br /&gt;
&lt;br /&gt;
 svn co http://svn.slicer.org/Slicer4/trunk Slicer&lt;br /&gt;
 mkdir Slicer-SuperBuild-Debug&lt;br /&gt;
 cd Slicer-SuperBuild-Debug&lt;br /&gt;
 cmake ../Slicer&lt;br /&gt;
 make -j5&lt;br /&gt;
&lt;br /&gt;
Reference: http://slicer-devel.65872.n3.nabble.com/Fedora-20-Slicer-Experience-tt4030845.html&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Configure&amp;diff=51413</id>
		<title>Documentation/Nightly/Developers/Build Instructions/Configure</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Configure&amp;diff=51413"/>
		<updated>2017-04-25T21:15:50Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* Unix-like */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CONFIGURE and generate Slicer solution files ==&lt;br /&gt;
There are many ways of customizing Slicer's user interface or feature set. This section describes how a custom Slicer build can be configured at build-time. See an overview of various other options in [http://www.na-mic.org/Wiki/images/b/b0/Slicelets2016.pdf this presentation].&lt;br /&gt;
&lt;br /&gt;
You can configure and generate Slicer solution files using either &amp;lt;code&amp;gt;ccmake&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;cmake-gui&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:none; border-left:thick solid red; padding-left:1em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;While it is not enforced, we strongly recommend you to '''AVOID''' the use of '''SPACES''' for both the &amp;lt;code&amp;gt;source directory&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;build directory&amp;lt;/code&amp;gt;. We mean it.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Customizing application build ===&lt;br /&gt;
Customized editions of Slicer can be generated without changing Slicer source code, just by modifying CMake variables:&lt;br /&gt;
* SlicerApp_APPLICATION_NAME: Custom application name to be used, instead of default &amp;quot;Slicer&amp;quot;. The name is used in installation package name, window title bar, etc.&lt;br /&gt;
* Slicer_DISCLAIMER_AT_STARTUP: String that is displayed to the user after first startup of Slicer after installation (disclaimer, welcome message, etc).&lt;br /&gt;
* Slicer_DEFAULT_HOME_MODULE: Module name that is activated automatically on application start.&lt;br /&gt;
* Slicer_DEFAULT_FAVORITE_MODULES: Modules that will be added to the toolbar by default for easy access. List contains module names, separated by space character.&lt;br /&gt;
* Slicer_CLIMODULES_DISABLED: Built-in CLI modules that will be removed from the application. List contains module names, separated by semicolon character.&lt;br /&gt;
* Slicer_QTLOADABLEMODULES_DISABLED: Built-in Qt loadable modules that will be removed from the application. List contains module names, separated by semicolon character.&lt;br /&gt;
* Slicer_QTSCRIPTEDMODULES_DISABLED: Built-in scripted loadable modules that will be removed from the application. List contains module names, separated by semicolon character.&lt;br /&gt;
* Slicer_USE_PYTHONQT_WITH_OPENSSL: enable/disable building the application with SSL support (ON/OFF)&lt;br /&gt;
* Slicer_USE_SimpleITK: enable/disable SimpleITK support (ON/OFF)&lt;br /&gt;
* Slicer_BUILD_SimpleFilters: enable/disable building SimpleFilters. Requires SimpleITK. (ON/OFF)&lt;br /&gt;
* Slicer_BUILD_EMSegment: enable/disable building EM segmenter (ON/OFF)&lt;br /&gt;
* Slicer_USE_PYTHONQT_WITH_TCL: TCL support (ON/OFF)&lt;br /&gt;
* Slicer_EXTENSION_SOURCE_DIRS: Defines additional extensions that will be included in the application package as built-in modules. Full paths of extension source directories has to be specified, separated by semicolons.&lt;br /&gt;
&lt;br /&gt;
=== Per-platform instructions===&lt;br /&gt;
==== Windows ====&lt;br /&gt;
*'''Recommended''': run ''CMake (cmake-gui)'' from the Windows Start menu&lt;br /&gt;
** Set the build directory. For example: &amp;lt;code&amp;gt;C:\Slicer-SuperBuild-Debug&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;C:\Slicer-SuperBuild-Release&amp;lt;/code&amp;gt;.&lt;br /&gt;
*** Because Windows [http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#maxpath doesn't support file path longer than 260 characters] and has a [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2014/016113.html maximum command line length], please make sure that the total path name of your &amp;lt;code&amp;gt;Slicer-build&amp;lt;/code&amp;gt; directory is no longer than 50 characters (for example &amp;lt;code&amp;gt;c:\work\Slicer\Slicer-SuperBuild&amp;lt;/code&amp;gt; may work). In case of ''any'' build error, use very short directory names: C:\S4 for source directory, C:\S4D for debug build, C:\S4R for release build.&lt;br /&gt;
*** You cannot use the same build tree for both release or debug mode builds. If both build types are needed, then the same source directory can be used, but a separate build directory should be created and configured for each build type.&lt;br /&gt;
** Select your compiler: Visual Studio 12 2013 Win64&lt;br /&gt;
** Configure using default options. You may get a configuration error that &amp;lt;code&amp;gt;QT_QMAKE_EXECUTABLE&amp;lt;/code&amp;gt; is not set, which is normal.&lt;br /&gt;
** Verify that &amp;lt;code&amp;gt;QT_QMAKE_EXECUTABLE&amp;lt;/code&amp;gt; variable is set correctly:&lt;br /&gt;
*** CMake may automatically detect an installed version of Qt, but you may want to use a custom built version of Qt (e.g. in Debug mode for use with the designer).&lt;br /&gt;
*** Set &amp;lt;code&amp;gt;QT_QMAKE_EXECUTABLE&amp;lt;/code&amp;gt; to the path of the &amp;lt;code&amp;gt;qmake.exe&amp;lt;/code&amp;gt;, which is inside the &amp;lt;code&amp;gt;bin&amp;lt;/code&amp;gt; directory (for example, &amp;lt;code&amp;gt;C:/path/to/qt-everywhere-opensource-build-4.8.6/bin/qmake.exe&amp;lt;/code&amp;gt;).&lt;br /&gt;
** If building in debug mode: &amp;lt;code&amp;gt;Slicer_USE_SimpleITK&amp;lt;/code&amp;gt; option must be turned off to disable building SimpleITK. See more information about why SimpleITK has to be disabled for building in debug mode at http://www.na-mic.org/Bug/view.php?id=3816. You are going to get this build error if you attempt to build in debug mode with SimpleITK enabled: LINK : fatal error LNK1104: cannot open file 'python27_d.lib'&lt;br /&gt;
** Click generate then close cmake-gui.&lt;br /&gt;
** If building in release mode:&lt;br /&gt;
*** Open the top-level Slicer.sln file in the build directory in Visual Studio&lt;br /&gt;
*** Set active configuration to Release. Visual Studio will select Debug build configuration by default when you first open the solution in the Visual Studio GUI. If you build Slicer in release mode and accidentally forget to switch the build configuration to Release then the build will fail. Note: you can avoid this manual configuration mode selection by setting &amp;lt;code&amp;gt;CMAKE_CONFIGURATION_TYPES&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt; in cmake-gui.&lt;br /&gt;
** If building in debug mode:&lt;br /&gt;
*** Start Visual Studio using the Slicer launcher as described in [[Documentation/{{documentation/version}}/Developers/Tutorials/Debug_Instructions|Step-by-step debug instuctions]]&lt;br /&gt;
** Build the ALL_BUILD project&lt;br /&gt;
&lt;br /&gt;
==== Unix-like ====&lt;br /&gt;
*'''Recommended''':&lt;br /&gt;
** Configure using the following commands. By default '''CMAKE_BUILD_TYPE''' is set to '''Debug'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir Slicer-SuperBuild-Debug&lt;br /&gt;
cd Slicer-SuperBuild-Debug&lt;br /&gt;
cmake -DCMAKE_BUILD_TYPE:STRING=Debug -DQT_QMAKE_EXECUTABLE:FILEPATH=/path/to/QtSDK/Desktop/Qt/486/gcc/bin/qmake ../Slicer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where you replace ''/path/to/QtSDK'' with the real path on your machine where QtSDK is located&lt;br /&gt;
&lt;br /&gt;
If '''using Qt from the system''', do not forget to add the following CMake variable to your configuration command line:&lt;br /&gt;
&amp;lt;pre&amp;gt;-DSlicer_USE_SYSTEM_QT:BOOL=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Remarks''':&lt;br /&gt;
# Instead of &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;ccmake&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;cmake-gui&amp;lt;/code&amp;gt; to visually inspect and edit configure options.&lt;br /&gt;
# Using top-level directory name like &amp;lt;code&amp;gt;Slicer-SuperBuild-Release&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Slicer-SuperBuild-Debug&amp;lt;/code&amp;gt; is recommended.&lt;br /&gt;
# [[Documentation/{{documentation/version}}/Developers/Tutorials/Debug_Instructions|Step-by-step debug instuctions]]&lt;br /&gt;
&lt;br /&gt;
* On Mac OS X 10.9 (Mavericks) / 10.10 (Yosemite) / 10.11 (El Capitan), also set the following variables (see [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2014/thread.html#16440 discussion]):&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;4&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#abcdef&amp;quot; height=&amp;quot;8&amp;quot; |  '''Variable'''&lt;br /&gt;
| bgcolor=&amp;quot;#abcdef&amp;quot; height=&amp;quot;8&amp;quot; |  '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| Slicer_USE_PYTHONQT_WITH_TCL || OFF&lt;br /&gt;
|-&lt;br /&gt;
| CMAKE_OSX_DEPLOYMENT_TARGET  || 10.9 or 10.10 or 10.11&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== General information ===&lt;br /&gt;
&lt;br /&gt;
Two projects are generated by either &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ccmake&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;cmake-gui&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
One of them is in the top-level bin directory &amp;lt;code&amp;gt;Slicer-SuperBuild&amp;lt;/code&amp;gt; and the other one is in the subdirectory &amp;lt;code&amp;gt;Slicer-build&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Slicer-SuperBuild/Slicer-build&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# The first project in &amp;lt;code&amp;gt;Slicer-SuperBuild&amp;lt;/code&amp;gt; manages all the external dependencies of Slicer (VTK, ITK, Python, ...). To build Slicer for the first time, run make (or build the solution file in Visual Studio) in &amp;lt;code&amp;gt;Slicer-SuperBuild&amp;lt;/code&amp;gt;, which will update and build the external libraries and if successful will then build the subproject Slicer-build.&amp;lt;br&amp;gt;&lt;br /&gt;
# The second project in &amp;lt;code&amp;gt;Slicer-SuperBuild/Slicer-build&amp;lt;/code&amp;gt; is the &amp;quot;traditional&amp;quot; build directory of Slicer.  After local changes in Slicer (or after an svn update on the source directory of Slicer), only running make (or building the solution file in Visual Studio) in &amp;lt;code&amp;gt;Slicer-SuperBuild/Slicer-build&amp;lt;/code&amp;gt; is necessary (the external libraries are considered built and up to date). &amp;lt;br&amp;gt;&lt;br /&gt;
#'''Warning''': An significant amount of disk space is required to compile Slicer in Debug (&amp;gt;10GB on Windows)&lt;br /&gt;
&lt;br /&gt;
=== Workaround for if the firewall is blocking git protocol ===&lt;br /&gt;
* Some firewalls will block the git protocol. A possible workaround is to configure Slicer by disabling the option &amp;lt;code&amp;gt;Slicer_USE_GIT_PROTOCOL&amp;lt;/code&amp;gt;. Then the http protocol will be used instead. Consider also reading https://github.com/commontk/CTK/issues/33&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/pyLARSlicerExtension&amp;diff=45075</id>
		<title>Documentation/Nightly/Extensions/pyLARSlicerExtension</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/pyLARSlicerExtension&amp;diff=45075"/>
		<updated>2016-03-18T19:24:26Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/pyLARSlicerExtension|pyLAR Slicer Extension]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work was supported, in-part, by the NIBIB (R41EB015775), the NINDS (R41NS081792) and the NSF (EECS-1148870) &amp;lt;br&amp;gt;&lt;br /&gt;
Integration of pyLAR, a python implementation of Low-rank Atlas-to-image Registration framework and its applications, as a Slicer extension&amp;lt;br&amp;gt;&lt;br /&gt;
More information about pyLAR is available [https://github.com/KitwareMedical/pyLAR here] .&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Xiaoxiao Liu ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor2: Deepak Roy Chittajallu ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor3: Roland Kwitt ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;francois.budin@kitware.com&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|kitware}}|{{collaborator|longname|kitware}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
|Image:PyLAR-SlicerExtension-Icon512x512.png|Icon&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:PyLAR-SlicerExtension_-_GUI_-_while_processing.png|thumb|340px|GUI]]&lt;br /&gt;
|[[Image:SkullStripperSurface-3-6.png|thumb|375px|Brain surface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:PyLAR-SlicerExtension_-_Examples_panel.png|thumb|280px|Examples panel]]&lt;br /&gt;
|}&lt;br /&gt;
The example panel presents two options:&lt;br /&gt;
* Create sample configuration files: They can be edited and adapted to process the researcher's data. Most likely, the file containing the list of images to process (file_list_file_name) will also have to be updated before one runs the algorithm.&lt;br /&gt;
&lt;br /&gt;
* Downloading sample data from http://slicer.kitware.com/midas3 and http://insight-journal.org/midas&lt;br /&gt;
** Synthetic data (bull's eye)&lt;br /&gt;
** Healthy volunteer (T1-Flash)&lt;br /&gt;
** Healthy volunteer (T1-MPRage)&lt;br /&gt;
** Healthy volunteer (T2)&lt;br /&gt;
** Healthy volunteer (MRA)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:PyLAR-SlicerExtension_-_GUI_-_while_processing.png|thumb|280px|Module UI]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The user needs to select a configuration file and the algorithm to run (unbiased atlas creation, low rank/Sparse decomposition, Low Rank Atlas Creation). The user then presses &amp;quot;Apply&amp;quot;&lt;br /&gt;
and the result will be automatically loaded in Slicer. All the temporary images that were used and computed while the algorithm is running are saved in &amp;quot;result_dir&amp;quot; specified in the configuration file. The researcher can also specify an additional image that is not listed in the file containing the list of images. This image will be added at computation time. This is convenient for example if one needs to compute the Low Rank/Sparse decomposition of subjects one at the time, using a list of healthy control that does not need to be modified.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Configuration files}}&lt;br /&gt;
&lt;br /&gt;
* Unbiased atlas creation&lt;br /&gt;
** clean (boolean): Removes content of output directory before starting computation&lt;br /&gt;
** data_dir (string): directory containing 'file_list_file_name'&lt;br /&gt;
** file_list_file_name (string): text file containing a list of image file paths, one per line&lt;br /&gt;
** verbose (boolean): Displays more or less information while running&lt;br /&gt;
** result_dir (string): output directory where outputs will be saved.&lt;br /&gt;
** selection (list): select images that are processed in given list [must contain at least 2 values].&lt;br /&gt;
** reference_im_fn (string): reference image used for the registration.&lt;br /&gt;
** num_of_iterations_per_level (int): Number of iteration per level for the registration [&amp;gt;=0]&lt;br /&gt;
** num_of_levels (int): Number of levels (starting the registration at a down-sampled level) for the registration [&amp;gt;=1]&lt;br /&gt;
** ants_params (see example and ANTS documentation):&lt;br /&gt;
** number_of_cpu (integer/optional): Number of diffeomorphic registration run in parallel. In not specified, it will run as many processes as there are CPU available. Beware, the processes might already be multithreaded.&lt;br /&gt;
&lt;br /&gt;
* Low Rank/Sparse decomposition&lt;br /&gt;
** clean (boolean): Removes content of output directory before starting computation&lt;br /&gt;
** data_dir (string): directory containing 'file_list_file_name'&lt;br /&gt;
** file_list_file_name (string): text file containing a list of image file paths, one per line&lt;br /&gt;
** verbose (boolean): Displays more or less information while running&lt;br /&gt;
** lamda (float): the tuning parameter that weights between the low-rank component and the sparse component.&lt;br /&gt;
** sigma (float): blurring kernel size.&lt;br /&gt;
** result_dir (string): output directory where outputs will be saved.&lt;br /&gt;
** selection (list): select images that are processed in given list [must contain at least 1 value].&lt;br /&gt;
** reference_im_fn (string): reference image used for the registration.&lt;br /&gt;
** registration (string): 'affine', 'rigid', or 'none'&lt;br /&gt;
** histogram_matching (boolean/optional): If not specified or set to False, no histogram matching performed.&lt;br /&gt;
&lt;br /&gt;
* Low Rank Atlas Creation&lt;br /&gt;
** clean (boolean): Removes content of output directory before starting computation&lt;br /&gt;
** data_dir (string): directory containing 'file_list_file_name'&lt;br /&gt;
** file_list_file_name (string): text file containing a list of image file paths, one per line&lt;br /&gt;
** verbose (boolean): Displays more or less information while running&lt;br /&gt;
** lamda (float): the tuning parameter that weights between the low-rank component and the sparse component.&lt;br /&gt;
** sigma (float): blurring kernel size.&lt;br /&gt;
** result_dir (string): output directory where outputs will be saved.&lt;br /&gt;
** selection (list): select images that are processed in given list [must contain at least 2 values].&lt;br /&gt;
** reference_im_fn (string): reference image used for the registration.&lt;br /&gt;
** use_healthy_atlas (boolean): use a specified healthy atlas as reference image or compute a reference image from the average of all the low-ranked images computed from the selected input images.&lt;br /&gt;
** num_of_iterations_per_level (int): Number of iteration per level for the registration [&amp;gt;=0]&lt;br /&gt;
** num_of_levels (int): Number of levels (starting the registration at a down-sampled level) for the registration [&amp;gt;=1]&lt;br /&gt;
** registration_type (string): Type of registration performed, selected among [BSpline,ANTS,Demons]&lt;br /&gt;
** ants_params (see example and ANTS documentation): Only necessary if registration_type is set to ANTS.&lt;br /&gt;
** number_of_cpu (integer/optional): Number of diffeomorphic registration run in parallel. In not specified, it will run as many processes as there are CPU available. Beware, the processes might already be multithreaded.&lt;br /&gt;
* File List File Name: text file containing a list of image file paths, one per line&lt;br /&gt;
   /path/to/first/image.nrrd&lt;br /&gt;
   /path/to/second/image2.nrrd&lt;br /&gt;
   /path/to/third/image3.nii.gz&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
* Liu et al., &amp;quot;Low-Rank to the Rescue – Atlas-Based Analyses in the Presence of Pathologies&amp;quot;, MICCAI 2014, pp97-104&lt;br /&gt;
* Liu et al., &amp;quot;Low-Rank Atlas Image Analyses in the Presence of Pathologies&amp;quot;, IEEE Transactions on Medical Imaging, Vol. 34, No. 12, December 2015&lt;br /&gt;
* Candes et al., &amp;quot;Robust Principal Component Analysis?&amp;quot;, Journal of the ACM, Vol. 58, No. 3, 2011&lt;br /&gt;
* Lin et al., &amp;quot;The Augmented Lagrangian Multiplier Method for Exact Recovery of Corrupted Low-Rank Matrices&amp;quot;, 2011 (available online on archivX)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-developerinfo}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Segmentation]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/pyLARSlicerExtension&amp;diff=45074</id>
		<title>Documentation/Nightly/Extensions/pyLARSlicerExtension</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/pyLARSlicerExtension&amp;diff=45074"/>
		<updated>2016-03-18T19:21:06Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/pyLARSlicerExtension|pyLAR Slicer Extension]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work was supported, in-part, by the NIBIB (R41EB015775), the NINDS (R41NS081792) and the NSF (EECS-1148870) &amp;lt;br&amp;gt;&lt;br /&gt;
Integration of pyLAR, a python implementation of Low-rank Atlas-to-image Registration framework and its applications, as a Slicer extension&amp;lt;br&amp;gt;&lt;br /&gt;
More information about pyLAR is available [https://github.com/KitwareMedical/pyLAR here] .&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Xiaoxiao Liu ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor2: Deepak Roy Chittajallu ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor3: Roland Kwitt ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;francois.budin@kitware.com&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|kitware}}|{{collaborator|longname|kitware}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
|Image:PyLAR-SlicerExtension-Icon512x512.png|Icon&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:PyLAR-SlicerExtension_-_GUI_-_while_processing.png|thumb|340px|GUI]]&lt;br /&gt;
|[[Image:SkullStripperSurface-3-6.png|thumb|375px|Brain surface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:PyLAR-SlicerExtension_-_Examples_panel.png|thumb|280px|Examples panel]]&lt;br /&gt;
|}&lt;br /&gt;
The example panel presents two options:&lt;br /&gt;
* Create sample configuration files: They can be edited and adapted to process the researcher's data. Most likely, the file containing the list of images to process (file_list_file_name) will also have to be updated before one runs the algorithm.&lt;br /&gt;
&lt;br /&gt;
* Downloading sample data from http://slicer.kitware.com/midas3 and http://insight-journal.org/midas&lt;br /&gt;
** Synthetic data (bull's eye)&lt;br /&gt;
** Healthy volunteer (T1-Flash)&lt;br /&gt;
** Healthy volunteer (T1-MPRage)&lt;br /&gt;
** Healthy volunteer (T2)&lt;br /&gt;
** Healthy volunteer (MRA)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:PyLAR-SlicerExtension_-_GUI_-_while_processing.png|thumb|280px|Module UI]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The user needs to select a configuration file and the algorithm to run (unbiased atlas creation, low rank/Sparse decomposition, Low Rank Atlas Creation). The user then presses &amp;quot;Apply&amp;quot;&lt;br /&gt;
and the result will be automatically loaded in Slicer. All the temporary images that were used and computed while the algorithm is running are saved in &amp;quot;result_dir&amp;quot; specified in the configuration file. The researcher can also specify an additional image that is not listed in the file containing the list of images. This image will be added at computation time. This is convenient for example if one needs to compute the Low Rank/Sparse decomposition of subjects one at the time, using a list of healthy control that does not need to be modified.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Configuration files}}&lt;br /&gt;
&lt;br /&gt;
* Unbiased atlas creation&lt;br /&gt;
    clean (boolean): Removes content of output directory before starting computation&lt;br /&gt;
    data_dir (string): directory containing 'file_list_file_name'&lt;br /&gt;
    file_list_file_name (string): text file containing a list of image file paths, one per line&lt;br /&gt;
    verbose (boolean): Displays more or less information while running&lt;br /&gt;
    result_dir (string): output directory where outputs will be saved.&lt;br /&gt;
    selection (list): select images that are processed in given list [must contain at least 2 values].&lt;br /&gt;
    reference_im_fn (string): reference image used for the registration.&lt;br /&gt;
    num_of_iterations_per_level (int): Number of iteration per level for the registration [&amp;gt;=0]&lt;br /&gt;
    num_of_levels (int): Number of levels (starting the registration at a down-sampled level) for the registration [&amp;gt;=1]&lt;br /&gt;
    ants_params (see example and ANTS documentation):&lt;br /&gt;
    ants_params = {'Convergence' : '[100x50x25,1e-6,10]',\&lt;br /&gt;
                  'Dimension': 3,\&lt;br /&gt;
                  'ShrinkFactors' : '4x2x1',\&lt;br /&gt;
                  'SmoothingSigmas' : '2x1x0vox',\&lt;br /&gt;
                  'Transform' :'SyN[0.5]',\&lt;br /&gt;
                  'Metric': 'Mattes[fixedIm,movingIm,1,50,Regular,0.95]'}&lt;br /&gt;
    number_of_cpu (integer/optional): Number of diffeomorphic registration run in parallel. In not specified,&lt;br /&gt;
                             it will run as many processes as there are CPU available. Beware, the processes might&lt;br /&gt;
                             already be multithreaded.&lt;br /&gt;
&lt;br /&gt;
* Low Rank/Sparse decomposition&lt;br /&gt;
    clean (boolean): Removes content of output directory before starting computation&lt;br /&gt;
    data_dir (string): directory containing 'file_list_file_name'&lt;br /&gt;
    file_list_file_name (string): text file containing a list of image file paths, one per line&lt;br /&gt;
    verbose (boolean): Displays more or less information while running&lt;br /&gt;
    lamda (float): the tuning parameter that weights between the low-rank component and the sparse component.&lt;br /&gt;
    sigma (float): blurring kernel size.&lt;br /&gt;
    result_dir (string): output directory where outputs will be saved.&lt;br /&gt;
    selection (list): select images that are processed in given list [must contain at least 1 value].&lt;br /&gt;
    reference_im_fn (string): reference image used for the registration.&lt;br /&gt;
    registration (string): 'affine', 'rigid', or 'none'&lt;br /&gt;
    histogram_matching (boolean/optional): If not specified or set to False, no histogram matching performed.&lt;br /&gt;
&lt;br /&gt;
* Low Rank Atlas Creation&lt;br /&gt;
    clean (boolean): Removes content of output directory before starting computation&lt;br /&gt;
    data_dir (string): directory containing 'file_list_file_name'&lt;br /&gt;
    file_list_file_name (string): text file containing a list of image file paths, one per line&lt;br /&gt;
    verbose (boolean): Displays more or less information while running&lt;br /&gt;
    lamda (float): the tuning parameter that weights between the low-rank component and the sparse component.&lt;br /&gt;
    sigma (float): blurring kernel size.&lt;br /&gt;
    result_dir (string): output directory where outputs will be saved.&lt;br /&gt;
    selection (list): select images that are processed in given list [must contain at least 2 values].&lt;br /&gt;
    reference_im_fn (string): reference image used for the registration.&lt;br /&gt;
    use_healthy_atlas (boolean): use a specified healthy atlas as reference image or compute a reference image from&lt;br /&gt;
                                 the average of all the low-ranked images computed from the selected input images.&lt;br /&gt;
    num_of_iterations_per_level (int): Number of iteration per level for the registration [&amp;gt;=0]&lt;br /&gt;
    num_of_levels (int): Number of levels (starting the registration at a down-sampled level) for the registration [&amp;gt;=1]&lt;br /&gt;
    registration_type (string): Type of registration performed, selected among [BSpline,ANTS,Demons]&lt;br /&gt;
    ants_params (see example and ANTS documentation): Only necessary if registration_type is set to ANTS.&lt;br /&gt;
            ants_params = {'Convergence' : '[100x50x25,1e-6,10]',\&lt;br /&gt;
                  'Dimension': 3,\&lt;br /&gt;
                  'ShrinkFactors' : '4x2x1',\&lt;br /&gt;
                  'SmoothingSigmas' : '2x1x0vox',\&lt;br /&gt;
                  'Transform' :'SyN[0.5]',\&lt;br /&gt;
                  'Metric': 'Mattes[fixedIm,movingIm,1,50,Regular,0.95]'}&lt;br /&gt;
    number_of_cpu (integer/optional): Number of diffeomorphic registration run in parallel. In not specified,&lt;br /&gt;
                             it will run as many processes as there are CPU available. Beware, the processes might&lt;br /&gt;
                             already be multithreaded.&lt;br /&gt;
* File List File Name: text file containing a list of image file paths, one per line&lt;br /&gt;
   /path/to/first/image.nrrd&lt;br /&gt;
   /path/to/second/image2.nrrd&lt;br /&gt;
   /path/to/third/image3.nii.gz&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
* Liu et al., &amp;quot;Low-Rank to the Rescue – Atlas-Based Analyses in the Presence of Pathologies&amp;quot;, MICCAI 2014, pp97-104&lt;br /&gt;
* Liu et al., &amp;quot;Low-Rank Atlas Image Analyses in the Presence of Pathologies&amp;quot;, IEEE Transactions on Medical Imaging, Vol. 34, No. 12, December 2015&lt;br /&gt;
* Candes et al., &amp;quot;Robust Principal Component Analysis?&amp;quot;, Journal of the ACM, Vol. 58, No. 3, 2011&lt;br /&gt;
* Lin et al., &amp;quot;The Augmented Lagrangian Multiplier Method for Exact Recovery of Corrupted Low-Rank Matrices&amp;quot;, 2011 (available online on archivX)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-developerinfo}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Segmentation]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/pyLARSlicerExtension&amp;diff=45073</id>
		<title>Documentation/Nightly/Extensions/pyLARSlicerExtension</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/pyLARSlicerExtension&amp;diff=45073"/>
		<updated>2016-03-18T19:18:45Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: Created page with &amp;quot;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt; &amp;lt;!-- ---------------------------- --&amp;gt; {{documentation/{{documentation/version}}/module-header}} &amp;lt;!-- --------------------...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/pyLARSlicerExtension|pyLAR Slicer Extension]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work was supported, in-part, by the NIBIB (R41EB015775), the NINDS (R41NS081792) and the NSF (EECS-1148870) &amp;lt;br&amp;gt;&lt;br /&gt;
Integration of pyLAR, a python implementation of Low-rank Atlas-to-image Registration framework and its applications, as a Slicer extension&amp;lt;br&amp;gt;&lt;br /&gt;
More information about pyLAR is available [https://github.com/KitwareMedical/pyLAR here] .&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Xiaoxiao Liu ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor2: Deepak Roy Chittajallu ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor3: Roland Kwitt ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;francois.budin@kitware.com&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|kitware}}|{{collaborator|longname|kitware}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
|Image:PyLAR-SlicerExtension-Icon512x512.png|Icon&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:PyLAR-SlicerExtension_-_GUI_-_while_processing.png|thumb|340px|GUI]]&lt;br /&gt;
|[[Image:SkullStripperSurface-3-6.png|thumb|375px|Brain surface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:PyLAR-SlicerExtension_-_Examples_panel.png|thumb|280px|Examples panel]]&lt;br /&gt;
|}&lt;br /&gt;
The example panel presents two options:&lt;br /&gt;
* Create sample configuration files: They can be edited and adapted to process the researcher's data. Most likely, the file containing the list of images to process (file_list_file_name) will also have to be updated before one runs the algorithm.&lt;br /&gt;
&lt;br /&gt;
* Downloading sample data from http://slicer.kitware.com/midas3 and http://insight-journal.org/midas&lt;br /&gt;
** Synthetic data (bull's eye)&lt;br /&gt;
** Healthy volunteer (T1-Flash)&lt;br /&gt;
** Healthy volunteer (T1-MPRage)&lt;br /&gt;
** Healthy volunteer (T2)&lt;br /&gt;
** Healthy volunteer (MRA)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:PyLAR-SlicerExtension_-_GUI_-_while_processing.png|thumb|280px|Module UI]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The user needs to select a configuration file and the algorithm to run (unbiased atlas creation, low rank/Sparse decomposition, Low Rank Atlas Creation). The user then presses &amp;quot;Apply&amp;quot;&lt;br /&gt;
and the result will be automatically loaded in Slicer. All the temporary images that were used and computed while the algorithm is running are saved in &amp;quot;result_dir&amp;quot; specified in the configuration file. The researcher can also specify an additional image that is not listed in the file containing the list of images. This image will be added at computation time. This is convenient for example if one needs to compute the Low Rank/Sparse decomposition of subjects one at the time, using a list of healthy control that does not need to be modified.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Configuration files}}&lt;br /&gt;
&lt;br /&gt;
    Unbiased atlas creation&lt;br /&gt;
    clean (boolean): Removes content of output directory before starting computation&lt;br /&gt;
    data_dir (string): directory containing 'file_list_file_name'&lt;br /&gt;
    file_list_file_name (string): text file containing a list of image file paths, one per line&lt;br /&gt;
    verbose (boolean): Displays more or less information while running&lt;br /&gt;
    result_dir (string): output directory where outputs will be saved.&lt;br /&gt;
    selection (list): select images that are processed in given list [must contain at least 2 values].&lt;br /&gt;
    reference_im_fn (string): reference image used for the registration.&lt;br /&gt;
    num_of_iterations_per_level (int): Number of iteration per level for the registration [&amp;gt;=0]&lt;br /&gt;
    num_of_levels (int): Number of levels (starting the registration at a down-sampled level) for the registration [&amp;gt;=1]&lt;br /&gt;
    ants_params (see example and ANTS documentation):&lt;br /&gt;
    ants_params = {'Convergence' : '[100x50x25,1e-6,10]',\&lt;br /&gt;
                  'Dimension': 3,\&lt;br /&gt;
                  'ShrinkFactors' : '4x2x1',\&lt;br /&gt;
                  'SmoothingSigmas' : '2x1x0vox',\&lt;br /&gt;
                  'Transform' :'SyN[0.5]',\&lt;br /&gt;
                  'Metric': 'Mattes[fixedIm,movingIm,1,50,Regular,0.95]'}&lt;br /&gt;
    number_of_cpu (integer/optional): Number of diffeomorphic registration run in parallel. In not specified,&lt;br /&gt;
                             it will run as many processes as there are CPU available. Beware, the processes might&lt;br /&gt;
                             already be multithreaded.&lt;br /&gt;
&lt;br /&gt;
    Low Rank/Sparse decomposition&lt;br /&gt;
    clean (boolean): Removes content of output directory before starting computation&lt;br /&gt;
    data_dir (string): directory containing 'file_list_file_name'&lt;br /&gt;
    file_list_file_name (string): text file containing a list of image file paths, one per line&lt;br /&gt;
    verbose (boolean): Displays more or less information while running&lt;br /&gt;
    lamda (float): the tuning parameter that weights between the low-rank component and the sparse component.&lt;br /&gt;
    sigma (float): blurring kernel size.&lt;br /&gt;
    result_dir (string): output directory where outputs will be saved.&lt;br /&gt;
    selection (list): select images that are processed in given list [must contain at least 1 value].&lt;br /&gt;
    reference_im_fn (string): reference image used for the registration.&lt;br /&gt;
    registration (string): 'affine', 'rigid', or 'none'&lt;br /&gt;
    histogram_matching (boolean/optional): If not specified or set to False, no histogram matching performed.&lt;br /&gt;
&lt;br /&gt;
    Low Rank Atlas Creation&lt;br /&gt;
    clean (boolean): Removes content of output directory before starting computation&lt;br /&gt;
    data_dir (string): directory containing 'file_list_file_name'&lt;br /&gt;
    file_list_file_name (string): text file containing a list of image file paths, one per line&lt;br /&gt;
    verbose (boolean): Displays more or less information while running&lt;br /&gt;
    lamda (float): the tuning parameter that weights between the low-rank component and the sparse component.&lt;br /&gt;
    sigma (float): blurring kernel size.&lt;br /&gt;
    result_dir (string): output directory where outputs will be saved.&lt;br /&gt;
    selection (list): select images that are processed in given list [must contain at least 2 values].&lt;br /&gt;
    reference_im_fn (string): reference image used for the registration.&lt;br /&gt;
    use_healthy_atlas (boolean): use a specified healthy atlas as reference image or compute a reference image from&lt;br /&gt;
                                 the average of all the low-ranked images computed from the selected input images.&lt;br /&gt;
    num_of_iterations_per_level (int): Number of iteration per level for the registration [&amp;gt;=0]&lt;br /&gt;
    num_of_levels (int): Number of levels (starting the registration at a down-sampled level) for the registration [&amp;gt;=1]&lt;br /&gt;
    registration_type (string): Type of registration performed, selected among [BSpline,ANTS,Demons]&lt;br /&gt;
    ants_params (see example and ANTS documentation): Only necessary if registration_type is set to ANTS.&lt;br /&gt;
            ants_params = {'Convergence' : '[100x50x25,1e-6,10]',\&lt;br /&gt;
                  'Dimension': 3,\&lt;br /&gt;
                  'ShrinkFactors' : '4x2x1',\&lt;br /&gt;
                  'SmoothingSigmas' : '2x1x0vox',\&lt;br /&gt;
                  'Transform' :'SyN[0.5]',\&lt;br /&gt;
                  'Metric': 'Mattes[fixedIm,movingIm,1,50,Regular,0.95]'}&lt;br /&gt;
    number_of_cpu (integer/optional): Number of diffeomorphic registration run in parallel. In not specified,&lt;br /&gt;
                             it will run as many processes as there are CPU available. Beware, the processes might&lt;br /&gt;
                             already be multithreaded.&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
* Liu et al., &amp;quot;Low-Rank to the Rescue – Atlas-Based Analyses in the Presence of Pathologies&amp;quot;, MICCAI 2014, pp97-104&lt;br /&gt;
* Liu et al., &amp;quot;Low-Rank Atlas Image Analyses in the Presence of Pathologies&amp;quot;, IEEE Transactions on Medical Imaging, Vol. 34, No. 12, December 2015&lt;br /&gt;
* Candes et al., &amp;quot;Robust Principal Component Analysis?&amp;quot;, Journal of the ACM, Vol. 58, No. 3, 2011&lt;br /&gt;
* Lin et al., &amp;quot;The Augmented Lagrangian Multiplier Method for Exact Recovery of Corrupted Low-Rank Matrices&amp;quot;, 2011 (available online on archivX)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-developerinfo}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Segmentation]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:PyLAR-SlicerExtension_-_Examples_panel.png&amp;diff=45072</id>
		<title>File:PyLAR-SlicerExtension - Examples panel.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:PyLAR-SlicerExtension_-_Examples_panel.png&amp;diff=45072"/>
		<updated>2016-03-18T18:22:16Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:PyLAR-SlicerExtension_-_GUI_-_while_processing.png&amp;diff=45071</id>
		<title>File:PyLAR-SlicerExtension - GUI - while processing.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:PyLAR-SlicerExtension_-_GUI_-_while_processing.png&amp;diff=45071"/>
		<updated>2016-03-18T18:20:53Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:PyLAR-SlicerExtension-Icon512x512.png&amp;diff=45070</id>
		<title>File:PyLAR-SlicerExtension-Icon512x512.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:PyLAR-SlicerExtension-Icon512x512.png&amp;diff=45070"/>
		<updated>2016-03-18T18:18:02Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: Icon of pyLAR Slicer extension&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Icon of pyLAR Slicer extension&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/ModuleExtensionListing/Extensions_by_category&amp;diff=45069</id>
		<title>Documentation/Nightly/ModuleExtensionListing/Extensions by category</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/ModuleExtensionListing/Extensions_by_category&amp;diff=45069"/>
		<updated>2016-03-18T18:04:33Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* Extensions by category */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
* [[#Extensions_by_category|Extensions by category]]&lt;br /&gt;
= Extensions by category =&lt;br /&gt;
24 categories:&lt;br /&gt;
* [[#Extensions_by_category_Cardiac|Cardiac]]&lt;br /&gt;
* [[#Extensions_by_category_Cardiac_MRI_toolkit|Cardiac MRI toolkit]]&lt;br /&gt;
* [[#Extensions_by_category_Chest_Imaging_Platform|Chest Imaging Platform]]&lt;br /&gt;
* [[#Extensions_by_category_Converters|Converters]]&lt;br /&gt;
* [[#Extensions_by_category_Developer_Tools|Developer Tools]]&lt;br /&gt;
* [[#Extensions_by_category_Diffusion|Diffusion]]&lt;br /&gt;
* [[#Extensions_by_category_Editor_Effects|Editor Effects]]&lt;br /&gt;
* [[#Extensions_by_category_Exporter|Exporter]]&lt;br /&gt;
* [[#Extensions_by_category_Filtering|Filtering]]&lt;br /&gt;
* [[#Extensions_by_category_IGT|IGT]]&lt;br /&gt;
* [[#Extensions_by_category_Informatics|Informatics]]&lt;br /&gt;
* [[#Extensions_by_category_Mesh_Generation|Mesh Generation]]&lt;br /&gt;
* [[#Extensions_by_category_Microscopy|Microscopy]]&lt;br /&gt;
* [[#Extensions_by_category_Nuclear_Medicine|Nuclear Medicine]]&lt;br /&gt;
* [[#Extensions_by_category_Quantification|Quantification]]&lt;br /&gt;
* [[#Extensions_by_category_Radiotherapy|Radiotherapy]]&lt;br /&gt;
* [[#Extensions_by_category_Registration|Registration]]&lt;br /&gt;
* [[#Extensions_by_category_Scoliosis|Scoliosis]]&lt;br /&gt;
* [[#Extensions_by_category_Segmentation|Segmentation]]&lt;br /&gt;
* [[#Extensions_by_category_Sequences|Sequences]]&lt;br /&gt;
* [[#Extensions_by_category_Shape_Analysis|Shape Analysis]]&lt;br /&gt;
* [[#Extensions_by_category_Tractography|Tractography]]&lt;br /&gt;
* [[#Extensions_by_category_Training|Training]]&lt;br /&gt;
* [[#Extensions_by_category_Vascular_Modeling_Toolkit|Vascular Modeling Toolkit]]&lt;br /&gt;
* [[#Extensions_by_category_Wizards|Wizards]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Cardiac'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Cardiac ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerHeart|Slicer Heart]]&lt;br /&gt;
* [http://brainsia.github.io/CardiacAgatstonMeasures/ Cardiac Agatston Measures]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Cardiac_MRI_toolkit'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Cardiac MRI toolkit ==&lt;br /&gt;
* [http://capulet.med.utah.edu/namic/cmrslicer/ Cardiac MRI Toolkit]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Chest_Imaging_Platform'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Chest Imaging Platform ==&lt;br /&gt;
* [http://www.chestimagingplatform.org Chest Imaging Platform]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Converters'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Converters ==&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/PETDICOM PETDICOMExtension]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Developer_Tools'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Developer Tools ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DeveloperToolsForExtensions|Developer Tools For Extensions]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DebuggingTools|Debugging Tools]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MatlabBridge|Matlab Bridge]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ImageMaker|Image Maker]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Diffusion'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Diffusion ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ResampleDTIlogEuclidean|Resample DTIlog Euclidean]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Editor_Effects'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Editor Effects ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/WindowLevelEffect|Window Level Effect]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Exporter'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Exporter ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerToKiwiExporter|Slicer To Kiwi Exporter]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_IGT'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Filtering ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/pyLARSlicerExtension|pyLAR Slicer Extension]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Filtering'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== IGT ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/NeedleFinder|Needle Finder]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/TrackerStabilizer Tracker Stabilizer]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/GyroGuide|Gyro Guide]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CornerAnnotation|Corner Annotation]]&lt;br /&gt;
* [https://github.com/SlicerIGT/LumpNav Lump Nav]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PercutaneousApproachAnalysis|Percutaneous Approach Analysis]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerIGT|Slicer IGT]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/iGyne|i Gyne]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ResectionPlanner|Resection Planner]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Informatics'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Informatics ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CurveMaker|Curve Maker]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/LongitudinalPETCT|Longitudinal PETCT]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Reporting|Reporting]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/mpReview|mp Review]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/TCIABrowser|TCIABrowser]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerProstate|Slicer Prostate]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Mesh_Generation'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Mesh Generation ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CBC_3D_I2MConversion|CBC 3D I2MConversion]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CleaverExtension|Cleaver Extension]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Microscopy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Microscopy ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/IASEM|IASEM]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Nuclear_Medicine'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Nuclear Medicine ==&lt;br /&gt;
* [http://gti-fing.github.io/SlicerPetSpectAnalysis Pet Spect Analysis]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Quantification'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Quantification ==&lt;br /&gt;
* [http://slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/DSC_MRI_Analysis DSCMRIAnalysis]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/T1Mapping|T1Mapping]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/DiceComputation|Dice Computation]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PET-IndiC|PET-Indi C]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PkModeling|Pk Modeling]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Radiotherapy'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Radiotherapy ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MarginCalculator|Margin Calculator]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SlicerRT|Slicer RT]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/GelDosimetry Gel Dosimetry Analysis]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Registration'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Registration ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/CMFreg|CMFreg]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PBNRR|PBNRR]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Scoliosis'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Scoliosis ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Scoliosis|Scoliosis]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Segmentation'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Segmentation ==&lt;br /&gt;
* [http://publish.uwo.ca/~dchen285/GraphCutSegment/GraphCutSegment.html Graph Cut Segment]&lt;br /&gt;
* [http://www.nitrc.org/projects/abc ABC]&lt;br /&gt;
* [http://wiki.slicer.org/slicerWiki/index.php/Documentation/Nightly/Modules/CarreraSliceInteractiveSegmenter Carrera Slice]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SkullStripper|Skull Stripper]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PETTumorSegmentation|PETTumor Segmentation]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/SwissSkullStripper|Swiss Skull Stripper]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/LAScarSegmenter|LAScar Segmenter]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/OpenCAD|Open CAD]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/IntensitySegmenter|Intensity Segmenter]]&lt;br /&gt;
* [https://github.com/Tomnl/Slicer-Wasp Wasp]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/AirwaySegmentation Airway Segmentation]&lt;br /&gt;
* [https://www.slicer.org/slicerWiki/index.php/Documentation/4.3/Modules/FastGrowCut Fast Grow Cut Effect]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/VolumeClip|Volume Clip]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Sequences'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Sequences ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Sequences|Sequences]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Shape_Analysis'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Shape Analysis ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/MeshToLabelMap|Mesh To Label Map]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/Q3DC|Q3DC]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ModelToModelDistance|Model To Model Distance]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/EasyClip|Easy Clip]]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/PickAndPaint Pick And Paint Extension]&lt;br /&gt;
* [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/AnglePlanes Angle Planes Extension]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Tractography'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Tractography ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/FinslerTractography|Finsler Tractography]]&lt;br /&gt;
* [[Documentation/Nightly/Extensions/UKFTractography|UKFTractography]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Training'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Training ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/PerkTutor|Perk Tutor]]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Vascular_Modeling_Toolkit'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Vascular Modeling Toolkit ==&lt;br /&gt;
* [http://slicer.vmtk.org/ VMTK]&lt;br /&gt;
&amp;lt;span id='Extensions_by_category_Wizards'&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Wizards ==&lt;br /&gt;
* [[Documentation/Nightly/Extensions/ChangeTracker|Change Tracker]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/CatalogPolicies&amp;diff=45067</id>
		<title>Documentation/Nightly/Extensions/CatalogPolicies</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/CatalogPolicies&amp;diff=45067"/>
		<updated>2016-03-18T15:22:41Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* Category 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Disclaimer =&lt;br /&gt;
&lt;br /&gt;
This is work in progress as of April 2012 - people with an interest in policies and practice related to this topic should contact Ron Kikinis.&lt;br /&gt;
&lt;br /&gt;
The following text details the policies for Slicer Extensions. These policies are subject to change without notice at the discretion of the Slicer PI. It is expected that this will happen rarely and after consultation with the Slicer community.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Requirements for Slicer Extensions =&lt;br /&gt;
== Category 1 ==&lt;br /&gt;
&lt;br /&gt;
Category 1 extensions must meet the following conditions:&lt;br /&gt;
* comply with the [http://www.slicer.org/pages/LicenseText Slicer License]&lt;br /&gt;
* compile and install on [[Documentation/{{documentation/version}}/SlicerApplication/HardwareConfiguration|all platforms supported by Slicer]]&lt;br /&gt;
* &amp;lt;del&amp;gt;have test coverage of better than 60%&amp;lt;/del&amp;gt;. See issue [http://www.na-mic.org/Bug/view.php?id=2172 #2172]&lt;br /&gt;
* have [[Documentation/{{documentation/version}}/HowTo|documentation]] at a level of quality comparable to slicer core modules&lt;br /&gt;
* have a designated person to [http://massmail.bwh.harvard.edu/mailman/listinfo/slicer-devel answer emails] in relation to the extension which are posted on both the [http://massmail.bwh.harvard.edu/mailman/listinfo/slicer-users users] and [http://massmail.bwh.harvard.edu/mailman/listinfo/slicer-devel developers] Slicer mailing lists.&lt;br /&gt;
* are updated to support new versions of the OS, new versions of packages (such as VTK, ITK), etc.&lt;br /&gt;
* have clear description, icon, screenshots and tutorials&lt;br /&gt;
&lt;br /&gt;
== Category 2 ==&lt;br /&gt;
Category 2 extensions must meet the following conditions:&lt;br /&gt;
* be available under a compatible [https://en.wikipedia.org/wiki/Open_source open source] license&lt;br /&gt;
* have a designated maintainer to [http://massmail.bwh.harvard.edu/mailman/listinfo/slicer-devel respond to questions] about the extension&lt;br /&gt;
* have a clear declaration about the license under which the code is distributed&lt;br /&gt;
* have [[Documentation/{{documentation/version}}/Developers/Tutorials/DocumentExtension|documentation]] page&lt;br /&gt;
* have clear description, icon, screenshots and optionally tutorials&lt;br /&gt;
&lt;br /&gt;
== Category 3 ==&lt;br /&gt;
Category 3 Slicer Extensions cover everything else, including developers who do not want to share their source code or extensions.&lt;br /&gt;
* I do not want to share my source code: When source code is not shared, it is not possible to inspect the code for malicious content. This is a potential security risk that we will not accept for the Slicer website.&lt;br /&gt;
* Developers are free to set up their own Midas servers for hosting extensions if they want to host category 3 extensions, or can just make .tar.gz files and either install the package manually from the [[Documentation/{{documentation/version}}/SlicerApplication/ExtensionsManager|Extension manager]] or set the module path in Slicer manually.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= What is an extension ? =&lt;br /&gt;
{{:Documentation/{{documentation/version}}/Extensions/Description}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/CatalogPolicies&amp;diff=45066</id>
		<title>Documentation/Nightly/Extensions/CatalogPolicies</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/CatalogPolicies&amp;diff=45066"/>
		<updated>2016-03-18T15:21:02Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: Addition of information: missing information concerning the possibility to install an extension manually from the extension manager.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Disclaimer =&lt;br /&gt;
&lt;br /&gt;
This is work in progress as of April 2012 - people with an interest in policies and practice related to this topic should contact Ron Kikinis.&lt;br /&gt;
&lt;br /&gt;
The following text details the policies for Slicer Extensions. These policies are subject to change without notice at the discretion of the Slicer PI. It is expected that this will happen rarely and after consultation with the Slicer community.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Requirements for Slicer Extensions =&lt;br /&gt;
== Category 1 ==&lt;br /&gt;
&lt;br /&gt;
Category 1 extensions must meet the following conditions:&lt;br /&gt;
* comply with the [http://www.slicer.org/pages/LicenseText Slicer License]&lt;br /&gt;
* compile and install on [[Documentation/{{documentation/version}}/SlicerApplication/HardwareConfiguration|all platforms supported by Slicer]]&lt;br /&gt;
* &amp;lt;del&amp;gt;have test coverage of better than 60%&amp;lt;/del&amp;gt;. See issue [http://www.na-mic.org/Bug/view.php?id=2172 #2172]&lt;br /&gt;
* have [[Documentation/{{documentation/version}}/HowTo|documentation]] at a level of quality comparable to slicer core modules&lt;br /&gt;
* have a designated person to [http://massmail.bwh.harvard.edu/mailman/listinfo/slicer-devel answer emails] in relation to the extension which are posted on both the [http://massmail.bwh.harvard.edu/mailman/listinfo/slicer-users users] and [http://massmail.bwh.harvard.edu/mailman/listinfo/slicer-devel developers] Slicer mailing lists.&lt;br /&gt;
* are updated to support new versions of the OS, new versions of packages (such as VTK, ITK), etc.&lt;br /&gt;
* have clear description, icon, screenshots and tutorials&lt;br /&gt;
&lt;br /&gt;
== Category 2 ==&lt;br /&gt;
Category 2 extensions must meet the following conditions:&lt;br /&gt;
* be available under a compatible [https://en.wikipedia.org/wiki/Open_source open source] license&lt;br /&gt;
* have a designated maintainer to [http://massmail.bwh.harvard.edu/mailman/listinfo/slicer-devel respond to questions] about the extension&lt;br /&gt;
* have a clear declaration about the license under which the code is distributed&lt;br /&gt;
* have [[Documentation/{{documentation/version}}/Developers/Tutorials/DocumentExtension|documentation]] page&lt;br /&gt;
* have clear description, icon, screenshots and optionally tutorials&lt;br /&gt;
&lt;br /&gt;
== Category 3 ==&lt;br /&gt;
Category 3 Slicer Extensions cover everything else, including developers who do not want to share their source code or extensions.&lt;br /&gt;
* I do not want to share my source code: When source code is not shared, it is not possible to inspect the code for malicious content. This is a potential security risk that we will not accept for the Slicer website.&lt;br /&gt;
* Developers are free to set up their own Midas servers for hosting extensions if they want to host category 3 extensions, or can just make .tar.gz files and either install the package manually from the extension manager or set the module path in Slicer manually.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= What is an extension ? =&lt;br /&gt;
{{:Documentation/{{documentation/version}}/Extensions/Description}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.5/ScriptRepository&amp;diff=45042</id>
		<title>Documentation/4.5/ScriptRepository</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.5/ScriptRepository&amp;diff=45042"/>
		<updated>2016-03-08T17:09:38Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: Missing import statement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Community-contributed modules=&lt;br /&gt;
&lt;br /&gt;
Usage: save the .py file to a directory, add the directory to the additional module paths in the Slicer application settings (choose in the menu: Edit / Application settings, click Modules, click &amp;gt;&amp;gt; next to Additional module paths, click Add, and choose the .py file's location).&lt;br /&gt;
&lt;br /&gt;
==Filters==&lt;br /&gt;
* [https://raw.github.com/pieper/VolumeMasker/master/VolumeMasker.py VolumeMasker.py]: Update a target volume with the results of setting all input volume voxels to 0 except for those that correspond to a selected label value in an input label map (Used for example in the volume rendering in [https://www.youtube.com/watch?v=dfu2gugHLHs this video).&lt;br /&gt;
&lt;br /&gt;
==DICOM==&lt;br /&gt;
* [https://gist.github.com/pieper/6186477 dicom header browser] to easily scroll through dicom files using dcmdump.&lt;br /&gt;
* [https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/src/BatchProcessing SlicerRT batch processing] to batch convert RT structure sets to labelmap NRRD files.&lt;br /&gt;
&lt;br /&gt;
==Informatics==&lt;br /&gt;
* [https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/sandbox/MarkupsInfoModule/MarkupsInfo.py MarkupsInfo.py]: Compute the total length between all the points of a markup list.&lt;br /&gt;
* [https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/sandbox/LineProfile/LineProfile.py LineProfile.py]: Compute intensity profile in a volume along a line.&lt;br /&gt;
&lt;br /&gt;
=Community-contributed examples=&lt;br /&gt;
&lt;br /&gt;
Usage: Copy-paste the shown code lines or linked .py file contents into Python console in Slicer.&lt;br /&gt;
&lt;br /&gt;
==Capture==&lt;br /&gt;
* Get a MRML node in the scene based on the node name and call methods of that object. For the MRHead sample data:&lt;br /&gt;
  vol=slicer.util.getNode('MR*')&lt;br /&gt;
  vol.GetImageData().GetDimensions()&lt;br /&gt;
* Capture the full Slicer screen and save it into a file&lt;br /&gt;
  img = qt.QPixmap.grabWidget(slicer.util.mainWindow()).toImage()&lt;br /&gt;
  img.save('c:/tmp/test.png')&lt;br /&gt;
* [https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/sandbox/CaptureRotationVideo/CaptureRotationVideo.py CaptureRotationVideo.py]: Capture a video of the scene rotating in the 3D view&lt;br /&gt;
&lt;br /&gt;
==Launching Slicer==&lt;br /&gt;
* How to open an .mrb file with Slicer at the command line?&lt;br /&gt;
  Slicer.exe --python-code &amp;quot;slicer.util.loadScene( 'f:/2013-08-23-Scene.mrb' )&amp;quot;&lt;br /&gt;
* How to run a script in the Slicer environment in batch mode (without showing any graphical user interface)?&lt;br /&gt;
  Slicer.exe --python-code &amp;quot;doSomething; doSomethingElse; etc.&amp;quot; --testing --no-splash --no-main-window&lt;br /&gt;
&lt;br /&gt;
==DICOM==&lt;br /&gt;
* How to access tags of DICOM images imported into Slicer? For example, to print the first patient's first study's first series' &amp;quot;0020,0032&amp;quot; field:&lt;br /&gt;
  db=slicer.dicomDatabase&lt;br /&gt;
  patientList=db.patients()&lt;br /&gt;
  studyList=db.studiesForPatient(patientList[0])&lt;br /&gt;
  seriesList=db.seriesForStudy(studyList[0])&lt;br /&gt;
  fileList=db.filesForSeries(seriesList[0])&lt;br /&gt;
  print db.fileValue(fileList[0],'0020,0032')&lt;br /&gt;
&lt;br /&gt;
* How to access tag of a volume loaded from DICOM? For example, get the patient position stored in a volume:&lt;br /&gt;
  volumeName='2: ENT IMRT'&lt;br /&gt;
  n=slicer.util.getNode(volumeName)&lt;br /&gt;
  instUids=n.GetAttribute('DICOM.instanceUIDs').split()&lt;br /&gt;
  filename=slicer.dicomDatabase.fileForInstance(instUids[0])&lt;br /&gt;
  print slicer.dicomDatabase.fileValue(filename,'0018,5100')&lt;br /&gt;
&lt;br /&gt;
* How to access tag of an item in the Subject Hierachy tree? For example, get the content time tag of a structure set:&lt;br /&gt;
  rtStructName = '3: RTSTRUCT: PROS'&lt;br /&gt;
  rtStructNode = slicer.util.getNode(rtStructName)&lt;br /&gt;
  rtStructSubjectHierarchyNode = slicer.vtkMRMLSubjectHierarchyNode.GetAssociatedSubjectHierarchyNode(rtStructNode)&lt;br /&gt;
  ctSliceInstanceUids = rtStructSubjectHierarchyNode.GetAttribute('DICOM.ReferencedInstanceUIDs').split()&lt;br /&gt;
  filename = slicer.dicomDatabase.fileForInstance(ctSliceInstanceUids[0])&lt;br /&gt;
  print slicer.dicomDatabase.fileValue(filename,'0008,0033')&lt;br /&gt;
&lt;br /&gt;
==Toolbar functions==&lt;br /&gt;
* How to turn on slice intersections in the crosshair menu on the toolbar:&lt;br /&gt;
  viewNodes = slicer.mrmlScene.GetNodesByClass('vtkMRMLSliceCompositeNode')&lt;br /&gt;
  viewNodes.UnRegister(slicer.mrmlScene)&lt;br /&gt;
  viewNodes.InitTraversal()&lt;br /&gt;
  viewNode = viewNodes.GetNextItemAsObject()&lt;br /&gt;
  while viewNode:&lt;br /&gt;
    viewNode.SetSliceIntersectionVisibility(1)&lt;br /&gt;
    viewNode = viewNodes.GetNextItemAsObject()&lt;br /&gt;
&lt;br /&gt;
How to find similar functions? For this one I searched for &amp;quot;slice intersections&amp;quot; text in the whole slicer source code, found that the function is implemented in Base\QTGUI\qSlicerViewersToolBar.cxx, then translated the qSlicerViewersToolBarPrivate::setSliceIntersectionVisible(bool visible) method to Python.&lt;br /&gt;
&lt;br /&gt;
==Manipulating objects in the slice viewer==&lt;br /&gt;
* How to define/edit a circular region of interest in a slice viewer?&lt;br /&gt;
&lt;br /&gt;
Drop two markup points on a slice view and copy-paste the code below into the Python console. After this, as you move the markups you’ll see a circle following the markups.&lt;br /&gt;
&lt;br /&gt;
  # Update the sphere from the fiducial points&lt;br /&gt;
  def UpdateSphere(param1, param2):  &lt;br /&gt;
    centerPointCoord = [0.0, 0.0, 0.0]&lt;br /&gt;
    markups.GetNthFiducialPosition(0,centerPointCoord)&lt;br /&gt;
    circumferencePointCoord = [0.0, 0.0, 0.0]&lt;br /&gt;
    markups.GetNthFiducialPosition(1,circumferencePointCoord)&lt;br /&gt;
    sphere.SetCenter(centerPointCoord)&lt;br /&gt;
    radius=math.sqrt((centerPointCoord[0]-circumferencePointCoord[0])**2+(centerPointCoord[1]-circumferencePointCoord[1])**2+(centerPointCoord[2]-circumferencePointCoord[2])**2)&lt;br /&gt;
    sphere.SetRadius(radius)&lt;br /&gt;
    sphere.SetPhiResolution(30)&lt;br /&gt;
    sphere.SetThetaResolution(30)&lt;br /&gt;
    sphere.Update()&lt;br /&gt;
  &lt;br /&gt;
  # Get a reference to the markup&lt;br /&gt;
  markups=slicer.util.getNode('F')&lt;br /&gt;
  # Create the sphere that will intersect the slice viewer&lt;br /&gt;
  sphere = vtk.vtkSphereSource()&lt;br /&gt;
  # Initial positioning of the sphere&lt;br /&gt;
  UpdateSphere(0,0)&lt;br /&gt;
  # Create model node and add to scene&lt;br /&gt;
  model = slicer.vtkMRMLModelNode()&lt;br /&gt;
  model.SetAndObservePolyData(sphere.GetOutput())&lt;br /&gt;
  modelDisplay = slicer.vtkMRMLModelDisplayNode()&lt;br /&gt;
  modelDisplay.SetSliceIntersectionVisibility(True) # Show in slice view&lt;br /&gt;
  modelDisplay.SetVisibility(False) # Hide in 3D view&lt;br /&gt;
  slicer.mrmlScene.AddNode(modelDisplay)&lt;br /&gt;
  model.SetAndObserveDisplayNodeID(modelDisplay.GetID())&lt;br /&gt;
  modelDisplay.SetInputPolyData(model.GetPolyData())&lt;br /&gt;
  slicer.mrmlScene.AddNode(model) &lt;br /&gt;
  # Call UpdateSphere whenever the fiducials are changed&lt;br /&gt;
  markups.AddObserver(&amp;quot;ModifiedEvent&amp;quot;, UpdateSphere, 2)&lt;br /&gt;
&lt;br /&gt;
== Add a texture mapped plane to the scene as a model ==&lt;br /&gt;
Note that model textures are not exposed in the GUI and are not saved in the scene&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# use dummy image data here&lt;br /&gt;
e = vtk.vtkImageEllipsoidSource()&lt;br /&gt;
&lt;br /&gt;
scene = slicer.mrmlScene&lt;br /&gt;
&lt;br /&gt;
# Create model node&lt;br /&gt;
model = slicer.vtkMRMLModelNode()&lt;br /&gt;
model.SetScene(scene)&lt;br /&gt;
model.SetName(scene.GenerateUniqueName(&amp;quot;2DImageModel&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
planeSource = vtk.vtkPlaneSource()&lt;br /&gt;
model.SetAndObservePolyData(planeSource.GetOutput())&lt;br /&gt;
&lt;br /&gt;
# Create display node&lt;br /&gt;
modelDisplay = slicer.vtkMRMLModelDisplayNode()&lt;br /&gt;
modelDisplay.SetColor(1,1,0) # yellow&lt;br /&gt;
modelDisplay.SetBackfaceCulling(0)&lt;br /&gt;
modelDisplay.SetScene(scene)&lt;br /&gt;
scene.AddNode(modelDisplay)&lt;br /&gt;
model.SetAndObserveDisplayNodeID(modelDisplay.GetID())&lt;br /&gt;
&lt;br /&gt;
# Add to scene&lt;br /&gt;
modelDisplay.SetAndObserveTextureImageData(e.GetOutput())&lt;br /&gt;
scene.AddNode(model) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
transform = slicer.vtkMRMLLinearTransformNode()&lt;br /&gt;
scene.AddNode(transform) &lt;br /&gt;
model.SetAndObserveTransformNodeID(transform.GetID())&lt;br /&gt;
&lt;br /&gt;
vTransform = vtk.vtkTransform()&lt;br /&gt;
vTransform.Scale(50,50,50)&lt;br /&gt;
vTransform.RotateX(30)&lt;br /&gt;
transform.SetAndObserveMatrixTransformToParent(vTransform.GetMatrix())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Export a model to Blender, including color ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plyFilePath = &amp;quot;/tmp/fibers.ply&amp;quot;&lt;br /&gt;
&lt;br /&gt;
lineDisplayNode = getNode(&amp;quot;*LineDisplay*&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
tuber = vtk.vtkTubeFilter()&lt;br /&gt;
tuber.SetInput(lineDisplayNode.GetOutputPolyData())&lt;br /&gt;
&lt;br /&gt;
tubes = tuber.GetOutput()&lt;br /&gt;
tubes.Update()&lt;br /&gt;
scalars = tubes.GetPointData().GetArray(0)&lt;br /&gt;
scalars.SetName(&amp;quot;scalars&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
triangles = vtk.vtkTriangleFilter()&lt;br /&gt;
triangles.SetInput(tubes)&lt;br /&gt;
&lt;br /&gt;
colorNode = lineDisplayNode.GetColorNode()&lt;br /&gt;
lookupTable = vtk.vtkLookupTable()&lt;br /&gt;
lookupTable.DeepCopy(colorNode.GetLookupTable())&lt;br /&gt;
lookupTable.SetTableRange(0,1)&lt;br /&gt;
&lt;br /&gt;
plyWriter = vtk.vtkPLYWriter()&lt;br /&gt;
plyWriter.SetInput(triangles.GetOutput())&lt;br /&gt;
plyWriter.SetLookupTable(lookupTable)&lt;br /&gt;
plyWriter.SetArrayName(&amp;quot;scalars&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
plyWriter.SetFileName(plyFilePath)&lt;br /&gt;
plyWriter.Write()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Clone a volume ==&lt;br /&gt;
This example shows how to clone the MRHead sample volume, including its pixel data and display settings.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sourceVolumeNode = slicer.util.getNode('MRHead')&lt;br /&gt;
volumesLogic = slicer.modules.volumes.logic()&lt;br /&gt;
clonedVolumeNode = volumesLogic.CloneVolume(slicer.mrmlScene, sourceVolumeNode, 'Cloned volume')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create a new volume ==&lt;br /&gt;
This example shows how to create a new empty volume.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
imageSize=[512, 512, 512]&lt;br /&gt;
imageSpacing=[1.0, 1.0, 1.0]&lt;br /&gt;
voxelType=vtk.VTK_UNSIGNED_CHAR&lt;br /&gt;
# Create an empty image volume&lt;br /&gt;
imageData=vtk.vtkImageData()&lt;br /&gt;
imageData.SetDimensions(imageSize)&lt;br /&gt;
imageData.AllocateScalars(voxelType, 1)&lt;br /&gt;
thresholder=vtk.vtkImageThreshold()&lt;br /&gt;
thresholder.SetInputData(imageData)&lt;br /&gt;
thresholder.SetInValue(0)&lt;br /&gt;
thresholder.SetOutValue(0)&lt;br /&gt;
# Create volume node&lt;br /&gt;
volumeNode=slicer.vtkMRMLScalarVolumeNode()&lt;br /&gt;
volumeNode.SetSpacing(imageSpacing)&lt;br /&gt;
volumeNode.SetImageDataConnection(thresholder.GetOutputPort())&lt;br /&gt;
# Add volume to scene&lt;br /&gt;
slicer.mrmlScene.AddNode(volumeNode)&lt;br /&gt;
displayNode=slicer.vtkMRMLScalarVolumeDisplayNode()&lt;br /&gt;
slicer.mrmlScene.AddNode(displayNode)&lt;br /&gt;
colorNode = slicer.util.getNode('Grey')&lt;br /&gt;
displayNode.SetAndObserveColorNodeID(colorNode.GetID())&lt;br /&gt;
volumeNode.SetAndObserveDisplayNodeID(displayNode.GetID())&lt;br /&gt;
volumeNode.CreateDefaultStorageNode()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modify voxels in a volume ==&lt;br /&gt;
This example shows how to change voxels values of the MRHead sample volume.&lt;br /&gt;
The values will be computed by function f(r,a,s,) = (r-10)*(r-10)+(a+15)*(a+15)+s*s.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode=slicer.util.getNode('MRHead')&lt;br /&gt;
ijkToRas = vtk.vtkMatrix4x4()&lt;br /&gt;
volumeNode.GetIJKToRASMatrix(ijkToRas)&lt;br /&gt;
imageData=volumeNode.GetImageData()&lt;br /&gt;
extent = imageData.GetExtent()&lt;br /&gt;
for k in xrange(extent[4], extent[5]+1):&lt;br /&gt;
  for j in xrange(extent[2], extent[3]+1):&lt;br /&gt;
    for i in xrange(extent[0], extent[1]+1):&lt;br /&gt;
      position_Ijk=[i, j, k, 1]&lt;br /&gt;
      position_Ras=ijkToRas.MultiplyPoint(position_Ijk)&lt;br /&gt;
      r=position_Ras[0]&lt;br /&gt;
      a=position_Ras[1]&lt;br /&gt;
      s=position_Ras[2]      &lt;br /&gt;
      functionValue=(r-10)*(r-10)+(a+15)*(a+15)+s*s&lt;br /&gt;
      imageData.SetScalarComponentFromDouble(i,j,k,0,functionValue)&lt;br /&gt;
imageData.SetScalarComponentFromFloat(distortionVectorPosition_Ijk[0], distortionVectorPosition_Ijk[1], distortionVectorPosition_Ijk[2], 0, fillValue)&lt;br /&gt;
imageData.Modified()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manipulate a Slice View ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lm = slicer.app.layoutManager()&lt;br /&gt;
red = lm.sliceWidget('Red')&lt;br /&gt;
redLogic = red.sliceLogic()&lt;br /&gt;
# Print current slice offset position&lt;br /&gt;
print redLogic.GetSliceOffset()&lt;br /&gt;
# Change slice position&lt;br /&gt;
redLogic.SetSliceOffset(20)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show a volume in the Slice Views ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
volumeNode = slicer.util.getNode('YourVolumeNode')&lt;br /&gt;
applicationLogic = slicer.app.applicationLogic()&lt;br /&gt;
selectionNode = applicationLogic.GetSelectionNode()&lt;br /&gt;
selectionNode.SetSecondaryVolumeID(volumeNode.GetID())&lt;br /&gt;
applicationLogic.PropagateForegroundVolumeSelection(0) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n =  slicer.util.getNode('YourVolumeNode')&lt;br /&gt;
for color in ['Red', 'Yellow', 'Green']:&lt;br /&gt;
    slicer.app.layoutManager().sliceWidget(color).sliceLogic().GetSliceCompositeNode().SetForegroundVolumeID(n.GetID())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Center the 3D View on the Scene ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
threeDWidget = layoutManager.threeDWidget(0)&lt;br /&gt;
threeDView = threeDWidget.threeDView()&lt;br /&gt;
threeDView.resetFocalPoint()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Display text in a 3D view or slice view ==&lt;br /&gt;
&lt;br /&gt;
The easiest way to show information overlaid on a viewer is to use corner annotations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
view=slicer.app.layoutManager().threeDWidget(0).threeDView()&lt;br /&gt;
# Set text to &amp;quot;Something&amp;quot;&lt;br /&gt;
view.cornerAnnotation().SetText(vtk.vtkCornerAnnotation.UpperRight,&amp;quot;Something&amp;quot;)&lt;br /&gt;
# Set color to red&lt;br /&gt;
view.cornerAnnotation().GetTextProperty().SetColor(1,0,0)&lt;br /&gt;
# Update the view&lt;br /&gt;
view.forceRender()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Customize viewer layout ==&lt;br /&gt;
&lt;br /&gt;
Show a custom layout of a 3D view on top of the red slice view:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
customLayout = (&amp;quot;&amp;lt;layout type=\&amp;quot;vertical\&amp;quot; split=\&amp;quot;true\&amp;quot; &amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot; &amp;lt;item&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot;  &amp;lt;view class=\&amp;quot;vtkMRMLViewNode\&amp;quot; singletontag=\&amp;quot;1\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot;    &amp;lt;property name=\&amp;quot;viewlabel\&amp;quot; action=\&amp;quot;default\&amp;quot;&amp;gt;1&amp;lt;/property&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot;  &amp;lt;/view&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot; &amp;lt;/item&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot; &amp;lt;item&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot;  &amp;lt;view class=\&amp;quot;vtkMRMLSliceNode\&amp;quot; singletontag=\&amp;quot;Red\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot;   &amp;lt;property name=\&amp;quot;orientation\&amp;quot; action=\&amp;quot;default\&amp;quot;&amp;gt;Axial&amp;lt;/property&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot;   &amp;lt;property name=\&amp;quot;viewlabel\&amp;quot; action=\&amp;quot;default\&amp;quot;&amp;gt;R&amp;lt;/property&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot;   &amp;lt;property name=\&amp;quot;viewcolor\&amp;quot; action=\&amp;quot;default\&amp;quot;&amp;gt;#F34A33&amp;lt;/property&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot;  &amp;lt;/view&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot; &amp;lt;/item&amp;gt;&amp;quot;&lt;br /&gt;
  &amp;quot;&amp;lt;/layout&amp;gt;&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
customLayoutId=501&lt;br /&gt;
&lt;br /&gt;
layoutManager = slicer.app.layoutManager()&lt;br /&gt;
layoutManager.layoutLogic().GetLayoutNode().AddLayoutDescription(customLayoutId, customLayout)                                         &lt;br /&gt;
layoutManager.setLayout(customLayoutId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See description of standard layouts (that can be used as examples) here:&lt;br /&gt;
https://github.com/Slicer/Slicer/blob/master/Libs/MRML/Logic/vtkMRMLLayoutLogic.cxx&lt;br /&gt;
&lt;br /&gt;
== Running an ITK filter in Python using SimpleITK ==&lt;br /&gt;
Open the &amp;quot;Sample Data&amp;quot; module and download &amp;quot;MR Head&amp;quot;, then paste the following snippet in Python interactor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import sitkUtils&lt;br /&gt;
inputImage = sitkUtils.PullFromSlicer('MRHead')&lt;br /&gt;
filter = sitk.SignedMaurerDistanceMapImageFilter()&lt;br /&gt;
outputImage = filter.Execute(inputImage)&lt;br /&gt;
sitkUtils.PushToSlicer(outputImage,'outputImage')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More information:&lt;br /&gt;
* See the SimpleITK documentation for SimpleITK examples: http://www.itk.org/SimpleITKDoxygen/html/examples.html&lt;br /&gt;
* sitkUtils in Slicer is used for pushing and pulling images from Slicer to SimpleITK: https://github.com/Slicer/Slicer/blob/master/Base/Python/sitkUtils.py&lt;br /&gt;
&lt;br /&gt;
== Get current mouse coordinates in a slice view ==&lt;br /&gt;
&lt;br /&gt;
You can get 3D (RAS) coordinates of the current mouse cursor from the crosshair singleton node as shown in the example below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def onMouseMoved(observer,eventid):  &lt;br /&gt;
  ras=[0,0,0]&lt;br /&gt;
  crosshairNode.GetCursorPositionRAS(ras)&lt;br /&gt;
  print(ras)&lt;br /&gt;
&lt;br /&gt;
crosshairNode=slicer.util.getNode('Crosshair') &lt;br /&gt;
crosshairNode.AddObserver(slicer.vtkMRMLCrosshairNode.CursorPositionModifiedEvent, onMouseMoved)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.5&amp;diff=44930</id>
		<title>Documentation/4.5</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.5&amp;diff=44930"/>
		<updated>2016-02-09T22:02:14Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: Link to users mailing list was broken&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{documentation/versionlist}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot; width=&amp;quot;100%&amp;quot; valign=&amp;quot;top&amp;quot; cellspacing=&amp;quot;7&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;33%&amp;quot;|&lt;br /&gt;
! |&lt;br /&gt;
! width=&amp;quot;33%&amp;quot;|&lt;br /&gt;
! |&lt;br /&gt;
! width=&amp;quot;33%&amp;quot;|&lt;br /&gt;
|- &lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #555555; font-size: 18px; font-weight: bold;&amp;quot;&amp;gt;Where to start ?&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Training|Training pages]]&lt;br /&gt;
: Information on how to use Slicer {{documentation/version}}&lt;br /&gt;
&lt;br /&gt;
* [[Documentation/{{documentation/version}}/FAQ|FAQ]]&lt;br /&gt;
: Set of common questions/answers&lt;br /&gt;
* [http://massmail.spl.harvard.edu/mailman/listinfo/slicer-users Users mailing list] / [http://massmail.spl.harvard.edu/mailman/listinfo/slicer-users Sign-up] / [http://slicer-users.65878.n3.nabble.com/ Browse archives]&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #555555; font-size: 18px; font-weight: bold;&amp;quot;&amp;gt;How to&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Report a problem|Report a problem]] / [[Documentation/{{documentation/version}}/Create_a_feature_request|Create a feature request]]{{new}}&lt;br /&gt;
----&lt;br /&gt;
{{:{{FULLPAGENAME}}/SlicerApplication}}&lt;br /&gt;
&lt;br /&gt;
|bgcolor=&amp;quot;#CCCCCC&amp;quot;|&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #555555; font-size: 18px; font-weight: bold;&amp;quot;&amp;gt;Modules and Extensions&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
{{:{{FULLPAGENAME}}/ModuleExtensionListing/TOC}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #555555; font-size: 18px; font-weight: bold;&amp;quot;&amp;gt;Extension Categories&amp;lt;/span&amp;gt; {{new}}&lt;br /&gt;
----&lt;br /&gt;
{{note}} What are these categories ? See [[Documentation/{{documentation/version}}/Extensions/CatalogPolicies|here]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|bgcolor=&amp;quot;#CCCCCC&amp;quot;|&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #555555; font-size: 18px; font-weight: bold;&amp;quot;&amp;gt;Developers Corner&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* [[Documentation/Nightly/Developers | Information for Software Developers]]{{updated}}&lt;br /&gt;
: Source code, contribute patch, develop modules&lt;br /&gt;
&lt;br /&gt;
* [http://massmail.bwh.harvard.edu/mailman/listinfo/slicer-devel Developers mailing list] / [http://slicer-devel.65872.n3.nabble.com/ Browse archives]&lt;br /&gt;
: Intended for discussion of programming related questions&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #555555; font-size: 18px; font-weight: bold;&amp;quot;&amp;gt;Miscellaneous&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;!-- * [[Documentation/{{documentation/version}}/ImageGallery|Image gallery]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Documentation/{{documentation/version}}/HowTo|Documentation guidelines]]&lt;br /&gt;
:  Slicer user documentation principle and guidelines&lt;br /&gt;
&lt;br /&gt;
* [[Slicer4:VisualBlog|Visual blog]]&lt;br /&gt;
: Set of screenshots showing Slicer in action.&lt;br /&gt;
&lt;br /&gt;
* [[Documentation/{{documentation/version}}/ReleaseNotes|Release Notes]]&lt;br /&gt;
: Platform specific issues and considerations&lt;br /&gt;
&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Announcements|Announcements]] &amp;amp; [[Documentation/{{documentation/version}}/Acknowledgments|Acknowledgments]]&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.slicer.org/slicerWiki/index.php/Documentation/Nightly/Registration/RegistrationLibrary Registration Library]&lt;br /&gt;
: Real-life example cases of using the Slicer registration tools,  incl. datasets and step-by-step instructions to follow and try yourself. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #555555; font-size: 18px; font-weight: bold;&amp;quot;&amp;gt;Documentación en Español&amp;lt;/span&amp;gt; {{new}}&lt;br /&gt;
----&lt;br /&gt;
* [http://robustiana.com/156-intro-a-3d-slicer Introducción a 3D Slicer en Español]&lt;br /&gt;
: Breve descripción de proyecto y un breve viaje por sus principales herramientas y funcionalidades. &lt;br /&gt;
&lt;br /&gt;
* [http://robustiana.com/157-recon-volumetricas Reconstrucciones volumétricas con 3D Slicer]&lt;br /&gt;
: Guía de uso para la herramienta de creación de reconstrucciones volumétricas de 3D Slicer.  &lt;br /&gt;
&lt;br /&gt;
* [http://robustiana.com/158-contornos-3d-slicer Crear modelos/contornos de órganos con 3D Slicer]&lt;br /&gt;
: Guía rápida introductoria para la creación de contornos de órganos para generar vistas volumétricas.&lt;br /&gt;
&lt;br /&gt;
* [http://robustiana.com/159-endoscopias-3d-slicer Endoscopías virtuales con 3D Slicer]&lt;br /&gt;
: Manual de uso de la herramienta para 3D Slicer desarrollada por Steve Pieper para realizar endoscopías virtuales. &lt;br /&gt;
&lt;br /&gt;
* [http://robustiana.com/163-rt-slicer-3d Creando curvas de isodosis con SlicerRT de 3D Slicer]&lt;br /&gt;
: Introducción a la extensión SlicerRT para 3D Slicer enfocada en investigación en radioterapia. &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{:{{FULLPAGENAME}}/ModuleExtensionListing}}&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/CheckoutSourceCode&amp;diff=44895</id>
		<title>Documentation/Nightly/Developers/Build Instructions/CheckoutSourceCode</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/CheckoutSourceCode&amp;diff=44895"/>
		<updated>2016-02-09T17:22:27Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: Add 4.5.0-1 version of Slicer in revision list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== CHECKOUT slicer source files ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
2. Even if you use &amp;lt;code&amp;gt;svn&amp;lt;/code&amp;gt; to check out Slicer source code, you will need to have &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; installed to checkout and build other libraries. '''YES''', you need to install the things listed in the [[Documentation/{{documentation/version}}/Developers/Build Instructions/Prerequisites|prerequisites]] !.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
3. Reading the following page: [[Slicer:git-svn|Slicer guide to &amp;lt;code&amp;gt;git-svn&amp;lt;/code&amp;gt;]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Git ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;Git&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Checking the code using Git and configuring the &amp;lt;code&amp;gt;git svn&amp;lt;/code&amp;gt; bridge is the way to go. If you plan on contributing code, have a look at [[Documentation/{{documentation/version}}/Developers/Tutorials/ContributePatch|How to contribute a patch ?]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check out the code using &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; and configure the &amp;lt;code&amp;gt;git svn&amp;lt;/code&amp;gt; bridge:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:none; border-left:thick solid red; padding-left:1em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;While it is not enforced, we strongly recommend you to '''AVOID''' the use of '''SPACES''' for both the &amp;lt;code&amp;gt;source directory&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;build directory&amp;lt;/code&amp;gt;. We mean it.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Clone the github repository&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;pre&amp;gt;cd MyProjects&lt;br /&gt;
git clone git://github.com/Slicer/Slicer.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;Slicer&amp;lt;/code&amp;gt; directory is automatically created after cloning Slicer.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Setup the development environment:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;pre&amp;gt;cd Slicer&lt;br /&gt;
./Utilities/SetupForDevelopment.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;For more details see [[Documentation/Nightly/Developers/DevelopmentWithGit | Development With Git]].&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;On Windows enter the commands above in to a bash shell, such as Git Bash (part of msysgit).&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Configure the &amp;lt;code&amp;gt;git svn&amp;lt;/code&amp;gt; bridge to ensure the mapping with svn revision.&amp;lt;/p&amp;gt;&lt;br /&gt;
{{pre2|scroll|&lt;br /&gt;
cd Slicer&lt;br /&gt;
git svn init http://svn.slicer.org/Slicer4/trunk&lt;br /&gt;
git update-ref refs/remotes/git-svn refs/remotes/origin/master&lt;br /&gt;
git checkout master&lt;br /&gt;
git svn rebase&lt;br /&gt;
}}&lt;br /&gt;
   &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''If you plan to compile Slicer to develop your own extensions and test these extensions on Slicer releases, it is convenient to download the source code directly from SVN and specify the revision number corresponding to the release you want.''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.slicer.org/Slicer4/trunk Slicer-r23774 -r 23774&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  '''Release'''         '''SVN revision#'''&lt;br /&gt;
  4.5.0-1             24735&lt;br /&gt;
  4.4                 23774&lt;br /&gt;
  4.3.1               22599&lt;br /&gt;
  4.3.0               22408&lt;br /&gt;
&lt;br /&gt;
''More corresponding SVN revision numbers can be found [http://wiki.slicer.org/slicerWiki/index.php/Release_Details here] and [http://slicer.kitware.com/midas3/slicerpackages/view here]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Svn ===&lt;br /&gt;
&lt;br /&gt;
To simply build Slicer, getting the code using &amp;lt;code&amp;gt;svn&amp;lt;/code&amp;gt; is a more straight-forward approach.&lt;br /&gt;
&lt;br /&gt;
  svn co http://svn.slicer.org/Slicer4/trunk Slicer&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/DeveloperToolsForExtensions&amp;diff=43142</id>
		<title>Documentation/Nightly/Modules/DeveloperToolsForExtensions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/DeveloperToolsForExtensions&amp;diff=43142"/>
		<updated>2015-10-30T18:39:10Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/DeveloperToolsForExtensions|DeveloperToolsForExtensions]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.&amp;lt;br&amp;gt;&lt;br /&gt;
This tool extension exposes slicer features to help developers to test their own extensions&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|unc}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;fbudin@unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Website: https://github.com/fbudin69500/SlicerDeveloperToolsForExtensions.&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.apache.org/licenses/LICENSE-2.0.html Apache License, Version 2.0]&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UNC-NIRAL.png‎|NIRAL&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:SlicerExtension-DeveloperToolsForExtensions.png‎|Extension logo&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module currently presents two options to the user:&lt;br /&gt;
&lt;br /&gt;
-Installing an extension from an archive (*.tar.gz or *.zip) that is on the user's computer. This is useful if one wants to test that their extension has packaged correctly without uploading their extension onto the Midas server. Additionally, this can also be used by labs to distribute their extensions on their own website (uploading the extension archive directly on their website) and users can install these extensions using this module. It is also possible to install an extension package directly from the extension manager (from the toolbar).&lt;br /&gt;
&lt;br /&gt;
-Load a module that has not been loaded at the start-up of Slicer, while Slicer is running, without having to restart Slicer (limited to scripted python modules).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SlicerExtension-SlicerDeveloperToolsForExtensions-Screenshot.png|thumb|340px|Loading an extension archive]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|[[Image:SlicerExtensions-SlicerDeveloperToolsForExtensions-Screenshot-panels.png|thumb|280px|Module UI]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-developerinfo}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Developer Tools]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/DeveloperToolsForExtensions&amp;diff=43141</id>
		<title>Documentation/Nightly/Modules/DeveloperToolsForExtensions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/DeveloperToolsForExtensions&amp;diff=43141"/>
		<updated>2015-10-30T18:38:56Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/DeveloperToolsForExtensions|DeveloperToolsForExtensions]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.&amp;lt;br&amp;gt;&lt;br /&gt;
This tool extension exposes slicer features to help developers to test their own extensions&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|UNC}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;fbudin@unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Website: https://github.com/fbudin69500/SlicerDeveloperToolsForExtensions.&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.apache.org/licenses/LICENSE-2.0.html Apache License, Version 2.0]&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UNC-NIRAL.png‎|NIRAL&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:SlicerExtension-DeveloperToolsForExtensions.png‎|Extension logo&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module currently presents two options to the user:&lt;br /&gt;
&lt;br /&gt;
-Installing an extension from an archive (*.tar.gz or *.zip) that is on the user's computer. This is useful if one wants to test that their extension has packaged correctly without uploading their extension onto the Midas server. Additionally, this can also be used by labs to distribute their extensions on their own website (uploading the extension archive directly on their website) and users can install these extensions using this module. It is also possible to install an extension package directly from the extension manager (from the toolbar).&lt;br /&gt;
&lt;br /&gt;
-Load a module that has not been loaded at the start-up of Slicer, while Slicer is running, without having to restart Slicer (limited to scripted python modules).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SlicerExtension-SlicerDeveloperToolsForExtensions-Screenshot.png|thumb|340px|Loading an extension archive]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|[[Image:SlicerExtensions-SlicerDeveloperToolsForExtensions-Screenshot-panels.png|thumb|280px|Module UI]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-developerinfo}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Developer Tools]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DeveloperToolsForExtensions&amp;diff=43140</id>
		<title>Documentation/Nightly/Extensions/DeveloperToolsForExtensions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DeveloperToolsForExtensions&amp;diff=43140"/>
		<updated>2015-10-30T18:29:16Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/DeveloperToolsForExtensions|DeveloperToolsForExtensions]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.&amp;lt;br&amp;gt;&lt;br /&gt;
This tool extension exposes slicer features to help developers to test their own extensions&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|unc}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Jean-Christophe Fillion-Robin ({{collaborator|name|kitware}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor2: Andras Lasso (Department of Radiation Oncology, Massachusetts General Hospital)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;fbudin@unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Website: https://github.com/fbudin69500/SlicerDeveloperToolsForExtensions.&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.apache.org/licenses/LICENSE-2.0.html Apache License, Version 2.0]&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|niral}}|{{collaborator|longname|niral}}&lt;br /&gt;
|{{collaborator|logo|unc}}|{{collaborator|longname|unc}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
|{{collaborator|logo|kitware}}|{{collaborator|longname|kitware}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/extension-section|Modules}}&lt;br /&gt;
*[[Documentation/{{documentation/version}}/Modules/DeveloperToolsForExtensions|DeveloperToolsForExtensions]]&lt;br /&gt;
*[[Documentation/{{documentation/version}}/Modules/ExtensionStats|ExtensionStats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-developerinfo}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Segmentation]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42957</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42957"/>
		<updated>2015-10-12T21:46:18Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows the user to compute and apply transformations (registration) between two 3D models (VTK file). The registration can be computed using the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration) on each model, or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before fiducial registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Fiducial Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result after fiducial registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node that in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the transformation computed by the algorithm will be saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration computes a rigid, similarity, or affine transform from a matched list of fiducials using the SurfaceRegistration module. The algorithm needs the same number of fiducial in each list, and at least 3 fiducials per list. &amp;lt;br&amp;gt;&lt;br /&gt;
The 'add landmarks' section allows the user to add and move landmarks. Landmarks can be projected on the surfaces or not.&lt;br /&gt;
&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before Surface Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Surface Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result after Surface Registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the computed transformation is saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration computes a rigid, similarity, or affine transform to register two models using the Iterative Closest Point algorithm. This algorithm doesn't require the two models to have the same number of points.&lt;br /&gt;
&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before ROI (Region Of Interest) Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of ROI (Region Of Interest) Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result after ROI (Region Of Interest) Registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration computes a rigid, similarity, or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm doesn't require the regions of each model to have the same number of points.&lt;br /&gt;
The 'add landmarks' section allows user to define the regions of interest (ROIs) by positioning a landmark on a 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeters).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42956</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42956"/>
		<updated>2015-10-12T21:42:34Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* pictures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows user to compute and apply registrations between 3D models (VTK file). The user can either use the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration), or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before fiducial registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Fiducial Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result after fiducial registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node that in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the transformation computed by the algorithm will be saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity, or affine transform from a matched list of fiducials using the SurfaceRegistration module. The algorithm needs the same number of fiducial in each list, and at least 3 fiducials per list. &amp;lt;br&amp;gt;&lt;br /&gt;
The 'add landmarks' section allows the user to add and move landmarks. Landmarks can be projected on the surfaces or not.&lt;br /&gt;
&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before Surface Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Surface Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result after Surface Registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the computed transformation is saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration computes a rigid, similarity, or affine transform to register two models using the Iterative Closest Point algorithm. This algorithm doesn't require the two models to have the same number of points.&lt;br /&gt;
&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before ROI (Region Of Interest) Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of ROI (Region Of Interest) Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result after ROI (Region Of Interest) Registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two part of models to have the same number of points.&lt;br /&gt;
The add landmarks section will allow user to define the regions of interest (ROIs) by positioning a landmark on the 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeter).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42955</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42955"/>
		<updated>2015-10-12T21:42:14Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* pictures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows user to compute and apply registrations between 3D models (VTK file). The user can either use the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration), or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before fiducial registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Fiducial Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result after fiducial registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node that in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the transformation computed by the algorithm will be saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity, or affine transform from a matched list of fiducials using the SurfaceRegistration module. The algorithm needs the same number of fiducial in each list, and at least 3 fiducials per list. &amp;lt;br&amp;gt;&lt;br /&gt;
The 'add landmarks' section allows the user to add and move landmarks. Landmarks can be projected on the surfaces or not.&lt;br /&gt;
&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before Surface Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Surface Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result after Surface Registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the computed transformation is saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration computes a rigid, similarity, or affine transform to register two models using the Iterative Closest Point algorithm. This algorithm doesn't require the two models to have the same number of points.&lt;br /&gt;
&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before ROI (Region Of Interest) Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of ROI (Region Of Interest) Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result of ROI (Region Of Interest) Registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two part of models to have the same number of points.&lt;br /&gt;
The add landmarks section will allow user to define the regions of interest (ROIs) by positioning a landmark on the 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeter).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42954</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42954"/>
		<updated>2015-10-12T21:41:08Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows user to compute and apply registrations between 3D models (VTK file). The user can either use the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration), or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before fiducial registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Fiducial Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result after fiducial registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node that in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the transformation computed by the algorithm will be saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity, or affine transform from a matched list of fiducials using the SurfaceRegistration module. The algorithm needs the same number of fiducial in each list, and at least 3 fiducials per list. &amp;lt;br&amp;gt;&lt;br /&gt;
The 'add landmarks' section allows the user to add and move landmarks. Landmarks can be projected on the surfaces or not.&lt;br /&gt;
&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before Surface Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Surface Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result after Surface Registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the computed transformation is saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration computes a rigid, similarity, or affine transform to register two models using the Iterative Closest Point algorithm. This algorithm doesn't require the two models to have the same number of points.&lt;br /&gt;
&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result of the Region Of Interest registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two part of models to have the same number of points.&lt;br /&gt;
The add landmarks section will allow user to define the regions of interest (ROIs) by positioning a landmark on the 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeter).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42953</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42953"/>
		<updated>2015-10-12T21:40:43Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows user to compute and apply registrations between 3D models (VTK file). The user can either use the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration), or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before fiducial registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Fiducial Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result after fiducial registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node that in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the transformation computed by the algorithm will be saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity, or affine transform from a matched list of fiducials using the SurfaceRegistration module. The algorithm needs the same number of fiducial in each list, and at least 3 fiducials per list. &amp;lt;br&amp;gt;&lt;br /&gt;
The 'add landmarks' section allows the user to add and move landmarks. Landmarks can be projected on the surfaces or not.&lt;br /&gt;
&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before Surface Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Surface Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result after Surface Registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the computed transformation is saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity, or affine transform to register two models using the Iterative Closest Point algorithm. This algorithm doesn't require the two models to have the same number of points.&lt;br /&gt;
&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result of the Region Of Interest registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two part of models to have the same number of points.&lt;br /&gt;
The add landmarks section will allow user to define the regions of interest (ROIs) by positioning a landmark on the 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeter).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42952</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42952"/>
		<updated>2015-10-12T21:39:31Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows user to compute and apply registrations between 3D models (VTK file). The user can either use the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration), or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before fiducial registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Fiducial Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result after fiducial registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node that in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the transformation computed by the algorithm will be saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity, or affine transform from a matched list of fiducials using the SurfaceRegistration module. The algorithm needs the same number of fiducial in each list, and at least 3 fiducials per list. &amp;lt;br&amp;gt;&lt;br /&gt;
The 'add landmarks' section allows the user to add and move landmarks. Landmarks can be projected on the surfaces or not.&lt;br /&gt;
&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before Surface Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Surface Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result after Surface Registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the computed transformation is saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two models to have the same number of points.&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result of the Region Of Interest registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two part of models to have the same number of points.&lt;br /&gt;
The add landmarks section will allow user to define the regions of interest (ROIs) by positioning a landmark on the 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeter).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42951</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42951"/>
		<updated>2015-10-12T21:37:07Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* inputs/outputs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows user to compute and apply registrations between 3D models (VTK file). The user can either use the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration), or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before fiducial registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Fiducial Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result after fiducial registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node that in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the transformation computed by the algorithm will be saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched list of fiducials based on the SurfaceRegistration module, the algorithm need the same number of fiducials in each list, and at least 3 fiducials in each list. &amp;lt;br&amp;gt;&lt;br /&gt;
The add landmarks section will allow user to add and move landmarks either on the surface or not.&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before Surface Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Surface Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result after Surface Registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the computed transformation is saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two models to have the same number of points.&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result of the Region Of Interest registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two part of models to have the same number of points.&lt;br /&gt;
The add landmarks section will allow user to define the regions of interest (ROIs) by positioning a landmark on the 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeter).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42950</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42950"/>
		<updated>2015-10-12T21:35:49Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* pictures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows user to compute and apply registrations between 3D models (VTK file). The user can either use the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration), or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before fiducial registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Fiducial Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result after fiducial registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node that in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the transformation computed by the algorithm will be saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched list of fiducials based on the SurfaceRegistration module, the algorithm need the same number of fiducials in each list, and at least 3 fiducials in each list. &amp;lt;br&amp;gt;&lt;br /&gt;
The add landmarks section will allow user to add and move landmarks either on the surface or not.&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before Surface Registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Surface Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result after Surface Registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two models to have the same number of points.&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result of the Region Of Interest registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two part of models to have the same number of points.&lt;br /&gt;
The add landmarks section will allow user to define the regions of interest (ROIs) by positioning a landmark on the 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeter).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42949</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42949"/>
		<updated>2015-10-12T21:35:06Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* inputs/outputs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows user to compute and apply registrations between 3D models (VTK file). The user can either use the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration), or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before fiducial registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Fiducial Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result after fiducial registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered landmark list (fiducial list) associated with the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model node that in which the transformed moving model will be saved. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform node in which the transformation computed by the algorithm will be saved.&lt;br /&gt;
&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched list of fiducials based on the SurfaceRegistration module, the algorithm need the same number of fiducials in each list, and at least 3 fiducials in each list. &amp;lt;br&amp;gt;&lt;br /&gt;
The add landmarks section will allow user to add and move landmarks either on the surface or not.&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before the surface registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Interface of the surface registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result of the surface registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two models to have the same number of points.&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result of the Region Of Interest registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two part of models to have the same number of points.&lt;br /&gt;
The add landmarks section will allow user to define the regions of interest (ROIs) by positioning a landmark on the 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeter).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42948</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42948"/>
		<updated>2015-10-12T21:31:36Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* pictures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows user to compute and apply registrations between 3D models (VTK file). The user can either use the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration), or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before fiducial registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Fiducial Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result after fiducial registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched list of fiducials based on the SurfaceRegistration module, the algorithm need the same number of fiducials in each list, and at least 3 fiducials in each list. &amp;lt;br&amp;gt;&lt;br /&gt;
The add landmarks section will allow user to add and move landmarks either on the surface or not.&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before the surface registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Interface of the surface registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result of the surface registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two models to have the same number of points.&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result of the Region Of Interest registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two part of models to have the same number of points.&lt;br /&gt;
The add landmarks section will allow user to define the regions of interest (ROIs) by positioning a landmark on the 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeter).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42947</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42947"/>
		<updated>2015-10-12T21:30:57Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* pictures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows user to compute and apply registrations between 3D models (VTK file). The user can either use the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration), or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before fiducial registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Fiducial Registration Interface]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result of fiducial registration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched list of fiducials based on the SurfaceRegistration module, the algorithm need the same number of fiducials in each list, and at least 3 fiducials in each list. &amp;lt;br&amp;gt;&lt;br /&gt;
The add landmarks section will allow user to add and move landmarks either on the surface or not.&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before the surface registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Interface of the surface registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result of the surface registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two models to have the same number of points.&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result of the Region Of Interest registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two part of models to have the same number of points.&lt;br /&gt;
The add landmarks section will allow user to define the regions of interest (ROIs) by positioning a landmark on the 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeter).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42946</id>
		<title>Documentation/Nightly/Modules/SurfaceRegistration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/SurfaceRegistration&amp;diff=42946"/>
		<updated>2015-10-12T21:29:39Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/CMFreg|CMFreg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments: This work was supported by the National Institute of Dental &amp;amp; Craniofacial Research and the National Institute of Biomedical Imaging and Bioengineering under Award Number R01DE024450. The content is solely the responsibility of the authors and does not necessarily represent the official views of the National Institutes of Health.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Jean-Baptiste Vimort (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors: Francois Budin (UNC), Juan Carlos Prieto (UNC), Beatriz Paniagua (UNC), Lucia Cevidanes (University of Michigan)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Jean-Baptiste Vimort, &amp;lt;email&amp;gt;jvimort@umich.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:UofM-logo.png|University of Michigan&lt;br /&gt;
Image:Logo-namic.jpg‎|NAMIC&lt;br /&gt;
Image:UNC-logo.png|UNC&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module allows user to compute and apply registrations between 3D models (VTK file). The user can either use the entire mesh of both models (Surface Registration), just a region of interest (ROI Registration), or two fiducial lists which can be projected on the meshes (Fiducial Registration).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
==Fiducials Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationFR.png|thumb|400px|Before the fiducials registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRInterface.png|thumb|400px|Interface of the fiducials registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationFRResult.png|thumb|400px|Result of the fiducials registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: ordered list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: ordered list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched list of fiducials based on the SurfaceRegistration module, the algorithm need the same number of fiducials in each list, and at least 3 fiducials in each list. &amp;lt;br&amp;gt;&lt;br /&gt;
The add landmarks section will allow user to add and move landmarks either on the surface or not.&lt;br /&gt;
==Surface Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationSR.png|thumb|400px|Before the surface registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRInterface.png|thumb|400px|Interface of the surface registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationSRResult.png|thumb|400px|Result of the surface registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two models to have the same number of points.&lt;br /&gt;
==ROI Registration==&lt;br /&gt;
===pictures===&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:SurfaceRegistrationROIR.png|thumb|400px|Before the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRInterface.png|thumb|400px|Interface of the Region Of Interest registration]]&lt;br /&gt;
|[[Image:SurfaceRegistrationROIRResult.png|thumb|400px|Result of the Region Of Interest registration]]&lt;br /&gt;
|}&lt;br /&gt;
===inputs/outputs===&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Inputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that won't move. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Model'''&amp;lt;/span&amp;gt;: 3D model (vtk file) that will move.&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Fixed Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Moving Landmarks'''&amp;lt;/span&amp;gt;: list of landmarks associated to the Fixed Model. &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;'''Outputs'''&amp;lt;/span&amp;gt;: &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''Output model'''&amp;lt;/span&amp;gt;: 3D model that will save the result of the moving model after the transformation. &lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;'''output transform'''&amp;lt;/span&amp;gt;: linear transform that will save the transform compute by the algorithm.&lt;br /&gt;
===description===&lt;br /&gt;
The fiducial registration will compute a rigid, similarity or affine transform from a matched part of models based on the Iterative Closest Point algorithm. This algorithm don't necessitate that the two part of models to have the same number of points.&lt;br /&gt;
The add landmarks section will allow user to define the regions of interest (ROIs) by positioning a landmark on the 3D model and defining a radius for the region (the radius is defined in term of neighbors and not in millimeter).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code is available on [https://github.com/DCBIA-OrthoLab/CMFreg github]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/ShapeAnalysis]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/SlicerExecutionModel&amp;diff=42871</id>
		<title>Documentation/Nightly/Developers/SlicerExecutionModel</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/SlicerExecutionModel&amp;diff=42871"/>
		<updated>2015-10-07T16:11:08Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* XML Schema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Slicer Execution Model is designed to improve the acceptance and productivity of Slicer application developers. The Execution Model provides a simple mechanism for incorporating command line programs as Slicer modules. These command line modules are self-describing, emitting an XML description of its command line arguments. Slicer uses this XML description to construct a GUI for the module.&lt;br /&gt;
&lt;br /&gt;
=== Types of Slicer Plugins ===&lt;br /&gt;
&lt;br /&gt;
There are various types of plugins that Slicer supports as command line modules. This variety allows a breadth of integration choices to balance performance and flexibility.&lt;br /&gt;
&lt;br /&gt;
==== Shared object plugins (dll, so) with global symbols ====&lt;br /&gt;
&lt;br /&gt;
Shared object plugins with global symbols integrate into Slicer tighter than the Executable plugins.  Shared object plugins with global symbols can transfer data directly to/from a MRML scene using standard itk::ImageFileReader and itk::ImageFileWriter (and the ImageIO class provided with Slicer, itk::MRMLIDImageIO).  Communicating directly with the MRML scene avoids the overhead of reading and writing images to disk.  Slicer looks for a standard entry point to execute the module called ModuleEntryPoint defined as&lt;br /&gt;
&lt;br /&gt;
 int ModuleEntryPoint(int argc, char* argv[]);&lt;br /&gt;
&lt;br /&gt;
Slicer also looks for the global symbols XMLModuleDescription, ModuleLogoImage, ModuleLogoWidth, ModuleLogoHeight, ModuleLogoPixelSize, and ModuleLogoLength.  These global symbols provide the xml module description and data for the module logo. The data types for these symbols are&lt;br /&gt;
&lt;br /&gt;
          char *XMLModuleDescription;&lt;br /&gt;
 unsigned char *ModuleLogoImage;&lt;br /&gt;
           int  ModuleLogoWidth;&lt;br /&gt;
           int  ModuleLogoHeight;&lt;br /&gt;
           int  ModuleLogoPixelSize;&lt;br /&gt;
 unsigned long  ModuleLogoLength;&lt;br /&gt;
&lt;br /&gt;
These global symbols are accessed during module discovery. The ModuleLogoImage, ModuleLogoWidth, ModuleLogoHeight, ModuleLogoPixelSize, and ModuleLogoLength are optional.&lt;br /&gt;
&lt;br /&gt;
=====Controlling what symbols are exported from a shared library module=====&lt;br /&gt;
&lt;br /&gt;
Shared Object Modules are loaded into Slicer using standard &amp;quot;dlopen&amp;quot; style calls. The ModuleEntryPoint is located within the shared library and cached for later use. The ModuleEntryPoint, however, may not be the only function accessible to Slicer within the shared library. To protect against symbol clash at runtime, all functions and variables accessible within file scope of the shared library should be put in an anonymous namespace.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Use an anonymous namespace to keep class types and function names&lt;br /&gt;
// from colliding when module is used as shared object module.  Every&lt;br /&gt;
// thing should be in an anonymous namespace except for the module&lt;br /&gt;
// entry point, e.g. main() or ModuleEntryPoint()&lt;br /&gt;
//&lt;br /&gt;
namespace {&lt;br /&gt;
    // functions like DoIt() should be put in the anonymous namespace&lt;br /&gt;
    template&amp;lt;class T&amp;gt; int DoIt( int argc, char * argv[], const T&amp;amp; targ)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
} // end of anonymous namespace&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[] )&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Shared object plugins (dll, so) with entry points ====&lt;br /&gt;
&lt;br /&gt;
Shared object plugins with entry points integrate into Slicer tighter than the Executable plugins. Shared object plugins with entry points can transfer data directly to/from a MRML scene using standard itk::ImageFileReader and itk::ImageFileWriter (and the ImageIO class provided with Slicer, itk::MRMLIDImageIO). Communicating directly with the MRML scene avoids the overhead of reading and writing images to disk. Slicer looks for standard entry points for executing the module as well as for querying the module for its xml description and logos. The entry points are defined as&lt;br /&gt;
&lt;br /&gt;
           int  ModuleEntryPoint(int argc, char* argv[]);&lt;br /&gt;
          char *GetXMLModuleDescription();&lt;br /&gt;
 unsigned char *GetModuleLogo()(int *width, int *height, int *pixel_size, unsigned long *bufferLength);&lt;br /&gt;
&lt;br /&gt;
GetXMLModuleDescription() and GetModuleLogo() are accessed during module discovery. GetModuleLogo() is optional.&lt;br /&gt;
&lt;br /&gt;
==== Executable plugins with global symbols ====&lt;br /&gt;
&lt;br /&gt;
Executable plugins with global symbols allow for a single executable to be developed that can be integrated into Slicer 3 or run standalone on a cluster. Plugins of this type are opened but not executed at module discovery time.  Slicer 3 looks for the global symbols XMLModuleDescription, ModuleLogoImage, ModuleLogoWidth, ModuleLogoHeight, ModuleLogoPixelSize, and ModuleLogoLength.  The data types for these symbols are&lt;br /&gt;
 &lt;br /&gt;
          char *XMLModuleDescription;&lt;br /&gt;
 unsigned char *ModuleLogoImage;&lt;br /&gt;
           int  ModuleLogoWidth;&lt;br /&gt;
           int  ModuleLogoHeight;&lt;br /&gt;
           int  ModuleLogoPixelSize;&lt;br /&gt;
 unsigned long  ModuleLogoLength;&lt;br /&gt;
&lt;br /&gt;
These global symbols are access during module discovery. ModuleLogoImage, ModuleLogoWidth, ModuleLogoHeight, ModuleLogoPixelSize, ModuleLogoLength are optional.&lt;br /&gt;
&lt;br /&gt;
==== Executable plugins (exe) with command line options ====&lt;br /&gt;
&lt;br /&gt;
Executable plugins with command line options are the most flexible type of plugin. This approach allows for legacy applications to be integrated into Slicer using a wrapper around the legacy application.  Plugins of this type are executed at module discovery time, passing in the command line argument &amp;quot;--xml&amp;quot;. The plugin responds to the &amp;quot;--xml&amp;quot; query by emitting the xml description of the module. The plugin is also executed at module discovery time with a &amp;quot;--logo&amp;quot; command line argument. The plugin responds to the &amp;quot;--logo&amp;quot; query by emitting a logo description. &lt;br /&gt;
&lt;br /&gt;
This type of plugin allows for legacy applications to be integrated into Slicer. A developer can provide Slicer with a small executable or shell script that responds to the &amp;quot;--xml&amp;quot; and &amp;quot;--logo&amp;quot; command line arguments needed for Slicer 3 integration and otherwise spawns the legacy executable passing down any command line arguments.&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; module.exe --xml&lt;br /&gt;
 &amp;gt; module.exe --logo&lt;br /&gt;
&lt;br /&gt;
==== Script plugins with Python ====&lt;br /&gt;
&lt;br /&gt;
Python scripts are found using the discovery mechanisms for the other plugins. Since Python plugins are fundamentally different from the shared and executable plugins, they are documented on their own [[Documentation/Nightly/Developers/SlicerExecutionModel/Python|page]].&lt;br /&gt;
&lt;br /&gt;
=== Calling Command Line Modules from Other Code ===&lt;br /&gt;
&lt;br /&gt;
In addition to the automated GUI that shows up in the Slicer user interface, the Execution Model can be used to encapsulate functionality that is invoked by other parts of the program.  For instance, the Editor Module can invoke the Model Maker Module to build models.  By invoking a command line module in this way, you get the advantage of background processing with progress reporting.  See [[Documentation/Nightly/Developers/SlicerExecutionModel/Programmatic Invocation|this page]] for more details.&lt;br /&gt;
&lt;br /&gt;
=== Architecture === &lt;br /&gt;
[[Image:ExecutionModelPlugins.png|600px|Plugin architecture]]&lt;br /&gt;
[[Image:CommandLineModule.png|400px|Module architecture]]&lt;br /&gt;
[[Image:ModuleFactory.png|400px|Module factory ]]&lt;br /&gt;
[[Image:Class_parser_state_coll_graph.png|400px|Module description]]&lt;br /&gt;
&lt;br /&gt;
== Module Description ==&lt;br /&gt;
&lt;br /&gt;
Modules are described using XML. The XML is used to generate the C++ command line code and the GUI for the application.&lt;br /&gt;
&lt;br /&gt;
=== XML Schema ===&lt;br /&gt;
&lt;br /&gt;
At a minimum, each module description must contain:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;executable&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;A title&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;description&amp;gt;A description&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
   At least one parameter&lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &amp;lt;/executable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the following descriptions of each XML tag, CLP means command line processing and GUI means graphical user interface. Unless otherwise specified, tags are optional.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;executable&amp;gt; (required)&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;category&amp;gt;&lt;br /&gt;
:: Classifies the executable (e.g. Filtering, Segmentation). Category can be a ''dot'' separated string. Multiple categories can be given and should be separated by a ''semicolon''.&lt;br /&gt;
:: ''for CLP'', not used.&lt;br /&gt;
:: ''for GUI'', used on the menu selector to group executables. ''Dot'' separated strings can be used to generate sub-menus. ''Semicolon'' separated strings can be used to create multiple categories.&lt;br /&gt;
;; &amp;lt;/category&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;title&amp;gt; (required)&lt;br /&gt;
:: A word or two describing the executable (e.g. Median Filter, Anisotropic Diffusion&lt;br /&gt;
:: ''for CLP'', not used.&lt;br /&gt;
:: ''for GUI'', used to label the frame containing the GUI for the executable. Also, GUI names for volumes use this label as a prefix.&lt;br /&gt;
;; &amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;description&amp;gt; (required)&lt;br /&gt;
:: A long description of the executable. Any double quotes will be converted to single quotes.&lt;br /&gt;
:: ''for CLP'', appears at the end of the --help.&lt;br /&gt;
:: ''for GUI'', appears in the help frame.&lt;br /&gt;
;; &amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;version&amp;gt;&lt;br /&gt;
:: The version of the command line executable. A suggested format is:&lt;br /&gt;
::: ''major''.''minor''.''patch''.''build''.''status''&lt;br /&gt;
::: where status is&lt;br /&gt;
:::: vc: version controlled (pre-alpha), build can be a serial revision number, if any (like svn might have).&lt;br /&gt;
:::: a: alpha&lt;br /&gt;
:::: b: beta&lt;br /&gt;
:::: rc: release candidate&lt;br /&gt;
:::: fcs: first customer ship&lt;br /&gt;
:: ''for CLP'', reported in response to --version.&lt;br /&gt;
:: ''for GUI'', not used.&lt;br /&gt;
;; &amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;documentation-url&amp;gt;&lt;br /&gt;
:: The location of extended documentation for the executable, (e.g. http://www.na-mic.org/foo.html).&lt;br /&gt;
;; &amp;lt;/documentation-url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;license&amp;gt;&lt;br /&gt;
:: The type of license or a url containing the license, (e.g. Berkeley, Apache, http://www.slicer.org/copyright/copyright.txt).&lt;br /&gt;
:: ''for CLP'', not used.&lt;br /&gt;
:: ''for GUI'', may show up in the Help or About section.&lt;br /&gt;
;; &amp;lt;/license&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;contributor&amp;gt;&lt;br /&gt;
:: The author(s) of the command line executable (e.g. Pieper, Jim Miller).&lt;br /&gt;
:: for ''CLP'', appears as part of --help&lt;br /&gt;
:: for ''GUI'', may show up in the Help or About section.&lt;br /&gt;
;; &amp;lt;/contributor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;acknowledgements&amp;gt;&lt;br /&gt;
:: Acknowledgements for funding agency, employer, colleague, (e.g. This work is part of the National Alliance for Medical Image Computing NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149).&lt;br /&gt;
:: for ''CLP'', appears as part of --help&lt;br /&gt;
:: for ''GUI'', may show up in the Help of About section.&lt;br /&gt;
;; &amp;lt;/acknowledgements&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;parameters [advanced=&amp;quot;true|''false''&amp;quot;]&amp;gt; (required for each group of parameters)&lt;br /&gt;
:: Starts a group of parameters.&lt;br /&gt;
:: for ''CLP'', not used.&lt;br /&gt;
:: for ''GUI'', defines a widget (in tk, a frame) that contains other widgets. If ''advanced'' is true, the frame will be closed initially.&lt;br /&gt;
&lt;br /&gt;
;;; &amp;lt;label&amp;gt; (required)&lt;br /&gt;
::: A short string that summarizes a parameter group, (e.g. I/O, Diffusion)&lt;br /&gt;
::: for ''CLP'', not used.&lt;br /&gt;
::: for ''GUI'', used to label the frame.&lt;br /&gt;
;;; &amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;; &amp;lt;description&amp;gt; (required)&lt;br /&gt;
::: A short description of the parameter group, (e.g. Input/Output Parameters, Anitostropic Diffusion Parameters). Any double quotes will be converted to single quotes.&lt;br /&gt;
::: ''for CLP'', not used.&lt;br /&gt;
::: ''for GUI'', used in balloon help for the frame containing the parameter group.&lt;br /&gt;
;;; &amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;; &amp;lt;integer&amp;gt; | &amp;lt;float&amp;gt; | &amp;lt;double&amp;gt; | &amp;lt;boolean&amp;gt; | &amp;lt;string&amp;gt; | &amp;lt;integer-vector&amp;gt; | &amp;lt;float-vector&amp;gt; | &amp;lt;double-vector&amp;gt; | &amp;lt;string-vector&amp;gt; | &amp;lt;integer-enumeration&amp;gt; | &amp;lt;float-enumeration&amp;gt; | &amp;lt;double-enumeration&amp;gt; | &amp;lt;string-enumeration&amp;gt; | &amp;lt;file&amp;gt; | &amp;lt;directory&amp;gt; | &amp;lt;image [type=&amp;quot;''scalar''|''label''|''tensor''|''diffusion-weighted''|''vector''|''model''&amp;quot;]&amp;gt; | &amp;lt;geometry [type=&amp;quot;''fiberbundle''|''model''&amp;quot;]&amp;gt; | &amp;lt;point [multiple=&amp;quot;''true''|''false''&amp;quot;] [coordinateSystem=&amp;quot;''lps''|''ras''|''ijk''&amp;quot;]&amp;gt; | &amp;lt;region [multiple=&amp;quot;''true''|''false''&amp;quot;] [coordinateSystem=&amp;quot;''lps''|''ras''|''ijk''&amp;quot;]&amp;gt;&lt;br /&gt;
::: The type of the parameter. &lt;br /&gt;
:::: The scalar types ('''integer''', '''float''', etc.) correspond to the usual programming language types. &lt;br /&gt;
:::: The '''-vector''' types are represented by comma separated values of the scalar type. &lt;br /&gt;
:::: The '''-enumeration''' types use the '''&amp;lt;element&amp;gt;''' tag to enumerate choices of the scalar type. &lt;br /&gt;
:::: '''&amp;lt;image&amp;gt;''' is a special type that indicates that the parameter is a file name that specifies images. &lt;br /&gt;
:::: If the attribute ''multiple'' is &amp;quot;true&amp;quot;, multiple arguments are allowed for '''scalar''', '''file''', '''directory''', '''image''', '''geometry''', '''point''' and '''region''' parameters. BUG: the automatically built GUI will not support selecting multiple volumes for the '''image''' argument, but they can be passed on the command line. If the parameter has a ''flag'' or ''longflag'', then the flag may be specified multiple times on the command line. The resulting C++ variable will be a std::vector of the scalar type. If the multiple parameter does not have a flag, then multiple arguments can appear on the command line. However, a multiple parameter with no flags must be the last parameter specified.&lt;br /&gt;
:::: The attribute ''coordinateSystem'' is allowed for the parameters '''point''' and '''region'''. &lt;br /&gt;
:::: The attribute ''fileExtensions'' is allowed for '''file''', '''image''' and '''geometry'''. fileExtensions can contain a list of comma separated file extensions for optional use by the GUI. &lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;name&amp;gt; (required if longflag is not specified)&lt;br /&gt;
:::: The name of a command line argument. If name is not specified, longflag will be used (e.g. conductance, numberOfIterations). The name must be usable as a C++ variable. For example, it CANNOT have spaces or special characters and must start with a letter.&lt;br /&gt;
:::: ''for CLP'', the name of the C++ variable.&lt;br /&gt;
:::: ''for GUI'', used internally.&lt;br /&gt;
;;;; &amp;lt;/name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;description&amp;gt; (required)&lt;br /&gt;
:::: A brief description of the parameter. Any double quotes will be converted to single quotes.&lt;br /&gt;
:::: ''for CLP'', describes the parameter for --usage and --help.&lt;br /&gt;
:::: ''for GUI'', describes the parameter when the cursor is placed over the widget for the parameter (balloon help).&lt;br /&gt;
;;;; &amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;label&amp;gt; (required)&lt;br /&gt;
:::: A label for parameter (e.g. Dicom Directory, Conductance).&lt;br /&gt;
:::: ''for'' CLP, not used.&lt;br /&gt;
:::: ''for'' GUI, the label for the parameter widget.&lt;br /&gt;
;;;; &amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;default&amp;gt;&lt;br /&gt;
:::: A default value for the parameter. The default must be a type that is compatible with the parameter type. The vector parameters are specified as comma separated values of the atomic parameter type.&lt;br /&gt;
:::: ''for CLP'', contains the default for the parameter unless the parameter is a ''boolean''. The default for ''boolean'' parameters is always set to ''false''.&lt;br /&gt;
:::: ''for GUI'', contains the default for the parameter.&lt;br /&gt;
;;;; &amp;lt;/default&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;flag [alias=&amp;quot;a,b&amp;quot;] [deprecatedalias=&amp;quot;c,d&amp;quot;]&amp;gt; (not required if longflag is present)&lt;br /&gt;
:::: A single character command line flag (e.g. s, W). Can provide &amp;quot;alias&amp;quot;'s (comma separated) if different flags can be used to activate the same parameter.  Can provide &amp;quot;deprecatedalias&amp;quot;'s (comma separated) if different flags can be used to set the same parameter but the user should be notified of which &amp;quot;updated&amp;quot; flag to use. Parameters with flags are considered &amp;quot;optional&amp;quot; and do not have be specified or assigned.  Parameters with flags allow one to override a default behavior.&lt;br /&gt;
:::: ''for CLP'', used as the short flag on the command line.&lt;br /&gt;
:::: ''for GUI'', used when running the module.&lt;br /&gt;
;;;; &amp;lt;/flag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;longflag [alias=&amp;quot;foo,bar&amp;quot;] [deprecatedalias=&amp;quot;garf&amp;quot;]&amp;gt; (not required if flag is present)&lt;br /&gt;
:::: A command line flag (e.g. spacing, Watcher). Can provide &amp;quot;alias&amp;quot;'s (comma separated) if different long flags can be used to activate the same parameter.  Can provide &amp;quot;deprecatedalias&amp;quot;'s (comma separated) if different long flags can be used to set the same parameter but the user should be notified of which &amp;quot;updated&amp;quot; long flag to use. Parameters with flags are considered &amp;quot;optional&amp;quot; and do not have be specified or assigned.  Parameters with flags allow one to override a default behavior.&lt;br /&gt;
:::: Note: apparently you can't use hyphens in the longflag, so things like --my-option are not allows.  -gcs&lt;br /&gt;
:::: ''for CLP'', used as the long flag on the command line.&lt;br /&gt;
:::: ''for GUI'', used when running the module.&lt;br /&gt;
;;;; &amp;lt;/longflag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;constraints&amp;gt;&lt;br /&gt;
:::: Encloses constraints on the value of a non-vector, non-enumerated parameter.&lt;br /&gt;
:::: ''for CLP'', not used.&lt;br /&gt;
:::: ''for GUI'', if present, a slider will be created using the minimum, maximum and step specified.&lt;br /&gt;
&lt;br /&gt;
;;;;; &amp;lt;minimum&amp;gt;&lt;br /&gt;
::::: The minimum allowed value for the parameter. If not specified, the minimum is the smallest possible value for the parameter type.&lt;br /&gt;
;;;;; &amp;lt;/minimum&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;;; &amp;lt;maximum&amp;gt;&lt;br /&gt;
::::: The maximum allowed value for the parameter. If not specified, the maximum is the largest possible value for the parameter type.&lt;br /&gt;
;;;;; &amp;lt;/maximum&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;;; &amp;lt;step&amp;gt;&lt;br /&gt;
::::: The increment for the parameter.&lt;br /&gt;
;;;;; &amp;lt;/step&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;/constraints&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;channel&amp;gt; (required for file, directory and image parameters)&lt;br /&gt;
:::: Specifies whether the parameter is an input or output parameter.&lt;br /&gt;
:::: ''for CLP'', not used.&lt;br /&gt;
:::: ''for GUI'', selects the proper widget for file handling.&lt;br /&gt;
;;;; &amp;lt;/channel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;index&amp;gt; (required if there are no flags specified)&lt;br /&gt;
:::: An integer starting at 0, that specifies a command line argument that has no flags.&lt;br /&gt;
:::: Note: if you use index for, say, an image, the user must enter some input value into the GUI.  If the user does not fill in a value, the plugin is not run at all.  However, slicer will &amp;quot;seem&amp;quot; to run it, and no error message is given.  -gcs&lt;br /&gt;
:::: ''for CLP'', specifies the order of an argument that has no flags.&lt;br /&gt;
:::: ''for GUI'', used when running the module.&lt;br /&gt;
;;;; &amp;lt;/index&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;enumeration&amp;gt; (required for enumeration parameters)&lt;br /&gt;
:::: Encloses elements for the parameter. The parameter is restricted one and only one element.&lt;br /&gt;
:::: ''for CLP'', not used.&lt;br /&gt;
:::: ''for GUI'', defines a radio button with choices.&lt;br /&gt;
&lt;br /&gt;
;;;;; &amp;lt;element&amp;gt;&lt;br /&gt;
::::: Defines the choice. Must be of the proper type for a parameter.&lt;br /&gt;
::::: ''for CLP'', not used.&lt;br /&gt;
::::: ''for GUI'', used as the label for the raido button.&lt;br /&gt;
;;;;; &amp;lt;/element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;/enumeration&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;; &amp;lt;/integer&amp;gt; | &amp;lt;/float&amp;gt; | &amp;lt;/double&amp;gt; | &amp;lt;/boolean&amp;gt; | &amp;lt;/string&amp;gt; | &amp;lt;/integer-vector&amp;gt; | &amp;lt;/float-vector&amp;gt; | &amp;lt;/double-vector&amp;gt; | &amp;lt;/string-vector&amp;gt; | &amp;lt;/integer-enumeration&amp;gt; | &amp;lt;/float-enumeration&amp;gt; | &amp;lt;/double-enumeration&amp;gt; | &amp;lt;/string-enumeration&amp;gt; | &amp;lt;/file&amp;gt; | &amp;lt;/directory&amp;gt; | &amp;lt;/image&amp;gt; | &amp;lt;/geometry&amp;gt; | &amp;lt;/point&amp;gt; | &amp;lt;/region&amp;gt;&lt;br /&gt;
;; &amp;lt;/parameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;/executable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Slicer GUI Generation ==&lt;br /&gt;
&lt;br /&gt;
Slicer generates GUI's for each executable discovered during the startup process. Slicer searches directories stored in the Slicer Module Path. This path is set from the Slicer application in View-&amp;gt;Application Settings-&amp;gt;Modules-&amp;gt;Additional module paths. Slicer attempts to run every executable in the prescribed directories and look for a valid XML file in response to a &amp;quot;--xml&amp;quot; command line.&lt;br /&gt;
&lt;br /&gt;
Here are a few representative examples.&lt;br /&gt;
&lt;br /&gt;
=== A tour of the Execution Model XML ===&lt;br /&gt;
&lt;br /&gt;
This example is a sampler of the parameters available in the Execution Model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[[Image:ExectionModelTourGUI.png|[[Image:ExectionModelTourGUI.png]]]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;executable&amp;gt;&lt;br /&gt;
   &amp;lt;category&amp;gt;Tours&amp;lt;/category&amp;gt;&lt;br /&gt;
   &amp;lt;title&amp;gt;Execution Model Tour&amp;lt;/title&amp;gt;&lt;br /&gt;
   &amp;lt;description&amp;gt;&lt;br /&gt;
   Shows one of each type of parameter.&lt;br /&gt;
   &amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;
   &amp;lt;documentation-url&amp;gt;&amp;lt;/documentation-url&amp;gt;&lt;br /&gt;
   &amp;lt;license&amp;gt;&amp;lt;/license&amp;gt;&lt;br /&gt;
   &amp;lt;contributor&amp;gt;Daniel Blezek&amp;lt;/contributor&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Scalar Parameters&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;&lt;br /&gt;
     Variations on scalar parameters&lt;br /&gt;
     &amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;integer&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;integerVariable&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;flag&amp;gt;i&amp;lt;/flag&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;integer&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;&lt;br /&gt;
       An integer without constraints&lt;br /&gt;
       &amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Integer Parameter&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;30&amp;lt;/default&amp;gt;&lt;br /&gt;
     &amp;lt;/integer&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Scalar Parameters With Constraints&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Variations on scalar parameters&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;double&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;doubleVariable&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;flag&amp;gt;d&amp;lt;/flag&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;double&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;An double with constraints&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Double Parameter&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;30&amp;lt;/default&amp;gt;&lt;br /&gt;
       &amp;lt;constraints&amp;gt;&lt;br /&gt;
         &amp;lt;minimum&amp;gt;0&amp;lt;/minimum&amp;gt;&lt;br /&gt;
         &amp;lt;maximum&amp;gt;1.e3&amp;lt;/maximum&amp;gt;&lt;br /&gt;
         &amp;lt;step&amp;gt;0&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;/constraints&amp;gt;&lt;br /&gt;
     &amp;lt;/double&amp;gt;&lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Vector Parameters&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Variations on vector parameters&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;float-vector&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;floatVector&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;flag&amp;gt;f&amp;lt;/flag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;A vector of floats&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Float Vector Parameter&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;1.3,2,-14&amp;lt;/default&amp;gt;&lt;br /&gt;
     &amp;lt;/float-vector&amp;gt;&lt;br /&gt;
     &amp;lt;string-vector&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;stringVector&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;string_vector&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;A vector of strings&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;String Vector Parameter&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;&amp;quot;foo&amp;quot;,bar,&amp;quot;foobar&amp;quot;&amp;lt;/default&amp;gt;&lt;br /&gt;
     &amp;lt;/string-vector&amp;gt;&lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Enumeration Parameters&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Variations on enumeration parameters&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;string-enumeration&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;stringChoice&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;flag&amp;gt;e&amp;lt;/flag&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;enumeration&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;An enumeration of strings&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;String Enumeration Parameter&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;foo&amp;lt;/default&amp;gt;&lt;br /&gt;
       &amp;lt;element&amp;gt;foo&amp;lt;/element&amp;gt;&lt;br /&gt;
       &amp;lt;element&amp;gt;&amp;quot;foobar&amp;quot;&amp;lt;/element&amp;gt;&lt;br /&gt;
       &amp;lt;element&amp;gt;foofoo&amp;lt;/element&amp;gt;&lt;br /&gt;
     &amp;lt;/string-enumeration&amp;gt;&lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &amp;lt;/executable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Module with an integer-vector, one input image and one output image ===&lt;br /&gt;
&lt;br /&gt;
Here is the XML that describes the MedianImageFilter. The image on the right shows the generated Slicer 3 GUI. The help frame has been expanded by the user.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[[Image:MedianFilterGUI.png|[[Image:MedianFilterGUI.png]]]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;executable&amp;gt;&lt;br /&gt;
  &amp;lt;category&amp;gt;&lt;br /&gt;
  Filtering.Denoising&lt;br /&gt;
  &amp;lt;/category&amp;gt;&lt;br /&gt;
  &amp;lt;title&amp;gt;&lt;br /&gt;
  Median Filter&lt;br /&gt;
  &amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;description&amp;gt;&lt;br /&gt;
The MedianImageFilter is commonly used as a robust approach for&lt;br /&gt;
noise reduction. This filter is particularly efficient against&lt;br /&gt;
&amp;quot;salt-and-pepper&amp;quot; noise. In other words, it is robust to the presence&lt;br /&gt;
of gray-level outliers. MedianImageFilter computes the value of each output&lt;br /&gt;
pixel as the statistical median of the neighborhood of values around the&lt;br /&gt;
corresponding input pixel.&lt;br /&gt;
  &amp;lt;/description&amp;gt;&lt;br /&gt;
  &amp;lt;version&amp;gt;0.1.0.$Revision: 2085 $(alpha)&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;documentation-url&amp;gt;&amp;lt;/documentation-url&amp;gt;&lt;br /&gt;
  &amp;lt;license&amp;gt;&amp;lt;/license&amp;gt;&lt;br /&gt;
  &amp;lt;contributor&amp;gt;Bill Lorensen&amp;lt;/contributor&amp;gt;&lt;br /&gt;
  &amp;lt;acknowledgements&amp;gt;This command module was derived from&lt;br /&gt;
Insight/Examples/Filtering/MedianImageFilter (copyright) Insight Software Consortium&lt;br /&gt;
  &amp;lt;/acknowledgements&amp;gt;&lt;br /&gt;
  &amp;lt;parameters&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;Median Filter Parameters&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Parameters for the median filter&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;integer-vector&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;neighborhood&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;longflag&amp;gt;--neighborhood&amp;lt;/longflag&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;The size of the neighborhood in each dimension&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Neighborhood Size&amp;lt;/label&amp;gt;&lt;br /&gt;
      &amp;lt;default&amp;gt;1,1,1&amp;lt;/default&amp;gt;&lt;br /&gt;
    &amp;lt;/integer-vector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/parameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;parameters&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;IO&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Input/output parameters&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;image&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;inputVolume&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Input Volume&amp;lt;/label&amp;gt;&lt;br /&gt;
      &amp;lt;channel&amp;gt;input&amp;lt;/channel&amp;gt;&lt;br /&gt;
      &amp;lt;index&amp;gt;0&amp;lt;/index&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;Input volume to be filtered&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;/image&amp;gt;&lt;br /&gt;
    &amp;lt;image&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;outputVolume&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Output Volume&amp;lt;/label&amp;gt;&lt;br /&gt;
      &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
      &amp;lt;index&amp;gt;1&amp;lt;/index&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;Output filtered&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;/image&amp;gt;&lt;br /&gt;
  &amp;lt;/parameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/executable&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Module with a multiple scalars, one Input image and one output image ===&lt;br /&gt;
&lt;br /&gt;
A module with&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[[Image:AnisotropicDiffusionFilterGUI.png|[[Image:AnisotropicDiffusionFilterGUI.png]]]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;executable&amp;gt;&lt;br /&gt;
   &amp;lt;category&amp;gt;filtering&amp;lt;/category&amp;gt;&lt;br /&gt;
   &amp;lt;title&amp;gt;Anisotropic Diffusion&amp;lt;/title&amp;gt;&lt;br /&gt;
   &amp;lt;description&amp;gt;&lt;br /&gt;
   Runs anisotropic diffusion on a volume&lt;br /&gt;
   &amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;
   &amp;lt;documentation-url&amp;gt;&amp;lt;/documentation-url&amp;gt;&lt;br /&gt;
   &amp;lt;license&amp;gt;&amp;lt;/license&amp;gt;&lt;br /&gt;
   &amp;lt;contributor&amp;gt;Bill Lorensen&amp;lt;/contributor&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;&lt;br /&gt;
     Anisotropic Diffusion Parameters&lt;br /&gt;
     &amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;&lt;br /&gt;
     Parameters for the anisotropic&lt;br /&gt;
     diffusion algorithm&lt;br /&gt;
     &amp;lt;/description&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;double&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;conductance&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;conductance&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Conductance&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Conductance&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;1&amp;lt;/default&amp;gt;&lt;br /&gt;
       &amp;lt;constraints&amp;gt;&lt;br /&gt;
         &amp;lt;minimum&amp;gt;0&amp;lt;/minimum&amp;gt;&lt;br /&gt;
         &amp;lt;maximum&amp;gt;10&amp;lt;/maximum&amp;gt;&lt;br /&gt;
         &amp;lt;step&amp;gt;.01&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;/constraints&amp;gt;&lt;br /&gt;
     &amp;lt;/double&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;double&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;timeStep&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;timeStep&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Time Step&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Time Step&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;0.0625&amp;lt;/default&amp;gt;&lt;br /&gt;
       &amp;lt;constraints&amp;gt;&lt;br /&gt;
         &amp;lt;minimum&amp;gt;.001&amp;lt;/minimum&amp;gt;&lt;br /&gt;
         &amp;lt;maximum&amp;gt;1&amp;lt;/maximum&amp;gt;&lt;br /&gt;
         &amp;lt;step&amp;gt;.001&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;/constraints&amp;gt;&lt;br /&gt;
     &amp;lt;/double&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;integer&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;numberOfIterations&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;iterations&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Number of iterations&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Iterations&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;1&amp;lt;/default&amp;gt;&lt;br /&gt;
       &amp;lt;constraints&amp;gt;&lt;br /&gt;
         &amp;lt;minimum&amp;gt;1&amp;lt;/minimum&amp;gt;&lt;br /&gt;
         &amp;lt;maximum&amp;gt;30&amp;lt;/maximum&amp;gt;&lt;br /&gt;
         &amp;lt;step&amp;gt;1&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;/constraints&amp;gt;&lt;br /&gt;
     &amp;lt;/integer&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;IO&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Input/output parameters&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;image&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;inputVolume&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Input Volume&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;channel&amp;gt;input&amp;lt;/channel&amp;gt;&lt;br /&gt;
       &amp;lt;index&amp;gt;0&amp;lt;/index&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Input volume to be filtered&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;/image&amp;gt;&lt;br /&gt;
     &amp;lt;image&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;outputVolume&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Output Volume&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
       &amp;lt;index&amp;gt;1&amp;lt;/index&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Output filtered&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;/image&amp;gt;&lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/executable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Module with output text presented in GUI ===&lt;br /&gt;
&lt;br /&gt;
Slicer auto generates GUI to display output from the command line module after execution is complete.&lt;br /&gt;
The flag [--returnparameterfile &amp;lt;file name&amp;gt;] is used to provide a name of a file that the module uses to store key=value pairs that are displayed in the Slicer GUI. The keys are described in the command line module xml schema using the output channel.&lt;br /&gt;
&lt;br /&gt;
This example demonstrates a portion of an XML schema containing  1 string-enumeration input and 7 string outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[[Image:RadnosticsBetaOsteoporosisAnalysisGUI.png|[[Image:RadnosticsBetaOsteoporosisAnalysisGUI.png]]]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;parameters&amp;gt;&lt;br /&gt;
   &amp;lt;label&amp;gt;Radnostics Beta Osteoporosis Analysis&amp;lt;/label&amp;gt;&lt;br /&gt;
   &amp;lt;string-enumeration&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;Osteoporosis&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;longflag&amp;gt;--osteoporosis&amp;lt;/longflag&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;After Segmentation Perform Osteoporosis Analysis&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Osteoporosis Analysis will provide a Radnostics Osteoporosis score for the patient.&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;default&amp;gt;yes&amp;lt;/default&amp;gt;&lt;br /&gt;
     &amp;lt;element&amp;gt;yes&amp;lt;/element&amp;gt;&lt;br /&gt;
     &amp;lt;element&amp;gt;no&amp;lt;/element&amp;gt;&lt;br /&gt;
   &amp;lt;/string-enumeration&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;PatientGender&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Gender&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Patient Gender&amp;lt;/description&amp;gt;		  &lt;br /&gt;
     &amp;lt;default&amp;gt;na&amp;lt;/default&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;		&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;PatientAge&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Age&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Patient Age&amp;lt;/description&amp;gt;		  &lt;br /&gt;
     &amp;lt;default&amp;gt;na&amp;lt;/default&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;		&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;RadnosticsOsteoporosisScore&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Radnostics Osteoporosis Score&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Radnostics Osteoporosis Score&amp;lt;/description&amp;gt;		  &lt;br /&gt;
     &amp;lt;default&amp;gt;na&amp;lt;/default&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;		&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;OsteoporosisComment1&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;*&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Comment 1&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;OsteoporosisComment2&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;*&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Comment 2&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;OsteoporosisComment3&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;*&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Comment 3&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;OsteoporosisComment4&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;*&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Comment 4&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;&lt;br /&gt;
 &amp;lt;/parameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 The command line module outputs key=value pairs to the file supplied by –-returnparameterfile as shown below:&lt;br /&gt;
    PatientGender = F &lt;br /&gt;
    PatientAge = 059Y&lt;br /&gt;
    RadnosticsOsteoporosisScore = 8 (high)&lt;br /&gt;
    OsteoporosisComment1 = vertebra label 58 has biconcave fracture&lt;br /&gt;
    OsteoporosisComment2 = vertebra label 56 has mean density of 120 HU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Command Line Parsing ==&lt;br /&gt;
&lt;br /&gt;
The Slicer Execution Model has support for parsing executable command lines. The C++ code to parse the command line arguments is generated automatically from the same XML description that generates the GUI. ''GenerateCLP,'' located in ''SlicerExecutionModel/GenerateCLP'' reads the XML Module Description and creates an include file ''&amp;quot;Executable&amp;quot;CLP.h'' in the build tree. The executable includes this header file and accesses the code with the macro PARSE_ARGS.&lt;br /&gt;
&lt;br /&gt;
GenerateCLP provides the following to the executable:&lt;br /&gt;
&lt;br /&gt;
# A brief usage command if required arguments are missing&lt;br /&gt;
# A full help command if ''-h'' or ''--help'' is specified on the command line&lt;br /&gt;
# A copy of the xml description if ''--xml'' is specified on the command line&lt;br /&gt;
# An echo of the command line parameters and their values if ''--echo'' is specified&lt;br /&gt;
&lt;br /&gt;
GenerateCLP provides the following source code:&lt;br /&gt;
&lt;br /&gt;
# A C++ declaration of the proper type for each parameter assigning the default value if specified by the XML&lt;br /&gt;
# For ''-vector'' parameters, a ''std::vector'' containing the proper C++ type fo the parameter. The generated code parses the comma separated strings to generate the ''std::vector''&lt;br /&gt;
&lt;br /&gt;
=== Using GenerateCLP ===&lt;br /&gt;
&lt;br /&gt;
GenerateCLP is normally used via CMake where it is implemented as a CUSTOM_COMMAND. To use GenerateCLP from CMake, you must first include the GenerateCLP package from your CMakeLists.txt file, which will make some macros available to you:&lt;br /&gt;
&lt;br /&gt;
  find_package(SlicerExecutionModel REQUIRED)&lt;br /&gt;
  include(${SlicerExecutionModel_USE_FILE})&lt;br /&gt;
&lt;br /&gt;
Note that the HelloSlicer command line module example provides a good starting point and can be used as a skeleton to build your own. It can be found in the [http://na-mic.org/ViewVC/index.cgi/trunk/Modules/CommandLineModule/Testing/HelloSlicer/?sortby=file#dirlist Modules/CommandLineModule/Testing/HelloSlicer] subdirectory.&lt;br /&gt;
&lt;br /&gt;
For each executable, include the following, replacing '''MyFilter''' with the name of your C++ source:&lt;br /&gt;
&lt;br /&gt;
  set('''MyFilter'''_SOURCE '''MyFilter'''.cxx)&lt;br /&gt;
  GENERATECLP('''MyFilter'''_SOURCE '''MyFilter'''.xml)&lt;br /&gt;
&lt;br /&gt;
To generate a stand-alone executable add the lines:&lt;br /&gt;
&lt;br /&gt;
  add_executable('''MyFilter''' ${'''MyFilter'''_SOURCE})&lt;br /&gt;
  target_link_libraries('''MyFilter''' ${ITK_LIBRARIES})&lt;br /&gt;
&lt;br /&gt;
Slicer expects modules and plugins to be stored in a specific subdirectory, so that they can be discovered and loaded at run-time. To make sure your CLP module is built in said subdirectory, add the line:&lt;br /&gt;
&lt;br /&gt;
  SEMMacroBuildCLI(&lt;br /&gt;
    NAME '''MyFilter'''&lt;br /&gt;
    LOGO_HEADER ${Slicer_SOURCE_DIR}/Resources/NAMICLogo.h&lt;br /&gt;
    ADDITIONAL_SRCS&lt;br /&gt;
      '''MyFilter'''.cxx&lt;br /&gt;
    TARGET_LIBRARIES ModuleDescriptionParser ${ITK_LIBRARIES} vtkTeem MRMLCore SlicerBaseCLI ${VTK_LIBRARIES}&lt;br /&gt;
    INCLUDE_DIRECTORIES&lt;br /&gt;
      ${vtkTeem_INCLUDE_DIRS}&lt;br /&gt;
      ${MRMLCore_INCLUDE_DIRS}&lt;br /&gt;
      ${vtkITK_INCLUDE_DIRS}&lt;br /&gt;
      ${SlicerBaseCLI_SOURCE_DIR} ${SlicerBaseCLI_BINARY_DIR}&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
The add_executable target creates a stand-alone executable that can be run from a command line. The add_library target creates a shared library that is discovered at Slicer 3 startup.&lt;br /&gt;
&lt;br /&gt;
Although this example linked to ITK libraries, other libraries can be specified.&lt;br /&gt;
&lt;br /&gt;
=== Short Example ===&lt;br /&gt;
&lt;br /&gt;
This example uses the XML for the [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation#Module_with_an_integer-vector.2C_one_input_image_and_one_output_image|Median Image Filter example].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' The program '''MUST NOT''' write anything to stdout before the ''PARSE_ARGS'' statement. If something is written, the plugin discovery mechanism will not recognize the program as a plugin.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#include &amp;quot;MedianImageFilterCLP.h&amp;quot;&lt;br /&gt;
 int main (int argc, char * argv[])&lt;br /&gt;
  {&lt;br /&gt;
  PARSE_ARGS;&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; &amp;quot;The size of the neighborhood is: &amp;quot; &amp;lt;&amp;lt; neighborhood.size()&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; and the first element of the neighborhood is: &amp;quot; &amp;lt;&amp;lt; neighborhood[0]&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; &amp;quot;The input volume is: &amp;quot; &amp;lt;&amp;lt; inputVolume &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; &amp;quot;The output volume is: &amp;quot; &amp;lt;&amp;lt; outputVolume &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  return EXIT_SUCCESS;&lt;br /&gt;
  }&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the output --help:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
USAGE: &lt;br /&gt;
&lt;br /&gt;
   ./MedianImageFilter  [--processinformationaddress &amp;lt;std::string&amp;gt;] [--xml]&lt;br /&gt;
                        [--echo] [--neighborhood &amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt;] [--]&lt;br /&gt;
                        [--version] [-h] &amp;lt;std::string&amp;gt; &amp;lt;std::string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where: &lt;br /&gt;
&lt;br /&gt;
   --processinformationaddress &amp;lt;std::string&amp;gt;&lt;br /&gt;
     Address of a structure to store process information (progress, abort,&lt;br /&gt;
     etc.). (default: 0)&lt;br /&gt;
&lt;br /&gt;
   --xml&lt;br /&gt;
     Produce xml description of command line arguments (default: 0)&lt;br /&gt;
&lt;br /&gt;
   --echo&lt;br /&gt;
     Echo the command line arguments (default: 0)&lt;br /&gt;
&lt;br /&gt;
   --neighborhood &amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt;&lt;br /&gt;
     The size of the neighborhood in each dimension (default: 1,1,1)&lt;br /&gt;
&lt;br /&gt;
   --,  --ignore_rest&lt;br /&gt;
     Ignores the rest of the labeled arguments following this flag.&lt;br /&gt;
&lt;br /&gt;
   --version&lt;br /&gt;
     Displays version information and exits.&lt;br /&gt;
&lt;br /&gt;
   -h,  --help&lt;br /&gt;
     Displays usage information and exits.&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;std::string&amp;gt;&lt;br /&gt;
     (required)  Input volume to be filtered&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;std::string&amp;gt;&lt;br /&gt;
     (required)  Output filtered&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   The MedianImageFilter is commonly used as a robust approach for noise&lt;br /&gt;
   reduction. This filter is particularly efficient against&lt;br /&gt;
   'salt-and-pepper' noise. In other words, it is robust to the presence of&lt;br /&gt;
   gray-level outliers. MedianImageFilter computes the value of each output&lt;br /&gt;
   pixel as the statistical median of the neighborhood of values around the&lt;br /&gt;
   corresponding input pixel.&lt;br /&gt;
&lt;br /&gt;
   Author(s): Bill Lorensen&lt;br /&gt;
&lt;br /&gt;
   Acknowledgements: This command module was derived from&lt;br /&gt;
   Insight/Examples/Filtering/MedianImageFilter (copyright) Insight&lt;br /&gt;
   Software Consortium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parameters and C++ code ===&lt;br /&gt;
&lt;br /&gt;
This table shows how parameters are defined in the C++ code and how they are specified on the command line.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! XML&lt;br /&gt;
! C++ Declaration&lt;br /&gt;
! Command Line&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;integer&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;count&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;flag&amp;gt;c&amp;lt;/flag&amp;gt; &amp;lt;/integer&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
int count;&lt;br /&gt;
|&lt;br /&gt;
''prog'' -c 10&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;float&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;stepSize&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;default&amp;gt;.0625&amp;lt;/default&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;longflag&amp;gt;stepSize&amp;lt;/longflag&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
float stepSize=.0625;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --stepSize .003&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;integer multiple=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;iterations&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;flag&amp;gt;i&amp;lt;/flag&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;default&amp;gt;100&amp;lt;/default&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/integer&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::vector&amp;lt;int&amp;gt; iterations;&amp;lt;br /&amp;gt; iterations.push_back(100);&amp;lt;br /&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
''prog'' -i 20 -i 30 -i 100&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;float-vector&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;variation&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;flag&amp;gt;v&amp;lt;/flag&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;default&amp;gt;1,2,3&amp;lt;/default&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/float-vector&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::vector&amp;lt;float&amp;gt; variation; iterations.push_back(1);&amp;lt;br /&amp;gt; iterations.push_back(2);&amp;lt;br /&amp;gt; iterations.push_back(3);&amp;lt;br /&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
''prog'' -v 10,20,3&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;string-vector&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;sites&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;longflag&amp;gt;sites&amp;lt;/longflag&amp;gt; &amp;lt;/string-vector&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::vector&amp;lt;std::string&amp;gt; sites;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --sites BWH,GE,Kitware,UNC,MIT,UTAH,GT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;string-enumeration&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;leaders&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;default&amp;gt;Bill&amp;lt;/default&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;element&amp;gt;Ron&amp;lt;/element&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;element&amp;gt;Bill&amp;lt;/element&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;element&amp;gt;Steve&amp;lt;/element&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/string-enumeration&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::string leaders = &amp;quot;Bill&amp;quot;;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --leaders Ron&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;boolean&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;debugSwitch&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;flag&amp;gt;d&amp;lt;/flag&amp;gt; &amp;lt;default&amp;gt;true&amp;lt;/default&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/boolean&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
bool debugSwitch = true;&lt;br /&gt;
|&lt;br /&gt;
''prog'' -d&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;file&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;longflag&amp;gt;file1&amp;lt;/longflag&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;file&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::string file1;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --file1 mytext.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;image&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;image&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;index&amp;gt;0&amp;lt;/index&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/image&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::string image;&lt;br /&gt;
|&lt;br /&gt;
''prog'' c:/lorensen/Data/ct.nrrd&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;file multiple=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;args&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;index&amp;gt;1&amp;lt;/index&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/file&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::vector&amp;lt;std::string&amp;gt; args;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --otherFlags file1 file2 ... filen&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;point multiple=&amp;quot;true&amp;quot; coordinateSystem=&amp;quot;ras&amp;quot;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;seed&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;longflag&amp;gt;--seed&amp;lt;/longflag&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::vector&amp;lt;std::vector&amp;lt;float&amp;gt; &amp;gt; seed;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --seed 10,100,23 --seed 5,240,17&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Accessing Module Information at Runtime ==&lt;br /&gt;
&lt;br /&gt;
All of the information contained in the XML description of a module can be accessed at run-time by the command line program. The ''ModuleDescriptionParser'' class library can parse an XML module description and populate a ''ModuleDescription'' instance.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Module Description Parser Class Library&lt;br /&gt;
#include &amp;quot;ModuleDescriptionParser.h&amp;quot;&lt;br /&gt;
#include &amp;quot;ModuleDescription.h&amp;quot;&lt;br /&gt;
#include &amp;quot;ModuleParameterGroup.h&amp;quot;&lt;br /&gt;
#include &amp;quot;ModuleParameter.h&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
// Create a module and a parser&lt;br /&gt;
    ModuleDescription module;&lt;br /&gt;
    ModuleDescriptionParser parser;&lt;br /&gt;
// Parse the XML&lt;br /&gt;
    if (parser.Parse(GetXMLModuleDescription(), module))&lt;br /&gt;
      {&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;: One or more XML errors detected.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      return EXIT_FAILURE;&lt;br /&gt;
      }&lt;br /&gt;
// Access the module description information&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Module Description Information&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tCategory is: &amp;quot; &amp;lt;&amp;lt; module.GetCategory() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tTitle is: &amp;quot; &amp;lt;&amp;lt; module.GetTitle() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tDescription is: &amp;quot; &amp;lt;&amp;lt; module.GetDescription() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tVersion is: &amp;quot; &amp;lt;&amp;lt; module.GetVersion() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tDocumentationURL is: &amp;quot; &amp;lt;&amp;lt; module.GetDocumentationURL() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tLicense is: &amp;quot; &amp;lt;&amp;lt; module.GetLicense() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tContributor is: &amp;quot; &amp;lt;&amp;lt; module.GetContributor() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''GetXMLModuleDescription'' is automatically generated by ''GenerateCLP''. Information about parameter groups and parameters is also available [[Accessing_Module_Information_at_Runtime|here]].&lt;br /&gt;
&lt;br /&gt;
The ''CMakeLists.txt'' file that creates the command line module should point to the ''ModuleDescriptionParser'' library.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
target_link_libraries(${CLP}&lt;br /&gt;
    ModuleDescriptionParser&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
GenerateCLP attempts to do error checking so that the generated C++ code will compile. These errors will show up as custom command errors during the build process.&lt;br /&gt;
&lt;br /&gt;
* XML Errors&lt;br /&gt;
** ''mismatched tag at line xx'' : The closing tag (a tag with &amp;lt;/ &amp;gt;) does not have a matching opening tag.&lt;br /&gt;
** ''not well-formed (invalid token) at line xx'' : Probably a blank in the token name.&lt;br /&gt;
* ModuleDescriptionParser Errors&lt;br /&gt;
** ''&amp;lt;executable&amp;gt; must be the outer most tag''&lt;br /&gt;
** ''&amp;lt;executable&amp;gt; was found inside another tag''&lt;br /&gt;
** ''&amp;lt;parameters&amp;gt; can only be inside &amp;lt;executable&amp;gt;''&lt;br /&gt;
** ''&amp;lt;xxx&amp;gt; can only be used inside &amp;lt;parameters&amp;gt;''&lt;br /&gt;
** ''&amp;lt;flag&amp;gt; can only contain one character''&lt;br /&gt;
** ''&amp;lt;longname&amp;gt; can only contain letters, numbers and underscores and must start with an _ or letter''&lt;br /&gt;
** ''&amp;lt;name&amp;gt; can only contain letters, numbers and underscores and must start with an _ or letter''&lt;br /&gt;
&lt;br /&gt;
* ModuleDescriptionParser Warnings&lt;br /&gt;
** ''&amp;lt;xxx&amp;gt; is an unknown parameter tag'' : Probably a misspelled parameter type.&lt;br /&gt;
&lt;br /&gt;
* Compiler Errors&lt;br /&gt;
** The generated C++ code may have syntax errors if invalid defaults are specified. These will show up during the C++ compilation.&lt;br /&gt;
&lt;br /&gt;
== Interfacing Legacy Executables ==&lt;br /&gt;
&lt;br /&gt;
GenerateCLP is only provided as a convenience. Users can use the same XML Module Description to interface C++, shell scripts, tcl programs and even Matlab.&lt;br /&gt;
&lt;br /&gt;
Example: [http://www.slicer.org/slicerWiki/index.php/Slicer3:FiberTrackingIntegration FiberTracking Integration]&lt;br /&gt;
&lt;br /&gt;
== Showing Progress in an Application ==&lt;br /&gt;
&lt;br /&gt;
Programs can communicate progress to the user in two ways. If the program is running an a stand-alone executable, it communicates with a simple XML syntax. If the program is loaded at run-time as a plugin library, it communicates through a C structure.&lt;br /&gt;
&lt;br /&gt;
The XML syntax is:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;filter-start&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;&lt;br /&gt;
  ''name of program section or algorithm''&lt;br /&gt;
  &amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-comment&amp;gt;&lt;br /&gt;
  ''description of program section or algorithm''&lt;br /&gt;
  &amp;lt;/filter-comment&amp;gt;&lt;br /&gt;
 &amp;lt;/filter-start&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;filter-progress&amp;gt;&lt;br /&gt;
 ''floating number from 0 to 1''&lt;br /&gt;
 &amp;lt;/filter-progress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;filter-end&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;&lt;br /&gt;
  ''name of program section or algorithm''&lt;br /&gt;
  &amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-time&amp;gt;&lt;br /&gt;
  ''execution time''&lt;br /&gt;
  &amp;lt;/filter-time&amp;gt;&lt;br /&gt;
 &amp;lt;/filter-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The C structure that library plugins use is:&lt;br /&gt;
&lt;br /&gt;
 extern &amp;quot;C&amp;quot; {&lt;br /&gt;
  struct ModuleProcessInformation&lt;br /&gt;
  {&lt;br /&gt;
    /** Inputs from calling application to the module **/&lt;br /&gt;
    unsigned char Abort;&lt;br /&gt;
    /** Outputs from the module to the calling application **/&lt;br /&gt;
    float Progress;&lt;br /&gt;
    char  ProgressMessage[1024];&lt;br /&gt;
    void (*ProgressCallbackFunction)(void *);&lt;br /&gt;
    void *ProgressCallbackClientData;&lt;br /&gt;
    double ElapsedTime;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Details on how to use this mechanism are illustrated in [https://github.com/Slicer/Slicer/blob/master/Base/CLI/itkPluginFilterWatcher.h itkPluginFilterWatcher.h].&lt;br /&gt;
&lt;br /&gt;
For vtk and itk execution model programs, two classes are available that make it simple to add progress. The classes, ''vtkPluginFilterWatcher'' and ''itk::PluginFilterWatcher'' use the vtk and itk command/observer mechanism to report progress.&lt;br /&gt;
&lt;br /&gt;
vtkPluginFilterWatcher (vtkAlgorithm *'''filter''', const char* '''comment''', ModuleProcessInformation *'''inf''', double '''fraction''', double '''start''') &amp;lt;br /&amp;gt; itk::PluginFilterWatcher (itk::ProcessObject '''filter''', const char* '''comment''', ModuleProcessInformation *'''inf''', double '''fraction''', double '''start''')&lt;br /&gt;
&lt;br /&gt;
: where:&lt;br /&gt;
;; filter &lt;br /&gt;
:: is the vtkAlgorithm or itk::ProcessObject to be watched.&lt;br /&gt;
;; comment &lt;br /&gt;
:: is a string that describes the algorithm.&lt;br /&gt;
;; inf &lt;br /&gt;
:: is an optional pointer to a structure that is used to communicate with the invoking program when the called program is used as a library plugin. If the pointer is 0, this prgram will not report progress if it is run as a library plugin. Default is 0.&lt;br /&gt;
;; fraction &lt;br /&gt;
:: is the fraction (0-1) of progress that will be reported by this watcher. This is used when multiple filters are run and each filter represents a proportion of the total progress. Default is 1.&lt;br /&gt;
;; start &lt;br /&gt;
:: is the offset (0-1) of the progress for this filter. This is added to the progress of the filter. The reported progress of the watched filter is ''start + fraction * filter_progress''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; The following example produces progress for a simple vtk program. The variable CLPProcessInformation is automatically declared and set in the program's ''program''CLP.h file.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#include &amp;quot;vtkPluginFilterWatcher.h&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
  vtkMarchingCubes *cubes = vtkMarchingCubes::New();&lt;br /&gt;
    cubes-&amp;gt;SetInput(reader-&amp;gt;GetOutput());&lt;br /&gt;
  vtkPluginFilterWatcher watchCubes(cubes, &amp;quot;Generate Isosurface&amp;quot;, CLPProcessInformation, .5, 0.0);&lt;br /&gt;
  vtkDecimatePro *decimate = vtkDecimatePro::New();&lt;br /&gt;
    decimate-&amp;gt;SetInput(cubes-&amp;gt;GetOutput());&lt;br /&gt;
  vtkPluginFilterWatcher watchDecimate(decimate, &amp;quot;Reduce Triangle Count&amp;quot;, CLPProcessInformation, .5, 0.5);&lt;br /&gt;
  decimate-&amp;gt;Update();&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following example produces progress for a simple itk program:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#include &amp;quot;itkPluginFilterWatcher.h&lt;br /&gt;
 ...&lt;br /&gt;
 typedef itk::MedianImageFilter&amp;lt;ImageType,ImageType&amp;gt; FilterType;&lt;br /&gt;
 FilterType::Pointer median  = FilterType::New();&lt;br /&gt;
 itk::PluginFilterWatcher watchMedian(median, &amp;quot;Denoise Image&amp;quot;, CLPProcessInformation);&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding Module Logos to Slicer ==&lt;br /&gt;
Slicer plugins, both libraries and executables, can specify plugin-specific logos. These appear in Slicer when a module is selected. The logos are specified in a .h header file. The KWWidget utility, KWConvertImageToHeader, converts a .png file into a .h header file containing the encoded image and additional information such as width, height and pixel size. [[Documentation-3.5#Requirements_for_Modules|See here for additional information.]]&lt;br /&gt;
&lt;br /&gt;
For Slicer, execution model plugin logos are stored in Modules/CLI/Resources. The corresponding image in .png format should be stored in Modules/CLI/ImageData. Othere plugins, created outside the Slicer tree, should store the logo and image in a similar location.&lt;br /&gt;
&lt;br /&gt;
To add a logo to a plugin:&lt;br /&gt;
* Create a png image of the logo. The height of the logo should not exceed 40 pixels.&lt;br /&gt;
* Convert the logo to the KWWidget icon format as follows. '''NOTE:''' the prefix of the image and header file must be the same for a plugin logo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd Modules/CLI&lt;br /&gt;
KWConvertImageToHeader --base64 --zlib Resources/ITKLogo.h ImageData/ITKLogo.png&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add the logo to the SEMMacroBuildCLImacro in the CMakeLists.txt file for the plugin using LOGO_HEADER parameter.&lt;br /&gt;
&lt;br /&gt;
=== Runtime specification of filter types ===&lt;br /&gt;
&lt;br /&gt;
ITK filters are templated over the images they process. The following code snippet shows how an execution model program can select the image types for filters based on the input images.&lt;br /&gt;
&lt;br /&gt;
First, include the utilites for plugin's:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;itkPluginUtilities.h&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, turn your main program into a templated procedure called ''DoIt'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template&amp;lt;class T&amp;gt; int DoIt( int argc, char * argv[], T )&lt;br /&gt;
{&lt;br /&gt;
  PARSE_ARGS;&lt;br /&gt;
&lt;br /&gt;
  typedef itk::Image&amp;lt; T, 3 &amp;gt;   InputImageType;&lt;br /&gt;
  typedef itk::Image&amp;lt; T, 3 &amp;gt;   OutputImageType;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, create a main program that gets the native component type from one of the input file. Here that input file is ''inputVolume'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main( int argc, char * argv[] )&lt;br /&gt;
{&lt;br /&gt;
  &lt;br /&gt;
  PARSE_ARGS;&lt;br /&gt;
&lt;br /&gt;
  itk::ImageIOBase::IOPixelType pixelType;&lt;br /&gt;
  itk::ImageIOBase::IOComponentType componentType;&lt;br /&gt;
&lt;br /&gt;
  try&lt;br /&gt;
    {&lt;br /&gt;
    itk::GetImageType (inputVolume, pixelType, componentType);&lt;br /&gt;
&lt;br /&gt;
    // This filter handles all types&lt;br /&gt;
    &lt;br /&gt;
    switch (componentType)&lt;br /&gt;
      {&lt;br /&gt;
      case itk::ImageIOBase::UCHAR:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;unsigned char&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::CHAR:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;char&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::USHORT:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;unsigned short&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::SHORT:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;short&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::UINT:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;unsigned int&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::INT:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;int&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::ULONG:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;unsigned long&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::LONG:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;long&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::FLOAT:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;float&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::DOUBLE:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;double&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::UNKNOWNCOMPONENTTYPE:&lt;br /&gt;
      default:&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;unknown component type&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  catch( itk::ExceptionObject &amp;amp;excep)&lt;br /&gt;
    {&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;: exception caught !&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; excep &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
  return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Behind the Scenes ==&lt;br /&gt;
&lt;br /&gt;
A primary goal of the execution model is to relieve developers from developing GUI code and command line parsing code. This section describes the major components of the execution model implementation.&lt;br /&gt;
&lt;br /&gt;
=== Command Line Processing ===&lt;br /&gt;
&lt;br /&gt;
Command line processing parses command line arguments and populates internal program variables. Every Unix (and windows) program can receive an argument list through its main entry point. All C and C++ programmers are familiar with the ''int main (int argc, char *[] argv)'' entry point in their programs. Most computer languages including scripting languages provide a similar mechanism to retrieve command line arguments. Simple command line processing directly accesses the strings defined in argv.&lt;br /&gt;
&lt;br /&gt;
This snippet shows simple commmand line processing:&lt;br /&gt;
&lt;br /&gt;
 int main (int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
   if (argc &amp;lt; 2)&lt;br /&gt;
     {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; &amp;quot;Usage: &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot; filename&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
     return -1;&lt;br /&gt;
     }&lt;br /&gt;
   std::cout &amp;lt;&amp;lt; &amp;quot;The File is &amp;quot; &amp;lt;&amp;lt; argv[1] &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The simple approach works great for a small number of arguments. But larger numbers of arguments of varying types quickly make the processing code more complex and subject to error, both in coding and usage.&lt;br /&gt;
&lt;br /&gt;
 int main (int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
   if (argc &amp;lt; 5)&lt;br /&gt;
     {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; &amp;quot;Usage: &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot; iterations epsilon inputfile outputfile &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
     return -1;&lt;br /&gt;
     }&lt;br /&gt;
   std::string inputfile(argv[3]);&lt;br /&gt;
   std::string outputfile(argv[4]);&lt;br /&gt;
   unsigned int iterations = atoi(argv[1]);&lt;br /&gt;
   float epsilon = atof(argv[2]);&lt;br /&gt;
 ...&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Adding flags (or options) to the command line makes the program easier to use but places a larger burden on the program developer. Each developer must ''invent'' a command line argument syntax and implement code to parse the command line. Even a simple example of this is too long to include in this description. This code snippet looks for just two command line arguments.&lt;br /&gt;
&lt;br /&gt;
 int main (int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
   if (argc &amp;lt; 3)&lt;br /&gt;
     {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; &amp;quot;Usage: &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot; [-i iterations] [-e epsilon] inputfile outputfile &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
     return -1;&lt;br /&gt;
     }&lt;br /&gt;
   std::string inputfile;&lt;br /&gt;
   std::string outputfile;&lt;br /&gt;
   unsigned int iterations = 10; /* a default */&lt;br /&gt;
   float epsilon = .001; /* a defualt */&lt;br /&gt;
   ++argc; /* skip program name */&lt;br /&gt;
   while (argc &amp;gt; 0)&lt;br /&gt;
     {&lt;br /&gt;
     if (strcmp(argv[argc], &amp;quot;-i&amp;quot;)&lt;br /&gt;
      {&lt;br /&gt;
      iterations = atoi(argv[argc+1]);&lt;br /&gt;
      argc+=2;&lt;br /&gt;
      continue;&lt;br /&gt;
 &lt;br /&gt;
    else if (strcmp(argv[argc], &amp;quot;-e&amp;quot;)&lt;br /&gt;
      {&lt;br /&gt;
      epsilon = atof(argv[argc+1]);&lt;br /&gt;
      argc+=2;&lt;br /&gt;
      continue;&lt;br /&gt;
    ...&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
The code gets longer and longer as more options are added and must be rewritten every time a new programs is open.&lt;br /&gt;
&lt;br /&gt;
To solve this complexity issue, people have developed command line argument libraries. There are dozens, if not hundreds, of command line processing tools. For Slicer3 we looked at argument processors in vxl, nrrd, meta, kwsys and tclap. Each has its strengths and weaknesses. We chose [http://tclap.sourceforge.net/ The Templatized C++ Command Line Parser Library], '''TCLAP'''. '''TCLAP''' is implemented in ''include'' files and does not require a separate library build. As you will see later, the particular command line processing tool is, for the most part, transparent to the Slicer3 developer or user.&lt;br /&gt;
&lt;br /&gt;
But even these libraries require some work to use.&lt;br /&gt;
&lt;br /&gt;
==== TCLAP ====&lt;br /&gt;
&lt;br /&gt;
This example uses '''TCLAP''' to process a command line with 10 possible entries:&lt;br /&gt;
&lt;br /&gt;
 int main ( int argc, char* argv[] ) {&lt;br /&gt;
  //&lt;br /&gt;
  // Define default values&lt;br /&gt;
  int HistogramBins      = 30;&lt;br /&gt;
  int RandomSeed         = 1234567;&lt;br /&gt;
  int SpatialSamples     = 10000;&lt;br /&gt;
  float TranslationScale = 100.0;&lt;br /&gt;
  int Iterations         = 200;&lt;br /&gt;
  int SplineOrder        = 3;&lt;br /&gt;
  double MinimumStepSize = 0.00001;&lt;br /&gt;
  double MaximumStepSize = 0.005;&lt;br /&gt;
  bool PrintTransform    = false;&lt;br /&gt;
  string fixedImageFileName;&lt;br /&gt;
  string movingImageFileName;&lt;br /&gt;
  string resampledImageFileName;&lt;br /&gt;
  //&lt;br /&gt;
  // Setup command line parsing&lt;br /&gt;
  try&lt;br /&gt;
    {&lt;br /&gt;
    TCLAP::CmdLine cl ( &amp;quot;Register2d&amp;quot;, ' ', &amp;quot;$Revision: 1.1 $&amp;quot; );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;int&amp;gt;    HistogramBinsArg    ( &amp;quot;b&amp;quot;, &amp;quot;histogrambins&amp;quot;,    &amp;quot;Number of histogram bins&amp;quot;, false, 30, &amp;quot;integer&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;int&amp;gt;    IterationsArg       ( &amp;quot;i&amp;quot;, &amp;quot;iterations&amp;quot;,       &amp;quot;Number of Iterations&amp;quot;, false, Iterations, &amp;quot;int&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;double&amp;gt; MinimumStepSizeArg  ( &amp;quot;m&amp;quot;, &amp;quot;minstepsize&amp;quot;,      &amp;quot;Minimum Step Size&amp;quot;, false, MinimumStepSize, &amp;quot;double&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;double&amp;gt; MaximumStepSizeArg  ( &amp;quot;x&amp;quot;, &amp;quot;maxstepsize&amp;quot;,      &amp;quot;Maximum Step Size&amp;quot;, false, MaximumStepSize, &amp;quot;double&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;int&amp;gt;    RandomSeedArg       ( &amp;quot;r&amp;quot;, &amp;quot;randomseed&amp;quot;,       &amp;quot;Random Seed&amp;quot;, false, RandomSeed, &amp;quot;int&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;int&amp;gt;    SpatialSamplesArg   ( &amp;quot;s&amp;quot;, &amp;quot;spatialsamples&amp;quot;,   &amp;quot;Number of spatial samples&amp;quot;, false, SpatialSamples, &amp;quot;int&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;int&amp;gt;    SplineOrderArg      ( &amp;quot;o&amp;quot;, &amp;quot;splineorder&amp;quot;,      &amp;quot;Order of spline for registration&amp;quot;, false, SplineOrder, &amp;quot;int&amp;quot;, cl );&lt;br /&gt;
    TCLAP::SwitchArg        PrintTransformArg   ( &amp;quot;p&amp;quot;, &amp;quot;printtransform&amp;quot;,   &amp;quot;Print the final transform&amp;quot;, PrintTransform, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;float&amp;gt;  TranslationScaleArg ( &amp;quot;t&amp;quot;, &amp;quot;translationscale&amp;quot;, &amp;quot;Translation scale&amp;quot;, false, TranslationScale, &amp;quot;float&amp;quot;, cl );&lt;br /&gt;
    TCLAP::UnlabeledValueArg&amp;lt;string&amp;gt; FixedImageArg ( &amp;quot;fixed&amp;quot;, &amp;quot;Fixed image filename&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;string&amp;quot;, cl );&lt;br /&gt;
    TCLAP::UnlabeledValueArg&amp;lt;string&amp;gt; MovingImageArg ( &amp;quot;moving&amp;quot;, &amp;quot;Moving image filename&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;string&amp;quot;, cl );&lt;br /&gt;
    TCLAP::UnlabeledValueArg&amp;lt;string&amp;gt; ResampledImageArg ( &amp;quot;resampled&amp;quot;, &amp;quot;Resampled image filename&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;string&amp;quot;, cl );&lt;br /&gt;
    //&lt;br /&gt;
    // Parse the command line&lt;br /&gt;
    cl.parse ( argc, argv );&lt;br /&gt;
    //&lt;br /&gt;
    // Access the variables&lt;br /&gt;
    HistogramBins          = HistogramBinsArg.getValue();&lt;br /&gt;
    Iterations             = IterationsArg.getValue();&lt;br /&gt;
    MinimumStepSize        = MinimumStepSizeArg.getValue();&lt;br /&gt;
    MaximumStepSize        = MaximumStepSizeArg.getValue();&lt;br /&gt;
    RandomSeed             = RandomSeedArg.getValue();&lt;br /&gt;
    SpatialSamples         = SpatialSamplesArg.getValue();&lt;br /&gt;
    TranslationScale       = TranslationScaleArg.getValue();&lt;br /&gt;
    PrintTransform         = PrintTransformArg.getValue();&lt;br /&gt;
    fixedImageFileName     = FixedImageArg.getValue();&lt;br /&gt;
    movingImageFileName    = MovingImageArg.getValue();&lt;br /&gt;
    resampledImageFileName = ResampledImageArg.getValue();&lt;br /&gt;
    }&lt;br /&gt;
  catch ( ArgException e )&lt;br /&gt;
    {&lt;br /&gt;
    cerr &amp;lt;&amp;lt; &amp;quot;error: &amp;quot; &amp;lt;&amp;lt; e.error() &amp;lt;&amp;lt; &amp;quot; for arg &amp;quot; &amp;lt;&amp;lt; e.argId() &amp;lt;&amp;lt; endl;&lt;br /&gt;
    exit ( EXIT_FAILURE );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
You do get a lot for your investment here. Good error handling and help.&lt;br /&gt;
&lt;br /&gt;
=== Module Description Parser ===&lt;br /&gt;
The XML parsing is done by the [https://github.com/Slicer/SlicerExecutionModel/tree/master/ModuleDescriptionParser ModuleDescriptionParser] class library. ''GenerateCLP'' and Slicer3 use this class library to parse the module XML descriptions. The class ''ModuleDescriptionParser'' has one method, '''Parse''', that converts the XML description into an object model. The resulting object model has one ''ModuleDescription'', one or more ''ModuleParameterGroup'' each of which has one or more ''ModuleParameter''. Each instance has access methods to retrieve information from the XML.&lt;br /&gt;
* '''ModuleDescriptionParser''' - parser for command line module XML description.&lt;br /&gt;
*: ''Parse(std::string xml, ModuleDescription module)'' - parse an xml string and populate a ModuleDescription.&lt;br /&gt;
* '''ModuleDescription''' - contains information about a module &lt;br /&gt;
*: const std::string ''GetCategory()'' : returns the contents of '''&amp;lt;category&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetTitle()'' : returns the contents of '''&amp;lt;title&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetDescription()'' : returns the contents of '''&amp;lt;description&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetVersion()'' : returns the contents of '''&amp;lt;version&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetDocumentationURL()'' : returns the contents of '''&amp;lt;documentationURL&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetLicense()'' : returns the contents of '''&amp;lt;license&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetContributor()'' : returns the contents of '''&amp;lt;contributor&amp;gt;'''.&lt;br /&gt;
*: const std::vector&amp;lt;ModuleParameterGroup&amp;gt;&amp;amp; ''GetParameterGroups()'' : returns a vector of parameter groups.&lt;br /&gt;
* '''ModuleParameterGroup''' - contains ModuleParameters for each parameter group.&lt;br /&gt;
*: const std::string ''GetLabel'' - returns the contents of '''&amp;lt;label&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetDescription()'' - returns the contents of the parameter group's '''&amp;lt;description&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetAdvanced()'' - returns advanced attribute. Either &amp;quot;true&amp;quot; of &amp;quot;false&amp;quot;.&lt;br /&gt;
* '''ModuleParameter''' - contains information for a parameter.&lt;br /&gt;
*:GetTag() - returns the parameter's tag, e.g. '''&amp;lt;integer&amp;gt;, &amp;lt;image&amp;gt;''', etc.&lt;br /&gt;
*:GetName() - returns the parameter's '''&amp;lt;name&amp;gt;'''.&lt;br /&gt;
*:GetLongFlag() -  returns the parameter's '''&amp;lt;longflag&amp;gt;'''.&lt;br /&gt;
*:GetLabel() -  returns the parameter's '''&amp;lt;label&amp;gt;'''.&lt;br /&gt;
*:GetMaximum() -  returns the parameter's '''&amp;lt;maximum&amp;gt;''' constraint.&lt;br /&gt;
*:GetMinimum() -  returns the parameter's '''&amp;lt;minimum&amp;gt;''' constraint.&lt;br /&gt;
*:GetStep() -  returns the parameter's '''&amp;lt;step&amp;gt;'''.&lt;br /&gt;
*:GetDescription() -  returns the parameter's '''&amp;lt;description&amp;gt;'''.&lt;br /&gt;
*:GetChannel() -  returns the parameter's '''&amp;lt;channel&amp;gt;'''.&lt;br /&gt;
*:GetIndex() -  returns the parameter's '''&amp;lt;index&amp;gt;'''.&lt;br /&gt;
*:GetDefault() -  returns the parameter's '''&amp;lt;default&amp;gt;'''.&lt;br /&gt;
*:GetFlag() -  returns the parameter's '''&amp;lt;flag&amp;gt;'''.&lt;br /&gt;
*:GetMultiple() -  returns the parameter's multiple attribute, either &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;.&lt;br /&gt;
*:GetCoordinateSystem() -  returns the parameter's coordinate system attribute, one of &amp;quot;lps&amp;quot;, &amp;quot;ras&amp;quot;, or &amp;quot;ijk&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Adding a new parameter type =&lt;br /&gt;
&lt;br /&gt;
Adding a ''new parameter type'' to the execution model involves several modifications:&lt;br /&gt;
&lt;br /&gt;
# A new XML tag needs to be defined to represent the new parameter type.&lt;br /&gt;
# ModuleDescriptionParser needs to be modified to parse the new parameter tag type and specify how the command line processing code generation is going to represent the parameter type&lt;br /&gt;
# CommandLineModuleGUI needs to be modified to construct the appropriate GUI element for the parameter type&lt;br /&gt;
# CommandLineModuleLogic needs to be modified to put the parameter type onto the command line and request outputs parameter types be loaded back into Slicer and the MRML tree.&lt;br /&gt;
# SlicerApplicationLogic needs to be modified to ingest any output parameter types back into Slicer and the MRML tree.&lt;br /&gt;
# Additional modification are needed if the parameter is to be passed directly from the MRML tree without using the filesystem.&lt;br /&gt;
# Updating the documentation.&lt;br /&gt;
&lt;br /&gt;
Simple parameter types can be passed directly on the command line.  For instance, scalars, small lists, positions, etc. Complicated parameter types are passed to the module via '''abstract files'''. In some cases, these parameters are actually passed as files, where Slicer reads/write the data to the filesystem.  In other cases, the parameters are passed as '''abstract files''' which are really references to within the Slicer memory model but appear to the Command Line Module as being a file.  The Command Line Module is written using standard ITK ImageFileReader/ImageFileWriter classes but the ITK ImageIO factory mechanism is used to direct the ImageFileReader/ImageFileWriter to talk directly to the Slicer MRML tree instead of to the filesystem.&lt;br /&gt;
&lt;br /&gt;
== XML tag ==&lt;br /&gt;
&lt;br /&gt;
This is by far the easiest of the tasks involved in adding a new parameter type but it should not approached hastily. The XML description of a module is designed to be application agnostic. As such, parameter types should be described abstractly or generically.  For instance, '''&amp;lt;geometry&amp;gt;''' tag corresponds to the Slicer model node, the '''&amp;lt;point&amp;gt;''' tag corresponds to the Slicer fiducial node, etc.&lt;br /&gt;
&lt;br /&gt;
Once the tag name is defined, you need to decide whether the parameter type could or should support the attributes '''multiple''', '''coordinateSystem''', or '''fileExtensions''' or perhaps a new attribute type.&lt;br /&gt;
&lt;br /&gt;
== Modifying ModuleDescriptionParser ==&lt;br /&gt;
&lt;br /&gt;
SlicerExecutionModel/ModuleDescriptionParser/ModuleDescriptionParser.cxx contains the code to parse the XML description of a module and represent that module description in C++ data structures.  To add a new parameter type, this code needs to be modified.&lt;br /&gt;
&lt;br /&gt;
Two routines need to be modified in ModuleDescriptionParser, ''startElement()'' and ''endElement()''. For ''startElement()'', a new case block needs to be added for the parameter type.  You can start by copying the case block for a similar parameter type. This case block is responsible for processing all the attributes for the tag and managing and reporting any errors. The case block may define the '''CPPType''', the ''ArgType''', and the '''StringToType''' needed for the code generation of the command line parsing. The '''CPPType''' is used by in the generated command line processing code to represent the parameter.  This may be a simple C++ type or an STL container. The '''ArgType''' is the canonical type of each component of the parameter. The '''StringToType''' is the name of the method to use to convert the ASCII command line parameter to the final '''ArgType'''. The ''endElement()'' method merely needs a new case block to add the parameter to the description.&lt;br /&gt;
&lt;br /&gt;
ModuleDescriptionParser is fairly general, handling scalars, lists of scalars, and file types as parameter types. A parameter which does not fit these models will require considerable alterations to the ModuleDescriptionParser as well as the GenerateCLP.&lt;br /&gt;
&lt;br /&gt;
== Constructing a GUI for a new parameter type ==&lt;br /&gt;
&lt;br /&gt;
To have a GUI element appear in the module GUI for a new parameter type, Base\QTCLI\qSlicerCLIModuleUIHelper.cxx and Base\QTCLI\vtkSlicerCLIModuleLogic.cxx have to be modified. A new case block needs to be added to the '''BuildGUI()''' method for the new parameter type.  This case block is triggered off the XML tag for the parameter type. The case block is responsible for the constructing the appropriate GUI element for the parameter, complete with specifying the label and help text. The design is very simple.  A single widget is used for each parameter.  If a more complicated GUI is needed with multiple widgets, then perhaps a new widget is needed to encapsulated a set of widgets or a naming convention can be added to manage all the widgets associated with a parameter. The widgets for the parameters are stored in a map, indexed by the '''name''' of the parameter.&lt;br /&gt;
&lt;br /&gt;
The vtkCommandLineModuleGUI (and vtkCommandLineModuleLogic) are designed to operate very generically with sets of parameters. The aforementioned map of widgets indexed by parameter '''name''' is one such example.  The implementation of several of the methods in the vtkCommandLineModuleGUI (and vtkCommandLineModuleLogic) generically iterate over the widget map or over the parameter list. It is important to keep this in mind as new parameters are added.  The design goal is to minimize the number of ''special cases'' in the code.&lt;br /&gt;
&lt;br /&gt;
Note that there may be separate case blocks for '''input''' and '''output''' parameter types.&lt;br /&gt;
&lt;br /&gt;
== Communicating the new parameter to the Command Line Module ==&lt;br /&gt;
&lt;br /&gt;
To communicate the new parameter type to and from a Command Line Module, the '''ApplyTask()''' method Slicer3/Modules/CommandLineModule/vtkCommandLineModuleLogic.cxx needs to be modified. &lt;br /&gt;
&lt;br /&gt;
If the parameter type is communicated to the command line module as a file (as opposed to directly on the command line as a number or srting), then there are several blocks of code to construct a temporary file name, keep track of whether that node needs to be written to the filesystem before execution, read from the filesystem after the execution, and deleted after execution completes. These blocks may need to be modified based on your new parameter type.&lt;br /&gt;
&lt;br /&gt;
The command line is constructed in two passes.  First, a pass is made over the parameter list, building the portion of the command line for any parameters that have flags.  Note that whether a parameter has a flag or not is up to the discretion of the module author and is not defined by the parameter type.  Second, a pass is made to construction the portion of the command  line for the parameters that do not have flags. These parameters are ordered appropriately, then placed on the command line. For parameters with flags, this code emits the flag and the parameter value.  For the parameters without flags, this code emits just the parameter value.  You will need to edit both of these passes to emit your parameter type.  In most cases, this is simply a matter of grabbing the parameter value from the parameter and pushing it onto the command line.  But some parameter types do require translation to a string appropriate for the command line.&lt;br /&gt;
&lt;br /&gt;
== Output parameters from the Command Line Modules ==&lt;br /&gt;
&lt;br /&gt;
Any outputs from a Command Line Module that are communicated via files are queued to be read by the main application thread. Command Line Modules run in a separate execution thread from the main GUI.  This thread is not allowed to modify the Slicer GUI, so any results from the module that need to be read back into Slicer and displayed are queued for the main thread.&lt;br /&gt;
&lt;br /&gt;
The '''ProcessReadData()''' method of Slicer3/Base/Logic/vtkSlicerApplicationLogic.cxx pulls data from the queue to load back into Slicer and display. You may need to a case block for your new parameter type to construct the appropriate storage node and display node.&lt;br /&gt;
&lt;br /&gt;
== Communicating directly with the MRML tree ==&lt;br /&gt;
&lt;br /&gt;
Currently scalar image types can sent as parameters to shared object command line modules without going through the filesystem.  Slicer provides a new ITK ImageIO factory that can communicated directly with the Slicer MRML tree. This ImageIO factory is in Slicer/Libs/MRMLIDImageIO. This approach can be extended for other image types such as vector or tensor volumes.&lt;br /&gt;
&lt;br /&gt;
For other constructs such as models and transforms, we'll need to see if an existing factory mechanism can be leverage to communicate directly with the Slicer MRML tree. An alternative may be to construct bridges specific to interfacing from a command line module to the Slicer MRML tree.&lt;br /&gt;
&lt;br /&gt;
== Adding new image types ==&lt;br /&gt;
&lt;br /&gt;
The Command Line Module support scalar, vector, tensor, and diffusion weighted images. Adding a new image type to the Command Line Module requires modify the sections of the code outlined above to manage GUI for the module, to construct temporary file names, to write image to disk, and load them back into the MRML tree.  These blocks are easy to identify as case blocks on vtkMRMLScalarVolumeNode, vtkMRMLDiffusionTensorVolumeNode, etc. Note that the '''&amp;lt;image&amp;gt;''' tag supports a '''type''' attribute that can scalar, label, vector, tensor, or diffusion-weighted.  The case block for '''image''' in the '''startElement()''' method of ModuleDescriptionParser would need to be extended to recognize a new type of image.&lt;br /&gt;
&lt;br /&gt;
=FAQ=&lt;br /&gt;
&lt;br /&gt;
==What facilities are available for third party software to interface with the NA-MIC Kit?==&lt;br /&gt;
&lt;br /&gt;
NA-MIC has committed to developing and supporting a generic batch processing interface.  This is the Slicer3 Command Line Interface (CLI). The application programming interface (API) for CLI was worked out based on interactions with the community including input from those familiar with LONI, ITK, Python and Matlab software development practices.&lt;br /&gt;
&lt;br /&gt;
We believe this API already supports all the features required by to implement batch processing with BatchMake, the LONI Pipeline, and any other systems that we may want to work with in the future.  The [[Slicer3:Execution_Model_Documentation|Slicer3 Execution Model]] provides a simple XML-based descriptor for command line arguments for input/output volumes and related parameters.&lt;br /&gt;
&lt;br /&gt;
==Which Third Party software has currently been interfaced to the NA-MIC Kit using the CLI?==&lt;br /&gt;
&lt;br /&gt;
*Batchmake (Kitware)&lt;br /&gt;
*Python&lt;br /&gt;
*Matlab&lt;br /&gt;
&lt;br /&gt;
== How do I debug my command line module? ==&lt;br /&gt;
&lt;br /&gt;
See [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation:Debugging Debugging]&lt;br /&gt;
&lt;br /&gt;
== How do I specify a Logo? ==&lt;br /&gt;
&lt;br /&gt;
You need to create a logo.h file (embedding the zipped pixel data as base64 strings in a C source code).  There is a utility bundled with kwwidgets that accomplishes this.  From a Slicer3 build directory you can do something like this:&lt;br /&gt;
&lt;br /&gt;
 ./Slicer3 --launch ../Slicer3-lib/KWWidgets-build/bin/KWConvertImageToHeader --base64 --zlib ~/Desktop/bioimagesuite_logo_www.h ~/Desktop/bioimagesuite_logo_www.png&lt;br /&gt;
&lt;br /&gt;
The resulting .h header file can then be used as an argument to the 'generateclp' cmake macro like this:&lt;br /&gt;
&lt;br /&gt;
 generateclp(${CLP}_SOURCE ${CLP}.xml ${Slicer3_SOURCE_DIR}/Resources/bioimagesuite_logo_www.h)&lt;br /&gt;
&lt;br /&gt;
''Note: logos are limited in size: if your .h file contains a symbol like 'image_bioimagesuite_logo_www' it will work.  But if it has several symbols like 'image_bioimagesuite_logo_www_1' 'image_bioimagesuite_logo_www_2' etc then the logo was too large and needs to be downsampled for use.''&lt;br /&gt;
&lt;br /&gt;
== What do I do if I want to use the CLI outside of slicer? ==&lt;br /&gt;
&lt;br /&gt;
In general CLI executables will depend on shared libraries provided by Slicer (such as ITKCommon, etc).  To be sure your run-time environment resolves to the correct versions, you should always use a form like:&lt;br /&gt;
 ./Slicer3 --launch &amp;lt;CLI&amp;gt;&lt;br /&gt;
or, you can start a shell from which you can run multiple CLI modules.  Something like:&lt;br /&gt;
 ./Slicer3 --launch xterm &amp;amp;&lt;br /&gt;
&lt;br /&gt;
We do not suggest hard-coding the runtime paths into, for example, your .bashrc since this may interfere with other programs and can make it hard to use multiple versions of slicer on the same account.&lt;br /&gt;
&lt;br /&gt;
= Laundry List =&lt;br /&gt;
&lt;br /&gt;
Use this section to describe any features that are missing, not documented, or require additional work.&lt;br /&gt;
&lt;br /&gt;
* Comments from Hans Johnson, June 4, 2010:&lt;br /&gt;
** Enumerated types can only have about 3 characters in them, otherwise they don’t render in the slicer wizard at all.&lt;br /&gt;
** There is no way to unset an enumerated type, and the values are cached even after leaving the module.  If the default enumerated type is to be blank, and you select it, then you must restart slicer in order to make the blank option available again.&lt;br /&gt;
** There is no way to have conditional options.  For example if one flag is used, then other flag can not be used, so it should be disabled.&lt;br /&gt;
&lt;br /&gt;
* Documenting your module:&lt;br /&gt;
** a convenience script has been developed by Hans Johnson, which creates a wiki page describing the command line module by extracting the information from the xml description [[SEMToMediaWiki.py]]. TODO: extract the default values for the parameters to be included in the documentation&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/SlicerExecutionModel&amp;diff=42870</id>
		<title>Documentation/Nightly/Developers/SlicerExecutionModel</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/SlicerExecutionModel&amp;diff=42870"/>
		<updated>2015-10-07T16:10:17Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* XML Schema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Slicer Execution Model is designed to improve the acceptance and productivity of Slicer application developers. The Execution Model provides a simple mechanism for incorporating command line programs as Slicer modules. These command line modules are self-describing, emitting an XML description of its command line arguments. Slicer uses this XML description to construct a GUI for the module.&lt;br /&gt;
&lt;br /&gt;
=== Types of Slicer Plugins ===&lt;br /&gt;
&lt;br /&gt;
There are various types of plugins that Slicer supports as command line modules. This variety allows a breadth of integration choices to balance performance and flexibility.&lt;br /&gt;
&lt;br /&gt;
==== Shared object plugins (dll, so) with global symbols ====&lt;br /&gt;
&lt;br /&gt;
Shared object plugins with global symbols integrate into Slicer tighter than the Executable plugins.  Shared object plugins with global symbols can transfer data directly to/from a MRML scene using standard itk::ImageFileReader and itk::ImageFileWriter (and the ImageIO class provided with Slicer, itk::MRMLIDImageIO).  Communicating directly with the MRML scene avoids the overhead of reading and writing images to disk.  Slicer looks for a standard entry point to execute the module called ModuleEntryPoint defined as&lt;br /&gt;
&lt;br /&gt;
 int ModuleEntryPoint(int argc, char* argv[]);&lt;br /&gt;
&lt;br /&gt;
Slicer also looks for the global symbols XMLModuleDescription, ModuleLogoImage, ModuleLogoWidth, ModuleLogoHeight, ModuleLogoPixelSize, and ModuleLogoLength.  These global symbols provide the xml module description and data for the module logo. The data types for these symbols are&lt;br /&gt;
&lt;br /&gt;
          char *XMLModuleDescription;&lt;br /&gt;
 unsigned char *ModuleLogoImage;&lt;br /&gt;
           int  ModuleLogoWidth;&lt;br /&gt;
           int  ModuleLogoHeight;&lt;br /&gt;
           int  ModuleLogoPixelSize;&lt;br /&gt;
 unsigned long  ModuleLogoLength;&lt;br /&gt;
&lt;br /&gt;
These global symbols are accessed during module discovery. The ModuleLogoImage, ModuleLogoWidth, ModuleLogoHeight, ModuleLogoPixelSize, and ModuleLogoLength are optional.&lt;br /&gt;
&lt;br /&gt;
=====Controlling what symbols are exported from a shared library module=====&lt;br /&gt;
&lt;br /&gt;
Shared Object Modules are loaded into Slicer using standard &amp;quot;dlopen&amp;quot; style calls. The ModuleEntryPoint is located within the shared library and cached for later use. The ModuleEntryPoint, however, may not be the only function accessible to Slicer within the shared library. To protect against symbol clash at runtime, all functions and variables accessible within file scope of the shared library should be put in an anonymous namespace.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Use an anonymous namespace to keep class types and function names&lt;br /&gt;
// from colliding when module is used as shared object module.  Every&lt;br /&gt;
// thing should be in an anonymous namespace except for the module&lt;br /&gt;
// entry point, e.g. main() or ModuleEntryPoint()&lt;br /&gt;
//&lt;br /&gt;
namespace {&lt;br /&gt;
    // functions like DoIt() should be put in the anonymous namespace&lt;br /&gt;
    template&amp;lt;class T&amp;gt; int DoIt( int argc, char * argv[], const T&amp;amp; targ)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
} // end of anonymous namespace&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[] )&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Shared object plugins (dll, so) with entry points ====&lt;br /&gt;
&lt;br /&gt;
Shared object plugins with entry points integrate into Slicer tighter than the Executable plugins. Shared object plugins with entry points can transfer data directly to/from a MRML scene using standard itk::ImageFileReader and itk::ImageFileWriter (and the ImageIO class provided with Slicer, itk::MRMLIDImageIO). Communicating directly with the MRML scene avoids the overhead of reading and writing images to disk. Slicer looks for standard entry points for executing the module as well as for querying the module for its xml description and logos. The entry points are defined as&lt;br /&gt;
&lt;br /&gt;
           int  ModuleEntryPoint(int argc, char* argv[]);&lt;br /&gt;
          char *GetXMLModuleDescription();&lt;br /&gt;
 unsigned char *GetModuleLogo()(int *width, int *height, int *pixel_size, unsigned long *bufferLength);&lt;br /&gt;
&lt;br /&gt;
GetXMLModuleDescription() and GetModuleLogo() are accessed during module discovery. GetModuleLogo() is optional.&lt;br /&gt;
&lt;br /&gt;
==== Executable plugins with global symbols ====&lt;br /&gt;
&lt;br /&gt;
Executable plugins with global symbols allow for a single executable to be developed that can be integrated into Slicer 3 or run standalone on a cluster. Plugins of this type are opened but not executed at module discovery time.  Slicer 3 looks for the global symbols XMLModuleDescription, ModuleLogoImage, ModuleLogoWidth, ModuleLogoHeight, ModuleLogoPixelSize, and ModuleLogoLength.  The data types for these symbols are&lt;br /&gt;
 &lt;br /&gt;
          char *XMLModuleDescription;&lt;br /&gt;
 unsigned char *ModuleLogoImage;&lt;br /&gt;
           int  ModuleLogoWidth;&lt;br /&gt;
           int  ModuleLogoHeight;&lt;br /&gt;
           int  ModuleLogoPixelSize;&lt;br /&gt;
 unsigned long  ModuleLogoLength;&lt;br /&gt;
&lt;br /&gt;
These global symbols are access during module discovery. ModuleLogoImage, ModuleLogoWidth, ModuleLogoHeight, ModuleLogoPixelSize, ModuleLogoLength are optional.&lt;br /&gt;
&lt;br /&gt;
==== Executable plugins (exe) with command line options ====&lt;br /&gt;
&lt;br /&gt;
Executable plugins with command line options are the most flexible type of plugin. This approach allows for legacy applications to be integrated into Slicer using a wrapper around the legacy application.  Plugins of this type are executed at module discovery time, passing in the command line argument &amp;quot;--xml&amp;quot;. The plugin responds to the &amp;quot;--xml&amp;quot; query by emitting the xml description of the module. The plugin is also executed at module discovery time with a &amp;quot;--logo&amp;quot; command line argument. The plugin responds to the &amp;quot;--logo&amp;quot; query by emitting a logo description. &lt;br /&gt;
&lt;br /&gt;
This type of plugin allows for legacy applications to be integrated into Slicer. A developer can provide Slicer with a small executable or shell script that responds to the &amp;quot;--xml&amp;quot; and &amp;quot;--logo&amp;quot; command line arguments needed for Slicer 3 integration and otherwise spawns the legacy executable passing down any command line arguments.&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; module.exe --xml&lt;br /&gt;
 &amp;gt; module.exe --logo&lt;br /&gt;
&lt;br /&gt;
==== Script plugins with Python ====&lt;br /&gt;
&lt;br /&gt;
Python scripts are found using the discovery mechanisms for the other plugins. Since Python plugins are fundamentally different from the shared and executable plugins, they are documented on their own [[Documentation/Nightly/Developers/SlicerExecutionModel/Python|page]].&lt;br /&gt;
&lt;br /&gt;
=== Calling Command Line Modules from Other Code ===&lt;br /&gt;
&lt;br /&gt;
In addition to the automated GUI that shows up in the Slicer user interface, the Execution Model can be used to encapsulate functionality that is invoked by other parts of the program.  For instance, the Editor Module can invoke the Model Maker Module to build models.  By invoking a command line module in this way, you get the advantage of background processing with progress reporting.  See [[Documentation/Nightly/Developers/SlicerExecutionModel/Programmatic Invocation|this page]] for more details.&lt;br /&gt;
&lt;br /&gt;
=== Architecture === &lt;br /&gt;
[[Image:ExecutionModelPlugins.png|600px|Plugin architecture]]&lt;br /&gt;
[[Image:CommandLineModule.png|400px|Module architecture]]&lt;br /&gt;
[[Image:ModuleFactory.png|400px|Module factory ]]&lt;br /&gt;
[[Image:Class_parser_state_coll_graph.png|400px|Module description]]&lt;br /&gt;
&lt;br /&gt;
== Module Description ==&lt;br /&gt;
&lt;br /&gt;
Modules are described using XML. The XML is used to generate the C++ command line code and the GUI for the application.&lt;br /&gt;
&lt;br /&gt;
=== XML Schema ===&lt;br /&gt;
&lt;br /&gt;
At a minimum, each module description must contain:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;executable&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;A title&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;description&amp;gt;A description&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
   At least one parameter&lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &amp;lt;/executable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the following descriptions of each XML tag, CLP means command line processing and GUI means graphical user interface. Unless otherwise specified, tags are optional.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;executable&amp;gt; (required)&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;category&amp;gt;&lt;br /&gt;
:: Classifies the executable (e.g. Filtering, Segmentation). Category can be a ''dot'' separated string. Multiple categories can be given and should be separated by a ''semicolon''.&lt;br /&gt;
:: ''for CLP'', not used.&lt;br /&gt;
:: ''for GUI'', used on the menu selector to group executables. ''Dot'' separated strings can be used to generate sub-menus. ''Semicolon'' creates multiple categories.&lt;br /&gt;
;; &amp;lt;/category&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;title&amp;gt; (required)&lt;br /&gt;
:: A word or two describing the executable (e.g. Median Filter, Anisotropic Diffusion&lt;br /&gt;
:: ''for CLP'', not used.&lt;br /&gt;
:: ''for GUI'', used to label the frame containing the GUI for the executable. Also, GUI names for volumes use this label as a prefix.&lt;br /&gt;
;; &amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;description&amp;gt; (required)&lt;br /&gt;
:: A long description of the executable. Any double quotes will be converted to single quotes.&lt;br /&gt;
:: ''for CLP'', appears at the end of the --help.&lt;br /&gt;
:: ''for GUI'', appears in the help frame.&lt;br /&gt;
;; &amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;version&amp;gt;&lt;br /&gt;
:: The version of the command line executable. A suggested format is:&lt;br /&gt;
::: ''major''.''minor''.''patch''.''build''.''status''&lt;br /&gt;
::: where status is&lt;br /&gt;
:::: vc: version controlled (pre-alpha), build can be a serial revision number, if any (like svn might have).&lt;br /&gt;
:::: a: alpha&lt;br /&gt;
:::: b: beta&lt;br /&gt;
:::: rc: release candidate&lt;br /&gt;
:::: fcs: first customer ship&lt;br /&gt;
:: ''for CLP'', reported in response to --version.&lt;br /&gt;
:: ''for GUI'', not used.&lt;br /&gt;
;; &amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;documentation-url&amp;gt;&lt;br /&gt;
:: The location of extended documentation for the executable, (e.g. http://www.na-mic.org/foo.html).&lt;br /&gt;
;; &amp;lt;/documentation-url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;license&amp;gt;&lt;br /&gt;
:: The type of license or a url containing the license, (e.g. Berkeley, Apache, http://www.slicer.org/copyright/copyright.txt).&lt;br /&gt;
:: ''for CLP'', not used.&lt;br /&gt;
:: ''for GUI'', may show up in the Help or About section.&lt;br /&gt;
;; &amp;lt;/license&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;contributor&amp;gt;&lt;br /&gt;
:: The author(s) of the command line executable (e.g. Pieper, Jim Miller).&lt;br /&gt;
:: for ''CLP'', appears as part of --help&lt;br /&gt;
:: for ''GUI'', may show up in the Help or About section.&lt;br /&gt;
;; &amp;lt;/contributor&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;acknowledgements&amp;gt;&lt;br /&gt;
:: Acknowledgements for funding agency, employer, colleague, (e.g. This work is part of the National Alliance for Medical Image Computing NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149).&lt;br /&gt;
:: for ''CLP'', appears as part of --help&lt;br /&gt;
:: for ''GUI'', may show up in the Help of About section.&lt;br /&gt;
;; &amp;lt;/acknowledgements&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;; &amp;lt;parameters [advanced=&amp;quot;true|''false''&amp;quot;]&amp;gt; (required for each group of parameters)&lt;br /&gt;
:: Starts a group of parameters.&lt;br /&gt;
:: for ''CLP'', not used.&lt;br /&gt;
:: for ''GUI'', defines a widget (in tk, a frame) that contains other widgets. If ''advanced'' is true, the frame will be closed initially.&lt;br /&gt;
&lt;br /&gt;
;;; &amp;lt;label&amp;gt; (required)&lt;br /&gt;
::: A short string that summarizes a parameter group, (e.g. I/O, Diffusion)&lt;br /&gt;
::: for ''CLP'', not used.&lt;br /&gt;
::: for ''GUI'', used to label the frame.&lt;br /&gt;
;;; &amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;; &amp;lt;description&amp;gt; (required)&lt;br /&gt;
::: A short description of the parameter group, (e.g. Input/Output Parameters, Anitostropic Diffusion Parameters). Any double quotes will be converted to single quotes.&lt;br /&gt;
::: ''for CLP'', not used.&lt;br /&gt;
::: ''for GUI'', used in balloon help for the frame containing the parameter group.&lt;br /&gt;
;;; &amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;; &amp;lt;integer&amp;gt; | &amp;lt;float&amp;gt; | &amp;lt;double&amp;gt; | &amp;lt;boolean&amp;gt; | &amp;lt;string&amp;gt; | &amp;lt;integer-vector&amp;gt; | &amp;lt;float-vector&amp;gt; | &amp;lt;double-vector&amp;gt; | &amp;lt;string-vector&amp;gt; | &amp;lt;integer-enumeration&amp;gt; | &amp;lt;float-enumeration&amp;gt; | &amp;lt;double-enumeration&amp;gt; | &amp;lt;string-enumeration&amp;gt; | &amp;lt;file&amp;gt; | &amp;lt;directory&amp;gt; | &amp;lt;image [type=&amp;quot;''scalar''|''label''|''tensor''|''diffusion-weighted''|''vector''|''model''&amp;quot;]&amp;gt; | &amp;lt;geometry [type=&amp;quot;''fiberbundle''|''model''&amp;quot;]&amp;gt; | &amp;lt;point [multiple=&amp;quot;''true''|''false''&amp;quot;] [coordinateSystem=&amp;quot;''lps''|''ras''|''ijk''&amp;quot;]&amp;gt; | &amp;lt;region [multiple=&amp;quot;''true''|''false''&amp;quot;] [coordinateSystem=&amp;quot;''lps''|''ras''|''ijk''&amp;quot;]&amp;gt;&lt;br /&gt;
::: The type of the parameter. &lt;br /&gt;
:::: The scalar types ('''integer''', '''float''', etc.) correspond to the usual programming language types. &lt;br /&gt;
:::: The '''-vector''' types are represented by comma separated values of the scalar type. &lt;br /&gt;
:::: The '''-enumeration''' types use the '''&amp;lt;element&amp;gt;''' tag to enumerate choices of the scalar type. &lt;br /&gt;
:::: '''&amp;lt;image&amp;gt;''' is a special type that indicates that the parameter is a file name that specifies images. &lt;br /&gt;
:::: If the attribute ''multiple'' is &amp;quot;true&amp;quot;, multiple arguments are allowed for '''scalar''', '''file''', '''directory''', '''image''', '''geometry''', '''point''' and '''region''' parameters. BUG: the automatically built GUI will not support selecting multiple volumes for the '''image''' argument, but they can be passed on the command line. If the parameter has a ''flag'' or ''longflag'', then the flag may be specified multiple times on the command line. The resulting C++ variable will be a std::vector of the scalar type. If the multiple parameter does not have a flag, then multiple arguments can appear on the command line. However, a multiple parameter with no flags must be the last parameter specified.&lt;br /&gt;
:::: The attribute ''coordinateSystem'' is allowed for the parameters '''point''' and '''region'''. &lt;br /&gt;
:::: The attribute ''fileExtensions'' is allowed for '''file''', '''image''' and '''geometry'''. fileExtensions can contain a list of comma separated file extensions for optional use by the GUI. &lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;name&amp;gt; (required if longflag is not specified)&lt;br /&gt;
:::: The name of a command line argument. If name is not specified, longflag will be used (e.g. conductance, numberOfIterations). The name must be usable as a C++ variable. For example, it CANNOT have spaces or special characters and must start with a letter.&lt;br /&gt;
:::: ''for CLP'', the name of the C++ variable.&lt;br /&gt;
:::: ''for GUI'', used internally.&lt;br /&gt;
;;;; &amp;lt;/name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;description&amp;gt; (required)&lt;br /&gt;
:::: A brief description of the parameter. Any double quotes will be converted to single quotes.&lt;br /&gt;
:::: ''for CLP'', describes the parameter for --usage and --help.&lt;br /&gt;
:::: ''for GUI'', describes the parameter when the cursor is placed over the widget for the parameter (balloon help).&lt;br /&gt;
;;;; &amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;label&amp;gt; (required)&lt;br /&gt;
:::: A label for parameter (e.g. Dicom Directory, Conductance).&lt;br /&gt;
:::: ''for'' CLP, not used.&lt;br /&gt;
:::: ''for'' GUI, the label for the parameter widget.&lt;br /&gt;
;;;; &amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;default&amp;gt;&lt;br /&gt;
:::: A default value for the parameter. The default must be a type that is compatible with the parameter type. The vector parameters are specified as comma separated values of the atomic parameter type.&lt;br /&gt;
:::: ''for CLP'', contains the default for the parameter unless the parameter is a ''boolean''. The default for ''boolean'' parameters is always set to ''false''.&lt;br /&gt;
:::: ''for GUI'', contains the default for the parameter.&lt;br /&gt;
;;;; &amp;lt;/default&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;flag [alias=&amp;quot;a,b&amp;quot;] [deprecatedalias=&amp;quot;c,d&amp;quot;]&amp;gt; (not required if longflag is present)&lt;br /&gt;
:::: A single character command line flag (e.g. s, W). Can provide &amp;quot;alias&amp;quot;'s (comma separated) if different flags can be used to activate the same parameter.  Can provide &amp;quot;deprecatedalias&amp;quot;'s (comma separated) if different flags can be used to set the same parameter but the user should be notified of which &amp;quot;updated&amp;quot; flag to use. Parameters with flags are considered &amp;quot;optional&amp;quot; and do not have be specified or assigned.  Parameters with flags allow one to override a default behavior.&lt;br /&gt;
:::: ''for CLP'', used as the short flag on the command line.&lt;br /&gt;
:::: ''for GUI'', used when running the module.&lt;br /&gt;
;;;; &amp;lt;/flag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;longflag [alias=&amp;quot;foo,bar&amp;quot;] [deprecatedalias=&amp;quot;garf&amp;quot;]&amp;gt; (not required if flag is present)&lt;br /&gt;
:::: A command line flag (e.g. spacing, Watcher). Can provide &amp;quot;alias&amp;quot;'s (comma separated) if different long flags can be used to activate the same parameter.  Can provide &amp;quot;deprecatedalias&amp;quot;'s (comma separated) if different long flags can be used to set the same parameter but the user should be notified of which &amp;quot;updated&amp;quot; long flag to use. Parameters with flags are considered &amp;quot;optional&amp;quot; and do not have be specified or assigned.  Parameters with flags allow one to override a default behavior.&lt;br /&gt;
:::: Note: apparently you can't use hyphens in the longflag, so things like --my-option are not allows.  -gcs&lt;br /&gt;
:::: ''for CLP'', used as the long flag on the command line.&lt;br /&gt;
:::: ''for GUI'', used when running the module.&lt;br /&gt;
;;;; &amp;lt;/longflag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;constraints&amp;gt;&lt;br /&gt;
:::: Encloses constraints on the value of a non-vector, non-enumerated parameter.&lt;br /&gt;
:::: ''for CLP'', not used.&lt;br /&gt;
:::: ''for GUI'', if present, a slider will be created using the minimum, maximum and step specified.&lt;br /&gt;
&lt;br /&gt;
;;;;; &amp;lt;minimum&amp;gt;&lt;br /&gt;
::::: The minimum allowed value for the parameter. If not specified, the minimum is the smallest possible value for the parameter type.&lt;br /&gt;
;;;;; &amp;lt;/minimum&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;;; &amp;lt;maximum&amp;gt;&lt;br /&gt;
::::: The maximum allowed value for the parameter. If not specified, the maximum is the largest possible value for the parameter type.&lt;br /&gt;
;;;;; &amp;lt;/maximum&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;;; &amp;lt;step&amp;gt;&lt;br /&gt;
::::: The increment for the parameter.&lt;br /&gt;
;;;;; &amp;lt;/step&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;/constraints&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;channel&amp;gt; (required for file, directory and image parameters)&lt;br /&gt;
:::: Specifies whether the parameter is an input or output parameter.&lt;br /&gt;
:::: ''for CLP'', not used.&lt;br /&gt;
:::: ''for GUI'', selects the proper widget for file handling.&lt;br /&gt;
;;;; &amp;lt;/channel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;index&amp;gt; (required if there are no flags specified)&lt;br /&gt;
:::: An integer starting at 0, that specifies a command line argument that has no flags.&lt;br /&gt;
:::: Note: if you use index for, say, an image, the user must enter some input value into the GUI.  If the user does not fill in a value, the plugin is not run at all.  However, slicer will &amp;quot;seem&amp;quot; to run it, and no error message is given.  -gcs&lt;br /&gt;
:::: ''for CLP'', specifies the order of an argument that has no flags.&lt;br /&gt;
:::: ''for GUI'', used when running the module.&lt;br /&gt;
;;;; &amp;lt;/index&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;enumeration&amp;gt; (required for enumeration parameters)&lt;br /&gt;
:::: Encloses elements for the parameter. The parameter is restricted one and only one element.&lt;br /&gt;
:::: ''for CLP'', not used.&lt;br /&gt;
:::: ''for GUI'', defines a radio button with choices.&lt;br /&gt;
&lt;br /&gt;
;;;;; &amp;lt;element&amp;gt;&lt;br /&gt;
::::: Defines the choice. Must be of the proper type for a parameter.&lt;br /&gt;
::::: ''for CLP'', not used.&lt;br /&gt;
::::: ''for GUI'', used as the label for the raido button.&lt;br /&gt;
;;;;; &amp;lt;/element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;;; &amp;lt;/enumeration&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;;; &amp;lt;/integer&amp;gt; | &amp;lt;/float&amp;gt; | &amp;lt;/double&amp;gt; | &amp;lt;/boolean&amp;gt; | &amp;lt;/string&amp;gt; | &amp;lt;/integer-vector&amp;gt; | &amp;lt;/float-vector&amp;gt; | &amp;lt;/double-vector&amp;gt; | &amp;lt;/string-vector&amp;gt; | &amp;lt;/integer-enumeration&amp;gt; | &amp;lt;/float-enumeration&amp;gt; | &amp;lt;/double-enumeration&amp;gt; | &amp;lt;/string-enumeration&amp;gt; | &amp;lt;/file&amp;gt; | &amp;lt;/directory&amp;gt; | &amp;lt;/image&amp;gt; | &amp;lt;/geometry&amp;gt; | &amp;lt;/point&amp;gt; | &amp;lt;/region&amp;gt;&lt;br /&gt;
;; &amp;lt;/parameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;/executable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Slicer GUI Generation ==&lt;br /&gt;
&lt;br /&gt;
Slicer generates GUI's for each executable discovered during the startup process. Slicer searches directories stored in the Slicer Module Path. This path is set from the Slicer application in View-&amp;gt;Application Settings-&amp;gt;Modules-&amp;gt;Additional module paths. Slicer attempts to run every executable in the prescribed directories and look for a valid XML file in response to a &amp;quot;--xml&amp;quot; command line.&lt;br /&gt;
&lt;br /&gt;
Here are a few representative examples.&lt;br /&gt;
&lt;br /&gt;
=== A tour of the Execution Model XML ===&lt;br /&gt;
&lt;br /&gt;
This example is a sampler of the parameters available in the Execution Model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[[Image:ExectionModelTourGUI.png|[[Image:ExectionModelTourGUI.png]]]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;executable&amp;gt;&lt;br /&gt;
   &amp;lt;category&amp;gt;Tours&amp;lt;/category&amp;gt;&lt;br /&gt;
   &amp;lt;title&amp;gt;Execution Model Tour&amp;lt;/title&amp;gt;&lt;br /&gt;
   &amp;lt;description&amp;gt;&lt;br /&gt;
   Shows one of each type of parameter.&lt;br /&gt;
   &amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;
   &amp;lt;documentation-url&amp;gt;&amp;lt;/documentation-url&amp;gt;&lt;br /&gt;
   &amp;lt;license&amp;gt;&amp;lt;/license&amp;gt;&lt;br /&gt;
   &amp;lt;contributor&amp;gt;Daniel Blezek&amp;lt;/contributor&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Scalar Parameters&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;&lt;br /&gt;
     Variations on scalar parameters&lt;br /&gt;
     &amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;integer&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;integerVariable&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;flag&amp;gt;i&amp;lt;/flag&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;integer&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;&lt;br /&gt;
       An integer without constraints&lt;br /&gt;
       &amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Integer Parameter&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;30&amp;lt;/default&amp;gt;&lt;br /&gt;
     &amp;lt;/integer&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Scalar Parameters With Constraints&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Variations on scalar parameters&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;double&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;doubleVariable&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;flag&amp;gt;d&amp;lt;/flag&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;double&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;An double with constraints&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Double Parameter&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;30&amp;lt;/default&amp;gt;&lt;br /&gt;
       &amp;lt;constraints&amp;gt;&lt;br /&gt;
         &amp;lt;minimum&amp;gt;0&amp;lt;/minimum&amp;gt;&lt;br /&gt;
         &amp;lt;maximum&amp;gt;1.e3&amp;lt;/maximum&amp;gt;&lt;br /&gt;
         &amp;lt;step&amp;gt;0&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;/constraints&amp;gt;&lt;br /&gt;
     &amp;lt;/double&amp;gt;&lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Vector Parameters&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Variations on vector parameters&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;float-vector&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;floatVector&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;flag&amp;gt;f&amp;lt;/flag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;A vector of floats&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Float Vector Parameter&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;1.3,2,-14&amp;lt;/default&amp;gt;&lt;br /&gt;
     &amp;lt;/float-vector&amp;gt;&lt;br /&gt;
     &amp;lt;string-vector&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;stringVector&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;string_vector&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;A vector of strings&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;String Vector Parameter&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;&amp;quot;foo&amp;quot;,bar,&amp;quot;foobar&amp;quot;&amp;lt;/default&amp;gt;&lt;br /&gt;
     &amp;lt;/string-vector&amp;gt;&lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Enumeration Parameters&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Variations on enumeration parameters&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;string-enumeration&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;stringChoice&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;flag&amp;gt;e&amp;lt;/flag&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;enumeration&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;An enumeration of strings&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;String Enumeration Parameter&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;foo&amp;lt;/default&amp;gt;&lt;br /&gt;
       &amp;lt;element&amp;gt;foo&amp;lt;/element&amp;gt;&lt;br /&gt;
       &amp;lt;element&amp;gt;&amp;quot;foobar&amp;quot;&amp;lt;/element&amp;gt;&lt;br /&gt;
       &amp;lt;element&amp;gt;foofoo&amp;lt;/element&amp;gt;&lt;br /&gt;
     &amp;lt;/string-enumeration&amp;gt;&lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &amp;lt;/executable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Module with an integer-vector, one input image and one output image ===&lt;br /&gt;
&lt;br /&gt;
Here is the XML that describes the MedianImageFilter. The image on the right shows the generated Slicer 3 GUI. The help frame has been expanded by the user.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[[Image:MedianFilterGUI.png|[[Image:MedianFilterGUI.png]]]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;executable&amp;gt;&lt;br /&gt;
  &amp;lt;category&amp;gt;&lt;br /&gt;
  Filtering.Denoising&lt;br /&gt;
  &amp;lt;/category&amp;gt;&lt;br /&gt;
  &amp;lt;title&amp;gt;&lt;br /&gt;
  Median Filter&lt;br /&gt;
  &amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;description&amp;gt;&lt;br /&gt;
The MedianImageFilter is commonly used as a robust approach for&lt;br /&gt;
noise reduction. This filter is particularly efficient against&lt;br /&gt;
&amp;quot;salt-and-pepper&amp;quot; noise. In other words, it is robust to the presence&lt;br /&gt;
of gray-level outliers. MedianImageFilter computes the value of each output&lt;br /&gt;
pixel as the statistical median of the neighborhood of values around the&lt;br /&gt;
corresponding input pixel.&lt;br /&gt;
  &amp;lt;/description&amp;gt;&lt;br /&gt;
  &amp;lt;version&amp;gt;0.1.0.$Revision: 2085 $(alpha)&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;documentation-url&amp;gt;&amp;lt;/documentation-url&amp;gt;&lt;br /&gt;
  &amp;lt;license&amp;gt;&amp;lt;/license&amp;gt;&lt;br /&gt;
  &amp;lt;contributor&amp;gt;Bill Lorensen&amp;lt;/contributor&amp;gt;&lt;br /&gt;
  &amp;lt;acknowledgements&amp;gt;This command module was derived from&lt;br /&gt;
Insight/Examples/Filtering/MedianImageFilter (copyright) Insight Software Consortium&lt;br /&gt;
  &amp;lt;/acknowledgements&amp;gt;&lt;br /&gt;
  &amp;lt;parameters&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;Median Filter Parameters&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Parameters for the median filter&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;integer-vector&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;neighborhood&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;longflag&amp;gt;--neighborhood&amp;lt;/longflag&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;The size of the neighborhood in each dimension&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Neighborhood Size&amp;lt;/label&amp;gt;&lt;br /&gt;
      &amp;lt;default&amp;gt;1,1,1&amp;lt;/default&amp;gt;&lt;br /&gt;
    &amp;lt;/integer-vector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/parameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;parameters&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;IO&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Input/output parameters&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;image&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;inputVolume&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Input Volume&amp;lt;/label&amp;gt;&lt;br /&gt;
      &amp;lt;channel&amp;gt;input&amp;lt;/channel&amp;gt;&lt;br /&gt;
      &amp;lt;index&amp;gt;0&amp;lt;/index&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;Input volume to be filtered&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;/image&amp;gt;&lt;br /&gt;
    &amp;lt;image&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;outputVolume&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Output Volume&amp;lt;/label&amp;gt;&lt;br /&gt;
      &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
      &amp;lt;index&amp;gt;1&amp;lt;/index&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;Output filtered&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;/image&amp;gt;&lt;br /&gt;
  &amp;lt;/parameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/executable&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Module with a multiple scalars, one Input image and one output image ===&lt;br /&gt;
&lt;br /&gt;
A module with&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[[Image:AnisotropicDiffusionFilterGUI.png|[[Image:AnisotropicDiffusionFilterGUI.png]]]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;executable&amp;gt;&lt;br /&gt;
   &amp;lt;category&amp;gt;filtering&amp;lt;/category&amp;gt;&lt;br /&gt;
   &amp;lt;title&amp;gt;Anisotropic Diffusion&amp;lt;/title&amp;gt;&lt;br /&gt;
   &amp;lt;description&amp;gt;&lt;br /&gt;
   Runs anisotropic diffusion on a volume&lt;br /&gt;
   &amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;
   &amp;lt;documentation-url&amp;gt;&amp;lt;/documentation-url&amp;gt;&lt;br /&gt;
   &amp;lt;license&amp;gt;&amp;lt;/license&amp;gt;&lt;br /&gt;
   &amp;lt;contributor&amp;gt;Bill Lorensen&amp;lt;/contributor&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;&lt;br /&gt;
     Anisotropic Diffusion Parameters&lt;br /&gt;
     &amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;&lt;br /&gt;
     Parameters for the anisotropic&lt;br /&gt;
     diffusion algorithm&lt;br /&gt;
     &amp;lt;/description&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;double&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;conductance&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;conductance&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Conductance&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Conductance&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;1&amp;lt;/default&amp;gt;&lt;br /&gt;
       &amp;lt;constraints&amp;gt;&lt;br /&gt;
         &amp;lt;minimum&amp;gt;0&amp;lt;/minimum&amp;gt;&lt;br /&gt;
         &amp;lt;maximum&amp;gt;10&amp;lt;/maximum&amp;gt;&lt;br /&gt;
         &amp;lt;step&amp;gt;.01&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;/constraints&amp;gt;&lt;br /&gt;
     &amp;lt;/double&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;double&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;timeStep&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;timeStep&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Time Step&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Time Step&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;0.0625&amp;lt;/default&amp;gt;&lt;br /&gt;
       &amp;lt;constraints&amp;gt;&lt;br /&gt;
         &amp;lt;minimum&amp;gt;.001&amp;lt;/minimum&amp;gt;&lt;br /&gt;
         &amp;lt;maximum&amp;gt;1&amp;lt;/maximum&amp;gt;&lt;br /&gt;
         &amp;lt;step&amp;gt;.001&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;/constraints&amp;gt;&lt;br /&gt;
     &amp;lt;/double&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;integer&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;numberOfIterations&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;longflag&amp;gt;iterations&amp;lt;/longflag&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Number of iterations&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Iterations&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;default&amp;gt;1&amp;lt;/default&amp;gt;&lt;br /&gt;
       &amp;lt;constraints&amp;gt;&lt;br /&gt;
         &amp;lt;minimum&amp;gt;1&amp;lt;/minimum&amp;gt;&lt;br /&gt;
         &amp;lt;maximum&amp;gt;30&amp;lt;/maximum&amp;gt;&lt;br /&gt;
         &amp;lt;step&amp;gt;1&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;/constraints&amp;gt;&lt;br /&gt;
     &amp;lt;/integer&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;parameters&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;IO&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Input/output parameters&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;image&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;inputVolume&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Input Volume&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;channel&amp;gt;input&amp;lt;/channel&amp;gt;&lt;br /&gt;
       &amp;lt;index&amp;gt;0&amp;lt;/index&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Input volume to be filtered&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;/image&amp;gt;&lt;br /&gt;
     &amp;lt;image&amp;gt;&lt;br /&gt;
       &amp;lt;name&amp;gt;outputVolume&amp;lt;/name&amp;gt;&lt;br /&gt;
       &amp;lt;label&amp;gt;Output Volume&amp;lt;/label&amp;gt;&lt;br /&gt;
       &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
       &amp;lt;index&amp;gt;1&amp;lt;/index&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Output filtered&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;/image&amp;gt;&lt;br /&gt;
   &amp;lt;/parameters&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/executable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Module with output text presented in GUI ===&lt;br /&gt;
&lt;br /&gt;
Slicer auto generates GUI to display output from the command line module after execution is complete.&lt;br /&gt;
The flag [--returnparameterfile &amp;lt;file name&amp;gt;] is used to provide a name of a file that the module uses to store key=value pairs that are displayed in the Slicer GUI. The keys are described in the command line module xml schema using the output channel.&lt;br /&gt;
&lt;br /&gt;
This example demonstrates a portion of an XML schema containing  1 string-enumeration input and 7 string outputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[[Image:RadnosticsBetaOsteoporosisAnalysisGUI.png|[[Image:RadnosticsBetaOsteoporosisAnalysisGUI.png]]]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;parameters&amp;gt;&lt;br /&gt;
   &amp;lt;label&amp;gt;Radnostics Beta Osteoporosis Analysis&amp;lt;/label&amp;gt;&lt;br /&gt;
   &amp;lt;string-enumeration&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;Osteoporosis&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;longflag&amp;gt;--osteoporosis&amp;lt;/longflag&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;After Segmentation Perform Osteoporosis Analysis&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Osteoporosis Analysis will provide a Radnostics Osteoporosis score for the patient.&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;default&amp;gt;yes&amp;lt;/default&amp;gt;&lt;br /&gt;
     &amp;lt;element&amp;gt;yes&amp;lt;/element&amp;gt;&lt;br /&gt;
     &amp;lt;element&amp;gt;no&amp;lt;/element&amp;gt;&lt;br /&gt;
   &amp;lt;/string-enumeration&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;PatientGender&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Gender&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Patient Gender&amp;lt;/description&amp;gt;		  &lt;br /&gt;
     &amp;lt;default&amp;gt;na&amp;lt;/default&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;		&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;PatientAge&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Age&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Patient Age&amp;lt;/description&amp;gt;		  &lt;br /&gt;
     &amp;lt;default&amp;gt;na&amp;lt;/default&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;		&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;RadnosticsOsteoporosisScore&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Radnostics Osteoporosis Score&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Radnostics Osteoporosis Score&amp;lt;/description&amp;gt;		  &lt;br /&gt;
     &amp;lt;default&amp;gt;na&amp;lt;/default&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;		&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;OsteoporosisComment1&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;*&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Comment 1&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;OsteoporosisComment2&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;*&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Comment 2&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;OsteoporosisComment3&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;*&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Comment 3&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;OsteoporosisComment4&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;channel&amp;gt;output&amp;lt;/channel&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;*&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Comment 4&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;/string&amp;gt;&lt;br /&gt;
 &amp;lt;/parameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 The command line module outputs key=value pairs to the file supplied by –-returnparameterfile as shown below:&lt;br /&gt;
    PatientGender = F &lt;br /&gt;
    PatientAge = 059Y&lt;br /&gt;
    RadnosticsOsteoporosisScore = 8 (high)&lt;br /&gt;
    OsteoporosisComment1 = vertebra label 58 has biconcave fracture&lt;br /&gt;
    OsteoporosisComment2 = vertebra label 56 has mean density of 120 HU&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Command Line Parsing ==&lt;br /&gt;
&lt;br /&gt;
The Slicer Execution Model has support for parsing executable command lines. The C++ code to parse the command line arguments is generated automatically from the same XML description that generates the GUI. ''GenerateCLP,'' located in ''SlicerExecutionModel/GenerateCLP'' reads the XML Module Description and creates an include file ''&amp;quot;Executable&amp;quot;CLP.h'' in the build tree. The executable includes this header file and accesses the code with the macro PARSE_ARGS.&lt;br /&gt;
&lt;br /&gt;
GenerateCLP provides the following to the executable:&lt;br /&gt;
&lt;br /&gt;
# A brief usage command if required arguments are missing&lt;br /&gt;
# A full help command if ''-h'' or ''--help'' is specified on the command line&lt;br /&gt;
# A copy of the xml description if ''--xml'' is specified on the command line&lt;br /&gt;
# An echo of the command line parameters and their values if ''--echo'' is specified&lt;br /&gt;
&lt;br /&gt;
GenerateCLP provides the following source code:&lt;br /&gt;
&lt;br /&gt;
# A C++ declaration of the proper type for each parameter assigning the default value if specified by the XML&lt;br /&gt;
# For ''-vector'' parameters, a ''std::vector'' containing the proper C++ type fo the parameter. The generated code parses the comma separated strings to generate the ''std::vector''&lt;br /&gt;
&lt;br /&gt;
=== Using GenerateCLP ===&lt;br /&gt;
&lt;br /&gt;
GenerateCLP is normally used via CMake where it is implemented as a CUSTOM_COMMAND. To use GenerateCLP from CMake, you must first include the GenerateCLP package from your CMakeLists.txt file, which will make some macros available to you:&lt;br /&gt;
&lt;br /&gt;
  find_package(SlicerExecutionModel REQUIRED)&lt;br /&gt;
  include(${SlicerExecutionModel_USE_FILE})&lt;br /&gt;
&lt;br /&gt;
Note that the HelloSlicer command line module example provides a good starting point and can be used as a skeleton to build your own. It can be found in the [http://na-mic.org/ViewVC/index.cgi/trunk/Modules/CommandLineModule/Testing/HelloSlicer/?sortby=file#dirlist Modules/CommandLineModule/Testing/HelloSlicer] subdirectory.&lt;br /&gt;
&lt;br /&gt;
For each executable, include the following, replacing '''MyFilter''' with the name of your C++ source:&lt;br /&gt;
&lt;br /&gt;
  set('''MyFilter'''_SOURCE '''MyFilter'''.cxx)&lt;br /&gt;
  GENERATECLP('''MyFilter'''_SOURCE '''MyFilter'''.xml)&lt;br /&gt;
&lt;br /&gt;
To generate a stand-alone executable add the lines:&lt;br /&gt;
&lt;br /&gt;
  add_executable('''MyFilter''' ${'''MyFilter'''_SOURCE})&lt;br /&gt;
  target_link_libraries('''MyFilter''' ${ITK_LIBRARIES})&lt;br /&gt;
&lt;br /&gt;
Slicer expects modules and plugins to be stored in a specific subdirectory, so that they can be discovered and loaded at run-time. To make sure your CLP module is built in said subdirectory, add the line:&lt;br /&gt;
&lt;br /&gt;
  SEMMacroBuildCLI(&lt;br /&gt;
    NAME '''MyFilter'''&lt;br /&gt;
    LOGO_HEADER ${Slicer_SOURCE_DIR}/Resources/NAMICLogo.h&lt;br /&gt;
    ADDITIONAL_SRCS&lt;br /&gt;
      '''MyFilter'''.cxx&lt;br /&gt;
    TARGET_LIBRARIES ModuleDescriptionParser ${ITK_LIBRARIES} vtkTeem MRMLCore SlicerBaseCLI ${VTK_LIBRARIES}&lt;br /&gt;
    INCLUDE_DIRECTORIES&lt;br /&gt;
      ${vtkTeem_INCLUDE_DIRS}&lt;br /&gt;
      ${MRMLCore_INCLUDE_DIRS}&lt;br /&gt;
      ${vtkITK_INCLUDE_DIRS}&lt;br /&gt;
      ${SlicerBaseCLI_SOURCE_DIR} ${SlicerBaseCLI_BINARY_DIR}&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
The add_executable target creates a stand-alone executable that can be run from a command line. The add_library target creates a shared library that is discovered at Slicer 3 startup.&lt;br /&gt;
&lt;br /&gt;
Although this example linked to ITK libraries, other libraries can be specified.&lt;br /&gt;
&lt;br /&gt;
=== Short Example ===&lt;br /&gt;
&lt;br /&gt;
This example uses the XML for the [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation#Module_with_an_integer-vector.2C_one_input_image_and_one_output_image|Median Image Filter example].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' The program '''MUST NOT''' write anything to stdout before the ''PARSE_ARGS'' statement. If something is written, the plugin discovery mechanism will not recognize the program as a plugin.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#include &amp;quot;MedianImageFilterCLP.h&amp;quot;&lt;br /&gt;
 int main (int argc, char * argv[])&lt;br /&gt;
  {&lt;br /&gt;
  PARSE_ARGS;&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; &amp;quot;The size of the neighborhood is: &amp;quot; &amp;lt;&amp;lt; neighborhood.size()&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; and the first element of the neighborhood is: &amp;quot; &amp;lt;&amp;lt; neighborhood[0]&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; &amp;quot;The input volume is: &amp;quot; &amp;lt;&amp;lt; inputVolume &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; &amp;quot;The output volume is: &amp;quot; &amp;lt;&amp;lt; outputVolume &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  return EXIT_SUCCESS;&lt;br /&gt;
  }&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the output --help:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
USAGE: &lt;br /&gt;
&lt;br /&gt;
   ./MedianImageFilter  [--processinformationaddress &amp;lt;std::string&amp;gt;] [--xml]&lt;br /&gt;
                        [--echo] [--neighborhood &amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt;] [--]&lt;br /&gt;
                        [--version] [-h] &amp;lt;std::string&amp;gt; &amp;lt;std::string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where: &lt;br /&gt;
&lt;br /&gt;
   --processinformationaddress &amp;lt;std::string&amp;gt;&lt;br /&gt;
     Address of a structure to store process information (progress, abort,&lt;br /&gt;
     etc.). (default: 0)&lt;br /&gt;
&lt;br /&gt;
   --xml&lt;br /&gt;
     Produce xml description of command line arguments (default: 0)&lt;br /&gt;
&lt;br /&gt;
   --echo&lt;br /&gt;
     Echo the command line arguments (default: 0)&lt;br /&gt;
&lt;br /&gt;
   --neighborhood &amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt;&lt;br /&gt;
     The size of the neighborhood in each dimension (default: 1,1,1)&lt;br /&gt;
&lt;br /&gt;
   --,  --ignore_rest&lt;br /&gt;
     Ignores the rest of the labeled arguments following this flag.&lt;br /&gt;
&lt;br /&gt;
   --version&lt;br /&gt;
     Displays version information and exits.&lt;br /&gt;
&lt;br /&gt;
   -h,  --help&lt;br /&gt;
     Displays usage information and exits.&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;std::string&amp;gt;&lt;br /&gt;
     (required)  Input volume to be filtered&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;std::string&amp;gt;&lt;br /&gt;
     (required)  Output filtered&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   The MedianImageFilter is commonly used as a robust approach for noise&lt;br /&gt;
   reduction. This filter is particularly efficient against&lt;br /&gt;
   'salt-and-pepper' noise. In other words, it is robust to the presence of&lt;br /&gt;
   gray-level outliers. MedianImageFilter computes the value of each output&lt;br /&gt;
   pixel as the statistical median of the neighborhood of values around the&lt;br /&gt;
   corresponding input pixel.&lt;br /&gt;
&lt;br /&gt;
   Author(s): Bill Lorensen&lt;br /&gt;
&lt;br /&gt;
   Acknowledgements: This command module was derived from&lt;br /&gt;
   Insight/Examples/Filtering/MedianImageFilter (copyright) Insight&lt;br /&gt;
   Software Consortium&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parameters and C++ code ===&lt;br /&gt;
&lt;br /&gt;
This table shows how parameters are defined in the C++ code and how they are specified on the command line.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! XML&lt;br /&gt;
! C++ Declaration&lt;br /&gt;
! Command Line&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;integer&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;count&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;flag&amp;gt;c&amp;lt;/flag&amp;gt; &amp;lt;/integer&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
int count;&lt;br /&gt;
|&lt;br /&gt;
''prog'' -c 10&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;float&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;stepSize&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;default&amp;gt;.0625&amp;lt;/default&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;longflag&amp;gt;stepSize&amp;lt;/longflag&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/float&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
float stepSize=.0625;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --stepSize .003&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;integer multiple=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;iterations&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;flag&amp;gt;i&amp;lt;/flag&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;default&amp;gt;100&amp;lt;/default&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/integer&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::vector&amp;lt;int&amp;gt; iterations;&amp;lt;br /&amp;gt; iterations.push_back(100);&amp;lt;br /&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
''prog'' -i 20 -i 30 -i 100&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;float-vector&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;variation&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;flag&amp;gt;v&amp;lt;/flag&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;default&amp;gt;1,2,3&amp;lt;/default&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/float-vector&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::vector&amp;lt;float&amp;gt; variation; iterations.push_back(1);&amp;lt;br /&amp;gt; iterations.push_back(2);&amp;lt;br /&amp;gt; iterations.push_back(3);&amp;lt;br /&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
''prog'' -v 10,20,3&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;string-vector&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;sites&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;longflag&amp;gt;sites&amp;lt;/longflag&amp;gt; &amp;lt;/string-vector&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::vector&amp;lt;std::string&amp;gt; sites;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --sites BWH,GE,Kitware,UNC,MIT,UTAH,GT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;string-enumeration&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;leaders&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;default&amp;gt;Bill&amp;lt;/default&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;element&amp;gt;Ron&amp;lt;/element&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;element&amp;gt;Bill&amp;lt;/element&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;element&amp;gt;Steve&amp;lt;/element&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/string-enumeration&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::string leaders = &amp;quot;Bill&amp;quot;;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --leaders Ron&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;boolean&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;debugSwitch&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;flag&amp;gt;d&amp;lt;/flag&amp;gt; &amp;lt;default&amp;gt;true&amp;lt;/default&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/boolean&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
bool debugSwitch = true;&lt;br /&gt;
|&lt;br /&gt;
''prog'' -d&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;file&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;longflag&amp;gt;file1&amp;lt;/longflag&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;file&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::string file1;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --file1 mytext.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;image&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;image&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;index&amp;gt;0&amp;lt;/index&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/image&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::string image;&lt;br /&gt;
|&lt;br /&gt;
''prog'' c:/lorensen/Data/ct.nrrd&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;file multiple=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;args&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;index&amp;gt;1&amp;lt;/index&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/file&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::vector&amp;lt;std::string&amp;gt; args;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --otherFlags file1 file2 ... filen&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;point multiple=&amp;quot;true&amp;quot; coordinateSystem=&amp;quot;ras&amp;quot;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;seed&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;longflag&amp;gt;--seed&amp;lt;/longflag&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
std::vector&amp;lt;std::vector&amp;lt;float&amp;gt; &amp;gt; seed;&lt;br /&gt;
|&lt;br /&gt;
''prog'' --seed 10,100,23 --seed 5,240,17&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Accessing Module Information at Runtime ==&lt;br /&gt;
&lt;br /&gt;
All of the information contained in the XML description of a module can be accessed at run-time by the command line program. The ''ModuleDescriptionParser'' class library can parse an XML module description and populate a ''ModuleDescription'' instance.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Module Description Parser Class Library&lt;br /&gt;
#include &amp;quot;ModuleDescriptionParser.h&amp;quot;&lt;br /&gt;
#include &amp;quot;ModuleDescription.h&amp;quot;&lt;br /&gt;
#include &amp;quot;ModuleParameterGroup.h&amp;quot;&lt;br /&gt;
#include &amp;quot;ModuleParameter.h&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
// Create a module and a parser&lt;br /&gt;
    ModuleDescription module;&lt;br /&gt;
    ModuleDescriptionParser parser;&lt;br /&gt;
// Parse the XML&lt;br /&gt;
    if (parser.Parse(GetXMLModuleDescription(), module))&lt;br /&gt;
      {&lt;br /&gt;
      std::cerr &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;: One or more XML errors detected.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
      return EXIT_FAILURE;&lt;br /&gt;
      }&lt;br /&gt;
// Access the module description information&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Module Description Information&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tCategory is: &amp;quot; &amp;lt;&amp;lt; module.GetCategory() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tTitle is: &amp;quot; &amp;lt;&amp;lt; module.GetTitle() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tDescription is: &amp;quot; &amp;lt;&amp;lt; module.GetDescription() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tVersion is: &amp;quot; &amp;lt;&amp;lt; module.GetVersion() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tDocumentationURL is: &amp;quot; &amp;lt;&amp;lt; module.GetDocumentationURL() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tLicense is: &amp;quot; &amp;lt;&amp;lt; module.GetLicense() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\tContributor is: &amp;quot; &amp;lt;&amp;lt; module.GetContributor() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''GetXMLModuleDescription'' is automatically generated by ''GenerateCLP''. Information about parameter groups and parameters is also available [[Accessing_Module_Information_at_Runtime|here]].&lt;br /&gt;
&lt;br /&gt;
The ''CMakeLists.txt'' file that creates the command line module should point to the ''ModuleDescriptionParser'' library.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
target_link_libraries(${CLP}&lt;br /&gt;
    ModuleDescriptionParser&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
GenerateCLP attempts to do error checking so that the generated C++ code will compile. These errors will show up as custom command errors during the build process.&lt;br /&gt;
&lt;br /&gt;
* XML Errors&lt;br /&gt;
** ''mismatched tag at line xx'' : The closing tag (a tag with &amp;lt;/ &amp;gt;) does not have a matching opening tag.&lt;br /&gt;
** ''not well-formed (invalid token) at line xx'' : Probably a blank in the token name.&lt;br /&gt;
* ModuleDescriptionParser Errors&lt;br /&gt;
** ''&amp;lt;executable&amp;gt; must be the outer most tag''&lt;br /&gt;
** ''&amp;lt;executable&amp;gt; was found inside another tag''&lt;br /&gt;
** ''&amp;lt;parameters&amp;gt; can only be inside &amp;lt;executable&amp;gt;''&lt;br /&gt;
** ''&amp;lt;xxx&amp;gt; can only be used inside &amp;lt;parameters&amp;gt;''&lt;br /&gt;
** ''&amp;lt;flag&amp;gt; can only contain one character''&lt;br /&gt;
** ''&amp;lt;longname&amp;gt; can only contain letters, numbers and underscores and must start with an _ or letter''&lt;br /&gt;
** ''&amp;lt;name&amp;gt; can only contain letters, numbers and underscores and must start with an _ or letter''&lt;br /&gt;
&lt;br /&gt;
* ModuleDescriptionParser Warnings&lt;br /&gt;
** ''&amp;lt;xxx&amp;gt; is an unknown parameter tag'' : Probably a misspelled parameter type.&lt;br /&gt;
&lt;br /&gt;
* Compiler Errors&lt;br /&gt;
** The generated C++ code may have syntax errors if invalid defaults are specified. These will show up during the C++ compilation.&lt;br /&gt;
&lt;br /&gt;
== Interfacing Legacy Executables ==&lt;br /&gt;
&lt;br /&gt;
GenerateCLP is only provided as a convenience. Users can use the same XML Module Description to interface C++, shell scripts, tcl programs and even Matlab.&lt;br /&gt;
&lt;br /&gt;
Example: [http://www.slicer.org/slicerWiki/index.php/Slicer3:FiberTrackingIntegration FiberTracking Integration]&lt;br /&gt;
&lt;br /&gt;
== Showing Progress in an Application ==&lt;br /&gt;
&lt;br /&gt;
Programs can communicate progress to the user in two ways. If the program is running an a stand-alone executable, it communicates with a simple XML syntax. If the program is loaded at run-time as a plugin library, it communicates through a C structure.&lt;br /&gt;
&lt;br /&gt;
The XML syntax is:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;filter-start&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;&lt;br /&gt;
  ''name of program section or algorithm''&lt;br /&gt;
  &amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-comment&amp;gt;&lt;br /&gt;
  ''description of program section or algorithm''&lt;br /&gt;
  &amp;lt;/filter-comment&amp;gt;&lt;br /&gt;
 &amp;lt;/filter-start&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;filter-progress&amp;gt;&lt;br /&gt;
 ''floating number from 0 to 1''&lt;br /&gt;
 &amp;lt;/filter-progress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;filter-end&amp;gt;&lt;br /&gt;
  &amp;lt;filter-name&amp;gt;&lt;br /&gt;
  ''name of program section or algorithm''&lt;br /&gt;
  &amp;lt;/filter-name&amp;gt;&lt;br /&gt;
  &amp;lt;filter-time&amp;gt;&lt;br /&gt;
  ''execution time''&lt;br /&gt;
  &amp;lt;/filter-time&amp;gt;&lt;br /&gt;
 &amp;lt;/filter-end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The C structure that library plugins use is:&lt;br /&gt;
&lt;br /&gt;
 extern &amp;quot;C&amp;quot; {&lt;br /&gt;
  struct ModuleProcessInformation&lt;br /&gt;
  {&lt;br /&gt;
    /** Inputs from calling application to the module **/&lt;br /&gt;
    unsigned char Abort;&lt;br /&gt;
    /** Outputs from the module to the calling application **/&lt;br /&gt;
    float Progress;&lt;br /&gt;
    char  ProgressMessage[1024];&lt;br /&gt;
    void (*ProgressCallbackFunction)(void *);&lt;br /&gt;
    void *ProgressCallbackClientData;&lt;br /&gt;
    double ElapsedTime;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Details on how to use this mechanism are illustrated in [https://github.com/Slicer/Slicer/blob/master/Base/CLI/itkPluginFilterWatcher.h itkPluginFilterWatcher.h].&lt;br /&gt;
&lt;br /&gt;
For vtk and itk execution model programs, two classes are available that make it simple to add progress. The classes, ''vtkPluginFilterWatcher'' and ''itk::PluginFilterWatcher'' use the vtk and itk command/observer mechanism to report progress.&lt;br /&gt;
&lt;br /&gt;
vtkPluginFilterWatcher (vtkAlgorithm *'''filter''', const char* '''comment''', ModuleProcessInformation *'''inf''', double '''fraction''', double '''start''') &amp;lt;br /&amp;gt; itk::PluginFilterWatcher (itk::ProcessObject '''filter''', const char* '''comment''', ModuleProcessInformation *'''inf''', double '''fraction''', double '''start''')&lt;br /&gt;
&lt;br /&gt;
: where:&lt;br /&gt;
;; filter &lt;br /&gt;
:: is the vtkAlgorithm or itk::ProcessObject to be watched.&lt;br /&gt;
;; comment &lt;br /&gt;
:: is a string that describes the algorithm.&lt;br /&gt;
;; inf &lt;br /&gt;
:: is an optional pointer to a structure that is used to communicate with the invoking program when the called program is used as a library plugin. If the pointer is 0, this prgram will not report progress if it is run as a library plugin. Default is 0.&lt;br /&gt;
;; fraction &lt;br /&gt;
:: is the fraction (0-1) of progress that will be reported by this watcher. This is used when multiple filters are run and each filter represents a proportion of the total progress. Default is 1.&lt;br /&gt;
;; start &lt;br /&gt;
:: is the offset (0-1) of the progress for this filter. This is added to the progress of the filter. The reported progress of the watched filter is ''start + fraction * filter_progress''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; The following example produces progress for a simple vtk program. The variable CLPProcessInformation is automatically declared and set in the program's ''program''CLP.h file.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#include &amp;quot;vtkPluginFilterWatcher.h&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
  vtkMarchingCubes *cubes = vtkMarchingCubes::New();&lt;br /&gt;
    cubes-&amp;gt;SetInput(reader-&amp;gt;GetOutput());&lt;br /&gt;
  vtkPluginFilterWatcher watchCubes(cubes, &amp;quot;Generate Isosurface&amp;quot;, CLPProcessInformation, .5, 0.0);&lt;br /&gt;
  vtkDecimatePro *decimate = vtkDecimatePro::New();&lt;br /&gt;
    decimate-&amp;gt;SetInput(cubes-&amp;gt;GetOutput());&lt;br /&gt;
  vtkPluginFilterWatcher watchDecimate(decimate, &amp;quot;Reduce Triangle Count&amp;quot;, CLPProcessInformation, .5, 0.5);&lt;br /&gt;
  decimate-&amp;gt;Update();&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following example produces progress for a simple itk program:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#include &amp;quot;itkPluginFilterWatcher.h&lt;br /&gt;
 ...&lt;br /&gt;
 typedef itk::MedianImageFilter&amp;lt;ImageType,ImageType&amp;gt; FilterType;&lt;br /&gt;
 FilterType::Pointer median  = FilterType::New();&lt;br /&gt;
 itk::PluginFilterWatcher watchMedian(median, &amp;quot;Denoise Image&amp;quot;, CLPProcessInformation);&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding Module Logos to Slicer ==&lt;br /&gt;
Slicer plugins, both libraries and executables, can specify plugin-specific logos. These appear in Slicer when a module is selected. The logos are specified in a .h header file. The KWWidget utility, KWConvertImageToHeader, converts a .png file into a .h header file containing the encoded image and additional information such as width, height and pixel size. [[Documentation-3.5#Requirements_for_Modules|See here for additional information.]]&lt;br /&gt;
&lt;br /&gt;
For Slicer, execution model plugin logos are stored in Modules/CLI/Resources. The corresponding image in .png format should be stored in Modules/CLI/ImageData. Othere plugins, created outside the Slicer tree, should store the logo and image in a similar location.&lt;br /&gt;
&lt;br /&gt;
To add a logo to a plugin:&lt;br /&gt;
* Create a png image of the logo. The height of the logo should not exceed 40 pixels.&lt;br /&gt;
* Convert the logo to the KWWidget icon format as follows. '''NOTE:''' the prefix of the image and header file must be the same for a plugin logo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd Modules/CLI&lt;br /&gt;
KWConvertImageToHeader --base64 --zlib Resources/ITKLogo.h ImageData/ITKLogo.png&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add the logo to the SEMMacroBuildCLImacro in the CMakeLists.txt file for the plugin using LOGO_HEADER parameter.&lt;br /&gt;
&lt;br /&gt;
=== Runtime specification of filter types ===&lt;br /&gt;
&lt;br /&gt;
ITK filters are templated over the images they process. The following code snippet shows how an execution model program can select the image types for filters based on the input images.&lt;br /&gt;
&lt;br /&gt;
First, include the utilites for plugin's:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;itkPluginUtilities.h&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, turn your main program into a templated procedure called ''DoIt'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template&amp;lt;class T&amp;gt; int DoIt( int argc, char * argv[], T )&lt;br /&gt;
{&lt;br /&gt;
  PARSE_ARGS;&lt;br /&gt;
&lt;br /&gt;
  typedef itk::Image&amp;lt; T, 3 &amp;gt;   InputImageType;&lt;br /&gt;
  typedef itk::Image&amp;lt; T, 3 &amp;gt;   OutputImageType;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, create a main program that gets the native component type from one of the input file. Here that input file is ''inputVolume'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main( int argc, char * argv[] )&lt;br /&gt;
{&lt;br /&gt;
  &lt;br /&gt;
  PARSE_ARGS;&lt;br /&gt;
&lt;br /&gt;
  itk::ImageIOBase::IOPixelType pixelType;&lt;br /&gt;
  itk::ImageIOBase::IOComponentType componentType;&lt;br /&gt;
&lt;br /&gt;
  try&lt;br /&gt;
    {&lt;br /&gt;
    itk::GetImageType (inputVolume, pixelType, componentType);&lt;br /&gt;
&lt;br /&gt;
    // This filter handles all types&lt;br /&gt;
    &lt;br /&gt;
    switch (componentType)&lt;br /&gt;
      {&lt;br /&gt;
      case itk::ImageIOBase::UCHAR:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;unsigned char&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::CHAR:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;char&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::USHORT:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;unsigned short&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::SHORT:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;short&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::UINT:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;unsigned int&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::INT:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;int&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::ULONG:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;unsigned long&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::LONG:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;long&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::FLOAT:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;float&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::DOUBLE:&lt;br /&gt;
        return DoIt( argc, argv, static_cast&amp;lt;double&amp;gt;(0));&lt;br /&gt;
        break;&lt;br /&gt;
      case itk::ImageIOBase::UNKNOWNCOMPONENTTYPE:&lt;br /&gt;
      default:&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;unknown component type&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  catch( itk::ExceptionObject &amp;amp;excep)&lt;br /&gt;
    {&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;: exception caught !&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cerr &amp;lt;&amp;lt; excep &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
  return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Behind the Scenes ==&lt;br /&gt;
&lt;br /&gt;
A primary goal of the execution model is to relieve developers from developing GUI code and command line parsing code. This section describes the major components of the execution model implementation.&lt;br /&gt;
&lt;br /&gt;
=== Command Line Processing ===&lt;br /&gt;
&lt;br /&gt;
Command line processing parses command line arguments and populates internal program variables. Every Unix (and windows) program can receive an argument list through its main entry point. All C and C++ programmers are familiar with the ''int main (int argc, char *[] argv)'' entry point in their programs. Most computer languages including scripting languages provide a similar mechanism to retrieve command line arguments. Simple command line processing directly accesses the strings defined in argv.&lt;br /&gt;
&lt;br /&gt;
This snippet shows simple commmand line processing:&lt;br /&gt;
&lt;br /&gt;
 int main (int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
   if (argc &amp;lt; 2)&lt;br /&gt;
     {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; &amp;quot;Usage: &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot; filename&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
     return -1;&lt;br /&gt;
     }&lt;br /&gt;
   std::cout &amp;lt;&amp;lt; &amp;quot;The File is &amp;quot; &amp;lt;&amp;lt; argv[1] &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The simple approach works great for a small number of arguments. But larger numbers of arguments of varying types quickly make the processing code more complex and subject to error, both in coding and usage.&lt;br /&gt;
&lt;br /&gt;
 int main (int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
   if (argc &amp;lt; 5)&lt;br /&gt;
     {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; &amp;quot;Usage: &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot; iterations epsilon inputfile outputfile &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
     return -1;&lt;br /&gt;
     }&lt;br /&gt;
   std::string inputfile(argv[3]);&lt;br /&gt;
   std::string outputfile(argv[4]);&lt;br /&gt;
   unsigned int iterations = atoi(argv[1]);&lt;br /&gt;
   float epsilon = atof(argv[2]);&lt;br /&gt;
 ...&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Adding flags (or options) to the command line makes the program easier to use but places a larger burden on the program developer. Each developer must ''invent'' a command line argument syntax and implement code to parse the command line. Even a simple example of this is too long to include in this description. This code snippet looks for just two command line arguments.&lt;br /&gt;
&lt;br /&gt;
 int main (int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
   if (argc &amp;lt; 3)&lt;br /&gt;
     {&lt;br /&gt;
     std::cout &amp;lt;&amp;lt; &amp;quot;Usage: &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot; [-i iterations] [-e epsilon] inputfile outputfile &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
     return -1;&lt;br /&gt;
     }&lt;br /&gt;
   std::string inputfile;&lt;br /&gt;
   std::string outputfile;&lt;br /&gt;
   unsigned int iterations = 10; /* a default */&lt;br /&gt;
   float epsilon = .001; /* a defualt */&lt;br /&gt;
   ++argc; /* skip program name */&lt;br /&gt;
   while (argc &amp;gt; 0)&lt;br /&gt;
     {&lt;br /&gt;
     if (strcmp(argv[argc], &amp;quot;-i&amp;quot;)&lt;br /&gt;
      {&lt;br /&gt;
      iterations = atoi(argv[argc+1]);&lt;br /&gt;
      argc+=2;&lt;br /&gt;
      continue;&lt;br /&gt;
 &lt;br /&gt;
    else if (strcmp(argv[argc], &amp;quot;-e&amp;quot;)&lt;br /&gt;
      {&lt;br /&gt;
      epsilon = atof(argv[argc+1]);&lt;br /&gt;
      argc+=2;&lt;br /&gt;
      continue;&lt;br /&gt;
    ...&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
The code gets longer and longer as more options are added and must be rewritten every time a new programs is open.&lt;br /&gt;
&lt;br /&gt;
To solve this complexity issue, people have developed command line argument libraries. There are dozens, if not hundreds, of command line processing tools. For Slicer3 we looked at argument processors in vxl, nrrd, meta, kwsys and tclap. Each has its strengths and weaknesses. We chose [http://tclap.sourceforge.net/ The Templatized C++ Command Line Parser Library], '''TCLAP'''. '''TCLAP''' is implemented in ''include'' files and does not require a separate library build. As you will see later, the particular command line processing tool is, for the most part, transparent to the Slicer3 developer or user.&lt;br /&gt;
&lt;br /&gt;
But even these libraries require some work to use.&lt;br /&gt;
&lt;br /&gt;
==== TCLAP ====&lt;br /&gt;
&lt;br /&gt;
This example uses '''TCLAP''' to process a command line with 10 possible entries:&lt;br /&gt;
&lt;br /&gt;
 int main ( int argc, char* argv[] ) {&lt;br /&gt;
  //&lt;br /&gt;
  // Define default values&lt;br /&gt;
  int HistogramBins      = 30;&lt;br /&gt;
  int RandomSeed         = 1234567;&lt;br /&gt;
  int SpatialSamples     = 10000;&lt;br /&gt;
  float TranslationScale = 100.0;&lt;br /&gt;
  int Iterations         = 200;&lt;br /&gt;
  int SplineOrder        = 3;&lt;br /&gt;
  double MinimumStepSize = 0.00001;&lt;br /&gt;
  double MaximumStepSize = 0.005;&lt;br /&gt;
  bool PrintTransform    = false;&lt;br /&gt;
  string fixedImageFileName;&lt;br /&gt;
  string movingImageFileName;&lt;br /&gt;
  string resampledImageFileName;&lt;br /&gt;
  //&lt;br /&gt;
  // Setup command line parsing&lt;br /&gt;
  try&lt;br /&gt;
    {&lt;br /&gt;
    TCLAP::CmdLine cl ( &amp;quot;Register2d&amp;quot;, ' ', &amp;quot;$Revision: 1.1 $&amp;quot; );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;int&amp;gt;    HistogramBinsArg    ( &amp;quot;b&amp;quot;, &amp;quot;histogrambins&amp;quot;,    &amp;quot;Number of histogram bins&amp;quot;, false, 30, &amp;quot;integer&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;int&amp;gt;    IterationsArg       ( &amp;quot;i&amp;quot;, &amp;quot;iterations&amp;quot;,       &amp;quot;Number of Iterations&amp;quot;, false, Iterations, &amp;quot;int&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;double&amp;gt; MinimumStepSizeArg  ( &amp;quot;m&amp;quot;, &amp;quot;minstepsize&amp;quot;,      &amp;quot;Minimum Step Size&amp;quot;, false, MinimumStepSize, &amp;quot;double&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;double&amp;gt; MaximumStepSizeArg  ( &amp;quot;x&amp;quot;, &amp;quot;maxstepsize&amp;quot;,      &amp;quot;Maximum Step Size&amp;quot;, false, MaximumStepSize, &amp;quot;double&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;int&amp;gt;    RandomSeedArg       ( &amp;quot;r&amp;quot;, &amp;quot;randomseed&amp;quot;,       &amp;quot;Random Seed&amp;quot;, false, RandomSeed, &amp;quot;int&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;int&amp;gt;    SpatialSamplesArg   ( &amp;quot;s&amp;quot;, &amp;quot;spatialsamples&amp;quot;,   &amp;quot;Number of spatial samples&amp;quot;, false, SpatialSamples, &amp;quot;int&amp;quot;, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;int&amp;gt;    SplineOrderArg      ( &amp;quot;o&amp;quot;, &amp;quot;splineorder&amp;quot;,      &amp;quot;Order of spline for registration&amp;quot;, false, SplineOrder, &amp;quot;int&amp;quot;, cl );&lt;br /&gt;
    TCLAP::SwitchArg        PrintTransformArg   ( &amp;quot;p&amp;quot;, &amp;quot;printtransform&amp;quot;,   &amp;quot;Print the final transform&amp;quot;, PrintTransform, cl );&lt;br /&gt;
    TCLAP::ValueArg&amp;lt;float&amp;gt;  TranslationScaleArg ( &amp;quot;t&amp;quot;, &amp;quot;translationscale&amp;quot;, &amp;quot;Translation scale&amp;quot;, false, TranslationScale, &amp;quot;float&amp;quot;, cl );&lt;br /&gt;
    TCLAP::UnlabeledValueArg&amp;lt;string&amp;gt; FixedImageArg ( &amp;quot;fixed&amp;quot;, &amp;quot;Fixed image filename&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;string&amp;quot;, cl );&lt;br /&gt;
    TCLAP::UnlabeledValueArg&amp;lt;string&amp;gt; MovingImageArg ( &amp;quot;moving&amp;quot;, &amp;quot;Moving image filename&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;string&amp;quot;, cl );&lt;br /&gt;
    TCLAP::UnlabeledValueArg&amp;lt;string&amp;gt; ResampledImageArg ( &amp;quot;resampled&amp;quot;, &amp;quot;Resampled image filename&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;string&amp;quot;, cl );&lt;br /&gt;
    //&lt;br /&gt;
    // Parse the command line&lt;br /&gt;
    cl.parse ( argc, argv );&lt;br /&gt;
    //&lt;br /&gt;
    // Access the variables&lt;br /&gt;
    HistogramBins          = HistogramBinsArg.getValue();&lt;br /&gt;
    Iterations             = IterationsArg.getValue();&lt;br /&gt;
    MinimumStepSize        = MinimumStepSizeArg.getValue();&lt;br /&gt;
    MaximumStepSize        = MaximumStepSizeArg.getValue();&lt;br /&gt;
    RandomSeed             = RandomSeedArg.getValue();&lt;br /&gt;
    SpatialSamples         = SpatialSamplesArg.getValue();&lt;br /&gt;
    TranslationScale       = TranslationScaleArg.getValue();&lt;br /&gt;
    PrintTransform         = PrintTransformArg.getValue();&lt;br /&gt;
    fixedImageFileName     = FixedImageArg.getValue();&lt;br /&gt;
    movingImageFileName    = MovingImageArg.getValue();&lt;br /&gt;
    resampledImageFileName = ResampledImageArg.getValue();&lt;br /&gt;
    }&lt;br /&gt;
  catch ( ArgException e )&lt;br /&gt;
    {&lt;br /&gt;
    cerr &amp;lt;&amp;lt; &amp;quot;error: &amp;quot; &amp;lt;&amp;lt; e.error() &amp;lt;&amp;lt; &amp;quot; for arg &amp;quot; &amp;lt;&amp;lt; e.argId() &amp;lt;&amp;lt; endl;&lt;br /&gt;
    exit ( EXIT_FAILURE );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
You do get a lot for your investment here. Good error handling and help.&lt;br /&gt;
&lt;br /&gt;
=== Module Description Parser ===&lt;br /&gt;
The XML parsing is done by the [https://github.com/Slicer/SlicerExecutionModel/tree/master/ModuleDescriptionParser ModuleDescriptionParser] class library. ''GenerateCLP'' and Slicer3 use this class library to parse the module XML descriptions. The class ''ModuleDescriptionParser'' has one method, '''Parse''', that converts the XML description into an object model. The resulting object model has one ''ModuleDescription'', one or more ''ModuleParameterGroup'' each of which has one or more ''ModuleParameter''. Each instance has access methods to retrieve information from the XML.&lt;br /&gt;
* '''ModuleDescriptionParser''' - parser for command line module XML description.&lt;br /&gt;
*: ''Parse(std::string xml, ModuleDescription module)'' - parse an xml string and populate a ModuleDescription.&lt;br /&gt;
* '''ModuleDescription''' - contains information about a module &lt;br /&gt;
*: const std::string ''GetCategory()'' : returns the contents of '''&amp;lt;category&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetTitle()'' : returns the contents of '''&amp;lt;title&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetDescription()'' : returns the contents of '''&amp;lt;description&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetVersion()'' : returns the contents of '''&amp;lt;version&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetDocumentationURL()'' : returns the contents of '''&amp;lt;documentationURL&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetLicense()'' : returns the contents of '''&amp;lt;license&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetContributor()'' : returns the contents of '''&amp;lt;contributor&amp;gt;'''.&lt;br /&gt;
*: const std::vector&amp;lt;ModuleParameterGroup&amp;gt;&amp;amp; ''GetParameterGroups()'' : returns a vector of parameter groups.&lt;br /&gt;
* '''ModuleParameterGroup''' - contains ModuleParameters for each parameter group.&lt;br /&gt;
*: const std::string ''GetLabel'' - returns the contents of '''&amp;lt;label&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetDescription()'' - returns the contents of the parameter group's '''&amp;lt;description&amp;gt;'''.&lt;br /&gt;
*: const std::string ''GetAdvanced()'' - returns advanced attribute. Either &amp;quot;true&amp;quot; of &amp;quot;false&amp;quot;.&lt;br /&gt;
* '''ModuleParameter''' - contains information for a parameter.&lt;br /&gt;
*:GetTag() - returns the parameter's tag, e.g. '''&amp;lt;integer&amp;gt;, &amp;lt;image&amp;gt;''', etc.&lt;br /&gt;
*:GetName() - returns the parameter's '''&amp;lt;name&amp;gt;'''.&lt;br /&gt;
*:GetLongFlag() -  returns the parameter's '''&amp;lt;longflag&amp;gt;'''.&lt;br /&gt;
*:GetLabel() -  returns the parameter's '''&amp;lt;label&amp;gt;'''.&lt;br /&gt;
*:GetMaximum() -  returns the parameter's '''&amp;lt;maximum&amp;gt;''' constraint.&lt;br /&gt;
*:GetMinimum() -  returns the parameter's '''&amp;lt;minimum&amp;gt;''' constraint.&lt;br /&gt;
*:GetStep() -  returns the parameter's '''&amp;lt;step&amp;gt;'''.&lt;br /&gt;
*:GetDescription() -  returns the parameter's '''&amp;lt;description&amp;gt;'''.&lt;br /&gt;
*:GetChannel() -  returns the parameter's '''&amp;lt;channel&amp;gt;'''.&lt;br /&gt;
*:GetIndex() -  returns the parameter's '''&amp;lt;index&amp;gt;'''.&lt;br /&gt;
*:GetDefault() -  returns the parameter's '''&amp;lt;default&amp;gt;'''.&lt;br /&gt;
*:GetFlag() -  returns the parameter's '''&amp;lt;flag&amp;gt;'''.&lt;br /&gt;
*:GetMultiple() -  returns the parameter's multiple attribute, either &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;.&lt;br /&gt;
*:GetCoordinateSystem() -  returns the parameter's coordinate system attribute, one of &amp;quot;lps&amp;quot;, &amp;quot;ras&amp;quot;, or &amp;quot;ijk&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Adding a new parameter type =&lt;br /&gt;
&lt;br /&gt;
Adding a ''new parameter type'' to the execution model involves several modifications:&lt;br /&gt;
&lt;br /&gt;
# A new XML tag needs to be defined to represent the new parameter type.&lt;br /&gt;
# ModuleDescriptionParser needs to be modified to parse the new parameter tag type and specify how the command line processing code generation is going to represent the parameter type&lt;br /&gt;
# CommandLineModuleGUI needs to be modified to construct the appropriate GUI element for the parameter type&lt;br /&gt;
# CommandLineModuleLogic needs to be modified to put the parameter type onto the command line and request outputs parameter types be loaded back into Slicer and the MRML tree.&lt;br /&gt;
# SlicerApplicationLogic needs to be modified to ingest any output parameter types back into Slicer and the MRML tree.&lt;br /&gt;
# Additional modification are needed if the parameter is to be passed directly from the MRML tree without using the filesystem.&lt;br /&gt;
# Updating the documentation.&lt;br /&gt;
&lt;br /&gt;
Simple parameter types can be passed directly on the command line.  For instance, scalars, small lists, positions, etc. Complicated parameter types are passed to the module via '''abstract files'''. In some cases, these parameters are actually passed as files, where Slicer reads/write the data to the filesystem.  In other cases, the parameters are passed as '''abstract files''' which are really references to within the Slicer memory model but appear to the Command Line Module as being a file.  The Command Line Module is written using standard ITK ImageFileReader/ImageFileWriter classes but the ITK ImageIO factory mechanism is used to direct the ImageFileReader/ImageFileWriter to talk directly to the Slicer MRML tree instead of to the filesystem.&lt;br /&gt;
&lt;br /&gt;
== XML tag ==&lt;br /&gt;
&lt;br /&gt;
This is by far the easiest of the tasks involved in adding a new parameter type but it should not approached hastily. The XML description of a module is designed to be application agnostic. As such, parameter types should be described abstractly or generically.  For instance, '''&amp;lt;geometry&amp;gt;''' tag corresponds to the Slicer model node, the '''&amp;lt;point&amp;gt;''' tag corresponds to the Slicer fiducial node, etc.&lt;br /&gt;
&lt;br /&gt;
Once the tag name is defined, you need to decide whether the parameter type could or should support the attributes '''multiple''', '''coordinateSystem''', or '''fileExtensions''' or perhaps a new attribute type.&lt;br /&gt;
&lt;br /&gt;
== Modifying ModuleDescriptionParser ==&lt;br /&gt;
&lt;br /&gt;
SlicerExecutionModel/ModuleDescriptionParser/ModuleDescriptionParser.cxx contains the code to parse the XML description of a module and represent that module description in C++ data structures.  To add a new parameter type, this code needs to be modified.&lt;br /&gt;
&lt;br /&gt;
Two routines need to be modified in ModuleDescriptionParser, ''startElement()'' and ''endElement()''. For ''startElement()'', a new case block needs to be added for the parameter type.  You can start by copying the case block for a similar parameter type. This case block is responsible for processing all the attributes for the tag and managing and reporting any errors. The case block may define the '''CPPType''', the ''ArgType''', and the '''StringToType''' needed for the code generation of the command line parsing. The '''CPPType''' is used by in the generated command line processing code to represent the parameter.  This may be a simple C++ type or an STL container. The '''ArgType''' is the canonical type of each component of the parameter. The '''StringToType''' is the name of the method to use to convert the ASCII command line parameter to the final '''ArgType'''. The ''endElement()'' method merely needs a new case block to add the parameter to the description.&lt;br /&gt;
&lt;br /&gt;
ModuleDescriptionParser is fairly general, handling scalars, lists of scalars, and file types as parameter types. A parameter which does not fit these models will require considerable alterations to the ModuleDescriptionParser as well as the GenerateCLP.&lt;br /&gt;
&lt;br /&gt;
== Constructing a GUI for a new parameter type ==&lt;br /&gt;
&lt;br /&gt;
To have a GUI element appear in the module GUI for a new parameter type, Base\QTCLI\qSlicerCLIModuleUIHelper.cxx and Base\QTCLI\vtkSlicerCLIModuleLogic.cxx have to be modified. A new case block needs to be added to the '''BuildGUI()''' method for the new parameter type.  This case block is triggered off the XML tag for the parameter type. The case block is responsible for the constructing the appropriate GUI element for the parameter, complete with specifying the label and help text. The design is very simple.  A single widget is used for each parameter.  If a more complicated GUI is needed with multiple widgets, then perhaps a new widget is needed to encapsulated a set of widgets or a naming convention can be added to manage all the widgets associated with a parameter. The widgets for the parameters are stored in a map, indexed by the '''name''' of the parameter.&lt;br /&gt;
&lt;br /&gt;
The vtkCommandLineModuleGUI (and vtkCommandLineModuleLogic) are designed to operate very generically with sets of parameters. The aforementioned map of widgets indexed by parameter '''name''' is one such example.  The implementation of several of the methods in the vtkCommandLineModuleGUI (and vtkCommandLineModuleLogic) generically iterate over the widget map or over the parameter list. It is important to keep this in mind as new parameters are added.  The design goal is to minimize the number of ''special cases'' in the code.&lt;br /&gt;
&lt;br /&gt;
Note that there may be separate case blocks for '''input''' and '''output''' parameter types.&lt;br /&gt;
&lt;br /&gt;
== Communicating the new parameter to the Command Line Module ==&lt;br /&gt;
&lt;br /&gt;
To communicate the new parameter type to and from a Command Line Module, the '''ApplyTask()''' method Slicer3/Modules/CommandLineModule/vtkCommandLineModuleLogic.cxx needs to be modified. &lt;br /&gt;
&lt;br /&gt;
If the parameter type is communicated to the command line module as a file (as opposed to directly on the command line as a number or srting), then there are several blocks of code to construct a temporary file name, keep track of whether that node needs to be written to the filesystem before execution, read from the filesystem after the execution, and deleted after execution completes. These blocks may need to be modified based on your new parameter type.&lt;br /&gt;
&lt;br /&gt;
The command line is constructed in two passes.  First, a pass is made over the parameter list, building the portion of the command line for any parameters that have flags.  Note that whether a parameter has a flag or not is up to the discretion of the module author and is not defined by the parameter type.  Second, a pass is made to construction the portion of the command  line for the parameters that do not have flags. These parameters are ordered appropriately, then placed on the command line. For parameters with flags, this code emits the flag and the parameter value.  For the parameters without flags, this code emits just the parameter value.  You will need to edit both of these passes to emit your parameter type.  In most cases, this is simply a matter of grabbing the parameter value from the parameter and pushing it onto the command line.  But some parameter types do require translation to a string appropriate for the command line.&lt;br /&gt;
&lt;br /&gt;
== Output parameters from the Command Line Modules ==&lt;br /&gt;
&lt;br /&gt;
Any outputs from a Command Line Module that are communicated via files are queued to be read by the main application thread. Command Line Modules run in a separate execution thread from the main GUI.  This thread is not allowed to modify the Slicer GUI, so any results from the module that need to be read back into Slicer and displayed are queued for the main thread.&lt;br /&gt;
&lt;br /&gt;
The '''ProcessReadData()''' method of Slicer3/Base/Logic/vtkSlicerApplicationLogic.cxx pulls data from the queue to load back into Slicer and display. You may need to a case block for your new parameter type to construct the appropriate storage node and display node.&lt;br /&gt;
&lt;br /&gt;
== Communicating directly with the MRML tree ==&lt;br /&gt;
&lt;br /&gt;
Currently scalar image types can sent as parameters to shared object command line modules without going through the filesystem.  Slicer provides a new ITK ImageIO factory that can communicated directly with the Slicer MRML tree. This ImageIO factory is in Slicer/Libs/MRMLIDImageIO. This approach can be extended for other image types such as vector or tensor volumes.&lt;br /&gt;
&lt;br /&gt;
For other constructs such as models and transforms, we'll need to see if an existing factory mechanism can be leverage to communicate directly with the Slicer MRML tree. An alternative may be to construct bridges specific to interfacing from a command line module to the Slicer MRML tree.&lt;br /&gt;
&lt;br /&gt;
== Adding new image types ==&lt;br /&gt;
&lt;br /&gt;
The Command Line Module support scalar, vector, tensor, and diffusion weighted images. Adding a new image type to the Command Line Module requires modify the sections of the code outlined above to manage GUI for the module, to construct temporary file names, to write image to disk, and load them back into the MRML tree.  These blocks are easy to identify as case blocks on vtkMRMLScalarVolumeNode, vtkMRMLDiffusionTensorVolumeNode, etc. Note that the '''&amp;lt;image&amp;gt;''' tag supports a '''type''' attribute that can scalar, label, vector, tensor, or diffusion-weighted.  The case block for '''image''' in the '''startElement()''' method of ModuleDescriptionParser would need to be extended to recognize a new type of image.&lt;br /&gt;
&lt;br /&gt;
=FAQ=&lt;br /&gt;
&lt;br /&gt;
==What facilities are available for third party software to interface with the NA-MIC Kit?==&lt;br /&gt;
&lt;br /&gt;
NA-MIC has committed to developing and supporting a generic batch processing interface.  This is the Slicer3 Command Line Interface (CLI). The application programming interface (API) for CLI was worked out based on interactions with the community including input from those familiar with LONI, ITK, Python and Matlab software development practices.&lt;br /&gt;
&lt;br /&gt;
We believe this API already supports all the features required by to implement batch processing with BatchMake, the LONI Pipeline, and any other systems that we may want to work with in the future.  The [[Slicer3:Execution_Model_Documentation|Slicer3 Execution Model]] provides a simple XML-based descriptor for command line arguments for input/output volumes and related parameters.&lt;br /&gt;
&lt;br /&gt;
==Which Third Party software has currently been interfaced to the NA-MIC Kit using the CLI?==&lt;br /&gt;
&lt;br /&gt;
*Batchmake (Kitware)&lt;br /&gt;
*Python&lt;br /&gt;
*Matlab&lt;br /&gt;
&lt;br /&gt;
== How do I debug my command line module? ==&lt;br /&gt;
&lt;br /&gt;
See [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation:Debugging Debugging]&lt;br /&gt;
&lt;br /&gt;
== How do I specify a Logo? ==&lt;br /&gt;
&lt;br /&gt;
You need to create a logo.h file (embedding the zipped pixel data as base64 strings in a C source code).  There is a utility bundled with kwwidgets that accomplishes this.  From a Slicer3 build directory you can do something like this:&lt;br /&gt;
&lt;br /&gt;
 ./Slicer3 --launch ../Slicer3-lib/KWWidgets-build/bin/KWConvertImageToHeader --base64 --zlib ~/Desktop/bioimagesuite_logo_www.h ~/Desktop/bioimagesuite_logo_www.png&lt;br /&gt;
&lt;br /&gt;
The resulting .h header file can then be used as an argument to the 'generateclp' cmake macro like this:&lt;br /&gt;
&lt;br /&gt;
 generateclp(${CLP}_SOURCE ${CLP}.xml ${Slicer3_SOURCE_DIR}/Resources/bioimagesuite_logo_www.h)&lt;br /&gt;
&lt;br /&gt;
''Note: logos are limited in size: if your .h file contains a symbol like 'image_bioimagesuite_logo_www' it will work.  But if it has several symbols like 'image_bioimagesuite_logo_www_1' 'image_bioimagesuite_logo_www_2' etc then the logo was too large and needs to be downsampled for use.''&lt;br /&gt;
&lt;br /&gt;
== What do I do if I want to use the CLI outside of slicer? ==&lt;br /&gt;
&lt;br /&gt;
In general CLI executables will depend on shared libraries provided by Slicer (such as ITKCommon, etc).  To be sure your run-time environment resolves to the correct versions, you should always use a form like:&lt;br /&gt;
 ./Slicer3 --launch &amp;lt;CLI&amp;gt;&lt;br /&gt;
or, you can start a shell from which you can run multiple CLI modules.  Something like:&lt;br /&gt;
 ./Slicer3 --launch xterm &amp;amp;&lt;br /&gt;
&lt;br /&gt;
We do not suggest hard-coding the runtime paths into, for example, your .bashrc since this may interfere with other programs and can make it hard to use multiple versions of slicer on the same account.&lt;br /&gt;
&lt;br /&gt;
= Laundry List =&lt;br /&gt;
&lt;br /&gt;
Use this section to describe any features that are missing, not documented, or require additional work.&lt;br /&gt;
&lt;br /&gt;
* Comments from Hans Johnson, June 4, 2010:&lt;br /&gt;
** Enumerated types can only have about 3 characters in them, otherwise they don’t render in the slicer wizard at all.&lt;br /&gt;
** There is no way to unset an enumerated type, and the values are cached even after leaving the module.  If the default enumerated type is to be blank, and you select it, then you must restart slicer in order to make the blank option available again.&lt;br /&gt;
** There is no way to have conditional options.  For example if one flag is used, then other flag can not be used, so it should be disabled.&lt;br /&gt;
&lt;br /&gt;
* Documenting your module:&lt;br /&gt;
** a convenience script has been developed by Hans Johnson, which creates a wiki page describing the command line module by extracting the information from the xml description [[SEMToMediaWiki.py]]. TODO: extract the default values for the parameters to be included in the documentation&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Prerequisites&amp;diff=42834</id>
		<title>Documentation/Nightly/Developers/Build Instructions/Prerequisites</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Prerequisites&amp;diff=42834"/>
		<updated>2015-10-02T15:09:30Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== PREREQUISITES ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Please check that the following tools are installed on your machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = Qt libraries are '''required'''. Consider reading [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt|Qt requirements]].&lt;br /&gt;
| image= [[{{tool|logo|qt}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = CMake is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|cmake}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Git is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|git}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = SVN is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|svn}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Consider reading platform specific requirements listed below.&lt;br /&gt;
&lt;br /&gt;
=== Linux  ===&lt;br /&gt;
* [{{tool|download|cmake}} CMake] &amp;gt;= 3.x&lt;br /&gt;
* [{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
* [{{tool|download|svn}} Svn] &amp;gt;= 1.7&lt;br /&gt;
* Qt 4.8.6. &amp;lt;small&amp;gt;See details [http://na-mic.org/Mantis/view.php?id=3325#bugnotes here] (Note that any version &amp;gt;= Qt 4.7.4 can be used only for Ubuntu &amp;lt; 12.04)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Debian ====&lt;br /&gt;
&lt;br /&gt;
* Debian squeeze/wheezy/testing(jessie) users, start by pasting the following lines in a terminal&lt;br /&gt;
 sudo apt-get install subversion git-core git-svn&lt;br /&gt;
 sudo apt-get install make gcc g++ libX11-dev libXt-dev libgl1-mesa-dev libosmesa6-dev libglu1-mesa-dev libfontconfig-dev libxrender-dev libncurses5-dev&lt;br /&gt;
 sudo apt-get install cmake&lt;br /&gt;
 sudo apt-get install qt-sdk&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
* Ubuntu users, start by pasting the following lines in a terminal&lt;br /&gt;
 sudo apt-get install subversion git-core git-svn&lt;br /&gt;
 sudo apt-get install make gcc g++ libX11-dev libXt-dev libgl1-mesa-dev libglu1-mesa-dev libfontconfig-dev libxrender-dev libncurses5-dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu &amp;lt; 12.04''':&lt;br /&gt;
 sudo apt-get install cmake # Only for Ubuntu &amp;lt; 12.04&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu &amp;lt; 14.04.3''':&lt;br /&gt;
 sudo apt-get install libosmesa6-dev&lt;br /&gt;
&lt;br /&gt;
* NOTE: on Ubuntu 14.04.3 LTS, attempting to install &amp;lt;tt&amp;gt;libosmesa6-dev&amp;lt;/tt&amp;gt; results in an error:&lt;br /&gt;
 The following packages have unmet dependencies:&lt;br /&gt;
  libosmesa6-dev : Depends: libosmesa6 (= 10.1.3-0ubuntu0.4) but it is not going to be installed&lt;br /&gt;
 E: Unable to correct problems, you have held broken packages.&lt;br /&gt;
See [https://bugs.launchpad.net/ubuntu/+source/mesa-lts-utopic/+bug/1424059 Bug 1424059].&lt;br /&gt;
&lt;br /&gt;
Slicer compiles successfully without that package, but &amp;lt;tt&amp;gt;VTK_OPENGL_HAS_OSMESA&amp;lt;/tt&amp;gt; is disabled.&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu 12.04 and above''': You *MUST download the standard CMake binary* from http://cmake.org/download because the distributed version of CMake cannot be used to build slicer. For example, on a 64-bit system, you will download the file &amp;lt;code&amp;gt;cmake-X.Y.Z-Linux-x86_64.tar.gz&amp;lt;/code&amp;gt; associated with the latest stable version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
* Why distributed CMake can not be used on Ubuntu 12.04 and above ? &lt;br /&gt;
** http://slicer-devel.65872.n3.nabble.com/PYTHON-INCLUDE-DIR2-when-building-Slicer4-td4028557.html&lt;br /&gt;
** Slicer issue [http://na-mic.org/Mantis/view.php?id=3103 #3103]&lt;br /&gt;
** Slicer issue  [http://na-mic.org/Mantis/view.php?id=3116#c8649 #3116]&lt;br /&gt;
** CMake issue [http://public.kitware.com/Bug/view.php?id=14156 #14156]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install openssl libssl-dev&lt;br /&gt;
&lt;br /&gt;
mkdir ~/Support &amp;amp;&amp;amp; cd Support     # This is where we will download and install required software&lt;br /&gt;
&lt;br /&gt;
# By copying this one-liner in your terminal, it will download and build CMake&lt;br /&gt;
wget http://www.cmake.org/files/v3.3/cmake-3.3.1.tar.gz &amp;amp;&amp;amp; \&lt;br /&gt;
tar xzvf cmake-3.3.1.tar.gz \&lt;br /&gt;
cd cmake-3.3.1 &amp;amp;&amp;amp; \&lt;br /&gt;
cmake -DCMAKE_USE_OPENSSL:BOOL=ON &amp;amp;&amp;amp; \&lt;br /&gt;
make -j4&lt;br /&gt;
&lt;br /&gt;
# By copying this one-liner, symbolic links to cmake tools will be created in /usr/local/bin. &lt;br /&gt;
# That way calling cmake, ctest, ... from the command line will resolve to this version of CMake.&lt;br /&gt;
for tool in cmake ccmake ctest cpack; do sudo ln -s ~/Support/cmake-3.3.1/bin/$tool /usr/local/bin/$tool; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu 12.04, 12.10, 13.04 and 13.10''': Qt 4 &amp;gt;= 4.8.5 MUST be used. See reference below for more details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/Support   # This is where we will build Qt and dependent libraries&lt;br /&gt;
 &lt;br /&gt;
# Keep track of our working directory&lt;br /&gt;
cwd=$(pwd)&lt;br /&gt;
&lt;br /&gt;
# This will download, then build zlib and openssl in the current folder&lt;br /&gt;
rm -f get-and-build-openssl-for-slicer.sh&lt;br /&gt;
wget https://gist.githubusercontent.com/jcfr/9513568/raw/21f4e4cabca5ad03435ecc17ab546dab5e2c1a2f/get-and-build-openssl-for-slicer.sh&lt;br /&gt;
chmod u+x get-and-build-openssl-for-slicer.sh &lt;br /&gt;
./get-and-build-openssl-for-slicer.sh &lt;br /&gt;
&lt;br /&gt;
# This will download Qt source in the current folder&lt;br /&gt;
wget http://packages.kitware.com/download/item/6175/qt-everywhere-opensource-src-4.8.6.tar.gz&lt;br /&gt;
md5=`md5sum ./qt-everywhere-opensource-src-4.8.6.tar.gz | awk '{ print $1 }'` &amp;amp;&amp;amp;&lt;br /&gt;
[ $md5 == &amp;quot;2edbe4d6c2eff33ef91732602f3518eb&amp;quot; ] || echo &amp;quot;MD5 mismatch. Problem downloading Qt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# This will configure and build Qt in RELEASE against the zlib and openssl previously built&lt;br /&gt;
tar -xzvf qt-everywhere-opensource-src-4.8.6.tar.gz&lt;br /&gt;
mv qt-everywhere-opensource-src-4.8.6 qt-everywhere-opensource-release-src-4.8.6&lt;br /&gt;
mkdir qt-everywhere-opensource-release-build-4.8.6&lt;br /&gt;
cd qt-everywhere-opensource-release-src-4.8.6&lt;br /&gt;
./configure -prefix $cwd/qt-everywhere-opensource-release-build-4.8.6    \&lt;br /&gt;
                   -release \&lt;br /&gt;
                   -opensource -confirm-license \&lt;br /&gt;
                   -no-qt3support \&lt;br /&gt;
                   -webkit \&lt;br /&gt;
                   -nomake examples -nomake demos \&lt;br /&gt;
                   -openssl -I $cwd/openssl-1.0.1e/include   -L $cwd/openssl-1.0.1e \&lt;br /&gt;
&amp;amp;&amp;amp; make -j7 &amp;amp;&amp;amp; make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
* Why Qt 4 &amp;gt;= 4.8.5 should be used on Ubuntu 12.04 and above ?&lt;br /&gt;
** Slicer issue [http://www.na-mic.org/Bug/view.php?id=3325 #3325]&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CentOS ====&lt;br /&gt;
*CentOS user type:&lt;br /&gt;
 yum install make gcc-c++ libX11-devel libXt-devel libXext-devel libGLU-devel mesa-libOSMesa-devel mesa-libGL-devel mesa-libGLU-devel ncurses&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Todo: This will have to be added in FAQ: Troubleshoot section&lt;br /&gt;
''glx-utils'' provides ''glxgears'' that can be used to test rendering&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOSX ===&lt;br /&gt;
&lt;br /&gt;
'''MacOSX 10.9.4 (Maverick):'''&lt;br /&gt;
&lt;br /&gt;
''' (1) Make sure to install this update: http://support.apple.com/kb/DL1754'''&lt;br /&gt;
&lt;br /&gt;
''' (2) Use CMake 3.0.1 - it is known to be working and is supported''' (if you want to use CMake already installed on your system, 2.8.12.2 is known to work on Mac OS X 10.9.5)&lt;br /&gt;
&lt;br /&gt;
* Mac Os X &amp;gt;= 10.5 (Leopard)&lt;br /&gt;
* [{{tool|download|cmake}} CMake] &amp;gt;= 2.8.9&lt;br /&gt;
** For Mac Os X &amp;gt;= 10.8 ([http://en.wikipedia.org/wiki/OS_X_Mountain_Lion Mountain Lion]) and/or recent XCode &amp;gt;= 4.5.X - [{{tool|download|cmake}} CMake] &amp;gt;= 2.8.11 is required. See http://www.cmake.org/files/v2.8/cmake-2.8.11-Darwin64-universal.tar.gz&lt;br /&gt;
&amp;lt;!-- Waiting for the official release, get the release candidate rc1 [http://www.cmake.org/files/v2.8/cmake-2.8.11-rc1-Darwin64-universal.tar.gz here]. For explanation, see [[Documentation/{{documentation/version}}/Developers/Build_Instructions#ld:_framework_not_found_QtWebKit|here]] and [[Documentation/{{documentation/version}}/Developers/Build_Instructions#On_MacOSX_10.8.2C_CMake_hangs_forever|here]]. These versions are also known to work: exact version 20130121-g92bd8 [http://www.cmake.org/files/dev/cmake-2.8.10.20130121-g92bd8-Darwin-universal.tar.gz here] (or version &amp;gt;= 2.8.10.20130220 [http://www.cmake.org/files/dev/?C=M;O=D here]).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -O http://www.cmake.org/files/v2.8/cmake-2.8.11-Darwin64-universal.tar.gz&lt;br /&gt;
 $ tar -xzvf cmake-2.8.11-Darwin64-universal.tar.gz --strip-components=1&lt;br /&gt;
&lt;br /&gt;
 $ CMake\ 2.8-11.app/Contents/bin/cmake --version&lt;br /&gt;
 cmake version 2.8.11&lt;br /&gt;
&lt;br /&gt;
* [{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
* [{{tool|download|svn}} Svn] &amp;gt;= 1.7&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*[[{{tool|logo|cmake}}|x16px]] [{{tool|download|cmake}} CMake] &amp;gt;= 2.8.9&lt;br /&gt;
*[[{{tool|logo|git}}|x16px]] [{{tool|download|git}} Git] &amp;gt;= 1.6.5&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* XCode (for the SDK libs)&lt;br /&gt;
* Qt 4 &amp;gt;= 4.8.5. We recommend you install the following two packages:&lt;br /&gt;
** Download and install [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-opensource-mac-4.8.6-1.dmg qt-opensource-mac-4.8.6-1.dmg]&lt;br /&gt;
** Download and install [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-opensource-mac-4.8.6-1-debug-libs.dmg qt-opensource-mac-4.8.6-1-debug-libs.dmg]&lt;br /&gt;
** For more details [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt#Mac|here]]&lt;br /&gt;
* XQuartz - For Mac Os X &amp;gt;= 10.8 ([http://en.wikipedia.org/wiki/OS_X_Mountain_Lion Mountain Lion]) install XQuartz (http://xquartz.macosforge.org) to get X11 (no longer a default in OS X).&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Newer Xcode versions (e.g. 4.3.2) use clang as the default compiler and '''clang is not compatible with ITK version 3'''.  You should use ITK version 4 with recent versions of Xcode.&lt;br /&gt;
** Xcode with gcc should ork with either version of ITK.&lt;br /&gt;
** OS X Mountain Lion: In Xcode 4.5 you now need to install command line tools (no longer included by default). Install within Xcode under the Xcode-&amp;gt;Preferences-&amp;gt;Downloads tab (otherwise git svn will give errors). Then you will need to install XQuartz (http://xquartz.macosforge.org) to get X11 (no longer a default in OS X).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* [{{tool|download|cmake}} CMake] &amp;gt;= 3.0&lt;br /&gt;
* [{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*[[{{tool|logo|cmake}}|x16px]]  [{{tool|download|cmake}}  CMake] &amp;gt;= 2.8.10&lt;br /&gt;
*[[{{tool|logo|git}}|x16px]]  [{{tool|download|git}}  Git] &amp;gt;= 1.7.10&lt;br /&gt;
* [https://code.google.com/p/msysgit/downloads/list?can=3 ''Git-X.X.X-preview2013XXXX.exe''] recommended.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Use of [http://code.google.com/p/tortoisegit/ TortoiseGit] is optional.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** {{note}}For convenience, you could update the PATH variable so that ''git'' can be automatically discovered when configuring Slicer. If not, you will have to specify the GIT_EXECUTABLE at configure time.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sliksvn.com/en/download SlikSvn] &amp;lt;!-- or [http://www.cygwin.com cygwin's svn client]--&amp;gt;. If using TortoiseSVN (versions that support command line tools), make sure you install Command line tools (disabled by default)&lt;br /&gt;
&lt;br /&gt;
* NSIS (optional): Needed if packaging Slicer - Click [http://nsis.sourceforge.net/Download here] to download.&lt;br /&gt;
&lt;br /&gt;
* Qt 4.8.6 (for VS2008). See details [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt#Windows|here]]&lt;br /&gt;
** Normally you should plan to build Qt from source to have complete control over the process. See [https://github.com/jcfr/qt-easy-build one-liner build command] &amp;lt;!-- or more detailed [[#Build_instructions]] --&amp;gt;&lt;br /&gt;
** You may find that the '''unsigned''' binary downloads from this site are usable: http://sourceforge.net/projects/qt64ng/files/qt/x86-64/4.8.6/msvc2008/ (If you use .7z varaints extract them in the default location C:\Qt\ otherwise that installation will not be properly configured for use with CMake)&lt;br /&gt;
** '''Details''': Using the Qt Designer on Windows requires that the Slicer plugins are compiled in the same mode as Qt. If Qt was compiled in Release mode (default), Slicer would have to be compiled in Release mode as well. However if Qt is compiled in Debug mode only, Slicer has to be compiled in Debug too. When Qt is in &amp;quot;Release and Debug&amp;quot; mode only the Release version of Designer.exe is generated, Slicer would have to be compiled in Release. So for developers, the &amp;lt;b&amp;gt;Debug mode is recommended&amp;lt;/b&amp;gt;.&lt;br /&gt;
** For VS2012 Qt needs to be build from source. Build will fail, which can be fixed with this diff: https://gist.github.com/Vitallium/5220503 (read the comment too)&lt;br /&gt;
&lt;br /&gt;
* IDE&lt;br /&gt;
** '''Tested/Recommended''': [https://www.microsoft.com/visualstudio/en-us/products/2008-editions Microsoft Visual Studio 9 2008] (Any edition). [http://go.microsoft.com/?linkid=7729279 VS Express 2008 with SP1 direct link] (functional as of Jan 11, 2014)&lt;br /&gt;
*** Make sure to install:&lt;br /&gt;
**** SP1. Click [http://www.microsoft.com/download/en/details.aspx?id=10986 here] to download SP1 and click [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2012/008206.html here] to understand the motivation.&lt;br /&gt;
*** Make sure to patch VS2008 using the script [https://gist.github.com/jcfr/3c7bef3f8b32f9f6ad4b fix-vc9-redist-manifests.ps1]&lt;br /&gt;
** '''Experimental''': The plan is to support [https://www.microsoft.com/visualstudio/en-us/products/2010-editions Microsoft Visual Studio 2010] (Any edition). {{note}} NOTE THAT EXPERIMENTAL MEANS THIS DOESN'T YET WORK :)&lt;br /&gt;
*** Make sure to build or install:&lt;br /&gt;
**** Qt 4.8 &lt;br /&gt;
*** Make sure to install:&lt;br /&gt;
**** SP1. Click [http://www.microsoft.com/download/en/details.aspx?id=23691 here] to download SP1 and click [http://developer.qt.nokia.com/faq/answer/why_do_all_qt_4.7_applications_crash_when_using_windows_7_x64_w_vs_2010 here] to understand the motivation.&lt;br /&gt;
**** SP1 Compiler update. Click [https://www.microsoft.com/download/en/details.aspx?id=4422 here] to download and [http://slicer-devel.65872.n3.nabble.com/Windows-7-64Bits-Slicer-4-Build-with-VC-2010-problem-tt3730524.html#a3731661 here] to understand the motivation.&lt;br /&gt;
&amp;lt;!-- JC: This links shouldn't be here: 1) Since this the developer section, it's assumed Visual Studio is installed. 2) The Dll are distributed within Slicer package --&amp;gt;&lt;br /&gt;
&amp;lt;!-- *** Optional: &amp;quot;Microsoft Visual C++ 2010 SP1 Redistributable Package&amp;quot;. Click [http://www.microsoft.com/download/en/details.aspx?id=13523 here for x64] download, or [http://www.microsoft.com/download/en/details.aspx?id=13523 here for x86] download.  [http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=29 x86 (32bit) for VS 2008] --&amp;gt;&lt;br /&gt;
** '''Experimental''' (Visual Studio 2012): Use a desktop version such as [http://www.microsoft.com/visualstudio/eng/downloads#d-express-windows-desktop Visual Studio 2012 Express &amp;lt;b&amp;gt;for Windows Desktop&amp;lt;/b&amp;gt;] and remember [http://www.microsoft.com/en-us/download/details.aspx?id=38188 Visual Studio 2012 Update 2]). Do &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; use Visual Studio Express 2012 &amp;lt;em&amp;gt;for Windows 8&amp;lt;/em&amp;gt;. You must install [http://msdn.microsoft.com/en-us/library/ms717422.aspx Windows SDK], otherwise CMake will not even find the C compiler during configure. In CMake, choose &amp;lt;tt&amp;gt;Visual Studio 11 Win64&amp;lt;/tt&amp;gt; as generator.&lt;br /&gt;
** '''Experimental''' (Visual Studio 2013 with Update 5, as of [https://github.com/Slicer/Slicer/commit/e5eb47826bacc172b7d1c3f2c2c32d0344fc04f9 commit e5eb478]): Slicer compilation is successful, with some caveats. Steps:&lt;br /&gt;
*** CMake &amp;gt;= 3.3.1&lt;br /&gt;
*** Build Qt 4.8.7 with SSL support using [https://github.com/jcfr/qt-easy-build/tree/4.8.7 qt-easy-build].&lt;br /&gt;
*** For Debug mode, disable &amp;lt;code&amp;gt;Slicer_USE_NUMPY&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Slicer_USE_SimpleITK&amp;lt;/code&amp;gt; in CMake.&lt;br /&gt;
*** For Release mode, disable &amp;lt;code&amp;gt;Slicer_USE_NUMPY&amp;lt;/code&amp;gt; in CMake.&lt;br /&gt;
** '''Un-tested''': Cygwin suite (building with cygwin gcc not supported, but the cygwin shell environment can be used to run git, svn, etc).&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Prerequisites&amp;diff=42828</id>
		<title>Documentation/Nightly/Developers/Build Instructions/Prerequisites</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Build_Instructions/Prerequisites&amp;diff=42828"/>
		<updated>2015-10-01T21:44:26Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== PREREQUISITES ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Please check that the following tools are installed on your machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = Qt libraries are '''required'''. Consider reading [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt|Qt requirements]].&lt;br /&gt;
| image= [[{{tool|logo|qt}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = CMake is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|cmake}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Git is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|git}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = protection&lt;br /&gt;
| text = SVN is '''required'''.&lt;br /&gt;
| image= [[{{tool|logo|svn}}|x40px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Consider reading platform specific requirements listed below.&lt;br /&gt;
&lt;br /&gt;
=== Linux  ===&lt;br /&gt;
* [{{tool|download|cmake}} CMake] &amp;gt;= 3.x&lt;br /&gt;
* [{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
* [{{tool|download|svn}} Svn] &amp;gt;= 1.7&lt;br /&gt;
* Qt 4.8.6. &amp;lt;small&amp;gt;See details [http://na-mic.org/Mantis/view.php?id=3325#bugnotes here] (Note that any version &amp;gt;= Qt 4.7.4 can be used only for Ubuntu &amp;lt; 12.04)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Debian ====&lt;br /&gt;
&lt;br /&gt;
* Debian squeeze/wheezy/testing(jessie) users, start by pasting the following lines in a terminal&lt;br /&gt;
 sudo apt-get install subversion git-core git-svn&lt;br /&gt;
 sudo apt-get install make gcc g++ libX11-dev libXt-dev libgl1-mesa-dev libosmesa6-dev libglu1-mesa-dev libfontconfig-dev libxrender-dev libncurses5-dev&lt;br /&gt;
 sudo apt-get install cmake&lt;br /&gt;
 sudo apt-get install qt-sdk&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
* Ubuntu users, start by pasting the following lines in a terminal&lt;br /&gt;
 sudo apt-get install subversion git-core git-svn&lt;br /&gt;
 sudo apt-get install make gcc g++ libX11-dev libXt-dev libgl1-mesa-dev libglu1-mesa-dev libfontconfig-dev libxrender-dev libncurses5-dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu &amp;lt; 12.04''':&lt;br /&gt;
 sudo apt-get install cmake # Only for Ubuntu &amp;lt; 12.04&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu &amp;lt; 14.04.3''':&lt;br /&gt;
 sudo apt-get install libosmesa6-dev&lt;br /&gt;
&lt;br /&gt;
* NOTE: on Ubuntu 14.04.3 LTS, attempting to install &amp;lt;tt&amp;gt;libosmesa6-dev&amp;lt;/tt&amp;gt; results in an error:&lt;br /&gt;
 The following packages have unmet dependencies:&lt;br /&gt;
  libosmesa6-dev : Depends: libosmesa6 (= 10.1.3-0ubuntu0.4) but it is not going to be installed&lt;br /&gt;
 E: Unable to correct problems, you have held broken packages.&lt;br /&gt;
See [https://bugs.launchpad.net/ubuntu/+source/mesa-lts-utopic/+bug/1424059 Bug 1424059].&lt;br /&gt;
&lt;br /&gt;
Slicer compiles successfully without that package, but &amp;lt;tt&amp;gt;VTK_OPENGL_HAS_OSMESA&amp;lt;/tt&amp;gt; is disabled.&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu 12.04 and above''': You *MUST download the standard CMake binary* from http://cmake.org/download because the distributed version of CMake cannot be used to build slicer. For example, on a 64-bit system, you will download the file &amp;lt;code&amp;gt;cmake-X.Y.Z-Linux-x86_64.tar.gz&amp;lt;/code&amp;gt; associated with the latest stable version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
* Why distributed CMake can not be used on Ubuntu 12.04 and above ? &lt;br /&gt;
** http://slicer-devel.65872.n3.nabble.com/PYTHON-INCLUDE-DIR2-when-building-Slicer4-td4028557.html&lt;br /&gt;
** Slicer issue [http://na-mic.org/Mantis/view.php?id=3103 #3103]&lt;br /&gt;
** Slicer issue  [http://na-mic.org/Mantis/view.php?id=3116#c8649 #3116]&lt;br /&gt;
** CMake issue [http://public.kitware.com/Bug/view.php?id=14156 #14156]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install openssl libssl-dev&lt;br /&gt;
&lt;br /&gt;
mkdir ~/Support &amp;amp;&amp;amp; cd Support     # This is where we will download and install required software&lt;br /&gt;
&lt;br /&gt;
# By copying this one-liner in your terminal, it will download and build CMake&lt;br /&gt;
wget http://www.cmake.org/files/v3.3/cmake-3.3.1.tar.gz &amp;amp;&amp;amp; \&lt;br /&gt;
tar xzvf cmake-3.3.1.tar.gz \&lt;br /&gt;
cd cmake-3.3.1 &amp;amp;&amp;amp; \&lt;br /&gt;
cmake -DCMAKE_USE_OPENSSL:BOOL=ON &amp;amp;&amp;amp; \&lt;br /&gt;
make -j4&lt;br /&gt;
&lt;br /&gt;
# By copying this one-liner, symbolic links to cmake tools will be created in /usr/local/bin. &lt;br /&gt;
# That way calling cmake, ctest, ... from the command line will resolve to this version of CMake.&lt;br /&gt;
for tool in cmake ccmake ctest cpack; do sudo ln -s ~/Support/cmake-3.3.1/bin/$tool /usr/local/bin/$tool; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For Ubuntu 12.04, 12.10, 13.04 and 13.10''': Qt 4 &amp;gt;= 4.8.5 MUST be used. See reference below for more details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/Support   # This is where we will build Qt and dependent libraries&lt;br /&gt;
 &lt;br /&gt;
# Keep track of our working directory&lt;br /&gt;
cwd=$(pwd)&lt;br /&gt;
&lt;br /&gt;
# This will download, then build zlib and openssl in the current folder&lt;br /&gt;
rm -f get-and-build-openssl-for-slicer.sh&lt;br /&gt;
wget https://gist.githubusercontent.com/jcfr/9513568/raw/21f4e4cabca5ad03435ecc17ab546dab5e2c1a2f/get-and-build-openssl-for-slicer.sh&lt;br /&gt;
chmod u+x get-and-build-openssl-for-slicer.sh &lt;br /&gt;
./get-and-build-openssl-for-slicer.sh &lt;br /&gt;
&lt;br /&gt;
# This will download Qt source in the current folder&lt;br /&gt;
wget http://packages.kitware.com/download/item/6175/qt-everywhere-opensource-src-4.8.6.tar.gz&lt;br /&gt;
md5=`md5sum ./qt-everywhere-opensource-src-4.8.6.tar.gz | awk '{ print $1 }'` &amp;amp;&amp;amp;&lt;br /&gt;
[ $md5 == &amp;quot;2edbe4d6c2eff33ef91732602f3518eb&amp;quot; ] || echo &amp;quot;MD5 mismatch. Problem downloading Qt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# This will configure and build Qt in RELEASE against the zlib and openssl previously built&lt;br /&gt;
tar -xzvf qt-everywhere-opensource-src-4.8.6.tar.gz&lt;br /&gt;
mv qt-everywhere-opensource-src-4.8.6 qt-everywhere-opensource-release-src-4.8.6&lt;br /&gt;
mkdir qt-everywhere-opensource-release-build-4.8.6&lt;br /&gt;
cd qt-everywhere-opensource-release-src-4.8.6&lt;br /&gt;
./configure -prefix $cwd/qt-everywhere-opensource-release-build-4.8.6/    \&lt;br /&gt;
                   -release \&lt;br /&gt;
                   -opensource -confirm-license \&lt;br /&gt;
                   -no-qt3support \&lt;br /&gt;
                   -webkit \&lt;br /&gt;
                   -nomake examples -nomake demos \&lt;br /&gt;
                   -openssl -I $cwd/openssl-1.0.1e/include   -L $cwd/openssl-1.0.1e \&lt;br /&gt;
&amp;amp;&amp;amp; make -j7 &amp;amp;&amp;amp; make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
* Why Qt 4 &amp;gt;= 4.8.5 should be used on Ubuntu 12.04 and above ?&lt;br /&gt;
** Slicer issue [http://www.na-mic.org/Bug/view.php?id=3325 #3325]&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CentOS ====&lt;br /&gt;
*CentOS user type:&lt;br /&gt;
 yum install make gcc-c++ libX11-devel libXt-devel libXext-devel libGLU-devel mesa-libOSMesa-devel mesa-libGL-devel mesa-libGLU-devel ncurses&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Todo: This will have to be added in FAQ: Troubleshoot section&lt;br /&gt;
''glx-utils'' provides ''glxgears'' that can be used to test rendering&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MacOSX ===&lt;br /&gt;
&lt;br /&gt;
'''MacOSX 10.9.4 (Maverick):'''&lt;br /&gt;
&lt;br /&gt;
''' (1) Make sure to install this update: http://support.apple.com/kb/DL1754'''&lt;br /&gt;
&lt;br /&gt;
''' (2) Use CMake 3.0.1 - it is known to be working and is supported''' (if you want to use CMake already installed on your system, 2.8.12.2 is known to work on Mac OS X 10.9.5)&lt;br /&gt;
&lt;br /&gt;
* Mac Os X &amp;gt;= 10.5 (Leopard)&lt;br /&gt;
* [{{tool|download|cmake}} CMake] &amp;gt;= 2.8.9&lt;br /&gt;
** For Mac Os X &amp;gt;= 10.8 ([http://en.wikipedia.org/wiki/OS_X_Mountain_Lion Mountain Lion]) and/or recent XCode &amp;gt;= 4.5.X - [{{tool|download|cmake}} CMake] &amp;gt;= 2.8.11 is required. See http://www.cmake.org/files/v2.8/cmake-2.8.11-Darwin64-universal.tar.gz&lt;br /&gt;
&amp;lt;!-- Waiting for the official release, get the release candidate rc1 [http://www.cmake.org/files/v2.8/cmake-2.8.11-rc1-Darwin64-universal.tar.gz here]. For explanation, see [[Documentation/{{documentation/version}}/Developers/Build_Instructions#ld:_framework_not_found_QtWebKit|here]] and [[Documentation/{{documentation/version}}/Developers/Build_Instructions#On_MacOSX_10.8.2C_CMake_hangs_forever|here]]. These versions are also known to work: exact version 20130121-g92bd8 [http://www.cmake.org/files/dev/cmake-2.8.10.20130121-g92bd8-Darwin-universal.tar.gz here] (or version &amp;gt;= 2.8.10.20130220 [http://www.cmake.org/files/dev/?C=M;O=D here]).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -O http://www.cmake.org/files/v2.8/cmake-2.8.11-Darwin64-universal.tar.gz&lt;br /&gt;
 $ tar -xzvf cmake-2.8.11-Darwin64-universal.tar.gz --strip-components=1&lt;br /&gt;
&lt;br /&gt;
 $ CMake\ 2.8-11.app/Contents/bin/cmake --version&lt;br /&gt;
 cmake version 2.8.11&lt;br /&gt;
&lt;br /&gt;
* [{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
* [{{tool|download|svn}} Svn] &amp;gt;= 1.7&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*[[{{tool|logo|cmake}}|x16px]] [{{tool|download|cmake}} CMake] &amp;gt;= 2.8.9&lt;br /&gt;
*[[{{tool|logo|git}}|x16px]] [{{tool|download|git}} Git] &amp;gt;= 1.6.5&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* XCode (for the SDK libs)&lt;br /&gt;
* Qt 4 &amp;gt;= 4.8.5. We recommend you install the following two packages:&lt;br /&gt;
** Download and install [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-opensource-mac-4.8.6-1.dmg qt-opensource-mac-4.8.6-1.dmg]&lt;br /&gt;
** Download and install [http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-opensource-mac-4.8.6-1-debug-libs.dmg qt-opensource-mac-4.8.6-1-debug-libs.dmg]&lt;br /&gt;
** For more details [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt#Mac|here]]&lt;br /&gt;
* XQuartz - For Mac Os X &amp;gt;= 10.8 ([http://en.wikipedia.org/wiki/OS_X_Mountain_Lion Mountain Lion]) install XQuartz (http://xquartz.macosforge.org) to get X11 (no longer a default in OS X).&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Newer Xcode versions (e.g. 4.3.2) use clang as the default compiler and '''clang is not compatible with ITK version 3'''.  You should use ITK version 4 with recent versions of Xcode.&lt;br /&gt;
** Xcode with gcc should ork with either version of ITK.&lt;br /&gt;
** OS X Mountain Lion: In Xcode 4.5 you now need to install command line tools (no longer included by default). Install within Xcode under the Xcode-&amp;gt;Preferences-&amp;gt;Downloads tab (otherwise git svn will give errors). Then you will need to install XQuartz (http://xquartz.macosforge.org) to get X11 (no longer a default in OS X).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* [{{tool|download|cmake}} CMake] &amp;gt;= 3.0&lt;br /&gt;
* [{{tool|download|git}} Git] &amp;gt;= 1.7.10&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*[[{{tool|logo|cmake}}|x16px]]  [{{tool|download|cmake}}  CMake] &amp;gt;= 2.8.10&lt;br /&gt;
*[[{{tool|logo|git}}|x16px]]  [{{tool|download|git}}  Git] &amp;gt;= 1.7.10&lt;br /&gt;
* [https://code.google.com/p/msysgit/downloads/list?can=3 ''Git-X.X.X-preview2013XXXX.exe''] recommended.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Use of [http://code.google.com/p/tortoisegit/ TortoiseGit] is optional.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** {{note}}For convenience, you could update the PATH variable so that ''git'' can be automatically discovered when configuring Slicer. If not, you will have to specify the GIT_EXECUTABLE at configure time.&lt;br /&gt;
&lt;br /&gt;
* [http://www.sliksvn.com/en/download SlikSvn] &amp;lt;!-- or [http://www.cygwin.com cygwin's svn client]--&amp;gt;. If using TortoiseSVN (versions that support command line tools), make sure you install Command line tools (disabled by default)&lt;br /&gt;
&lt;br /&gt;
* NSIS (optional): Needed if packaging Slicer - Click [http://nsis.sourceforge.net/Download here] to download.&lt;br /&gt;
&lt;br /&gt;
* Qt 4.8.6 (for VS2008). See details [[Documentation/{{documentation/version}}/Developers/Build_Instructions/Prerequisites/Qt#Windows|here]]&lt;br /&gt;
** Normally you should plan to build Qt from source to have complete control over the process. See [https://github.com/jcfr/qt-easy-build one-liner build command] &amp;lt;!-- or more detailed [[#Build_instructions]] --&amp;gt;&lt;br /&gt;
** You may find that the '''unsigned''' binary downloads from this site are usable: http://sourceforge.net/projects/qt64ng/files/qt/x86-64/4.8.6/msvc2008/ (If you use .7z varaints extract them in the default location C:\Qt\ otherwise that installation will not be properly configured for use with CMake)&lt;br /&gt;
** '''Details''': Using the Qt Designer on Windows requires that the Slicer plugins are compiled in the same mode as Qt. If Qt was compiled in Release mode (default), Slicer would have to be compiled in Release mode as well. However if Qt is compiled in Debug mode only, Slicer has to be compiled in Debug too. When Qt is in &amp;quot;Release and Debug&amp;quot; mode only the Release version of Designer.exe is generated, Slicer would have to be compiled in Release. So for developers, the &amp;lt;b&amp;gt;Debug mode is recommended&amp;lt;/b&amp;gt;.&lt;br /&gt;
** For VS2012 Qt needs to be build from source. Build will fail, which can be fixed with this diff: https://gist.github.com/Vitallium/5220503 (read the comment too)&lt;br /&gt;
&lt;br /&gt;
* IDE&lt;br /&gt;
** '''Tested/Recommended''': [https://www.microsoft.com/visualstudio/en-us/products/2008-editions Microsoft Visual Studio 9 2008] (Any edition). [http://go.microsoft.com/?linkid=7729279 VS Express 2008 with SP1 direct link] (functional as of Jan 11, 2014)&lt;br /&gt;
*** Make sure to install:&lt;br /&gt;
**** SP1. Click [http://www.microsoft.com/download/en/details.aspx?id=10986 here] to download SP1 and click [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2012/008206.html here] to understand the motivation.&lt;br /&gt;
*** Make sure to patch VS2008 using the script [https://gist.github.com/jcfr/3c7bef3f8b32f9f6ad4b fix-vc9-redist-manifests.ps1]&lt;br /&gt;
** '''Experimental''': The plan is to support [https://www.microsoft.com/visualstudio/en-us/products/2010-editions Microsoft Visual Studio 2010] (Any edition). {{note}} NOTE THAT EXPERIMENTAL MEANS THIS DOESN'T YET WORK :)&lt;br /&gt;
*** Make sure to build or install:&lt;br /&gt;
**** Qt 4.8 &lt;br /&gt;
*** Make sure to install:&lt;br /&gt;
**** SP1. Click [http://www.microsoft.com/download/en/details.aspx?id=23691 here] to download SP1 and click [http://developer.qt.nokia.com/faq/answer/why_do_all_qt_4.7_applications_crash_when_using_windows_7_x64_w_vs_2010 here] to understand the motivation.&lt;br /&gt;
**** SP1 Compiler update. Click [https://www.microsoft.com/download/en/details.aspx?id=4422 here] to download and [http://slicer-devel.65872.n3.nabble.com/Windows-7-64Bits-Slicer-4-Build-with-VC-2010-problem-tt3730524.html#a3731661 here] to understand the motivation.&lt;br /&gt;
&amp;lt;!-- JC: This links shouldn't be here: 1) Since this the developer section, it's assumed Visual Studio is installed. 2) The Dll are distributed within Slicer package --&amp;gt;&lt;br /&gt;
&amp;lt;!-- *** Optional: &amp;quot;Microsoft Visual C++ 2010 SP1 Redistributable Package&amp;quot;. Click [http://www.microsoft.com/download/en/details.aspx?id=13523 here for x64] download, or [http://www.microsoft.com/download/en/details.aspx?id=13523 here for x86] download.  [http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=29 x86 (32bit) for VS 2008] --&amp;gt;&lt;br /&gt;
** '''Experimental''' (Visual Studio 2012): Use a desktop version such as [http://www.microsoft.com/visualstudio/eng/downloads#d-express-windows-desktop Visual Studio 2012 Express &amp;lt;b&amp;gt;for Windows Desktop&amp;lt;/b&amp;gt;] and remember [http://www.microsoft.com/en-us/download/details.aspx?id=38188 Visual Studio 2012 Update 2]). Do &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; use Visual Studio Express 2012 &amp;lt;em&amp;gt;for Windows 8&amp;lt;/em&amp;gt;. You must install [http://msdn.microsoft.com/en-us/library/ms717422.aspx Windows SDK], otherwise CMake will not even find the C compiler during configure. In CMake, choose &amp;lt;tt&amp;gt;Visual Studio 11 Win64&amp;lt;/tt&amp;gt; as generator.&lt;br /&gt;
** '''Experimental''' (Visual Studio 2013 with Update 5, as of [https://github.com/Slicer/Slicer/commit/e5eb47826bacc172b7d1c3f2c2c32d0344fc04f9 commit e5eb478]): Slicer compilation is successful, with some caveats. Steps:&lt;br /&gt;
*** CMake &amp;gt;= 3.3.1&lt;br /&gt;
*** Build Qt 4.8.7 with SSL support using [https://github.com/jcfr/qt-easy-build/tree/4.8.7 qt-easy-build].&lt;br /&gt;
*** For Debug mode, disable &amp;lt;code&amp;gt;Slicer_USE_NUMPY&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Slicer_USE_SimpleITK&amp;lt;/code&amp;gt; in CMake.&lt;br /&gt;
*** For Release mode, disable &amp;lt;code&amp;gt;Slicer_USE_NUMPY&amp;lt;/code&amp;gt; in CMake.&lt;br /&gt;
** '''Un-tested''': Cygwin suite (building with cygwin gcc not supported, but the cygwin shell environment can be used to run git, svn, etc).&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.3/Modules/Markups&amp;diff=42788</id>
		<title>Documentation/4.3/Modules/Markups</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.3/Modules/Markups&amp;diff=42788"/>
		<updated>2015-09-23T14:14:42Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* Adding Fiducials via Mouse Clicks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NA-MIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149. Information on NA-MIC can be obtained from the [http://www.na-mic.org/ NA-MIC website].&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Nicole Aucoin, SPL, BWH&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Nicole Aucoin, &amp;lt;email&amp;gt;nicole@bwh.harvard.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|spl}}|{{collaborator|longname|spl}}&lt;br /&gt;
}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module is used to manage markups in Slicer. &lt;br /&gt;
&lt;br /&gt;
It is based on the functionality in the Slicer 3.6 Fiducials module, with elements from the Slicer 4.2 Annotations module. &lt;br /&gt;
&lt;br /&gt;
Currently, only fiducials are supported.&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-description}}&lt;br /&gt;
&lt;br /&gt;
Development history can be found in the [[documentation/{{documentation/version}}/Modules/{{documentation/modulename}}#References|references]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
&lt;br /&gt;
This module allows you to add new markups, edit markups in a list, delete markups and modify display properties of markups.&lt;br /&gt;
&lt;br /&gt;
Markups can be passed to command line modules (CLIs) using the &amp;lt;pre&amp;gt;--point&amp;lt;/pre&amp;gt; argument. &lt;br /&gt;
&lt;br /&gt;
The Mouse mode tool bar can be used to place new markups by positioning the mouse and left clicking in the viewers. Once you are in Place mode and placing Markups fiducials, you can use the 'p' key to place a new fiducial while the Markups GUI is open. You can also use a right button click to stop placing fiducials when in persistent mode.&lt;br /&gt;
&lt;br /&gt;
The Markups module can convert Annotation fiducials into Markups fiducials, and will offer the user the option of doing it automatically when the Markups GUI is entered. There is also a manual button under the Advanced tab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Panels ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Markups-GUI-Collapsed.png | GUI&lt;br /&gt;
File:Markups-ModifyList.png | Select the active list, set visibility and lock flags, set uniform scale.&lt;br /&gt;
File:Markups-JumpSlices.png | Jump the 2D slice view windows to the coordinates of the highlighted markup.&lt;br /&gt;
File:Markups-ModifyMarkupsInList.png | Modify Markups in list: toggle visibility, selected, and lock flags, delete.&lt;br /&gt;
File:Markups-Table.png | Table showing the fiducials in the active Markups list&lt;br /&gt;
File:Markups-Advanced.png | Advanced panel: move markups up or down, add a markup, name format, convert annotation fiducials, display properties for the list of markups&lt;br /&gt;
File:Markups-DisplayProperties.png | Display properties, inside the Advaned panel, includes 2d projection settings.&lt;br /&gt;
File:Markups-MouseToolbar.png | Place Markup fiducials by setting the Mouse mode in the tool bar&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-parametersdescription}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
&lt;br /&gt;
*[[Documentation/Nightly/Modules/Annotations | Annotations]] module is similar, and will be deprecated as the functionality is moved to the Markups module.&lt;br /&gt;
*[https://github.com/Slicer/Slicer/blob/master/Modules/Scripted/Endoscopy/Endoscopy.py#L303 Endoscopy module] uses fiducials&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
&lt;br /&gt;
*[http://wiki.na-mic.org/Wiki/index.php/2013_Summer_Project_Week:MarkupsModuleSummer2013 Summer 2013 Project Week project page]&lt;br /&gt;
*[http://wiki.na-mic.org/Wiki/index.php/2013_Project_Week:MarkupsModule Winter 2013 Project Week project page]&lt;br /&gt;
*[http://wiki.na-mic.org/Wiki/index.php/2012_Summer_Project_Week:AnnotationModule Summer 2012 Project Week project page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-developerinfo}}&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
=== Load From File ===&lt;br /&gt;
&lt;br /&gt;
Markups fiducials can be loaded from file:&lt;br /&gt;
&lt;br /&gt;
  slicer.util.loadMarkupsFiducialList('/path/to/list/F.fcsv')&lt;br /&gt;
&lt;br /&gt;
=== Adding Fiducials Programatically ===&lt;br /&gt;
&lt;br /&gt;
Markups fiducials can be added to the currently active list from the python console by using the following module logic command:&lt;br /&gt;
&lt;br /&gt;
  slicer.modules.markups.logic().AddFiducial()&lt;br /&gt;
&lt;br /&gt;
The command with no arguments will place a new fiducial at the origin. You can also pass it an initial location:&lt;br /&gt;
&lt;br /&gt;
  slicer.modules.markups.logic().AddFiducial(1.0, -2.0, 3.3)&lt;br /&gt;
&lt;br /&gt;
=== Adding Fiducials via Mouse Clicks ===&lt;br /&gt;
&lt;br /&gt;
You can also set the mouse mode into Markups fiducial placement by calling:&lt;br /&gt;
&lt;br /&gt;
  placeModePersistence = 1&lt;br /&gt;
  slicer.modules.markups.logic().StartPlaceMode(placeModePersistence)&lt;br /&gt;
&lt;br /&gt;
A lower level way to do this is via the selection and interaction nodes:&lt;br /&gt;
  selectionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLSelectionNodeSingleton&amp;quot;)&lt;br /&gt;
  selectionNode.SetReferenceActivePlaceNodeClassName(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
  interactionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLInteractionNodeSingleton&amp;quot;)&lt;br /&gt;
  placeModePersistence = 1&lt;br /&gt;
  interactionNode.SetPlaceModePersistence(placeModePersistence)&lt;br /&gt;
  # mode 1 is Place, can also be accessed via slicer.vtkMRMLInteractionNode().Place&lt;br /&gt;
  interactionNode.SetCurrentInteractionMode(1)&lt;br /&gt;
&lt;br /&gt;
If you want to interact with a specific fiducial list node, let's say &amp;quot;vtkMRMLMarkupsFiducialNode1&amp;quot;, add the following line of code:&lt;br /&gt;
  selectionNode.SetActivePlaceNodeID(&amp;quot;vtkMRMLMarkupsFiducialNode1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you use the previous command with an ID that does not exist, Slicer will create a new vtkMRMLMarkupsFiducialNode with an ID of the form &amp;quot;vtkMRMLMarkupsFiducialNode#&amp;quot; where # is the last vtkMRMLMarkupsFiducialNode ID that already exists increased by one.&lt;br /&gt;
&lt;br /&gt;
=== Access to Fiducial Properties ===&lt;br /&gt;
&lt;br /&gt;
Each vtkMRMLMarkupsFiducialNode has a vector of points in it which can be accessed from python:&lt;br /&gt;
&lt;br /&gt;
  fidNode = getNode(&amp;quot;vtkMRMLMarkupsFiducialNode1&amp;quot;)&lt;br /&gt;
  n = fidNode.AddFiducial(4.0, 5.5, -6.0)&lt;br /&gt;
  fidNode.SetNthFiducialLabel(n, &amp;quot;new label&amp;quot;)&lt;br /&gt;
  # each markup is given a unique id which can be accessed from the superclass level&lt;br /&gt;
  id1 = fidNode.GetNthMarkupID(n)&lt;br /&gt;
  # manually set the position&lt;br /&gt;
  fidNode.SetNthFiducialPosition(n, 6.0, 7.0, 8.0)&lt;br /&gt;
  # set the label&lt;br /&gt;
  fidNode.SetNthFiducialLabel(n, &amp;quot;New label&amp;quot;)&lt;br /&gt;
  # set the selected flag, only selected = 1 fiducials will be passed to CLIs&lt;br /&gt;
  fidNode.SetNthFiducialSelected(n, 1)&lt;br /&gt;
  # set the visibility flag&lt;br /&gt;
  fidNode.SetNthFiducialVisibility(n, 0)  &lt;br /&gt;
&lt;br /&gt;
You can also look at the sample code in the [https://github.com/Slicer/Slicer/blob/master/Modules/Scripted/Endoscopy/Endoscopy.py#L287  Endoscopy module] to see how python is used to access fiducials from a scripted module.&lt;br /&gt;
&lt;br /&gt;
=== VTK Widget access ===&lt;br /&gt;
&lt;br /&gt;
The Markups 3D fiducial displayable manager can be accessed from python allowing debugging of the vtkSeedWidget:&lt;br /&gt;
&lt;br /&gt;
  lm = slicer.app.layoutManager()&lt;br /&gt;
  td = lm.threeDWidget(0)&lt;br /&gt;
  ms = vtk.vtkCollection()&lt;br /&gt;
  td.getDisplayableManagers(ms)&lt;br /&gt;
  for i in range(ms.GetNumberOfItems()): &lt;br /&gt;
    m = ms.GetItemAsObject(i)&lt;br /&gt;
    if m.GetClassName() == &amp;quot;vtkMRMLMarkupsFiducialDisplayableManager3D&amp;quot;:&lt;br /&gt;
      print i, m.GetClassName()&lt;br /&gt;
      h = m.GetHelper()&lt;br /&gt;
      seedWidget = h.GetWidget(fidNode)&lt;br /&gt;
      seedRepresentation = seedWidget.GetSeedRepresentation()&lt;br /&gt;
      handleRep2 = seedRepresentation.GetHandleRepresentation(2)&lt;br /&gt;
      print handleRep2.GetDisplayPosition()&lt;br /&gt;
      print handleRep2.GetWorldPosition()&lt;br /&gt;
&lt;br /&gt;
== C++ ==&lt;br /&gt;
&lt;br /&gt;
===Selection and Interaction===&lt;br /&gt;
&lt;br /&gt;
For the selection and interaction nodes, make sure that you access the singleton nodes already in the scene (rather than making your own) via (caveat: this call works on displayable managers, you may have to go a different route to get at the application logic):&lt;br /&gt;
  vtkMRMLApplicationLogic *mrmlAppLogic = this-&amp;gt;GetMRMLApplicationLogic();&lt;br /&gt;
  vtkMRMLInteractionNode *inode = mrmlAppLogic-&amp;gt;GetInteractionNode();&lt;br /&gt;
  vtkMRMLSelectionNode *snode = mrmlAppLogic-&amp;gt;GetSelectionNode();&lt;br /&gt;
If you can't get at the mrml application logic, you can get the nodes from the scene:&lt;br /&gt;
  vtkMRMLInteractionNode *interactionNode = vtkMRMLInteractionNode::SafeDownCast(this-&amp;gt;GetMRMLScene()-&amp;gt;GetNodeByID(&amp;quot;vtkMRMLInteractionNodeSingleton&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
You can then call methods on the nodes or add your own event observers as in&lt;br /&gt;
  vtkSlicerMarkupsModuleLogic::ObserveMRMLScene&lt;br /&gt;
You can see vtkSlicerMarkupsModuleLogic::ProcessMRMLNodesEvents to see how to respond to interaction node changes.&lt;br /&gt;
&lt;br /&gt;
Slicer4/Base/QTGUI/qSlicerMouseModeToolBar.cxx has a lot of the code you'll need as well, with a slightly different way of getting at the mrml app logic to access the nodes.&lt;br /&gt;
&lt;br /&gt;
The calls you need to make to switch into placing fiducials with the mouse are:&lt;br /&gt;
  selectionNode-&amp;gt;SetReferenceActivePlaceNodeClassName(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;);&lt;br /&gt;
  interactionNode-&amp;gt;SetCurrentInteractionMode(vtkMRMLInteractionNode::Place);&lt;br /&gt;
If you don't set PlaceModePersistence on the interaction node to 1, the mouse mode/current interaction mode will automatically go back to view transform after one fiducial has been placed, and you just need to reset the current interaction mode for future placing (the active place node class name and ID are persistent).&lt;br /&gt;
&lt;br /&gt;
=== Programmatic Access to Fiducials ===&lt;br /&gt;
&lt;br /&gt;
This section explains how to access fiducial nodes added into the scene by the user.&lt;br /&gt;
&lt;br /&gt;
In your module's Logic class, overwrite SetMRMLSceneInternal to observe the NodeAddedEvent of the scene:&lt;br /&gt;
 void vtkSlicerMYMODULEModuleLogic::SetMRMLSceneInternal(vtkMRMLScene * newScene)&lt;br /&gt;
   {&lt;br /&gt;
   vtkIntArray *events = vtkIntArray::New();&lt;br /&gt;
   events-&amp;gt;InsertNextValue(vtkMRMLScene::NodeAddedEvent);&lt;br /&gt;
   // Optionally you can add more events here, &lt;br /&gt;
   // such as vtkMRMLScene::NodeRemovedEvent&lt;br /&gt;
   this-&amp;gt;SetAndObserveMRMLSceneEventsInternal(newScene, events);&lt;br /&gt;
   events-&amp;gt;Delete();&lt;br /&gt;
   }&lt;br /&gt;
Via the set and observe mrml scene macro, anytime a node is added into the scene, it will trigger the base Logic class method&lt;br /&gt;
[http://slicer.org/doc/html/classvtkMRMLAbstractLogic.html#a51fdf00ecfc18c1a1465d4bccb789ef1 vtkMRMLAbstractLogic::ProcessMRMLNodesEvents] which calls the virtual method &amp;lt;code&amp;gt;vtkMRMLAbstractLogic::OnMRMLSceneNodeAdded(vtkMRMLNode* node)&amp;lt;/code&amp;gt;&lt;br /&gt;
Reimplement that method in your logic class:&lt;br /&gt;
 void vtkSlicerMYMODULEModuleLogic::OnMRMLSceneNodeAdded(vtkMRMLNode* addedNode)&lt;br /&gt;
   {&lt;br /&gt;
   vtkMRMLMarkupsFiducialNode* fidNode =&lt;br /&gt;
     vtkMRMLMarkupsFiducialNode::SafeDownCast(addedNode);&lt;br /&gt;
   if (fidNode)&lt;br /&gt;
     {&lt;br /&gt;
     // here you write what you need to do when a &lt;br /&gt;
     // fiducial node is added into the scene&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.3/Modules/Markups&amp;diff=42787</id>
		<title>Documentation/4.3/Modules/Markups</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.3/Modules/Markups&amp;diff=42787"/>
		<updated>2015-09-23T14:11:29Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* Adding Fiducials via Mouse Clicks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NA-MIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149. Information on NA-MIC can be obtained from the [http://www.na-mic.org/ NA-MIC website].&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Nicole Aucoin, SPL, BWH&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Nicole Aucoin, &amp;lt;email&amp;gt;nicole@bwh.harvard.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|spl}}|{{collaborator|longname|spl}}&lt;br /&gt;
}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
This module is used to manage markups in Slicer. &lt;br /&gt;
&lt;br /&gt;
It is based on the functionality in the Slicer 3.6 Fiducials module, with elements from the Slicer 4.2 Annotations module. &lt;br /&gt;
&lt;br /&gt;
Currently, only fiducials are supported.&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-description}}&lt;br /&gt;
&lt;br /&gt;
Development history can be found in the [[documentation/{{documentation/version}}/Modules/{{documentation/modulename}}#References|references]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
&lt;br /&gt;
This module allows you to add new markups, edit markups in a list, delete markups and modify display properties of markups.&lt;br /&gt;
&lt;br /&gt;
Markups can be passed to command line modules (CLIs) using the &amp;lt;pre&amp;gt;--point&amp;lt;/pre&amp;gt; argument. &lt;br /&gt;
&lt;br /&gt;
The Mouse mode tool bar can be used to place new markups by positioning the mouse and left clicking in the viewers. Once you are in Place mode and placing Markups fiducials, you can use the 'p' key to place a new fiducial while the Markups GUI is open. You can also use a right button click to stop placing fiducials when in persistent mode.&lt;br /&gt;
&lt;br /&gt;
The Markups module can convert Annotation fiducials into Markups fiducials, and will offer the user the option of doing it automatically when the Markups GUI is entered. There is also a manual button under the Advanced tab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Panels ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Markups-GUI-Collapsed.png | GUI&lt;br /&gt;
File:Markups-ModifyList.png | Select the active list, set visibility and lock flags, set uniform scale.&lt;br /&gt;
File:Markups-JumpSlices.png | Jump the 2D slice view windows to the coordinates of the highlighted markup.&lt;br /&gt;
File:Markups-ModifyMarkupsInList.png | Modify Markups in list: toggle visibility, selected, and lock flags, delete.&lt;br /&gt;
File:Markups-Table.png | Table showing the fiducials in the active Markups list&lt;br /&gt;
File:Markups-Advanced.png | Advanced panel: move markups up or down, add a markup, name format, convert annotation fiducials, display properties for the list of markups&lt;br /&gt;
File:Markups-DisplayProperties.png | Display properties, inside the Advaned panel, includes 2d projection settings.&lt;br /&gt;
File:Markups-MouseToolbar.png | Place Markup fiducials by setting the Mouse mode in the tool bar&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-parametersdescription}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
&lt;br /&gt;
*[[Documentation/Nightly/Modules/Annotations | Annotations]] module is similar, and will be deprecated as the functionality is moved to the Markups module.&lt;br /&gt;
*[https://github.com/Slicer/Slicer/blob/master/Modules/Scripted/Endoscopy/Endoscopy.py#L303 Endoscopy module] uses fiducials&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
&lt;br /&gt;
*[http://wiki.na-mic.org/Wiki/index.php/2013_Summer_Project_Week:MarkupsModuleSummer2013 Summer 2013 Project Week project page]&lt;br /&gt;
*[http://wiki.na-mic.org/Wiki/index.php/2013_Project_Week:MarkupsModule Winter 2013 Project Week project page]&lt;br /&gt;
*[http://wiki.na-mic.org/Wiki/index.php/2012_Summer_Project_Week:AnnotationModule Summer 2012 Project Week project page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-developerinfo}}&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
=== Load From File ===&lt;br /&gt;
&lt;br /&gt;
Markups fiducials can be loaded from file:&lt;br /&gt;
&lt;br /&gt;
  slicer.util.loadMarkupsFiducialList('/path/to/list/F.fcsv')&lt;br /&gt;
&lt;br /&gt;
=== Adding Fiducials Programatically ===&lt;br /&gt;
&lt;br /&gt;
Markups fiducials can be added to the currently active list from the python console by using the following module logic command:&lt;br /&gt;
&lt;br /&gt;
  slicer.modules.markups.logic().AddFiducial()&lt;br /&gt;
&lt;br /&gt;
The command with no arguments will place a new fiducial at the origin. You can also pass it an initial location:&lt;br /&gt;
&lt;br /&gt;
  slicer.modules.markups.logic().AddFiducial(1.0, -2.0, 3.3)&lt;br /&gt;
&lt;br /&gt;
=== Adding Fiducials via Mouse Clicks ===&lt;br /&gt;
&lt;br /&gt;
You can also set the mouse mode into Markups fiducial placement by calling:&lt;br /&gt;
&lt;br /&gt;
  placeModePersistence = 1&lt;br /&gt;
  slicer.modules.markups.logic().StartPlaceMode(placeModePersistence)&lt;br /&gt;
&lt;br /&gt;
A lower level way to do this is via the selection and interaction nodes:&lt;br /&gt;
  selectionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLSelectionNodeSingleton&amp;quot;)&lt;br /&gt;
  selectionNode.SetReferenceActivePlaceNodeClassName(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;)&lt;br /&gt;
  interactionNode = slicer.mrmlScene.GetNodeByID(&amp;quot;vtkMRMLInteractionNodeSingleton&amp;quot;)&lt;br /&gt;
  placeModePersistence = 1&lt;br /&gt;
  interactionNode.SetPlaceModePersistence(placeModePersistence)&lt;br /&gt;
  # mode 1 is Place, can also be accessed via slicer.vtkMRMLInteractionNode().Place&lt;br /&gt;
  interactionNode.SetCurrentInteractionMode(1)&lt;br /&gt;
&lt;br /&gt;
If you want to interact with a specific fiducial list node, add the following line of code:&lt;br /&gt;
  selectionNode.SetActivePlaceNodeID({your_node_ID})&lt;br /&gt;
&lt;br /&gt;
=== Access to Fiducial Properties ===&lt;br /&gt;
&lt;br /&gt;
Each vtkMRMLMarkupsFiducialNode has a vector of points in it which can be accessed from python:&lt;br /&gt;
&lt;br /&gt;
  fidNode = getNode(&amp;quot;vtkMRMLMarkupsFiducialNode1&amp;quot;)&lt;br /&gt;
  n = fidNode.AddFiducial(4.0, 5.5, -6.0)&lt;br /&gt;
  fidNode.SetNthFiducialLabel(n, &amp;quot;new label&amp;quot;)&lt;br /&gt;
  # each markup is given a unique id which can be accessed from the superclass level&lt;br /&gt;
  id1 = fidNode.GetNthMarkupID(n)&lt;br /&gt;
  # manually set the position&lt;br /&gt;
  fidNode.SetNthFiducialPosition(n, 6.0, 7.0, 8.0)&lt;br /&gt;
  # set the label&lt;br /&gt;
  fidNode.SetNthFiducialLabel(n, &amp;quot;New label&amp;quot;)&lt;br /&gt;
  # set the selected flag, only selected = 1 fiducials will be passed to CLIs&lt;br /&gt;
  fidNode.SetNthFiducialSelected(n, 1)&lt;br /&gt;
  # set the visibility flag&lt;br /&gt;
  fidNode.SetNthFiducialVisibility(n, 0)  &lt;br /&gt;
&lt;br /&gt;
You can also look at the sample code in the [https://github.com/Slicer/Slicer/blob/master/Modules/Scripted/Endoscopy/Endoscopy.py#L287  Endoscopy module] to see how python is used to access fiducials from a scripted module.&lt;br /&gt;
&lt;br /&gt;
=== VTK Widget access ===&lt;br /&gt;
&lt;br /&gt;
The Markups 3D fiducial displayable manager can be accessed from python allowing debugging of the vtkSeedWidget:&lt;br /&gt;
&lt;br /&gt;
  lm = slicer.app.layoutManager()&lt;br /&gt;
  td = lm.threeDWidget(0)&lt;br /&gt;
  ms = vtk.vtkCollection()&lt;br /&gt;
  td.getDisplayableManagers(ms)&lt;br /&gt;
  for i in range(ms.GetNumberOfItems()): &lt;br /&gt;
    m = ms.GetItemAsObject(i)&lt;br /&gt;
    if m.GetClassName() == &amp;quot;vtkMRMLMarkupsFiducialDisplayableManager3D&amp;quot;:&lt;br /&gt;
      print i, m.GetClassName()&lt;br /&gt;
      h = m.GetHelper()&lt;br /&gt;
      seedWidget = h.GetWidget(fidNode)&lt;br /&gt;
      seedRepresentation = seedWidget.GetSeedRepresentation()&lt;br /&gt;
      handleRep2 = seedRepresentation.GetHandleRepresentation(2)&lt;br /&gt;
      print handleRep2.GetDisplayPosition()&lt;br /&gt;
      print handleRep2.GetWorldPosition()&lt;br /&gt;
&lt;br /&gt;
== C++ ==&lt;br /&gt;
&lt;br /&gt;
===Selection and Interaction===&lt;br /&gt;
&lt;br /&gt;
For the selection and interaction nodes, make sure that you access the singleton nodes already in the scene (rather than making your own) via (caveat: this call works on displayable managers, you may have to go a different route to get at the application logic):&lt;br /&gt;
  vtkMRMLApplicationLogic *mrmlAppLogic = this-&amp;gt;GetMRMLApplicationLogic();&lt;br /&gt;
  vtkMRMLInteractionNode *inode = mrmlAppLogic-&amp;gt;GetInteractionNode();&lt;br /&gt;
  vtkMRMLSelectionNode *snode = mrmlAppLogic-&amp;gt;GetSelectionNode();&lt;br /&gt;
If you can't get at the mrml application logic, you can get the nodes from the scene:&lt;br /&gt;
  vtkMRMLInteractionNode *interactionNode = vtkMRMLInteractionNode::SafeDownCast(this-&amp;gt;GetMRMLScene()-&amp;gt;GetNodeByID(&amp;quot;vtkMRMLInteractionNodeSingleton&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
You can then call methods on the nodes or add your own event observers as in&lt;br /&gt;
  vtkSlicerMarkupsModuleLogic::ObserveMRMLScene&lt;br /&gt;
You can see vtkSlicerMarkupsModuleLogic::ProcessMRMLNodesEvents to see how to respond to interaction node changes.&lt;br /&gt;
&lt;br /&gt;
Slicer4/Base/QTGUI/qSlicerMouseModeToolBar.cxx has a lot of the code you'll need as well, with a slightly different way of getting at the mrml app logic to access the nodes.&lt;br /&gt;
&lt;br /&gt;
The calls you need to make to switch into placing fiducials with the mouse are:&lt;br /&gt;
  selectionNode-&amp;gt;SetReferenceActivePlaceNodeClassName(&amp;quot;vtkMRMLMarkupsFiducialNode&amp;quot;);&lt;br /&gt;
  interactionNode-&amp;gt;SetCurrentInteractionMode(vtkMRMLInteractionNode::Place);&lt;br /&gt;
If you don't set PlaceModePersistence on the interaction node to 1, the mouse mode/current interaction mode will automatically go back to view transform after one fiducial has been placed, and you just need to reset the current interaction mode for future placing (the active place node class name and ID are persistent).&lt;br /&gt;
&lt;br /&gt;
=== Programmatic Access to Fiducials ===&lt;br /&gt;
&lt;br /&gt;
This section explains how to access fiducial nodes added into the scene by the user.&lt;br /&gt;
&lt;br /&gt;
In your module's Logic class, overwrite SetMRMLSceneInternal to observe the NodeAddedEvent of the scene:&lt;br /&gt;
 void vtkSlicerMYMODULEModuleLogic::SetMRMLSceneInternal(vtkMRMLScene * newScene)&lt;br /&gt;
   {&lt;br /&gt;
   vtkIntArray *events = vtkIntArray::New();&lt;br /&gt;
   events-&amp;gt;InsertNextValue(vtkMRMLScene::NodeAddedEvent);&lt;br /&gt;
   // Optionally you can add more events here, &lt;br /&gt;
   // such as vtkMRMLScene::NodeRemovedEvent&lt;br /&gt;
   this-&amp;gt;SetAndObserveMRMLSceneEventsInternal(newScene, events);&lt;br /&gt;
   events-&amp;gt;Delete();&lt;br /&gt;
   }&lt;br /&gt;
Via the set and observe mrml scene macro, anytime a node is added into the scene, it will trigger the base Logic class method&lt;br /&gt;
[http://slicer.org/doc/html/classvtkMRMLAbstractLogic.html#a51fdf00ecfc18c1a1465d4bccb789ef1 vtkMRMLAbstractLogic::ProcessMRMLNodesEvents] which calls the virtual method &amp;lt;code&amp;gt;vtkMRMLAbstractLogic::OnMRMLSceneNodeAdded(vtkMRMLNode* node)&amp;lt;/code&amp;gt;&lt;br /&gt;
Reimplement that method in your logic class:&lt;br /&gt;
 void vtkSlicerMYMODULEModuleLogic::OnMRMLSceneNodeAdded(vtkMRMLNode* addedNode)&lt;br /&gt;
   {&lt;br /&gt;
   vtkMRMLMarkupsFiducialNode* fidNode =&lt;br /&gt;
     vtkMRMLMarkupsFiducialNode::SafeDownCast(addedNode);&lt;br /&gt;
   if (fidNode)&lt;br /&gt;
     {&lt;br /&gt;
     // here you write what you need to do when a &lt;br /&gt;
     // fiducial node is added into the scene&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/SlicerConfigAndUseSlicerTweaks&amp;diff=42620</id>
		<title>Documentation/Labs/SlicerConfigAndUseSlicerTweaks</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/SlicerConfigAndUseSlicerTweaks&amp;diff=42620"/>
		<updated>2015-09-06T23:24:06Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* Use-cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
This page describes possible improvements to the SlicerConfig.cmake and UseSlicer.cmake files. These files are used when calling:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find_package(Slicer REQUIRED)&lt;br /&gt;
include(${Slicer_USE_FILE})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The idea is to re-factor these files to avoid extension developers to implement clever work around and hacks for their use-cases, and facilitate overall maintenance.&lt;br /&gt;
&lt;br /&gt;
== Use-cases ==&lt;br /&gt;
&lt;br /&gt;
=== SPHARM-PDM ===&lt;br /&gt;
&lt;br /&gt;
Extension: https://github.com/NIRALUser/SPHARM-PDM/blob/master/SuperBuild.cmake&lt;br /&gt;
&lt;br /&gt;
The goal is to re-use only the Slicer packaging macros without having the external projects built by Slicer included in the extension.&lt;br /&gt;
&lt;br /&gt;
The Slicer extension projects are not needed by the extension because it builds a static version of these projects.&lt;br /&gt;
&lt;br /&gt;
Additional improvement: One may want to include some of the Slicer libraries (e.g. VTK) but may want to compile a specific version of other libraries that are provided by Slicer (e.g. ITK). Currently, it is complicated to do this operation: one needs to unset and reset variables (e.g. ITK_DIR) since Slicer requires that certain variables are set to certain values (to the value these variables have in the built tree of Slicer). One possible improvement would be to make optional the inclusion of the external libraries Slicer builds.&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/Extensions&amp;diff=42371</id>
		<title>Documentation/Nightly/Developers/FAQ/Extensions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/Extensions&amp;diff=42371"/>
		<updated>2015-08-11T19:04:40Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* How to package an extension ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;__TOC__&lt;br /&gt;
={{#titleparts: {{PAGENAME}} | | -1 }}=&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
='''Developer FAQ: {{{1}}}'''=&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:Documentation/{{documentation/version}}/FAQ/Extensions}}&lt;br /&gt;
&lt;br /&gt;
== What is an extension description file ? ==&lt;br /&gt;
&lt;br /&gt;
See [[Documentation/{{documentation/version}}/Developers/Extensions/DescriptionFile|Description file description]]&lt;br /&gt;
&lt;br /&gt;
== Can an extension contain different types of modules ? ==&lt;br /&gt;
&lt;br /&gt;
Yes. Extensions are used to package together all types of Slicer modules.&lt;br /&gt;
&lt;br /&gt;
See also [[Documentation/{{documentation/version}}/Developers/FAQ#What_is_an_extension_.3F|What_is_an_extension ?]]&lt;br /&gt;
&lt;br /&gt;
== Should the name of the source repository match the name of the extension ? ==&lt;br /&gt;
&lt;br /&gt;
Assuming your extension is named &amp;lt;code&amp;gt;AwesomeFilter&amp;lt;/code&amp;gt;, generally, we suggest to name the extension repository either &amp;lt;code&amp;gt;SlicerAwesomeFilter&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer-AwesomeFilter&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_AwesomeFilter&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SlicerExtension-AwesomeFilter&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SlicerExtension_AwesomeFilter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Doing so will minimize confusion by clearly stating that the code base is associated with Slicer.&lt;br /&gt;
&lt;br /&gt;
== What is the Extensions Index ? ==&lt;br /&gt;
&lt;br /&gt;
{{:Documentation/{{documentation/version}}/Developers/Extensions/Index}}&lt;br /&gt;
&lt;br /&gt;
== What is an API Key ? ==&lt;br /&gt;
&lt;br /&gt;
See http://en.wikipedia.org/wiki/Application_programming_interface_key&lt;br /&gt;
&lt;br /&gt;
== How to obtain an API key to submit on the extension server ? ==&lt;br /&gt;
{{:Documentation/{{documentation/version}}/Developers/Tutorials/ObtainExtensionServerApiKey}}&lt;br /&gt;
&lt;br /&gt;
== How to cache API credentials ? ==&lt;br /&gt;
&lt;br /&gt;
There is now a new feature that allow you to &amp;quot;cache&amp;quot; your credential [1]. If you set the two environment variables, &amp;lt;code&amp;gt;MIDAS_PACKAGE_EMAIL&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MIDAS_PACKAGE_API_KEY&amp;lt;/code&amp;gt;, you would simply need to configure your extension using:&lt;br /&gt;
&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
cd MyExtension-build&lt;br /&gt;
cmake -DCMAKE_BUILD_TYPE:STRING=Release -DSlicer_DIR:PATH=/path/to/Slicer-Superbuild/Slicer-build ../MyExtension&lt;br /&gt;
make ExperimentalUpload&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
[1] http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22457&lt;br /&gt;
&lt;br /&gt;
== Where can I find the extension templates ? ==&lt;br /&gt;
&lt;br /&gt;
The module and extension templates are available in the Slicer source tree: https://github.com/Slicer/Slicer/tree/master/Utilities/Templates/&lt;br /&gt;
&lt;br /&gt;
Using the [[Documentation/{{documentation/version}}/Developers/ExtensionWizard|Extension Wizard]], you could easily create a new extension without having to copy, rename and update manually every files.&lt;br /&gt;
&lt;br /&gt;
== How to build an extension ? ==&lt;br /&gt;
&lt;br /&gt;
Assuming that the source code of your extension is located in folder &amp;lt;code&amp;gt;MyExtension&amp;lt;/code&amp;gt;, this could be achieved doing:&lt;br /&gt;
&lt;br /&gt;
{|width = &amp;quot;100%&amp;quot;&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Makefile&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Visual Studio&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ mkdir MyExtension-build&lt;br /&gt;
$ cd MyExtension-build&lt;br /&gt;
$ cmake -DCMAKE_BUILD_TYPE:STRING=Release -DSlicer_DIR:PATH=/path/to/Slicer-Superbuild/Slicer-build ../MyExtension&lt;br /&gt;
$ make&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start CMake, select source and build directory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Add &amp;lt;code&amp;gt;Slicer_DIR&amp;lt;/code&amp;gt; entry to the cache&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Click on &amp;lt;code&amp;gt;Configure&amp;lt;/code&amp;gt;, select generator, then click on &amp;lt;code&amp;gt;Generate&amp;lt;/code&amp;gt; button.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;code&amp;gt;MyExtension.sln&amp;lt;/code&amp;gt;, select &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt; configuration, then menu &amp;lt;code&amp;gt;Project -&amp;gt; Build Solution&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== How to package an extension ? ==&lt;br /&gt;
&lt;br /&gt;
Assuming your extension has been built into folder &amp;lt;code&amp;gt;MyExtension-build&amp;lt;/code&amp;gt;, this could be achieved doing:&lt;br /&gt;
&lt;br /&gt;
{|width = &amp;quot;100%&amp;quot;&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Makefile&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Visual Studio&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ make package&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;code&amp;gt;MyExtension.sln&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select &amp;lt;code&amp;gt;PACKAGES&amp;lt;/code&amp;gt; project, then right click and select &amp;lt;code&amp;gt;Build&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== How are Superbuild extension packaged ? ==&lt;br /&gt;
&lt;br /&gt;
Extensions using the Superbuild mechanism build projects in two steps:&lt;br /&gt;
* First, the project dependencies are built in an outer-build directory.&lt;br /&gt;
* Then, the project itself is built in an inner-build directory&lt;br /&gt;
&lt;br /&gt;
Extensions can use the Superbuild mechanism. However, developers have to be careful that the packaging macros clean the project before reconfiguring it. This means that if ones uses the Slicer extension packaging macros inside the inner-build directory, when packaging and uploading the extension package, the project will be reconfigured, and variables passed from the outer-build directory will be lost. If the project only depends on libraries that Slicer builds, this is not an issue. If the project has specific dependencies that Slicer does not compile on its own, the developer should be careful to instantiate the Slicer extension packaging macros only in the outer-build directory. This only means that in the latter case, tests should be instantiated in the outer-build directory to allow the Slicer extension building process to test the extension before uploading the extension and the tests results.&lt;br /&gt;
&lt;br /&gt;
== How to upload an extension ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:none; border-left:thick solid red; padding-left:1em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;{{:Documentation/{{documentation/version}}/Developers/Tutorials/BuildTestPackageDistributeExtensions/ExperimentalFolderAccess}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assuming your extension has been built and packaged into folder &amp;lt;code&amp;gt;MyExtension-build&amp;lt;/code&amp;gt;, this could be achieved by first re-configuring the project providing your [[#How_to_obtain_an_API_key_to_submit_on_the_extension_server_.3F|midas credentials]] and then building the &amp;lt;code&amp;gt;ExperimentalUploadOnly&amp;lt;/code&amp;gt; target:&lt;br /&gt;
&lt;br /&gt;
{|width = &amp;quot;100%&amp;quot;&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Makefile&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; style=&amp;quot;border-bottom: 1px solid darkgrey;font-size: 75%;&amp;quot;| Visual Studio&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ cmake -DMIDAS_PACKAGE_EMAIL:STRING=&amp;lt;YOUR-MIDAS-LOGIN&amp;gt; -DMIDAS_PACKAGE_API_KEY:STRING=&amp;lt;YOUR-MIDAS-APIKEY&amp;gt; .&lt;br /&gt;
$ make ExperimentalUploadOnly&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start CMake, select source and build directory&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Add &amp;lt;code&amp;gt;MIDAS_PACKAGE_EMAIL&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MIDAS_PACKAGE_API_KEY&amp;lt;/code&amp;gt; entries to the cache&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;code&amp;gt;MyExtension.sln&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt; configuration&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select &amp;lt;code&amp;gt;ExperimentalUploadOnly&amp;lt;/code&amp;gt; project, then right click and select &amp;lt;code&amp;gt;Build&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Can an extension depend on other extensions ? ==&lt;br /&gt;
&lt;br /&gt;
Yes. An &amp;lt;code&amp;gt;ExtensionFoo&amp;lt;/code&amp;gt; can depend on &amp;lt;code&amp;gt;ExtensionBar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The dependency should be specified as a list by setting the variable &amp;lt;code&amp;gt;EXTENSION_DEPENDS&amp;lt;/code&amp;gt; in the extension &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if you have &amp;lt;code&amp;gt;ModuleA&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ModuleB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ModuleC&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ModuleA&amp;lt;/code&amp;gt; can be used as standalone one. You could create the following extensions:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Extension1&amp;lt;/code&amp;gt; containing  &amp;lt;code&amp;gt;ModuleA&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Extension2&amp;lt;/code&amp;gt; containing  &amp;lt;code&amp;gt;ModuleB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ModuleC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and add the following variable to &amp;lt;code&amp;gt;Extension2/CMakeLists.txt&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set(EXTENSION_DEPENDS Extension1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''User''': &lt;br /&gt;
* If user installs &amp;lt;code&amp;gt;Extension2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Extension1&amp;lt;/code&amp;gt; will automatically be installed first.&lt;br /&gt;
&lt;br /&gt;
'''Developer''': &lt;br /&gt;
* The generated extension description file have a &amp;lt;code&amp;gt;depends&amp;lt;/code&amp;gt; field. See [[Documentation/{{documentation/version}}/Developers/Extensions/DescriptionFile|here]] for details.&lt;br /&gt;
* The extension framework will build the extension in order. When building &amp;lt;code&amp;gt;Extension2&amp;lt;/code&amp;gt;, it will pass the CMake option &amp;lt;code&amp;gt;-DExtension1_DIR:PATH=/path/to/Extension1-build&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== What are the extension specific targets: ExperimentalUpload, ExperimentalUploadOnly, ... ? ==&lt;br /&gt;
&lt;br /&gt;
Slicer extension build system provides the developer with a set of convenient targets allowing to build and upload extensions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;alternate&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Target name&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;Experimental&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Configure, build, test the extension and publish result on CDash.&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ExperimentalUpload&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Equivalent to Experimental target followed by packaging and upload of the extension on the extension server.&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ExperimentalUploadOnly&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Only proceed to the upload of the extension on the extension server.&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BUILD_TESTS&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Locally execute the test&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PACKAGE&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Locally package the extension&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Is --launch flag available for a MacOSX installed Slicer.app ?==&lt;br /&gt;
&lt;br /&gt;
On MacOSx, running Slicer with the --help argument does NOT list the usual launcher related options.&lt;br /&gt;
&lt;br /&gt;
 $ ./Slicer.app/Contents/MacOS/Slicer --help&lt;br /&gt;
 Usage&lt;br /&gt;
  Slicer [options]&lt;br /&gt;
  &lt;br /&gt;
  Options&lt;br /&gt;
    --, --ignore-rest                     Ignores the rest of the labeled arguments following this flag. (default: false)&lt;br /&gt;
    -h, --help                            Display available command line arguments.&lt;br /&gt;
    [...]&lt;br /&gt;
    --version                             Displays version information and exits.&lt;br /&gt;
&lt;br /&gt;
To provide some background information, when generating the package that will be distributed, an application bundle &amp;lt;code&amp;gt;Slicer.app&amp;lt;/code&amp;gt; is created. As explained [http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFBundles/Introduction/Introduction.html here], a bundle is a directory with a standardized hierarchical structure that holds executable code and the resources used by that code. It means that since all libraries contained within a bundle are referenced relatively to the location of either the CLI or the Slicer executable, the use of launcher does NOT make sens.&lt;br /&gt;
&lt;br /&gt;
To help fixing-up the libraries, executables and plugins so that they reference each other in a relative way, CMake provides us with the [http://www.cmake.org/cmake/help/v2.8.8/cmake.html#module:BundleUtilities BundleUtilities] module.&lt;br /&gt;
&lt;br /&gt;
This module is used in two situations:&lt;br /&gt;
# Fixup of Slicer application itself. See [https://github.com/Slicer/Slicer/blob/master/CMake/SlicerCPack.cmake#L36-68 SlicerCPack.cmake#L36-68] and [https://github.com/Slicer/Slicer/blob/master/CMake/SlicerCPackBundleFixup.cmake.in SlicerCPackBundleFixup.cmake.in]&lt;br /&gt;
# Fixup of an extension package. See [https://github.com/Slicer/Slicer/blob/master/CMake/SlicerExtensionCPack.cmake#L126-143 SlicerExtensionCPack.cmake#L126-143] and [https://github.com/Slicer/Slicer/blob/master/CMake/SlicerExtensionCPackBundleFixup.cmake.in SlicerExtensionCPackBundleFixup.cmake.in]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is the difference between Documentation/Nightly/Modules and Documentation/Nightly/Extensions ? ==&lt;br /&gt;
&lt;br /&gt;
As suggested by the namespace names:&lt;br /&gt;
* All module documentation pages should be located under &amp;lt;code&amp;gt;Documentation/Nightly/Modules&amp;lt;/code&amp;gt;&lt;br /&gt;
* All extension documentation pages should be located under &amp;lt;code&amp;gt;Documentation/Nightly/Extensions&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example, if an an extension named &amp;lt;code&amp;gt;DoSomethingGreat&amp;lt;/code&amp;gt; bundles three modules &amp;lt;code&amp;gt;ModuleA&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ModuleB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ModuleC&amp;lt;/code&amp;gt;. The following pages should be created:&lt;br /&gt;
* &amp;lt;code&amp;gt;Documentation/Nightly/Extensions/DoSomethingGreat&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Documentation/Nightly/Modules/ModuleA&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Documentation/Nightly/Modules/ModuleB&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Documentation/Nightly/Modules/ModuleC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In case your extension bundles only one module, the extension name is expected to match the module name. For example, if your extension is named &amp;lt;code&amp;gt;DoSomethingAwesome&amp;lt;/code&amp;gt;, the associated module is expected to be named &amp;lt;code&amp;gt;DoSomethingAwesome&amp;lt;/code&amp;gt;. The following pages will then be created:&lt;br /&gt;
* &amp;lt;code&amp;gt;Documentation/Nightly/Extensions/DoSomethingAwesome&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Documentation/Nightly/Modules/DoSomethingAwesome&amp;lt;/code&amp;gt;&lt;br /&gt;
where page &amp;lt;code&amp;gt;Extensions/DoSomethingAwesome&amp;lt;/code&amp;gt; redirect to page &amp;lt;code&amp;gt;Modules/DoSomethingAwesome&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To setup a redirection, simply add the following text to page &amp;lt;code&amp;gt;Extensions/DoSomethingAwesome&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#REDIRECT [[Documentation/Nightly/Modules/DoSomethingAwesome]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For an example, see [http://www.slicer.org/slicerWiki/index.php?title=Documentation/Nightly/Extensions/SkullStripper&amp;amp;action=edit here]&lt;br /&gt;
&lt;br /&gt;
More details about redirection are available here: http://www.mediawiki.org/wiki/Help:Redirects&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Which URL should be associated with EXTENSION_HOMEPAGE metadata ? ==&lt;br /&gt;
&lt;br /&gt;
Extensions available through the Slicer Extensions Catalog are expected to have a page created under the &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; documentation namespace. The corresponding URL should be associated with the &amp;lt;code&amp;gt;EXTENSION_HOMEPAGE&amp;lt;/code&amp;gt; metadata.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set(EXTENSION_HOMEPAGE &amp;quot;http://slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/DoSomethingGreat&amp;quot;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set(EXTENSION_HOMEPAGE &amp;quot;http://slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/DoSomethingAwesome&amp;quot;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this also apply for extension bundling only one module. Indeed, in this case the page will redirect to the appropriate module page. For example: http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/SkullStripper&lt;br /&gt;
&lt;br /&gt;
== How to rename an extension to add new features ? ==&lt;br /&gt;
&lt;br /&gt;
If you created an extension to perform Task1, but later on, your module is getting more generic and you add some other tasks, the name of your extension might change.&lt;br /&gt;
In order to rename, your extension, you should:&lt;br /&gt;
* Remove your old extension from the ExtensionsIndex&lt;br /&gt;
* Then, submit your extension again (including new features) with a new name&lt;br /&gt;
* Make also sure to add redirection from the &amp;quot;deprecated&amp;quot; module documentation to the &amp;quot;new&amp;quot; pages. On the Slicer wiki, this could be using the [http://www.mediawiki.org/wiki/Help:Redirects #REDIRECT] instruction.&lt;br /&gt;
&lt;br /&gt;
== How to check if an extension is built by Slicer Extensions build system ? ==&lt;br /&gt;
&lt;br /&gt;
Sometimes an extension could be built either as a standalone package or as a Slicer extension. &lt;br /&gt;
&lt;br /&gt;
To differenciate the two cases, the developer could check for the value of:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;ExtensionName&amp;gt;_BUILD_SLICER_EXTENSION&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This variable will be set to ON when the extension is built by the Slicer Extensions build system.&lt;br /&gt;
&lt;br /&gt;
For details: https://github.com/Slicer/Slicer/blob/ff5f5a866d8afcaa0f2e6f615cc8f8cf07361741/Extensions/CMake/SlicerBlockBuildPackageAndUploadExtension.cmake#L95&lt;br /&gt;
&lt;br /&gt;
== How often extensions are uploaded on the extensions server ? ==&lt;br /&gt;
&lt;br /&gt;
Slicer extensions are built and uploaded on the [[Documentation/{{documentation/version}}/Developers/Extensions/Server|extensions server]] every day.&lt;br /&gt;
&lt;br /&gt;
To be more specific, the frequency of extensions build and upload associated with:&lt;br /&gt;
* Slicer nightly package occurs '''every night''' and also '''continuously''' during the day.&lt;br /&gt;
* Slicer {{documentation/currentversion}} lastest stable release package occurs '''every night'''.&lt;br /&gt;
&lt;br /&gt;
== Will an extension be uploaded if associated tests are failing ? ==&lt;br /&gt;
&lt;br /&gt;
Independently of the extension test results, if the extension could be successfully packaged, it will be uploaded on the [[Documentation/{{documentation/version}}/Developers/Extensions/Server|extensions server]].&lt;br /&gt;
&lt;br /&gt;
== How do I associate a remote with my local extension git source directory ? ==&lt;br /&gt;
&lt;br /&gt;
1) Start a terminal (or Git Bash on Windows)&lt;br /&gt;
&lt;br /&gt;
2) Get the associated SSH remote url. [https://help.github.com/articles/which-remote-url-should-i-use#cloning-with-ssh Need help ?]&lt;br /&gt;
&lt;br /&gt;
3) Associate the remote URL with your local git source tree&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote add origin git://github.com/&amp;lt;username&amp;gt;/MyExtension&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Which remote name is expected for extension git checkout ? ==&lt;br /&gt;
&lt;br /&gt;
When packaging an extension and generating the associated [[Documentation/{{documentation/version}}/Developers/Extensions/DescriptionFile|description file]], the system will look for a remote named &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In case you get the error reported below, you will have to either rename or add a remote. [http://git-scm.com/book/en/Git-Basics-Working-with-Remotes Need help ?]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CMake Warning at /path/to/Slicer/CMake/FindGit.cmake:144 (message):&lt;br /&gt;
No remote origin set for git repository: /path/to/MyExtension&lt;br /&gt;
Call Stack (most recent call first):&lt;br /&gt;
/path/to/Slicer/CMake/SlicerMacroExtractRepositoryInfo.cmake:99 (GIT_WC_INFO)&lt;br /&gt;
/path/to/Slicer/CMake/SlicerExtensionCPack.cmake:55 (SlicerMacroExtractRepositoryInfo)&lt;br /&gt;
CMakeLists.txt:25 (include)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why ExtensionWizard failed to describe extension: &amp;quot;script does not set 'EXTENSION_HOMEPAGE'&amp;quot; ? ==&lt;br /&gt;
&lt;br /&gt;
The issue is that the your extension has a &amp;quot;non standard&amp;quot; layout and the wizard was now way of extracting the expected information.&lt;br /&gt;
&lt;br /&gt;
Similar issue has been discussed and reported for the &amp;quot;SPHARM-PDM&amp;quot; or UKF extension.&lt;br /&gt;
&lt;br /&gt;
First half of the solution would be to move the metadata from Common.cmake to CMakeLists.txt as it is done in [1]&lt;br /&gt;
&lt;br /&gt;
Then, you could make sure there is a project() statement by following what is suggested in [2]&lt;br /&gt;
&lt;br /&gt;
If you prefer not to re-organize your extension, you could still contribute extension description file. See [[Documentation/{{documentation/version}}/Developers/Tutorials/Contribute_Extension_Description_File|here]] for details.&lt;br /&gt;
&lt;br /&gt;
[1] http://www.nitrc.org/plugins/scmsvn/viewcvs.php?view=rev&amp;amp;root=spharm-pdm&amp;amp;revision=228&lt;br /&gt;
&lt;br /&gt;
[2] http://www.na-mic.org/Bug/view.php?id=3737#c12081&lt;br /&gt;
&lt;br /&gt;
== Is project() statement allowed in extension CMakeLists.txt ? ==&lt;br /&gt;
&lt;br /&gt;
Following Slicer [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22038 r22038], the project statement is required.&lt;br /&gt;
&lt;br /&gt;
== Is call to &amp;quot;if(NOT Slicer_SOURCE_DIR)&amp;quot; required to protect &amp;quot;find_package(Slicer)&amp;quot; in extension CMakeLists.txt ? ==&lt;br /&gt;
&lt;br /&gt;
Following Slicer [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22063 r22063], protecting call to &amp;lt;code&amp;gt;find_package(Slicer)&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;if(NOT Slicer_SOURCE_DIR)&amp;lt;/code&amp;gt;&lt;br /&gt;
is optional and should be removed to keep code simpler and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 2.8.9)&lt;br /&gt;
&lt;br /&gt;
if(NOT Slicer_SOURCE_DIR)&lt;br /&gt;
  find_package(Slicer COMPONENTS ConfigurePrerequisites)&lt;br /&gt;
endif()&lt;br /&gt;
&lt;br /&gt;
if(NOT Slicer_SOURCE_DIR)&lt;br /&gt;
  set(EXTENSION_NAME EmptyExtensionTemplate)&lt;br /&gt;
  set(EXTENSION_HOMEPAGE &amp;quot;http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/EmptyExtensionTemplate&amp;quot;)&lt;br /&gt;
  set(EXTENSION_CATEGORY &amp;quot;Examples&amp;quot;)&lt;br /&gt;
  set(EXTENSION_CONTRIBUTORS &amp;quot;Jean-Christophe Fillion-Robin (Kitware)&amp;quot;)&lt;br /&gt;
  set(EXTENSION_DESCRIPTION &amp;quot;This is an example of extension bundling N module(s)&amp;quot;)&lt;br /&gt;
  set(EXTENSION_ICONURL &amp;quot;http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Extensions/Testing/EmptyExtensionTemplate/EmptyExtensionTemplate.png?revision=21746&amp;amp;view=co&amp;quot;)&lt;br /&gt;
  set(EXTENSION_SCREENSHOTURLS &amp;quot;http://wiki.slicer.org/slicerWiki/images/4/42/Slicer-r19441-EmptyExtensionTemplate-screenshot.png&amp;quot;)&lt;br /&gt;
endif()&lt;br /&gt;
&lt;br /&gt;
if(NOT Slicer_SOURCE_DIR)&lt;br /&gt;
  find_package(Slicer REQUIRED)&lt;br /&gt;
  include(${Slicer_USE_FILE})&lt;br /&gt;
endif()&lt;br /&gt;
&lt;br /&gt;
add_subdirectory(ModuleA)&lt;br /&gt;
&lt;br /&gt;
if(NOT Slicer_SOURCE_DIR)&lt;br /&gt;
  include(${Slicer_EXTENSION_CPACK})&lt;br /&gt;
endif()&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 2.8.9)&lt;br /&gt;
&lt;br /&gt;
find_package(Slicer COMPONENTS ConfigurePrerequisites)&lt;br /&gt;
&lt;br /&gt;
project(EmptyExtensionTemplate)&lt;br /&gt;
&lt;br /&gt;
set(EXTENSION_HOMEPAGE &amp;quot;http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/EmptyExtensionTemplate&amp;quot;)&lt;br /&gt;
set(EXTENSION_CATEGORY &amp;quot;Examples&amp;quot;)&lt;br /&gt;
set(EXTENSION_CONTRIBUTORS &amp;quot;Jean-Christophe Fillion-Robin (Kitware)&amp;quot;)&lt;br /&gt;
set(EXTENSION_DESCRIPTION &amp;quot;This is an example of empty extension&amp;quot;)&lt;br /&gt;
set(EXTENSION_ICONURL &amp;quot;http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Extensions/Testing/EmptyExtensionTemplate/EmptyExtensionTemplate.png?revision=21746&amp;amp;view=co&amp;quot;)&lt;br /&gt;
set(EXTENSION_SCREENSHOTURLS &amp;quot;http://wiki.slicer.org/slicerWiki/images/4/42/Slicer-r19441-EmptyExtensionTemplate-screenshot.png&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(Slicer REQUIRED)&lt;br /&gt;
include(${Slicer_USE_FILE})&lt;br /&gt;
&lt;br /&gt;
add_subdirectory(ModuleA)&lt;br /&gt;
&lt;br /&gt;
include(${Slicer_EXTENSION_CPACK})&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Why is the --contribute option is not available with the ExtensionWizard ? ==&lt;br /&gt;
&lt;br /&gt;
Wizard contribute option is available only (1) if Slicer is built with OpenSSL support or (2) directly from the nightly.&lt;br /&gt;
&lt;br /&gt;
To build Slicer with SSL support, you need to build (or download) Qt with SSL support and configure Slicer with &amp;lt;code&amp;gt;-DSlicer_USE_PYTHONQT_WITH_OPENSSL:BOOL=ON&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How dependent extensions are configured and built ? ==&lt;br /&gt;
&lt;br /&gt;
If an ExtensionB depends on an ExtensionA, ExtensionA should be listed as dependency in the metadata of ExtensionB.&lt;br /&gt;
&lt;br /&gt;
This can be done setting &amp;lt;code&amp;gt;EXTENSION_DEPENDS&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt; or by specifying &amp;lt;code&amp;gt;depends&amp;lt;/code&amp;gt; field in the [[Documentation/{{documentation/version}}/Developers/Extensions/DescriptionFile|description file]].&lt;br /&gt;
&lt;br /&gt;
Doing so will ensure that:&lt;br /&gt;
* (1) the extension build system configure the extensions in the right order&lt;br /&gt;
* (2) ExtensionB is configured with option &amp;lt;code&amp;gt;ExtensionA_DIR&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/FAQ/Extensions&amp;diff=42370</id>
		<title>Documentation/Nightly/FAQ/Extensions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/FAQ/Extensions&amp;diff=42370"/>
		<updated>2015-08-11T18:50:25Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: /* How to manually install an extension? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;__TOC__&lt;br /&gt;
={{#titleparts: {{PAGENAME}} | | -1 }}=&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
{{#ifeq: {{#titleparts: {{PAGENAME}} | 3 }} | Documentation/{{documentation/version}}/Developers | | ='''User FAQ: {{{1}}}'''=}}&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
== What is an extension ? ==&lt;br /&gt;
{{:Documentation/{{documentation/version}}/Extensions/Description}}&lt;br /&gt;
== What is the extensions catalog ? ==&lt;br /&gt;
{{:Documentation/{{documentation/version}}/Extensions/Catalog}}&lt;br /&gt;
&lt;br /&gt;
== Why there are no windows 32-bit extensions available ?==&lt;br /&gt;
&lt;br /&gt;
* Win 32 has a very limited amount of memory available to an application. &lt;br /&gt;
* Many registration and segmentation algorithms fail on that platform because they run out of memory, when used with state of large data.&lt;br /&gt;
* Some of these failures are just that, some can crash slicer. Even though the &amp;quot;real&amp;quot; failure is  caused by overextending the capabilities of the hardware (in a way the users fault), it appears to the user that Slicer does not work.&lt;br /&gt;
* If you search the archives of slicer-users there are several such complaints until we started to discourage people to use 32 bit.&lt;br /&gt;
&lt;br /&gt;
Discussion: http://massmail.spl.harvard.edu/public-archives/slicer-users/2013/006703.html&lt;br /&gt;
&lt;br /&gt;
== Should I install the nightly version to access to last extension updates ? ==&lt;br /&gt;
&lt;br /&gt;
If the extension developers contributed updates for the current stable release, you don't have to install the nightly version of Slicer. You can simply update the extension. Consider reading [[#How_to_update_an_already_installed_extension.3F|How to update an already installed extension ?]].&lt;br /&gt;
&lt;br /&gt;
On the other hand, if the extension developers stopped to maintain the version of their extension built against the stable release (so that we can use the latest feature that will be in the next Slicer release), downloading the nightly is the only way to get the latest version of the extension.&lt;br /&gt;
&lt;br /&gt;
== How to update an already installed extension? ==&lt;br /&gt;
&lt;br /&gt;
Assuming updates extensions are available for your version of Slicer, it is currently not possible without uninstalling the extension and re-installing it.&lt;br /&gt;
&lt;br /&gt;
We are currently developing a mechanism allowing to either manually update or automatically suggest update. In the process of finalizing, reviewing and testing, the corresponding feature will be available in Slicer {{documentation/nextversion}}.&lt;br /&gt;
&lt;br /&gt;
For more details, see [1][2] and [3]&lt;br /&gt;
&lt;br /&gt;
[1] http://na-mic.org/Mantis/view.php?id=2089&lt;br /&gt;
&lt;br /&gt;
[2] https://github.com/mwoehlke-kitware/Slicer/tree/REBASE-2089-update-extensions&lt;br /&gt;
&lt;br /&gt;
[3] http://wiki.slicer.org/slicerWiki/index.php/Documentation/Labs/ExtensionsFrameworkRoadmap&lt;br /&gt;
&lt;br /&gt;
== How to manually download an extension package? ==&lt;br /&gt;
&lt;br /&gt;
1) Get revision associated with your install or built Slicer (Menu -&amp;gt; Help -&amp;gt; About). The revision is a number preceded by ''r'' character, for example: if the complete version string is ''4.3.1-2014-09-14 r23677'' the revision is ''23677''&lt;br /&gt;
&lt;br /&gt;
2) Open the extension catalog (app store). The default Slicer extension catalog is available at: http://slicer.kitware.com/midas3/slicerappstore&lt;br /&gt;
&lt;br /&gt;
3) Select operating system, bitness and enter revision in the empty textbox between the bitness selector and the searchbox. If no revision is entered then the ''No extensions found'' message will be displayed.&lt;br /&gt;
&lt;br /&gt;
4) Click ''Download'' button of the selected extension to download the extension package.&lt;br /&gt;
&lt;br /&gt;
== How to manually install an extension? ==&lt;br /&gt;
&lt;br /&gt;
1) Get the extension package matching your Slicer version.&lt;br /&gt;
&lt;br /&gt;
2.a) Either install the extension package using the Slicer extension called &amp;quot;DeveloperToolsForExtensions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2.b.i) Or extract the archive (zip or tar.gz) in a folder. You should then have a folder like:&lt;br /&gt;
&lt;br /&gt;
 /path/to/&amp;lt;slicer_revision&amp;gt;-&amp;lt;os&amp;gt;-&amp;lt;bitness&amp;gt;-&amp;lt;extension_name&amp;gt;-&amp;lt;extension_scm&amp;gt;&amp;lt;extension_revision&amp;gt;-YYYY-MM-DD&lt;br /&gt;
&lt;br /&gt;
containing one or more of the following folders:&lt;br /&gt;
&lt;br /&gt;
 lib/Slicer-X.Y/cli-modules&lt;br /&gt;
 lib/Slicer-X.Y/qt-loadable-modules&lt;br /&gt;
 lib/Slicer-X.Y/qt-scripted-modules&lt;br /&gt;
&lt;br /&gt;
For more details: [[Documentation/{{documentation/version}}/Developers/DirectoryStructure]]&lt;br /&gt;
&lt;br /&gt;
2.b.ii) There are two options:&lt;br /&gt;
&lt;br /&gt;
2.b.ii.a) In the Module settings (Menu -&amp;gt; Edit -&amp;gt; Settings), add all existing paths ending with:&lt;br /&gt;
&lt;br /&gt;
 lib/Slicer-X.Y/cli-modules&lt;br /&gt;
 lib/Slicer-X.Y/qt-loadable-modules&lt;br /&gt;
 lib/Slicer-X.Y/qt-scripted-modules&lt;br /&gt;
&lt;br /&gt;
2.b.ii.b) Start Slicer specifying the option &amp;lt;code&amp;gt;--additional-module-paths&amp;lt;/code&amp;gt; with all existing paths listed in 4.a.&lt;br /&gt;
&lt;br /&gt;
== How to create a custom Slicer version with selected extensions pre-installed? ==&lt;br /&gt;
&lt;br /&gt;
1) Download and install Slicer&lt;br /&gt;
&lt;br /&gt;
2) Install all necessary extensions manually (as described above) in &amp;lt;slicer_install_dir&amp;gt;/lib/Slicer-X.Y/...&lt;br /&gt;
&lt;br /&gt;
3) If all the files in &amp;lt;slicer_install_dir&amp;gt; are copied to any other folder/computer/USB drive/portable storage device then Slicer can be launched by running the Slicer executable in the main directory. No installation or administrative access rights are necessary. Slicer can even be launched directly from a USB drive, without copying files to the computer.&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DTI-Reg&amp;diff=41812</id>
		<title>Documentation/Nightly/Extensions/DTI-Reg</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DTI-Reg&amp;diff=41812"/>
		<updated>2015-06-15T20:54:06Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/DTI-Reg|DTI-Reg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.&amp;lt;br&amp;gt;&lt;br /&gt;
DTI-Reg is an extension that performs pair-wise DTI registration, using scalar FA map to drive the registration.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Clement Vachet ({{collaborator|name|sci}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor2: Martin Styner ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;fbudin@unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: https://www.nitrc.org/projects/dtireg&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0]&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|niral}}|{{collaborator|longname|niral}}&lt;br /&gt;
|{{collaborator|logo|unc}}|{{collaborator|longname|unc}}&lt;br /&gt;
|{{collaborator|logo|sci}}|{{collaborator|longname|sci}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
&lt;br /&gt;
DTI-Reg is an extension that performs pair-wise DTI registration, using scalar FA map to drive the registration.&amp;lt;br&amp;gt;&lt;br /&gt;
Individual steps of the pair-wise registration pipeline are performed via external applications - some of them being 3D Slicer modules. Starting with two input DTI images, scalar FA maps are generated via dtiprocess. Registration is then performed between these FA maps, via BRAINSFit/BRAINSDemonWarp or ANTS -Advanced Normalization Tools-, which provide different registration schemes: rigid, affine, BSpline, diffeomorphic, logDemons. The final deformation is then applied to the source DTI image via ResampleDTIlogEuclidean.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:DTI-Reg - Misaligned DTIs.png|thumb|286px|Misaligned Diffusion Tensor Images]]&lt;br /&gt;
|[[Image:DTI-Reg - Aligned DTIs - Coronal.png|thumb|700px|Aligned DTIs]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
A tutorial can be found [https://www.nitrc.org/docman/view.php/535/1960/2012-SPIE-DTI-Reg-Tutorial.pdf here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|[[Image:DTI-Reg-panel.png|thumb|280px|Module UI]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
See [[Documentation/{{documentation/version}}/Extensions/ResampleDTIlogEuclidean|ResampleDTIlogEuclidean]] and [[Documentation/{{documentation/version}}/Extensions/DTIAtlasBuilder|DTIAtlasBuilder]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code of DTI-Reg is available on [https://github.com/NIRALUser/DTI-Reg GitHub]. It is published under an [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Segmentation]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DTI-Reg&amp;diff=41811</id>
		<title>Documentation/Nightly/Extensions/DTI-Reg</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DTI-Reg&amp;diff=41811"/>
		<updated>2015-06-15T20:53:08Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/DTI-Reg|DTI-Reg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.&amp;lt;br&amp;gt;&lt;br /&gt;
DTI-Reg is an extension that performs pair-wise DTI registration, using scalar FA map to drive the registration.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Clement Vachet ({{collaborator|name|sci}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor2: Martin Styner ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;fbudin@unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: https://www.nitrc.org/projects/dtireg&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0]&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|niral}}|{{collaborator|longname|niral}}&lt;br /&gt;
|{{collaborator|logo|unc}}|{{collaborator|longname|unc}}&lt;br /&gt;
|{{collaborator|logo|sci}}|{{collaborator|longname|sci}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
&lt;br /&gt;
DTI-Reg is an extension that performs pair-wise DTI registration, using scalar FA map to drive the registration.&amp;lt;br&amp;gt;&lt;br /&gt;
Individual steps of the pair-wise registration pipeline are performed via external applications - some of them being 3D Slicer modules. Starting with two input DTI images, scalar FA maps are generated via dtiprocess. Registration is then performed between these FA maps, via BRAINSFit/BRAINSDemonWarp or ANTS -Advanced Normalization Tools-, which provide different registration schemes: rigid, affine, BSpline, diffeomorphic, logDemons. The final deformation is then applied to the source DTI image via ResampleDTI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:DTI-Reg - Misaligned DTIs.png|thumb|286px|Misaligned Diffusion Tensor Images]]&lt;br /&gt;
|[[Image:DTI-Reg - Aligned DTIs - Coronal.png|thumb|700px|Aligned DTIs]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
A tutorial can be found [https://www.nitrc.org/docman/view.php/535/1960/2012-SPIE-DTI-Reg-Tutorial.pdf here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|[[Image:DTI-Reg-panel.png|thumb|280px|Module UI]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
See [[Documentation/{{documentation/version}}/Extensions/ResampleDTIlogEuclidean|ResampleDTIlogEuclidean]] and [[Documentation/{{documentation/version}}/Extensions/DTIAtlasBuilder|DTIAtlasBuilder]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code of DTI-Reg is available on [https://github.com/NIRALUser/DTI-Reg GitHub]. It is published under an [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Segmentation]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:DTI-Reg_-_Misaligned_DTIs.png&amp;diff=41810</id>
		<title>File:DTI-Reg - Misaligned DTIs.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:DTI-Reg_-_Misaligned_DTIs.png&amp;diff=41810"/>
		<updated>2015-06-15T20:47:47Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:DTI-Reg_-_Aligned_DTIs_-_Coronal.png&amp;diff=41809</id>
		<title>File:DTI-Reg - Aligned DTIs - Coronal.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:DTI-Reg_-_Aligned_DTIs_-_Coronal.png&amp;diff=41809"/>
		<updated>2015-06-15T20:46:09Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DTI-Reg&amp;diff=41808</id>
		<title>Documentation/Nightly/Extensions/DTI-Reg</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DTI-Reg&amp;diff=41808"/>
		<updated>2015-06-15T20:41:53Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/DTI-Reg|DTI-Reg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.&amp;lt;br&amp;gt;&lt;br /&gt;
DTI-Reg is an extension that performs pair-wise DTI registration, using scalar FA map to drive the registration.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Clement Vachet ({{collaborator|name|sci}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor2: Martin Styner ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;fbudin@unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: https://www.nitrc.org/projects/dtireg&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0]&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|niral}}|{{collaborator|longname|niral}}&lt;br /&gt;
|{{collaborator|logo|unc}}|{{collaborator|longname|unc}}&lt;br /&gt;
|{{collaborator|logo|sci}}|{{collaborator|longname|sci}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
&lt;br /&gt;
DTI-Reg is an extension that performs pair-wise DTI registration, using scalar FA map to drive the registration.&amp;lt;br&amp;gt;&lt;br /&gt;
Individual steps of the pair-wise registration pipeline are performed via external applications - some of them being 3D Slicer modules. Starting with two input DTI images, scalar FA maps are generated via dtiprocess. Registration is then performed between these FA maps, via BRAINSFit/BRAINSDemonWarp or ANTS -Advanced Normalization Tools-, which provide different registration schemes: rigid, affine, BSpline, diffeomorphic, logDemons. The final deformation is then applied to the source DTI image via ResampleDTI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
A tutorial can be found [https://www.nitrc.org/docman/view.php/535/1960/2012-SPIE-DTI-Reg-Tutorial.pdf here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|[[Image:DTI-Reg-panel.png|thumb|280px|Module UI]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code of DTI-Reg is available on [https://github.com/NIRALUser/DTI-Reg GitHub]. It is published under an [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Segmentation]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DTI-Reg&amp;diff=41807</id>
		<title>Documentation/Nightly/Extensions/DTI-Reg</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DTI-Reg&amp;diff=41807"/>
		<updated>2015-06-15T20:40:02Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/DTI-Reg|DTI-Reg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.&amp;lt;br&amp;gt;&lt;br /&gt;
DTI-Reg is an extension that performs pair-wise DTI registration, using scalar FA map to drive the registration.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Clement Vachet ({{collaborator|name|sci}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor2: Martin Styner ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;fbudin@unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: https://www.nitrc.org/projects/dtireg&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0]&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|niral}}|{{collaborator|longname|niral}}&lt;br /&gt;
|{{collaborator|logo|unc}}|{{collaborator|longname|unc}}&lt;br /&gt;
|{{collaborator|logo|sci}}|{{collaborator|longname|sci}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
&lt;br /&gt;
DTI-Reg is an extension that performs pair-wise DTI registration, using scalar FA map to drive the registration.&amp;lt;br&amp;gt;&lt;br /&gt;
Individual steps of the pair-wise registration pipeline are performed via external applications - some of them being 3D Slicer modules. Starting with two input DTI images, scalar FA maps are generated via dtiprocess. Registration is then performed between these FA maps, via BRAINSFit/BRAINSDemonWarp or ANTS -Advanced Normalization Tools-, which provide different registration schemes: rigid, affine, BSpline, diffeomorphic, logDemons. The final deformation is then applied to the source DTI image via ResampleDTI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|[[Image:DTI-Reg-panel.png|thumb|280px|Module UI]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code of DTI-Reg is available on [https://github.com/NIRALUser/DTI-Reg GitHub]. It is published under an [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Segmentation]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=File:DTI-Reg-panel.png&amp;diff=41806</id>
		<title>File:DTI-Reg-panel.png</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=File:DTI-Reg-panel.png&amp;diff=41806"/>
		<updated>2015-06-15T20:39:12Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DTI-Reg&amp;diff=41805</id>
		<title>Documentation/Nightly/Extensions/DTI-Reg</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/DTI-Reg&amp;diff=41805"/>
		<updated>2015-06-15T20:28:32Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: Created page with '&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt; &amp;lt;!-- ---------------------------- --&amp;gt; {{documentation/{{documentation/version}}/module-header}} &amp;lt;!-- -----------------------…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/DTI-Reg|DTI-Reg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.&amp;lt;br&amp;gt;&lt;br /&gt;
DTI-Reg is an extension that performs pair-wise DTI registration, using scalar FA map to drive the registration.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Clement Vachet ({{collaborator|name|sci}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor2: Martin Styner ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;fbudin@unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: https://www.nitrc.org/projects/dtireg&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0]&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|niral}}|{{collaborator|longname|niral}}&lt;br /&gt;
|{{collaborator|logo|unc}}|{{collaborator|longname|unc}}&lt;br /&gt;
|{{collaborator|logo|sci}}|{{collaborator|longname|sci}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
&lt;br /&gt;
DTI-Reg is an extension that performs pair-wise DTI registration, using scalar FA map to drive the registration.&amp;lt;br&amp;gt;&lt;br /&gt;
Individual steps of the pair-wise registration pipeline are performed via external applications - some of them being 3D Slicer modules. Starting with two input DTI images, scalar FA maps are generated via dtiprocess. Registration is then performed between these FA maps, via BRAINSFit/BRAINSDemonWarp or ANTS -Advanced Normalization Tools-, which provide different registration schemes: rigid, affine, BSpline, diffeomorphic, logDemons. The final deformation is then applied to the source DTI image via ResampleDTI.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
===Quick Tour of Features and Use===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code of DTI-Reg is available on [https://github.com/NIRALUser/DTI-Reg GitHub]. It is published under an [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0].&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Segmentation]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions&amp;diff=41804</id>
		<title>Documentation/Nightly/Extensions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions&amp;diff=41804"/>
		<updated>2015-06-15T20:22:26Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;= Extensions by Category =&lt;br /&gt;
&lt;br /&gt;
==Cat 1==&lt;br /&gt;
&lt;br /&gt;
==Cat 2==&lt;br /&gt;
*[[Documentation/{{documentation/version}}/Extensions/CarreraSliceInteractiveSegmenter|CarreraSlice Interactive Segmenter]] (Ivan Kolesov, LiangJia Zhu, Yi Gao, Peter Karasev, Patricio Vela, Allen Tannenbaum, Karl Fritscher, Steve Pieper )&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SurfaceReconstruction|SurfaceReconstruction]] (Chenxi-Zhang David-Doria Arnaud-Gelas Michael-Kazhdan Matthew-Bolitho Hugues-Hoppe Jean-Christophe Fillion-Robin )&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SkullStripper|SkullStripper]] (Xiaodong Tao)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/MABMIS|MABMIS]] (Xiaofeng Liu)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SwissSkullStripper|SwissSkullStripper]] (Bill Lorensen)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/CARMA|Cardiac MRI Toolkit]] (Alan Morris, Salma Bengali)[[image:UnderConstruction.png|tumb|10px]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PkModeling|PkModeling]] (Emma Zhu, Jim Miller)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/FacetedVisualizer|FacetedVisualizer]] (Harini Veeraraghavan, Jim Miller)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/Reporting|Reporting]] (Andrey Fedorov, Nicole Aucoin, Steve Pieper) (work in progress)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/TCIABrowser|TCIA Browser]] (Alireza Mehrtash, Andrey Fedorov)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SlicerRT|SlicerRT]] (Csaba Pinter, Kevin Wang, Adam Rankin, Greg Sharp, Andras Lasso, Steve Pieper)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/DicomRtImport|DICOM-RT import]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/DicomRtExport|DICOM-RT export]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/Contours|Contours]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/DoseVolumeHistogram|Dose volume histogram]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/DoseAccumulation|Dose accumulation]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/DoseComparison|Dose comparison]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/Isodose|Isodose line and surface display]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/ContourComparison|Contour comparison]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/ContourMorphology|Contour morphology]]&lt;br /&gt;
&amp;lt;!-- ** [[Documentation/{{documentation/version}}/Modules/DicomSroImport|DICOM-SRO import]] --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ** [[Documentation/{{documentation/version}}/Modules/DicomSroExport|DICOM-SRO export]] --&amp;gt;&lt;br /&gt;
** Modules from [[Documentation/{{documentation/version}}/Extensions/Plastimatch|Plastimatch]] (Greg Sharp)&lt;br /&gt;
*** [[Documentation/{{documentation/version}}/Modules/PlmBSplineDeformableRegistration|Plastimatch Automatic deformable image registration]]&lt;br /&gt;
*** [[Documentation/{{documentation/version}}/Modules/PlmLANDWARP|Plastimatch LANDWARP Landmark]]&lt;br /&gt;
*** [[Documentation/{{documentation/version}}/Modules/PlmXFORMWARP|Plastimatch XFORMWARP]] [[image:UnderConstruction.png|tumb|10px]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SlicerIGT|SlicerIGT]] (Tamas Ungi, Adam Rankin, Andras Lasso, Junichi Tokuda, Laurent Chauvin)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/CollectFiducials|CollectFiducials]] (Tamas Ungi)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/CreateModels|CreateModels]] (Tamas Ungi, Matthew Holden)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/OpenIGTLinkRemote|OpenIGTLinkRemote]] (Tamas Ungi, Andras Lasso)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/UltrasoundSnapshots|UltrasoundSnapshots]] (Tamas Ungi, Franklin King)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Extensions/VolumeResliceDriver|VolumeResliceDriver]] (Junichi Tokuda, Tamas Ungi, Laurent Chauvin)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Extensions/PathExplorer|PathExplorer]] (Laurent Chauvin, Junichi Tokuda)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Extensions/PathRecorder|Path Recorder]] (Alireza Mehrtash)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/MatlabBridge|Matlab Bridge]] (Andras Lasso, Jean-Christophe Fillion-Robin, Kevin Wang)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/iGyne|iGyne]] (Xiaojun Chen and iGyne Team)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/LongitudinalPETCT|LongitudinalPETCT]] (Paul Mercea, Andrey Fedorov)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/DTIProcess|DTIProcess]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/DTIAtlasFiberAnalyzer|DTIAtlasFiberAnalyzer]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/FiberViewerLight|FiberViewerLight]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/DTIPrep|DTIPrep]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ResampleDTIlogEuclidean|ResampleDTIlogEuclidean]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/DTI-Reg|DTI-Reg]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/MeshToLabelMap|MeshToLabelMap]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/DTIAtlasBuilder|DTIAtlasBuilder]] (Adrien Kaiser)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/IntensitySegmenter|IntensitySegmenter]] (Francois Budin, Pengdong Xiao, Beatriz Paniagua)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ShapePopulationViewer|ShapePopulationViewer]] (Alexis Girault)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ModelToModelDistance|ModelToModelDistance]] (Francois Budin, Juliette Pera, Beatriz Paniagua)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SpharmPdm|SPHARM-PDM]] (Beatriz Paniagua, Francois Budin, Martin Styner)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/TubeTK|TubeTK]] (Stephen Aylward, Jean-Christophe Fillion-Robin, Christopher Mullins, Michael Jeulin-L, Matthew McCormick)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/UKFTractography|UKFTractography]] (Ryan Eckbo, Yogesh Rathi)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/TrackerStabilizer|TrackerStabilizer]] (Laurent Chauvin, Jayender Jagadeesan)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ChangeTracker|ChangeTracker]] (Andrey Fedorov)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SobolevSegmenter|SobolevSegmenter]] (Arie Nakhmani)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/QuickTools|QuickTools]] (Julien Finet)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/ImageMaker|Image Maker]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/XNATSlicer|XNATSlicer]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ErodeDilateLabel|ErodeDilateLabel]] (Junichi)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ThingiverseBrowser|ThingiverseBrowser]] (Nigel Goh)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/VirtualFractureReconstruction|Virtual Fracture Reconstruction]] (Karl Fritscher, Peter Karasev)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/AirwaySegmentation|AirwaySegmentation]] (Pietro Nardelli)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ModelClip|ModelClip]] (Jun Lin, Xiaojun Chen)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/VolumeClip|VolumeClip]] (Andras Lasso, Matt Lougheed)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SurfaceMirror|SurfaceMirror]] (Jiaxi Luo, Ruqing Ye, Xiaojun Chen)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/Scoliosis|Scoliosis]] (Franklin King, Tamas Ungi)&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Modules/SpinalCurvatureMeasurement|Spinal Curvature Measurement]] (Franklin King, Tamas Ungi)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PortPlacement|Port Placement]] (Luis G. Torres and Andinet Enquobahrie)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/AutoPortPlacement|Auto Port Placement]] (Luis G. Torres, Andinet Enquobahrie)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PlusRemote|Plus Remote]] (Franklin King, Tamas Ungi)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/TransformVisualizer|Transform Visualizer]] (Franklin King, Andras Lasso, Csaba Pinter)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/WindowLevelEffect|WindowLevelEffect]] (Andrey Fedorov, Steve Pieper)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PerkTutor|PerkTutor]] (Tamas Ungi, Matthew Holden)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/PerkEvaluator|PerkEvaluator]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/TransformRecorder|TransformRecorder]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/WorkflowSegmentation|WorkflowSegmentation]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Modules/SlicerToKiwiExporter|SlicerToKiwiExporter]] (Jean-Christophe Fillion-Robin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Modules/GelDosimetry|GelDosimetry]] (Csaba Pinter)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/Sequences|Sequences]] - formerly Multidimensional data (Andras Lasso, Matthew Holden, Kevin Wang)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/GyroGuide|GyroGuide]] (Ruifeng Chen,Luping Fang, Qing Pan, Xiaolei Chen, Jiashu Zhang)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Modules/MRI SNR Measurement|MRI SNR Measurement]] (Babak Matinfar)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/OpenCAD|OpenCAD]] (Vivek Narayan, Jayender Jagadeesan)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PercutaneousApproachAnalysis|Percutaneous Approach Analysis]] (Atsushi Yamada, Koichiro Murakami, Laurent Chauvin, Junichi Tokuda)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/FinslerTractography|Finsler Tractography]] (Antonio Tristan Vega, Demian Wassermann and Carl-Fredrik Westin)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/FinslerTractography|Finsler Tractography]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/FinslerBacktracing|Finsler Backtracing]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/CurveMaker|CurveMaker]] (Junichi Tokuda)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/CBC_3D_I2MConversion | CBC 3D I2MConversion]] (Fotis Drakopoulos, Yixun Liu, Andrey Fedorov and Nikos Chrisochoides)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/BodyCentricCubicMesh|Body Centric Cubic Mesh]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/MeshCompression|Mesh Compression]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PBNRR|Physics-Based Non-Rigid Registration (PBNRR)]] (Fotis Drakopoulos, Yixun Liu, Andriy Kot, Andrey Fedorov, Olivier Clatz and Nikos Chrisochoides)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ResectionPlanner|ResectionVolume]] (Matt Lougheed)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PETDICOM|PET DICOM]] (Andrey Fedorov, Ethan Ulrich)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PETTumorSegmentation|PETTumorSegmentation]] (Christian Bauer)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PET-IndiC|PET-IndiC]] (Ethan Ulrich)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/CornerAnnotation|CornerAnnotation]] (Atsushi Yamada)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/Wasp|Watershed Annotation and Segmentation Plugin.]] (Thomas Lawson)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SlicerPetSpectAnalysis|SlicerPetSpectAnalysis]] (Martín Bertran,Natalia Martínez, Guillermo Carbajal, Álvaro Gómez)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/dPetBrainQuantification|dPetBrainQuantification]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/IGTWizard|IGTWizard]] (Junichi Tokuda and Atsushi Yamada)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/DeveloperToolsForExtensions|DeveloperToolsForExtensions]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Modules/T1_Mapping|T1_Mapping]] (Xiao Da, Artem Mamonov, Jayashree Kalpathy-Cramer and Andriy Fedorov)&lt;br /&gt;
&lt;br /&gt;
==Cat 3==&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/LesionSegmentation|LesionSegmentation]] (Mark Scully)&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Modules/TrainModel|LesionSegmentation-&amp;gt;TrainModel]] (Mark Scully)&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Modules/PredictLesions|LesionSegmentation-&amp;gt;PredictLesions]] (Mark Scully)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/IASEM|IASEM]] (Bradley Lowekamp)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PyDevRemoteDebug|Python debugger]] (Andras Lasso)&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{:Documentation/{{documentation/version}}/FAQ/Extensions|Extensions}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/ResampleDTIlogEuclidean&amp;diff=41791</id>
		<title>Documentation/Nightly/Extensions/ResampleDTIlogEuclidean</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/ResampleDTIlogEuclidean&amp;diff=41791"/>
		<updated>2015-06-12T16:26:40Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/ResampleDTIlogEuclidean|ResampleDTIlogEuclidean]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.&amp;lt;br&amp;gt;&lt;br /&gt;
ResampleDTIlogEuclidean resamples Diffusion Tensor Images (DTI) in the log-euclidean framework.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Sylvain Bouix ({{collaborator|name|pnl}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;fbudin@unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: https://github.com/NIRALUser/ResampleDTIlogEuclidean&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0]&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|niral}}|{{collaborator|longname|niral}}&lt;br /&gt;
|{{collaborator|logo|unc}}|{{collaborator|longname|unc}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
&lt;br /&gt;
ResampleDTIlogEuclidean resamples Diffusion Tensor Images (DTI) in the log-euclidean framework. It is an improved version of [[Documentation/{{documentation/version}}/Modules/ResampleDTIVolume|ResampleDTIVolume]] performing the resampling in the log-euclidean space [1]. The Diffusion Tensor images transformation classes are based on algorithms described by D.C. Alexander et al [2]. More information is available in the [http://www.insight-journal.org/browse/publication/742 Insight Journal]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:ResampleDTI-Slice extracted from a real Diffusion Tensor Image - No transformation.png|thumb|340px|Input Diffusion Tensor Image (DTI)]]&lt;br /&gt;
|[[Image:ResampleDTI-Real DTI transformed with a 45deg rotation - Linear interpolation.png|thumb|340px|Real DTI transformed with a 45 degrees rotation - Linear interpolation]]&lt;br /&gt;
|[[Image:ResampleDTI-Real DTI upscaled with a factor 2 - Linear interpolation.png|thumb|375px|Real DTI upscaled with a factor 2 - Linear interpolation]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|[[Image:ResampleDTIlogEuclidean-panel.png|thumb|280px|Module UI]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Quick Tour of Features and Use===&lt;br /&gt;
&lt;br /&gt;
* '''Input/Output:''' Defines input and output files. &lt;br /&gt;
** ''Input volume'' is the volume to resample, &lt;br /&gt;
** ''Reference Volume'' (optional) is the volume used to set the sampling parameters (origin, spacing, orientation and dimensions). If it is not set, the input volume will be taken for reference.&lt;br /&gt;
** ''Output volume'' is the name of the output.&lt;br /&gt;
* '''Deformation Field:''' Allows the user to transform the input image using a deformation field. The deformation field is applied last in the case other transforms are given.&lt;br /&gt;
** ''Displacement or H- field'' sets the type of deformation field. An H-field contains at each voxel the position in space of the transformed point. The displacement field contains at each voxel the displacement vector to apply to this point.&lt;br /&gt;
** ''Deformation Field Volume'' sets the deformation field. It should be a 3-Dimensional vector image. Vectors should be of dimension 3.&lt;br /&gt;
* '''Resampling Parameters:'''&lt;br /&gt;
** ''Number Of Threads'' sets the number of threads used to perform the resampling.&lt;br /&gt;
** ''Correction'' sets if a filter is applied on the resampled image to ensure that every tensor is positive definite symmetric. Three filters are available: set to zero the negative eigen values, take their absolute values or compute their closest positive definite symmetric matrix.&lt;br /&gt;
* '''Transform Parameters:'''&lt;br /&gt;
** ''Transform Node'' contains the transform(s) to apply to the image&lt;br /&gt;
** ''Transforms Order'' allows the user to tell the module in what order the transforms are stored in the node (or file). Transforms should be backward (from output space to input space). However, in Slicer3, the affine and rigid transform nodes are stored as forward transforms and are inverted when passed to the module.&lt;br /&gt;
 Input Image &amp;lt;- Transform0 &amp;lt;- Transform1 &amp;lt;- ... &amp;lt;- Transform n &amp;lt;- Output Image (input-to-output)&lt;br /&gt;
 Input Image &amp;lt;- Transform n &amp;lt;- Transform n-1 &amp;lt;- ... &amp;lt;- Transform0 &amp;lt;- Output Image (output-to-input)&lt;br /&gt;
* '''Manual Transform:''' if no tranform is set in previous panel, one can enter his own transform&lt;br /&gt;
** ''Transform Matrix:'' a 12-parameter affine transformation manually. The first 9 numbers represent a linear transformation matrix in column-major order (where the column index varies the fastest), the last 3 are a translation.&lt;br /&gt;
** ''Transform:'' forces the transform to be of rigid or affine type (affine is default)&lt;br /&gt;
** ''Space:'' It should normally not be modified when using this module directly in Slicer3 with a transform node. It does not specify whether the matrix is expressed in LPS or RAS coordinate space but rather if everything is expressed in the same coordinate space. LPS means that everything is in the same space and RAS means that it is not the case. This option can be set to RAS if the given transform is in RAS coordinate space (respectively LPS) and the input volume is in LPS coordinate space (respectively RAS). '''Be careful''': When passing manually the transform, the coordinate space modification is directly applied on the given transform. However, when passing the transform through a file or a transform node, it is the input volume coordinate space that is modified and the transform is left unchanged (so that any kind of transform supported by ITK is also supported by this module). If one sets the output volume parameters manually, one has to pay attention to the fact that in that case the given parameters are considered to be in the transform coordinate space!!!&lt;br /&gt;
* '''Rigid/Affine Parameters:''' &lt;br /&gt;
** ''Rotation Point:'' uses a fiducial to set a point around which the rotation defined in the transform needs to be performed.&lt;br /&gt;
** ''Centered Transform:'' sets the center of the transformation to the center of the image.&lt;br /&gt;
** ''Inverse ITK Transformation:'' inverses the transformation before applying it to the image. The transform given to the module is from the output image to the input one. If one wants to specify a transform from the input image to the output image, one should use this flag. This option can only be used if the transform is rigid or affine. Be careful: if the file containing the transform contains multiple transforms, only rigid and affine transforms will be inverted.&lt;br /&gt;
* '''Affine Transformation Type:''' Uses the Preservation of the Principal Direction (right image) to compute the affine transform. Otherwise, the Finite Strain Method (left image) is used [[#References|[1] ]].&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:320px-Plan2dyz-skew-noppd-vertical.jpg|thumb|250px|Finite Strain]]&lt;br /&gt;
|[[Image:320px-Plan2dyz-skew-ppd-vertical.jpg|thumb|250px|Preservation Of Principal Direction]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* '''Interpolation Type:''' sets the type of interpolation kernel to either linear, nearest neighbor (nn), windowed sinc (ws), or b-spline (bs). The windowed sinc interpolator uses a constant boundary condition whereas the b-spline interpolator uses a mirror boundary condition.&lt;br /&gt;
* '''Windowed Sinc Interpolate Function Parameters:''' selects the type window function for the sinc interpolation h=hamming, c=cosine, w=welch, l=lanczos, b=blackman. '''This  is only relevant if one selects ws as the interpolation type'''.&lt;br /&gt;
* '''BSpline Interpolate Function Parameters:''' The spline order (only relevant if the selected interpolator is bs).&lt;br /&gt;
* '''Output Parameters:''' One can overwrite the reference volume parameters by setting manually the ''spacing'', ''size'', ''origin'' (as a fiducial), and ''direction matrix'' (also known as space directions) in column-major order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
* [1] Arsigny, V., Fillard, P., Pennec, X. and Ayache, N. (2006), Log-Euclidean metrics for fast and simple calculus on diffusion tensors. Magn Reson Med, 56: 411–421. doi: 10.1002/mrm.20965&lt;br /&gt;
* [2] D.C. Alexander, C. Pierpaoli, P.J. Basser, J.C. Gee. Spatial Transformations of Diffusion Tensor Magnetic Resonance Images, IEEE Transactions on medical imaging, vol. 20, No. 11, November 2001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code of ResampleDTIlogEuclidean is available on [https://github.com/NIRALUser/ResampleDTIlogEuclidean GitHub]. It is published under an [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0].&amp;lt;br&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|[[Image:ResampleDTIlogEuclidean-128x128-icon.png|thumb|128px|Extension Icon]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Segmentation]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/ResampleDTIlogEuclidean&amp;diff=41790</id>
		<title>Documentation/Nightly/Extensions/ResampleDTIlogEuclidean</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/ResampleDTIlogEuclidean&amp;diff=41790"/>
		<updated>2015-06-12T16:24:41Z</updated>

		<summary type="html">&lt;p&gt;Fbudin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Extension: [[Documentation/{{documentation/version}}/Extensions/ResampleDTIlogEuclidean|ResampleDTIlogEuclidean]]&amp;lt;br&amp;gt;&lt;br /&gt;
Acknowledgments:&lt;br /&gt;
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.&amp;lt;br&amp;gt;&lt;br /&gt;
ResampleDTIlogEuclidean resamples Diffusion Tensor Images (DTI) in the log-euclidean framework.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Francois Budin ({{collaborator|name|niral}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contributor1: Sylvain Bouix ({{collaborator|name|pnl}})&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Francois Budin, &amp;lt;email&amp;gt;fbudin@unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: https://github.com/NIRALUser/ResampleDTIlogEuclidean&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0]&amp;lt;br&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|{{collaborator|logo|niral}}|{{collaborator|longname|niral}}&lt;br /&gt;
|{{collaborator|logo|unc}}|{{collaborator|longname|unc}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Module Description}}&lt;br /&gt;
&lt;br /&gt;
ResampleDTIlogEuclidean resamples Diffusion Tensor Images (DTI) in the log-euclidean framework. It is an improved version of [[Documentation/{{documentation/version}}/Modules/ResampleDTIVolume|ResampleDTIVolume]] performing the resampling in the log-euclidean space [1]. The Diffusion Tensor images transformation classes are based on algorithms described by D.C. Alexander et al [2]. More information is available in the [http://www.insight-journal.org/browse/publication/742 Insight Journal]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:ResampleDTI-Slice extracted from a real Diffusion Tensor Image - No transformation.png|thumb|340px|Input Diffusion Tensor Image (DTI)]]&lt;br /&gt;
|[[Image:ResampleDTI-Real DTI transformed with a 45deg rotation - Linear interpolation.png|thumb|340px|Real DTI transformed with a 45 degrees rotation - Linear interpolation]]&lt;br /&gt;
|[[Image:ResampleDTI-Real DTI upscaled with a factor 2 - Linear interpolation.png|thumb|375px|Real DTI upscaled with a factor 2 - Linear interpolation]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|[[Image:ResampleDTIlogEuclidean-panel.png|thumb|280px|Module UI]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Quick Tour of Features and Use===&lt;br /&gt;
&lt;br /&gt;
* '''Input/Output:''' Defines input and output files. &lt;br /&gt;
** ''Input volume'' is the volume to resample, &lt;br /&gt;
** ''Reference Volume'' (optional) is the volume used to set the sampling parameters (origin, spacing, orientation and dimensions). If it is not set, the input volume will be taken for reference.&lt;br /&gt;
** ''Output volume'' is the name of the output.&lt;br /&gt;
* '''Deformation Field:''' Allows the user to transform the input image using a deformation field. The deformation field is applied last in the case other transforms are given.&lt;br /&gt;
** ''Displacement or H- field'' sets the type of deformation field. An H-field contains at each voxel the position in space of the transformed point. The displacement field contains at each voxel the displacement vector to apply to this point.&lt;br /&gt;
** ''Deformation Field Volume'' sets the deformation field. It should be a 3-Dimensional vector image. Vectors should be of dimension 3.&lt;br /&gt;
* '''Resampling Parameters:'''&lt;br /&gt;
** ''Number Of Threads'' sets the number of threads used to perform the resampling.&lt;br /&gt;
** ''Correction'' sets if a filter is applied on the resampled image to ensure that every tensor is positive definite symmetric. Three filters are available: set to zero the negative eigen values, take their absolute values or compute their closest positive definite symmetric matrix.&lt;br /&gt;
* '''Transform Parameters:'''&lt;br /&gt;
** ''Transform Node'' contains the transform(s) to apply to the image&lt;br /&gt;
** ''Transforms Order'' allows the user to tell the module in what order the transforms are stored in the node (or file). Transforms should be backward (from output space to input space). However, in Slicer3, the affine and rigid transform nodes are stored as forward transforms and are inverted when passed to the module.&lt;br /&gt;
 Input Image &amp;lt;- Transform0 &amp;lt;- Transform1 &amp;lt;- ... &amp;lt;- Transform n &amp;lt;- Output Image (input-to-output)&lt;br /&gt;
 Input Image &amp;lt;- Transform n &amp;lt;- Transform n-1 &amp;lt;- ... &amp;lt;- Transform0 &amp;lt;- Output Image (output-to-input)&lt;br /&gt;
* '''Manual Transform:''' if no tranform is set in previous panel, one can enter his own transform&lt;br /&gt;
** ''Transform Matrix:'' a 12-parameter affine transformation manually. The first 9 numbers represent a linear transformation matrix in column-major order (where the column index varies the fastest), the last 3 are a translation.&lt;br /&gt;
** ''Transform:'' forces the transform to be of rigid or affine type (affine is default)&lt;br /&gt;
** ''Space:'' It should normally not be modified when using this module directly in Slicer3 with a transform node. It does not specify whether the matrix is expressed in LPS or RAS coordinate space but rather if everything is expressed in the same coordinate space. LPS means that everything is in the same space and RAS means that it is not the case. This option can be set to RAS if the given transform is in RAS coordinate space (respectively LPS) and the input volume is in LPS coordinate space (respectively RAS). '''Be careful''': When passing manually the transform, the coordinate space modification is directly applied on the given transform. However, when passing the transform through a file or a transform node, it is the input volume coordinate space that is modified and the transform is left unchanged (so that any kind of transform supported by ITK is also supported by this module). If one sets the output volume parameters manually, one has to pay attention to the fact that in that case the given parameters are considered to be in the transform coordinate space!!!&lt;br /&gt;
* '''Rigid/Affine Parameters:''' &lt;br /&gt;
** ''Rotation Point:'' uses a fiducial to set a point around which the rotation defined in the transform needs to be performed.&lt;br /&gt;
** ''Centered Transform:'' sets the center of the transformation to the center of the image.&lt;br /&gt;
** ''Inverse ITK Transformation:'' inverses the transformation before applying it to the image. The transform given to the module is from the output image to the input one. If one wants to specify a transform from the input image to the output image, one should use this flag. This option can only be used if the transform is rigid or affine. Be careful: if the file containing the transform contains multiple transforms, only rigid and affine transforms will be inverted.&lt;br /&gt;
* '''Affine Transformation Type:''' Uses the Preservation of the Principal Direction (right image) to compute the affine transform. Otherwise, the Finite Strain Method (left image) is used [[#References|[1] ]].&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:320px-Plan2dyz-skew-noppd-vertical.jpg|thumb|250px|Finite Strain]]&lt;br /&gt;
|[[Image:320px-Plan2dyz-skew-ppd-vertical.jpg|thumb|250px|Preservation Of Principal Direction]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* '''Interpolation Type:''' sets the type of interpolation kernel to either linear, nearest neighbor (nn), windowed sinc (ws), or b-spline (bs). The windowed sinc interpolator uses a constant boundary condition whereas the b-spline interpolator uses a mirror boundary condition.&lt;br /&gt;
* '''Windowed Sinc Interpolate Function Parameters:''' selects the type window function for the sinc interpolation h=hamming, c=cosine, w=welch, l=lanczos, b=blackman. '''This  is only relevant if one selects ws as the interpolation type'''.&lt;br /&gt;
* '''BSpline Interpolate Function Parameters:''' The spline order (only relevant if the selected interpolator is bs).&lt;br /&gt;
* '''Output Parameters:''' One can overwrite the reference volume parameters by setting manually the ''spacing'', ''size'', ''origin'' (as a fiducial), and ''direction matrix'' (also known as space directions) in column-major order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
* [1] Arsigny, V., Fillard, P., Pennec, X. and Ayache, N. (2006), Log-Euclidean metrics for fast and simple calculus on diffusion tensors. Magn Reson Med, 56: 411–421. doi: 10.1002/mrm.20965&lt;br /&gt;
* [2] D.C. Alexander, C. Pierpaoli, P.J. Basser, J.C. Gee. Spatial Transformations of Diffusion Tensor Magnetic Resonance Images, IEEE Transactions on medical imaging, vol. 20, No. 11, November 2001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
The source code of ResampleDTIlogEuclidean is available on [https://github.com/NIRALUser/ResampleDTIlogEuclidean GitHub]. It is published under an [http://www.apache.org/licenses/LICENSE-2.0 Apache License v2.0].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-footer}}&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/Segmentation]]&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fbudin</name></author>
		
	</entry>
</feed>