<?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=Grundlett</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=Grundlett"/>
	<link rel="alternate" type="text/html" href="https://www.slicer.org/wiki/Special:Contributions/Grundlett"/>
	<updated>2026-04-08T10:18:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.10/Modules/Volumes&amp;diff=62701</id>
		<title>Documentation/4.10/Modules/Volumes</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.10/Modules/Volumes&amp;diff=62701"/>
		<updated>2019-11-27T15:03:41Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: replacing slicerWiki in URLs&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;
{{documentation/{{documentation/version}}/module-acknowledgements}}&lt;br /&gt;
: '''Contact:''' Steve Pieper, &amp;lt;email&amp;gt;pieper@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|isomics}}|{{collaborator|longname|isomics}}&lt;br /&gt;
|{{collaborator|logo|kitware}}|{{collaborator|longname|kitware}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&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;
{{documentation/{{documentation/version}}/module-description}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
*Lookup tables/Colour palettes&lt;br /&gt;
**Information about the color nodes associated to volumes&lt;br /&gt;
*Thresholds&lt;br /&gt;
*View volume properties such as orientation and scalar type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|How to Use}}&lt;br /&gt;
*[[Documentation/{{documentation/version}}/FAQ#How_to_overlay_2_volumes.3F|How to overlay two volumes]]&lt;br /&gt;
*[[Documentation/{{documentation/version}}/FAQ#How_to_load_data_from_a_sequence_of_jpg_files.3F|How to load data from a sequence of JPG files]] &lt;br /&gt;
*When loading a 2D image(jpg, png, tiff ...), the window level(colors) might be skewed. To see the original colors switch the ''Window Level'' combobox to '''Manual Min/Max''', then set ''Min'' to '''0''' and ''Max'' to '''255'''.&lt;br /&gt;
**Also use the Spacing field to enter the volumetric pixel sizes of the image data.&lt;br /&gt;
**While you can display color volumes as slices, most slicer modules do not work natively with RGB or RGBA data, the new [http://slicer.org/doc/html/VectorToScalarVolume_8py_source.html VectorToScalarVolume] converter can be used to create a volume for use, for example, with the Editor. (added post-4.1).&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;
* Tutorial about [https://www.slicer.org/w/img_auth.php/5/51/3DDataLoadingandVisualization_Slicer4.5_SoniaPujol.pdf loading and viewing data]. &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;
| rowspan=2 | {{documentation/{{documentation/version}}/module-parametersdescription}}&lt;br /&gt;
| [[Image:VolumesModule-2011-11-25.png|400px]]  Greyscale volume&lt;br /&gt;
|-&lt;br /&gt;
| [[image:VolumesModule-LabelMapDisplay-2015-05-05.png|400px]] Label map volume display&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:VolumesModuleWindowLevelSliderPopup.gif|frame|On mouse over, a second popup appears under the window level double slider. Large dynamic range can be controlled using the slider. Moving the handles of the popup double slider changes the whole range of the window level double slider.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|How to}}&lt;br /&gt;
&lt;br /&gt;
* '''Convert scalar volume to labelmap'''&lt;br /&gt;
:# Load it as labelmap in the first place: In the 'Add data into the scene' dialog check 'Show Options' and enable the option named 'LabelMap'. When OK is clicked, the volume is loaded as a labelmap.&lt;br /&gt;
:# Convert to labelmap using Cast Scalar Volume module. Select scalar volume as input, and create output by selecting 'Create new LabelMapVolume [as...]'. Output type is typically UnsignedChar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
* Each displayable type has a similar visualization control interface (for example, the Models, Tractography, Annotations...):&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/Models|Models]]: control the models/surfaces&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/Annotations|Annotations]]: control the annotations&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Modules/VolumeRendering|Volume Rendering]]: volume render in the 3D view(s).&lt;br /&gt;
* Extensions&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/ImageMaker|Image Maker]]: create a volume from scratch.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&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;
{{documentation/{{documentation/version}}/module-developerinfo}}&lt;br /&gt;
===How to create a volume node from scratch? ===&lt;br /&gt;
You need to create a vtkImageData, a vtkMRMLScalarVolumeNode and a vtkMRMLScalarVolumeDisplayNode.&lt;br /&gt;
&lt;br /&gt;
In C++:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vtkNew&amp;lt;vtkImageData&amp;gt; imageData;&lt;br /&gt;
imageData-&amp;gt;SetDimensions(10,10,10); // image size&lt;br /&gt;
imageData-&amp;gt;AllocateScalars(VTK_UNSIGNED_CHAR, 1); // image type and number of components&lt;br /&gt;
// initialize the pixels here&lt;br /&gt;
&lt;br /&gt;
vtkNew&amp;lt;vtkMRMLScalarVolumeNode&amp;gt; volumeNode;&lt;br /&gt;
volumeNode-&amp;gt;SetAndObserveImageData(imageData);&lt;br /&gt;
volumeNode-&amp;gt;SetOrigin( -10., -10., -10.);&lt;br /&gt;
volumeNode-&amp;gt;SetSpacing( 2., 2., 2. );&lt;br /&gt;
mrmlScene-&amp;gt;AddNode( volumeNode.GetPointer() );&lt;br /&gt;
&lt;br /&gt;
volumeNode-&amp;gt;CreateDefaultDisplayNodes()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Python:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
imageData = vtk.vtkImageData()&lt;br /&gt;
imageData.SetDimensions(10,10,10) # image size&lt;br /&gt;
imageData.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 1) # image type and number of components&lt;br /&gt;
# initialize the pixels here&lt;br /&gt;
volumeNode = slicer.vtkMRMLScalarVolumeNode()&lt;br /&gt;
volumeNode.SetAndObserveImageData(imageData)&lt;br /&gt;
volumeNode = slicer.mrmlScene.AddNode(volumeNode)&lt;br /&gt;
volumeNode.CreateDefaultDisplayNodes()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the origin and spacing must be set on the volume node instead of the image data.&lt;br /&gt;
The [[Documentation/{{documentation/version}}/Modules/ImageMaker|Image Maker]] extension module creates a volume from scratch.&lt;br /&gt;
&lt;br /&gt;
===IO===&lt;br /&gt;
[[Documentation/{{documentation/version}}/SlicerApplication/SupportedDataFormat|Here]] is the list of supported file formats.&lt;br /&gt;
&lt;br /&gt;
Important classes:&lt;br /&gt;
 [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Modules/Loadable/Volumes/qSlicerVolumesIO.h?view=markup qSlicerVolumesIO].[h/cxx]]&lt;br /&gt;
 [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Modules/Loadable/Volumes/Logic/vtkSlicerVolumesLogic.h?view=markup vtkSlicerVolumesLogic].[h/cxx]&lt;br /&gt;
 [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Libs/MRML/Core/vtkMRMLVolumeArchetypeStorageNode.h?view=markup vtkMRMLVolumeArchetypeStorageNode].[h/cxx]&lt;br /&gt;
&lt;br /&gt;
The following options can be passed to load volumes programmatically:&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Option&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| labelmap&lt;br /&gt;
| bool&lt;br /&gt;
| false&lt;br /&gt;
| Mark the volume a label map&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| bool&lt;br /&gt;
| false&lt;br /&gt;
| Discard file origin information and move the center of the volume in 0,0,0&lt;br /&gt;
|-&lt;br /&gt;
| singleFile&lt;br /&gt;
| bool&lt;br /&gt;
| false&lt;br /&gt;
| Load the file as part of a series of 2D files that represent a 3D volume&lt;br /&gt;
|-&lt;br /&gt;
| autoWindowLevel&lt;br /&gt;
| bool&lt;br /&gt;
| true&lt;br /&gt;
| Automatically compute the window level based on the volume pixel intensities&lt;br /&gt;
|-&lt;br /&gt;
| discardOrientation&lt;br /&gt;
| bool&lt;br /&gt;
| false&lt;br /&gt;
| Discard file orientation information&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>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/FAQ/Wiki&amp;diff=62700</id>
		<title>Documentation/4.8/FAQ/Wiki</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/FAQ/Wiki&amp;diff=62700"/>
		<updated>2019-11-27T14:57:20Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: replacing occurrences of slicerWiki&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;
&lt;br /&gt;
== How to create a wiki account ? ==&lt;br /&gt;
&lt;br /&gt;
See [[Special:Userlogin|Create user account]]&lt;br /&gt;
&lt;br /&gt;
== How to list all wiki users ? ==&lt;br /&gt;
&lt;br /&gt;
See [[Special:Listusers|Users List]]&lt;br /&gt;
&lt;br /&gt;
== Moderator: How to review and approve a wiki account request ? ==&lt;br /&gt;
&lt;br /&gt;
Prerequisites: To be notified by email each time a user account request is created, you should belong to the [http://www.slicer.org/w/index.php?title=Special:ListUsers&amp;amp;group=sysop Administrators] group.&lt;br /&gt;
&lt;br /&gt;
Review the email and update the account request:&lt;br /&gt;
# If this is clearly spam, mark as &amp;lt;b&amp;gt;Spam&amp;lt;/b&amp;gt;.&lt;br /&gt;
# If you have doubt, mark as &amp;lt;b&amp;gt;Hold&amp;lt;/b&amp;gt; and forward the email to other administrator asking for clarification.&lt;br /&gt;
# If you know the person, mark as &amp;lt;b&amp;gt;Accept&amp;lt;/b&amp;gt; to approve the request.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* If an account is legitimate (thus approved), but there is some content that is explicitly or generally frowned upon (e.g. promotional copy) in the bio, then the reviewer/approver should make an edit to the user page with an explanation. The bio is plain text in the form.&lt;br /&gt;
* Was your Biography (submitted in your original account request) not included in your User page?  You can see/retrieve bios at [[Special:UserCredentials]]&lt;br /&gt;
* We require a 50 word Biography in the account sign-up process to help us determine the authenticity and identity of the request.&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/FAQ/Extensions&amp;diff=62699</id>
		<title>Documentation/4.8/Developers/FAQ/Extensions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/FAQ/Extensions&amp;diff=62699"/>
		<updated>2019-11-27T14:55:04Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;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;
'''Note: to build C++ extensions you need to have built Slicer from source on your machine; they cannot be built against a binary download.'''&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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;
&lt;br /&gt;
'''MaxOSX''': Extension '''must be configured''' specifying &amp;lt;code&amp;gt;CMAKE_OSX_*&amp;lt;/code&amp;gt; variables matching the one used to configure Slicer:&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_ARCHITECTURES:STRING=x86_64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=/same/as/Slicer&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_SYSROOT:PATH=SameAsSlicer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Run ''CMake (cmake-gui)'' from the Windows Start menu.&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;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;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;code&amp;gt;MyExtension.sln&amp;lt;/code&amp;gt; in Visual Studio&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select '''Release''' build configuration.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select 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;
== Is there a way to automatically set CMAKE_OSX_* variables ? ==&lt;br /&gt;
&lt;br /&gt;
Within your extension, including the &amp;lt;code&amp;gt;ConfigurePrerequisites&amp;lt;/code&amp;gt; component before the project statement should ensure it uses the same CMAKE_OSX_* variables as Slicer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find_package(Slicer COMPONENTS ConfigurePrerequisites REQUIRED)&lt;br /&gt;
&lt;br /&gt;
project(Foo)&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
find_package(Slicer REQUIRED)&lt;br /&gt;
include(${Slicer_USE_FILE})&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;lt;code&amp;gt;ConfigurePrerequisites&amp;lt;/code&amp;gt; component should be considered experimental and could change without notice.&lt;br /&gt;
&lt;br /&gt;
For more details, see [https://github.com/Slicer/Slicer/blob/75fc96bf05e65659eb5204f47b5205442cc6fd8e/CMake/SlicerConfig.cmake.in#L10-L38 here].&lt;br /&gt;
&lt;br /&gt;
== How to run extension tests ? ==&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ ctest -j&amp;lt;NUMBEROFCORES&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
To run all tests, start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&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; in Visual Studio&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select &amp;lt;code&amp;gt;RUN_TESTS&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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run test individually, open  Command Line Prompt. [http://windows.microsoft.com/en-us/windows/command-prompt-faq Need help?]&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;gt; cd C:\path\to\MyExtension-build&lt;br /&gt;
&amp;gt; ctest -R NameOfTest -V&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To debug individual tests.&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;Launch Visual Studio from the Command Line Prompt: &amp;lt;code&amp;gt;C:\path\to\Slicer-build\Slicer.exe --VisualStudio --launcher-no-splash --launcher-additional-settings C:\path\to\MyExtension-build\AdditionalLauncherSettings.ini C:\path\to\MyExtension-build\MyExtension.sln&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Find the project of the test you want to debug (e.g. ''qSlicerMODULE_NAMEModuleGenericCxxTests'').&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Go to the project debugging properties (right-click -&amp;gt; Properties, then Configuration Properties / Debugging).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In ''Command Arguments'', type the name of the test you want to run (e.g. ''qSlicerMODULE_NAMEModuleGenericTest'').&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the test takes arguments, enter the arguments after the test name in ''Command Arguments''.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the project as the StartUp Project (right-click -&amp;gt; Set As StartUp Project).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start debugging (F5).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&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; in Visual Studio&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;
{{remark|red|{{:Documentation/{{documentation/version}}/Developers/Tutorials/BuildTestPackageDistributeExtensions/ExperimentalFolderAccess}} }}&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;packageupload&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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 packageupload&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Run ''CMake (cmake-gui)'' from the Windows Start menu.&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;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;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&lt;br /&gt;
&amp;lt;ol&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; in Visual Studio&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;packageupload&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;
Alternatively, you could also [[#How_to_cache_API_credentials_.3F|cache your API credentials]].&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;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;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;packageupload&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Locally package and upload the extension&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;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;&amp;lt;s&amp;gt;ExperimentalUpload&amp;lt;/s&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;s&amp;gt;Equivalent to Experimental target followed by packaging and upload of the extension on the extension server.&amp;lt;/s&amp;gt; Not available anymore. Removed in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=26271 r26271]&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;&amp;lt;s&amp;gt;ExperimentalUploadOnly&amp;lt;/s&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;s&amp;gt;Only proceed to the upload of the extension on the extension server.&amp;lt;/s&amp;gt;. Not available anymore. Superseded by &amp;lt;code&amp;gt;packageupload&amp;lt;/code&amp;gt;. Removed in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=26271 r26271]&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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/DoSomethingGreat&amp;quot;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set(EXTENSION_HOMEPAGE &amp;quot;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/DoSomethingAwesome&amp;quot;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;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: https://www.slicer.org/wiki/Documentation/Nightly/Extensions/SkullStripper == 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''' &amp;lt;s&amp;gt;and also '''continuously''' during the day&amp;lt;/s&amp;gt;.&lt;br /&gt;
* Slicer {{documentation/currentversion}} lastest stable release package occurs '''every night'''.&lt;br /&gt;
&lt;br /&gt;
All extensions associated can be expected by mid-morning. Checking the dashboard will give a definite answer. Check [[Documentation/Nightly/Developers/Tutorials/BuildTestPackageDistributeExtensions#Continuous_Integration|this page]] to learn how to easily get the status of any given extension.&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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/EmptyExtensionTemplate&amp;quot;)  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://www.slicer.org/w/img_auth.php/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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/EmptyExtensionTemplate&amp;quot;)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://www.slicer.org/w/img_auth.php/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;br /&gt;
&lt;br /&gt;
== How to package third party libraries ? ==&lt;br /&gt;
&lt;br /&gt;
Extensions integrating third party libraries should follow the [https://github.com/Slicer/Slicer/tree/master/Utilities/Templates/Extensions/SuperBuild SuperBuild extension template].&lt;br /&gt;
&lt;br /&gt;
Each third party libraries will be configured and built using a dedicated &amp;lt;code&amp;gt;External_MyLib.cmake&amp;lt;/code&amp;gt; file, the install location of binaries and libraries should be set to &amp;lt;code&amp;gt;Slicer_INSTALL_BIN_DIR&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Slicer_INSTALL_LIB_DIR&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These relative paths are the one that the extensions manager will consider when generating the launcher and application settings for a given extension.&lt;br /&gt;
&lt;br /&gt;
== Can I use C++11/14/17 language features ? ==&lt;br /&gt;
&lt;br /&gt;
Since Slicer is not built with these features (it used c++98/c++03), you should not use C++11/14/17 language features in your extensions.&lt;br /&gt;
&lt;br /&gt;
If your extension can be compiled as a standalone project where you would like to use newer feature, you could rely on CMake detecting compile features. See [https://cmake.org/cmake/help/v3.5/manual/cmake-compile-features.7.html cmake-compile-features] for more details.&lt;br /&gt;
&lt;br /&gt;
See the labs topic on [https://www.slicer.org/wiki/Documentation/Labs/UpgradingCompilerInfrastructure upgrading compiler infrastructure] for additional information/status.&lt;br /&gt;
&lt;br /&gt;
== How do I publish a paper about my extension ? ==&lt;br /&gt;
&lt;br /&gt;
Consider publishing a paper describing your extension.  This link contains a list of journals that publish papers about software:&lt;br /&gt;
&lt;br /&gt;
[http://www.software.ac.uk/resources/guides/which-journals-should-i-publish-my-software http://www.software.ac.uk/resources/guides/which-journals-should-i-publish-my-software]&lt;br /&gt;
&lt;br /&gt;
== How to force a different Slicer revision for downloading different extension ? ==&lt;br /&gt;
&lt;br /&gt;
Since extensions available from the [[Documentation/{{documentation/currentversion}}/SlicerApplication/ExtensionsManager|Extensions Manager]] are associated with a particular slicer revision, for testing purpose it is practical to override the current revision. This can be done by explicitly setting a revision number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; extensionManagerModel = slicer.app.extensionsManagerModel()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; extensionManagerModel.slicerRevision = &amp;quot;25742&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/Extensions&amp;diff=62698</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=62698"/>
		<updated>2019-11-27T14:55:02Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;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 &amp;lt;code&amp;gt;SlicerAwesomeFilter&amp;lt;/code&amp;gt;. Note that the following variations are also possible &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;
We suggest you keep the Slicer prefix in the extension name when the extension is a Slicer interface to some third-party library (SlicerOpenIGTLink, SlicerElastix, SlicerOpenCV, …).&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;
'''Note: to build C++ extensions you need to have built Slicer from source on your machine; they cannot be built against a binary download.'''&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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;
&lt;br /&gt;
'''MaxOSX''': Extension '''must be configured''' specifying &amp;lt;code&amp;gt;CMAKE_OSX_*&amp;lt;/code&amp;gt; variables matching the one used to configure Slicer:&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_ARCHITECTURES:STRING=x86_64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=/same/as/Slicer&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_SYSROOT:PATH=SameAsSlicer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Run ''CMake (cmake-gui)'' from the Windows Start menu.&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;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;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;code&amp;gt;MyExtension.sln&amp;lt;/code&amp;gt; in Visual Studio&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select '''Release''' build configuration.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select 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;
== Is there a way to automatically set CMAKE_OSX_* variables ? ==&lt;br /&gt;
&lt;br /&gt;
Within your extension, including the &amp;lt;code&amp;gt;ConfigurePrerequisites&amp;lt;/code&amp;gt; component before the project statement should ensure it uses the same CMAKE_OSX_* variables as Slicer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find_package(Slicer COMPONENTS ConfigurePrerequisites REQUIRED)&lt;br /&gt;
&lt;br /&gt;
project(Foo)&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
find_package(Slicer REQUIRED)&lt;br /&gt;
include(${Slicer_USE_FILE})&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;lt;code&amp;gt;ConfigurePrerequisites&amp;lt;/code&amp;gt; component should be considered experimental and could change without notice.&lt;br /&gt;
&lt;br /&gt;
For more details, see [https://github.com/Slicer/Slicer/blob/75fc96bf05e65659eb5204f47b5205442cc6fd8e/CMake/SlicerConfig.cmake.in#L10-L38 here].&lt;br /&gt;
&lt;br /&gt;
== How to run extension tests ? ==&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ ctest -j&amp;lt;NUMBEROFCORES&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
To run all tests, start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&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; in Visual Studio&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select &amp;lt;code&amp;gt;RUN_TESTS&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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run test individually, open  Command Line Prompt. [http://windows.microsoft.com/en-us/windows/command-prompt-faq Need help?]&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;gt; cd C:\path\to\MyExtension-build&lt;br /&gt;
&amp;gt; ctest -R NameOfTest -V&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To debug individual tests.&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;Launch Visual Studio from the Command Line Prompt: &amp;lt;code&amp;gt;C:\path\to\Slicer-build\Slicer.exe --VisualStudio --launcher-no-splash --launcher-additional-settings C:\path\to\MyExtension-build\AdditionalLauncherSettings.ini C:\path\to\MyExtension-build\MyExtension.sln&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Find the project of the test you want to debug (e.g. ''qSlicerMODULE_NAMEModuleGenericCxxTests'').&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Go to the project debugging properties (right-click -&amp;gt; Properties, then Configuration Properties / Debugging).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In ''Command Arguments'', type the name of the test you want to run (e.g. ''qSlicerMODULE_NAMEModuleGenericTest'').&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the test takes arguments, enter the arguments after the test name in ''Command Arguments''.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the project as the StartUp Project (right-click -&amp;gt; Set As StartUp Project).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start debugging (F5).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&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; in Visual Studio&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;
{{remark|red|{{:Documentation/{{documentation/version}}/Developers/Tutorials/BuildTestPackageDistributeExtensions/ExperimentalFolderAccess}} }}&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;packageupload&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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 packageupload&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Run ''CMake (cmake-gui)'' from the Windows Start menu.&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;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;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&lt;br /&gt;
&amp;lt;ol&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; in Visual Studio&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;packageupload&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;
Alternatively, you could also [[#How_to_cache_API_credentials_.3F|cache your API credentials]].&lt;br /&gt;
&lt;br /&gt;
== How to build Slicer bundling extensions ? ==&lt;br /&gt;
&lt;br /&gt;
Configuring Slicer specifying option &amp;lt;tt&amp;gt;EXTENSION_SOURCE_DIRS&amp;lt;/tt&amp;gt; as a list of extension source directories will do it. Multiple extension source paths need to be separated using semicolons.&lt;br /&gt;
&lt;br /&gt;
Note that Superbuild-type extensions expected to be bundled have to be updated to explicitly list Slicer dependencies. More specifically, the &amp;lt;tt&amp;gt;External_*.cmake&amp;lt;/tt&amp;gt; files that were implicitly depending on project built by Slicer have to be updated.&lt;br /&gt;
&lt;br /&gt;
For example, the file [https://github.com/KitwareMedical/SlicerVirtualReality/blob/master/SuperBuild/External_VTKRenderingOpenVR.cmake &amp;lt;tt&amp;gt;External_VTKRenderingOpenVR.cmake&amp;lt;/tt&amp;gt;] available in the [https://github.com/KitwareMedical/SlicerVirtualReality &amp;lt;tt&amp;gt;SlicerVirtualReality&amp;lt;/tt&amp;gt;] extension was updated to append &amp;lt;tt&amp;gt;VTKv9&amp;lt;/tt&amp;gt; to the list of dependencies if bundled in Slicer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
    &lt;br /&gt;
set(${proj}_DEPENDENCIES OpenVR)&lt;br /&gt;
if(DEFINED Slicer_SOURCE_DIR)&lt;br /&gt;
  list(APPEND ${proj}_DEPENDENCIES VTKv9)&lt;br /&gt;
endif()&lt;br /&gt;
    &lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;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;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;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;packageupload&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Locally package and upload the extension&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;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;&amp;lt;s&amp;gt;ExperimentalUpload&amp;lt;/s&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;s&amp;gt;Equivalent to Experimental target followed by packaging and upload of the extension on the extension server.&amp;lt;/s&amp;gt; Not available anymore. Removed in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=26271 r26271]&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;&amp;lt;s&amp;gt;ExperimentalUploadOnly&amp;lt;/s&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;s&amp;gt;Only proceed to the upload of the extension on the extension server.&amp;lt;/s&amp;gt;. Not available anymore. Superseded by &amp;lt;code&amp;gt;packageupload&amp;lt;/code&amp;gt;. Removed in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=26271 r26271]&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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/DoSomethingGreat&amp;quot;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;set(EXTENSION_HOMEPAGE &amp;quot;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/DoSomethingAwesome&amp;quot;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;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: https://www.slicer.org/wiki/Documentation/Nightly/Extensions/SkullStripper == 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''' &amp;lt;s&amp;gt;and also '''continuously''' during the day&amp;lt;/s&amp;gt;.&lt;br /&gt;
* Slicer {{documentation/currentversion}} lastest stable release package occurs '''every night'''.&lt;br /&gt;
&lt;br /&gt;
All extensions associated can be expected by mid-morning. Checking the dashboard will give a definite answer. Check [[Documentation/Nightly/Developers/Tutorials/BuildTestPackageDistributeExtensions#Continuous_Integration|this page]] to learn how to easily get the status of any given extension.&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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/EmptyExtensionTemplate&amp;quot;)  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://www.slicer.org/w/img_auth.php/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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/EmptyExtensionTemplate&amp;quot;)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://www.slicer.org/w/img_auth.php/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;br /&gt;
&lt;br /&gt;
== How to package third party libraries ? ==&lt;br /&gt;
&lt;br /&gt;
Extensions integrating third party libraries should follow the [https://github.com/Slicer/Slicer/tree/master/Utilities/Templates/Extensions/SuperBuild SuperBuild extension template].&lt;br /&gt;
&lt;br /&gt;
Each third party libraries will be configured and built using a dedicated &amp;lt;code&amp;gt;External_MyLib.cmake&amp;lt;/code&amp;gt; file, the install location of binaries and libraries should be set to &amp;lt;code&amp;gt;Slicer_INSTALL_BIN_DIR&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Slicer_INSTALL_LIB_DIR&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Also, starting with [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=25959 r25959], extension can package python modules and packages using &amp;lt;code&amp;gt;PYTHON_SITE_PACKAGES_SUBDIR&amp;lt;/code&amp;gt; CMake variable to specify the install destination. &lt;br /&gt;
&lt;br /&gt;
These relative paths are the one that the extensions manager will consider when generating the launcher and application settings for a given extension.&lt;br /&gt;
&lt;br /&gt;
== Can I use C++11/14/17 language features ? ==&lt;br /&gt;
&lt;br /&gt;
Since Slicer is not built with these features (it used c++98/c++03), you should not use C++11/14/17 language features in your extensions.&lt;br /&gt;
&lt;br /&gt;
If your extension can be compiled as a standalone project where you would like to use newer feature, you could rely on CMake detecting compile features. See [https://cmake.org/cmake/help/v3.5/manual/cmake-compile-features.7.html cmake-compile-features] for more details.&lt;br /&gt;
&lt;br /&gt;
See the labs topic on [https://www.slicer.org/wiki/Documentation/Labs/UpgradingCompilerInfrastructure upgrading compiler infrastructure] for additional information/status.&lt;br /&gt;
&lt;br /&gt;
== How do I publish a paper about my extension ? ==&lt;br /&gt;
&lt;br /&gt;
Consider publishing a paper describing your extension.  This link contains a list of journals that publish papers about software:&lt;br /&gt;
&lt;br /&gt;
[http://www.software.ac.uk/resources/guides/which-journals-should-i-publish-my-software http://www.software.ac.uk/resources/guides/which-journals-should-i-publish-my-software]&lt;br /&gt;
&lt;br /&gt;
== How to force a different Slicer revision for downloading different extension ? ==&lt;br /&gt;
&lt;br /&gt;
Since extensions available from the [[Documentation/{{documentation/currentversion}}/SlicerApplication/ExtensionsManager|Extensions Manager]] are associated with a particular slicer revision, for testing purpose it is practical to override the current revision. This can be done by explicitly setting a revision number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; extensionManagerModel = slicer.app.extensionsManagerModel()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; extensionManagerModel.slicerRevision = &amp;quot;25742&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On other approach is to re-configure Slicer setting the &amp;lt;tt&amp;gt;Slicer_FORCED_WC_REVISION&amp;lt;/tt&amp;gt; option.&lt;br /&gt;
&lt;br /&gt;
== How to address ITK test driver caught an ITK exception &amp;quot;Could not create IO object for reading file&amp;quot; ? ==&lt;br /&gt;
&lt;br /&gt;
If the following execption is reported when trying to run tests associated with a CLI modules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ITK test driver caught an ITK exception:&lt;br /&gt;
 &lt;br /&gt;
 itk::ImageFileReaderException (0x1bd8430)&lt;br /&gt;
 Location: &amp;quot;unknown&amp;quot; &lt;br /&gt;
 File: /path/to/Slicer-SuperBuild/ITK/Modules/IO/ImageBase/include/itkImageFileReader.hxx&lt;br /&gt;
 Line: 139&lt;br /&gt;
 Description:  Could not create IO object for reading file /path/to/image.nrrd&lt;br /&gt;
   Tried to create one of the following:&lt;br /&gt;
     MRMLIDImageIO&lt;br /&gt;
   You probably failed to set a file suffix, or&lt;br /&gt;
     set the suffix to an unsupported type.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It most likely means that the test driver is not linking against &amp;lt;tt&amp;gt;ITKFactoryRegistration&amp;lt;/tt&amp;gt; library and/or registrering the ITK factories. To address this, the test driver should be updated:&lt;br /&gt;
* (1) to link against &amp;lt;tt&amp;gt;${SlicerExecutionModel_EXTRA_EXECUTABLE_TARGET_LIBRARIES}&amp;lt;/tt&amp;gt;&lt;br /&gt;
* (2) to include &amp;lt;tt&amp;gt;itkFactoryRegistration.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
* (3) to call &amp;lt;tt&amp;gt;itk::itkFactoryRegistration();&amp;lt;/tt&amp;gt; in its main function&lt;br /&gt;
&lt;br /&gt;
For more details, read [[Documentation/Nightly/Developers/FAQ#What_is_the_ITKFactoryRegistration_library_.3F|What is the ITKFactoryRegistration library ?]]&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Training&amp;diff=62697</id>
		<title>Documentation/Nightly/Training</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Training&amp;diff=62697"/>
		<updated>2019-11-27T14:54:34Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/wiki.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;
=Introduction: Slicer {{documentation/version}} Tutorials=&lt;br /&gt;
&lt;br /&gt;
*This page contains &amp;quot;How to&amp;quot; tutorials with matched sample data sets. They demonstrate how to use the 3D Slicer environment (version {{documentation/version}} release) to accomplish certain tasks. &lt;br /&gt;
*For tutorials for other versions of Slicer, please visit the [[Training| Slicer training portal]].&lt;br /&gt;
*For &amp;quot;reference manual&amp;quot; style documentation, please visit the [[Documentation/{{documentation/version}}|Slicer {{documentation/version}} documentation page]]&lt;br /&gt;
*For questions related to the Slicer4 Training Compendium, please send an e-mail to '''[http://www.na-mic.org/Wiki/index.php/User:SPujol Sonia Pujol, Ph.D., Director of Training of 3D Slicer.]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Some of these tutorials are based on older releases of 3D Slicer and are being upgraded to Slicer4.10. The concepts are still useful but some interface elements and features may be different in updated versions.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Quick Start Guide =&lt;br /&gt;
&lt;br /&gt;
==Downloading and Installing Slicer==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.dropbox.com/s/gtir3x6e007snkx/QuickStartGuide_3DSlicer_SoniaPujol.pdf?dl=0| Quick Start Guide] shows how to install and start 3D Slicer&lt;br /&gt;
*Author: Sonia Pujol, Ph.D.&lt;br /&gt;
*Based on: 3D Slicer version 4.8&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[image:QuickStart_image.png|250px|SlicerWelcome tutorial]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=General Introduction=&lt;br /&gt;
&lt;br /&gt;
==Slicer Welcome Tutorial==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.dropbox.com/s/vn8sqlof2kag2kk/SlicerWelcome-tutorial_Slicer4.8_SoniaPujol.pdf?dl=0] is an introduction to Slicer.&lt;br /&gt;
*Author: Sonia Pujol, Ph.D.&lt;br /&gt;
*Audience: First-time users who want a general introduction to the software&lt;br /&gt;
*Modules: Welcome to Slicer, Sample Data&lt;br /&gt;
*Based on: 3D Slicer version 4.8&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[image:SlicerWelcome-image.png|250px|SlicerWelcome tutorial]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Slicer4Minute Tutorial==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.dropbox.com/s/9jfsyhhgude5hf1/Slicer4.8minute_SoniaPujol.pdf?dl=0| Slicer4 Minute Tutorial]  is a brief introduction to the advanced 3D visualization capabilities of Slicer 4.8.&lt;br /&gt;
*Author: Sonia Pujol, Ph.D.&lt;br /&gt;
*Audience: First-time users who want to discover Slicer in 4 minutes&lt;br /&gt;
*Modules: Welcome to Slicer, Models&lt;br /&gt;
*Based on: 3D Slicer version 4.8&lt;br /&gt;
*The [[media:Slicer4minute.zip|Slicer4Minute dataset]] contains an MR scan of the brain and 3D reconstructions of the anatomy&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[image:Slicer4minute-image.png|250px|right|Slicer4Minute tutorial]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=3D Visualization=&lt;br /&gt;
==Slicer4 Data Loading and 3D Visualization ==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* Slicer 4.10&lt;br /&gt;
** The [http://slicer.kitware.com/midas3/download/item/356408/20180430_DataLoadingAndVisualizationTutorial.pdf Data loading and visualization] ([http://slicer.kitware.com/midas3/download/item/356409/20180430_DataLoadingAndVisualizationTutorial.pptx pptx]) course guides through the basics of loading and viewing volumes and 3D models in Slicer 4.10. &lt;br /&gt;
** Author: Csaba Pinter&lt;br /&gt;
** Modules: Welcome to Slicer, Data, Volume Rendering, Models.&lt;br /&gt;
** Audience: End-users&lt;br /&gt;
** Based on: 3D Slicer version 4.10&lt;br /&gt;
** The [http://slicer.kitware.com/midas3/download/?items=330421,1 3DVisualization dataset] contain an MR scan and a series of 3D models of the brain.&lt;br /&gt;
&lt;br /&gt;
* Slicer 4.5&lt;br /&gt;
** The [[Media:3DDataLoadingandVisualization_Slicer4.5_SoniaPujol.pdf | Data loading and 3D visualization]] course guides through the basics of loading and viewing volumes and 3D models in Slicer 4.5. &lt;br /&gt;
** Author: Sonia Pujol, Ph.D.&lt;br /&gt;
** Modules: Welcome to Slicer, Sample Data, Models.&lt;br /&gt;
** Audience: End-users&lt;br /&gt;
** Based on: 3D Slicer version 4.5&lt;br /&gt;
** The [http://slicer.kitware.com/midas3/download/?items=330421,1 3DVisualization dataset] contain an MR scan and a series of 3D models of the brain.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:20180426_DataLoadingAndVisualizationTutorial.png|right|250px|]]&lt;br /&gt;
[[Image:Slicer4DataLoading_tutorial.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Slicer4 3D Visualization of DICOM images for Radiology Applications==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.dropbox.com/s/9jcjpl33qfh5pi6/3DVisualizationDICOM_Slicer4.8_SoniaPujol.pdf?dl=0 3D Visualization of DICOM images]  course guides through 3D data loading and visualization of DICOM images for Radiology Applications in Slicer4. &lt;br /&gt;
*Author: Sonia Pujol, Ph.D., Kitt Shaffer, M.D., Ph.D., Ron Kikinis, M.D.&lt;br /&gt;
*Audience: Radiologists and users of Slicer who need a more comprehensive overview over Slicer4 visualization capabilities.&lt;br /&gt;
*Modules: DICOM, Volumes, Volume Rendering, Models.&lt;br /&gt;
*Based on: 3D Slicer version 4.8&lt;br /&gt;
*The [[Media:3DVisualization_DICOM_images_part1.zip‎  | 3DVisualizationDICOM_part1]] and [[Media:3DVisualization_DICOM_images_part2.zip | 3DVisualizationDICOM_part2]] datasets contain a series of MR and CT scans, and 3D models of the brain, lung and liver.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Slicer4RSNA_2.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Tutorials for software developers=&lt;br /&gt;
&lt;br /&gt;
== Slicer4 Programming Tutorial ==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.dropbox.com/s/wrhrvvmplosiis1/Slicer4_ProgrammingTutorial_SPujol-SPieper_Nightly.pdf?dl=0# Slicer Programming tutorial] guides through the integration of a python module in Slicer4. &lt;br /&gt;
*Author: Sonia Pujol, Ph.D., Steve Pieper, Ph.D.&lt;br /&gt;
*Audience: Developers&lt;br /&gt;
*Based on: 3D Slicer version 4.7&lt;br /&gt;
*The [https://www.dropbox.com/s/6yxu8qepmvywk0n/HelloPython_Nightly.zip?dl=0 HelloPython dataset] contains sample data set (MR scan of the brain) and complete Python module examples.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:HelloPythonTutorial.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PerkLab's Slicer bootcamp training materials ==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [http://perk.cs.queensu.ca/ Laboratory for Percutaneous Surgery at Queen's University] has made available training material of its internal yearly bootcamp, covering topics, such as 3D Slicer overview, basic visualization, segmentation, registration, scripting and module development, surgical navigation, DICOM, reproducible medical image computing research methodology, version control, and research project management.&lt;br /&gt;
** [https://github.com/PerkLab/PerkLabBootcamp/blob/master/Doc/day3_2_SlicerProgramming.pptx?raw=true Scripting and module development tutorial]&lt;br /&gt;
** [https://github.com/PerkLab/PerkLabBootcamp/tree/master/Doc All other tutorials]&lt;br /&gt;
*Author: Andras Lasso, Csaba Pinter, Tamas Ungi, Csaba Pinter, Matthew Holden, Kyle Sunderland&lt;br /&gt;
*Audience: Developers, Users&lt;br /&gt;
*Based on: 3D Slicer version 4.10&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:PerkLabSlicerProgrammingTutorial.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Slicer script repository ==&lt;br /&gt;
&lt;br /&gt;
For additional Python scripts examples, please visit the [[Documentation/{{documentation/version}}/ScriptRepository|Script Repository page]]&lt;br /&gt;
&lt;br /&gt;
==Developing and contributing extensions for 3D Slicer==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [http://goo.gl/IP4cdg Developing and contributing extensions for 3D Slicer tutorial ] is an introduction to the internals of 3D Slicer and the process of contributing a 3D Slicer extension.&lt;br /&gt;
*Authors: Andrey Fedorov, Jean-Christophe Fillion-Robin, Steve Pieper&lt;br /&gt;
*Audience: Developers&lt;br /&gt;
*Based on: 3D Slicer version 4.4&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Contributing3DSlicerExtension.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Segmentation=&lt;br /&gt;
== Slicer4 Image Segmentation ==&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* Segmentation for 3D printing: shows how to use the Segment Editor module for combining CAD designed parts with patient-specific models.&lt;br /&gt;
** '''[https://discourse.slicer.org/t/new-video-tutorial-for-segment-editor-lumbar-spine-segmentation-for-3d-printing/700 Video tutorial]'''. Author: Hillary Lia.&lt;br /&gt;
** '''[[Documentation/{{documentation/version}}/Training#Segmentation_for_3D_printing|Segmentation for 3D printing Step-by-step tutorial]]'''. Author: Csaba Pinter, MSc&lt;br /&gt;
** Audience: Users and developers interested in segmentation and 3D printing&lt;br /&gt;
** Dataset: [[:File:BasePiece.zip|Phantom base STL model]] Source: [http://perk-software.cs.queensu.ca/plus/doc/nightly/modelcatalog/ PerkLab].&lt;br /&gt;
** Based on: 3D Slicer version 4.7&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[Image:20170717_3DPrintingTutorialYoutube.PNG|280px]]&lt;br /&gt;
|---&lt;br /&gt;
|&lt;br /&gt;
* '''[https://youtu.be/BJoIexIvtGo Video tutorial: Whole heart segmentation from cardiac CT]''' shows how to use the Segment Editor module for segmenting heart ventricles, atria, and great vessels from cardiac CT volumes.&lt;br /&gt;
** Author: Andras Lasso, PhD&lt;br /&gt;
** Audience: Users who need to segment heart structures, for example for visualization, quantification, or simulation.&lt;br /&gt;
** Sample data set: http://slicer.kitware.com/midas3/download/bitstream/738905/CTA-cardio2.nrrd&lt;br /&gt;
** Based on: 3D Slicer version 4.8&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[Image:WholeHeartSegYoutube.png|280px]]&lt;br /&gt;
|---&lt;br /&gt;
|&lt;br /&gt;
* '''[https://youtu.be/0at15gjk-Ns Video tutorial: Femur and pelvis segmentation from CT]''' shows how to use the Segment Editor module for segmenting pelvis and femur from CT volumes.&lt;br /&gt;
** Author: Andras Lasso, PhD&lt;br /&gt;
** Audience: Users who need to segment bones in CT images for visualization, quantification, or simulation.&lt;br /&gt;
** Sample data set: https://wiki.cancerimagingarchive.net/display/Public/TCGA-PRAD (Subject TCGA-VP-A878)&lt;br /&gt;
** Based on: 3D Slicer version 4.8&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[Image:FemurSegmentationYoutube.png|280px]]&lt;br /&gt;
|---&lt;br /&gt;
|&lt;br /&gt;
* [https://lassoan.github.io/SlicerSegmentationRecipes/ Slicer Segmentation Recipes]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Registration=&lt;br /&gt;
&lt;br /&gt;
== Slicer4 Image Registration ==&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.dropbox.com/s/chrugp2j2as5gop/ImageRegistration_Slicer4.8_SoniaPujol.pdf?dl=0 Registration tutorial] shows how to perform intra- and inter-subject registration within Slicer.&lt;br /&gt;
* Authors: Sonia Pujol, Ph.D., Dominik Meier, Ph.D., Ron Kikinis, M.D.&lt;br /&gt;
* Audience: Users and developers interested in image registration&lt;br /&gt;
* Dataset: [[Media:RegistrationData.zip| 3D Slicer Registration Data]]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[File:registration_Slicer4.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
*Based on: 3D Slicer version 4.8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Slicer Registration Case Library==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The ''[[Documentation/{{documentation/version}}/Registration/RegistrationLibrary|Slicer Registration Case Library]]'' provides real-life example cases of using the Slicer registration tools. They include pre-computed dataset and step-by-step instructions for users to follow. &lt;br /&gt;
:Author: Dominik Meier, Ph.D.&lt;br /&gt;
:Audience:  users interested learning/applying Slicer image registration technology&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[Image:RegLib_table.png|250px|link=https://www.slicer.org/wiki/Documentation/{{documentation/version}}/Registration/RegistrationLibrary]]|}&lt;br /&gt;
=Slicer Extensions=&lt;br /&gt;
==Slicer4 Diffusion Tensor Imaging Tutorial ==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*Please visit [http://dmri.slicer.org/docs/ dmri.slicer.org/docs] for the latest documentation of SlicerDMRI.&lt;br /&gt;
*The [https://www.dropbox.com/s/m7rzeblbdzr49bc/DiffusionMRIAnalysis_Slicer4.8_SoniaPujol.pdf?dl=0| Diffusion Tensor Imaging]  course is an introduction to the basics of loading Diffusion Weighted images in Slicer, estimating tensors and generating fiber tracts. &lt;br /&gt;
*Author: Sonia Pujol, Ph.D.&lt;br /&gt;
*Audience: End-users and developers&lt;br /&gt;
*Modules: Data, Volumes, DWI to DTI Estimation, Diffusion Tensor Scalar Measurements, Editor, Markups,Tractography Label Map Seeding, Tractography Interactive Seeding&lt;br /&gt;
*Based on: 3D Slicer version 4.8&lt;br /&gt;
*The [[media:Dti tutorial data.zip|DTI dataset]] contains an MR Diffusion Weighted Imaging scan of the brain.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Slicer4DTI Tutorial.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Slicer4 Neurosurgical Planning Tutorial==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://spujol.github.io/NeurosurgicalPlanningTutorial/ Neurosurgical Planning tutorial] course guides end-users through the generation of fiber tracts in the vicinity of a tumor.&lt;br /&gt;
*Author: Sonia Pujol, Ph.D., Ron Kikinis, M.D.&lt;br /&gt;
*Audience: Clinicians and Clinical Researchers&lt;br /&gt;
*Modules: Segment Editor, Tractography &lt;br /&gt;
*Based on 3D Slicer version 4.10&lt;br /&gt;
*The [[Media:WhiteMatterExplorationData.zip| White Matter Exploration dataset]] contains a Diffusion Weighted Imaging scan of a brain tumor patient.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:NeurosurgicalPlanningTutorial.png|right|250px|link=http://vimeo.com/67336069]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Slicer4 Quantitative Imaging tutorial==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[media:QuantitativeImaging_Slicer4.5.pdf‎ | Slicer4 Quantitative Imaging tutorial]]  guides through the use for Slicer for quantifying small volumetric changes in slow-growing tumors, and for calculating Standardized Uptake Value (SUV) from PET/CT data.&lt;br /&gt;
*Authors: Sonia Pujol, Ph.D., Katarzyna Macura, M.D., Ron Kikinis, M.D.&lt;br /&gt;
*Audience: Radiologists and users of Slicer who need a more comprehensive overview over Slicer4 quantitative imaging capabilities.&lt;br /&gt;
*Modules: Data, Volumes, Models, Change Tracker, PET Standard Uptake Value Computation&lt;br /&gt;
*Based on: 3D Slicer version 4.5&lt;br /&gt;
*The [[media:QuantitativeImaging.zip‎| Quantitative Imaging dataset]]  contains a series of MR and PET/CT data.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Slicer4_QuantitativeImaging.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Slicer4 IGT ==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[http://www.slicerigt.org/wp/user-tutorial/ Slicer IGT tutorials]&lt;br /&gt;
*Authors: Tamas Ungi, M.D, Ph.D., Junichi Tokuda, Ph.D.&lt;br /&gt;
*Audience: End-users interested in using Slicer for real-time navigated procedures. E.g. navigated needle insertions or other minimally invasive medical procedures.&lt;br /&gt;
*Modules: SlicerIGT Extension&lt;br /&gt;
*Based on: Slicer4.3.1-2014.09.14&lt;br /&gt;
*Data: [https://onedrive.live.com/redir?resid=7230D4DEC6058018!2937&amp;amp;authkey=!AGQkSCZOwjVYXw8&amp;amp;ithint=folder%2cpptx  Slicer-IGT datasets]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:SlicetIGT.png|right|150px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Slicer4 Radiation Therapy Tutorial ==&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* The [https://github.com/SlicerRt/SlicerRtDoc/raw/master/tutorials/SlicerRT_WorldCongress_TutorialIGRT.pdf SlicerRT tutorial] is an introduction to the Radiation Therapy functionalities of Slicer.&lt;br /&gt;
* Author: Csaba Pinter, Andras Lasso, An Wang, Gregory C. Sharp, David Jaffray, Gabor Fichtinger. &lt;br /&gt;
* Dataset: [http://slicer.kitware.com/midas3/download/item/205404/SlicerRT_WorldCongress_TutorialIGRT_Dataset.zip download] from MIDAS server&lt;br /&gt;
* Based on Slicer 4.7&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
&amp;lt;!-- [[Image:TUTORIAL-IMAGE-HERE.png|right|150px|]] --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Slicer Pathology==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[Documentation/{{documentation/version}}/Extensions/SlicerPathology|Slicer Pathology Tutorial]] describes how to use the corresponding tools for automatic and semi-automatic pathology image segmentation.&lt;br /&gt;
*Author: Erich Bremer (Stonybrook), Andriy Fedorov (Brigham and Women’s Hospital)&lt;br /&gt;
*Dataset:  Available directly with the Slicer Pathology Slicer extension.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerPathologyScreenShot8.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SPHARM-PDM==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.nitrc.org/docman/view.php/308/1982/SPHARM-PDM_Tutorial_July2015.pdf SPHARM-PDM Tutorial] describes how to use SPHARM-PDM and ShapePopulationViewer Slicer extensions to respectively compute point-based models using a parametric boundary description for the computing of Shape Analysis and perform the quality control between the different models.&lt;br /&gt;
*Author: Jonathan Perdomo (UNC), Beatriz Paniagua (Kitware Inc.)&lt;br /&gt;
*Dataset:  [https://www.nitrc.org/docman/view.php/308/1981/SPHARM_Tutorial_Data_July2015.zip Tutorial Data]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-SPHARM-PDM.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Fiber Bundle Volume Measurement==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [http://www.na-mic.org/Wiki/images/5/57/Fiber_Bundle_Volume_Measurement.pptx Fiber Bundle Volume Measurement Tutorial] aim is to calculate the volume of the fiber bundle that passes through the Corpus Callosum(CC). Following this tutorial, you’ll be able to (1) convert fiber bundles to label map and (2) calculate volume measurements from the fiber bundles.&lt;br /&gt;
*Author: Shun Gong (Shanghai Changzheng Hospital, China)&lt;br /&gt;
*Dataset:  [http://www.na-mic.org/Wiki/images/4/4c/FiberVolume_data.zip Tutorial data]: The following data are provided: Baseline image, Down sampled whole brain tractography (conducted as in the [[Documentation/{{documentation/version}}/Training#Slicer4_Diffusion_Tensor_Imaging_Tutorial|DWI tutorial]] and down-sampled to about 10000 fibers using Tractography Display module), Corpus callosum label map (drawn as in the [[Documentation/{{documentation/version}}/Training#Slicer4_Diffusion_Tensor_Imaging_Tutorial|DWI tutorial]]).&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-FiberBundleVolumeMeasurements.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 3D Slicer version 4.7 Tutorial Contest=&lt;br /&gt;
&lt;br /&gt;
For previous editions of the contest, please visit the [https://na-mic.org/wiki/Tutorial_Contests 3D Slicer Tutorial Contests page]&lt;br /&gt;
&lt;br /&gt;
===Segmentation for 3D printing===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://github.com/SlicerRt/SlicerRtDoc/raw/master/tutorials/SegmentationFor3DPrinting_TutorialContestWinter2017.pdf Segmentation for 3D printing Tutorial] ([https://github.com/SlicerRt/SlicerRtDoc/raw/master/tutorials/SegmentationFor3DPrinting_TutorialContestWinter2017.pptx pptx]) is an introduction to the new [[Documentation/{{documentation/version}}/Modules/SegmentEditor|Segment Editor]] module, demonstrated through the popular topic of 3D printing. &lt;br /&gt;
*Author: Csaba Pinter (Queen's University, Canada)&lt;br /&gt;
* [https://www.youtube.com/watch?v=Uht6Fwtr9hE Narrated video version on YouTube].&lt;br /&gt;
*Dataset: [[:File:BasePiece.zip|Phantom base STL model]] Source: [http://perk-software.cs.queensu.ca/plus/doc/nightly/modelcatalog/ PerkLab].&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-Segmentation-for-3d-printing.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Slicer Pathology===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[Documentation/{{documentation/version}}/Extensions/SlicerPathology|Slicer Pathology Tutorial]] describes how to use the corresponding tools for automatic and semi-automatic pathology image segmentation.&lt;br /&gt;
*Author: Erich Bremer (Stonybrook), Andriy Fedorov (Brigham and Women’s Hospital)&lt;br /&gt;
*Dataset:  Available directly with the Slicer Pathology Slicer extension.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerPathologyScreenShot8.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Simple Python Tool for Quality Control of DWI data===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [http://www.na-mic.org/Wiki/images/3/3a/SimpleDiffusionGradientInformationExtractorTutorial_Chauvin_Jan2017.pptx Simple Multi-shell Diffusion Gradients Information Extractor Tutorial] describes how to use a simple Python script for parsing multi-shell sensitizing gradients information from nifti file format (separated bvecs, bvals files).&lt;br /&gt;
*Author: Laurent Chauvin (ETS Montreal)&lt;br /&gt;
*Dataset:  Not available.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-SimpleDiffusionGradientInformationExtractorTutorial.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SPHARM-PDM===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.nitrc.org/docman/view.php/308/1982/SPHARM-PDM_Tutorial_July2015.pdf SPHARM-PDM Tutorial] describes how to use SPHARM-PDM and ShapePopulationViewer Slicer extensions to respectively compute point-based models using a parametric boundary description for the computing of Shape Analysis and perform the quality control between the different models.&lt;br /&gt;
*Author: Jonathan Perdomo (UNC), Beatriz Paniagua (Kitware Inc.)&lt;br /&gt;
*Dataset:  [https://www.nitrc.org/docman/view.php/308/1981/SPHARM_Tutorial_Data_July2015.zip Tutorial Data]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-SPHARM-PDM.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Integration of Robot Operating System (ROS) and 3D Slicer using OpenIGTLink===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.na-mic.org/Wiki/images/a/ab/ROSIGTLTutorial_Tokuda_Jan2017.pptx Integration of Robot Operating System (ROS) and 3D Slicer using OpenIGTLink Tutorial] describes the software architecture of surgical robot systems and allows to acquire hands-on experience of software-hardware integration for medical robotics.&lt;br /&gt;
*Author: Junichi Tokuda (Brigham and Women’s Hospital)&lt;br /&gt;
*Dataset:  Not available.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-Integration-ROS-3DSlicer-OpenIGTLink.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Fiber Bundle Volume Measurement===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [http://www.na-mic.org/Wiki/images/5/57/Fiber_Bundle_Volume_Measurement.pptx Fiber Bundle Volume Measurement Tutorial] aim is to calculate the volume of the fiber bundle that passes through the Corpus Callosum(CC). Following this tutorial, you’ll be able to (1) convert fiber bundles to label map and (2) calculate volume measurements from the fiber bundles.&lt;br /&gt;
*Author: Shun Gong (Shanghai Changzheng Hospital, China)&lt;br /&gt;
*Dataset:  [http://www.na-mic.org/Wiki/images/4/4c/FiberVolume_data.zip Tutorial data]: The following data are provided: Baseline image, Down sampled whole brain tractography (conducted as in the [[Documentation/{{documentation/version}}/Training#Slicer4_Diffusion_Tensor_Imaging_Tutorial|DWI tutorial]] and down-sampled to about 10000 fibers using Tractography Display module), Corpus callosum label map (drawn as in the [[Documentation/{{documentation/version}}/Training#Slicer4_Diffusion_Tensor_Imaging_Tutorial|DWI tutorial]]).&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-FiberBundleVolumeMeasurements.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=YouTube videos=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=&amp;quot;1200px&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:25%&amp;quot; | [[Image:Verterbra.png|right|250px|]] [https://www.youtube.com/watch?v=Uht6Fwtr9hE How to segment multiple vertebrae in spine CT for 3D printing - Author: Hillary Lia]&lt;br /&gt;
| style=&amp;quot;width:25%&amp;quot; | [[Image:Femurmodel.png|right|250px|]] [https://www.youtube.com/watch?v=0at15gjk-Ns Creating a femur model from CT volume using 3D Slicer - Author: Nabgha Farhat ]&lt;br /&gt;
| style=&amp;quot;width:25%&amp;quot; | [[Image:3DPrinting.png|right|250px|]] [https://www.youtube.com/watch?v=MKLWzD0PiIc Preparing data for 3D printing - Author: PerkLab ]&lt;br /&gt;
| style=&amp;quot;width:25%&amp;quot; | [[Image:Verterbra.png|right|250px|]] [https://www.youtube.com/watch?v=Uht6Fwtr9hE How to segment multiple vertebrae in spine CT for 3D printing - Author: Hillary Lia]&lt;br /&gt;
| style=&amp;quot;width:25%&amp;quot; | [[Image:DICOM2.png|right|250px|]] [https://www.youtube.com/watch?v=nzWf4xHy1BM&amp;amp; How to export CT and segmentation data to DICOM- Author: Andras Lasso, Csaba Pinter]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Additional [http://www.youtube.com/results?search_query=3d+slicer&amp;amp;sm=3 non-curated videos-based demonstrations using 3D Slicer are accessible on YouTube].&lt;br /&gt;
&lt;br /&gt;
=Teams Contributions  =&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* This ''Slicer 4.1 [http://vimeo.com/41096643 webinar]'' presents the new features and improvements of the release, and a brief overview of work for the next release.&lt;br /&gt;
* Authors: Steve Pieper Ph.D.&lt;br /&gt;
* Audience: First time users and developers interested in Slicer 4.1 new features.&lt;br /&gt;
* Length: 0h20m&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[Image:Webinar-Slicer-4.1.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*This ''Intro to Slicer 4.0 [http://vimeo.com/37671358 webinar]'' provides an introduction to 3DSlicer, and demonstrates core functionalities such as loading, visualizing and saving data. Basic processing tools, including manual registration, manual segmentation and tractography tools are also highlighted. This webinar is a general overview. For in depth information see the modules above and the documentation pages.&lt;br /&gt;
*Authors: Julien Finet, M.S., Steve Pieper, Ph.D., Jean-Christophe Fillion-Robin, M.S. &lt;br /&gt;
*Audience: First time users interested in a broad overview of Slicer’s features and tools.&lt;br /&gt;
*Length: 1h20m&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[Image:Webinar.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== International resources==&lt;br /&gt;
&lt;br /&gt;
==Resources in Chinese ==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
A 3D Slicer community on WeChat in China offers many tutorials and clinical examples in Chinese.  Note that the images are of interest to non-Chinese speakers and Google Translate does a reasonable job of translating some of the text.&lt;br /&gt;
&lt;br /&gt;
* [https://mp.weixin.qq.com/s?__biz=MzI3MDY4ODA5Mw==&amp;amp;mid=2247486116&amp;amp;idx=1&amp;amp;sn=772e9d431ac32cbb73d08cf0e6bc219a&amp;amp;chksm=eacc0096ddbb89805d93ac4be181d1a35058031bac673d7a91b3b44dccee2bfd1d8461397635#rd Getting started 大脑前动脉远端动脉瘤手术夹闭治疗]&lt;br /&gt;
&lt;br /&gt;
* [https://mp.weixin.qq.com/s?__biz=MzI3MDY4ODA5Mw==&amp;amp;mid=2247484787&amp;amp;idx=1&amp;amp;sn=1f6279bdccab168fc79b7275e9fe91ca&amp;amp;chksm=eacc0f41ddbb8657be92f617661133d87bb55a4ecf12f786e97a8b7d5249a05d11e0cd620c3f#rd distal anterior cerebral artery aneurysm 3D Slicer：漂亮得不像实力派]&lt;br /&gt;
&lt;br /&gt;
* [https://mp.weixin.qq.com/s?__biz=MzI3MDY4ODA5Mw==&amp;amp;mid=2247486360&amp;amp;idx=1&amp;amp;sn=f833b13a26f543aa9175419a03df7f52&amp;amp;chksm=eacc01aaddbb88bcb004773a4db8a9b3c7633d21cda3956f84b96515252eb861c5eb1e75a60b&amp;amp;mpshare=1&amp;amp;scene=24&amp;amp;srcid=0212LIfOkBRm9CvA7ImHCpRt#rd meningioma skull resection 脑膜瘤患者颅骨切除一期修补的3DSlicer方案]&lt;br /&gt;
&lt;br /&gt;
* [https://mp.weixin.qq.com/s?__biz=MzI3MDY4ODA5Mw==&amp;amp;mid=2247486079&amp;amp;idx=1&amp;amp;sn=9b926dc398a408e3441082b9e0ffde61&amp;amp;chksm=eacc004dddbb895bf9b60f5f1bc443513196e4cb90a6caf6f348a4da7b7fc22eb658661aeb49&amp;amp;mpshare=1&amp;amp;scene=24&amp;amp;srcid=0212AFtT2Wq7K7bvkMGTdyih#rd Cerebral hemorrhage by forehead positioning method 脑出血经额手术定位法（五 ]&lt;br /&gt;
&lt;br /&gt;
* [https://mp.weixin.qq.com/s?__biz=MzI3MDY4ODA5Mw==&amp;amp;mid=2247485356&amp;amp;idx=1&amp;amp;sn=044f5899b651b35994db00c32ab688ee&amp;amp;chksm=eacc0d9eddbb8488f16ff82bb1dda8456a4011790fed024781972d578783e67781443cf4a319&amp;amp;mpshare=1&amp;amp;scene=24&amp;amp;srcid=0212G45TadrPnX8tp9eaNXUs#rd Hematoma modeling 血肿建模的第11种方法]&lt;br /&gt;
&lt;br /&gt;
* [https://mp.weixin.qq.com/s?__biz=MzI3MDY4ODA5Mw==&amp;amp;mid=2247486025&amp;amp;idx=1&amp;amp;sn=b281324893be4ab116d20826f1b426c3&amp;amp;chksm=eacc007bddbb896d9deb096f209278f40c0b52c6410a8a9ff3ce8c3697c99304f18eb678f11e&amp;amp;mpshare=1&amp;amp;scene=24&amp;amp;srcid=02125v1kxvIGmfkxx7mUZcCM#rd Mobile phone positioning and AR application 手机定位及AR应用的初步探索]&lt;br /&gt;
&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[image:Wechat-hemorage-2018-02-12.png|250px|Example WeChat tutorial slides]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Resources in German ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=sl-00kGpuPk&amp;amp;list=PLJWCUXz3GeAfmYLiFcKus_c0jcsMnVsgb A series of four YouTube videos on python programming in Slicer] (German narration with English subtitles)&lt;br /&gt;
&lt;br /&gt;
== Murat Maga's blog posts about using 3D Slicer for biology ==&lt;br /&gt;
&lt;br /&gt;
* [https://blogs.uw.edu/maga/2017/04/11/getting-started-with-3d-slicer-as-a-biologist/ Slicer for Biologists]&lt;br /&gt;
* [https://blogs.uw.edu/maga/2017/04/11/a-worked-example-getting-and-visualizing-data-from-digimorph/ Loading data from DigiMorph]&lt;br /&gt;
* [https://blogs.uw.edu/maga/2017/04/11/morphosource-data-and-dealing-with-dicom-series-in-slicer/ Fixing problem DICOM]&lt;br /&gt;
* [https://blogs.uw.edu/maga/2017/04/12/scissors-tool-is-awesome/ Scissors tool is awesom]&lt;br /&gt;
 &lt;br /&gt;
== Using the (legacy) Editor ==&lt;br /&gt;
&lt;br /&gt;
=== Fast GrowCut ===&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* The [[media:FastGrowCutTutorial.pdf |Fast GrowCut tutorial]]  shows how to perform a segmentation using the Fast GrowCut effect in Slicer.&lt;br /&gt;
* Authors: Hillary Lia&lt;br /&gt;
* Audience: Users interested in segmentation&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[File:FastGrowCutLogo.png|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Use case: Slicer in paleontology ===&lt;br /&gt;
&lt;br /&gt;
This set of tutorials about the use of slicer in paleontology is very well written and provides step-by-step instructions.  Even though it covers slicer version 3.4, many of the concepts and techniques have applicability to the new version and to any 3D imaging field:&lt;br /&gt;
&lt;br /&gt;
* [http://openpaleo.blogspot.com/2008/12/3d-slicer-tutorial.html Open Source Paleontologist: 3D Slicer: The Tutorial]&lt;br /&gt;
* [http://openpaleo.blogspot.com/2008/12/3d-slicer-tutorial-part-ii.html Open Source Paleontologist: 3D Slicer: The Tutorial Part II]&lt;br /&gt;
* [http://openpaleo.blogspot.com/2008/12/3d-slicer-tutorial-part-iii.html Open Source Paleontologist: 3D Slicer: The Tutorial Part III]&lt;br /&gt;
* [http://openpaleo.blogspot.com/2008/12/3d-slicer-tutorial-part-iv.html Open Source Paleontologist: 3D Slicer: The Tutorial Part IV]&lt;br /&gt;
* [http://openpaleo.blogspot.com/2009/03/3d-slicer-tutorial-part-v.html Open Source Paleontologist: 3D Slicer: The Tutorial Part V]&lt;br /&gt;
* [http://openpaleo.blogspot.com/2009/03/3d-slicer-tutorial-part-vi.html Open Source Paleontologist: 3D Slicer: The Tutorial Part VI]&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/SimpleFilters&amp;diff=62695</id>
		<title>Documentation/Labs/SimpleFilters</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/SimpleFilters&amp;diff=62695"/>
		<updated>2019-11-27T14:54:30Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/wiki.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
This page contains TODOs for the SimpleFilters module&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
* https://www.slicer.org/wiki/Documentation/Nightly/Modules/SimpleFilters* Tutorial?&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
*  SimpleFilter's update/push to slicer is not quite right.&lt;br /&gt;
&lt;br /&gt;
Here is the code:&lt;br /&gt;
https://github.com/SimpleITK/SlicerSimpleFilters/blob/master/SimpleFilters/SimpleFilters.py#L288-L297&lt;br /&gt;
&lt;br /&gt;
And here is the MRML combo box which creates the output node:&lt;br /&gt;
 https://github.com/SimpleITK/SlicerSimpleFilters/blob/master/SimpleFilters/SimpleFilters.py#L568-L583&lt;br /&gt;
 &lt;br /&gt;
The first time a filter is run every thing appears OK. The filter runs. The new node is selected for the background node, and it's displayed. However, when a filter is run a second time to the same output, The filter runs, and the display still has the old BG image. And the   following error is displayed a multitude of times:&lt;br /&gt;
&lt;br /&gt;
 ERROR: In /scratch/blowekamp/build/Slicer/VTK/Filtering/vtkDemandDrivenPipeline.cxx, line 727&lt;br /&gt;
 vtkStreamingDemandDrivenPipeline (0x7fc0c94d1640): Input port 0 of algorithm vtkImageResliceMask(0x7fc0c910c050) has 0 connections but is not optional.&lt;br /&gt;
&lt;br /&gt;
* When should output be considered a label map?&lt;br /&gt;
** Add a check box?&lt;br /&gt;
** When input is?&lt;br /&gt;
* Beautify filter name: space separated and trimmed of &amp;quot;ImageFilter&amp;quot; suffix&lt;br /&gt;
* Add Cast filter, with manual json description&lt;br /&gt;
* Improve the image filter selector with ctkMenuComboBox&lt;br /&gt;
** Add ITK groups and/or module for hierarchy &lt;br /&gt;
* How to handle N-ary input filters?&lt;br /&gt;
* Display filter measurements after completion&lt;br /&gt;
* Handle image type produced by SimpleITK that can't be handled by Slicer&lt;br /&gt;
** ITK's RLE LabelMaps, complex pixel, and VectorImages....&lt;br /&gt;
* Include detailed Doxygen documentation? Button, tab?&lt;br /&gt;
* Link to ITK Doxygen?&lt;br /&gt;
* Add progress reporting, and ability to cancel.&lt;br /&gt;
** Pending progress reporting in SimpleITK&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Description&amp;diff=62694</id>
		<title>Documentation/Description</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Description&amp;diff=62694"/>
		<updated>2019-11-27T14:54:29Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/wiki.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Naming convention=&lt;br /&gt;
*For matter of consistency, both page have been renamed:&lt;br /&gt;
**Module:EndUserDocumentationTemplate-Documentation-4.0 -&amp;gt; '''Documentation/4.0/Modules/YOURMODULENAME'''&lt;br /&gt;
**Modules:GradientAnisotropicFilter-Documentation-4.0 -&amp;gt; Documentation/4.0/Modules/GradientAnisotropicDiffusion&lt;br /&gt;
*The main documentation page has also been renamed from &amp;quot;Documentation-4.0&amp;quot; to &amp;quot;Documentation/4.0&amp;quot;&lt;br /&gt;
*All module documentation page for a given version of Slicer Y.Z should be named according to the following pattern: '''Documentation/X.Y/Modules/MODULENAME'''&lt;br /&gt;
&lt;br /&gt;
=Category=&lt;br /&gt;
The following link will list all modules belonging to the Documentation/4.0/Modules category: http://wiki.slicer.org/slicerWiki/index.php?title=Category:Documentation/4.0/Modules&lt;br /&gt;
*The template &amp;quot;Documentation/4.0/module-footer&amp;quot; takes care of including the documentation page in the appropriate category. See [3]&lt;br /&gt;
*The following page will list all element from the given category: https://www.slicer.org/wiki/Category:Documentation-4.0-Modules*&amp;quot;category&amp;quot; is a parameter of the &amp;quot;module-footer&amp;quot; template.&lt;br /&gt;
*For CLI module, as explained on the template itself [1], it's recommended to use the template &amp;quot;Documentation/4.0/module-cli-category&amp;quot; that can extract the category from the XML module description. See [4].&lt;br /&gt;
*Using the provided module category, the module will also be added to the category &amp;quot;Documentation/4.0/Modules/&amp;lt;MainCategory&amp;quot; and &amp;quot;Documentation/4.0/Modules/&amp;lt;MainCategory.SubCategory&amp;gt;&amp;quot;. For example:&lt;br /&gt;
**Documentation/4.0/Modules/Filtering  see [5]&lt;br /&gt;
**Documentation/4.0/Modules/Filtering.Denoising see [6].&lt;br /&gt;
*Ideally, it would be great if the category associated with loadable module (interactive module) could also be extracted from a unique location. Doing so would avoid to maintain the category attribute both in the source and in the documentation.&lt;br /&gt;
&lt;br /&gt;
=Versioning:=&lt;br /&gt;
*All pages and template associated with version X.Y of Slicer are located under the page prefix: Documentation/X.Y&lt;br /&gt;
*From any documentation page or template, doing so allows to easily extract the current version using the template &amp;quot;documentation/version&amp;quot;. **See [7]&lt;br /&gt;
**In other word, assuming the current page is &amp;quot;Documentation/4.2&amp;quot; adding {{documentation/version}} in the source will return 4.2.&lt;br /&gt;
*Following each release of Slicer, this approach will allow us to:&lt;br /&gt;
**minimize the work required after a documentation set is duplicated&lt;br /&gt;
**easily reference the different documentation sets&lt;br /&gt;
**automate the duplication of these pages. Let's note that the mediawiki extensions like &amp;quot;Duplicator&amp;quot; [8] or &amp;quot;Multiplicator&amp;quot; [9] could be useful.&lt;br /&gt;
*&amp;quot;Long life&amp;quot; of past documentation will also be ensured. Indeed, each time the documentation will be duplicated, a complete set of category, template and documentation page will be created. You will find below what the list of pages and templates could like after 4.2 is released:&lt;br /&gt;
       [...]&lt;br /&gt;
       Documentation/4.0/Modules/Add&lt;br /&gt;
       Documentation/4.0/Modules/GradientAnisotropicDiffusion&lt;br /&gt;
       Documentation/4.0/Modules/Threshold&lt;br /&gt;
       Documentation/4.0/Modules/YOURMODULENAME&lt;br /&gt;
       [...]&lt;br /&gt;
       Documentation/4.2/Modules/Add&lt;br /&gt;
       Documentation/4.2/Modules/GradientAnisotropicDiffusion&lt;br /&gt;
       Documentation/4.2/Modules/Threshold&lt;br /&gt;
       Documentation/4.2/Modules/YOURMODULENAME&lt;br /&gt;
       [...]&lt;br /&gt;
       Category:Documentation/4.0/Modules&lt;br /&gt;
       Category:Documentation/4.0/Modules/Filtering&lt;br /&gt;
       Category:Documentation/4.0/Modules/Filtering.Denoising&lt;br /&gt;
       [...]&lt;br /&gt;
       Category:Documentation/4.2/Modules&lt;br /&gt;
       Category:Documentation/4.2/Modules/Filtering&lt;br /&gt;
       Category:Documentation/4.2/Modules/Filtering.Denoising&lt;br /&gt;
       [...]&lt;br /&gt;
       Template:Documentation/4.0/module-cli-description&lt;br /&gt;
       Template:Documentation/4.0/module-header&lt;br /&gt;
       Template:Documentation/4.0/module-footer&lt;br /&gt;
       [...]&lt;br /&gt;
       Template:Documentation/4.2/module-cli-description&lt;br /&gt;
       Template:Documentation/4.2/module-header&lt;br /&gt;
       Template:Documentation/4.2/module-footer&lt;br /&gt;
*Separation of information and representation&lt;br /&gt;
**This could be done with the help of few convenient custom templates:&lt;br /&gt;
**See http://wiki.slicer.org/slicerWiki/index.php?title=Category:Templates:Documentation/4.0&lt;br /&gt;
*It allow to tune / update how documentation look like for a given documentation set.&lt;br /&gt;
&lt;br /&gt;
=Developer information=&lt;br /&gt;
*For each module, the list of bugs, associated tests, list of classes, developer notes .. should be automatically collected. This could be achieved with the help of the &amp;quot;module-developerinfo&amp;quot; template.&lt;br /&gt;
*Every module should include the template &amp;quot;Documentation/X.Y/module-developerinfo&amp;quot;. See [10]&lt;br /&gt;
*As of today, this template is a placeholder/stub. As soon as, functionality will be implemented all module including that template will automatically display the wanted information.&lt;br /&gt;
*This implies:&lt;br /&gt;
**In mantis, bug should be assigned a category / tag and product version&lt;br /&gt;
**In CDash, tests should be labeled with both the ModuleName and the Slicer version. Then, using the webapi we should be able to obtain the list of tests, coverage, etc ...&lt;br /&gt;
**Status of the &amp;quot;Ron rules&amp;quot; could be semi-automatically generated: coverage, number of test, amount of documentation, style, ...&lt;br /&gt;
=Categorizing=&lt;br /&gt;
*The list of category is currently manually generated. This is not sustainable. Given the new page structure. These lists could be automatically generated.&lt;br /&gt;
*Mediawiki offers some nice feature to manage category. Let's use them.&lt;br /&gt;
&lt;br /&gt;
=Documentation packaging in Slicer=&lt;br /&gt;
*Since a template &amp;quot;module-section&amp;quot; have been introduced, there is now a placeholder that will allow to refine how sections are identified and will ease the integration in a future Slicer Assistant module.&lt;br /&gt;
**See https://www.slicer.org/wiki/Template:Documentation/4.0/module-section =Critical details=&lt;br /&gt;
*A module should be identified consistently in both the source and the documentation. GradientAnisotropicFilter !=  GradientAnisotropicDiffusion&lt;br /&gt;
*If a name is incorrect, it should be fixed/updated at the source ! Not just in the documentation.&lt;br /&gt;
&lt;br /&gt;
=ToDo=&lt;br /&gt;
*Look at wiki like &amp;quot;http://techbase.kde.org&amp;quot; .. I think we could inspire from what they did and improve the &amp;quot;user friendliness&amp;quot; of slicer wiki&lt;br /&gt;
*Add &amp;quot;EmailObfuscator&amp;quot;[11] or &amp;quot;EmailAddressImage&amp;quot;[12] extension to mediawiki that will be used inside the &amp;quot;contact&amp;quot; template [13]&lt;br /&gt;
*Setup a mechanism so that current &amp;quot;Documentation Set&amp;quot; follow Slicer source trunk could be duplicated and &amp;quot;frozen&amp;quot;&lt;br /&gt;
*Implement &amp;quot;developerinfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
* Please, review both the template [1] and GradientAnisotropicDiffusion [2] documentation and let me know what you think.&lt;br /&gt;
**[1] https://www.slicer.org/wiki/Documentation/4.0/Modules/YOURMODULENAME**[2] https://www.slicer.org/wiki/Documentation/4.0/Modules/GradientAnisotropicDiffusion**[3] http://wiki.slicer.org/slicerWiki/index.php?title=Template:Documentation/4.0/module-footer&amp;amp;action=edit&lt;br /&gt;
**[4] https://www.slicer.org/wiki/Template:Documentation/4.0/module-cli-category**[5] http://wiki.slicer.org/slicerWiki/index.php?title=Category:Documentation/4.0/Modules/Filtering&lt;br /&gt;
**[6] http://wiki.slicer.org/slicerWiki/index.php?title=Category:Documentation/4.0/Modules/Filtering.Denoising&lt;br /&gt;
**[7] https://www.slicer.org/wiki/Template:Documentation/version**[8] http://www.mediawiki.org/wiki/Extension:Duplicator&lt;br /&gt;
**[9] http://www.mediawiki.org/wiki/Extension:Multiplicator&lt;br /&gt;
**[10] https://www.slicer.org/wiki/Template:Documentation/4.0/module-developerinfo**[11] http://www.mediawiki.org/wiki/Extension:EmailObfuscator&lt;br /&gt;
**[12] http://www.mediawiki.org/wiki/Extension:EmailAddressImage&lt;br /&gt;
**[13] http://wiki.slicer.org/slicerWiki/index.php/Template:Documentation/4.0/contact&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/Sandbox&amp;diff=62696</id>
		<title>Documentation/4.8/Developers/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/Sandbox&amp;diff=62696"/>
		<updated>2019-11-27T14:54:29Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/wiki.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;
&lt;br /&gt;
&lt;br /&gt;
= Video Test =&lt;br /&gt;
The extension [https://www.mediawiki.org/wiki/Extension:EmbedVideo EmbedVideo] is now installed!&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=MKLWzD0PiIc}}&lt;br /&gt;
&lt;br /&gt;
= Graphviz test =&lt;br /&gt;
&amp;lt;graphviz caption=&amp;quot;Graph for example no. 3 (contains Wiki-Links)&amp;quot; alt=&amp;quot;phylogenetic tree&amp;quot; format=&amp;quot;png&amp;quot;&amp;gt;&lt;br /&gt;
digraph example3 {&lt;br /&gt;
  node [shape=plaintext];&lt;br /&gt;
  Mollusca [URL=&amp;quot;[[w:Mollusca]]&amp;quot;];&lt;br /&gt;
  Neomeniomorpha [URL=&amp;quot;[[w:Neomeniomorpha]]&amp;quot;];&lt;br /&gt;
  X1 [shape=point,label=&amp;quot;&amp;quot;];&lt;br /&gt;
  Caudofoveata [URL=&amp;quot;[[w:Caudofoveata]]&amp;quot;];&lt;br /&gt;
  Testaria [URL=&amp;quot;[[w:Testaria]]&amp;quot;];&lt;br /&gt;
  Polyplacophora [URL=&amp;quot;[[w:Polyplacophora]]&amp;quot;];&lt;br /&gt;
  Conchifera [URL=&amp;quot;[[w:Conchifera]]&amp;quot;];&lt;br /&gt;
  Tryblidiida [URL=&amp;quot;[[w:Tryblidiida]]&amp;quot;];&lt;br /&gt;
  Ganglioneura [URL=&amp;quot;[[w:Ganglioneura]]&amp;quot;];&lt;br /&gt;
  Bivalvia [URL=&amp;quot;[[w:Bivalvia]]&amp;quot;];&lt;br /&gt;
  X2 [shape=point,label=&amp;quot;&amp;quot;];&lt;br /&gt;
  X3 [shape=point,label=&amp;quot;&amp;quot;];&lt;br /&gt;
  Scaphopoda [URL=&amp;quot;[[w:Scaphopoda]]&amp;quot;];&lt;br /&gt;
  Cephalopoda [URL=&amp;quot;[[w:Cephalopoda]]&amp;quot;];&lt;br /&gt;
  Gastropoda [URL=&amp;quot;[[w:Gastropoda]]&amp;quot;];&lt;br /&gt;
  Mollusca-&amp;gt;X1-&amp;gt;Testaria-&amp;gt;Conchifera-&amp;gt;Ganglioneura-&amp;gt;X2-&amp;gt;Gastropoda&lt;br /&gt;
  Mollusca-&amp;gt;Neomeniomorpha&lt;br /&gt;
  X1-&amp;gt;Caudofoveata&lt;br /&gt;
  Testaria-&amp;gt;Polyplacophora&lt;br /&gt;
  Conchifera-&amp;gt;Tryblidiida&lt;br /&gt;
  Ganglioneura -&amp;gt;Bivalvia&lt;br /&gt;
  X2-&amp;gt;X3-&amp;gt;Cephalopoda&lt;br /&gt;
  X3-&amp;gt;Scaphopoda&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graphviz&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Test modulo function associated with CURRENTTIMESTAMP =&lt;br /&gt;
&lt;br /&gt;
{{#expr: {{CURRENTTIMESTAMP}} mod 40}}&lt;br /&gt;
&lt;br /&gt;
= Random image =&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/Developers/random-image}}&lt;br /&gt;
&lt;br /&gt;
= Use of get_web_data and for_external_table =&lt;br /&gt;
&lt;br /&gt;
The raw set of data retrieved using this [[Special:GetData/Documentation/4.0/Developers/Sandbox_data|URL]] is reported below:&lt;br /&gt;
&lt;br /&gt;
{{ambox&lt;br /&gt;
| type      = content&lt;br /&gt;
| text      = There are two extra empty lines !&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Name,Color,Shape&lt;br /&gt;
Apple,Red,Round&lt;br /&gt;
Banana,Yellow,Oblong&lt;br /&gt;
Orange,Orange,Round&lt;br /&gt;
Pear,Yellow,&amp;quot;Pear-shaped&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ambox&lt;br /&gt;
| type      = speedy&lt;br /&gt;
| text      = The following table should contains Fruits&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:url=http://wiki.slicer.org/slicerWiki/index.php/Special:GetData/Documentation/4.0/Developers/Sandbox_data|format=CSV with header|data=name=Name,color=Color,shape=Shape}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Color {{#for_external_table:&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[{{{name}}}]]&lt;br /&gt;
{{!}} {{{color}}} }}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Use of get_web_data and external_value =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using filter as template parameter ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=https://www.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data|format=CSV with header&lt;br /&gt;
|data=bananashape0=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape0}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=https://www.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data|format=CSV with header&lt;br /&gt;
|data=bananashape0=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using filter as URL parameter ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=https://www.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data,Name=Banana|format=CSV with header&lt;br /&gt;
|data=bananashape1=Shape&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape1}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=https://www.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data,Name=Banana|format=CSV with header&lt;br /&gt;
|data=bananashape1=Shape&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using fullurl ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url={{fullurl:Special:GetData/Documentation/4.0/Developers/Sandbox_data}}&lt;br /&gt;
|format=CSV with header&lt;br /&gt;
|data=bananashape2=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape2}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{fullurl:Special:GetData/Documentation/4.0/Developers/Sandbox_data,Name=Banana}}&lt;br /&gt;
&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url={{fullurl:Special:GetData/Documentation/4.0/Developers/Sandbox_data}}&lt;br /&gt;
|format=CSV with header&lt;br /&gt;
|data=bananashape2=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape2}}&lt;br /&gt;
&lt;br /&gt;
= Debug module-footer template =&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules|DicomToNrrdConverter]]&lt;br /&gt;
{{#if: {{documentation/{{documentation/version}}/module-category}} | &amp;lt;!-- The following category will be 'MainCategory' assuming category parameter was 'MainCategory.SubCategory'--&amp;gt;&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/{{Strloc_prefix|{{documentation/{{documentation/version}}/module-category}}|strloc= {{strfind_short|{{documentation/{{documentation/version}}/module-category}}|.|1|lenstr={{strlen_quick|{{documentation/{{documentation/version}}/module-category}}}}|}}-1}}|DicomToNrrdConverter]]&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/{{documentation/{{documentation/version}}/module-category}}|DicomToNrrdConverter]]&lt;br /&gt;
| }}&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/FAQ/Extensions&amp;diff=62693</id>
		<title>Documentation/4.8/Developers/FAQ/Extensions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/FAQ/Extensions&amp;diff=62693"/>
		<updated>2019-11-27T14:54:04Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;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;
'''Note: to build C++ extensions you need to have built Slicer from source on your machine; they cannot be built against a binary download.'''&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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;
&lt;br /&gt;
'''MaxOSX''': Extension '''must be configured''' specifying &amp;lt;code&amp;gt;CMAKE_OSX_*&amp;lt;/code&amp;gt; variables matching the one used to configure Slicer:&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_ARCHITECTURES:STRING=x86_64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=/same/as/Slicer&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_SYSROOT:PATH=SameAsSlicer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Run ''CMake (cmake-gui)'' from the Windows Start menu.&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;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;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;code&amp;gt;MyExtension.sln&amp;lt;/code&amp;gt; in Visual Studio&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select '''Release''' build configuration.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select 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;
== Is there a way to automatically set CMAKE_OSX_* variables ? ==&lt;br /&gt;
&lt;br /&gt;
Within your extension, including the &amp;lt;code&amp;gt;ConfigurePrerequisites&amp;lt;/code&amp;gt; component before the project statement should ensure it uses the same CMAKE_OSX_* variables as Slicer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find_package(Slicer COMPONENTS ConfigurePrerequisites REQUIRED)&lt;br /&gt;
&lt;br /&gt;
project(Foo)&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
find_package(Slicer REQUIRED)&lt;br /&gt;
include(${Slicer_USE_FILE})&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;lt;code&amp;gt;ConfigurePrerequisites&amp;lt;/code&amp;gt; component should be considered experimental and could change without notice.&lt;br /&gt;
&lt;br /&gt;
For more details, see [https://github.com/Slicer/Slicer/blob/75fc96bf05e65659eb5204f47b5205442cc6fd8e/CMake/SlicerConfig.cmake.in#L10-L38 here].&lt;br /&gt;
&lt;br /&gt;
== How to run extension tests ? ==&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ ctest -j&amp;lt;NUMBEROFCORES&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
To run all tests, start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&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; in Visual Studio&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select &amp;lt;code&amp;gt;RUN_TESTS&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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run test individually, open  Command Line Prompt. [http://windows.microsoft.com/en-us/windows/command-prompt-faq Need help?]&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;gt; cd C:\path\to\MyExtension-build&lt;br /&gt;
&amp;gt; ctest -R NameOfTest -V&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To debug individual tests.&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;Launch Visual Studio from the Command Line Prompt: &amp;lt;code&amp;gt;C:\path\to\Slicer-build\Slicer.exe --VisualStudio --launcher-no-splash --launcher-additional-settings C:\path\to\MyExtension-build\AdditionalLauncherSettings.ini C:\path\to\MyExtension-build\MyExtension.sln&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Find the project of the test you want to debug (e.g. ''qSlicerMODULE_NAMEModuleGenericCxxTests'').&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Go to the project debugging properties (right-click -&amp;gt; Properties, then Configuration Properties / Debugging).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In ''Command Arguments'', type the name of the test you want to run (e.g. ''qSlicerMODULE_NAMEModuleGenericTest'').&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the test takes arguments, enter the arguments after the test name in ''Command Arguments''.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the project as the StartUp Project (right-click -&amp;gt; Set As StartUp Project).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start debugging (F5).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&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; in Visual Studio&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;
{{remark|red|{{:Documentation/{{documentation/version}}/Developers/Tutorials/BuildTestPackageDistributeExtensions/ExperimentalFolderAccess}} }}&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;packageupload&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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 packageupload&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Run ''CMake (cmake-gui)'' from the Windows Start menu.&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;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;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&lt;br /&gt;
&amp;lt;ol&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; in Visual Studio&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;packageupload&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;
Alternatively, you could also [[#How_to_cache_API_credentials_.3F|cache your API credentials]].&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;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;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;packageupload&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Locally package and upload the extension&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;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;&amp;lt;s&amp;gt;ExperimentalUpload&amp;lt;/s&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;s&amp;gt;Equivalent to Experimental target followed by packaging and upload of the extension on the extension server.&amp;lt;/s&amp;gt; Not available anymore. Removed in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=26271 r26271]&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;&amp;lt;s&amp;gt;ExperimentalUploadOnly&amp;lt;/s&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;s&amp;gt;Only proceed to the upload of the extension on the extension server.&amp;lt;/s&amp;gt;. Not available anymore. Superseded by &amp;lt;code&amp;gt;packageupload&amp;lt;/code&amp;gt;. Removed in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=26271 r26271]&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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/DoSomethingAwesome&amp;quot;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;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: https://www.slicer.org/wiki/Documentation/Nightly/Extensions/SkullStripper == 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''' &amp;lt;s&amp;gt;and also '''continuously''' during the day&amp;lt;/s&amp;gt;.&lt;br /&gt;
* Slicer {{documentation/currentversion}} lastest stable release package occurs '''every night'''.&lt;br /&gt;
&lt;br /&gt;
All extensions associated can be expected by mid-morning. Checking the dashboard will give a definite answer. Check [[Documentation/Nightly/Developers/Tutorials/BuildTestPackageDistributeExtensions#Continuous_Integration|this page]] to learn how to easily get the status of any given extension.&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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/EmptyExtensionTemplate&amp;quot;)  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://www.slicer.org/w/img_auth.php/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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/EmptyExtensionTemplate&amp;quot;)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://www.slicer.org/w/img_auth.php/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;br /&gt;
&lt;br /&gt;
== How to package third party libraries ? ==&lt;br /&gt;
&lt;br /&gt;
Extensions integrating third party libraries should follow the [https://github.com/Slicer/Slicer/tree/master/Utilities/Templates/Extensions/SuperBuild SuperBuild extension template].&lt;br /&gt;
&lt;br /&gt;
Each third party libraries will be configured and built using a dedicated &amp;lt;code&amp;gt;External_MyLib.cmake&amp;lt;/code&amp;gt; file, the install location of binaries and libraries should be set to &amp;lt;code&amp;gt;Slicer_INSTALL_BIN_DIR&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Slicer_INSTALL_LIB_DIR&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These relative paths are the one that the extensions manager will consider when generating the launcher and application settings for a given extension.&lt;br /&gt;
&lt;br /&gt;
== Can I use C++11/14/17 language features ? ==&lt;br /&gt;
&lt;br /&gt;
Since Slicer is not built with these features (it used c++98/c++03), you should not use C++11/14/17 language features in your extensions.&lt;br /&gt;
&lt;br /&gt;
If your extension can be compiled as a standalone project where you would like to use newer feature, you could rely on CMake detecting compile features. See [https://cmake.org/cmake/help/v3.5/manual/cmake-compile-features.7.html cmake-compile-features] for more details.&lt;br /&gt;
&lt;br /&gt;
See the labs topic on [https://www.slicer.org/wiki/Documentation/Labs/UpgradingCompilerInfrastructure upgrading compiler infrastructure] for additional information/status.&lt;br /&gt;
&lt;br /&gt;
== How do I publish a paper about my extension ? ==&lt;br /&gt;
&lt;br /&gt;
Consider publishing a paper describing your extension.  This link contains a list of journals that publish papers about software:&lt;br /&gt;
&lt;br /&gt;
[http://www.software.ac.uk/resources/guides/which-journals-should-i-publish-my-software http://www.software.ac.uk/resources/guides/which-journals-should-i-publish-my-software]&lt;br /&gt;
&lt;br /&gt;
== How to force a different Slicer revision for downloading different extension ? ==&lt;br /&gt;
&lt;br /&gt;
Since extensions available from the [[Documentation/{{documentation/currentversion}}/SlicerApplication/ExtensionsManager|Extensions Manager]] are associated with a particular slicer revision, for testing purpose it is practical to override the current revision. This can be done by explicitly setting a revision number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; extensionManagerModel = slicer.app.extensionsManagerModel()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; extensionManagerModel.slicerRevision = &amp;quot;25742&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Modules:Volumes:Diffusion_Editor-Documentation-3.2&amp;diff=62692</id>
		<title>Modules:Volumes:Diffusion Editor-Documentation-3.2</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Modules:Volumes:Diffusion_Editor-Documentation-3.2&amp;diff=62692"/>
		<updated>2019-11-27T14:53:59Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Return to Slicer Documentation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Diffusion Editor=&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:DiffusionEditor helix.jpg|thumb|250px|Diffusion Editor, showing tracts and glyphs on helix example]]&lt;br /&gt;
|[[Image:Tracts_glyphs.jpg|thumb|250px|tracts and glyphs view]]&lt;br /&gt;
|[[Image:Tracts_glyphs_90degrees.jpg|thumb|250px|tracts and glyphs view - +90° rotation of measurement frame]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= General Information =&lt;br /&gt;
==Module Type &amp;amp; Category==&lt;br /&gt;
&lt;br /&gt;
Type: Interactive&lt;br /&gt;
&lt;br /&gt;
Category: Diffusion Imaging&lt;br /&gt;
&lt;br /&gt;
==Authors, Collaborators &amp;amp; Contact==&lt;br /&gt;
* Author: Kerstin Kessel&lt;br /&gt;
* Supervisor: Steve Pieper, Ron Kikinis&lt;br /&gt;
&lt;br /&gt;
==Module Description==&lt;br /&gt;
As the documentation of acquisition parameters in dicom data is not standardized, MRI scanners (Siemens, GE) handle gradients/bValues/measurement frame differently in their dicom headers. Because of that there is a big need to add/modify them manually.&lt;br /&gt;
&lt;br /&gt;
The Diffusion Editor is a 3D Slicer module, which allows modifying parameters (gradients, bValues, measurement frame) of DWI data and provides a quick way to interpret them. For that it estimates a tensor and shows glyphs and tracts for visual exploration. &lt;br /&gt;
&lt;br /&gt;
=== Measurement Frame ===&lt;br /&gt;
The measurement frame of all DWI is always displayed in the RAS space. That's because Slicer stores all internal coordinates in RAS. &lt;br /&gt;
&lt;br /&gt;
If you save changes in a new .nhdr file the measurement frame will always be in RAS.&lt;br /&gt;
&lt;br /&gt;
=== Used Tensor Estimation === &lt;br /&gt;
The Diffusion Editor uses the Tensor Estimation CLM (Command Line Module) of Slicer to compute tensors. &lt;br /&gt;
* The module provides the linear-least-squares, non-linear-least squares and weighted-least-square method for the estimation. But the DiffusionEditor uses the linear-least-squares method by default, as it is the fastest and most robust.&lt;br /&gt;
* See [[Slicer3:DTMRI#Tensor_Estimation_from_DWI_Module],|[http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:TeemExamples#tend_estim:_tensor_estimation]] for more information on the Tensor Estimation CLM.&lt;br /&gt;
&lt;br /&gt;
The testing frame provides just a small subset of DTI display options. For more detailed settings&lt;br /&gt;
* load the DTI as the active volume in the volumes modul&lt;br /&gt;
* go to the display frame and adjust parameters.&lt;br /&gt;
&lt;br /&gt;
=== Used Tractography Fiducial Seeding === &lt;br /&gt;
The Diffusion Editor uses the Tractography Fiducial Seeding module of Slicer to compute tracts.&lt;br /&gt;
* The Diffusion Editor uses the default parameters. To change tractography parameters select the modul: Tractography/Seeding/Fiducial Seeding [[Slicer3:DTMRI#Tractography_Fiducial_Seeding_Module].|Changes there have an immediate impact for the tracts in the Diffusion Editor.&lt;br /&gt;
* For more detailed exploring of tracts use the Fiducial Seeding module or for display options select the module Tractography/DisplayLoadSave [https://www.slicer.org/wiki/Slicer3:DTMRI#Tractography_Module]].* See [[Slicer3:DTMRI#Tractography_Module|here]] for more information on the Tractography modules.&lt;br /&gt;
&lt;br /&gt;
=== Current features of the Diffusion Editor=== &lt;br /&gt;
For DWI&lt;br /&gt;
* Edit gradients manually or load existing gradients from file (.txt or .nhdr).&lt;br /&gt;
* Edit the [[Modules:Volumes:Diffusion_Editor-Documentation-3.2#Measurement_Frame| measurement frame]] manually or simply rotate/swap/invert columns by selecting them. &lt;br /&gt;
* Test the parameters by estimating a tensor and displaying glyphs and tracts.&lt;br /&gt;
For DTI&lt;br /&gt;
* Edit the measurement frame as described above.  &lt;br /&gt;
* Test by displaying glyphs and tracts.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
==Examples &amp;amp; Tutorials==&lt;br /&gt;
&lt;br /&gt;
=== Preparation ===&lt;br /&gt;
&lt;br /&gt;
* Download Slicer. The most recent stable Slicer version can be found [http://www.slicer.org/pages/Downloads here]. Or load Slicer's latest snapshot.&lt;br /&gt;
* You can also use SVN to checkout the trunk of the current version of Slicer. See [[Slicer3:Build_Instructions| here]] for more instructions on how to build Slicer.&lt;br /&gt;
* Download example data: [[ media:DiffusionEditor_ExampleData.zip | DiffusionEditor_ExampleData.zip ]] and unzip it.&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
To start a tutorial video simply click on the link in the table.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#abcdef&amp;quot;&lt;br /&gt;
! title !!short description&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Load DWI-Dicom| Load DICOM]]  ||Load a DWI dicom data set in Slicer.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Edit Gradients | Edit gradients ]]||Change gradients manually and load them from a file. Save your changes afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Edit Measurement frame| Edit measurement frame]] ||Change the measurement frame by swapping and inverting. Save your changes afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Testing | Testing ]]||Run tensor estimation and show glyphs and tracts; &lt;br /&gt;
Run second estimation with 90°rotation and switch between both tensors and see the impact of that change.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quick Tour of Features and Use==&lt;br /&gt;
&lt;br /&gt;
[[Image:DiffusionEditor_v8.jpg|right|overview]]&lt;br /&gt;
&lt;br /&gt;
* '''Measurement frame:'''&lt;br /&gt;
&lt;br /&gt;
# The determinant of the measurement frame has to be 1. This is checked by the editor.&lt;br /&gt;
# '''Invert''': Select the columns you want to invert.&lt;br /&gt;
# '''Swap''': Select two columns you want to swap.&lt;br /&gt;
# '''Rotate''': Select one column you want to rotate by an angle you can choose from a given set of values or set yourself.&lt;br /&gt;
# '''Identity''': Set the measurement frame to the identity matrix.&lt;br /&gt;
# Set your own values.&lt;br /&gt;
&lt;br /&gt;
* '''Gradients frame:'''&lt;br /&gt;
# If the active volume is a DWI the editor will put the gradients in the text field; otherwise this frame is disabled.&lt;br /&gt;
# You can copy/paste your own gradients in the text field or change them manually.&lt;br /&gt;
# You can load gradients from a text file or .nhdr file. For the .txt file the format of gradients is easy, it can contain only values ([[ media:DiffusionEditor_ExampleData.zip | see example data ]]).&lt;br /&gt;
&lt;br /&gt;
* '''Undo/Redo/Restore:'''&lt;br /&gt;
#'''Undo''': Undo the last change of measurement/gradient values.&lt;br /&gt;
#'''Redo''': Redo the last change of measurement/gradient values.&lt;br /&gt;
#'''Restore''': All parameters are restored to original.&lt;br /&gt;
&amp;lt;font color=&amp;quot;Red&amp;quot;&amp;gt;NOTE:&amp;lt;/font&amp;gt; You lose all previous changes when a new active volume is loaded or selected.&lt;br /&gt;
&lt;br /&gt;
* '''Testing frame:'''&lt;br /&gt;
# '''Run''' tensor estimation. The new tensor node shows up in the DTI selector.&lt;br /&gt;
# Select a DTI node from the current mrml scene and for&lt;br /&gt;
## Glyph visibility: Select the planes on which you want to see glyphs and adjust the glyph spacing.&lt;br /&gt;
## Tract visibility: Add some fiducials and choose the fiducial list in the selector. Show tracts with Tractography Fiducial Seeding.&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
&lt;br /&gt;
== Status / Implementation Progress ==&lt;br /&gt;
The editor is now successfully integrated in the Volumes module of the trunk version of Slicer3.&lt;br /&gt;
*measurement frame (gui/load/change/save): 100%&lt;br /&gt;
*gradients (gui/load/change/save): 100%&lt;br /&gt;
*undo/redo/restore mechanism: 100%&lt;br /&gt;
*testing frame: 100%&lt;br /&gt;
** tensor estimation for DWI with existing clm: 100%&lt;br /&gt;
** glyphs view in all three planes with the possibility to change spacing: 100%&lt;br /&gt;
** tractography fiducial seeding: 100%&lt;br /&gt;
*ctest: 100%&lt;br /&gt;
*documentation, tutorials (videos): 100%&lt;br /&gt;
*writing master thesis: 60% :-)&lt;br /&gt;
&lt;br /&gt;
== Known issues / bugs ==&lt;br /&gt;
&lt;br /&gt;
Follow this link to the Slicer3 bug tracker to see known bugs, or to report a new one. Please select the '''usability issue category''' when browsing or contributing:&lt;br /&gt;
&lt;br /&gt;
http://na-mic.org/Mantis/main_page.php&lt;br /&gt;
&lt;br /&gt;
Queries, feature requests and other feedback should be directed to slicer-devel |at| bwh.harvard.edu. You can also sign up for Slicers user and developer list to make sure you hear of new developments, releases and bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Issues ===&lt;br /&gt;
* Changing the measurement frame of a DTI has no impact. The tensor is not estimated again. &lt;br /&gt;
** Future work: Adding new rotation filter for tensors (contributed by Raul San Jose)&lt;br /&gt;
* Multiple bValues are not displayed. Currently to describe acquisitions with different b-values the magnitudes of the gradients are changed. See the nrrd format page about [http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:Nrrd_format#Describing_DWIs_with_differen_b-values describing DWIs with different b-values].&lt;br /&gt;
** Future work: Adding different views of gradients/bValues.&lt;br /&gt;
* Checking gradients when one types new values in the textbox is slowly. Reason: SetDiffusionGradients of the vtkMRMLDiffusionWeightedVolumeNode seems to trigger many events.&lt;br /&gt;
** Future work: Use [[Slicer3:EventBroker|Eventbroker]] for performance analysis and if necessary turn off events.&lt;br /&gt;
&lt;br /&gt;
== Source code &amp;amp; documentation ==&lt;br /&gt;
&lt;br /&gt;
Source code is available here:&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorWidget.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorLogic.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorLogic.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerMeasurementFrameWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerMeasurementFrameWidget.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerGradientsWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerGradientsWidget.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionTestingWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionTestingWidget.h&lt;br /&gt;
&lt;br /&gt;
Links to documentation generated by doxygen:&lt;br /&gt;
&lt;br /&gt;
http://www.na-mic.org/Slicer/Documentation/Slicer3/html/&lt;br /&gt;
&lt;br /&gt;
= More Information =&lt;br /&gt;
&lt;br /&gt;
== Acknowledgement ==&lt;br /&gt;
This research project was part of a Master thesis (Diplomarbeit) in cooperation of the faculty of Medical Informatics, University of Heidelberg/Germany and the Surgical Planning Lab. It was supported by a grant of the Lions Club Heilbronn/Franken.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Thesis: [[Image:Thesis_letter.pdf|https://www.slicer.org/wiki/Media:Thesis_letter.pdf]] DTMRI: [[Slicer3:DTMRI|https://www.slicer.org/wiki/Slicer3:DTMRI]] Nrrd format: [http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:Nrrd_format http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:Nrrd_format]&lt;br /&gt;
&lt;br /&gt;
DICOM for DWI and DTI : [http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:DICOM_for_DWI_and_DTI http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:DICOM_for_DWI_and_DTI]&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Tutorials/MigrationGuide/Slicer&amp;diff=62691</id>
		<title>Documentation/Nightly/Developers/Tutorials/MigrationGuide/Slicer</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Tutorials/MigrationGuide/Slicer&amp;diff=62691"/>
		<updated>2019-11-27T14:53:57Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;__TOC__&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
==Slicer backward incompatible changes==&lt;br /&gt;
&lt;br /&gt;
=== Slicer 5.0: API changes since 4.10 ===&lt;br /&gt;
&lt;br /&gt;
* Removed protected method &amp;lt;tt&amp;gt;vtkMRMLModelDisplayableManager::FindPickedDisplayNodeFromMesh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Python 2 to Python 3 ====&lt;br /&gt;
&lt;br /&gt;
Slicer core has been updated to only support Python 3.&lt;br /&gt;
&lt;br /&gt;
C++ classes and python scripts have been updated to use idioms and constructs only available in Python 3.&lt;br /&gt;
&lt;br /&gt;
Update to python scripts have been done leveraging the CLI provided by https://python-future.org by (1) iteratively applying each one of the associates &amp;quot;fixes&amp;quot;, (2) reviewing associated changes and (3) updating as needed.&lt;br /&gt;
&lt;br /&gt;
Updates specific to extensions are discussed in [[Documentation/Nightly/Developers/Tutorials/MigrationGuide#Slicer_5.0:_Python2_to_Python3]]&lt;br /&gt;
&lt;br /&gt;
==== Interactor styles ====&lt;br /&gt;
&lt;br /&gt;
Limitations of VTK widgets (editable points, lines, curves, etc.) prevented Slicer from having sophisticated user interaction in slice and 3D views. In Slicer5, we replaced VTK widgets with MRML widgets. These widgets are still VTK-based and somewhat similar to VTK widgets, but they operate directly on MRML nodes, they use direct method calls between widgets and their representation, and they use a more efficient and flexible event processing. Instead of hardcoding how viewers behave in response to interaction (mouse move, button click, keyboard, ...) events in an interactor style, all these events are translated to actions and performed in a MRML widget. Most modules are not expected to observe interactor events or styles directly, but if they did, then they may need to be updated accordingly.&lt;br /&gt;
&lt;br /&gt;
* vtkSliceViewInteractorStyle renamed to vtkMRMLSliceDViewInteractorStyle to reflect that it uses MRML classes directly.&lt;br /&gt;
* vtkThreeDViewInteractorStyle renamed to vtkMRMLThreeDViewInteractorStyle to reflect that it uses MRML classes directly.&lt;br /&gt;
&lt;br /&gt;
==== slicer.util functions ====&lt;br /&gt;
&lt;br /&gt;
* slicer.util.loadVolume (and other node load functions) now return the loaded node instead of a True/False flag. In case of an error, a RuntimeError exception is thrown.&lt;br /&gt;
** Old way of loading a node and get it in a variable: &amp;lt;code&amp;gt;volumeNode = slicer.util.loadVolume('path/to/volume.nrrd', returnNode=True)[1]&amp;lt;/code&amp;gt;&lt;br /&gt;
** New way of loading a node and get it in a variable: &amp;lt;code&amp;gt;volumeNode = slicer.util.loadVolume('path/to/volume.nrrd')&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Markups ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;vtkCommand::Modified&amp;lt;/tt&amp;gt; events are no longer invoked when control points are added/removed/modified to improve performance. Modules that need to know If a point position is modified need to add observers to &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::PointAddedEvent&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::PointRemovedEvent&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::PointModifiedEvent&amp;lt;/tt&amp;gt; events. See example in [[Documentation/Nightly/ScriptRepository#Get_a_notification_if_a_markup_point_position_is_modified|script repository]].&lt;br /&gt;
* &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::MarkupAddedEvent&amp;lt;/tt&amp;gt; is renamed to &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::PointAddedEvent&amp;lt;/tt&amp;gt;. This is called even when preview point is created. Use &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::PointPositionDefinedEvent&amp;lt;/tt&amp;gt; to get notification only when position of a point becomes defined (and not during preview).&lt;br /&gt;
* &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::MarkupRemovedEvent&amp;lt;/tt&amp;gt; is renamed to &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::PointRemovedEvent&amp;lt;/tt&amp;gt;. This is called even when preview point is removed. Use &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::PointPositionUndefinedEvent&amp;lt;/tt&amp;gt; to get notification only when position of a point becomes undefined (and not during preview).&lt;br /&gt;
* &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::NthMarkupModifiedEvent&amp;lt;/tt&amp;gt; is replaced by &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::PointModifiedEvent&amp;lt;/tt&amp;gt;&lt;br /&gt;
* During placement of markups, a preview markup point is created. If number of already placed markup points needs to be determined then &amp;lt;code&amp;gt;GetNumberOfDefinedControlPoints()&amp;lt;/code&amp;gt; method can be used.&lt;br /&gt;
* &amp;lt;tt&amp;gt;GetDefaultMarkups...()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;SetDefaultMarkups...()&amp;lt;/tt&amp;gt; methods are removed. Instead default display node can be accessed by &amp;lt;tt&amp;gt;GetDefaultMarkupsDisplayNode()&amp;lt;/tt&amp;gt; method and default values can be get/set in that class.&lt;br /&gt;
* &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::GetNthMarkupSelected()&amp;lt;/tt&amp;gt; is replaced by &amp;lt;tt&amp;gt;GetNthControlPointSelected()&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::PointPositionDefinedEvent&amp;lt;/tt&amp;gt; event is added. This event is invoked whenever position is defined for a new point.&lt;br /&gt;
* &amp;lt;tt&amp;gt;vtkMRMLMarkupsNode::PointPositionUndefinedEvent&amp;lt;/tt&amp;gt; event is added. This event is invoked whenever point with defined position is removed (point is deleted or its position gets undefined).&lt;br /&gt;
* For more details, see [{{doxygen-class-url|vtkMRMLMarkupsNode}} vtkMRMLMarkupsNode]&lt;br /&gt;
&lt;br /&gt;
==== Segmentations ====&lt;br /&gt;
&lt;br /&gt;
Binary labelmap segmentations can now be represented as shared labelmaps.&lt;br /&gt;
The previous implementation of binary labelmaps was performance intensive as each labelmap was represented using a separate vtkDataObject.&lt;br /&gt;
Visualizing and editing segmentations that contained a large number of segments could cause performance issues, due to the large number of vtkActors required, as well as calculating masks and overwriting other segments when editing.&lt;br /&gt;
&lt;br /&gt;
By default, newly created segments will now be contained on the same layer.&lt;br /&gt;
Segments will only be separated into multiple layers if the user creates an overlapping segment when editing.&lt;br /&gt;
&lt;br /&gt;
Segments are now saved as a 4D volume with shared 3D layers.&lt;br /&gt;
For a segmentation that only uses one layer, the resulting image is a 3D volume.&lt;br /&gt;
Before saving, the labelmaps will be collapsed into as few layers as possible.&lt;br /&gt;
&lt;br /&gt;
* seg.nrrd files now contain two additional attributes for each segment: SegmentX_LabelValue and SegmentX_Layer&lt;br /&gt;
* The label value of a segment can be found using vtkSegment::GetLabelValue()&lt;br /&gt;
* Whether or not a segment is shared can be found using vtkSegmentation::IsSharedBinaryLabelmap()&lt;br /&gt;
* The other segments sharing the same labelmap can be found using vtkSegmentation::GetSegmentIDsSharingBinaryLabelmapRepresentation()&lt;br /&gt;
* Segment editor effects should generally use modifySelectedSegmentByLabelmap rather than SetBinaryLabelmapToSegment to manage layer separation&lt;br /&gt;
* Conversion rules now call PreConvert() and PostConvert() before and after conversion to perform pre and post processing steps on the segmentation as a whole&lt;br /&gt;
* The function signature for vtkSegmentationConverterRule::Convert now accepts a vtkSegment rather than two vtkDataObjects&lt;br /&gt;
* slicer.util.arrayFromSegment has been deprecated. slicer.util.arrayFromSegmentBinaryLabelmap and slicer.util.arrayFromSegmentInternalBinaryLabelmap can be used instead&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Erase the contents of a single segment:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentation = segmentationNode.GetSegmentation()&lt;br /&gt;
segmentation.ClearSegment(segmentId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Move a segment from a shared labelmap to a separate layer:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentation = segmentationNode.GetSegmentation()&lt;br /&gt;
segmentation.SeparateSegmentLabelmap(segmentId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Combine all binary labelmaps to as few layers as possible:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
segmentation = segmentationNode.GetSegmentation()&lt;br /&gt;
segmentation.CollapseBinaryLabelmaps(forceToSingleLayer=false)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Get a read-only labelmap for a single segment:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
labelmap = slicer.vtkOrientedImageData()&lt;br /&gt;
segmentationNode.GetBinaryLabelmapRepresentation(segmentId, labelmap)&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;
labelmapNumpyArray = slicer.util.arrayFromSegmentBinaryLabelmap(segmentationNode, segmentId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Get a modifiable shared labelmap:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
labelmap = slicer.vtkOrientedImageData()&lt;br /&gt;
segmentationNode.GetBinaryLabelmapInternalRepresentation(segmentId, labelmap)&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;
labelmapNumpyArray = slicer.util.arrayFromSegmentInternalBinaryLabelmap(segmentationNode, segmentId)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.11: teem python module renamed to vtkTeem, explicit import required ===&lt;br /&gt;
&lt;br /&gt;
* Since the module provides VTK classes interfacing with &amp;quot;teem&amp;quot;, the name is now representative of the class it contains.&lt;br /&gt;
* &amp;lt;tt&amp;gt;vtkTeem&amp;lt;/tt&amp;gt; classes are expected to be used by explicitly importing the module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Replace code like this:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import teem&lt;br /&gt;
&lt;br /&gt;
class CalculateTensorScalars(object):&lt;br /&gt;
  def __init__(self):&lt;br /&gt;
    self.dti_math = teem.vtkDiffusionTensorMathematics()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;By this:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import vtkTeem&lt;br /&gt;
&lt;br /&gt;
class CalculateTensorScalars(object):&lt;br /&gt;
  def __init__(self):&lt;br /&gt;
    self.dti_math = vtkTeem.vtkDiffusionTensorMathematics()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.11: Display window/level (brightness/contrast) adjustment ===&lt;br /&gt;
* A new &amp;quot;Window/level&amp;quot; mouse interaction mode was introduced. Volume display window/level can only be changed if this mode is activated by clicking the corresponding button in the toolbar. The new mouse mode prevents accidental modification of volume window/level (when for example the user accidentally clicked too far from a markup) and it also allows more sophisticated window/level adjustments.&lt;br /&gt;
* New region-based auto window/level feature added: activate &amp;quot;Window/level&amp;quot; mouse mode and use Ctrl + left-click-and-drag to highlight a region and optimize window/level for that (pressing Escape or right-click cancels the operation).&lt;br /&gt;
* Auto window/level reset: activate &amp;quot;Window/level&amp;quot; mouse mode and double-click the left mouse button.&lt;br /&gt;
* Improved auto window/level algorithm to prevent too bright display of images. Window/level is set to display values between 0.1th and 99.9th percentile of gray levels. See details here: https://discourse.slicer.org/t/feedback-requested-how-to-improve-mouse-interaction-in-views/6420.&lt;br /&gt;
* Removed class &amp;lt;tt&amp;gt;vtkImageBimodalAnalysis&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.10: Registration of runTest function done in ScriptedLoadableModule base class===&lt;br /&gt;
&lt;br /&gt;
Following [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=27617 r27617]:&lt;br /&gt;
* the &amp;lt;code&amp;gt;ScriptedLoadableModule&amp;lt;/code&amp;gt; class takes care of registering the &amp;lt;code&amp;gt;runTest&amp;lt;/code&amp;gt; function.&lt;br /&gt;
* the &amp;lt;code&amp;gt;runTest&amp;lt;/code&amp;gt; function expects &amp;lt;code&amp;gt;msec&amp;lt;/code&amp;gt; keyword argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Error message similar to:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;/path/to/Slicer-SuperBuild/Slicer-build/bin/Python/slicer/ScriptedLoadableModule.py&amp;quot;, line 205, in onReloadAndTest&lt;br /&gt;
    test(msec=int(slicer.app.userSettings().value(&amp;quot;Developer/SelfTestDisplayMessageDelay&amp;quot;)), **kwargs)&lt;br /&gt;
TypeError: runTest() got an unexpected keyword argument 'msec'&lt;br /&gt;
Reload and Test: Exception!&lt;br /&gt;
&lt;br /&gt;
runTest() got an unexpected keyword argument 'msec'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Replace code like this:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class sceneImport2428(ScriptedLoadableModule):&lt;br /&gt;
  [...]&lt;br /&gt;
  def __init__(self, parent):&lt;br /&gt;
    ScriptedLoadableModule.__init__(self, parent)&lt;br /&gt;
    parent.title = &amp;quot;...&amp;quot;&lt;br /&gt;
    [...]&lt;br /&gt;
    parent.acknowledgementText = &amp;quot;...&amp;quot;&lt;br /&gt;
    self.parent = parent 	 &lt;br /&gt;
	  	 &lt;br /&gt;
    # Add this test to the SelfTest module's list for discovery when the module 	 &lt;br /&gt;
    # is created.  Since this module may be discovered before SelfTests itself, 	 &lt;br /&gt;
    # create the list if it doesn't already exist. 	 &lt;br /&gt;
    try: 	 &lt;br /&gt;
      slicer.selfTests 	 &lt;br /&gt;
    except AttributeError: 	 &lt;br /&gt;
      slicer.selfTests = {} 	 &lt;br /&gt;
    slicer.selfTests['sceneImport2428'] = self.runTest 	 &lt;br /&gt;
 &lt;br /&gt;
  def runTest(self): 	 &lt;br /&gt;
    tester = sceneImport2428Test() 	 &lt;br /&gt;
    tester.runTest()&lt;br /&gt;
&lt;br /&gt;
  [...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;By this:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class sceneImport2428(ScriptedLoadableModule):&lt;br /&gt;
  [...]&lt;br /&gt;
  def __init__(self, parent):&lt;br /&gt;
    ScriptedLoadableModule.__init__(self, parent)&lt;br /&gt;
    parent.title = &amp;quot;...&amp;quot;&lt;br /&gt;
    [...]&lt;br /&gt;
    parent.acknowledgementText = &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.9: Update of VTK version from 9.0 to 8.2 ===&lt;br /&gt;
&lt;br /&gt;
Following [https://github.com/Kitware/VTK/commit/b703d78be3ffd8ae69c319afa0230097ff270f26 kitware/VTK@b703d78be], VTK has updated to use version number 8.2 instead of 9.0. This was discussed in on the VTK mailing list in http://vtk.1045678.n5.nabble.com/Discussion-OK-to-change-VTK-s-version-number-from-9-0-to-8-2-tt5748702.html&lt;br /&gt;
&lt;br /&gt;
At first, this VTK commit and its companion [https://github.com/Kitware/VTK/commit/8a00b357e84eec695bda049216f30f2b76d80855 kitware/VTK@8a00b357e] were both reverted from the [https://github.com/Slicer/VTK/ Slicer/VTK] fork. Then, since having the corresponding changes reverted in VTK was not possible, it was decided to also update Slicer. This was done in the following commits:&lt;br /&gt;
* [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=27472 r27472]: COMP: Update c++ classes to support building against VTK &amp;gt;= 9 and VTK &amp;gt;= 8.2&lt;br /&gt;
* [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=27473 r27473]: COMP: Update VTK to include version change from 9.0 to 8.2. Fixes #4623&lt;br /&gt;
&lt;br /&gt;
This means that code depending on VTK must also be updated to include similar fixes.&lt;br /&gt;
&lt;br /&gt;
'''Replace this:'''&lt;br /&gt;
  #if VTK_MAJOR_VERSION &amp;gt;= 9&lt;br /&gt;
&lt;br /&gt;
'''By this:'''&lt;br /&gt;
  #if VTK_MAJOR_VERSION &amp;gt;= 9 || (VTK_MAJOR_VERSION &amp;gt;= 8 &amp;amp;&amp;amp; VTK_MINOR_VERSION &amp;gt;= 2)&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
'''Replace this:'''&lt;br /&gt;
  #if VTK_MAJOR_VERSION &amp;lt; 9&lt;br /&gt;
&lt;br /&gt;
'''By this:'''&lt;br /&gt;
  #if VTK_MAJOR_VERSION &amp;lt;= 7 || (VTK_MAJOR_VERSION &amp;lt;= 8 &amp;amp;&amp;amp; VTK_MINOR_VERSION &amp;lt;= 1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.9: ITK_LEGACY_REMOVE is now OFF ===&lt;br /&gt;
In preparation to switch to ITK 5.0, we disable legacy functionality in ITK. This might affect some modules which rely on ITK. Take a look at [https://itk.org/migrationv4 ITK 4 migration guide] before [https://github.com/InsightSoftwareConsortium/ITK/blob/master/Documentation/ITK5MigrationGuide.md ITK 5 migration guide].&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.9: vtkMRMLPlotDataNode renamed to vtkMRMLPlotSeriesNode ===&lt;br /&gt;
Plotting was improved in [https://github.com/Slicer/Slicer/commit/082edc40c this commit]&lt;br /&gt;
&lt;br /&gt;
'''Replace this:'''&lt;br /&gt;
&lt;br /&gt;
  vtkMRMLPlotDataNode&lt;br /&gt;
&lt;br /&gt;
'''By this:'''&lt;br /&gt;
  vtkMRMLPlotSeriesNode&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.9: CMake: Module MIDAS not available  ===&lt;br /&gt;
&lt;br /&gt;
The test infrastructure of your project should be updated to use [https://cmake.org/cmake/help/latest/module/ExternalData.html ExternalData] built-in CMake module&lt;br /&gt;
instead of the specific &amp;lt;tt&amp;gt;MIDAS&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
See EMSegment commit [http://viewvc.slicer.org/viewvc.cgi/Slicer3?view=revision&amp;amp;revision=17150 r17150] for an example of transition.&lt;br /&gt;
&lt;br /&gt;
This means that instead of using &amp;lt;tt&amp;gt;midas_add_test&amp;lt;/tt&amp;gt; with the &amp;lt;tt&amp;gt;MIDAS{path/to/file.ext.md5}&amp;lt;/tt&amp;gt;&lt;br /&gt;
syntax for addressing the test data, the function [https://cmake.org/cmake/help/latest/module/ExternalData.html#command:externaldata_add_test ExternalData_add_target] is used by&lt;br /&gt;
specifying both &amp;lt;tt&amp;gt;DATA{path/to/file.ext}&amp;lt;/tt&amp;gt; and a download target name.&lt;br /&gt;
&lt;br /&gt;
'''Replace this:'''&lt;br /&gt;
&lt;br /&gt;
  midas_add_test(NAME test1 COMMAND ...)&lt;br /&gt;
  midas_add_test(NAME test2 COMMAND ...)&lt;br /&gt;
&lt;br /&gt;
'''By this:'''&lt;br /&gt;
&lt;br /&gt;
  ExternalData_add_test(EMSegmentData NAME test1 COMMAND ...)&lt;br /&gt;
  ExternalData_add_test(EMSegmentData NAME test2 COMMAND ...)&lt;br /&gt;
  &lt;br /&gt;
  [...]&lt;br /&gt;
  &lt;br /&gt;
  ExternalData_add_target(EMSegmentData)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A key difference with the former approaches is that instead of adding two tests (one named&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;testName&amp;gt;_fetchData&amp;lt;/tt&amp;gt; to downoad the data and one running the test command), only one&lt;br /&gt;
test is added but a common download target is added at the end using [https://cmake.org/cmake/help/latest/module/ExternalData.html#command:externaldata_add_target ExternalData_add_target]&lt;br /&gt;
function.&lt;br /&gt;
&lt;br /&gt;
This means that test data can now be downloaded in parallel (and cached) at build time instead&lt;br /&gt;
of testing time.&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.9: CMake: Module SlicerMacroCheckExternalProjectDependency not available ===&lt;br /&gt;
&lt;br /&gt;
Since the module was removed in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=26992 r26992], consider updating&lt;br /&gt;
your build system to use CMake module &amp;lt;code&amp;gt;ExternalProjectDependency&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.9: CMake: Module SlicerMacroEmptyExternalProject not available ===&lt;br /&gt;
&lt;br /&gt;
Since the module was removed in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=26991 r26991]&lt;br /&gt;
&lt;br /&gt;
'''Replace this:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include(SlicerMacroEmptyExternalProject)&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
SlicerMacroEmptyExternalProject(&amp;quot;${proj}&amp;quot; &amp;quot;${${proj}_DEPENDENCIES}&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''By this:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include(ExternalProjectDependency)&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
ExternalProject_Add_Empty(${proj} DEPENDS ${${proj}_DEPENDENCIES})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.9: CMake: Module SlicerBlockSetCMakeOSXVariables not available ===&lt;br /&gt;
&lt;br /&gt;
Since it was renamed to &amp;lt;tt&amp;gt;SlicerInitializeOSXVariables&amp;lt;/tt&amp;gt; in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=26982 r26982]&lt;br /&gt;
&lt;br /&gt;
'''Replace this:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include(SlicerBlockSetCMakeOSXVariables)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''By this:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include(SlicerInitializeOSXVariables)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.9: Application: isRelease() function not available ===&lt;br /&gt;
&lt;br /&gt;
See [[#Slicer_4.8:_Application:_isRelease.28.29_function_not_available_or_deprecated]]&lt;br /&gt;
&lt;br /&gt;
=== Slicer 4.9: slicer.util.getNode() raises exception if node not found ===&lt;br /&gt;
&lt;br /&gt;
If slicer.util.getNode() is called and the node is not found then instead of just returning None (Slicer 4.8 behavior), the method now raises a MRMLNodeNotFoundException. This makes code debugging easier (the error is reported when it happens), and in general more consistent with Python conventions.&lt;br /&gt;
&lt;br /&gt;
How to update existing code:&lt;br /&gt;
&lt;br /&gt;
It is advisable to only use slicer.util.getNode in tests, or interactively in the Python console, as its behavior is somewhat unpredictable (it may either found a node by name or ID, and result of wildcard search is even less deterministic). In general, it is recommended to use the MRML scene's GetFirstNodeByName and GetNodeByID methods instead.&lt;br /&gt;
&lt;br /&gt;
'''Replace this:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = slicer.util.getNode(nodeNameOrID)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''By one of these:'''&lt;br /&gt;
&lt;br /&gt;
If node is to be found by name:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  n = slicer.mrmlScene.GetFirstNodeByName(nodeName)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If node is to be found by ID:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  n = slicer.mrmlScene.GetNodeByID(nodeID)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If node is to be found by name or ID (slower, less predictable, recommended for testing only):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
  n = slicer.util.getNode(nodeNameOrID)&lt;br /&gt;
except slicer.util.MRMLNodeNotFoundException:&lt;br /&gt;
  n = None&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More information: https://github.com/Slicer/Slicer/commit/b63484af1b1b413f35396f8f7efb73e870448bd4&lt;br /&gt;
&lt;br /&gt;
===Slicer 4.8: Application: isRelease() function not available or deprecated===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Error message similar to:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    Missing/deprecated qSlicerCoreApplication::isRelease()&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
    Missing/deprecated slicer.app.isRelease()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;tt&amp;gt;qSlicerCoreApplication::releaseType() == &amp;quot;Stable&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Summary:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to r26420, the variable &amp;lt;tt&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/tt&amp;gt; was used to check if a &amp;quot;stable release&amp;quot; was built. The variable value&lt;br /&gt;
was set by updating the sources and defining the variable to an integer greater or equal to 0. In other word, if the variable&lt;br /&gt;
evaluated to an empty string, a nighty or experimental build was being done, if it evaluated to an integer, a stable release build&lt;br /&gt;
was being done.&lt;br /&gt;
&lt;br /&gt;
The approach had few issues:&lt;br /&gt;
* the name of the variable was confusing&lt;br /&gt;
* identifying a &amp;quot;stable release&amp;quot; only from a source tree revision was not enough. Indeed the environment defining a &amp;quot;release&amp;quot; is the one found on the build machines used to generate the installer.&lt;br /&gt;
* nightly build are also considered as release&lt;br /&gt;
&lt;br /&gt;
To address this, the CMake variable &amp;lt;tt&amp;gt;Slicer_RELEASE_TYPE&amp;lt;/tt&amp;gt; was introduced. As of 2017-10-04, it can be set to &amp;lt;tt&amp;gt;Experimental&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Nightly&amp;lt;/tt&amp;gt;&lt;br /&gt;
or &amp;lt;tt&amp;gt;Stable&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;Experimental&amp;lt;/tt&amp;gt; being the value hard-coded in the source.&lt;br /&gt;
&lt;br /&gt;
Identifying a build as &amp;quot;stable&amp;quot; is now explicitly done by setting &amp;lt;tt&amp;gt;Slicer_RELEASE_TYPE&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;Stable&amp;lt;/tt&amp;gt; at configure time.&lt;br /&gt;
&lt;br /&gt;
Also, since the concept of release types was introduced, the function &amp;lt;tt&amp;gt;isRelease()&amp;lt;/tt&amp;gt; has been removed in favor of &amp;lt;tt&amp;gt;releaseType()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;References:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://github.com/Slicer/Slicer/pull/354&lt;br /&gt;
&lt;br /&gt;
===Slicer Python Module: modulewidget and others removed.===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Summary&amp;lt;/b&amp;gt;&lt;br /&gt;
Python classes formerly in &amp;quot;slicer.moduledm&amp;quot;, &amp;quot;slicer.modulelogic&amp;quot;,  &amp;quot;slicer.modulemrml&amp;quot;&lt;br /&gt;
and &amp;quot;slicer.modulewidget&amp;quot; are now directly available in the slicer module.&lt;br /&gt;
&lt;br /&gt;
See example of change [https://github.com/QIICR/LongitudinalPETCT/pull/11 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Rational:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See comments in commit messages referenced blow.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;References:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://github.com/Slicer/Slicer/commit/628f83fe7a6f4e0710e306bcaf7c04b9e3e5e6bd&lt;br /&gt;
&lt;br /&gt;
https://github.com/Slicer/Slicer/commit/9cb5668fde1abc8f0430a91ca37fc29277ceeb4e&lt;br /&gt;
&lt;br /&gt;
===MRML: Slicer 4.6: Moved up vtkMRMLStorableNode in the MRML node hierarchy.===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Rational:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vtkMRMLStorableNode is not a children of vtkMRMLTransformable node anymore,&lt;br /&gt;
but directly a children of vtkMRMLNode.&lt;br /&gt;
    &lt;br /&gt;
This allows making a node storable without requiring it to be also&lt;br /&gt;
transformable. It is important for several node types (color maps, tables,&lt;br /&gt;
etc), which require separate storage node but are not transformable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;References:&amp;lt;/b&amp;gt;&lt;br /&gt;
* Changed introduced in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=24891 r24891]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Error message similar to:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    /tmp/LongitudinalPETCT/MRML/vtkMRMLLongitudinalPETCTStudyNode.cxx: In member function ‘void vtkMRMLLongitudinalPETCTStudyNode::ObserveRegistrationTransform(bool)’:&lt;br /&gt;
    /tmp/LongitudinalPETCT/MRML/vtkMRMLLongitudinalPETCTStudyNode.cxx:478:28: error: ‘class vtkMRMLVolumePropertyNode’ has no member named ‘GetParentTransformNode’&lt;br /&gt;
                   &amp;amp;&amp;amp; propNode-&amp;gt;GetParentTransformNode()&lt;br /&gt;
                                ^&lt;br /&gt;
    /tmp/LongitudinalPETCT/MRML/vtkMRMLLongitudinalPETCTStudyNode.cxx:480:23: error: ‘class vtkMRMLVolumePropertyNode’ has no member named ‘SetAndObserveTransformNodeID’&lt;br /&gt;
                 propNode-&amp;gt;SetAndObserveTransformNodeID(&lt;br /&gt;
                           ^&lt;br /&gt;
    /tmp/LongitudinalPETCT/MRML/vtkMRMLLongitudinalPETCTStudyNode.cxx:503:23: error: ‘class vtkMRMLVolumePropertyNode’ has no member named ‘SetAndObserveTransformNodeID’&lt;br /&gt;
                 propNode-&amp;gt;SetAndObserveTransformNodeID(NULL);&lt;br /&gt;
                           ^&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes lines and/or refactor code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MRML: Slicer 4.5: Introduction of vtkMRMLLabelMapVolumeNode===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Rational:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before &amp;lt;tt&amp;gt;vtkMRMLScalarVolumeNode&amp;lt;/tt&amp;gt; was used for both scalar and label map&lt;br /&gt;
volumes and the LabelMap custom MRML node attribute was used for&lt;br /&gt;
distinguishing between them (0=scalar; 1=label map volume).&lt;br /&gt;
&lt;br /&gt;
This made conversion between labelmap/scalar volumes very easy but made&lt;br /&gt;
it difficult to customize behavior, display, processing of segmentation&lt;br /&gt;
information.&lt;br /&gt;
&lt;br /&gt;
Now a new &amp;lt;tt&amp;gt;vtkMRMLLabelMapVolumeNode&amp;lt;/tt&amp;gt; class is used for storing segmentation&lt;br /&gt;
information (still using &amp;lt;tt&amp;gt;vtkMRMLScalarVolume&amp;lt;/tt&amp;gt; used as base class for backward&lt;br /&gt;
compatibility; but in the future the base class may be changed to reflect&lt;br /&gt;
that segmentation can be represented in various ways, not just as volumes).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Error message similar to:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  error: ‘class vtkMRMLScalarVolumeNode’ has no member named ‘SetLabelMap’&lt;br /&gt;
     outputVolumeNode-&amp;gt;SetLabelMap(1);&lt;br /&gt;
                       ^&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution (part1: down cast to &amp;lt;tt&amp;gt;vtkMRMLLabelMapVolumeNode&amp;lt;/tt&amp;gt;, remove call to &amp;lt;tt&amp;gt;SetLabelMap&amp;lt;/tt&amp;gt;)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace lines like:&lt;br /&gt;
&lt;br /&gt;
     vtkMRMLNode* outputNode = d-&amp;gt;OutputLabelVolumeMRMLNodeComboBox-&amp;gt;currentNode();&lt;br /&gt;
     vtkMRMLScalarVolumeNode* outputVolumeNode = vtkMRMLScalarVolumeNode::SafeDownCast(outputNode);&lt;br /&gt;
     [...]&lt;br /&gt;
     outputVolumeNode-&amp;gt;SetLabelMap(1);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
     vtkMRMLLabelMapVolumeNode* outputVolumeNode =&lt;br /&gt;
       vtkMRMLLabelMapVolumeNode::SafeDownCast(d-&amp;gt;OutputLabelVolumeMRMLNodeComboBox-&amp;gt;currentNode());&lt;br /&gt;
     [...]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution (part2: Update UI file):&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace lines like:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;widget class=&amp;quot;qMRMLNodeComboBox&amp;quot; name=&amp;quot;InputLabelVolumeMRMLNodeComboBox&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;property name=&amp;quot;nodeTypes&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;stringlist&amp;gt;&lt;br /&gt;
     &amp;lt;string&amp;gt;vtkMRMLScalarVolumeNode&amp;lt;/string&amp;gt;&lt;br /&gt;
    &amp;lt;/stringlist&amp;gt;&lt;br /&gt;
   &amp;lt;/property&amp;gt;&lt;br /&gt;
   [...]&lt;br /&gt;
  &amp;lt;/widget&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;widget class=&amp;quot;qMRMLNodeComboBox&amp;quot; name=&amp;quot;InputLabelVolumeMRMLNodeComboBox&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;property name=&amp;quot;nodeTypes&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;stringlist&amp;gt;&lt;br /&gt;
     &amp;lt;string&amp;gt;vtkMRMLLabelMapVolumeNode&amp;lt;/string&amp;gt;      &amp;lt;------------- Update Here&lt;br /&gt;
    &amp;lt;/stringlist&amp;gt;&lt;br /&gt;
   &amp;lt;/property&amp;gt;&lt;br /&gt;
   [...]&lt;br /&gt;
  &amp;lt;/widget&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution (part3: Update node selector configuration):&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace lines like:&lt;br /&gt;
&lt;br /&gt;
  nodeSelector.setNodeTypes(QStringList(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;));&lt;br /&gt;
  nodeSelector.addAttribute(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;, &amp;quot;LabelMap&amp;quot;, &amp;quot;1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
  nodeSelector.setNodeTypes(QStringList(&amp;quot;vtkMRMLLabelMapVolumeNode&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;References:&amp;lt;/b&amp;gt;&lt;br /&gt;
* https://www.slicer.org/wiki/Documentation/Labs/Segmentations#vtkMRMLLabelMapVolumeNode_integration* http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=24291&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CLI: Slicer 4.3: Add ITKFactoryRegistration library centralizing ITK IO factory registration===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Rational:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Linking against &amp;lt;tt&amp;gt;ITKFactoryRegistration&amp;lt;/tt&amp;gt; ensures that ITK IO factory are properly registered on all supported platforms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Error message similar to:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Undefined symbols for architecture x86_64:&lt;br /&gt;
  &amp;quot;itk::itkFactoryRegistration()&amp;quot;, referenced from:&lt;br /&gt;
  _main in ImageMakerTest.cxx.o&lt;br /&gt;
  ld: symbol(s) not found for architecture x86_64&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace lines like:&lt;br /&gt;
&lt;br /&gt;
  target_link_libraries(${CLP}Test ${CLP}Lib)&lt;br /&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
  target_link_libraries(${CLP}Test ${CLP}Lib ${SlicerExecutionModel_EXTRA_EXECUTABLE_TARGET_LIBRARIES})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;References:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21592&lt;br /&gt;
* https://issues.slicer.org/view.php?id=2813&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Modules:Volumes:Diffusion_Editor-Documentation-3.4&amp;diff=62690</id>
		<title>Modules:Volumes:Diffusion Editor-Documentation-3.4</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Modules:Volumes:Diffusion_Editor-Documentation-3.4&amp;diff=62690"/>
		<updated>2019-11-27T14:53:55Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation-3.4|Return to Slicer 3.4 Documentation]]&lt;br /&gt;
&lt;br /&gt;
[[Announcements:Slicer3.4#Highlights|Gallery of New Features]]&lt;br /&gt;
&lt;br /&gt;
=Diffusion Editor=&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:DiffusionEditor helix.jpg|thumb|250px|Diffusion Editor, showing tracts and glyphs on helix example]]&lt;br /&gt;
|[[Image:Tracts_glyphs.jpg|thumb|250px|tracts and glyphs view]]&lt;br /&gt;
|[[Image:Tracts_glyphs_90degrees.jpg|thumb|250px|tracts and glyphs view - +90° rotation of measurement frame]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= General Information =&lt;br /&gt;
==Module Type &amp;amp; Category==&lt;br /&gt;
&lt;br /&gt;
Type: Interactive&lt;br /&gt;
&lt;br /&gt;
Category: Diffusion Imaging&lt;br /&gt;
&lt;br /&gt;
==Authors, Collaborators &amp;amp; Contact==&lt;br /&gt;
* Author: Kerstin Kessel&lt;br /&gt;
* Supervisor: Steve Pieper, Ron Kikinis&lt;br /&gt;
&lt;br /&gt;
==Module Description==&lt;br /&gt;
As the documentation of acquisition parameters in dicom data is not standardized, MRI scanners (Siemens, GE) handle gradients/bValues/measurement frame differently in their dicom headers. Because of that there is a big need to add/modify them manually.&lt;br /&gt;
&lt;br /&gt;
The Diffusion Editor is a 3D Slicer module, which allows modifying parameters (gradients, bValues, measurement frame) of DWI data and provides a quick way to interpret them. For that it estimates a tensor and shows glyphs and tracts for visual exploration. &lt;br /&gt;
&lt;br /&gt;
=== Measurement Frame ===&lt;br /&gt;
The measurement frame of all DWI is always displayed in the RAS space. That's because Slicer stores all internal coordinates in RAS. &lt;br /&gt;
&lt;br /&gt;
If you save changes in a new .nhdr file the measurement frame will always be in RAS.&lt;br /&gt;
&lt;br /&gt;
=== Used Tensor Estimation === &lt;br /&gt;
The Diffusion Editor uses the Tensor Estimation CLM (Command Line Module) of Slicer to compute tensors. &lt;br /&gt;
* The module provides the linear-least-squares, non-linear-least squares and weighted-least-square method for the estimation. But the DiffusionEditor uses the linear-least-squares method by default, as it is the fastest and most robust.&lt;br /&gt;
* See [[Slicer3:DTMRI#Tensor_Estimation_from_DWI_Module],|[http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:TeemExamples#tend_estim:_tensor_estimation]] for more information on the Tensor Estimation CLM.&lt;br /&gt;
&lt;br /&gt;
The testing frame provides just a small subset of DTI display options. For more detailed settings&lt;br /&gt;
* load the DTI as the active volume in the volumes modul&lt;br /&gt;
* go to the display frame and adjust parameters.&lt;br /&gt;
&lt;br /&gt;
=== Used Tractography Fiducial Seeding === &lt;br /&gt;
The Diffusion Editor uses the Tractography Fiducial Seeding module of Slicer to compute tracts.&lt;br /&gt;
* The Diffusion Editor uses the default parameters. To change tractography parameters select the modul: Tractography/Seeding/Fiducial Seeding [[Slicer3:DTMRI#Tractography_Fiducial_Seeding_Module].|Changes there have an immediate impact for the tracts in the Diffusion Editor.&lt;br /&gt;
* For more detailed exploring of tracts use the Fiducial Seeding module or for display options select the module Tractography/DisplayLoadSave [https://www.slicer.org/wiki/Slicer3:DTMRI#Tractography_Module]].* See [[Slicer3:DTMRI#Tractography_Module|here]] for more information on the Tractography modules.&lt;br /&gt;
&lt;br /&gt;
=== Current features of the Diffusion Editor=== &lt;br /&gt;
For DWI&lt;br /&gt;
* Edit gradients manually or load existing gradients from file (.txt or .nhdr).&lt;br /&gt;
* Edit the [[Modules:Volumes:Diffusion_Editor-Documentation-3.2#Measurement_Frame| measurement frame]] manually or simply rotate/swap/invert columns by selecting them. &lt;br /&gt;
* Test the parameters by estimating a tensor and displaying glyphs and tracts.&lt;br /&gt;
For DTI&lt;br /&gt;
* Edit the measurement frame as described above.  &lt;br /&gt;
* Test by displaying glyphs and tracts.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
==Examples &amp;amp; Tutorials==&lt;br /&gt;
&lt;br /&gt;
=== Preparation ===&lt;br /&gt;
&lt;br /&gt;
* Download Slicer. The most recent stable Slicer version can be found [http://www.slicer.org/pages/Downloads here]. Or load Slicer's latest snapshot.&lt;br /&gt;
* You can also use SVN to checkout the trunk of the current version of Slicer. See [[Slicer3:Build_Instructions| here]] for more instructions on how to build Slicer.&lt;br /&gt;
* Download example data: [[ media:DiffusionEditor_ExampleData.zip | DiffusionEditor_ExampleData.zip ]] and unzip it.&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
To start a tutorial video simply click on the link in the table.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#abcdef&amp;quot;&lt;br /&gt;
! title !!short description&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Load DWI-Dicom| Load DICOM]]  ||Load a DWI dicom data set in Slicer.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Edit Gradients | Edit gradients ]]||Change gradients manually and load them from a file. Save your changes afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Edit Measurement frame| Edit measurement frame]] ||Change the measurement frame by swapping and inverting. Save your changes afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Testing | Testing ]]||Run tensor estimation and show glyphs and tracts; &lt;br /&gt;
Run second estimation with 90°rotation and switch between both tensors and see the impact of that change.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quick Tour of Features and Use==&lt;br /&gt;
&lt;br /&gt;
[[Image:DiffusionEditor_v8.jpg|right|overview]]&lt;br /&gt;
&lt;br /&gt;
* '''Measurement frame:'''&lt;br /&gt;
&lt;br /&gt;
# The determinant of the measurement frame has to be 1. This is checked by the editor.&lt;br /&gt;
# '''Invert''': Select the columns you want to invert.&lt;br /&gt;
# '''Swap''': Select two columns you want to swap.&lt;br /&gt;
# '''Rotate''': Select one column you want to rotate by an angle you can choose from a given set of values or set yourself.&lt;br /&gt;
# '''Identity''': Set the measurement frame to the identity matrix.&lt;br /&gt;
# Set your own values.&lt;br /&gt;
&lt;br /&gt;
* '''Gradients frame:'''&lt;br /&gt;
# If the active volume is a DWI the editor will put the gradients in the text field; otherwise this frame is disabled.&lt;br /&gt;
# You can copy/paste your own gradients in the text field or change them manually.&lt;br /&gt;
# You can load gradients from a text file or .nhdr file. For the .txt file the format of gradients is easy, it can contain only values ([[ media:DiffusionEditor_ExampleData.zip | see example data ]]).&lt;br /&gt;
&lt;br /&gt;
* '''Undo/Redo/Restore:'''&lt;br /&gt;
#'''Undo''': Undo the last change of measurement/gradient values.&lt;br /&gt;
#'''Redo''': Redo the last change of measurement/gradient values.&lt;br /&gt;
#'''Restore''': All parameters are restored to original.&lt;br /&gt;
&amp;lt;font color=&amp;quot;Red&amp;quot;&amp;gt;NOTE:&amp;lt;/font&amp;gt; You lose all previous changes when a new active volume is loaded or selected.&lt;br /&gt;
&lt;br /&gt;
* '''Testing frame:'''&lt;br /&gt;
# '''Run''' tensor estimation. The new tensor node shows up in the DTI selector.&lt;br /&gt;
# Select a DTI node from the current mrml scene and for&lt;br /&gt;
## Glyph visibility: Select the planes on which you want to see glyphs and adjust the glyph spacing.&lt;br /&gt;
## Tract visibility: Add some fiducials and choose the fiducial list in the selector. Show tracts with Tractography Fiducial Seeding.&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
&lt;br /&gt;
== Status / Implementation Progress ==&lt;br /&gt;
The editor is now successfully integrated in the Volumes module of the trunk version of Slicer3.&lt;br /&gt;
*measurement frame (gui/load/change/save): 100%&lt;br /&gt;
*gradients (gui/load/change/save): 100%&lt;br /&gt;
*undo/redo/restore mechanism: 100%&lt;br /&gt;
*testing frame: 100%&lt;br /&gt;
** tensor estimation for DWI with existing clm: 100%&lt;br /&gt;
** glyphs view in all three planes with the possibility to change spacing: 100%&lt;br /&gt;
** tractography fiducial seeding: 100%&lt;br /&gt;
*ctest: 100%&lt;br /&gt;
*documentation, tutorials (videos): 100%&lt;br /&gt;
*writing master thesis: 60% :-)&lt;br /&gt;
&lt;br /&gt;
== Known issues / bugs ==&lt;br /&gt;
&lt;br /&gt;
Follow this link to the Slicer3 bug tracker to see known bugs, or to report a new one. Please select the '''usability issue category''' when browsing or contributing:&lt;br /&gt;
&lt;br /&gt;
http://na-mic.org/Mantis/main_page.php&lt;br /&gt;
&lt;br /&gt;
Queries, feature requests and other feedback should be directed to slicer-devel |at| bwh.harvard.edu. You can also sign up for Slicers user and developer list to make sure you hear of new developments, releases and bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Issues ===&lt;br /&gt;
* Changing the measurement frame of a DTI has no impact. The tensor is not estimated again. &lt;br /&gt;
** Future work: Adding new rotation filter for tensors (contributed by Raul San Jose)&lt;br /&gt;
* Multiple bValues are not displayed. Currently to describe acquisitions with different b-values the magnitudes of the gradients are changed. See the nrrd format page about [http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:Nrrd_format#Describing_DWIs_with_differen_b-values describing DWIs with different b-values].&lt;br /&gt;
** Future work: Adding different views of gradients/bValues.&lt;br /&gt;
* Checking gradients when one types new values in the textbox is slowly. Reason: SetDiffusionGradients of the vtkMRMLDiffusionWeightedVolumeNode seems to trigger many events.&lt;br /&gt;
** Future work: Use [[Slicer3:EventBroker|Eventbroker]] for performance analysis and if necessary turn off events.&lt;br /&gt;
&lt;br /&gt;
== Source code &amp;amp; documentation ==&lt;br /&gt;
&lt;br /&gt;
Source code is available here:&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorWidget.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorLogic.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorLogic.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerMeasurementFrameWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerMeasurementFrameWidget.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerGradientsWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerGradientsWidget.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionTestingWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionTestingWidget.h&lt;br /&gt;
&lt;br /&gt;
Links to documentation generated by doxygen:&lt;br /&gt;
&lt;br /&gt;
http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/&lt;br /&gt;
&lt;br /&gt;
= More Information =&lt;br /&gt;
&lt;br /&gt;
== Acknowledgement ==&lt;br /&gt;
This research project was part of a Master thesis (Diplomarbeit) in cooperation of the faculty of Medical Informatics, University of Heidelberg/Germany and the Surgical Planning Lab. It was supported by a grant of the Lions Club Heilbronn/Franken.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[[Image:Thesis_letter.pdf|Thesis]]&lt;br /&gt;
&lt;br /&gt;
[[Slicer3:DTMRI|DTMRI]]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:Nrrd_format Nrrd format]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:DICOM_for_DWI_and_DTI DICOM for DWI and DTI]&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Modules&amp;diff=62689</id>
		<title>Documentation/Nightly/Developers/Modules</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Modules&amp;diff=62689"/>
		<updated>2019-11-27T14:53:54Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/wiki.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TOC left}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;Slicer supports three types of modules: [[Documentation/{{documentation/version}}/Developers/Modules#Command_Line_Interface_.28CLI.29|Command Line Interface (CLI)]], [[Documentation/{{documentation/version}}/Developers/Modules#Loadable_Modules|Loadable Modules]] and [[Documentation/{{documentation/version}}/Developers/Modules#Scripted_Modules|Scripted Modules]].&lt;br /&gt;
&lt;br /&gt;
While the developer has to choose between one of the three types to implement its module, the end user will &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; notice the difference as they all share the same look &amp;amp; feel. &lt;br /&gt;
&lt;br /&gt;
The choice for a given type of module is usually based on the type of inputs/parameters for a given module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Clear|left}}&lt;br /&gt;
&lt;br /&gt;
= Command Line Interface (CLI) =&lt;br /&gt;
CLIs are standalone executables with a limited input/output arguments complexity (simple argument types, no user interactions...). They are typically implemented using [http://www.itk.org ITK].&lt;br /&gt;
* Shared lib or executable&lt;br /&gt;
* UI automatically generated&lt;br /&gt;
* Where to start ?&lt;br /&gt;
# Create initial skeleton using the [[Documentation/{{documentation/version}}/Developers/ExtensionWizard|Extension Wizard]]&lt;br /&gt;
# Read [[Documentation/{{documentation/version}}/Developers/Build_Module|Compiling slicer modules outside of the slicer source tree.]]&lt;br /&gt;
# Learn from [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Modules/CLI/ existing modules]&lt;br /&gt;
* Links:&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Training#Developing_and_contributing_extensions_for_3D_Slicer|Developing and contributing extensions for 3D Slicer]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Developers/SlicerExecutionModel|Slicer execution model]]&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/File:Slicer4_CLI.ppt CLI in Slicer4] (presentation of 2012 NAMIC AHM)&lt;br /&gt;
&lt;br /&gt;
= Loadable Modules =&lt;br /&gt;
Loadable modules are [http://en.wikipedia.org/wiki/C%2B%2B C++] plugins that are built against Slicer. They define custom GUIs for their specific behavior as they have full control over the application.&lt;br /&gt;
* C++ shared library&lt;br /&gt;
* Full control over the UI (based on [http://qt.nokia.com/products/ Qt]) and Slicer internals (MRML, logics, display managers...)&lt;br /&gt;
* Optimized for heavy computations&lt;br /&gt;
* Where to start ?&lt;br /&gt;
# Create initial skeleton using the [[Documentation/{{documentation/version}}/Developers/ExtensionWizard|Extension Wizard]]&lt;br /&gt;
# Read [[Documentation/{{documentation/version}}/Developers/Build_Module|Compiling slicer modules outside of the slicer source tree.]]&lt;br /&gt;
# Learn from [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Modules/Loadable/ existing modules]&lt;br /&gt;
* Links:&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Training#Developing_and_contributing_extensions_for_3D_Slicer|Developing and contributing extensions for 3D Slicer]]&lt;br /&gt;
**[http://www.na-mic.org/Wiki/index.php/File:LoadableModules.pptx Loadable modules] (presentation of 2012 NAMIC AHM)&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Developers/Tutorials/CreateLoadableModule|How to write a loadable module]]&lt;br /&gt;
&lt;br /&gt;
= Scripted Modules =&lt;br /&gt;
Scripted modules are written in [http://www.python.org/ Python]. &lt;br /&gt;
&lt;br /&gt;
An extensive tutorial and reference page was created [http://www.na-mic.org/Wiki/index.php/2013_Project_Week_Breakout_Session:Slicer4Python for the Slicer/Python breakout session at the NA-MIC 2014 Summer Project Week].  Please read through this and many of your questions will be answered.&lt;br /&gt;
&lt;br /&gt;
Several tutorials for developers are available from the Slicer Training page: https://www.slicer.org/wiki/Documentation/Nightly/Training#Tutorials_for_software_developers  &lt;br /&gt;
* Python Console&lt;br /&gt;
* Full access to the API: [http://www.vtk.org VTK], [http://qt.nokia.com/products/ Qt], [http://slicer.org/doc/html/annotated.html MRML and Slicer],[http://www.itk.org/SimpleITKDoxygen/html/classes.html SimpleITK] are fully wrapped&lt;br /&gt;
* Recommended for fast prototyping and custom workflow development&lt;br /&gt;
* Where to start?&lt;br /&gt;
# Read the [http://www.na-mic.org/Wiki/index.php/2013_Project_Week_Breakout_Session:Slicer4Python  Slicer/Python breakout session at the NA-MIC 2014 Summer Project Week] tutorial.&lt;br /&gt;
# Create initial skeleton using the [[Documentation/{{documentation/version}}/Developers/ExtensionWizard|Extension Wizard]]&lt;br /&gt;
# [[Media:SlicerModulesProgrammingBeyondBasics.pdf|Python scripted module design - beyond basics]]: role of widget, logic, MRML classes, using MRML node for storing module parameters, etc. (editable version: [[File:SlicerModulesProgrammingBeyondBasics.pptx]])&lt;br /&gt;
# Learn from [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Modules/Scripted/ existing modules]&lt;br /&gt;
* More information:&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Training#Developing_and_contributing_extensions_for_3D_Slicer|Developing and contributing extensions for 3D Slicer]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Developers/Python_scripting|Python Scripting]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Training#Slicer4_Programming_Tutorial|Python Scripting Tutorial]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/ScriptRepository|Community contributed examples]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Developers/Slicelets|Developing slicelets: standalone applications with simplified, fully customized user interface]]&lt;br /&gt;
&lt;br /&gt;
=Module Factory=&lt;br /&gt;
Loading modules into slicer happens in multiple steps:&lt;br /&gt;
*module factories must be registered into the factory manager&lt;br /&gt;
* directories where the modules to load are located must be passed to the factory manager&lt;br /&gt;
* Optionally specify module names to ignore&lt;br /&gt;
* scan the directories and test which file is a module and register it (not instantiated yet) &lt;br /&gt;
* Instantiate all the register modules&lt;br /&gt;
* Connect each module with the scene and the application&lt;br /&gt;
More details can be found in the [http://slicer.org/doc/html/classqSlicerAbstractModuleFactoryManager.html online doc]&lt;br /&gt;
&lt;br /&gt;
=Association of MRML nodes to modules=&lt;br /&gt;
&lt;br /&gt;
Modules can be associated with MRML nodes, which for example allows determining what module can be used to edit a certain MRML node. A module can either specify the list of node types that it supports by overriding [https://www.slicer.org/doc/html/classqSlicerAbstractCoreModule.html#a932cfab8cb00c2e770b95a97fce92670 qSlicerAbstractCoreModule::associatedNodeTypes()] method or a module can call [https://www.slicer.org/doc/html/classqSlicerCoreApplication.html#a748d8b0ab3914bded820337534a1aa76 qSlicerCoreApplication::addModuleAssociatedNodeTypes()] to associate any node type with any module.&lt;br /&gt;
&lt;br /&gt;
Multiple modules can be associated with the same MRML node type. The best module for editing a specific node instance is determined run-time. The application framework calls [https://www.slicer.org/doc/html/classqSlicerAbstractModuleWidget.html#a8e1bdbc248688677af5cd91f0849d44e qSlicerAbstractModuleWidget::nodeEditable()] for each associated module candidate and will activate the one that has the highest confidence in handling the node.&lt;br /&gt;
&lt;br /&gt;
To select a MRML node as the &amp;quot;active&amp;quot; or &amp;quot;edited&amp;quot; node in a module the module widget's [https://www.slicer.org/doc/html/classqSlicerAbstractModuleRepresentation.html#adfd05c2484d8cab8e3e9cda09e45d227 qSlicerAbstractModuleWidget::setEditedNode()] method is called.&lt;br /&gt;
&lt;br /&gt;
=ToDo - Planned developments=&lt;br /&gt;
* Transform all core modules into Loadable modules.&lt;br /&gt;
** the factory manager only support file based modules, core modules are not file based (linked into the core factory itself)&lt;br /&gt;
* Move factory registration in qSlicerApplication (or a general application library) to support module discovery/loading without needing to instantiate Slicer.&lt;br /&gt;
** Currently can't be moved into qSlicerApplication as the CLI factories that are in QTCLI depend on QTGUI&lt;br /&gt;
** QtTesting is also limited with the QTCLI dependency on QtGUI (-&amp;gt;qSlicerApplication would need to access QtTesting code from QtCli)&lt;br /&gt;
** Proposed architecture&lt;br /&gt;
 Base&lt;br /&gt;
   Application -&amp;gt; classes that are useful to build an application (mix of qSlicerCoreApplication, qSlicerApplication, Main.cxx...)&lt;br /&gt;
   Core -&amp;gt; formally QtCore&lt;br /&gt;
   Modules -&amp;gt; contains the factories and module specific code&lt;br /&gt;
      Loadable&lt;br /&gt;
      CLI&lt;br /&gt;
      Scripted&lt;br /&gt;
   Scripted -&amp;gt; all that is python specific&lt;br /&gt;
      Cxx&lt;br /&gt;
      Python&lt;br /&gt;
   Widgets -&amp;gt; formally QtGUI&lt;br /&gt;
* Add category hierarchy in the Settings module panel&lt;br /&gt;
* Register factory settings/command-options(e.g. disable-loadable-modules) when registering module factories&lt;br /&gt;
** To have the settings panel be generic but have the code proper of each registered factory somewhere else&lt;br /&gt;
* Add mechanism for modules to register dialogs (toolbars that open dialogs),  e.g. the sceneview module needs to register the sceneView dialog into an icon.&lt;br /&gt;
* &amp;lt;s&amp;gt;Ignore modules from the launcher command line.&amp;lt;/s&amp;gt; {{done}}&lt;br /&gt;
* cloning&amp;quot; of module panels at run time. See [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2012/008965.html &amp;quot;here] and [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2012/008039.html here]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Training&amp;diff=62688</id>
		<title>Training</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Training&amp;diff=62688"/>
		<updated>2019-11-27T14:53:53Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;20&amp;quot;&lt;br /&gt;
|+ &amp;lt;font color=&amp;quot;#444&amp;quot;&amp;gt;This page contains pointers to the different versions of the Slicer training portfolios. Each portfolio includes a series of tutorials and pre-computed datasets.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''[[Documentation/4.8/Training|Slicer 4.8]] ::[[Documentation/4.6/Training|Slicer 4.6]] ::[[Documentation/4.5/Training|Slicer 4.5]] ::[[Documentation/4.4/Training|Slicer 4.4]] ::[[Documentation/4.3/Training|Slicer 4.3]] :: [[Documentation/4.2/Training|Slicer 4.2]] :: [[Slicer_3.6:Training|Slicer 3.6]] :: [[Slicer3.4:Training|Slicer 3.4]] :: [http://wiki.na-mic.org/Wiki/index.php/Slicer3.2:Training Slicer 3.2] :: [http://wiki.na-mic.org/Wiki/index.php/Slicer:Workshops:User_Training_101 Slicer 2]''' &lt;br /&gt;
|-&lt;br /&gt;
|[[image:Slicer36_compendium.png|link=https://www.slicer.org/wiki/Slicer3.6:Training]]|}&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.6/Training&amp;diff=62687</id>
		<title>Documentation/4.6/Training</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.6/Training&amp;diff=62687"/>
		<updated>2019-11-27T14:53:50Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/wiki.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;
=Introduction: Slicer {{documentation/version}} Tutorials=&lt;br /&gt;
&lt;br /&gt;
*The 3D Slicer compendium is a collection of hands-on tutorials with anonymized sample data sets. The tutorials demonstrate how to use the 3D Slicer software platform (version {{documentation/version}} release) to accomplish certain tasks. &lt;br /&gt;
*For tutorials for other versions of Slicer, please visit the [[Training| Slicer training portal]].&lt;br /&gt;
*For &amp;quot;reference manual&amp;quot; style documentation, please visit the [[Documentation/{{documentation/version}}|Slicer {{documentation/version}} documentation page]]&lt;br /&gt;
*Some of these tutorials are based on older releases of 3D Slicer.  The concepts are still useful but bear in mind that some interface elements and features will be different in updated versions.&lt;br /&gt;
*For general questions related to the Slicer4 Training Compendium and to 3D Slicer training events, please send an e-mail to '''[http://www.na-mic.org/Wiki/index.php/User:SPujol Sonia Pujol, Ph.D, Director of Training of 3D Slicer]'''&lt;br /&gt;
__TOC__&lt;br /&gt;
=General Introduction=&lt;br /&gt;
==Slicer Welcome Tutorial==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[media:SlicerWelcome-tutorial_Slicer4.5.pdf|SlicerWelcome tutorial]] is an introduction to Slicer based on the Welcome module.&lt;br /&gt;
*Author: Sonia Pujol, Ph.D.&lt;br /&gt;
*Audience: First time users who want a general introduction to the software.&lt;br /&gt;
*Modules: Welcome to Slicer, Sample Data&lt;br /&gt;
*Based on: 3D Slicer version 4.5&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[image:SlicerWelcome-image.png|250px|SlicerWelcome tutorial]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Slicer4Minute Tutorial==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[media:Slicer4.5minute_SoniaPujol.pdf|Slicer4Minute Tutorial]]  is a brief introduction to the advanced 3D visualization capabilities of Slicer 4.5.&lt;br /&gt;
*Author: Sonia Pujol, Ph.D.&lt;br /&gt;
*Audience: First time users who want to discover Slicer in 4 minutes.&lt;br /&gt;
*Modules: Welcome to Slicer, Models&lt;br /&gt;
*Based on: 3D Slicer version 4.5&lt;br /&gt;
*The [[media:Slicer4minute.zip|Slicer4Minute dataset]] contains an MR scan of the brain and 3D reconstructions of the anatomy&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[image:Slicer4minute-image.png|250px|right|Slicer4Minute tutorial]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Slicer4 Data Loading and 3D Visualization ==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[Media:3DDataLoadingandVisualization_Slicer4.5_SoniaPujol.pdf | Data loading and 3D visualization]] course guides through the basics of loading and viewing volumes and 3D models in Slicer4 . &lt;br /&gt;
*Author: Sonia Pujol, Ph.D.&lt;br /&gt;
*Modules: Welcome to Slicer, Sample Data, Models.&lt;br /&gt;
*Audience: End-users&lt;br /&gt;
*Based on: 3D Slicer version 4.5&lt;br /&gt;
*The [[Media:3DVisualizationData.zip | 3D Visualization dataset]] contain an MR scan and a series of 3D models of the brain.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Slicer4DataLoading_tutorial.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Tutorials for Software Developers=&lt;br /&gt;
&lt;br /&gt;
== Slicer4 Programming Tutorial ==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[Media:Slicer4_ProgrammingTutorial_Slicer4.5.pdf | Hello Python Programming Tutorial]] course guides through the integration of a python module in Slicer4. &lt;br /&gt;
*Author: Sonia Pujol, Ph.D., Steve Pieper, Ph.D.&lt;br /&gt;
*Audience: Developers&lt;br /&gt;
*Based on: 3D Slicer version 4.5&lt;br /&gt;
*The [[Media:HelloPython_Slicer4.4.zip| HelloPython dataset]] contains three Python files and an MR scan of the brain.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:HelloPythonTutorial.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For additional Python scripts examples, please visit the [[Documentation/{{documentation/version}}/ScriptRepository|Script Repository page]]&lt;br /&gt;
&lt;br /&gt;
==Developing and Contributing Extensions for 3D Slicer==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [http://goo.gl/IP4cdg Developing and Contributing Extensions for 3D Slicer Tutorial ] is an introduction to the internals of 3D Slicer and the process of contributing a 3D Slicer extension.&lt;br /&gt;
*Authors: Andrey Fedorov, Ph.D., Jean-Christophe Fillion-Robin, Ph.D., Steve Pieper, Ph.D.&lt;br /&gt;
*Audience: Developers&lt;br /&gt;
*Based on: 3D Slicer version 4.4&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Contributing3DSlicerExtension.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Specific functions=&lt;br /&gt;
&lt;br /&gt;
==Slicer4 Diffusion Tensor Imaging Tutorial ==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[Media:DiffusionMRIanalysisTutorial_Slicer4.5_SoniaPujol.pdf |Diffusion Tensor Imaging Tutorial]]  course guides through the basics of loading Diffusion Weighted images in Slicer, estimating tensors and generating fiber tracts. &lt;br /&gt;
*Author: Sonia Pujol, Ph.D.&lt;br /&gt;
*Audience: End-users and developers&lt;br /&gt;
*Modules: Data, Volumes, DWI to DTI Estimation, Diffusion Tensor Scalar Measurements, Editor, Markups,Tractography Label Map Seeding, Tractography Interactive Seeding&lt;br /&gt;
*Based on: 3D Slicer version 4.5&lt;br /&gt;
*The [[media:Dti tutorial data.zip|DTI dataset]] contains an MR Diffusion Weighted Imaging scan of the brain.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Slicer4DTI Tutorial.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Slicer4 Neurosurgical Planning Tutorial==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[media:WhiteMatterExplorationTutorial_SoniaPujol_Slicer4.5.pdf |  Neurosurgical Planning Tutorial]] course guides through the generation of fiber tracts in the vicinity of a tumor.&lt;br /&gt;
*Author: Sonia Pujol, Ph.D., Ron Kikinis, M.D.&lt;br /&gt;
*Audience: End-users and developers&lt;br /&gt;
*Modules: Volumes, Editor, Tractography Label Map Seeding, Tractography Interactive Seeding&lt;br /&gt;
*Based on: 3D Slicer version 4.5&lt;br /&gt;
*The [[Media:WhiteMatterExplorationData.zip| White Matter Exploration datasets]] contains a Diffusion Weighted Imaging scan of  brain tumor patient.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:NeurosurgicalPlanningTutorial.png|right|250px|link=http://vimeo.com/67336069]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Slicer4 3D Visualization of DICOM Images for Radiology Applications==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[Media:3DSlicer_Dicom_RSNA2015_SoniaPujol.pdf |3D Visualization of DICOM Images for Radiology Applications]]  course guides through 3D data loading and visualization of DICOM images for Radiology Applications in Slicer4. &lt;br /&gt;
*Author: Sonia Pujol, Ph.D., Kitt Shaffer, M.D., Ph.D., Ron Kikinis, M.D.&lt;br /&gt;
*Audience: Radiologists and users of Slicer who need a more comprehensive overview over Slicer4 visualization capabilities.&lt;br /&gt;
*Modules: DICOM, Volumes, Volume Rendering, Models.&lt;br /&gt;
*Based on: 3D Slicer version 4.5&lt;br /&gt;
*The [[Media:3DVisualization_DICOM_images_part1.zip‎  | 3DVisualizationDICOM_part1]] and [[Media:3DVisualization_DICOM_images_part2.zip | 3DVisualizationDICOM_part2]] datasets contain a series of MR and CT scans, and 3D models of the brain, lung and liver.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Slicer4RSNA_2.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Slicer4 Quantitative Imaging Tutorial==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[media:QuantitativeImaging_Slicer4.5.pdf‎ | Slicer4 Quantitative Imaging Tutorial]]  guides through the use for Slicer for quantifying small volumetric changes in slow-growing tumors, and for calculating Standardized Uptake Value (SUV) from PET/CT data.&lt;br /&gt;
*Authors: Sonia Pujol, Ph.D., Katarzyna Macura, M.D., Ron Kikinis, M.D.&lt;br /&gt;
*Audience: Radiologists and users of Slicer who need a more comprehensive overview over Slicer4 quantitative imaging capabilities.&lt;br /&gt;
*Modules: Data, Volumes, Models, Change Tracker, PET Standard Uptake Value Computation&lt;br /&gt;
*Based on: 3D Slicer version 4.5&lt;br /&gt;
*The [[media:QuantitativeImaging.zip‎| Quantitative Imaging dataset]]  contains a series of MR and PET/CT data.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Slicer4_QuantitativeImaging.png|right|250px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Slicer4 IGT ==&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[http://www.slicerigt.org/wp/user-tutorial/ Slicer IGT Tutorial]&lt;br /&gt;
*Authors: Tamas Ungi, M.D, Ph.D., Junichi Tokuda, Ph.D.&lt;br /&gt;
*Audience: End-users interested in using Slicer for real-time navigated procedures. E.g. navigated needle insertions or other minimally invasive medical procedures.&lt;br /&gt;
*Modules: SlicerIGT Extension&lt;br /&gt;
*Based on: Slicer4.3.1-2014.09.14&lt;br /&gt;
*Data: [https://onedrive.live.com/redir?resid=7230D4DEC6058018!2937&amp;amp;authkey=!AGQkSCZOwjVYXw8&amp;amp;ithint=folder%2cpptx  Slicer-IGT datasets]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:SlicetIGT.png|right|150px|]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Slicer4 3D Printing ==&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* This [https://www.youtube.com/watch?v=MKLWzD0PiIc 3D Printing Tutorial] is a video-based tutorial that shows how to prepare 3D Slicer data for 3D printing using Slicer4.3.&lt;br /&gt;
** Author: Nabgha Farhat, MSc&lt;br /&gt;
* The [[Documentation/{{documentation/version}}/Training#Segmentation_for_3D_printing|Segmentation for 3D printing Step-by-step tutorial]] shows how to use the Segment Editor of 3D Slicer for 3D printing using Slicer4.6.&lt;br /&gt;
** Author: Csaba Pinter, MSc&lt;br /&gt;
** Audience: Users and developers interested in 3D printing&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[Image:3DPrinting_tutorial.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Slicer4 Image Registration ==&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[media:RegistrationTutorial_3DSlicer4.5_spujol.pdf| Image Registration Tutorial]] shows how to perform intra- and inter-subject registration within Slicer.&lt;br /&gt;
* Authors: Sonia Pujol, Ph.D., Dominik Meier, Ph.D., Ron Kikinis, M.D.&lt;br /&gt;
* Audience: Users and developers interested in image registration&lt;br /&gt;
* Dataset: [[Media:RegistrationData.zip| 3D Slicer Registration Data]]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[File:registration_Slicer4.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
*Based on: 3D Slicer version 4.5&lt;br /&gt;
See [[Documentation/{{documentation/version}}/Registration/RegistrationLibrary|the Registration Library for worked out registration examples with data]].&lt;br /&gt;
&lt;br /&gt;
== Fast GrowCut ==&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* The [[media:FastGrowCutTutorial.pdf |Fast GrowCut Tutorial]]  shows how to perform segmentation using the Fast GrowCut effect in Slicer.&lt;br /&gt;
* Author: Hillary Lia&lt;br /&gt;
* Audience: Users interested in segmentation&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[File:FastGrowCutLogo.png|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Slicer4 Radiation Therapy Tutorial ==&lt;br /&gt;
** The  [https://github.com/SlicerRt/SlicerRtDoc/raw/master/tutorials/SlicerRT_WorldCongress_TutorialIGRT.pdf SlicerRT tutorial] is an introduction to the Radiation Therapy functionalities of Slicer.&lt;br /&gt;
** Author: Csaba Pinter, Andras Lasso, An Wang, Gregory C. Sharp, David Jaffray, Gabor Fichtinger. &lt;br /&gt;
** Dataset: [http://slicer.kitware.com/midas3/download/item/205404/SlicerRT_WorldCongress_TutorialIGRT_Dataset.zip download] from MIDAS&lt;br /&gt;
**Based on Slicer 4.6&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
Additional (non-curated) videos-based demonstrations using 3D Slicer are accessible on  [http://www.youtube.com/results?search_query=3d+slicer&amp;amp;sm=3 You Tube].&lt;br /&gt;
&lt;br /&gt;
= 3D Slicer Tutorial contests=&lt;br /&gt;
&lt;br /&gt;
==Winter 2017 Tutorial contest==&lt;br /&gt;
&lt;br /&gt;
===Segmentation for 3D printing===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://github.com/SlicerRt/SlicerRtDoc/raw/master/tutorials/SegmentationFor3DPrinting_TutorialContestWinter2017.pdf Segmentation for 3D printing Tutorial] ([https://github.com/SlicerRt/SlicerRtDoc/raw/master/tutorials/SegmentationFor3DPrinting_TutorialContestWinter2017.pptx pptx]) is an introduction to the new [[Documentation/{{documentation/version}}/Modules/SegmentEditor|Segment Editor]] module of Slicer. &lt;br /&gt;
*Author: Csaba Pinter (Queen's University, Canada)&lt;br /&gt;
*Dataset: [[:File:BasePiece.zip|Phantom base STL model]] Source: [http://perk-software.cs.queensu.ca/plus/doc/nightly/modelcatalog/ PerkLab].&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-Segmentation-for-3d-printing.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Slicer Pathology===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[Documentation/{{documentation/version}}/Extensions/SlicerPathology|Slicer Pathology Tutorial]] describes how to use the automated and semi-automated segmentation tools of the Slicer Pathology Extension.&lt;br /&gt;
*Author: Erich Bremer (Stonybrook), Andriy Fedorov (Brigham and Women’s Hospital)&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerPathologyScreenShot8.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Simple Python Tool for Quality Control of DWI data===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.na-mic.org/Wiki/index.php/File:SimpleDiffusionGradientInformationExtractorTutorial_Chauvin_Jan2017.pdf Simple Multi-shell Diffusion Gradients Information Extractor Tutorial] describes how to use a simple Python script for parsing multi-shell sensitizing gradients information from diffusion MRI datasets in Nifti file.&lt;br /&gt;
*Author: Laurent Chauvin (ETS Montreal)&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-SimpleDiffusionGradientInformationExtractorTutorial.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SPHARM-PDM===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.nitrc.org/docman/view.php/308/1982/SPHARM-PDM_Tutorial_July2015.pdf SPHARM-PDM Tutorial] describes how to use the SPHARM-PDM and ShapePopulationViewer Slicer extensions to compute point-based models for Shape Analysis and perform quality control of the different models.&lt;br /&gt;
*Author: Jonathan Perdomo (UNC), Beatriz Paniagua (Kitware Inc.)&lt;br /&gt;
*Dataset:  [https://www.nitrc.org/docman/view.php/308/1981/SPHARM_Tutorial_Data_July2015.zip Tutorial Data]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-SPHARM-PDM.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Integration of Robot Operating System (ROS) and 3D Slicer using OpenIGTLink===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.na-mic.org/Wiki/index.php/File:ROSIGTLTutorial.pdf Integration of Robot Operating System (ROS) and 3D Slicer using OpenIGTLink Tutorial] is an introduction to the software architecture of surgical robot systems. The tutorial provides hands-on experience on the integration of software and hardware for medical robotics applications.&lt;br /&gt;
*Author: Junichi Tokuda (Brigham and Women’s Hospital)&lt;br /&gt;
*Dataset:  Not available.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-Integration-ROS-3DSlicer-OpenIGTLink.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Fiber Bundle Volume Measurement===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [https://www.na-mic.org/Wiki/index.php/File:Fiber_Bundle_Volume_Measurement_TutorialContestWinter2017.pdf Fiber Bundle Volume Measurement Tutorial] shows how to calculate the volume of tractography reconstructions of white matter tracts.&lt;br /&gt;
*Author: Shun Gong (Shanghai Changzheng Hospital, China)&lt;br /&gt;
*Dataset:  [http://www.na-mic.org/Wiki/images/4/4c/FiberVolume_data.zip Tutorial data]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SlicerWinterProjectWeek2017-FiberBundleVolumeMeasurements.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Winter 2016 Tutorial contest==&lt;br /&gt;
&lt;br /&gt;
===Subject Hierarchy===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [http://wiki.na-mic.org/Wiki/images/2/27/SubjectHierarchy.TutorialContestWinter2016.pdf Subject Hierarchy Tutorial] demonstrates the basic usage and potential of Slicer’s data manager module Subject Hierarchy using a two time point radiotherapy phantom dataset.&lt;br /&gt;
*Author: Csaba Pinter, Queen's University, Canada&lt;br /&gt;
*Dataset:  [http://slicer.kitware.com/midas3/download/item/205404/SlicerRT_WorldCongress_TutorialIGRT_Dataset.zip SlicerRT_WorldCongress_TutorialIGRT_Dataset] The tutorial dataset is a two time point phantom dataset taken from a RANDO head&amp;amp;neck phantom. It contains two studies, the planning one is a DICOM study consisting of a CT grayscale image and radiotherapy data: contours, dose distribution, treatment beams, plan information. The second time point consists of a CT NRRD volume and a dose NRRD volume.&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:SubjectHierarchyTutorial.png | 200px]]. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Fiber Bundle Selection and Scalar Measurements===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [[media:FiberBundleSelectionAndScalarMeasurement_TutorialContestWinter2016.pdf | Fiber Bundle Selection and Scalar Measurements Tutorial]] guides through the use of the Diffusion Bundle Selection module and the Fiber Tract Scalar Measurement module for diffusion MRI tractography data analysis.&lt;br /&gt;
*Author: Fan Zhang, University of Sydney Australia, Brigham and Women's Hospital&lt;br /&gt;
*Dataset:  [[media:FiberBundleSelectionAndScalarMeasurement_TutorialContestWinter2016.zip| Fiber Bundle Selection And Scalar Measurement Tutorial Dataset]]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:FiberBundleSelectionAndScalarMeasurement_TutorialContestWinter2016_Snapshot.png|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Plastimatch ===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [http://www.na-mic.org/Wiki/images/5/5c/Plastimatch_TutorialContestWinter2016.pdf Plastimatch Tutorial] guides through registration and wrapping of DICOM and DICOM-RT data using the Plastimatch extension of 3D Slicer.&lt;br /&gt;
*Author: Gregory Sharp, Massachusetts General Hospital&lt;br /&gt;
*Dataset:  [http://www.na-mic.org/Wiki/index.php/File:Plastimatch_TutorialContestWinter2016.zip Plastimatch Tutorial Dataset]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:PlastimatchTutorial_Winter2016Contest.png|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===UKF ===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The [http://www.na-mic.org/Wiki/images/3/3e/UKF-Tractography_TutorialContestWinter2016.pdf UKF Tutorial] guides through the use of the Unscented Kalman Filter (UKF) tractography module. &lt;br /&gt;
*Author: Pegah Kahali, Brigham and Women's Hospital&lt;br /&gt;
*Dataset:  [http://www.na-mic.org/Wiki/index.php/File:UKF-Tractography_TutorialContestWinter2016.zip UKF tutorial Dataset]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:UKF_Winter2016.png|200px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Summer 2014 Tutorial contest== &lt;br /&gt;
&lt;br /&gt;
===Cardiac Agatston Tutorial===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[http://wiki.na-mic.org/Wiki/index.php/File:TutorialContest_CardiacAgatstonScoring_2014.pdf  Cardiac Agatston Scoring Tutorial]&lt;br /&gt;
*Authors:   Jessica Forbes, Hans Johnson, University of Iowa&lt;br /&gt;
*Dataset:  [http://wiki.na-mic.org/Wiki/index.php/File:CardiacAgatstonMeasures_TutorialContestSummer2014.zip Cardiac Agatston Scoring Tutorial Dataset]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[File:CardiacAgatstonMeasuresModuleScreenshot.jpg| 250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===CMR Toolkit LA workflow===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[http://wiki.na-mic.org/Wiki/index.php/File:CMRToolkitLAWorkflow_TutorialContestSummer2014.pdf  CMR Toolkit LA Workflow Tutorial]&lt;br /&gt;
*Authors: Salma Bengali, Josh Cates, University of Utah&lt;br /&gt;
*Dataset:  [http://wiki.na-mic.org/Wiki/index.php/File:CMRToolkitLAWorkflowData_TutorialContestSummer2014.zip CMRToolkitLAWorkflow Dataset]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Utah_SummerContest2014_tutorial.png|300px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Summer 2013 Tutorial contest==&lt;br /&gt;
&lt;br /&gt;
===Cardiac MRI Toolkit===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[[Media:Cardiac MRI Toolkit Tutorial Summer2013.pdf|Cardiac MRI Toolkit Tutorial]]&lt;br /&gt;
*Authors:   Salma Bengali, Josh Cates, SCI, Utah&lt;br /&gt;
*Dataset:  [[Media:Cardiac_MRI_Toolkit_Tutorial_Data.zip|Cardiac MRI Toolkit Tutorial Dataset]]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:CMRToolkit_Tutorial_Image.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===HelloCLI===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[[Media:Hello_CLI_TutorialContestSummer2013.pdf|HelloCLI]]&lt;br /&gt;
*Authors:   Nadya Shusharina, Greg Sharp, MGH, Boston&lt;br /&gt;
*Dataset:  [[Media:Hello_CLI_TutorialContestSummer2013.zip‎|HelloCLI Dataset]]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Cli_icon.png|300px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SlicerRT===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[[Media:SlicerRT_TutorialContestSummer2013.pdf|SlicerRT Tutorial]]&lt;br /&gt;
*Authors:    Csaba Pinter, Andras Lasso (Queen's), Kevin Wang (PMH, Toronto)&lt;br /&gt;
*Dataset:  [[Media:CsabaPinter-SlicerRtTutorial_Namic2013June.zip|SlicerRT Dataset]] &lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:667px-SlicerRT_0.10_IsocenterShiftingEvaluation.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===DTIPrep===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[[Media:DTIPrep_TutorialContestSummer2013.pdf|DTIPrep]]&lt;br /&gt;
*Authors:    Dave Welch, SINAPSE, IOWA &lt;br /&gt;
*Dataset:  [[Media:DTIPrepData_TutorialContestSummer2013.zip|DTIPrep Dataset]]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:DTIPrep-tutorial.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Summer 2012 Tutorial contest == &lt;br /&gt;
&lt;br /&gt;
===Automatic Left Atrial Scar Segmenter ===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[http://wiki.na-mic.org/Wiki/index.php/CARMA-LA-Scar_TutorialContestSummer2012 Automatic Left Atrial Scar Segmenter Tutorial] &lt;br /&gt;
*Authors:  Greg Gardner, Josh Cates, SCI, Utah&lt;br /&gt;
*Dataset: [http://wiki.na-mic.org/Wiki/index.php/File:CARMA-LA-Scar_TutorialContestSummer2012.zip CARMA-LA-Scar data]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:Carma afib auto scar.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Qualitative and Quantitative Comparison of  Two RT Dose Distributions===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[http://www.na-mic.org/Wiki/index.php/File:PlastimatchDose_TutorialContestSummer2012.pdf Qualitative and Quantitative Comparison of  Two RT Dose Distributions Tutorial]&lt;br /&gt;
*Authors:  James Shackleford, Nadya Shusharina, Greg Sharp, MGH&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:PlastimatchDose.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Dose Accumulation for Adaptive Radiation Therapy===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[http://www.na-mic.org/Wiki/index.php/File:DoseAccumulationforAdaptiveRadiationTherapy_TutorialContestSummer2012.pdf Dose Accumulation for Adaptive Radiation Therapy Tutorial]&lt;br /&gt;
*Authors:  Kevin Wang, Csaba Pinter, Andras Lasso, PMH, Queen's&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:AdaptiveradiationTherapy.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===WebGL Export===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[http://www.na-mic.org/Wiki/index.php/File:WebGLExport_TutorialContestSummer2012.pdf  WebdGLExport]&lt;br /&gt;
*Authors:  Nicolas Rannou, Daniel Haehn, Children's Hospital&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:WebGLExport.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===OpenIGTLink===&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*[http://www.slicer.org/w/img_auth.php/f/f1/OpenIGTLinkTutorial_Slicer4.1.0_JunichiTokuda_Apr2012.pdf OpenIGTLink]&lt;br /&gt;
*Authors:  Junichi Tokuda, BWH&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|&lt;br /&gt;
[[Image:OpenIGTLink.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Additional resources =&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* This ''Slicer 4.1 [http://vimeo.com/41096643 webinar]'' presents the new features and improvements of the release, and a brief overview of work for the next release.&lt;br /&gt;
* Authors: Steve Pieper Ph.D.&lt;br /&gt;
* Audience: First time users and developers interested in Slicer 4.1 new features.&lt;br /&gt;
* Length: 0h20m&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[Image:Webinar-Slicer-4.1.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*This ''Intro to Slicer 4.0 [http://vimeo.com/37671358 webinar]'' provides an introduction to 3DSlicer, and demonstrates core functionalities such as loading, visualizing and saving data. Basic processing tools, including manual registration, manual segmentation and tractography tools are also highlighted. This webinar is a general overview. For in depth information see the modules above and the documentation pages.&lt;br /&gt;
*Authors: Julien Finet, M.S., Steve Pieper, Ph.D., Jean-Christophe Fillion-Robin, M.S. &lt;br /&gt;
*Audience: First time users interested in a broad overview of Slicer’s features and tools.&lt;br /&gt;
*Length: 1h20m&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[Image:Webinar.png|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*The ''[[Documentation/{{documentation/version}}/Registration/RegistrationLibrary|Slicer Registration Case Library]]'' provides many real-life example cases of using the Slicer registration tools. They include the dataset and step-by-step instructions to follow and try yourself. &lt;br /&gt;
:Author: Dominik Meier, Ph.D.&lt;br /&gt;
:Audience:  users interested learning/applying Slicer image registration technology&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[Image:RegLib_table.png|250px|link=https://www.slicer.org/wiki/Documentation/{{documentation/version}}/Registration/RegistrationLibrary]]|}&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
*Some ''[https://pieper.github.io/content/handson/ hands on example videos of basic slicer tasks]'' shows looping gif screen captures of several tasks that you can practice yourself. (Made with version 4.6.2)&lt;br /&gt;
:Author: Steve Pieper, Ph.D.&lt;br /&gt;
:Audience:  new users needing to get a visual feel for the software&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|[[Image:Handson-frame.PNG|250px|link=https://pieper.github.io/content/handson]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External Resources =&lt;br /&gt;
&lt;br /&gt;
== Murat Maga's blog posts about using 3D Slicer for biology ==&lt;br /&gt;
&lt;br /&gt;
* [https://blogs.uw.edu/maga/2017/04/11/getting-started-with-3d-slicer-as-a-biologist/ Slicer for Biologists]&lt;br /&gt;
* [https://blogs.uw.edu/maga/2017/04/11/a-worked-example-getting-and-visualizing-data-from-digimorph/ Loading data from DigiMorph]&lt;br /&gt;
* [https://blogs.uw.edu/maga/2017/04/11/morphosource-data-and-dealing-with-dicom-series-in-slicer/ Fixing problem DICOM]&lt;br /&gt;
* [https://blogs.uw.edu/maga/2017/04/12/scissors-tool-is-awesome/ Scissors tool is awesome]&lt;br /&gt;
&lt;br /&gt;
== Using the (legacy) Editor ==&lt;br /&gt;
&lt;br /&gt;
This set of tutorials about the use of slicer in paleontology is very well written and provides step-by-step instructions.  Even though it covers slicer version 3.4, many of the concepts and techniques have applicability to the new version and to any 3D imaging field:&lt;br /&gt;
&lt;br /&gt;
* [http://openpaleo.blogspot.com/2008/12/3d-slicer-tutorial.html Open Source Paleontologist: 3D Slicer: The Tutorial]&lt;br /&gt;
* [http://openpaleo.blogspot.com/2008/12/3d-slicer-tutorial-part-ii.html Open Source Paleontologist: 3D Slicer: The Tutorial Part II]&lt;br /&gt;
* [http://openpaleo.blogspot.com/2008/12/3d-slicer-tutorial-part-iii.html Open Source Paleontologist: 3D Slicer: The Tutorial Part III]&lt;br /&gt;
* [http://openpaleo.blogspot.com/2008/12/3d-slicer-tutorial-part-iv.html Open Source Paleontologist: 3D Slicer: The Tutorial Part IV]&lt;br /&gt;
* [http://openpaleo.blogspot.com/2009/03/3d-slicer-tutorial-part-v.html Open Source Paleontologist: 3D Slicer: The Tutorial Part V]&lt;br /&gt;
* [http://openpaleo.blogspot.com/2009/03/3d-slicer-tutorial-part-vi.html Open Source Paleontologist: 3D Slicer: The Tutorial Part VI]&lt;br /&gt;
&lt;br /&gt;
== Team Contributions ==&lt;br /&gt;
See the collection of videos on the [http://vimeo.com/album/2363361 Kitware vimeo album].&lt;br /&gt;
&lt;br /&gt;
== User Contributions ==&lt;br /&gt;
See the [[Documentation/{{documentation/version}}/Training/UserContributions|User Contributions Page]] for more content.&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/results?search_query=3d+slicer&amp;amp;sm=3 YouTube Videos About 3D Slicer]&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/ImageGallery/Data&amp;diff=62686</id>
		<title>Documentation/Nightly/Developers/ImageGallery/Data</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/ImageGallery/Data&amp;diff=62686"/>
		<updated>2019-11-27T14:53:48Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;includeonly&amp;gt;Id,Category,Name,Caption&lt;br /&gt;
1,Slicer,SlicerWithVolumeRendering.png,Slicer4 with Volume Rendering enabled&lt;br /&gt;
2,Slicer,SlicerWithDTI.png,Slicer4 with a Diffusion Tensor Volume loaded&lt;br /&gt;
3,Slicer,SlicerQT-2009-12-10.png,Slicer with Qt only&lt;br /&gt;
4,Slicer,SlicerWithTransformModule.png,Slicer with KWWidgets + Qt&lt;br /&gt;
5,Slicer,Screenshot-Qt Designer.png,Qt Designer to design modules&lt;br /&gt;
6,Modules,QSlicerVolumeRenderingModule.png,Volume Rendering Module&lt;br /&gt;
7,Modules,QSlicerSampleDataModule.png,Sample Data Module&lt;br /&gt;
8,Modules,QSlicerEndoscopyModule.png,Endoscopy Module&lt;br /&gt;
9,Modules,QSlicerSceneViewsModule.png,SceneViews Module&lt;br /&gt;
10,Modules,QSlicerEditorModule.png,Editor Module&lt;br /&gt;
11,Modules,QSlicerModelsModule.png,Models Module&lt;br /&gt;
12,Modules,QSlicerColorModuleWidget.png,Color Module&lt;br /&gt;
13,Modules,QSlicerVolumesModule.png,Volumes Module&lt;br /&gt;
14,Modules,QSlicerDiffusionTensorVolumeDisplayWidget.png,Volumes Module (DTI volume)&lt;br /&gt;
15,Modules,QSlicerSliceControllersModule.png,Slice Controllers Module&lt;br /&gt;
16,Modules,QSlicerDataModule.png,Data Module&lt;br /&gt;
17,Modules,QSlicerROIModule.png,ROI Module&lt;br /&gt;
18,Modules,qSlicerTractographyModule.png,Tractography Module&lt;br /&gt;
19,Modules,QCLIModule-LinearRegistration.png,Linear Registration Module (CLI)&lt;br /&gt;
20,Modules,QSlicerWelcomeModule.png,Welcome Module&lt;br /&gt;
21,Modules,qSlicerCamerasModule.png,Cameras Module&lt;br /&gt;
22,Modules,QSlicerTransformsModuleUI.png,Transforms Module&lt;br /&gt;
23,Dialogs,QSlicerExtensionsWizard.png,Extensions Management dialog&lt;br /&gt;
24,Dialogs,QSlicerSettingsDialog.png,Application settings dialog&lt;br /&gt;
25,Dialogs,QMRMLColorPickerDialog.png,Color picker dialog&lt;br /&gt;
26,Dialogs,QSlicerActionsDialog.png,Shortcuts dialog&lt;br /&gt;
27,Dialogs,QSlicerVolumesIODialog.png,Standard File Dialog (using Volumes reader)&lt;br /&gt;
28,Dialogs,QSlicerOverlayIODialog.png,Standard File Dialog (using Scalar Overlay reader)&lt;br /&gt;
29,Dialogs,QSlicerStandardFileDialog.png,Standard File Dialog&lt;br /&gt;
30,Dialogs,QSlicerDataDialog.png,Add Data Dialog&lt;br /&gt;
31,Dialogs,QSlicerSaveDataDialog.png,Save Data Dialog&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url={{fullurl:Special:GetData/Documentation/{{documentation/version}}/Developers/ImageGallery/Data}}&lt;br /&gt;
|format=CSV with header|data=id=Id,category=Category,name=Name,caption=Caption}}&lt;br /&gt;
{| class=&amp;quot;sortable alternate&amp;quot;&lt;br /&gt;
! Id&lt;br /&gt;
! Category&lt;br /&gt;
! Name&lt;br /&gt;
! Caption {{#for_external_table:&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{{id}}}&lt;br /&gt;
{{!}} {{{category}}}&lt;br /&gt;
{{!}} {{{name}}}&lt;br /&gt;
{{!}} {{{caption}}} }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
An attempt to use &amp;quot;#tag: gallery&amp;quot; [1] to generate automatically the Image gallery table used in [1] &lt;br /&gt;
has been considered. It simply failed.&lt;br /&gt;
&lt;br /&gt;
Semantic mediawiki should probably be used. See https://www.mediawiki.org/wiki/Extension:Semantic_Result_Formats&lt;br /&gt;
&lt;br /&gt;
For reference, you will find below this attempt:\&lt;br /&gt;
&lt;br /&gt;
// -------------------------&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url={{fullurl:Special:GetData/Documentation/{{documentation/version}}/Developers/ImageGallery/Data}}&lt;br /&gt;
|format=CSV with header|data=category=Category,name=Name,caption=Caption&lt;br /&gt;
|filters=Category=Slicer}}&lt;br /&gt;
{{#tag: gallery| &lt;br /&gt;
{{#for_external_table:&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Image:{{{name}}}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
// -------------------------&lt;br /&gt;
&lt;br /&gt;
[1] https://www.slicer.org/wiki/Documentation/4.1/Developers/ImageGallery[2] http://commons.wikimedia.org/wiki/Template:Gallery&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=ITKv4_Migration_plan&amp;diff=62685</id>
		<title>ITKv4 Migration plan</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=ITKv4_Migration_plan&amp;diff=62685"/>
		<updated>2019-11-27T14:53:47Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Slicer4#Plan| Back to Slicer]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
&lt;br /&gt;
This page is designed to identify and track the work that needs to be done during the month of 2012-12-01 to 2012-12-31 in order to transition Slicer to a solid and uniform ITKv4 platform. Originally this document, created following the NAMIC Engineering TCon of July 28th [http://wiki.na-mic.org/Wiki/index.php/Engineering:TCON_2011#2011-07-28], discuss the element that should be considered before transitioning Slicer to ITKv4.&lt;br /&gt;
&lt;br /&gt;
Historical and other old pages with possibly outdated information. If the information on these other pages is relevant, they need to be pushed here.&lt;br /&gt;
&lt;br /&gt;
* https://www.slicer.org/wiki/ITKv4_Migration_plan* https://www.slicer.org/wiki/Developer_Meetings/20121106#ITKv4* http://wiki.na-mic.org/Wiki/index.php/Engineering:TCON_2011#2011-07-28&lt;br /&gt;
&lt;br /&gt;
== Issue To Address ==&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;color:firebrick; background-color:ltgrey;&amp;quot; cellpadding=&amp;quot;5&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Issues for migration to ITKv4&lt;br /&gt;
|-&lt;br /&gt;
! _Due_Date_ &lt;br /&gt;
! Progress Status&lt;br /&gt;
! Team Members &lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| 2012-12-31 &lt;br /&gt;
| Started&lt;br /&gt;
| Hans J., Steve P., JC, Bill L., Matt M., Kent W.&lt;br /&gt;
| http://www.na-mic.org/Bug/search.php?project_id=3&amp;amp;amp;sticky_issues=on&amp;amp;amp;sortby=last_updated&amp;amp;amp;dir=DESC&amp;amp;amp;hide_status_id=80&amp;amp;amp;tag_string=ITKv4&lt;br /&gt;
|-&lt;br /&gt;
|  2012-12-05&lt;br /&gt;
|&lt;br /&gt;
| Steve P., Bill L., Matt M., Kent W.&lt;br /&gt;
| Test Slicer/ITKv4 on all platforms, especially 64bit VS2008.  ( see comments in table below for checkout information:  2012-12-01 )&lt;br /&gt;
|-&lt;br /&gt;
| 2012-12-05&lt;br /&gt;
|&lt;br /&gt;
| Matt M., Bill L.&lt;br /&gt;
| Look into reducing the number of ITKv4 Modules enabled when building&lt;br /&gt;
|-&lt;br /&gt;
| N/A to ITKv4&lt;br /&gt;
|&lt;br /&gt;
| Matt M., Steve P., Bill L., Matt M.&lt;br /&gt;
| Slicer modules to reduce load time on Windows&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;color:green; background-color:white;&amp;quot; cellpadding=&amp;quot;10&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Timeline for ITKv4&lt;br /&gt;
|-&lt;br /&gt;
! _Due_Date_ &lt;br /&gt;
! Progress Status &lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-01&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| Done&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot; |Hans provides a first pass reference set of patches that build on Mac and demonstrates that nearly all functionality is maintained identically between ITKv3 and ITKv4&lt;br /&gt;
|- &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| I've successfully created a mac dmg package. &amp;amp;quot;CPack: - package: /Users/johnsonhj/src/Slicer-git-itkv4/Slicer-build/Slicer-4.2.0-macosx-amd64.dmg generated.&amp;amp;quot;&amp;lt;br/&amp;gt;&lt;br /&gt;
The package is not yet completely successful though :(.&amp;amp;nbsp; It seems to run just fine on the machine I used to build the package, but when running on my wifes laptop, it can not find a Qt library in /usr/local/lib/&lt;br /&gt;
&lt;br /&gt;
This is probably something best left for discussion next Wednesday.&lt;br /&gt;
&lt;br /&gt;
I am building on 10.8 with a private build of clang 3.1 tagged as stable from svn.&amp;lt;br/&amp;gt;&lt;br /&gt;
I also installed homebrew, and from that installed QT 4.8.3. ( I manually set the required Qt version to 4.8.3)&lt;br /&gt;
&lt;br /&gt;
*FROM THE SAME SOURCE TREE* I also am building Slicer built with ITKv3, and that also seems to be building a reasonable package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font-size: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:BRAINSia/Slicer43.git&lt;br /&gt;
cd  Slicer43&lt;br /&gt;
git checkout origin/next-slicer43 &amp;amp;ndash;b 20130107-next-slicer43&lt;br /&gt;
cd ../ &amp;amp;amp;&amp;amp;amp; mkdir sl-itkv3  &amp;amp;amp;&amp;amp;amp; sl-itkv3  &amp;amp;amp;&amp;amp;amp; CC=/opt/clang31/bin/clang CXX=/opt/clang31/bin/clang++ ccmake &amp;amp;ndash;DITK_VERSION_MAJOR:STRING=3 ../Slicer43&lt;br /&gt;
cd ../ &amp;amp;amp;&amp;amp;amp; mkdir sl-itkv4  &amp;amp;amp;&amp;amp;amp; sl-itkv4  &amp;amp;amp;&amp;amp;amp; CC=/opt/clang31/bin/clang CXX=/opt/clang31/bin/clang++ ccmake &amp;amp;ndash;DITK_VERSION_MAJOR:STRING=4 ../Slicer43&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-05&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| Matt McCormick coordinates a Google Hang out&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| In preparation for the upcoming Slicer 4.3 and the NA-MIC Winter Project Week, we are planning a hackathon to help with migration to ITKv4 as the default version of ITK in Slicer.&amp;amp;nbsp; For some time, 	community members such as Hans Johnson, Bill Lorensen, and Jean-Christophe Fillion-Robin have made sure ITKv4 works well with Slicer, and we hope to gather and focus on remaining issues that should be addressed.&lt;br /&gt;
&lt;br /&gt;
The hackathon will take place on:&amp;amp;nbsp; &amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;background-color:Yellow;&amp;quot;&amp;gt;&lt;br /&gt;
* Wednesday, December 5th from 10AM Eastern Time until we run out of energy :-). &amp;lt;br\&amp;gt;&lt;br /&gt;
* Primary Connection Information: Google Hangout to be announce at 10AM Eastern time on the ITK and Slicer mailing lists.  The link to join the hangout:   https://plus.google.com/hangouts/_/a52d596290231e5806eec50e14ab2dcddad72fcd?authuser=2&amp;amp;eid=106512397331641956186&amp;amp;hl=en&lt;br /&gt;
* Fallback/Auxiliary connection information:  GoTo Meeting for sharing screens with mouse control:   &amp;lt;br\&amp;gt;&lt;br /&gt;
Please join my meeting, Dec 5, 2012 at 9:00 AM CST. &amp;lt;br\&amp;gt;&lt;br /&gt;
https://www1.gotomeeting.com/join/739397184 &amp;lt;br\&amp;gt;&lt;br /&gt;
Meeting ID: 739-397-184&amp;lt;br\&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 13px;&amp;quot;&amp;gt;The hackathon will take place on a Google+ Hangout.&amp;amp;nbsp; I will follow up with the link to the hangout on this email thread when we starts.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Issues to address at Google Hangout:&lt;br /&gt;
&lt;br /&gt;
Issues in the Slicer bug tracker with the ITKv4 tag:  ( See table above )&lt;br /&gt;
&lt;br /&gt;
If there are other issues to address, please report them in the Slicer bug tracker and reply to this thread.&lt;br /&gt;
&lt;br /&gt;
Work will occur on the following repository on Github.&amp;amp;nbsp;&amp;amp;nbsp; https://github.com/BRAINSia/Slicer43&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| 2012-12-&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;background-color: orange;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Historical (and probably outdated) information =&lt;br /&gt;
&lt;br /&gt;
== Consensus as of 2011 ==&lt;br /&gt;
&lt;br /&gt;
* Slicer RSNA 2011 will be built against ITKv3&lt;br /&gt;
&lt;br /&gt;
* External module requiring ITKv4 will be linked statically against ITKv4&lt;br /&gt;
** Associated command line module will be built as executable only. Indeed having both ITKv3 and ITKv4 in the same process will most likely result in some weird symbol clash.&lt;br /&gt;
&lt;br /&gt;
=== Questions ===&lt;br /&gt;
&lt;br /&gt;
* Should each extension depending on ITKv4 download and build its own copy of ITKv4 or should Slicer build and expose both ITKv3 and ITKv4 ?&lt;br /&gt;
&lt;br /&gt;
== Custom MetaIO in SlicerITK ==&lt;br /&gt;
&lt;br /&gt;
* To minimize memory usage and increase efficiency of Command line module execution, itkImageFileReader.txx in SlicerITK has been patched. See https://github.com/Slicer/ITK/commit/8c73dc57e4ae67328ff8e44934b72fd4cc5d4dd3 and https://github.com/Slicer/ITK/commit/12349021b152ac6546c2caf09bbbee4266baddad&lt;br /&gt;
&lt;br /&gt;
* Bill mentioned it should be possible to avoid patching SlicerITK by creating a custom Factory / plugins. &lt;br /&gt;
&lt;br /&gt;
* From Bradley Lowekamp - ITK mailing list - Sun, Jul 17, 2011 at 11:33 AM  subject '''Re: [Insight-developers] ITK 3 tag to use with slicer? Fwd: Slicer release schedule'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Stephen,&lt;br /&gt;
&lt;br /&gt;
If I understand this change correctly, this patch allows the usage of a buffer allocated by the ImageIO to be passed &lt;br /&gt;
all the way to the Image class if  all the types match up. The is accomplished by adding the following &lt;br /&gt;
methods: ImageIO::CanUseOwnBuffer, ImageIO::ReadUsingOwnBuffer() and ImageIO::GetOwnBuffer.&lt;br /&gt;
&lt;br /&gt;
I assume that this change is for the MemoryImageFileReader that is used with Slicer. ( can see how this could be &lt;br /&gt;
quite advantageous ( and also the potential for scary alias when combined with InPlace filters ). But as not one &lt;br /&gt;
single ITK ImageIO has support for these methods. I'd like to question if they should be brought into the ITK main repo, &lt;br /&gt;
as they don't appear to currently provide any benefit to ITK and only complicate as already complicated interface to the &lt;br /&gt;
ImageIO. If these changes are desired in ITK, then I would strongly encourage better documentation for the new methods in &lt;br /&gt;
ImageIO, to enable new developers with add this feature to ImageIO classes.&lt;br /&gt;
&lt;br /&gt;
Brad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* From Bill - Thu, Jul 28, 2011 at 5:19 PM '''Re: [slicer-devel] Engineering:TCON 2011 - NAMIC'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I checked the patches. Two classes are patched: ImageIOBase and ImageFileReader. Now I do not think my factory idea is worthwhile. &lt;br /&gt;
We should to bring the changes into ITK, and convert ITK's Meta and Nifti ImageIO's to use it.&lt;br /&gt;
&lt;br /&gt;
Bill&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the na-mic tcon it was discussed that nrrd and nifti readers also perform the memcpy since the native libraries perform the Information and Read steps in a single API call.  Therefor if the feature existed at the ITK level, then several readers could take advantage of it.&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/SlicerApplication/StructureSets&amp;diff=62683</id>
		<title>Documentation/Nightly/SlicerApplication/StructureSets</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/SlicerApplication/StructureSets&amp;diff=62683"/>
		<updated>2019-11-27T14:53:46Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;
__NOTOC__&lt;br /&gt;
These are Greg's development notes.  Beware of inaccurate and misleading information below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
The term &amp;quot;structure set&amp;quot; is used in RT to denote a set of structures (labels) which are attached to an image.  &lt;br /&gt;
The goal of this project is to improve Slicer so it can handle overlapping structures.  &lt;br /&gt;
The following is a rough list of required functionality:&lt;br /&gt;
&lt;br /&gt;
# Identify structureset images at load time&lt;br /&gt;
# Load structureset images&lt;br /&gt;
# Display overlapping contours in structure set&lt;br /&gt;
# Editor can switch between labelmap and structureset representation&lt;br /&gt;
# Modify editor GUI to make easier selecting current structure&lt;br /&gt;
# Save structureset images&lt;br /&gt;
&lt;br /&gt;
=How to git=&lt;br /&gt;
# Basic tutorials&lt;br /&gt;
## https://www.slicer.org/wiki/Slicer3:git-svn## http://git.or.cz/course/svn.html&lt;br /&gt;
# My code is located here&lt;br /&gt;
## https://github.com/gregsharp/Slicer/tree/gcstest&lt;br /&gt;
# It is a fork of SlicerRT&lt;br /&gt;
## https://github.com/SlicerRt/Slicer&lt;br /&gt;
# Or perhaps Slicer&lt;br /&gt;
## https://github.com/Slicer/Slicer&lt;br /&gt;
# Update like this:&lt;br /&gt;
## git pull git@github.com:gregsharp/Slicer.git gcstest&lt;br /&gt;
## Or, because I created an alias, like this:&lt;br /&gt;
## git pull gcs gcstest&lt;br /&gt;
## The alias is made like this:&lt;br /&gt;
## git remote add gcs git@github.com:gregsharp/Slicer.git&lt;br /&gt;
# My code is branched off of SlicerRT&lt;br /&gt;
## To rebase onto main slicer trunk, do this:&lt;br /&gt;
## git remote add slicer https://github.com/Slicer/Slicer.git&lt;br /&gt;
## git pull --rebase slicer master&lt;br /&gt;
## However, this doesn't work because my fork contains all of SlicerRT, which conflicts with slicer&lt;br /&gt;
# So I make a new fork, based on slicer itself&lt;br /&gt;
## git clone git://github.com/Slicer/Slicer.git Slicer-gcs&lt;br /&gt;
## git remote add gcs-slicer git@github.com:gregsharp/gcs-slicer.git&lt;br /&gt;
## git push gcs-slicer master&lt;br /&gt;
## But this doesn't work &amp;quot;ERROR: Repository not found.&amp;quot;&lt;br /&gt;
# Eventually I had to give up, and delete the repository&lt;br /&gt;
## The changes were to this file: Libs/MRML/Core/vtkMRMLVolumeArchetypeStorageNode.cxx&lt;br /&gt;
&lt;br /&gt;
=Notes=&lt;br /&gt;
&lt;br /&gt;
# Identifying structureset images&lt;br /&gt;
## For now, I just assume that any vector image is a structureset image&lt;br /&gt;
# Loading structureset images&lt;br /&gt;
## Images, when loaded, are sent to vtkMRMLVolumeArchetypeStorageNode::ReadData(), which decides whether the file has a scalar or vector image&lt;br /&gt;
## The type of the MRML node created is vtkMRMLVectorVolumeNode&lt;br /&gt;
## Ref: Libs/MRML/Core/vtkMRMLVolumeArchetypeStorageNode.cxx&lt;br /&gt;
## A vtkMRMLVectorVolumeDisplayNode is attached to the storage node&lt;br /&gt;
# Is an image a labelmap?&lt;br /&gt;
## This is apparently a function of the XML file, not the image&lt;br /&gt;
## vtkMRMLScalarVolumeNode::SetLabelMap()&lt;br /&gt;
# Labelmap display&lt;br /&gt;
## ??&lt;br /&gt;
## ??&lt;br /&gt;
# Displaying overlapping contours&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.6/SlicerApplication/StructureSets&amp;diff=62682</id>
		<title>Documentation/4.6/SlicerApplication/StructureSets</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.6/SlicerApplication/StructureSets&amp;diff=62682"/>
		<updated>2019-11-27T14:53:45Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;
__NOTOC__&lt;br /&gt;
These are Greg's development notes.  Beware of inaccurate and misleading information below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
The term &amp;quot;structure set&amp;quot; is used in RT to denote a set of structures (labels) which are attached to an image.  &lt;br /&gt;
The goal of this project is to improve Slicer so it can handle overlapping structures.  &lt;br /&gt;
The following is a rough list of required functionality:&lt;br /&gt;
&lt;br /&gt;
# Identify structureset images at load time&lt;br /&gt;
# Load structureset images&lt;br /&gt;
# Display overlapping contours in structure set&lt;br /&gt;
# Editor can switch between labelmap and structureset representation&lt;br /&gt;
# Modify editor GUI to make easier selecting current structure&lt;br /&gt;
# Save structureset images&lt;br /&gt;
&lt;br /&gt;
=How to git=&lt;br /&gt;
# Basic tutorials&lt;br /&gt;
## https://www.slicer.org/wiki/Slicer3:git-svn## http://git.or.cz/course/svn.html&lt;br /&gt;
# My code is located here&lt;br /&gt;
## https://github.com/gregsharp/Slicer/tree/gcstest&lt;br /&gt;
# It is a fork of SlicerRT&lt;br /&gt;
## https://github.com/SlicerRt/Slicer&lt;br /&gt;
# Or perhaps Slicer&lt;br /&gt;
## https://github.com/Slicer/Slicer&lt;br /&gt;
# Update like this:&lt;br /&gt;
## git pull git@github.com:gregsharp/Slicer.git gcstest&lt;br /&gt;
## Or, because I created an alias, like this:&lt;br /&gt;
## git pull gcs gcstest&lt;br /&gt;
## The alias is made like this:&lt;br /&gt;
## git remote add gcs git@github.com:gregsharp/Slicer.git&lt;br /&gt;
# My code is branched off of SlicerRT&lt;br /&gt;
## To rebase onto main slicer trunk, do this:&lt;br /&gt;
## git remote add slicer https://github.com/Slicer/Slicer.git&lt;br /&gt;
## git pull --rebase slicer master&lt;br /&gt;
## However, this doesn't work because my fork contains all of SlicerRT, which conflicts with slicer&lt;br /&gt;
# So I make a new fork, based on slicer itself&lt;br /&gt;
## git clone git://github.com/Slicer/Slicer.git Slicer-gcs&lt;br /&gt;
## git remote add gcs-slicer git@github.com:gregsharp/gcs-slicer.git&lt;br /&gt;
## git push gcs-slicer master&lt;br /&gt;
## But this doesn't work &amp;quot;ERROR: Repository not found.&amp;quot;&lt;br /&gt;
# Eventually I had to give up, and delete the repository&lt;br /&gt;
## The changes were to this file: Libs/MRML/Core/vtkMRMLVolumeArchetypeStorageNode.cxx&lt;br /&gt;
&lt;br /&gt;
=Notes=&lt;br /&gt;
&lt;br /&gt;
# Identifying structureset images&lt;br /&gt;
## For now, I just assume that any vector image is a structureset image&lt;br /&gt;
# Loading structureset images&lt;br /&gt;
## Images, when loaded, are sent to vtkMRMLVolumeArchetypeStorageNode::ReadData(), which decides whether the file has a scalar or vector image&lt;br /&gt;
## The type of the MRML node created is vtkMRMLVectorVolumeNode&lt;br /&gt;
## Ref: Libs/MRML/Core/vtkMRMLVolumeArchetypeStorageNode.cxx&lt;br /&gt;
## A vtkMRMLVectorVolumeDisplayNode is attached to the storage node&lt;br /&gt;
# Is an image a labelmap?&lt;br /&gt;
## This is apparently a function of the XML file, not the image&lt;br /&gt;
## vtkMRMLScalarVolumeNode::SetLabelMap()&lt;br /&gt;
# Labelmap display&lt;br /&gt;
## ??&lt;br /&gt;
## ??&lt;br /&gt;
# Displaying overlapping contours&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Sandbox&amp;diff=62684</id>
		<title>Documentation/Nightly/Developers/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Sandbox&amp;diff=62684"/>
		<updated>2019-11-27T14:53:45Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/wiki.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;
&lt;br /&gt;
&lt;br /&gt;
= Video Test =&lt;br /&gt;
The extension [https://www.mediawiki.org/wiki/Extension:EmbedVideo EmbedVideo] is now installed!&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=MKLWzD0PiIc}}&lt;br /&gt;
&lt;br /&gt;
= Graphviz test =&lt;br /&gt;
&amp;lt;graphviz caption=&amp;quot;Graph for example no. 3 (contains Wiki-Links)&amp;quot; alt=&amp;quot;phylogenetic tree&amp;quot; format=&amp;quot;png&amp;quot;&amp;gt;&lt;br /&gt;
digraph example3 {&lt;br /&gt;
  node [shape=plaintext];&lt;br /&gt;
  Mollusca [URL=&amp;quot;[[w:Mollusca]]&amp;quot;];&lt;br /&gt;
  Neomeniomorpha [URL=&amp;quot;[[w:Neomeniomorpha]]&amp;quot;];&lt;br /&gt;
  X1 [shape=point,label=&amp;quot;&amp;quot;];&lt;br /&gt;
  Caudofoveata [URL=&amp;quot;[[w:Caudofoveata]]&amp;quot;];&lt;br /&gt;
  Testaria [URL=&amp;quot;[[w:Testaria]]&amp;quot;];&lt;br /&gt;
  Polyplacophora [URL=&amp;quot;[[w:Polyplacophora]]&amp;quot;];&lt;br /&gt;
  Conchifera [URL=&amp;quot;[[w:Conchifera]]&amp;quot;];&lt;br /&gt;
  Tryblidiida [URL=&amp;quot;[[w:Tryblidiida]]&amp;quot;];&lt;br /&gt;
  Ganglioneura [URL=&amp;quot;[[w:Ganglioneura]]&amp;quot;];&lt;br /&gt;
  Bivalvia [URL=&amp;quot;[[w:Bivalvia]]&amp;quot;];&lt;br /&gt;
  X2 [shape=point,label=&amp;quot;&amp;quot;];&lt;br /&gt;
  X3 [shape=point,label=&amp;quot;&amp;quot;];&lt;br /&gt;
  Scaphopoda [URL=&amp;quot;[[w:Scaphopoda]]&amp;quot;];&lt;br /&gt;
  Cephalopoda [URL=&amp;quot;[[w:Cephalopoda]]&amp;quot;];&lt;br /&gt;
  Gastropoda [URL=&amp;quot;[[w:Gastropoda]]&amp;quot;];&lt;br /&gt;
  Mollusca-&amp;gt;X1-&amp;gt;Testaria-&amp;gt;Conchifera-&amp;gt;Ganglioneura-&amp;gt;X2-&amp;gt;Gastropoda&lt;br /&gt;
  Mollusca-&amp;gt;Neomeniomorpha&lt;br /&gt;
  X1-&amp;gt;Caudofoveata&lt;br /&gt;
  Testaria-&amp;gt;Polyplacophora&lt;br /&gt;
  Conchifera-&amp;gt;Tryblidiida&lt;br /&gt;
  Ganglioneura -&amp;gt;Bivalvia&lt;br /&gt;
  X2-&amp;gt;X3-&amp;gt;Cephalopoda&lt;br /&gt;
  X3-&amp;gt;Scaphopoda&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graphviz&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Test modulo function associated with CURRENTTIMESTAMP =&lt;br /&gt;
&lt;br /&gt;
{{#expr: {{CURRENTTIMESTAMP}} mod 40}}&lt;br /&gt;
&lt;br /&gt;
= Random image =&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/Developers/random-image}}&lt;br /&gt;
&lt;br /&gt;
= Use of get_web_data and for_external_table =&lt;br /&gt;
&lt;br /&gt;
The raw set of data retrieved using this [[Special:GetData/Documentation/4.0/Developers/Sandbox_data|URL]] is reported below:&lt;br /&gt;
&lt;br /&gt;
{{ambox&lt;br /&gt;
| type      = content&lt;br /&gt;
| text      = There are two extra empty lines !&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Name,Color,Shape&lt;br /&gt;
Apple,Red,Round&lt;br /&gt;
Banana,Yellow,Oblong&lt;br /&gt;
Orange,Orange,Round&lt;br /&gt;
Pear,Yellow,&amp;quot;Pear-shaped&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ambox&lt;br /&gt;
| type      = speedy&lt;br /&gt;
| text      = The following table should contains Fruits&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:url=http://wiki.slicer.org/slicerWiki/index.php/Special:GetData/Documentation/4.0/Developers/Sandbox_data|format=CSV with header|data=name=Name,color=Color,shape=Shape}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Color {{#for_external_table:&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[{{{name}}}]]&lt;br /&gt;
{{!}} {{{color}}} }}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Use of get_web_data and external_value =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using filter as template parameter ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=https://www.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data|format=CSV with header&lt;br /&gt;
|data=bananashape0=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape0}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=https://www.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data|format=CSV with header&lt;br /&gt;
|data=bananashape0=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using filter as URL parameter ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=https://www.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data,Name=Banana|format=CSV with header&lt;br /&gt;
|data=bananashape1=Shape&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape1}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=https://www.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data,Name=Banana|format=CSV with header&lt;br /&gt;
|data=bananashape1=Shape&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using fullurl ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url={{fullurl:Special:GetData/Documentation/4.0/Developers/Sandbox_data}}&lt;br /&gt;
|format=CSV with header&lt;br /&gt;
|data=bananashape2=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape2}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{fullurl:Special:GetData/Documentation/4.0/Developers/Sandbox_data,Name=Banana}}&lt;br /&gt;
&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url={{fullurl:Special:GetData/Documentation/4.0/Developers/Sandbox_data}}&lt;br /&gt;
|format=CSV with header&lt;br /&gt;
|data=bananashape2=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape2}}&lt;br /&gt;
&lt;br /&gt;
= Debug module-footer template =&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules|DicomToNrrdConverter]]&lt;br /&gt;
{{#if: {{documentation/{{documentation/version}}/module-category}} | &amp;lt;!-- The following category will be 'MainCategory' assuming category parameter was 'MainCategory.SubCategory'--&amp;gt;&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/{{Strloc_prefix|{{documentation/{{documentation/version}}/module-category}}|strloc= {{strfind_short|{{documentation/{{documentation/version}}/module-category}}|.|1|lenstr={{strlen_quick|{{documentation/{{documentation/version}}/module-category}}}}|}}-1}}|DicomToNrrdConverter]]&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/{{documentation/{{documentation/version}}/module-category}}|DicomToNrrdConverter]]&lt;br /&gt;
| }}&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer-3.6-QA-2010-04-29&amp;diff=62681</id>
		<title>Slicer-3.6-QA-2010-04-29</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer-3.6-QA-2010-04-29&amp;diff=62681"/>
		<updated>2019-11-27T14:53:31Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/wiki.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Application / CLI Modules =&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable labelpage labelpagetable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ &amp;lt;big&amp;gt;Slicer 3.6 Quality Assurance&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Score!!Name!!Documentation!!Help &amp;lt;ref&amp;gt;including link to website documentation&amp;lt;/ref&amp;gt;!!Acknowledgment &amp;lt;ref&amp;gt;including name of author and of supervisor&amp;lt;/ref&amp;gt; !!Test coverage &amp;lt;ref&amp;gt;in % for non-interactive part&amp;lt;/ref&amp;gt;!!valgrind errors!!Current Owner!!Comments &amp;lt;ref&amp;gt;Test coverage percentage determined by: [# lines code covered / total # lines of code (covered and non-covered) *100] of relevant .cxx and .h files&amp;lt;/ref&amp;gt;!!3.6 Documentation Name &amp;lt;ref&amp;gt;https://www.slicer.org/wiki/Documentation-3.6&amp;lt;/ref&amp;gt;|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;|1Gold||style=&amp;quot;width:33%&amp;quot;|my module||complete||yes and yes||yes, yes, yes||80%||0|| ||||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| DiffusionWeightedTest ||no||no||yes and yes||  69.8%   || 0||CF Westin||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:silver&amp;quot;|2Silver||style=&amp;quot;width:33%&amp;quot;| DiffusionTensorEstimation ||  complete ||yes and no||yes and yes||  79.7%   || 9 ||CF Westin||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| DiffusionTensorMathematics ||no||yes and no||yes and yes||  56.2%   || 5||CF Westin||||Diffusion Tensor Scalar Measurements||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;|1Gold||style=&amp;quot;width:33%&amp;quot;| OrientImage ||complete||yes and yes||yes and yes||  85.7%   || 0 ||Bill Lorensen||||OrientImages||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;|3Bronze||style=&amp;quot;width:33%&amp;quot;| LinearRegistration ||complete||yes and no||yes and yes||  66.7%   || 4 ||Daniel Blezek||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;|5Coal||style=&amp;quot;width:33%&amp;quot;| RigidRegistration ||complete||yes and yes||yes and yes||style=&amp;quot;background:red&amp;quot;|  1.0%   || 92 ||Daniel Blezek||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;|1Gold||style=&amp;quot;width:33%&amp;quot;| RegisterImages (RegisterImagesMultiRes) ||complete||yes and yes||yes and yes|| 83.5%  || Unknown  || Casey Goodlett, Stephen Aylward||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;|5Coal||style=&amp;quot;width:33%&amp;quot;| Fast Affine Registration ||complete||yes and no||yes and yes||style=&amp;quot;background:red&amp;quot; |1.4% || 82  || Daniel Blezek||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;|1Gold||style=&amp;quot;width:33%&amp;quot;| BSplineDeformableRegistration ||complete||yes and yes||yes and yes||  82.3%   || 6 || Bill Lorensen||||Fast Nonrigid BSpline Registration||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| TestGridTransformRegistration ||no||no||yes and yes ||  90.7%   || 0 ||Yinglin Lee||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;|3Bronze||style=&amp;quot;width:33%&amp;quot;| CheckerBoard ||complete||yes and yes||yes and yes||  67.4%   || 0 ||Bill Lorensen||||CheckerBoard Filter||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;|4Clay||style=&amp;quot;width:33%&amp;quot;| ResampleVolume ||complete||yes and yes||yes and yes||  57.1%   || 0 ||Bill Lorensen||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;|1Gold||style=&amp;quot;width:33%&amp;quot;| PolyDataToLabelmap ||complete||yes and yes||yes and yes||  87.9%   || 0 ||Nicole Aucoin, Xiaodong Tao||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;|4Clay||style=&amp;quot;width:33%&amp;quot;| GaussianBlurImageFilter ||complete||yes and no||yes and yes||  55.9%   || 0 ||Julien Jomier, Stephen Aylward||||Gaussian Blur||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;|1Gold||style=&amp;quot;width:33%&amp;quot;| ConfidenceConnected||complete||yes and no||yes and yes||  87.5%   || 0 ||Jim Miller||||Simple region growing||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| ExecutionModelTour ||no||yes and yes||yes and yes||  87.2%   || 0 ||Daniel Blezek, Bill Lorensen||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;|1Gold||style=&amp;quot;width:33%&amp;quot;| ImageReadDicomWrite ||complete||yes and yes||yes and yes||  86.1%   || 0 ||Bill Lorensen||||Create a Dicom Series||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;|3Bronze||style=&amp;quot;width:33%&amp;quot;| CurvatureAnisotropicDiffusion ||complete||yes and yes||yes and yes||  64.3%   || 0 ||Bill Lorensen||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;|3Bronze||style=&amp;quot;width:33%&amp;quot;| GradientAnisotropicDiffusion ||complete||yes and yes||yes and yes||  63.4%   || 0 ||Bill Lorensen||||GradientAnisotropicFilter||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;|4Clay||style=&amp;quot;width:33%&amp;quot;| MedianImageFilter ||complete||yes and yes||yes and yes||  51.1%   || 0 ||Bill Lorensen||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;|3Bronze||style=&amp;quot;width:33%&amp;quot;| HistogramMatching ||complete||yes and yes||yes and yes||  65.0%   || 0 ||Bill Lorensen||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| OtsuThresholdImageFilter ||no||yes and yes||yes and yes||  100%   || 0 ||Bill Lorensen||||OtsuThreshold||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;|1Gold||style=&amp;quot;width:33%&amp;quot;| OtsuThresholdSegmentation ||complete||yes and no||yes and yes||  90.9%   || 0 ||Bill Lorensen||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:silver&amp;quot;|2Silver||style=&amp;quot;width:33%&amp;quot;| Subtract ||complete||yes and yes||yes and yes||  71.7%   || 0 ||Bill Lorensen||||SubtractImages||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Multiply ||yes||yes and yes||yes and yes||  77.6%   || 0 ||Bill Lorensen||||MultiplyImages||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;|1Gold||style=&amp;quot;width:33%&amp;quot;| Add ||complete||yes and yes||yes and yes||  84.9%   || 0 ||Bill Lorensen||||AddImages||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;|3Bronze||style=&amp;quot;width:33%&amp;quot;| Threshold ||complete||yes and yes||yes and yes||  55.8%   || 0 ||Nicole Aucoin||||ThresholdImage||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;|1Gold||style=&amp;quot;width:33%&amp;quot;| Mask ||complete||yes and yes||yes and yes||  80.0%   || 0 ||Nicole Aucoin||||Mask Image||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;|5Coal||style=&amp;quot;width:33%&amp;quot;| Cast ||complete||yes and yes||yes and yes||style=&amp;quot;background:red&amp;quot;|  14.6%   || 0 ||Nicole Aucoin||||Cast Image||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;|1Gold||style=&amp;quot;width:33%&amp;quot;| VotingBinaryHoleFillingImageFilter ||complete||yes and yes||yes and yes||  100%   || 0 ||Bill Lorensen||||Voting Binary Hole Filling||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;|4Clay||style=&amp;quot;width:33%&amp;quot;| ModelMaker ||complete||yes and yes||yes and yes||  57.4%   ||  1  ||Nicole Aucoin||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| MultipleModelsExample ||no||yes and no||yes and yes||style=&amp;quot;background:red&amp;quot;|  1.9%|| 50 ||Bill Lorensen||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| GrayscaleModelMaker ||no||yes and no||yes and yes||  82.1%   || 1 ||Bill Lorensen||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;|3Bronze||style=&amp;quot;width:33%&amp;quot;| MergeModels ||yes||yes and yes||yes and yes||  62.7%   || 0 ||Nicole Aucoin, Daniel Haehn||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;|4Clay||style=&amp;quot;width:33%&amp;quot;| GrayscaleFillHoleImageFilter ||complete||yes and yes||yes and yes||  57.1%   || 0 ||Bill Lorensen||||Grayscale Fill Hole||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;|3Bronze||style=&amp;quot;width:33%&amp;quot;| GrayscaleGrindPeakImageFilter ||complete||yes and yes||yes and yes||  64.5%   || 0 ||Bill Lorensen||||Grayscale Grind Peak||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| LabelMapSmoothing ||no||yes and no||yes and yes||  87.9%   || 0 ||Dirk Padfield, Josh Cates, Ross Whitaker||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;|5Coal||style=&amp;quot;width:33%&amp;quot;| ImageLabelCombine ||complete||yes and no||yes and no||style=&amp;quot;background:red&amp;quot;|  7.5%   || 50 ||Alex Yarmarkovich||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| ResampleVolume2 ||no||yes and yes||yes and yes||style=&amp;quot;background:red&amp;quot;|  46.8%   || 0 ||Francois Budin||||Resample Scalar/Vector/DWI Volume||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| ZeroCrossingBasedEdgeDetectionImageFilter ||no||yes and no||yes and yes||  62.5%|| 0 || Elliot Uvero||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| FreesurferSurfaceSectionExtraction ||no||yes and no||yes and yes||  60.0%   || 62 || Sylvain Bouix||||n/a/||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| BRAINSDemonWarp ||complete||yes and no||yes and no|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown ||Hans Johnson, Greg Harris ||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| BRAINSFit ||complete||yes and yes||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unkown || Eun Young Kim||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| BRAINSMush ||complete||no||no|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown || Hans Johnson||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| BRAINSResample ||no||yes and yes||yes and no|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown || Hans Johnson||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| BRAINSROIAuto ||no||yes and no||yes and no|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown || Hans Johnson||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| DiffusionTensorEstimation BatchMake ||no||yes and no||yes and no|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown || Lauren O'Donnell||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| EMSegment BatchMake||complete||yes and yes||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown || Julien Jomier, Stephen Aylward, Brad Davis||||EM Segmenter batch||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Gaussian Blur BatchMake ||complete||yes and yes||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown || Julien Jomier, Stephen Aylward, Julien Finet||||Gaussian Blur batch||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| RegisterImages BatchMake ||complete||yes and yes||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown ||Stephen Aylward, Julien Finet||||Register Images batch||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| ResampleScalarVolume BatchMake ||complete||yes and yes||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown ||Julien Finet||||Resample Volume batch||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Diffeomorphic Demons Algorithm ||no||no||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown ||Tom Vercauteren, Ender Konukoglu, Kilian Pohl||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;|5Coal||style=&amp;quot;width:33%&amp;quot;| ResampleDTIVolume ||complete||yes and yes||yes and yes||  style=&amp;quot;background:red&amp;quot;| 37.0% || 0 ||Francois Budin||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Rician LMMSE Image Filter ||complete||yes and no||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown ||Antonio Tristan Vega, Santiago Aja Fernandez, Marc Niethammer||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Unbiased Non Local Means filter for DWI ||complete||yes and no||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown ||Antonio Tristán Vega, Santiago Aja-Fernandez||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Joint Rician LMMSE Image Filter ||complete||yes and no||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown ||Antonio Tristán Vega, Santiago Aja Fernández||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Extract Skeleton ||no||yes and no||no and yes||  style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown ||Pierre Seroul, Martin Styner, Guido Gerig, Stephen Aylward||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| MRI Bias Field Correction ||complete||yes and yes||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown ||Sylvain Jaume||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;|5Coal||style=&amp;quot;width:33%&amp;quot;| N4ITK MRI Bias Correction ||yes||yes and yes||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown ||Andriy Fedorov||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| ACPC Transform ||complete||yes and yes||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% || Unknown ||Nicole Aucoin||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Mesh Contour Segmentation ||complete||yes and yes||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% ||Unknown||Peter Karasev, Karol Chudy, Allen Tannenbaum||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Utah BSpline Deformable registration ||no||yes and no||yes and yes|| style=&amp;quot;background:red&amp;quot;| 0.0% ||Unknown||Sam Gerber, Jim Miller, Steve Pieper, Ross Whitaker||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Calculate Volume Statistics ||no||no||no|| style=&amp;quot;background:red&amp;quot;| 0.0% ||0||Tri Ngo||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Generate Connectivity Map ||no||no||no||style=&amp;quot;background:red&amp;quot;| 0.0%  || Unknown ||Tri Ngo||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| ROI Tract Filter ||no||no||no||style=&amp;quot;background:red&amp;quot;| 0.0%  || Unknown ||Tri Ngo||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| Stochastic Tractography Filter ||no||no||no||style=&amp;quot;background:red&amp;quot;| 0.0%  || Unknown||Tri Ngo||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:hotpink&amp;quot;|6Hazard||style=&amp;quot;width:33%&amp;quot;| MIDAS Data and Slicer Tutorials ||no||yes and no||yes and no|| style=&amp;quot;background:red&amp;quot;| 0.0% ||Unknown||Patrick Reynolds, Stephen Aylward||||n/a||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Luis Ibanez' scoring system=&lt;br /&gt;
&lt;br /&gt;
The following scoring will be applied to the '''data processing''' sections of all modules:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable labelpage labelpagetable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ &amp;lt;big&amp;gt;Slicer 3.6 Quality Assurance Scoring&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Score!!Code Coverage!!Valgrind Errors!!Documentation!!Tutorial&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold''' || &amp;gt; 80% || 0 ||yes || yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:silver&amp;quot;| '''2Silver''' || &amp;gt; 70% || &amp;lt; 10 ||yes || yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;| '''3Bronze''' || &amp;gt; 60% || &amp;lt; 50 ||yes || yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;| '''4Clay''' || &amp;gt; 50% || &amp;lt; 100 ||yes || yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;| '''5Coal''' ||style=&amp;quot;background:red&amp;quot;|&amp;lt; 50% || &amp;gt; 100 || yes || yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard''' || unknown || unknown || no || no&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The code coverage and Valgrind error must be the ones reported on the Nightly Slicer Dashboard. Anecdotal data is not acceptable.&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/Modules&amp;diff=62680</id>
		<title>Documentation/4.8/Developers/Modules</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/Modules&amp;diff=62680"/>
		<updated>2019-11-27T14:53:18Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/wiki.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TOC left}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;Slicer supports three types of modules: [[Documentation/{{documentation/version}}/Developers/Modules#Command_Line_Interface_.28CLI.29|Command Line Interface (CLI)]], [[Documentation/{{documentation/version}}/Developers/Modules#Loadable_Modules|Loadable Modules]] and [[Documentation/{{documentation/version}}/Developers/Modules#Scripted_Modules|Scripted Modules]].&lt;br /&gt;
&lt;br /&gt;
While the developer has to choose between one of the three types to implement its module, the end user will &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; notice the difference as they all share the same look &amp;amp; feel. &lt;br /&gt;
&lt;br /&gt;
The choice for a given type of module is usually based on the type of inputs/parameters for a given module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Clear|left}}&lt;br /&gt;
&lt;br /&gt;
= Command Line Interface (CLI) =&lt;br /&gt;
CLIs are standalone executables with a limited input/output arguments complexity (simple argument types, no user interactions...). They are typically implemented using [http://www.itk.org ITK].&lt;br /&gt;
* Shared lib or executable&lt;br /&gt;
* UI automatically generated&lt;br /&gt;
* Where to start ?&lt;br /&gt;
# Create initial skeleton using the [[Documentation/{{documentation/version}}/Developers/ExtensionWizard|Extension Wizard]]&lt;br /&gt;
# Read [[Documentation/{{documentation/version}}/Developers/Build_Module|Compiling slicer modules outside of the slicer source tree.]]&lt;br /&gt;
# Learn from [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Modules/CLI/ existing modules]&lt;br /&gt;
* Links:&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Training#Developing_and_contributing_extensions_for_3D_Slicer|Developing and contributing extensions for 3D Slicer]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Developers/SlicerExecutionModel|Slicer execution model]]&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/File:Slicer4_CLI.ppt CLI in Slicer4] (presentation of 2012 NAMIC AHM)&lt;br /&gt;
&lt;br /&gt;
= Loadable Modules =&lt;br /&gt;
Loadable modules are [http://en.wikipedia.org/wiki/C%2B%2B C++] plugins that are built against Slicer. They define custom GUIs for their specific behavior as they have full control over the application.&lt;br /&gt;
* C++ shared library&lt;br /&gt;
* Full control over the UI (based on [http://qt.nokia.com/products/ Qt]) and Slicer internals (MRML, logics, display managers...)&lt;br /&gt;
* Optimized for heavy computations&lt;br /&gt;
* Where to start ?&lt;br /&gt;
# Create initial skeleton using the [[Documentation/{{documentation/version}}/Developers/ExtensionWizard|Extension Wizard]]&lt;br /&gt;
# Read [[Documentation/{{documentation/version}}/Developers/Build_Module|Compiling slicer modules outside of the slicer source tree.]]&lt;br /&gt;
# Learn from [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Modules/Loadable/ existing modules]&lt;br /&gt;
* Links:&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Training#Developing_and_contributing_extensions_for_3D_Slicer|Developing and contributing extensions for 3D Slicer]]&lt;br /&gt;
**[http://www.na-mic.org/Wiki/index.php/File:LoadableModules.pptx Loadable modules] (presentation of 2012 NAMIC AHM)&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Developers/Tutorials/CreateLoadableModule|How to write a loadable module]]&lt;br /&gt;
&lt;br /&gt;
= Scripted Modules =&lt;br /&gt;
Scripted modules are written in [http://www.python.org/ Python]. &lt;br /&gt;
&lt;br /&gt;
An extensive tutorial and reference page was created [http://www.na-mic.org/Wiki/index.php/2013_Project_Week_Breakout_Session:Slicer4Python for the Slicer/Python breakout session at the NA-MIC 2014 Summer Project Week].  Please read through this and many of your questions will be answered.&lt;br /&gt;
&lt;br /&gt;
Several tutorials for developers are available from the Slicer Training page: https://www.slicer.org/wiki/Documentation/Nightly/Training#Tutorials_for_software_developers  &lt;br /&gt;
* Python Console&lt;br /&gt;
* Full access to the API: [http://www.vtk.org VTK], [http://qt.nokia.com/products/ Qt], [http://slicer.org/doc/html/annotated.html MRML and Slicer],[http://www.itk.org/SimpleITKDoxygen/html/classes.html SimpleITK] are fully wrapped&lt;br /&gt;
* Recommended for fast prototyping and custom workflow development&lt;br /&gt;
* Where to start?&lt;br /&gt;
# Read the [http://www.na-mic.org/Wiki/index.php/2013_Project_Week_Breakout_Session:Slicer4Python  Slicer/Python breakout session at the NA-MIC 2014 Summer Project Week] tutorial.&lt;br /&gt;
# Create initial skeleton using the [[Documentation/{{documentation/version}}/Developers/ExtensionWizard|Extension Wizard]]&lt;br /&gt;
# [[Media:SlicerModulesProgrammingBeyondBasics.pdf|Python scripted module design - beyond basics]]: role of widget, logic, MRML classes, using MRML node for storing module parameters, etc. (editable version: [[File:SlicerModulesProgrammingBeyondBasics.pptx]])&lt;br /&gt;
# Learn from [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Modules/Scripted/ existing modules]&lt;br /&gt;
* More information:&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Training#Developing_and_contributing_extensions_for_3D_Slicer|Developing and contributing extensions for 3D Slicer]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Developers/Python_scripting|Python Scripting]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Training#Slicer4_Programming_Tutorial|Python Scripting Tutorial]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/ScriptRepository|Community contributed examples]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Developers/Slicelets|Developing slicelets: standalone applications with simplified, fully customized user interface]]&lt;br /&gt;
&lt;br /&gt;
=Module Factory=&lt;br /&gt;
Loading modules into slicer happens in multiple steps:&lt;br /&gt;
*module factories must be registered into the factory manager&lt;br /&gt;
* directories where the modules to load are located must be passed to the factory manager&lt;br /&gt;
* Optionally specify module names to ignore&lt;br /&gt;
* scan the directories and test which file is a module and register it (not instantiated yet) &lt;br /&gt;
* Instantiate all the register modules&lt;br /&gt;
* Connect each module with the scene and the application&lt;br /&gt;
More details can be found in the [http://slicer.org/doc/html/classqSlicerAbstractModuleFactoryManager.html online doc]&lt;br /&gt;
&lt;br /&gt;
=Association of MRML nodes to modules=&lt;br /&gt;
&lt;br /&gt;
Modules can be associated with MRML nodes, which for example allows determining what module can be used to edit a certain MRML node. A module can either specify the list of node types that it supports by overriding [https://www.slicer.org/doc/html/classqSlicerAbstractCoreModule.html#a932cfab8cb00c2e770b95a97fce92670 qSlicerAbstractCoreModule::associatedNodeTypes()] method or a module can call [https://www.slicer.org/doc/html/classqSlicerCoreApplication.html#a748d8b0ab3914bded820337534a1aa76 qSlicerCoreApplication::addModuleAssociatedNodeTypes()] to associate any node type with any module.&lt;br /&gt;
&lt;br /&gt;
Multiple modules can be associated with the same MRML node type. The best module for editing a specific node instance is determined run-time. The application framework calls [https://www.slicer.org/doc/html/classqSlicerAbstractModuleWidget.html#a8e1bdbc248688677af5cd91f0849d44e qSlicerAbstractModuleWidget::nodeEditable()] for each associated module candidate and will activate the one that has the highest confidence in handling the node.&lt;br /&gt;
&lt;br /&gt;
To select a MRML node as the &amp;quot;active&amp;quot; or &amp;quot;edited&amp;quot; node in a module the module widget's [https://www.slicer.org/doc/html/classqSlicerAbstractModuleRepresentation.html#adfd05c2484d8cab8e3e9cda09e45d227 qSlicerAbstractModuleWidget::setEditedNode()] method is called.&lt;br /&gt;
&lt;br /&gt;
=ToDo - Planned developments=&lt;br /&gt;
* Transform all core modules into Loadable modules.&lt;br /&gt;
** the factory manager only support file based modules, core modules are not file based (linked into the core factory itself)&lt;br /&gt;
* Move factory registration in qSlicerApplication (or a general application library) to support module discovery/loading without needing to instantiate Slicer.&lt;br /&gt;
** Currently can't be moved into qSlicerApplication as the CLI factories that are in QTCLI depend on QTGUI&lt;br /&gt;
** QtTesting is also limited with the QTCLI dependency on QtGUI (-&amp;gt;qSlicerApplication would need to access QtTesting code from QtCli)&lt;br /&gt;
** Proposed architecture&lt;br /&gt;
 Base&lt;br /&gt;
   Application -&amp;gt; classes that are useful to build an application (mix of qSlicerCoreApplication, qSlicerApplication, Main.cxx...)&lt;br /&gt;
   Core -&amp;gt; formally QtCore&lt;br /&gt;
   Modules -&amp;gt; contains the factories and module specific code&lt;br /&gt;
      Loadable&lt;br /&gt;
      CLI&lt;br /&gt;
      Scripted&lt;br /&gt;
   Scripted -&amp;gt; all that is python specific&lt;br /&gt;
      Cxx&lt;br /&gt;
      Python&lt;br /&gt;
   Widgets -&amp;gt; formally QtGUI&lt;br /&gt;
* Add category hierarchy in the Settings module panel&lt;br /&gt;
* Register factory settings/command-options(e.g. disable-loadable-modules) when registering module factories&lt;br /&gt;
** To have the settings panel be generic but have the code proper of each registered factory somewhere else&lt;br /&gt;
* Add mechanism for modules to register dialogs (toolbars that open dialogs),  e.g. the sceneview module needs to register the sceneView dialog into an icon.&lt;br /&gt;
* &amp;lt;s&amp;gt;Ignore modules from the launcher command line.&amp;lt;/s&amp;gt; {{done}}&lt;br /&gt;
* cloning&amp;quot; of module panels at run time. See [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2012/008965.html &amp;quot;here] and [http://massmail.spl.harvard.edu/public-archives/slicer-devel/2012/008039.html here]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer3.6-documentation-email-3-24&amp;diff=62679</id>
		<title>Slicer3.6-documentation-email-3-24</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer3.6-documentation-email-3-24&amp;diff=62679"/>
		<updated>2019-11-27T14:53:14Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/wiki.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Subject: Slicer modules for the upcoming 3.6 release&lt;br /&gt;
&lt;br /&gt;
Date: Wed, 24 Mar 2010 07:58:29 -0400&lt;br /&gt;
From: Ron Kikinis &amp;lt;kikinis at bwh.harvard.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.slicer.org/wiki/Documentation-3.6#Requirements_for_Modules Dear friends,&lt;br /&gt;
&lt;br /&gt;
work has begun on the next stable release for Slicer. We are currently &lt;br /&gt;
aiming at end of May for the release. The plan is to freeze features at &lt;br /&gt;
the end of this month and to address critical bugs (which are in the bug &lt;br /&gt;
tracker) during the month of April.&lt;br /&gt;
http://www.na-mic.org/Bug/my_view_page.php&lt;br /&gt;
&lt;br /&gt;
As part of this process we are reviewing which modules to include in the &lt;br /&gt;
release. Only modules will be included which are compliant with the &lt;br /&gt;
first five bullet items listed in the page which is linked at the top of &lt;br /&gt;
this email.&lt;br /&gt;
&lt;br /&gt;
To summarize: A module has to be&lt;br /&gt;
-feature complete and work,&lt;br /&gt;
-have a test,&lt;br /&gt;
-have a meaningful documentation (targeted at biomedical scientists, not &lt;br /&gt;
computer scientists)&lt;br /&gt;
-have a meaningful help section in the module (including a link to the &lt;br /&gt;
slicer wiki)&lt;br /&gt;
-have an acknowledgment which includes author, lab and funding source&lt;br /&gt;
&lt;br /&gt;
We have started a documentation page for Slicer 3.6 by copying the 3.5 &lt;br /&gt;
pages.&lt;br /&gt;
&lt;br /&gt;
What I need you to do by Sunday 3/28 if you are the author of one or &lt;br /&gt;
more modules and or extensions:&lt;br /&gt;
-Review the modules that are assigned to you. Is that assignment &lt;br /&gt;
correct? Does the name of the module need to be changed? Is the module &lt;br /&gt;
in the correct category? Update the wiki page to reflect reality.&lt;br /&gt;
-Documentation on the wiki: copy the 3.6 documentation template onto a &lt;br /&gt;
properly renamed page, populate and update the page using the 3.5 &lt;br /&gt;
version as an update, change the link on the main documentation page and &lt;br /&gt;
remove the text saying not yet 3.6&lt;br /&gt;
https://www.slicer.org/wiki/Documentation-3.6#Modules-review the source code of the module and update help and acknowledgment.&lt;br /&gt;
-Send me an email that you are done with these steps&lt;br /&gt;
&lt;br /&gt;
What you need to do by end of April:&lt;br /&gt;
-make sure your test is green&lt;br /&gt;
-make sure your module works&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Looking forward to hear from you&lt;br /&gt;
&lt;br /&gt;
Ron&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer-3.6-QA&amp;diff=62678</id>
		<title>Slicer-3.6-QA</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer-3.6-QA&amp;diff=62678"/>
		<updated>2019-11-27T14:53:02Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/wiki.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation-3.6|Return to Slicer 3.6 documentation]]&lt;br /&gt;
&lt;br /&gt;
*This page contains our assessment of the Slicer 3.6 modules&lt;br /&gt;
&lt;br /&gt;
*See also the [http://wiki.na-mic.org/Wiki/index.php/2010_Slicer36_Module_Cull module culling event] at the end of April 2010&lt;br /&gt;
&lt;br /&gt;
= Testing Status =&lt;br /&gt;
&lt;br /&gt;
== Core Modules ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ &amp;lt;big&amp;gt;Slicer 3.6 Quality Assurance&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Score!!Name!!Documentation!!Help &amp;lt;ref&amp;gt;including link to website documentation&amp;lt;/ref&amp;gt;!!Acknowledgment &amp;lt;ref&amp;gt;including name of author and of supervisor&amp;lt;/ref&amp;gt; !!Current Owner&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Camera ||complete||yes and yes||yes and yes|| Sebastien Barre&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Welcome ||complete||yes and yes||yes and yes ||Wendy Plesniak&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Volumes ||complete||yes and yes||yes and yes ||Steve Pieper&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Diffusion Editor ||complete||yes and yes||no||  CF Westin&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Models ||complete||yes and yes||yes and yes|| Alex Yarmarkovich&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Measurements ||complete||yes and yes||yes and yes|| Nicole Aucoin&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Fiducials||complete||yes and yes||yes and yes|| Nicole Aucoin&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Data ||complete||yes and yes||yes and yes ||Steve Pieper&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Slices ||complete||yes and yes||yes and yes|| Jim Miller&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Colors ||complete||yes and yes||yes and yes|| Nicole Aucoin&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Interactive Editor ||complete||yes and yes ||yes and yes || Steve Pieper&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| ROI Module ||complete||no and yes||yes and yes|| Alex Yarmarkovich&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| Volume Rendering ||complete||yes and yes||yes and yes|| Yanling Liu&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|??||style=&amp;quot;width:33%&amp;quot;| PET/CT Fusion ||complete||yes and yes||yes and yes|| Wendy Plesniak&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Application CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
=== Version of 04-29-2010 ===&lt;br /&gt;
&lt;br /&gt;
[[Slicer-3.6-QA-2010-04-29|Slicer 3.6 QA table 2010 04 29]]&lt;br /&gt;
&lt;br /&gt;
=== Version of 05-2010 ===&lt;br /&gt;
&lt;br /&gt;
==== Part A ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable labelpage labelpagetable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ &amp;lt;big&amp;gt;Slicer 3.6 Quality Assurance&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Score!!Name&amp;lt;ref&amp;gt;list produced with the script Slicer3/Scripts/generateListOfModules.sh &amp;lt;/ref&amp;gt;!!Documentation!!Help &amp;lt;ref&amp;gt;including link to website documentation&amp;lt;/ref&amp;gt;!!Acknowledgment &amp;lt;ref&amp;gt;including name of author and of supervisor&amp;lt;/ref&amp;gt; !!Test coverage &amp;lt;ref&amp;gt;in % for non-interactive part&amp;lt;/ref&amp;gt;!!valgrind errors!!Current Owner!!Comments &amp;lt;ref&amp;gt;Test coverage percentage determined by: [# lines code covered / total # lines of code (covered and non-covered) *100] of relevant .cxx and .h files&amp;lt;/ref&amp;gt;!!3.6 Documentation Name &amp;lt;ref&amp;gt;https://www.slicer.org/wiki/Documentation-3.6&amp;lt;/ref&amp;gt;|-&lt;br /&gt;
|style=&amp;quot;background:silver&amp;quot;| '''2Silver'''||style=&amp;quot;width:33%&amp;quot;|  ACPC Transform || complete || yes and yes || yes and yes || 75%   ||  1  ||  Nicole Aucoin||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold''' ||style=&amp;quot;width:33%&amp;quot;|  Add Images   || complete||yes and yes||yes and yes || 84.9%   || 0  ||  Bill Lorensen||||AddImages||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;| '''4Clay'''||style=&amp;quot;width:33%&amp;quot;|  Affine registration (Fast Affine Registration ?) ||complete||yes and no||yes and yes ||  68.4%  || 82    || Daniel Blezek ||   ||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|   ||style=&amp;quot;width:33%&amp;quot;|  BRAINSDemonWarp ||complete||yes and no||yes and no|| 78.4% || Unknown ||Hans Johnson, Greg Harris ||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|   ||style=&amp;quot;width:33%&amp;quot;|  BRAINSFit ||complete||yes and yes||yes and yes|| 73.3% || Unknown || Eun Young Kim||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''||style=&amp;quot;width:33%&amp;quot;|  BRAINSResample ||no||yes and yes||yes and no|| 76.7% || Unknown || Hans Johnson||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''||style=&amp;quot;width:33%&amp;quot;|  BRAINSROIAuto ||no||yes and no||yes and no|| xx || Unknown || Hans Johnson||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''||style=&amp;quot;width:33%&amp;quot;|  BRAINSVectorDemonWarping   ||no||yes and no||yes and no|| xx || Unknown || Hans Johnson||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;| '''5Coal''' ||style=&amp;quot;width:33%&amp;quot;|   Cast Image  ||complete||yes and yes||yes and yes|| 24.1%   ||0 ||Nicole Aucoin||||Cast Image||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;| '''3Bronze'''||style=&amp;quot;width:33%&amp;quot;|  CheckerBoard Filter ||complete||yes and yes||yes and yes||  67.4%   ||0  ||Bill Lorensen||||CheckerBoard Filter||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;| '''5Coal'''||style=&amp;quot;width:33%&amp;quot;|  Create a DICOM Series   || complete||yes and yes||yes and yes||  86.1% || 124 ||Bill Lorensen||||Create a Dicom Series||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;| '''3Bronze'''||style=&amp;quot;width:33%&amp;quot;|  Curvature Anisotropic Diffusion  ||complete||yes and yes||yes and yes||  64.3%   || 0 ||Bill Lorensen||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|   ||style=&amp;quot;width:33%&amp;quot;|  Deformable BSpline registration ||complete||yes and yes||yes and yes||  82.3%   || xx || Bill Lorensen||||Fast Nonrigid BSpline Registration||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;| '''5Coal''' ||style=&amp;quot;width:33%&amp;quot;|  Dicom to Nrrd Converter   ||complete  || yes and yes|| yes and yes  ||  35.8%  ||  0  ||  Xiaodong Tao |||| same ||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:silver&amp;quot;| '''2Silver'''||style=&amp;quot;width:33%&amp;quot;|  Diffusion Tensor Estimation  ||  complete ||yes and no||yes and yes||  79.7%   || 9 ||CF Westin||||same||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''||style=&amp;quot;width:33%&amp;quot;|  Diffusion Tensor Scalar Measurements ||no||yes and no||yes and yes||  56.2%   || 5||CF Westin||||Diffusion Tensor Scalar Measurements||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|   ||style=&amp;quot;width:33%&amp;quot;|  EMSegment BatchMake   || complete ||yes and yes || yes and yes  ||  TBF   || TBF  ||  Stephen Aylward, Brad Davis, Julien Jomier, Julien Finet  ||Batch Processing not in 3.6 RC2? ||EMSegmentBatch ||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|   ||style=&amp;quot;width:33%&amp;quot;|  EMSegment Command-line   ||complete  ||yes and yes || yes and yes  ||  TBF   || TBF  ||  Kilian Pohl ||documentation link in xml/GUI needs revising||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|   ||style=&amp;quot;width:33%&amp;quot;|  EMSegment Simple   ||complete  ||yes and yes ||yes and yes   ||  TBF   || TBF  ||  Kilian Pohl || ||EMSegmenter&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''  ||style=&amp;quot;width:33%&amp;quot;|  Execution Model Tour   || no || yes and yes||yes and yes   ||  88.2%   || 0  || Daniel Blezek, Bill Lorensen ||No 3.6 documentation (3.4 only)||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''||style=&amp;quot;width:33%&amp;quot;|  Extract Skeleton ||no||yes and no||no and yes||   0.0% || Unknown ||Pierre Seroul, Martin Styner, Guido Gerig, Stephen Aylward||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|   ||style=&amp;quot;width:33%&amp;quot;|  Gaussian Blur BatchMake   || complete ||yes and yes ||  yes and yes ||  TBF   || TBF  || Julien Jomier, Stephen Aylward||Batch Processing not in 3.6 RC2?  ||||GaussianBlurBatch&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;| '''4Clay'''||style=&amp;quot;width:33%&amp;quot;|  Gaussian Blur ||complete||yes and no||yes and yes||  55.9%   || 0 ||Julien Jomier, Stephen Aylward||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;| '''3Bronze''' ||style=&amp;quot;width:33%&amp;quot;|  Gradient Anisotropic Diffusion  ||complete||yes and yes||yes and yes||  63.4%   || 0 ||Bill Lorensen||||GradientAnisotropicFilter||&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;| '''4Clay'''||style=&amp;quot;width:33%&amp;quot;|  Grayscale Fill Hole ||complete||yes and yes||yes and yes||  57.1%   || 0 ||Bill Lorensen||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;| '''3Bronze'''||style=&amp;quot;width:33%&amp;quot;|  Grayscale Grind Peak ||complete||yes and yes||yes and yes||  64.5%   || 0 ||Bill Lorensen||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold'''  ||style=&amp;quot;width:33%&amp;quot;|  Grayscale Model Maker   || complete ||yes and yes || yes and yes ||  82.1%   || 0  ||  Bill Lorensen ||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;| '''3Bronze''' ||style=&amp;quot;width:33%&amp;quot;|  Histogram Matching   || complete ||yes and yes || yes and yes  ||65%   || 0  ||  Bill Lorensen, Xiaodong Tao ||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;| '''5Coal''' ||style=&amp;quot;width:33%&amp;quot;|  Image Label Combine   || complete ||yes and yes || yes and yes   ||  7.5%   || 50  ||  Alex Yarmarkovich||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|   ||style=&amp;quot;width:33%&amp;quot;|  Joint Rician LMMSE Image Filter   || complete ||yes and yes || yes and yes   ||  TBF   || TBF  ||  Antonio Tristán Vega, Santiago Aja-Fernandez ||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|   ||style=&amp;quot;width:33%&amp;quot;|  Labelmap Seeding   || complete ||yes and yes || yes and yes   ||  TBF   || TBF  ||  Raul San Jose Estepar ||||Label Seeding&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''||style=&amp;quot;width:33%&amp;quot;|  Label Map Smoothing   || no ||yes and no ||yes and yes   ||  TBF   || TBF  ||  Dirk Padfield, Josh Cates, Ross Whitaker ||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''||style=&amp;quot;width:33%&amp;quot;|  Linear registration   || no || yes and no||yes and yes   ||  66.7%   || 45  ||Daniel Blezek||sum of all errors from LinearRegistrationTest&amp;lt;n&amp;gt; tests|| same&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Part B ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable labelpage labelpagetable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ &amp;lt;big&amp;gt;Slicer 3.6 Quality Assurance&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Score!!Name&amp;lt;ref&amp;gt;list produced with the script Slicer3/Scripts/generateListOfModules.sh &amp;lt;/ref&amp;gt;!!Documentation!!Help &amp;lt;ref&amp;gt;including link to website documentation&amp;lt;/ref&amp;gt;!!Acknowledgment &amp;lt;ref&amp;gt;including name of author and of supervisor&amp;lt;/ref&amp;gt; !!Test coverage &amp;lt;ref&amp;gt;in % for non-interactive part&amp;lt;/ref&amp;gt;!!valgrind errors!!Current Owner!!Comments &amp;lt;ref&amp;gt;Test coverage percentage determined by: [# lines code covered / total # lines of code (covered and non-covered) *100] of relevant .cxx and .h files&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Valgrind errors determined through use of runValgrindForOneModule.sh script in Slicer3-build/Scripts directory; dependent upon module testing script being found in Slicer-3-build/bin/ directory&amp;lt;/ref&amp;gt;!!3.6 Documentation Name &amp;lt;ref&amp;gt;https://www.slicer.org/wiki/Documentation-3.6&amp;lt;/ref&amp;gt;|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold'''||style=&amp;quot;width:33%&amp;quot;|  Mask Image   ||complete||yes and yes||yes and yes||  82%  || 0  ||  Nicole Aucoin ||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;| '''4Clay'''||style=&amp;quot;width:33%&amp;quot;|  Median Filter   ||complete||yes and yes||yes and yes||  57%   || 0  ||  Bill Lorensen |||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold'''||style=&amp;quot;width:33%&amp;quot;|  Merge Models   ||complete||yes and yes||yes and yes||  87%   || 0  ||Nicole Aucoin ||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;| '''5Coal''' ||style=&amp;quot;width:33%&amp;quot;|  Mesh Contour Segmentation   ||complete||yes and yes||yes and yes||  5.1%   || 0 |||Peter Karasev ||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;| '''5Coal'''||style=&amp;quot;width:33%&amp;quot;|  Model Maker   ||complete||yes and yes||yes and yes||  41%   || 0  ||  Nicole Aucoin||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|  ||style=&amp;quot;width:33%&amp;quot;|  MRI Bias Field Correction   ||complete||yes and yes||yes and yes||  71%   || TBF  ||  Sylavin Jaume||  ||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;| '''5Coal'''||style=&amp;quot;width:33%&amp;quot;|  Multiple models example   ||no||yes and no||yes and yes||  2.5%  || 50  || Bill Lorensen||||n/a&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold'''||style=&amp;quot;width:33%&amp;quot;|  Multiply Images   ||complete||yes and yes||yes and yes||  80%   || 0  || Harini Veeraraghavan||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold'''||style=&amp;quot;width:33%&amp;quot;|  N4ITK MRI Bias correction   ||complete||yes and yes||yes and yes||  84%  || 0  ||  Andriy Fedorov|||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold'''||style=&amp;quot;width:33%&amp;quot;|  Orient Images   ||complete||yes and yes||yes and yes||  88%   || 0  ||  Xiaodong Tao||  ||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold'''||style=&amp;quot;width:33%&amp;quot;|  Otsu Threshold Segmentation   ||complete||yes and no||yes and yes|| 91%   || 0 ||  Bill Lorensen||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold'''||style=&amp;quot;width:33%&amp;quot;|  Otsu Threshold   ||complete||yes and no||yes and yes||  100%   || 0  ||  Bill Lorensen||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold'''||style=&amp;quot;width:33%&amp;quot;|  PolyData To Label Map   ||complete||yes and yes||yes and yes||  89%   || 0  ||  Xiaodong Tao, Nicole Aucoin||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard''' ||style=&amp;quot;width:33%&amp;quot;|  Register Images BatchMake   ||complete||yes and yes||yes and yes||  TBF   || TBF  ||  Julien Finet, Stephen Aylward||no testing script found in Slicer3-build/bin  ||Register Images batch&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard''' ||style=&amp;quot;width:33%&amp;quot;|  Register Images MultiRes (Experimental)   ||complete||yes and yes||yes and yes||49.5% || TBF  ||Casey Goodlett||no testing script found in Slicer3-build/bin ||Robust Multiresolution Affine Registration&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard''' ||style=&amp;quot;width:33%&amp;quot;|  Register Images   ||complete||yes and yes||yes and yes||  0%   || TBF  ||  Casey Goodlett ||no testing script found in Slicer3-build/bin||Expert Automated Registration&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;| '''5Coal'''||style=&amp;quot;width:33%&amp;quot;|  Resample DTI Volume   ||complete||yes and yes||yes and yes||  41%  || 0  ||  Francois Budin|| ||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;| '''5Coal'''||style=&amp;quot;width:33%&amp;quot;|  Resample Scalar/Vector/DWI Volume   ||complete||yes and yes||yes and yes||  43%  || 0  ||  Francois Budin||  ||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:white&amp;quot;|    ||style=&amp;quot;width:33%&amp;quot;|  Resample Scalar Volume BatchMake   ||complete||yes and yes||yes and yes||  TBF   || TBF  ||  Julien Finet || no testing script found in Slicer3-build/bin ||Resample Volume batch&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard''' ||style=&amp;quot;width:33%&amp;quot;|  Rician LMMSE Image Filter   ||complete||yes and no||yes and yes||  20.5%   || TBF  ||  Antonio Tristán Vega, Santiago Aja-Fernandez, Marc Niethammer || no testing script found in Slicer3-build/bin ||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;| '''3Bronze''' ||style=&amp;quot;width:33%&amp;quot;|  Rigid registration   ||complete||yes and yes||yes and yes|| 61%  || 0  ||  Jim Miller|| ||Fast Rigid Registration&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard''' ||style=&amp;quot;width:33%&amp;quot;|  Robust Statistics Segmentation   ||complete||yes and yes||yes and yes||  82.3%   || TBF  ||  Yi Gao ||no testing script found in Slicer3-build/bin||RobustStatisticsSeg&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''||style=&amp;quot;width:33%&amp;quot;|  ROISelect   ||complete||yes and no || yes and yes ||  TBF   || TBF  ||  Lauren O'Donnell||no testing script found in Slicer3-build/bin  ||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard''' ||style=&amp;quot;width:33%&amp;quot;|  Simple DWI IO Test   || no || yes and no|| yes and yes||  TBF   || TBF  ||  Raul San Jose ||no testing script found in Slicer3-build/bin||n/a&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''||style=&amp;quot;width:33%&amp;quot;|  Simple IO Test   ||no || yes and no|| yes and yes||  TBF   || TBF  ||  Bill Lorensen||no testing script found in Slicer3-build/bin||n/a&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard''' ||style=&amp;quot;width:33%&amp;quot;|  Simple region growing   ||complete||yes and no||yes and yes||  TBF   || TBF  ||  Jim Miller, Harini Veeraraghavan ||no testing script found in Slicer3-build/bin||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:silver&amp;quot;| '''2Silver'''||style=&amp;quot;width:33%&amp;quot;|  Subtract Images   ||complete||yes and yes||yes and yes||  76%   || 0  ||  Harini Veeraraghavan ||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''||style=&amp;quot;width:33%&amp;quot;|  Test GridTransform registration   || no|| yes and no||yes and yes||  100%   || 0  ||  Yinglin Lee ||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;| '''4Clay'''||style=&amp;quot;width:33%&amp;quot;|  Threshold Image   ||complete||yes and yes||yes and yes||  59%  || 0  ||  Nicole Aucoin||||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard''' ||style=&amp;quot;width:33%&amp;quot;|  Transform From Fiducials   ||complete||yes and yes||yes and yes||  TBF   || TBF  ||  Casey Goodlett||no testing script found in Slicer3-build/bin||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard'''||style=&amp;quot;width:33%&amp;quot;|  Unbiased Non Local Means filter for DWI   ||complete||yes and no||yes and yes||  20.5%   || TBF  || Antonio Tristán Vega, Santiago Aja-Fernandez|| no testing script found in Slicer3-build/bin ||same&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold'''||style=&amp;quot;width:33%&amp;quot;|  Voting Binary Hole Filling   ||complete||yes and yes||yes and yes||  100%  || 0  ||  Jim Miller|| ||same&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Testing Partition =&lt;br /&gt;
&lt;br /&gt;
Most Slicer modules have a '''GUI component''' and a '''Data Processing''' component.&lt;br /&gt;
&lt;br /&gt;
Testing GUI components is still a challenge, so we will focus here on testing the '''Data Processing''' components. This can be done in most cases by partitioning the module into a GUI section and a Data Processing section, where the second one usually takes the form of a C++ class (although that is not a requirement).&lt;br /&gt;
&lt;br /&gt;
The '''data processing''' section can be tested by using standard CTest/CMake mechanisms. Basically by adding ADD_TEST() entries to the CMakeLists.txt file of the module.&lt;br /&gt;
&lt;br /&gt;
More information:&lt;br /&gt;
*[[Slicer3:Testing|Slicer3 Testing]]&lt;br /&gt;
*[http://www.na-mic.org/Wiki/index.php/NA-MIC-kit-curriculum/Testing-Based_Programming/How_to_run_Code_Coverage How to run Code Coverage]&lt;br /&gt;
*[http://www.na-mic.org/Wiki/index.php/NA-MIC-kit-curriculum/Testing-Based_Programming/How_to_run_Dynamic_Analysis How to run Dynamic Analysis (valgrind)]&lt;br /&gt;
&lt;br /&gt;
=Luis Ibanez' scoring system=&lt;br /&gt;
&lt;br /&gt;
The following scoring will be applied to the '''data processing''' sections of all modules:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable labelpage labelpagetable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ &amp;lt;big&amp;gt;Slicer 3.6 Quality Assurance Scoring&amp;lt;/big&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Score!!Code Coverage!!Valgrind Errors!!Documentation!!Tutorial&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:gold&amp;quot;| '''1Gold''' || &amp;gt; 80% || 0 ||yes || yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:silver&amp;quot;| '''2Silver''' || &amp;gt; 70% || &amp;lt; 10 ||yes || yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkgoldenrod&amp;quot;| '''3Bronze''' || &amp;gt; 60% || &amp;lt; 50 ||yes || yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:darkorange&amp;quot;| '''4Clay''' || &amp;gt; 50% || &amp;lt; 100 ||yes || yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:black&amp;quot;| '''5Coal''' ||style=&amp;quot;background:red&amp;quot;|&amp;lt; 50% || &amp;gt; 100 || yes || yes&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:white; background:hotpink&amp;quot;| '''6Hazard''' || unknown || unknown || no || no&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The code coverage and Valgrind error must be the ones reported on the Nightly Slicer Dashboard. Anecdotal data is not acceptable.&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/Tutorials/MigrationGuide/Slicer&amp;diff=62677</id>
		<title>Documentation/4.8/Developers/Tutorials/MigrationGuide/Slicer</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/Tutorials/MigrationGuide/Slicer&amp;diff=62677"/>
		<updated>2019-11-27T14:53:01Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Migration Guide ==&lt;br /&gt;
&lt;br /&gt;
===Slicer 4.8: Application: isRelease() function not available or deprecated===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Error message similar to:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    Missing/deprecated qSlicerCoreApplication::isRelease()&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
    Missing/deprecated slicer.app.isRelease()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;tt&amp;gt;qSlicerCoreApplication::releaseType() == &amp;quot;Stable&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Summary:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to rXYZ, the variable &amp;lt;tt&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/tt&amp;gt; was used to check if a &amp;quot;stable release&amp;quot; was built. The variable value&lt;br /&gt;
was set by updating the sources and defining the variable to an integer greater or equal to 0. In other word, if the variable&lt;br /&gt;
evaluated to an empty string, a nighty or experimental build was being done, if it evaluated to an integer, a stable release build&lt;br /&gt;
was being done.&lt;br /&gt;
&lt;br /&gt;
The approach had few issues:&lt;br /&gt;
* the name of the variable was confusing&lt;br /&gt;
* identifying a &amp;quot;stable release&amp;quot; only from a source tree revision was not enough. Indeed the environment defining a &amp;quot;release&amp;quot; is the one found on the build machines used to generate the installer.&lt;br /&gt;
* nightly build are also considered as release&lt;br /&gt;
&lt;br /&gt;
To address this, the CMake variable &amp;lt;tt&amp;gt;Slicer_RELEASE_TYPE&amp;lt;/tt&amp;gt; was introduced. As of 2017-10-04, it can be set to &amp;lt;tt&amp;gt;Experimental&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Nightly&amp;lt;/tt&amp;gt;&lt;br /&gt;
or &amp;lt;tt&amp;gt;Stable&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;Experimental&amp;lt;/tt&amp;gt; being the value hard-coded in the source.&lt;br /&gt;
&lt;br /&gt;
Identifying a build as &amp;quot;stable&amp;quot; is now explicitly done by setting &amp;lt;tt&amp;gt;Slicer_RELEASE_TYPE&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;Stable&amp;lt;/tt&amp;gt; at configure time.&lt;br /&gt;
&lt;br /&gt;
Also, since the concept of release types was introduced, the function &amp;lt;tt&amp;gt;isRelease()&amp;lt;/tt&amp;gt; has been removed in favor of &amp;lt;tt&amp;gt;releaseType()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;References:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://github.com/Slicer/Slicer/pull/354&lt;br /&gt;
&lt;br /&gt;
===Slicer Python Module: modulewidget and others removed.===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Summary&amp;lt;/b&amp;gt;&lt;br /&gt;
Python classes formerly in &amp;quot;slicer.moduledm&amp;quot;, &amp;quot;slicer.modulelogic&amp;quot;,  &amp;quot;slicer.modulemrml&amp;quot;&lt;br /&gt;
and &amp;quot;slicer.modulewidget&amp;quot; are now directly available in the slicer module.&lt;br /&gt;
&lt;br /&gt;
See example of change [https://github.com/QIICR/LongitudinalPETCT/pull/11 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Rational:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See comments in commit messages referenced blow.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;References:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://github.com/Slicer/Slicer/commit/628f83fe7a6f4e0710e306bcaf7c04b9e3e5e6bd&lt;br /&gt;
&lt;br /&gt;
https://github.com/Slicer/Slicer/commit/9cb5668fde1abc8f0430a91ca37fc29277ceeb4e&lt;br /&gt;
&lt;br /&gt;
===MRML: Slicer 4.6: Moved up vtkMRMLStorableNode in the MRML node hierarchy.===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Rational:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vtkMRMLStorableNode is not a children of vtkMRMLTransformable node anymore,&lt;br /&gt;
but directly a children of vtkMRMLNode.&lt;br /&gt;
    &lt;br /&gt;
This allows making a node storable without requiring it to be also&lt;br /&gt;
transformable. It is important for several node types (color maps, tables,&lt;br /&gt;
etc), which require separate storage node but are not transformable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;References:&amp;lt;/b&amp;gt;&lt;br /&gt;
* Changed introduced in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=24891 r24891]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Error message similar to:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    /tmp/LongitudinalPETCT/MRML/vtkMRMLLongitudinalPETCTStudyNode.cxx: In member function ‘void vtkMRMLLongitudinalPETCTStudyNode::ObserveRegistrationTransform(bool)’:&lt;br /&gt;
    /tmp/LongitudinalPETCT/MRML/vtkMRMLLongitudinalPETCTStudyNode.cxx:478:28: error: ‘class vtkMRMLVolumePropertyNode’ has no member named ‘GetParentTransformNode’&lt;br /&gt;
                   &amp;amp;&amp;amp; propNode-&amp;gt;GetParentTransformNode()&lt;br /&gt;
                                ^&lt;br /&gt;
    /tmp/LongitudinalPETCT/MRML/vtkMRMLLongitudinalPETCTStudyNode.cxx:480:23: error: ‘class vtkMRMLVolumePropertyNode’ has no member named ‘SetAndObserveTransformNodeID’&lt;br /&gt;
                 propNode-&amp;gt;SetAndObserveTransformNodeID(&lt;br /&gt;
                           ^&lt;br /&gt;
    /tmp/LongitudinalPETCT/MRML/vtkMRMLLongitudinalPETCTStudyNode.cxx:503:23: error: ‘class vtkMRMLVolumePropertyNode’ has no member named ‘SetAndObserveTransformNodeID’&lt;br /&gt;
                 propNode-&amp;gt;SetAndObserveTransformNodeID(NULL);&lt;br /&gt;
                           ^&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes lines and/or refactor code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MRML: Slicer 4.5: Introduction of vtkMRMLLabelMapVolumeNode===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Rational:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before &amp;lt;tt&amp;gt;vtkMRMLScalarVolumeNode&amp;lt;/tt&amp;gt; was used for both scalar and label map&lt;br /&gt;
volumes and the LabelMap custom MRML node attribute was used for&lt;br /&gt;
distinguishing between them (0=scalar; 1=label map volume).&lt;br /&gt;
&lt;br /&gt;
This made conversion between labelmap/scalar volumes very easy but made&lt;br /&gt;
it difficult to customize behavior, display, processing of segmentation&lt;br /&gt;
information.&lt;br /&gt;
&lt;br /&gt;
Now a new &amp;lt;tt&amp;gt;vtkMRMLLabelMapVolumeNode&amp;lt;/tt&amp;gt; class is used for storing segmentation&lt;br /&gt;
information (still using &amp;lt;tt&amp;gt;vtkMRMLScalarVolume&amp;lt;/tt&amp;gt; used as base class for backward&lt;br /&gt;
compatibility; but in the future the base class may be changed to reflect&lt;br /&gt;
that segmentation can be represented in various ways, not just as volumes).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Error message similar to:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  error: ‘class vtkMRMLScalarVolumeNode’ has no member named ‘SetLabelMap’&lt;br /&gt;
     outputVolumeNode-&amp;gt;SetLabelMap(1);&lt;br /&gt;
                       ^&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution (part1: down cast to &amp;lt;tt&amp;gt;vtkMRMLLabelMapVolumeNode&amp;lt;/tt&amp;gt;, remove call to &amp;lt;tt&amp;gt;SetLabelMap&amp;lt;/tt&amp;gt;)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace lines like:&lt;br /&gt;
&lt;br /&gt;
     vtkMRMLNode* outputNode = d-&amp;gt;OutputLabelVolumeMRMLNodeComboBox-&amp;gt;currentNode();&lt;br /&gt;
     vtkMRMLScalarVolumeNode* outputVolumeNode = vtkMRMLScalarVolumeNode::SafeDownCast(outputNode);&lt;br /&gt;
     [...]&lt;br /&gt;
     outputVolumeNode-&amp;gt;SetLabelMap(1);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
     vtkMRMLLabelMapVolumeNode* outputVolumeNode =&lt;br /&gt;
       vtkMRMLLabelMapVolumeNode::SafeDownCast(d-&amp;gt;OutputLabelVolumeMRMLNodeComboBox-&amp;gt;currentNode());&lt;br /&gt;
     [...]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution (part2: Update UI file):&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace lines like:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;widget class=&amp;quot;qMRMLNodeComboBox&amp;quot; name=&amp;quot;InputLabelVolumeMRMLNodeComboBox&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;property name=&amp;quot;nodeTypes&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;stringlist&amp;gt;&lt;br /&gt;
     &amp;lt;string&amp;gt;vtkMRMLScalarVolumeNode&amp;lt;/string&amp;gt;&lt;br /&gt;
    &amp;lt;/stringlist&amp;gt;&lt;br /&gt;
   &amp;lt;/property&amp;gt;&lt;br /&gt;
   [...]&lt;br /&gt;
  &amp;lt;/widget&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;widget class=&amp;quot;qMRMLNodeComboBox&amp;quot; name=&amp;quot;InputLabelVolumeMRMLNodeComboBox&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;property name=&amp;quot;nodeTypes&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;stringlist&amp;gt;&lt;br /&gt;
     &amp;lt;string&amp;gt;vtkMRMLLabelMapVolumeNode&amp;lt;/string&amp;gt;      &amp;lt;------------- Update Here&lt;br /&gt;
    &amp;lt;/stringlist&amp;gt;&lt;br /&gt;
   &amp;lt;/property&amp;gt;&lt;br /&gt;
   [...]&lt;br /&gt;
  &amp;lt;/widget&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution (part3: Update node selector configuration):&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace lines like:&lt;br /&gt;
&lt;br /&gt;
  nodeSelector.setNodeTypes(QStringList(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;));&lt;br /&gt;
  nodeSelector.addAttribute(&amp;quot;vtkMRMLScalarVolumeNode&amp;quot;, &amp;quot;LabelMap&amp;quot;, &amp;quot;1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
  nodeSelector.setNodeTypes(QStringList(&amp;quot;vtkMRMLLabelMapVolumeNode&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;References:&amp;lt;/b&amp;gt;&lt;br /&gt;
* https://www.slicer.org/wiki/Documentation/Labs/Segmentations#vtkMRMLLabelMapVolumeNode_integration* http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=24291&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CLI: Slicer 4.3: Add ITKFactoryRegistration library centralizing ITK IO factory registration===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Rational:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Linking against &amp;lt;tt&amp;gt;ITKFactoryRegistration&amp;lt;/tt&amp;gt; ensures that ITK IO factory are properly registered on all supported platforms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Error message similar to:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Undefined symbols for architecture x86_64:&lt;br /&gt;
  &amp;quot;itk::itkFactoryRegistration()&amp;quot;, referenced from:&lt;br /&gt;
  _main in ImageMakerTest.cxx.o&lt;br /&gt;
  ld: symbol(s) not found for architecture x86_64&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Solution:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace lines like:&lt;br /&gt;
&lt;br /&gt;
  target_link_libraries(${CLP}Test ${CLP}Lib)&lt;br /&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
  target_link_libraries(${CLP}Test ${CLP}Lib ${SlicerExecutionModel_EXTRA_EXECUTABLE_TARGET_LIBRARIES})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;References:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21592&lt;br /&gt;
* https://issues.slicer.org/view.php?id=2813&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/Tutorials/CreateExtension&amp;diff=62676</id>
		<title>Documentation/4.8/Developers/Tutorials/CreateExtension</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/Tutorials/CreateExtension&amp;diff=62676"/>
		<updated>2019-11-27T14:52:55Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. Create repo on github&lt;br /&gt;
&lt;br /&gt;
2. Clone repo locally&lt;br /&gt;
&lt;br /&gt;
Copy/Paste Slicer4/Extensions/CLIExtensionTemplate.s4ext at the root directory of your local repo&lt;br /&gt;
Copy/Paste Slicer4/Extensions/Testing/CLIExtensionTemplate at the root directory of your local repo&lt;br /&gt;
Rename CLIExtensionTemplate into Modules/CLI/ImageMaker&lt;br /&gt;
Rename all the files and CMakeLists.txt&lt;br /&gt;
&lt;br /&gt;
Add license to files&lt;br /&gt;
&lt;br /&gt;
Edit your CLI&lt;br /&gt;
&lt;br /&gt;
Build your extension&lt;br /&gt;
&lt;br /&gt;
Open Slicer and in Application Settings, add build path to Slicer&lt;br /&gt;
&lt;br /&gt;
Restart and reopen Slicer with module&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; debug ( Slicer.exe --VisualStudio Slicer.sln  and breakpoints in CLI).&lt;br /&gt;
&lt;br /&gt;
Push code to github:&lt;br /&gt;
  Extension icon: https://raw.github.com/finetjul/QuickTools/master/Resources/QuickToolsLogo.png&lt;br /&gt;
&lt;br /&gt;
Edit .s4xt&lt;br /&gt;
&lt;br /&gt;
Set MIDAS_PACKAGE_EMAIL and MIDAS_PACKAGE_API&lt;br /&gt;
&lt;br /&gt;
Build ExperimentalUpload&lt;br /&gt;
&lt;br /&gt;
Create:&lt;br /&gt;
   https://www.slicer.org/wiki/Documentation/Nightly/Modules/ImageMaker   https://www.slicer.org/wiki/Documentation/Nightly/Extensions/QuickToolsEdit:&lt;br /&gt;
   https://www.slicer.org/wiki/Documentation/Nightly/Extensions#Cat_2Remove module path from Application Settings&lt;br /&gt;
Open Extension Manager&lt;br /&gt;
Download experimental extension&lt;br /&gt;
-&amp;gt; works !&lt;br /&gt;
Edit s4xt with screenshots URLS made for the doc wiki pages.&lt;br /&gt;
go to https://github.com/Slicer/ExtensionsIndex&lt;br /&gt;
Fork it&lt;br /&gt;
git clone it&lt;br /&gt;
git checkout -b add-QuickTools&lt;br /&gt;
git gui&lt;br /&gt;
git push origin add-QuickTools&lt;br /&gt;
on github, do the pull request.&lt;br /&gt;
...&lt;br /&gt;
check dashboards.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/ImageGallery/Data&amp;diff=62674</id>
		<title>Documentation/4.8/Developers/ImageGallery/Data</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Developers/ImageGallery/Data&amp;diff=62674"/>
		<updated>2019-11-27T14:52:50Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;includeonly&amp;gt;Id,Category,Name,Caption&lt;br /&gt;
1,Slicer,SlicerWithVolumeRendering.png,Slicer4 with Volume Rendering enabled&lt;br /&gt;
2,Slicer,SlicerWithDTI.png,Slicer4 with a Diffusion Tensor Volume loaded&lt;br /&gt;
3,Slicer,SlicerQT-2009-12-10.png,Slicer with Qt only&lt;br /&gt;
4,Slicer,SlicerWithTransformModule.png,Slicer with KWWidgets + Qt&lt;br /&gt;
5,Slicer,Screenshot-Qt Designer.png,Qt Designer to design modules&lt;br /&gt;
6,Modules,QSlicerVolumeRenderingModule.png,Volume Rendering Module&lt;br /&gt;
7,Modules,QSlicerSampleDataModule.png,Sample Data Module&lt;br /&gt;
8,Modules,QSlicerEndoscopyModule.png,Endoscopy Module&lt;br /&gt;
9,Modules,QSlicerSceneViewsModule.png,SceneViews Module&lt;br /&gt;
10,Modules,QSlicerEditorModule.png,Editor Module&lt;br /&gt;
11,Modules,QSlicerModelsModule.png,Models Module&lt;br /&gt;
12,Modules,QSlicerColorModuleWidget.png,Color Module&lt;br /&gt;
13,Modules,QSlicerVolumesModule.png,Volumes Module&lt;br /&gt;
14,Modules,QSlicerDiffusionTensorVolumeDisplayWidget.png,Volumes Module (DTI volume)&lt;br /&gt;
15,Modules,QSlicerSliceControllersModule.png,Slice Controllers Module&lt;br /&gt;
16,Modules,QSlicerDataModule.png,Data Module&lt;br /&gt;
17,Modules,QSlicerROIModule.png,ROI Module&lt;br /&gt;
18,Modules,qSlicerTractographyModule.png,Tractography Module&lt;br /&gt;
19,Modules,QCLIModule-LinearRegistration.png,Linear Registration Module (CLI)&lt;br /&gt;
20,Modules,QSlicerWelcomeModule.png,Welcome Module&lt;br /&gt;
21,Modules,qSlicerCamerasModule.png,Cameras Module&lt;br /&gt;
22,Modules,QSlicerTransformsModuleUI.png,Transforms Module&lt;br /&gt;
23,Dialogs,QSlicerExtensionsWizard.png,Extensions Management dialog&lt;br /&gt;
24,Dialogs,QSlicerSettingsDialog.png,Application settings dialog&lt;br /&gt;
25,Dialogs,QMRMLColorPickerDialog.png,Color picker dialog&lt;br /&gt;
26,Dialogs,QSlicerActionsDialog.png,Shortcuts dialog&lt;br /&gt;
27,Dialogs,QSlicerVolumesIODialog.png,Standard File Dialog (using Volumes reader)&lt;br /&gt;
28,Dialogs,QSlicerOverlayIODialog.png,Standard File Dialog (using Scalar Overlay reader)&lt;br /&gt;
29,Dialogs,QSlicerStandardFileDialog.png,Standard File Dialog&lt;br /&gt;
30,Dialogs,QSlicerDataDialog.png,Add Data Dialog&lt;br /&gt;
31,Dialogs,QSlicerSaveDataDialog.png,Save Data Dialog&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url={{fullurl:Special:GetData/Documentation/{{documentation/version}}/Developers/ImageGallery/Data}}&lt;br /&gt;
|format=CSV with header|data=id=Id,category=Category,name=Name,caption=Caption}}&lt;br /&gt;
{| class=&amp;quot;sortable alternate&amp;quot;&lt;br /&gt;
! Id&lt;br /&gt;
! Category&lt;br /&gt;
! Name&lt;br /&gt;
! Caption {{#for_external_table:&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{{id}}}&lt;br /&gt;
{{!}} {{{category}}}&lt;br /&gt;
{{!}} {{{name}}}&lt;br /&gt;
{{!}} {{{caption}}} }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
An attempt to use &amp;quot;#tag: gallery&amp;quot; [1] to generate automatically the Image gallery table used in [1] &lt;br /&gt;
has been considered. It simply failed.&lt;br /&gt;
&lt;br /&gt;
Semantic mediawiki should probably be used. See https://www.mediawiki.org/wiki/Extension:Semantic_Result_Formats&lt;br /&gt;
&lt;br /&gt;
For reference, you will find below this attempt:\&lt;br /&gt;
&lt;br /&gt;
// -------------------------&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url={{fullurl:Special:GetData/Documentation/{{documentation/version}}/Developers/ImageGallery/Data}}&lt;br /&gt;
|format=CSV with header|data=category=Category,name=Name,caption=Caption&lt;br /&gt;
|filters=Category=Slicer}}&lt;br /&gt;
{{#tag: gallery| &lt;br /&gt;
{{#for_external_table:&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Image:{{{name}}}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
// -------------------------&lt;br /&gt;
&lt;br /&gt;
[1] https://www.slicer.org/wiki/Documentation/4.1/Developers/ImageGallery[2] http://commons.wikimedia.org/wiki/Template:Gallery&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer3:Registration&amp;diff=62675</id>
		<title>Slicer3:Registration</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer3:Registration&amp;diff=62675"/>
		<updated>2019-11-27T14:52:50Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Registration in 3D Slicer =&lt;br /&gt;
{| style=&amp;quot;color:#000000; background-color:#aaaaaa;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|An extensive set of tools is available within 3D Slicer to support your registration or image fusion task. The right module will depend on your input data and the underlying question asked. Below is an overview of the main and auxilary modules related to image registration. The spectrum ranges from fully automated to fiducial to fully interactive manual alignment, and from rigid to fully elastic image warping. Most modules are generic and can handle any image content, but a few are designed specifically for brain images. They have a brain contour in the icon.&amp;lt;br&amp;gt;&lt;br /&gt;
There are also many auxilary/support modules that perform important functions you may need to successfully complete your registration, such as the ROI or Interactive Editor modules to obtain masks, or the Resample modules to properly apply your result transform to the image. &amp;lt;br&amp;gt;&lt;br /&gt;
This page is organized by methods. Alternatively the  [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseInventory '''Slicer Registration Case Library'''] is organized by data type, i.e. it provides example cases, complete with tutorials, for a variety of registration problems collected in the &amp;quot;real world&amp;quot;. You may find a good starting point and helpful discussion in those examples. If you find something amiss, please let us know so we can amend (meier at bwh.harvard.edu). &lt;br /&gt;
|&lt;br /&gt;
|[[Image:SlicerRegistrationLibrary_Ad.png|left|400px|link=http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseAdvertisement|Slicer Registration Case Library: Call for Example Datasets]] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseAdvertisement '''Consider adding your case to the library:''']  &lt;br /&gt;
We can (for 2010-2011) offer you direct consulting on your image registration problem: If we can add your (anonymized) case to the Library, we will try to register it for you, build a step-by-step tutorial and send you the registration strategy and solution parameters. [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseAdvertisement See here for details.] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Find Registration Method by Category: looking for..... =&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;2&amp;quot; width=&amp;quot;550&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Speed_icon.png|135px|link=Registration:Categories#Speed]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Precision_icon.png|135px |link=Registration:Categories#Precision]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_HLogo_DOF.png|135px |link=Registration:Categories#DOF]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_HLogo_Datatype.png|135px |link=Registration:Categories#Datatype]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_HLogo_Brain.png|135px |link=Registration:Categories#Brain]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_HLogo_MethodChooser.png|135px |link=http://labelpage.halle.us/static/reg/index.html]]&lt;br /&gt;
|-&lt;br /&gt;
| See [[Registration:Categories#Speed |here]] if registration '''speed''' is mission-critical.&lt;br /&gt;
| See [[Registration:Categories#Precision|here]]  if precision/robustness is more important than speed.&lt;br /&gt;
| See [[Registration:Categories#DOF |here]]  to choose by degree of freedom of motion.&lt;br /&gt;
| See [[Registration:Categories#Datatype|here]]  to choose by datatype (image, surface, points).&lt;br /&gt;
| See [[Registration:Categories#Brain|here]]  for Brain-specific registration modules.&lt;br /&gt;
|see  [http://labelpage.halle.us/static/reg/index.html here] for an '''interactive method selection tool'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Default Registration Modules=&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;6&amp;quot; cellspacing=&amp;quot;2&amp;quot; &lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Rigid+Affine_icon.png| 135px |link= Modules:RegisterImages-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Manual_icon.png| 135px |link=Modules:Transforms-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_NonRigid_icon.png| 135px |link=Modules:DeformableB-SplineRegistration-Documentation-3.6]]&lt;br /&gt;
|-&lt;br /&gt;
|The [[Modules:RegisterImages-Documentation-3.6|'''Expert Automated Registration''']] Module performs automated image registration, with custom combinations of rigid to affine to nonrigid, based on image intensity similarities. It allows to focus the registration on a region of interest via a label mask.&lt;br /&gt;
|Manual/interactive alignment can be done via the [[Modules:Transforms-Documentation-3.6|'''Transforms''' ]] module, e.g. for initial alignment. See [[Slicer3.4:Training#Slicer_3.4_Tutorials| here for a tutorial and example dataset on Manual Registration]]&lt;br /&gt;
|The [[Modules:DeformableB-SplineRegistration-Documentation-3.6|'''Fast Nonrigid BSpline Registration''']] Module performs non-rigid automated image registration.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Alternative  Registration Modules =&lt;br /&gt;
&lt;br /&gt;
{|  cellpadding=&amp;quot;6&amp;quot; cellspacing=&amp;quot;2&amp;quot; &lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Rigid_icon.png| 135px |link=Modules:RigidRegistration-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Affine_icon.png| 135px |link=Modules:AffineRegistration-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Multires_icon.png| 135px |link=Modules:RegisterImagesMultiRes-Documentation-3.6]]&lt;br /&gt;
|-&lt;br /&gt;
|The [[Modules:RigidRegistration-Documentation-3.6 |'''Fast Rigid Registration''']] Module performs fast automated rigid registration (i.e. 6 DOF) using a mutual information criterion. &lt;br /&gt;
|The [[Modules:AffineRegistration-Documentation-3.6|'''Fast Affine Registration''']] Module performs fast automated affine registration (i.e. 12 DOF, includes scaling and shearing) using a mutual information criterion.&lt;br /&gt;
|The [[Modules:RegisterImagesMultiRes-Documentation-3.6|'''Robust Multiresolution Affine Registration''']] module performs robust  automated affine image registration employing a multi-resolution scheme.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Modules for Special Case Registration =&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;6&amp;quot; cellspacing=&amp;quot;2&amp;quot; &lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_ACPC_icon.png|135px|link=Modules:ACPCTransform-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Fiducial_icon.png|135px|link=Modules:TransformFromFiducials-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Surface_icon.png|135px|link=Modules:PythonSurfaceICPRegistration-Documentation-3.6]]&lt;br /&gt;
|-&lt;br /&gt;
|The [[Modules:ACPCTransform-Documentation-3.6|'''ACPC Transform''']] Module is used to orient '''brain''' images along predefined anatomical landmarks: (manually defined)  fiducials for the inter-hemispheral midline, anterior- and posterior commissure are used to align an image such that these landmarks become vertical and horizontal, respectively.&lt;br /&gt;
|The [[Modules:TransformFromFiducials-Documentation-3.6|'''Fiducial Registration''']] Module can align images based on pairs of manually selected fiducial points (rigid and affine). Two sets of fiducials (fiducial lists) are required, forming matching pairs to be aligned. See ''Fiducials'' module below.&lt;br /&gt;
|The [[Modules:PythonSurfaceICPRegistration-Documentation-3.6|'''Surface Registration''' ]] Module performs automated registration of surfaces (not images). This is useful if image data directly is unreliable, but surfaces can be produced from segmentations that provide good information about desired alignment.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_BRAINSdemonwarp.png|135px|link= Modules:BRAINSDemonWarp]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_BRAINSfit.png|135px|link= Modules:BRAINSFit ]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Plastimatch_icon.png|135px|link=Modules:Plastimatch]]&lt;br /&gt;
|-&lt;br /&gt;
|The [[Modules:BRAINSDemonWarp|'''BRAINSDemonWarp''' ]] Module performs automated registration of brain MRI based on an optic flow mechanism. Deformations here are significantly more &amp;quot;fluid&amp;quot; (i.e. have more DOF and are less constrained) than for the nonrigid BSpline method. &lt;br /&gt;
|The [[Modules:BRAINSFit| '''BRAINSfit''']] Module performs rigid to affine to nonrigid alignment of '''brain''' images with many options such as masking support, automated masking and multi-run pipelines.&lt;br /&gt;
|The [[Modules:Plastimatch|'''Plastimatch''']] Module performs automated registration of images from rigid to affine to non-rigid. As a unique feature it provides non-rigid deformation from fiducials, which can be used to &amp;quot;edit/repair&amp;quot; a registration.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_HAMMER_icon.png|135px|link= Modules:HammerRegistration ]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|The [[Modules:HammerRegistration| '''HAMMER''']] Module performs elastic (non-rigid) alignment of '''brain''' images of different individuals based on tissue class segmentation and intensity (experimental stage).&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Auxilary Modules for Registration =&lt;br /&gt;
{|  cellpadding=&amp;quot;6&amp;quot; cellspacing=&amp;quot;2&amp;quot; &lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Resampling_DecisionMatrix.png| 100px |link=Registration:Resampling]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_ROI_icon.png|100px|link=Modules:ROIModule-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:SubvolumeExraction_icon.png‎| 100px |link=Modules:CropVolume-Documentation-3.6]]&lt;br /&gt;
|-&lt;br /&gt;
|See the [[Registration:Resampling|'''Resampling''']] portal for an overview of available resampling methods, including tools to resample in place (e.g. change resolution or voxel anisotropy etc.)&lt;br /&gt;
|The [[Modules:ROIModule-Documentation-3.6|'''ROI module''']] can be used to define a local box region to be considered exclusively for automated registration. Registration modules that do not support ROIs directly, use the [[Modules:CropVolume-Documentation-3.6|CropVolume]] module.&lt;br /&gt;
|The [[Modules:CropVolume-Documentation-3.6|'''Crop Volume''']] module can be used to extract a box region as a new volume and thus focus registration on a region of interest. Use this if registration of entire FOV fails due to too much &amp;quot;distracting&amp;quot; image content.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_DataModule.png| 100px |link=Modules:Data-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_EDitor_icon.png| 100px |link=Modules:Editor-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:SkullStripping_icon.png| 100px |link=Modules:SkullStripperModule]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|The [[Modules:Data-Documentation-3.6|'''Data Module''']] is used to apply transforms on the fly to one or more volumes, to resample and concatenate transforms. Interaction is by drag &amp;amp; drop of nodes in the tree and via a right-mouse click context menu, e.g.  to apply  a transform.&lt;br /&gt;
|The [[Modules:Editor-Documentation-3.6|'''Interactive Editor''']] can be used to create or edit ROI regions that can be used as mask input to the automated registration. It contains interactive thresholding and other segmentation methods, and various forms of morphological processing.&lt;br /&gt;
|The [[Modules:SkullStripperModule|'''Skull Stripping''']] Extension Module automatically builds a mask of the brain from an input MRI image (T1w is best). This is an extension module and needs to be installed via the Extension manager.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_OtsuThreshold_icon.png| 100px |link=Modules:OtsuThreshold-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:MaskImage_Module_icon.png| 100px |link=Modules:MaskImage-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Fiducials.png| 100px |link=Modules:Fiducials-Documentation-3.6]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|The [[Modules:OtsuThreshold-Documentation-3.6|'''Otsu's Segmentation''' module]] can also be used to automatically generate a registration ROI/mask by  identifying your main image object from the background. For more controlled mask building use the threshold and editing functions in the Interactive Editor.&lt;br /&gt;
|The [[Modules:MaskImage-Documentation-3.6|'''Mask Image''' module]] can be used to apply a mask and create a new volume with all unwanted structure removed. Use this approach if your registration method of choice does not (yet) support direct masking as part of the input parameters.&lt;br /&gt;
|The [[Modules:Fiducials-Documentation-3.6|'''Fiducials Module''']] is used to place fiducial pairs that can be used to run Fiducial-based registration (e.g. AC-PC alignment or FiducialRegistration above) or to evaluate registration quality.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Resample_icon.png| 100px |link=Modules:ResampleVolume-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Resample_icon.png| 100px |link=Modules:ResampleScalarVectorDWIVolume-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_Subtraction_icon.png| 100px |link=Modules:SubtractImages-Documentation-3.6]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|The [[Modules:ResampleVolume-Documentation-3.6|'''Resample Volume''']] Module can be used to apply a given transform to a volume, with specific interpolation settings (linear, nearest neighbor and five flavors of sinc). &lt;br /&gt;
|The [[Modules:ResampleScalarVectorDWIVolume-Documentation-3.6|'''Resample Scalar/Vector/DWI Volume''']] Module (Francois Budin)  implements image and vector-image resampling through the use of ITK Transforms (rigid, affine, BSpline). Note: DTI volumes are handled by a separate module (see below).&lt;br /&gt;
|The [[Modules:SubtractImages-Documentation-3.6|'''Subtract Images''']] Module can be used to evaluate registration quality, particularly of intra-subject intra-modality cases. &lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_CheckerBoard_icon.png| 100px |link=https://www.slicer.org/wiki/Modules:CheckerboardFilter-Documentation-3.6]]|align=&amp;quot;center&amp;quot; |[[Image:Registration_ModelXform_icon.png| 100px |link=Modules:ModelTransform-Documentation-3.6]]&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |[[Image:Registration_DTIresample_icon.png| 100px |link=Modules:ResampleDTIVolume-Documentation-3.6]]&lt;br /&gt;
|-&lt;br /&gt;
|The [[Modules:CheckerboardFilter-Documentation-3.6|'''Checkerboard Filter''']] can be used to evaluate registration quality. It generates an alternating pattern showing elements of both images. Useful to check non-rigid registration by evaluating the continuity of edges and other high-contrast features.&lt;br /&gt;
|The [[Modules:ModelTransform-Documentation-3.6|'''Model Transform''']] module moves surface models according to an input transform&lt;br /&gt;
|The [[Modules:ResampleDTIVolume-Documentation-3.6|'''DTI Resample''']] Module is used to apply a given transform to the DTI tensor data. '''Do not''' resample vector or tensor data with routines meant for scalar data. A special resampling algorithm is required to properly align such multi-dimensional data.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Registration Examples / Use-Cases =&lt;br /&gt;
{| style=&amp;quot;color:#000000; background-color:#aaaaaa;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|The [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseInventory '''Slicer Registration Case Library'''] contains a (growing) collection of registration example cases to download and try yourself, complete with step-by step tutorial, image data, parameter presets, solutions and discussion of the particular challenges and strategies. These are all real-life cases contributed by fellow researchers; they span a wide spectrum of anatomy and image modality, and consequently also present a wide range of registration solutions, from automated rigid brain alignment to surface-based knee registration. We hope you will find a case similar to yours in this library that will provide an educated starting point. If you cannot find a similar case, take advantage of our [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseAdvertisement Call for Example Datasets] to add your case to the library.&lt;br /&gt;
|&lt;br /&gt;
|[[Image:RegLib_Banner.png|left|300px|link=http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseInventory|The Slicer Registration Case Library]] &amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Further Registration Links &amp;amp; Work in Progress =&lt;br /&gt;
*[[Slicer-3-6-FAQ|'''Registration FAQ''']]&lt;br /&gt;
*[http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation Registration Enhancement: Documentation &amp;amp; User Support]&lt;br /&gt;
*[http://na-mic.org/Wiki/index.php/Projects:RegistrationImprovement Registration Enhancement: New Algorithms &amp;amp; GUI Revisions]&lt;br /&gt;
*[[Slicer3:RegistrationLinks|Links to old/obsolete Registration pages (Slicer &amp;amp; NA-MIC)]]&lt;br /&gt;
*[[Registration:Resampling]]&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer-3-6-FAQ&amp;diff=62673</id>
		<title>Slicer-3-6-FAQ</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer-3-6-FAQ&amp;diff=62673"/>
		<updated>2019-11-27T14:52:44Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[Documentation-3.6#Introduction|Back to Slicer 3.6 Introduction]]&lt;br /&gt;
&lt;br /&gt;
This page contains frequently asked questions related to Slicer 3.6&lt;br /&gt;
= '''User FAQ: Installation &amp;amp; Generic''' =&lt;br /&gt;
== Is slicer3 ready for end users yet? ==&lt;br /&gt;
Yes!  See [http://slicer.org the home page].&lt;br /&gt;
== DLL Problems on Windows ==&lt;br /&gt;
''I just download the 3D Slicer binaries for Windows and unpacked it. When I doubleclicked the file &amp;quot;slice2-win32-x86.ext&amp;quot;, it gave out the error message''&lt;br /&gt;
''can't find package vtk while executing &amp;quot;package require vtk&amp;quot; invoked from within &amp;quot;set::SLICER(VTK_VERSION) [package require vtk]&amp;quot; (file &amp;quot;C:/slicer2/Base/tck/Go.tck&amp;quot; line 483). ''&lt;br /&gt;
We've seen this sort of thing happen when you have incompatible dll's installed.  E.g. so programs will install a vtkCommon.dll into your window system folder and windows tries to use it instead of the one that comes with windows.  You could try doing a search for vtk*.dll in your system and remove or rename any that are not in slicer as a test.&lt;br /&gt;
&lt;br /&gt;
= '''User FAQ: Data''' =&lt;br /&gt;
== I have a CT and would like to create an STL file==&lt;br /&gt;
*If the CT is in DICOM format, use the File/Add Volume module to load the data into Slicer (see [[Slicer-3.6-Load-Overview|here]] for more about loading data). &lt;br /&gt;
*Use the Interactive Editor to create a label map which contains the structure you are interested in (look in the [[Slicer_3.6:Training|tutorial pages]] for how to use the editor)&lt;br /&gt;
*use the [[Modules:Editor-Documentation#Modelmaker|Modelmaker]] functionality to create a triangulated surface model&lt;br /&gt;
*use File/Save to save the model in STL format.&lt;br /&gt;
==How do I load my DICOM DTI data into Slicer?==&lt;br /&gt;
*Use the [[Modules:DicomToNRRD-3.6|DICOM to nrrd converter]] to create a nrrd file&lt;br /&gt;
*load the nrrd file into slicer and begin processing (see the [[Slicer_3.6:Training|DTI tutorial]] for more information)&lt;br /&gt;
&lt;br /&gt;
= '''User FAQ: Segmentation''' =&lt;br /&gt;
== Interactive Editor: I would like to segment more than one structure==&lt;br /&gt;
Use the [[Modules:Editor-Documentation-3.6|Per-Structure Volumes feature]] to create label volumes for each structure that you would like to segment interactively. After successful segmentation of all the structures, the individual label volumes can be merged.&lt;br /&gt;
&lt;br /&gt;
= '''User FAQ: Diffusion''' =&lt;br /&gt;
&lt;br /&gt;
==I have DICOM DWI images. What do I need to do to process them in Slicer?==&lt;br /&gt;
DWI formats are not properly standardized (as of 2010). In many cases, vendors put important information about gradients into the private fields. Our [[Modules:DicomToNRRD-3.6|DICOM to NRRD converter]] has an extensive library of such special cases. Convert your DWI images to a NRRD volume, before beginning the post processing.&lt;br /&gt;
&lt;br /&gt;
==I want to register my diffusion scan to a structural scan==&lt;br /&gt;
[[Slicer-3-6-FAQ#How_do_I_register_a_DWI_image_dataset_to_a_structural_reference_scan.3F_.28Cookbook.29|See DWI registration FAQ here]]&lt;br /&gt;
&lt;br /&gt;
==I have streamlines from DTI and would like to find the subset which goes through a particular region==&lt;br /&gt;
The [[Modules:ROISelect-Documentation-3.6|ROI selection module]] in Slicer 3.6 allows to filter for streamlines which pass (or do not pass) through label map ROI's&lt;br /&gt;
&lt;br /&gt;
= User FAQ : installation &amp;amp; general use = &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''User FAQ : Registration''' = &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I fix incorrect axis directions? Can I flip an image (left/right, anterior/posterior etc) ? ==&lt;br /&gt;
Sometimes the header information that describes the orientation and size of the image in physical space is incorrect or missing. Slicer displays images in physical space, in a RAS orientation. If images appear flipped or upside down, the transform that describes how the image grid relates to the physical world is incorrect. In proper RAS orientation, a head should have anterior end at the top in the axial view, look to the left in a sagittal view, and have the superior end at the top in sagittal and coronal views.&amp;lt;br&amp;gt; &lt;br /&gt;
Yes, you can flip images and change the axis orientation of images in slicer. But we urge to use great caution when doing so, since this can introduce subtantial problems if done wrong. Worse than no information is wrong information. '''Below the steps to flip the LR axis of an image''':&amp;lt;br&amp;gt;&lt;br /&gt;
#Go to the ''Data'' module, right click on the node labeled &amp;quot;Scene&amp;quot; and select &amp;quot;Insert Transform&amp;quot; from the pulldown menu&lt;br /&gt;
#Move/drag your image into/onto the newly created transform&lt;br /&gt;
#Go to the ''Transforms'' module and select the newly created transform from the &amp;quot;Transform Node&amp;quot; menu.&lt;br /&gt;
#Click in the top left field of the 3x3 matrix, where you see the number 1.0. Hit the '''RETURN''' key to activate editing. &lt;br /&gt;
#Place a minus sign in front of the 1, then hit the RETURN key again. If you have your image in the axial slice view, you should see it flip immediately.&lt;br /&gt;
#Go back to the ''Data'' module, right click on your image and select ''Harden Transform'' from the pulldown menu.&lt;br /&gt;
#The image will move outside the transform. Your change of axis orientation has now been applied. &lt;br /&gt;
#Save your image under a new name, do ''not'' use a format that doesn't store physical orientation info in the header (jpg, gif etc).; also consider saving the transform as documentation to what change you have applied.&lt;br /&gt;
#Note that this is saved as part of the image orientation info and not as an actual resampling of the image, i.e. if you save your image and reload it in another software that does not read the image orientation info in the header (or displays in image space only), you will not see the change you just applied.&lt;br /&gt;
To flip the other axes do the same as above but edit the diagonal entries in the 2nd and 3rd row, for flipping anterior-posterior and inferior-superior directions, respectively.&lt;br /&gt;
&lt;br /&gt;
== How do I fix a wrong image orientation in the header? / My image appears upside down / facing the wrong way / I have incorrect/missing axis orientation ==&lt;br /&gt;
*'''Problem:''' My image appears upside down / flipped / facing the wrong way / I have incorrect/missing axis orientation&lt;br /&gt;
*'''Explanation:''' Slicer presents and interacts with images in ''physical'' space, which differs from the way the image is stored by a separate ''transform'' that defines how large the voxels are and how the image is oriented in space, e.g. which side is left or right.  This information is stored in the image header, and different image file formats have different ways of storing this information. If Slicer supports the image format, it should read the information in the header and display the image correctly. If the image appears upside down or with distorted aspect ratio etc, then the image header information is either missing or incorrect. &lt;br /&gt;
*'''Fix:''' See [[Slicer-3-6-FAQ#How_do_I_fix_incorrect_axis_directions.3F_Can_I_flip_an_image_.28left.2Fright.2C_anterior.2Fposterior_etc.29_.3F|FAQ above]] for a way to flip axes inside Slicer. You can also correct the voxel dimensions and the image origin in the Info tab of the [[Modules:Volumes-Documentation-3.6|Volumes module]], and you can reorient images via the [[Modules:Transforms-Documentation-3.6|Transforms module]]. Reorientation however will work only if the incorrect orientation involves rotation or translation. &lt;br /&gt;
*To fix an axis orientation directly in the header info of an image file:&lt;br /&gt;
:1. load the image into slicer (Load Volume, Add Data,Load Scene..)&lt;br /&gt;
:2. save the image back out as ''NRRD (.nhdr)'' format.&lt;br /&gt;
:3. open the ''.nhdr'' with a text editor of your choice. You should see a line that looks like this:&lt;br /&gt;
  space: left-posterior-superior&lt;br /&gt;
  sizes: 448 448 128&lt;br /&gt;
  space directions: (0.5,0,0) (0,0.5,0) (0,0,0.8)&lt;br /&gt;
:4. the three brackets ( ) represent the coordinate axes as defined in the ''space'' line above, i.e. the first one is left-right, the second anterior-posterior, and the last inferior-superior. To flip an axis place a minus sign in front of the respective number, which is the voxel dimension. E.g. to flip left-right, change the line to&lt;br /&gt;
  space directions: ('''-'''0.5,0,0) (0,0.5,0) (0,0,0.8)&lt;br /&gt;
:5. alternatively if the entire orientation is wrong, i.e. coronal slices appear in the axial view etc., you may easier just change the ''space'' field to the proper orientation. Note that Slicer uses ''RAS'' space by default, i.e. first (x) axis = left-'''r'''ight, second (y) axis = posterior-'''a'''nterior, third (z) axis = inferior-'''s'''uperior&lt;br /&gt;
:6. save &amp;amp; close the edited ''.nhdr'' file and reload the image in slicer to see if the orientation is now correct.&lt;br /&gt;
&lt;br /&gt;
== How do I fix incorrect voxel size / aspect ratio of a loaded image volume? ==&lt;br /&gt;
*'''Problem:''' My image appears distorted / stretched / with incorrect aspect ratio&lt;br /&gt;
*'''Explanation:''' Slicer presents and interacts with images in ''physical'' space, which differs from the way the image is stored by a set of separate information that represents the physical &amp;quot;voxel size&amp;quot; and the direction/spatial orientation of the axes. If the voxel dimensions are incorrect or missing, the image will be displayed in a distorted fashion.  This information is stored in the image header. If the information is missing, a default of isotropic 1 x 1 x 1 mm size is assumed for the voxel.&lt;br /&gt;
*'''Fix:''' You can correct the voxel dimensions and the image origin in the Info tab of the [[Modules:Volumes-Documentation-3.6|Volumes module]]. If you know the correct voxel size, enter it in the fields provided and hit RETURN after each entry. You should see the display update immediately. Ideally you should try to maintain the original image header information from the point of acquisition. Sometimes this information is lost in format conversion. Try an alternative converter or image format if you know that the voxel size is correctly stored in the original image. Alternatively you can try to edit the information in the image header, e.g. save the volume as (NRRD (.nhdr) format and open the &amp;quot;.nhdr&amp;quot; file with a text editor.&lt;br /&gt;
&lt;br /&gt;
== I don't understand your coordinate system. What do the coordinate labels R,A,S and (negative numbers) mean? ==&lt;br /&gt;
*It's very important to realize that Slicer displays all images in ''physical'' space, i.e. in mm. This requires orientation and size information that is stored in the image header. How that header info is set and read from the header will determine how the image appears in Slicer. RAS is the abbreviation for ''right'', ''anterior'', ''superior''; indicating in order the relation of the physical axis directions to how the image data is stored. &lt;br /&gt;
*For a detailed description on coordinate systems [[Coordinate_systems|see here]].&lt;br /&gt;
&lt;br /&gt;
== My image is very large, how do I downsample to a smaller size? ==&lt;br /&gt;
Several Resampling modules provide this functionality. If you also have a transform you wish to apply to the volume, we recommend the [[Modules:ResampleScalarVectorDWIVolume-Documentation-3.6 ResampleScalarVectorDWIVolume] module, otherwise the [[Modules:ResampleVolume-Documentation-3.6|ResampleVolume]] module. For an overview of Resampling tools see [[Registration:Resampling|'''here''']].&amp;lt;br&amp;gt;&lt;br /&gt;
'''Resampling in place''':&lt;br /&gt;
:1. Go to the [[Modules:Volumes-Documentation-3.6|Volumes module]]&lt;br /&gt;
:2. from the ''Active Volume'' pulldown menu, select the image you wish to downsample&lt;br /&gt;
:3. Open the ''Info'' tab. Write down the voxel dimensions (''Image Spacing'')  and overall image size  (''Image Dimensions''), e.g. 1.2 x 1.2 x 3 mm voxel size, 512 x 512 x 86. You will need this information to determine the amount of down-/up-sampling you wish to apply&lt;br /&gt;
:4. Go to the [[Modules:ResampleVolume-Documentation-3.6|'''Resample Volume''']] module&lt;br /&gt;
:5. In the ''Spacing'' field, enter the new desired voxel size. This is the above original voxel size multiplied with your downsampling factor. For example, if you wish to reduce the image to half (in plane), but leave the number of slices,  you would enter a new voxel size of 2.4,2.4,3.&lt;br /&gt;
:6. For ''Interpolation'', check the box most appropriate for your input data: for labelmaps check ''nearest Neighbor'', for 3D MRI or other bandlimited signals check ''hamming''. For most others leave the ''linear'' default.  The sinc interpolator (''hamming, cosine, welch'') and bspline (cubic) interpolators  tend to produce less blurring than ''linear', but may cause overshoot near high contrast edges (e.g. negative intensity values for background pixels)&lt;br /&gt;
:7.''Input Volume'': Select the image you wish to resample&lt;br /&gt;
:8. ''Output Volume'':Select ''Create New Volume'' for output volume, and rename to something meaningful, like your input + suffix &amp;quot;_resampled&amp;quot;&lt;br /&gt;
:9. Click Apply&lt;br /&gt;
'''Resampling in place to match another image in size''':&lt;br /&gt;
:1. Go to the  [[Modules:ResampleScalarVectorDWIVolume-Documentation-3.6|'''ResampleScalarVectorDWIVolume''']] module&lt;br /&gt;
:2. ''Input Volume'': Select the image you wish to resample&lt;br /&gt;
:3. ''Reference Volume'': Select the reference image whose size/dimensions you want to match to.&lt;br /&gt;
:4. ''Output Volume'': Select ''Create New Volume'' for output volume, and rename to something meaningful, like your input + suffix &amp;quot;_resampled&amp;quot;&lt;br /&gt;
:5. ''Interpolation Type'': check the box most appropriate for your input data: for labelmaps check ''nn=nearest Neighbor'', for 3D MRI or other bandlimited signals check ''ws=windowed sinc''. For most others leave the ''linear'' default.  The ws and bspline (cubic) interpolators (''hamming, cosine, welch'') tend to produce less blurring than ''linear', but may cause overshoot near high contrast edges (e.g. negative intensity values for background pixels)&lt;br /&gt;
:6. Click Apply. Note that if the input and reference volume do not overlap in physical space, i.e. are roughly co-registered, the resampled result may not contain any or all of the input image. This is because the program will resample in the space defined by the reference image and will fill in with zeros if there is nothing at that location. If you get an empty or clipped result, that is most likely the cause. In that case try to re-center the two volumes before resampling.&lt;br /&gt;
'''Resampling in place by specifying new dimensions''':&lt;br /&gt;
:1. Go to the  [[Modules:ResampleScalarVectorDWIVolume-Documentation-3.6| '''ResampleScalarVectorDWIVolume''']] module&lt;br /&gt;
:2. ''Input Volume'': Select the image you wish to resample&lt;br /&gt;
:3. ''Reference Volume'': leave at &amp;quot;none&amp;quot;&lt;br /&gt;
:4. ''Output Volume'': Select ''Create New Volume'' for output volume, and rename to something meaningful, like your input + suffix &amp;quot;_resampled&amp;quot;&lt;br /&gt;
:5. ''Interpolation Type'': check the box most appropriate for your input data: for labelmaps check ''nn=nearest Neighbor'', for 3D MRI or other bandlimited signals check ''ws=windowed sinc''. For most others leave the ''linear'' default.  The ws and bspline (cubic) interpolators (''hamming, cosine, welch'') tend to produce less blurring than ''linear', but may cause overshoot near high contrast edges (e.g. negative intensity values for background pixels)&lt;br /&gt;
:6. Click Apply. Note that if the input and reference volume do not overlap in physical space, i.e. are roughly co-registered, the resampled result may not contain any or all of the input image. This is &lt;br /&gt;
:6. ''Output Parameters'': here you specify the new voxel size / spacing '''and''' dimensions. Note that you need to set both. If only the voxel size is specified, the image is resampled but retains its  original dimensions (i.e. empty/zero space). If only the dimensions are specified the image will be resampled starting at the origin and cropped but not resized.&lt;br /&gt;
::*new voxel size: calculate the new voxel size and enter in the ''Spacing'' field, as described above in in '''Resampling in place'' above, see step #5&lt;br /&gt;
::*new image dimensions: enter new dimensions under ''Size''. To prevent clipping, the output field of view FOV = voxel size * image dimensions, should match the input&lt;br /&gt;
:7. leave rest at default and click ''Apply''&lt;br /&gt;
&lt;br /&gt;
== How do I register images that are very far apart / do not overlap ==&lt;br /&gt;
*'''Problem:''' when you place one image in the background and another in the foreground, the one in the foreground will not be visible (entirely) when switching bak &amp;amp; forth&lt;br /&gt;
*'''Explanation:'''Slicer chooses the field of view (FOV) for the display based on the image selected for the background. The FOV will therefore be centered around what is defined in that image's origin. If two images have origins that differ significantly, they cannot be viewed well simultaneously.&lt;br /&gt;
*'''Fix:''' recenter one or both images as follows:&lt;br /&gt;
:1. Go to the [[Modules:Volumes-Documentation-3.6|Volumes module]], &lt;br /&gt;
:2. Select the image to recenter from the ''Actrive Volume'' menu&lt;br /&gt;
:3. Select the ''Info'' tab.&lt;br /&gt;
:4. Click the ''Center Volume'' button. You will notice how the image origin numbers displayed above the button change. If you have the image selected as foreground or background, you may see it move to a new location.&lt;br /&gt;
:5. Repeat steps 2-4 for the other image volumes&lt;br /&gt;
:6. From the slice view menu, select ''Fit to Window''&lt;br /&gt;
:7. Images should now be roughly in the same space. Note that this re-centering is considered a change to the image volume, and Slicer will mark the image for saving next time you select ''Save''.&lt;br /&gt;
&lt;br /&gt;
== How do I register a DWI image dataset to a structural reference scan? (Cookbook) ==&lt;br /&gt;
*'''Problem:''' The DWI/DTI image is not in the same orientation as the reference image that I would like to use to locate particular anatomy; the DWI image is distorted and does not line up well with the structural images&lt;br /&gt;
*'''Explanation:''' DWI images are often acquired as EPI sequences that contain significant distortions, particularly in the frontal areas. Also because the image is acquired before or after the structural scans, the subject may have moved in between and the position is no longer the same. &lt;br /&gt;
*'''Fix:''' obtain a baseline image from the DWI sequence, register that with the structural image and then apply the obtained transform to the DTI tensor. The two chief issues with this procedure deal with the difference in image contrast between the DWI and the structural scan, and with the common anisotropy of DWI data.&lt;br /&gt;
* Overall Strategy and detailed instructions for registration &amp;amp; resampling can be found in our [[http://na-mic.org/Wiki/index.php/Projects:SlicerFAQ:DWI_Registration '''DWI registration cookbook''']]&lt;br /&gt;
* you can find example cases in the [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseInventory:BrainIntraDTI '''DWI chapter of the Slicer Registration Case Library'''], which includes example datasets and step-by-step instructions. Find an example closest to your scenario and perform the registration steps recommended there.&lt;br /&gt;
== How do I initialize/align images with very different orientations and no overlap? ==&lt;br /&gt;
I would like to register two datasets, but the centers of the two images are so different that they don't overlap at all. Is there a way to pre-register them automatically or manually to create an initial starting transformation?&amp;lt;br&amp;gt;&lt;br /&gt;
*'''Automatic Initialization:'''Most registration tools have initializers that should take care of the initial alignment in a scenario you described. If your images do not overlap at all, but the extents are similar, centered initializer should work. If the structures that are shown in the images are similar, moments initializer might help. Both of these options are available in [[Modules:BRAINSFit|BRAINSFit]] (GeometryCenterAlign and MomentsAlign, respectively). You can run BRAINSFit with just the initializer to see what kind of transformation it produces.&lt;br /&gt;
*'''Manual Initialization:'''  Use the ''Transforms'' module to create a manual initialization. Details in the [[Slicer3.6:Training| manual registration tutorial]] and also in the FAQ below.&lt;br /&gt;
&lt;br /&gt;
== Can I manually adjust or correct a registration? ==&lt;br /&gt;
*'''Problem:''' obtained registration is insufficient&lt;br /&gt;
*'''Explanation:''' The automated registration algorithms (except for  fiducial and surface registration) in Slicer operate on image intensity and try to move images so that similar image content is aligned. This is influenced by many factors such as image contrast, resolution, voxel anisotropy, artifacts such as motion or intensity inhomogeneity, pathology etc, the initial misalignment and the parameters selected for the registration.&lt;br /&gt;
*'''Fix:''' you can adjust/correct an obtained registration manually, within limits. As outlined below. Your first try however should be to obtain a better automated registration by changing some of the input and/parameters and then re-run. There's also a dedicated  [[Slicer_3.6:Training|Manual Registration Tutorial]].&lt;br /&gt;
**'''Manual Adjustment''': If the transform is linear, i.e. a rigid or affine transform, you can access the rigid components (translation and rotation) of that transform via the [[Modules:Transforms-Documentation-3.6|Transforms module]]. &lt;br /&gt;
***#In the ''Data'' module, drag the image volume inside the registration transform node&lt;br /&gt;
***#Select the views so that the volume is displayed in the slice views&lt;br /&gt;
***#Go to the [[Modules:Transforms-Documentation-3.6|Transforms module]] and adjust the translation and rotation sliders to adjust the current position. To get a finer degree of control, enter smaller numbers for the translation limits and enter rotation angles numerically in increments of a few degrees at a time&lt;br /&gt;
&lt;br /&gt;
== What's the difference between the various registration methods listed in Slicer? ==&lt;br /&gt;
Most of the registration modules use the same underlying ITK registration algorithm for cost function and optimization, but differ in implementation on parameter selection, initialization and the type of image toward which they have been tailored. To help choose the best one for you '''based on the method or available options''', an [[Slicer3:Registration#Registration_in_3D_Slicer|overview of all registration methods]] incl. [[Registration:Categories|a '''comparison matrix''' can be found here]]. &amp;lt;br&amp;gt;&lt;br /&gt;
To help choose '''based on a particular image type and content''', you will find many example cases incl. step-by-step instructions and discussions on the particular registration challenges in the [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseInventory '''Slicer Registration Library''']. The library is organized in several different ways, e.g. consult this [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:RegLibTable '''sortable table''' with all cases and the method used].&amp;lt;br&amp;gt;&lt;br /&gt;
There is also a brief overview within Slicer that helps distinguish: Select the ''Registration Welcome'' option at the top of the Modules/Registration menu.&lt;br /&gt;
&lt;br /&gt;
== What's the purpose of masking / VOI in registration? ==&lt;br /&gt;
*'''Problem:''' What does the masking option in some of the registration modules accomplish ?&lt;br /&gt;
*'''Explanation:''' The masking option is a very effective tool to focus the registration onto the image content that is most important. It is often the case that the  alignment of the two images is more important in some areas than others. ''Masking'' provides the opportunity to specify those regions and make the algorithm ignore the image content outside the mask. This does not mean that the rest is not registered, but rather that it moves along passively, i.e. areas outside the mask do not actively contribute to the cost function that determines the quality of the match. Note the mask defines the areas to ''include'', i.e. to exclude a particular region, build a mask that contains the entire object/image except that region.&lt;br /&gt;
*'''Note:''' masking within the registration is different from feeding a masked/stripped image as input, where areas of no interest have been erased. Such masking can still produce valuable results and is a viable option if the module in question does not provide a direct masking option. But direct masking by erasing portions of the image content can produce sharp edges that registration methods can lock onto. If the edge becomes dominant then the resulting registration will be only as good as the accuracy of the masking. That problem does not occur when using masking option within the module.&lt;br /&gt;
*The following modules currently (v.3.6.1) provide masking:&lt;br /&gt;
**[[Modules:BRAINSFit|'''BRAINSFit''']]&lt;br /&gt;
***found under: ''Masking Options'' tab&lt;br /&gt;
***requires mask for both fixed and moving image&lt;br /&gt;
***has option to automatically generate masks&lt;br /&gt;
***some initialization modes (''CenterOfHeadAlign'') will not work in conjunction with masks&lt;br /&gt;
**[[Modules:RegisterImages-Documentation-3.6|'''Expert Automated Registration''']]&lt;br /&gt;
***found under: ''Advanced Registration Parameters'' tab&lt;br /&gt;
***requires mask for fixed image only&lt;br /&gt;
**[[Modules:RegisterImagesMultiRes-Documentation-3.6|'''Robust Multiresolution Affine''']]&lt;br /&gt;
***found under: ''Optional'' tab&lt;br /&gt;
***requires mask for fixed image only&lt;br /&gt;
***provides option to define a mask as a box ROI&lt;br /&gt;
**[[Modules:BRAINSDemonWarp|'''BRAINSDemonWarp''']]&lt;br /&gt;
***found under: ''Mask Options'' tab&lt;br /&gt;
***requires mask for both fixed and moving image&lt;br /&gt;
***has option to automatically generate masks&lt;br /&gt;
&lt;br /&gt;
== Registration failed with an error. What should I try next? ==&lt;br /&gt;
*'''Problem:''' automated registration fails, status message says &amp;quot;completed with error&amp;quot; or similar.&lt;br /&gt;
*'''Explanation:''' Registration methods are mostly implemented as commandline modules, where the input to the algorithm is provided as temporary files and the algorithm then seeks a solution independently from the activity of the Slicer GUI. Several reasons can lead to failure, most commonly they are wrong or inconsistent input or lack of convergence if images are too far apart initially.&lt;br /&gt;
*'''Fix''': open the ''Error Log'' window (Window Menu) and click on the most recent (top) entries related to the registration. Usually you will see a ''commandline'' entry that shows which arguments were given to the algorithm, and a ''standard output'' or similar that lists what the algorithm returned. More detailed error info can be found in either this entry, or in the ''ERROR: ...&amp;quot; line at the top of the list. Click on the corresponding line and look for explanation in the provided text. If there was a problem with the input arguments or the that would be reported here.&lt;br /&gt;
**for example, running Robust Multiresolution Affine without input will report: &amp;quot;No input data assigned&amp;quot;  etc.&lt;br /&gt;
*If the Error log does not provide useful clues, try varying some of the parameters. Note that if the algorithm aborts/fails right away and returns immediately with an error, most likely some input is wrong/inconsistent or missing.&lt;br /&gt;
*if variation does not succeed, try an alternative registration module. Some are more tailored toward particular image modalities and DOF than others&lt;br /&gt;
*check the initial misalignment, if images are too far apart and there is no overlap, registration may fail. Consider initialization with a prior manual alignment, centering the images or using one of the initialization methods provided by the modules&lt;br /&gt;
*write to the  [mailto:slicer-users@bwh.harvard.edu '''Slicer user group''' (slicer-users@bwh.harvard.edu)] and inform them of the error. We're keen on learning so we can improve the program. Helpful to copy and paste the error messages found in the Error Log.&lt;br /&gt;
&lt;br /&gt;
== Registration result is wrong or worse than before? ==&lt;br /&gt;
*'''Problem:''' automated registration provides an alignment that is insufficient, possibly worse than the initial position&lt;br /&gt;
*'''Explanation:''' The automated registration algorithms (except for  fiducial and surface registration) in Slicer operate on image intensity and try to move images so that similar image content is aligned. This is influenced by many factors such as image contrast, resolution, voxel anisotropy, artifacts such as motion or intensity inhomogeneity, pathology etc, the initial misalignment and the parameters selected for the registration.&lt;br /&gt;
*'''Fix:'''  Your first try however should be to obtain a better automated registration by changing some of to re-run the automated registration, while changing either initial position, initialization method, parameters or the method/module used. Most helpful to determine a good secondary approach is to know why the first one was likely to fail. Below a list of possible reasons and the remedies:&lt;br /&gt;
**'''too much initial misalignment:''' particularly rotation can be difficult for automated registration to capture. If the two images have strong rotational misalignment, consider A) one of the initialization options (e.g. [[Modules:BRAINSFit|BRAINSfit]] or [[Modules:RegisterImages-Documentation-3.6|Expert Automated]]), B) a manual initial alignment using the [[Modules:Transforms-Documentation-3.6|Transforms module]] and then use this as initialization input&lt;br /&gt;
**'''insufficient detail:''' consider increasing the number of sample points used for the registration, depending on time/speed constraints, increase to 5-10% of image size. &lt;br /&gt;
**'''insufficient contrast:''' consider adjusting the ''Histogram Bins'' (where avail.) to tune the algorithm to weigh small intensity variations more or less heavily&lt;br /&gt;
**'''strong anisotropy:''' if one or both of the images have strong voxel anisotropy of ratios 5 or more, rotational alignment may become increasingly difficult for an automated method. Consider increasing the sample points and reducing the ''Histogram Bins''.  In extreme cases you may need to switch to a manual or fiducial-based approach&lt;br /&gt;
**'''distracting image content:''' pathology, strong edges, clipped FOV with image content at the border of the image can easily dominate the cost function driving the registration algorithm. '''Masking''' is a powerful remedy for this problem: create a mask (binary labelmap/segmentation) that excludes the distracting parts and includes only those areas of the image where matching content exists. This requires one of the modules that supports masking input, such as: [[Modules:BRAINSFit|BRAINSFit]], [[Modules:RegisterImages-Documentation-3.6|ExpertAutomated]], [[Modules:RegisterImagesMultiRes-Documentation-3.6|Multi Resolution]]. Next best thing to use with modules that do not support masking is to mask the image manually and create a temporary masked image where the excluded content is set to 0 intensity; the ''Mask Volume'' module performs this task&lt;br /&gt;
**'''too many/too few DOF''': the degrees of freedom (DOF) determine how much motion is allowed for the image to be registered. Too few DOF results in suboptimal alignment; too many DOF can result in overfitting or the algorithm getting stuck in local extrema, or a bad fit with some local detail matched but the rest misaligned.  Consider a stepwise approach where the DOF are gradually increased. [[Modules:BRAINSFit|BRAINSfit]] and [[Modules:RegisterImages-Documentation-3.6|Expert Automated]] provide such pipelines; or you can nest the transforms manually. A multi-resolution approach can also greatly benefit difficult registration challenges: this scheme runs multiple registrations at increasing amounts of image detail. The [[Modules:RegisterImagesMultiRes-Documentation-3.6|Robust Multiresolution module]] performs this task.&lt;br /&gt;
**'''inappropriate algorithm:''' there are many different registration methods available in Slicer. Have a look at the [[Slicer3:Registration|'''Registration Method Overview''']] and consider one of the alternatives. Also review the [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:RegLibTable '''sortable table''' in the Registration Case Library] to see which methods were successfully used on cases matching your own.&lt;br /&gt;
**you can adjust/correct an obtained registration manually, within limits, as outlined [[Slicer3:FAQ#Can I manually adjust or correct a registration?|'''in this FAQ''']].&lt;br /&gt;
&lt;br /&gt;
== How many sample points should I choose for my registration? ==&lt;br /&gt;
*'''Problem:''' unsure what the ''Sample Points'' setting means or how I could use it to improve my registration.&lt;br /&gt;
*'''Explanation:'''All registration modules contain a parameter field that controls how much of the image is sampled when performing an automated registration. The unit is often an absolute count, but in some cases also a percentage. Default settings also vary among modules. The number of samples is an important setting that determines both registration speed and quality. If the sample number is too small, registration may fail because it is driven by image content that insufficiently represents the image. If sample number is too large, registration can slow down significantly.&lt;br /&gt;
*'''Fix:''' If registration speed is not a major issue, better to err on the side of larger samples. Most default settings are chosen to yield relatively fast registrations and for most of today's image represent only a small percentage.  Below the defaults for the different registration modules, for version 3.6.1:&lt;br /&gt;
  '''Defaults Used in Slicer Modules v.3.6.1'''&lt;br /&gt;
  Fast Rigid / Linear: 10,000&lt;br /&gt;
  Fast Affine: 10,000&lt;br /&gt;
  Fast Rigid: 10,000&lt;br /&gt;
  Fast Non-Rigid BSpline: 50,000&lt;br /&gt;
  Expert Automated (Rigid): 1%&lt;br /&gt;
  Expert Automated (Affine): 2%&lt;br /&gt;
  Expert Automated (BSpline): 10%&lt;br /&gt;
  BRAINSfit: 100,000&lt;br /&gt;
  BRAINSdemon Warp: N/A &lt;br /&gt;
  Robust Multiresolution: N/A&lt;br /&gt;
  Surface Registration: 200&lt;br /&gt;
 &lt;br /&gt;
The table below relates total sample points and percentages to the most common image sizes. Also consider that sample points are chosen randomly so that some points may fall outside the actual object to be registered. That is not a bad thing per se, some background points are important, but not if they are too far from the edges of the object. So consider both total image size as well as the percentage of the image field of view that your object of interest obtains. E.g. if your object fills only half the image, double the sample points to get the desired amount of points within the object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable labelpage labelpagetable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Image Size&lt;br /&gt;
! Total Points	&lt;br /&gt;
! 10,000&lt;br /&gt;
! 50,000&lt;br /&gt;
! 100,000&lt;br /&gt;
! 200,000&lt;br /&gt;
! 1%&lt;br /&gt;
! 2%	&lt;br /&gt;
! 5%	&lt;br /&gt;
! 10%	&lt;br /&gt;
! 20%&lt;br /&gt;
|-&lt;br /&gt;
| 128 x 128 x 64&lt;br /&gt;
|1048576&lt;br /&gt;
|1.0%&lt;br /&gt;
|4.8%&lt;br /&gt;
|9.5%&lt;br /&gt;
|19.1%&lt;br /&gt;
|~10000&lt;br /&gt;
|~20000&lt;br /&gt;
|~52500&lt;br /&gt;
|~100000&lt;br /&gt;
|~200000&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 256 x 256 x 30&lt;br /&gt;
|1966080&lt;br /&gt;
|0.5%&lt;br /&gt;
|2.5%&lt;br /&gt;
|5.1%&lt;br /&gt;
|10.2%&lt;br /&gt;
|~20000&lt;br /&gt;
|~40000&lt;br /&gt;
|~97500&lt;br /&gt;
|~200000&lt;br /&gt;
|~400000&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 256 x 256 x 120&lt;br /&gt;
|7864320&lt;br /&gt;
|0.1%&lt;br /&gt;
|0.6%&lt;br /&gt;
|1.3%&lt;br /&gt;
|2.5%&lt;br /&gt;
|~77500&lt;br /&gt;
|~150000&lt;br /&gt;
|~400000&lt;br /&gt;
|~775000&lt;br /&gt;
|~1500000&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 192 x 192 x 192&lt;br /&gt;
|7077888&lt;br /&gt;
|0.1%&lt;br /&gt;
|0.7%&lt;br /&gt;
|1.4%&lt;br /&gt;
|2.8%&lt;br /&gt;
|~70000&lt;br /&gt;
|~150000&lt;br /&gt;
|~350000&lt;br /&gt;
|~700000&lt;br /&gt;
|~1500000&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 512 x 512 x 48&lt;br /&gt;
|12582912&lt;br /&gt;
|0.1%&lt;br /&gt;
|0.4%&lt;br /&gt;
|0.8%&lt;br /&gt;
|1.6%&lt;br /&gt;
|~125000&lt;br /&gt;
|~250000&lt;br /&gt;
|~625000&lt;br /&gt;
|~1250000&lt;br /&gt;
|~2500000&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 256 x 256 x 256&lt;br /&gt;
|16777216&lt;br /&gt;
|0.1%&lt;br /&gt;
|0.3%&lt;br /&gt;
|0.6%&lt;br /&gt;
|1.2%&lt;br /&gt;
|~175000&lt;br /&gt;
|~325000&lt;br /&gt;
|~850000&lt;br /&gt;
|~1750000&lt;br /&gt;
|~3250000&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 512 x 512 x 160&lt;br /&gt;
|41943040&lt;br /&gt;
|0.0%&lt;br /&gt;
|0.1%&lt;br /&gt;
|0.2%&lt;br /&gt;
|0.5%&lt;br /&gt;
|~425000&lt;br /&gt;
|~850000&lt;br /&gt;
|~2000000&lt;br /&gt;
|~4250000&lt;br /&gt;
|~8500000&lt;br /&gt;
|}&lt;br /&gt;
The image below shows sample point densities on one slice of a brain MRI with 256x256x130 voxels.  For robust registration, we recommend a useful coverage requires at least 1% coverage for affine, more (at least 5%)  for nonrigid (BSpline) as DOF increase:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:RegLib SamplePointsBrain.png|600px|sample point densities on one slice of a brain MRI with 256x256x130 voxels; for robust registration, we recommend a useful coverage requires at least 1% coverage for affine, more (at least 5%)  for nonrigid (BSpline) as DOF increase]]&lt;br /&gt;
&lt;br /&gt;
== I want to register two images with different intensity/contrast. ==&lt;br /&gt;
*The two most critical image features that determine automated registration accuracy and robustness are image contrast and resolution. Differences in image contrast are best addressed with the appropriate cost function. The cost function that has proven most reliable for registering images with different contrast (e.g. a T1 MRI to a T2 or an MRI to CT or PET) is '''mutual information'''. All intensity-based registration modules use mutual information as the default cost function. Only the [[Modules:RegisterImages-Documentation-3.6|''Expert Automated Registration'']] module lets you choose alternative cost function.&lt;br /&gt;
&lt;br /&gt;
No extra adjustment is therefore needed in terms of adjusting parameters to register images of different contrast. Depending on  the amount of differences you may consider masking to exclude distracting image content or adjusting the ''Histogram Bins'' setting to increase/decrease the level of intensity detail the algorithm is aware of.&lt;br /&gt;
&lt;br /&gt;
== How important is bias field correction / intensity inhomogeneity correction? ==&lt;br /&gt;
While registration may still succeed with mild cases of inhomogeneity, moderate to severe inhomogeneity can negatively affect automated registration quality. It is recommended to run an automated bias-field correction on both images before registration. [[Modules:N4ITKBiasFieldCorrection-Documentation-3.6|see here for documentation on this module]]. Masking of non-essential peripheral structures can also help to reduce distracting image content. [[Slicer-3-6-FAQ#What.27s_the_purpose_of_masking_.2F_VOI_in_registration.3F|See here for more on masking]]&lt;br /&gt;
&lt;br /&gt;
== Have the Slicer registration methods been validated? ==&lt;br /&gt;
The Slicer3.6 registration modules share the same same underlying ITK registration engines. For validation of those basic algorithms refer to the ITK software guide or the Insight Journal.  Slicer registration of images and surfaces has been applied successfully in many cases, some of which are documented here [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseInventory here]. For ongoing efforts on improving/validating Slicer registration performance please contact the [mailto:slicer-users@bwh.harvard.edu Slicer User Mailing List]   or the  [mailto:slicer-devel@bwh.harvard.edu Slicer Developer Mailing List].&lt;br /&gt;
&lt;br /&gt;
== I want to register many image pairs of the same type. Can I use Slicer registration in batch mode? ==&lt;br /&gt;
&lt;br /&gt;
== How can I save the parameter settings I have selected for later use or sharing? ==&lt;br /&gt;
The ''Parameter Set'' menu at the top tab of each module serves this purpose of saving and recalling instances of parameter settings. To save the current settings select ''Rename'' from the menu, give it a descriptive name and then select ''Create New Commandline Module'' from the menu. New settings are added to the menu as created. These settings are saved together with the Slicer Scene.mrml file. To save only tthe presets without any associate data, first save your entire scene, then delete all nodes in the MRML tree except the top ''Scene'' node, and then save this under a new name like &amp;quot;Slicer_Presets.mrml&amp;quot; etc.  To load the presets in, use ''Import'' from the File menu, which will add the MRML entries to the existing scene.  Do not load presets via &amp;quot;Load Scene&amp;quot;, since that will delete all currently loaded data. [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:ParameterPresetsTutorial A detailed user guide on loading presets can be found here]&lt;br /&gt;
&lt;br /&gt;
== Registration is too slow. How can I speed up my registration? ==&lt;br /&gt;
The key parameters that influence registration speed are the number of sample points, the degrees of freedom of the transform, the type of similarity metric and the initial misalignment and image contrast/content differences. If registration quality is ok, try reducing the sample points first. [[Slicer-3-6-FAQ#How_many_sample_points_should_I_choose_for_my_registration.3F|Guidelines on selecting sample points are given here]]. The degrees of freedom usually are given by the overall task and not subject to variation, but depending on initial misalignment, both speed and robustness can improve by an iterative approach that gradually increases DOF rather than starting with a high DOF setting. The [[Modules:BRAINSFit|BRAINSfit module]] and [[Modules:RegisterImages-Documentation-3.6|Expert Automated Registration module]] both allow prescriptions of iterative DOF.&amp;lt;br&amp;gt;&lt;br /&gt;
If using a cost/criterion function other than mutual information, note that the corresponding ITK implementation may not have been parallelized and hence may not be taking advantage of multi-threading/multi-CPU cores on your computer. This can slow down performance significantly. &amp;lt;br&amp;gt;&lt;br /&gt;
[[Slicer3:Registration|Also see the ''Slicer Registration Portal Page'' for help on selecting registration methods based on criteria of speed, precision etc.]]&lt;br /&gt;
&lt;br /&gt;
== Registration results are inconsistent and don't work on some image pairs. Are there ways to make registration more robust? ==&lt;br /&gt;
The key parameters that influence registration robustness are the number of sample points, the initial degrees of freedom of the transform, the type of similarity metric and the initial misalignment and image contrast/content differences.  particularly initialization methods that seek a first alignment before beginning the optimization can make things worse. If initial position is already sufficiently close (i.e. more than 70% overlap and less than 20% rotational misalignment), consider turning off initialization if available (e.g. in [[Modules:BRAINSFit|BRAINSfit]] or [[Modules:RegisterImages-Documentation-3.6|Expert Automated]]). &lt;br /&gt;
Try increasing the sample points. [[Slicer-3-6-FAQ#How_many_sample_points_should_I_choose_for_my_registration.3F|Guidelines on selecting sample points are given here]]. The degrees of freedom usually are given by the overall task and not subject to variation, but depending on initial misalignment,  robustness can greatly improve by an iterative approach that gradually increases DOF rather than starting with a high DOF setting. The [[Modules:BRAINSFit|BRAINSfit module]] and [[Modules:RegisterImages-Documentation-3.6|Expert Automated Registration module]] both allow prescriptions of iterative DOF. Also the [[Modules:RegisterImagesMultiRes-Documentation-3.6|Multiresolution]] module steps through multiple cycles of different image coarseness which is aimed primarily at robustness&amp;lt;br&amp;gt;&lt;br /&gt;
If using a cost/criterion function other than mutual information, note that MI tends to be the most forgiving/robust toward differences in image contrast. &amp;lt;br&amp;gt;&lt;br /&gt;
[[Slicer3:Registration|Also see the ''Slicer Registration Portal Page'' for help on selecting registration methods based on criteria of robustness, speed, precision etc.]]&lt;br /&gt;
&lt;br /&gt;
== One of my images has a clipped field of view. Can I still use automated registration? ==&lt;br /&gt;
Probably yes. Best remedy is to apply a mask that also clips the missing portion in the other image, or better still 2 masks that include the full region of interest that is to be registered and is present in both images. Also initialization is critical, more so than with full FOV images. If images have large amount of initial misalignment, try to center both first (''Volumes/Info/Center Image'') or perform a cursory manual alignment and use that as initialization. Examples of registrations with clipped FOV can be found [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:RegLib_04_MultipleSclerosis here in the Registration Case Library].&lt;br /&gt;
&lt;br /&gt;
== I ran a registration but cannot see the result. How do I visualize the result transform? ==&lt;br /&gt;
There are 2 ways to see the result of a registration: 1) by creating a new resampled volume that represents the moving image in the new orientation , 2) by direct (dynamic) rendering of the original image in a new space when placed inside a transform.  The latter is '''not''' available for non-rigid transforms, hence a registration that includes nonlinear components (BSpline, Warp) must be visualized by first resampling the entire volume with the new transform. If you ran a registration yet see no effect, the reason could be one of the following:&lt;br /&gt;
*you did not request an output. In the module parameters section, you must specify either an output transform or an output image/volume. Select one or both (for nonrigid registration).&lt;br /&gt;
*you requested a result transform but the moving volume is not placed inside the transform in the MRML tree. Not all modules automatically place the moving image inside the result transform node: The [[Modules:RegisterImages-Documentation-3.6|Expert Automated Module]], for example, does not , so in that case do this manually in the ''Data'' module by dragging the moving volume node inside the result transform.&lt;br /&gt;
*registration completed with an error. Check for status messages at the top of the module and look at the ''Error Log''  in the window menu to see if there were any errors reported.&lt;br /&gt;
*you performed a non-rigid (BSpline) transform but did not yet request an output volume. To do so after registration is complete, use the [[Modules:ResampleScalarVectorDWIVolume-Documentation-3.6|Resample DWI/Vector module]].&lt;br /&gt;
&lt;br /&gt;
== What's the difference between Rigid and Affine registration? ==&lt;br /&gt;
Rigid registration is a transform with 6 degrees of freedom (DOF): 3 translations (one along each axis) and 3 rotations (one around each axis). An affine registration includes 12 DOF, i.e. 3 additional DOF for scaling (along each axis) and shearing. So strictly speaking an affine transform is a non-rigid transform, even though linear, because the volume can distort. However in practice by ''non-rigid'' transform one usually refers to nonlinear transforms with more than 12 DOF, e.g. BSpline or polynomial models.&lt;br /&gt;
&lt;br /&gt;
== What's the difference between Affine and BSpline registration? ==&lt;br /&gt;
An affine registration includes 12 DOF, i.e. 3 for translations (one along each axis),  3 rotations (one around each axis), 3  for scaling (along each axis) and 3 for shearing. So strictly speaking an affine transform is a non-rigid transform, even though linear, because the volume can distort. However in practice by non-rigid transform one usually refers to nonlinear transforms with more than 12 DOF, e.g. BSpline or polynomial models. A BSpline registration employs a nonlinear nonrigid model that allows individual regions of the image to distort independently, but enforcing smooth transitions between them.  A BSpline transform is not described by a 4x4 matrix like the affine model, but by a list of displacement vectors for each point along a prescribed grid. E.g. a 3x3x3 BSpline grid has 27 points that can move independently, yielding 27 DOF; a 5x5x5 grid analogously has 125 DOF etc.&lt;br /&gt;
&lt;br /&gt;
== The nonrigid (BSpline) registration transform does not seem to be nonrigid or does not show up correctly. ==&lt;br /&gt;
See FAQ on viewing registration results [[Slicer-3-6-FAQ#I_ran_a_registration_but_cannot_see_the_result._How_do_I_visualize_the_result_transform.3F|here]].&lt;br /&gt;
BSpline transforms are '''not''' available for immediate rendering by placing volumes or models inside the transforms. Only linear transforms can be viewed that way. A BSpline transform must be visualized by resampling the entire volume with the new transform. If you did not yet an output volume when running the registration, you can do so after the fact, use the [[Modules:ResampleScalarVectorDWIVolume-Documentation-3.6|Resample DWI/Vector module]].&lt;br /&gt;
&lt;br /&gt;
== Can I combine multiple registrations? ==&lt;br /&gt;
Yes, you can nest multiple (affine) registrations inside eachother. You can generate combined ones via the right-click context menu in the ''Data'' module and selecting ''Harden Transform''. Note that the original transform or volume is replaced when selecting ''Harden Transform'', so it is recommended to rename the node afterwards to document the fact. &amp;lt;br&amp;gt;&lt;br /&gt;
Currently (v.3.6.1) BSpline transforms cannot be combined with other transforms, so if you have combinations of Affine and BSpline or multiple BSpline transforms you need to resample multiple times to apply them all. We recommend to supersample the volume beforehand to counteract interpolation blurring.&lt;br /&gt;
&lt;br /&gt;
== Can I combine image and surface registration? ==&lt;br /&gt;
Not simultaneously. You can run surface and image registrations separately and then combine the transforms, but there is currently no support to combine both surface and intensity data into a single cost function.&lt;br /&gt;
&lt;br /&gt;
== What's the difference between BRAINSfit and BRAINSDemonWarp? ==&lt;br /&gt;
[[Modules:BRAINSFit|BRAINSfit]] performs affine and BSpline registration that commonly will have less than a few hundred DOF, whereas [[Modules:BRAINSDemonWarp|BRAINSDemonWarp]] performs a optic flow high-DOF warping scheme that has many thousands of DOF and is significantly less constrained.&lt;br /&gt;
&lt;br /&gt;
== Is the BRAINSfit registration for brain images only? ==&lt;br /&gt;
No, it is applicable and has been used successfully on non-brain image data. See the [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:RegLibTable Registration Case Library for examples]. The ''BRAINS'' name is derived from the ICTS at program at the University of Iowa, where it was developed, details of which you will find [http://www.icts.uiowa.edu/confluence/display/BRAINSPUBLIC/Home here].&lt;br /&gt;
&lt;br /&gt;
== What's the difference between Fast Rigid and Linear Registration? ==&lt;br /&gt;
None, both run the same underlying algorithm. The ''Linear Registration'' module is an older version that was kept for compatibility and reference reasons.&lt;br /&gt;
&lt;br /&gt;
== Which registration methods offer non-rigid transforms? ==&lt;br /&gt;
If including ''Affine'' as nonrigid, then all except the ''Fast Rigid'' module do support non-rigid transforms. In the more common understanding, non-rigid transforms with more than 12 DOF are offered by the [[Modules:DeformableB-SplineRegistration-Documentation-3.6|Fast BSpline]], [[Modules:BRAINSFit|BRAINSFit]], [[Modules:RegisterImages-Documentation-3.6|Expert Automated]], and [[Modules:BRAINSDemonWarp|BRAINSDemonWarp]] modules, as well as by the extensions like [[Modules:PlastimatchDICOMRT|Plastimatch]] or [[Modules:HammerRegistration|HAMMER]].&amp;lt;br&amp;gt;&lt;br /&gt;
For a detailed review on specific registration features consult the [[Registration:Categories|'''Slicer Registration Portal Page''']].&lt;br /&gt;
&lt;br /&gt;
== Which registration methods offer masking? ==&lt;br /&gt;
Masking is supported directly by the [[Modules:RegisterImages-Documentation-3.6|Expert Automated]] module, [[Modules:BRAINSFit|BRAINSfit]] and [[Modules:RegisterImagesMultiRes-Documentation-3.6|Robust Multiresolution]] module. Note that the use of masks differs among these:&lt;br /&gt;
:*[[Modules:RegisterImages-Documentation-3.6|Expert Automated]] module: requires binary mask for fixed image only. &lt;br /&gt;
:*[[Modules:RegisterImagesMultiRes-Documentation-3.6|Robust Multiresolution]] module: also allows mask in the form of  simple ROI block; requires mask for fixed image only. &lt;br /&gt;
:*[[Modules:BRAINSFit|BRAINSfit]] : requires mask for both the fixed and moving image.&lt;br /&gt;
For a detailed review on specific registration features consult the [[Registration:Categories|'''Slicer Registration Portal Page''']].&lt;br /&gt;
&lt;br /&gt;
== Is there a function to convert a box ROI into a volume labelmap? ==&lt;br /&gt;
Yes. Most registration functions that offer masking require a binary labelmap as mask input. This goes for the [[Modules:BRAINSFit|BRAINSfit]] and [[Modules:RegisterImages-Documentation-3.6|Expert Automated]] modules. The exception is the [[Modules:RegisterImagesMultiRes-Documentation-3.6|Robust Multiresolution]] module, which allows a  simple ROI box as mask also.&lt;br /&gt;
The [[Modules:CropVolume-Documentation-3.6|Crop Volume]] module will generate a labelmap from a defined box. You can create a new ROI box or select an existing one. You must select an image volume to crop for the operation, even if you're only interested in the ROI labelmap. You need not select a dedicated output for the labelmap, it is generated automatically when the cropped volume is produced, and will be called ''Subvolume_ROI_Label'' in the MRML tree. After creating the box ROI labelmap, simply delete the cropped volume and other output like the &amp;quot;''...resample-scale-1.0&amp;quot;'' volume.&amp;lt;br&amp;gt;&lt;br /&gt;
Likely you will need the volume with the same dimension and pixel spacing as the reference image. The box volume produced above has the correct dimension, but is only 1 voxel in size. Hence there is a second step required, which is to resample the ''Subvolume_ROI_Label'' to the same resolution: use the [[Modules:ResampleScalarVectorDWIVolume-Documentation-3.6|Resample ScalarVectorDWI]] module and select the appropriate reference and ''Nearest Neighbor'' as interpolation method. Finally go to the ''Volumes'' module and check the ''Labelmap'' box in the info tab to turn the volume into a labelmap.&lt;br /&gt;
&lt;br /&gt;
== BRAINSDemonWarp won't save the result transform ==&lt;br /&gt;
[[Modules:BRAINSDemonWarp|BRAINSDemonWarp]] is a non-rigid registration method that is memory and computation intensive. Depending on image size &amp;amp; system, you may reach memory limits.  Open the ''Error Log'' dialog (Window menu) and select the &amp;quot;BRAINSDemon Warp output&amp;quot; line to see the specific error that is being reported there.  If you get an error other than the ones discussed here please send it to the [mailto:slicer-users@bwh.harvard.edu Slicer User Mailing List]. &amp;lt;br&amp;gt;&lt;br /&gt;
A memory error would look something like this:&lt;br /&gt;
  vtkCommandLineModuleLogic (0x82a0d40): BRAINSDemonWarp standard error: &lt;br /&gt;
  BRAINSDemonWarp(53365,0xa0230540) malloc: *** mmap(size=503316480) failed (error code=12)&lt;br /&gt;
  *** error: can't allocate region&lt;br /&gt;
In that case try reducing the number of Pyramid levels.&lt;br /&gt;
Note that the output transform is a deformation field, which is a large  4-dimensional volume , and support for handling and visualizing deformation fields within Slicer (v.3.6.1)  is limited.   For example:&lt;br /&gt;
&lt;br /&gt;
  ERROR: In /Users/hayes/Slicer-3-6/Slicer3/Libs/MRML/vtkMRMLTransformStorageNode.cxx, line 594&lt;br /&gt;
  vtkMRMLTransformStorageNode (0x3d280b20): Grid transform with a non-identity orientation matrix is not yet implemented&lt;br /&gt;
&lt;br /&gt;
If the error log reports that BRAINSDemonWarp itself completed ok, but sending the transform file back to Slicer failed, that is related to the mentioned limitation in handling deformation fields in the GUI. In that case use the commandline option to save the deformation field to a file for later use.&lt;br /&gt;
== Physical Space vs. Image Space: how do I align two registered images to the same image grid? ==&lt;br /&gt;
Slicer displays all data in a physical coordinate system. Hence an image can only be displayed correctly if it contains sufficient header information to relate the image voxel grid with physical space. This includes voxel size, axis orientation and scan order.  It is therefore possible for two images to be aligned when viewed in Slicer, even though their underlying image grid is oriented very differently. To match the two images in image as well as physical space, the abovementioned axis direction, voxel size and image grid orientation must match. The procedure will depend on the image data, but the main tools at your disposal are the [[Modules:ResampleScalarVectorDWIVolume-Documentation-3.6|ResampleScalarVectorDWIVolume]] and  [[Modules:OrientImages-Documentation-3.6|Orient Images]] module. &lt;br /&gt;
== Is there a way to perform an Eddy current correction on DWI in Slicer ==&lt;br /&gt;
There is a way, you need to download the GTRACT extension (you can get it from the menu View-&amp;gt;Extension Manager)&lt;br /&gt;
Once you have it you will see a new module category under the diffusion one called &amp;quot;GTRACT&amp;quot;.&lt;br /&gt;
Within this category there is a module called &amp;quot;Coregister B-values&amp;quot;.&lt;br /&gt;
This module takes a DWI image and outputs a DWI image in which every DWI is co-registered to one of the B0 images (by default the first one), this can be regarded as motion correction. Within this module there is a checkbox in the &amp;quot;Registration Parameters&amp;quot; section: &amp;quot;Eddy Current Correction&amp;quot;. This will tune some of the registration parameters such that some Eddy Current artifacts are corrected.&lt;br /&gt;
&lt;br /&gt;
== The registration transform file saved by Slicer does not seem to match what is shown ==&lt;br /&gt;
When executing the following procedure:&lt;br /&gt;
# Create a transform.&lt;br /&gt;
# Adjust it by adjusting the 6 slider bars in the Transforms module.&lt;br /&gt;
# Save the transform as a .tfm file.&lt;br /&gt;
# Inspect the contents of the .tfm file in a text editor, and compare them to what is shown in the 4x4 matrix in the Transforms module.&lt;br /&gt;
# re-load the .tfm back into slicer and confirm you have the same data as you saved from slicer.  &lt;br /&gt;
you will notice that, even though the reloaded transform does match, the contents of the .tfm file and what is displayed in the Transforms module do not match. The explanation of this is kind of buried in the details of transforms. The issue relates to the difference between slicer which uses a &amp;quot;computer graphics&amp;quot; view of the world and itk which uses an &amp;quot;image processing&amp;quot; view of the world. By this we mean that in slicer you have a matrix hierarchy and you think in terms of moving an object from one spot to another - so a transform that has a positive &amp;quot;superior&amp;quot; value wrapped around a volume moves the volume up in patient space.&amp;lt;br&amp;gt;&lt;br /&gt;
But ITK thinks of transformations in terms of mapping backwards from the display space back to the original image.  Imagine if you are stepping sequentially through the output pixels then ITK wants to know the transform that takes you back to the input pixels that it needs to use to calculate the output. This modeling vs. resampling issue is in addition to the LPS/RAS issue, which is the 2nd (invisible) difference between the two transforms.&amp;lt;br&amp;gt;&lt;br /&gt;
In Summarry:&lt;br /&gt;
#The transform represented in the widget is in RAS.&lt;br /&gt;
#The transform represented in the tfm file is in LPS.&lt;br /&gt;
#The transform represented in the file is the inverse of the transform in the widget (plus it has the LPS/RAS conversion applied).&lt;br /&gt;
#The order of the parameters in the tfm are the elements of the upper 3x3 of the transform displayed in the widget followed by the elements in the last column of the widget.&lt;br /&gt;
As an example:&lt;br /&gt;
# take the transform from the widget: --&amp;gt; c = [0.996918 -0.078459 -0.000000 6.899965; 0.068016 0.864225 -0.498488 -95.999726; 0.039111 0.496951 0.866896 266.299559; 0.0 0.000000 -0.000000 1.000000]&lt;br /&gt;
#Take the inverse --&amp;gt; inv(c)  =&lt;br /&gt;
    0.9969    0.0680    0.0391  -10.7644&lt;br /&gt;
   -0.0785    0.8642    0.4970  -48.8313&lt;br /&gt;
   -0.0000   -0.4985    0.8669 -278.7091&lt;br /&gt;
         0         0         0    1.0000 &lt;br /&gt;
:3.  LPS to RAS conversion will  take you all the way to what is the file, i.e. pre and post multiply inv(c) by the respective matrices.&lt;br /&gt;
&lt;br /&gt;
== How can I see the parameters of the function that describe a BSpline registration/deformation? == &lt;br /&gt;
To see the parameters of the transform, you have to write it to file and investigate by other means. The BSpline transform is saved as a ITK .tfm which is a text file containing the displacement vectors of each grid-point, plus any initial affine transform (if present). One nice way to visualize is to create a grid image of the same dimensions as your target, and then apply the transform to this grid image, you can then see the deformations as deformations in the gridlines. [http://na-mic.org/Wiki/index.php/Projects:RegistrationDocumentation:UseCaseInventory:Auxiliary Example Grid images can be downloaded here].&lt;br /&gt;
Use the Modules:ResampleScalarVectorDWIVolume for the resampling.&lt;br /&gt;
https://www.slicer.org/wiki/Modules:ResampleScalarVectorDWIVolume-Documentation-3.6A quick way directly in slicer is to place the undeformed and deformed volumes into back- and foreground and fade back and forth with the fading slider.&lt;br /&gt;
Another alternative is to convert the transform into a 4-D deformation field directly and visualize it in slicer using RGB color. [[Slicer-3-6-FAQ#How_can_I_convert_a_BSpline_transform_into_a_deformation_field.3F|See FAQ below on how to convert.]]&lt;br /&gt;
&lt;br /&gt;
== How can I convert a BSpline transform into a deformation field? == &lt;br /&gt;
There is commandline functionality in Slicer to convert a  BSpline ITK transform  file (.tfm) into a deformation field volume. To execute, type (exchange ''/Applications/Slicer3.6.3'' with the path of your Slicer installation):&lt;br /&gt;
  /Applications/Slicer3.6.3/Slicer3 --launch /Applications/Slicer3.6.3/lib/Slicer3/Plugins/BSplineToDeformationField --tfm InputBSpline.tfm &lt;br /&gt;
   --refImage ReferenceImage.nrrd   --defImage Output_DeformationField.nrrd  &lt;br /&gt;
for more details try:&lt;br /&gt;
  /Applications/Slicer3.6.3/Slicer3 --launch /Applications/Slicer3.6.3/lib/Slicer3/Plugins/BSplineToDeformationField --help&lt;br /&gt;
&lt;br /&gt;
== My reoriented image returns to original position when saved; Problem with the ''Harden Transform'' function  == &lt;br /&gt;
[[Image:HardenTransform.png|200px|left|right click on the image and select &amp;quot;Harden Transform&amp;quot; from the popup menu to reorient an image]]&lt;br /&gt;
You can apply an affine transform to an image by creating a transform, placing the volume inside that transform in the ''Data'' module, and then selecting ''Harden Transform'' via the context-menu (right click on the image volume). This will move the image back out to the main level and &amp;quot;apply&amp;quot; the transform. It will, however, '''not resample''' the image data, but rather place the information about the new orientation into the image header. When the image is saved, this information is saved also as part of the file header, as long as orientation data is supported by the file format. If the saved volume is now loaded by another software that does not consider this header orientation (e.g. ImageJ) or does not visualize the image in physical space, then the image will appear in its old position. &amp;lt;br&amp;gt;&lt;br /&gt;
You can avoid this problem by actually resampling the image data. To do this, go to the [[Modules:ResampleScalarVectorDWIVolume-Documentation-3.6|Filtering/ResampleScalarVectorDWIVolume]] module, and select your image and transform as input, create a new volume as output and click Apply. This new volume will now be in the new orientation that will be retained if saved and reloaded elsewhere.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is the Meaning of 'Fixed Parameters' in the transform file (.tfm) of a BSpline registration ? == &lt;br /&gt;
A typical BSpline transform file will contain 2 transforms, an affine portion (commonly saved as &amp;quot;Transform 1&amp;quot; at the end of the file), and a nonrigid BSpline portion (commonly saved as &amp;quot;Transform 0&amp;quot;).  The bulk of the BSpline part are 3D displacement vectors for each of the BSpline grid-nodes in physical space, i.e. for each grid-node, there will be three blocks of displacements defining dx,dy,dz for all grid nodes. After this field is a &amp;quot;Fixed Parameters&amp;quot; section that may look like this:&lt;br /&gt;
  FixedParameters: 8 8 8 -54.1406 -54.1406 -35 54.1406 54.1406 35 1 0 0 0 1 0 0 0 1&lt;br /&gt;
The first 3 numbers are the actual grid size (number of knots in each dimension), which is always larger than your requested grid because the grid is extended beyond the image margin to prevent clipping. The next 3 numbers is the origin of the grid, spacing of the grid, and the direction cosines of the grid. More details on the format in the [http://www.itk.org/ItkSoftwareGuide.pdf  ITK documentation (ITKSoftwareGuide.pdf)]&lt;br /&gt;
&lt;br /&gt;
==I have some DICOM images that I want to reslice at an arbitrary angle ==&lt;br /&gt;
There's several ways to go about this. If you wish to register your image to another reference/target image, run one of the automated registration methods. If you wish to realign manually, most efficient way is to use the [[Modules:Transforms-Documentation-3.6|''Transforms'']] module. Once you have the desired orientation,  you need to apply the new orientation to the image. You can do this in 2 ways:  1) without or 2) with resampling the image data. &lt;br /&gt;
#Without resampling: In the Data module, select the image (inside the transforms node) and select &amp;quot;Harden Transforms&amp;quot; from the pulldown menu. This will write the new orientation in physical space into the image header. This will work only if other software you use and the image format you save it as support this form of orientation information in the image header. &lt;br /&gt;
# With resampling: Go to the  [[Modules:ResampleScalarVectorDWIVolume-Documentation-3.6|Filtering/ResampleScalarVectorDWIVolume]] module and create a new image by resampling the original with the new transform. This will incur interpolation blurring but is guaranteed to transfer for all image formats or software.&lt;br /&gt;
For more details on manual transform, see [[Slicer-3-6-FAQ#Can_I_manually_adjust_or_correct_a_registration.3F| this FAQ]] and the [[Slicer_3.6:Training|Manual RegistrationTutorial here]].&lt;br /&gt;
&lt;br /&gt;
= '''Developer FAQ''' =&lt;br /&gt;
&lt;br /&gt;
== Where can I find out about writing code for slicer3? ==&lt;br /&gt;
&lt;br /&gt;
The [[Slicer3:Developers|Developers]] page has lots of information.&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Modules:Volumes:Diffusion_Editor-Documentation-3.6&amp;diff=62672</id>
		<title>Modules:Volumes:Diffusion Editor-Documentation-3.6</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Modules:Volumes:Diffusion_Editor-Documentation-3.6&amp;diff=62672"/>
		<updated>2019-11-27T14:52:36Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation-3.6|Return to Slicer 3.6 Documentation]]&lt;br /&gt;
&lt;br /&gt;
[[Announcements:Slicer3.6#Highlights|Gallery of New Features]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
===Module Name ===&lt;br /&gt;
Diffusion Editor&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:DiffusionEditor helix.jpg         |thumb|250px|Diffusion Editor, showing tracts and glyphs on helix example]]&lt;br /&gt;
|[[Image:Tracts_glyphs.jpg                     |thumb|250px|tracts and glyphs view]]&lt;br /&gt;
|[[Image:Tracts_glyphs_90degrees.jpg |thumb|250px|tracts and glyphs view - +90° rotation of measurement frame]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
===Module Type &amp;amp; Category===&lt;br /&gt;
&lt;br /&gt;
Type: Interactive&lt;br /&gt;
&lt;br /&gt;
Category: Diffusion Imaging&lt;br /&gt;
&lt;br /&gt;
===Authors, Collaborators &amp;amp; Contact===&lt;br /&gt;
* Author: Kerstin Kessel&lt;br /&gt;
* Contributor: Steve Pieper&lt;br /&gt;
* Contact: Steve Pieper, pieper at bwh.harvard.edu&lt;br /&gt;
&lt;br /&gt;
===Module Description===&lt;br /&gt;
&lt;br /&gt;
As the documentation of acquisition parameters in dicom data is not standardized, MRI scanners (Siemens, GE) handle gradients/bValues/measurement frame differently in their dicom headers. Because of that there is a big need to add/modify them manually.&lt;br /&gt;
&lt;br /&gt;
The Diffusion Editor is a 3D Slicer module, which allows modifying parameters (gradients, bValues, measurement frame) of DWI data and provides a quick way to interpret them. For that it estimates a tensor and shows glyphs and tracts for visual exploration. &lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
===Use Cases, Examples===&lt;br /&gt;
&lt;br /&gt;
This module is especially appropriate for these use cases:&lt;br /&gt;
&lt;br /&gt;
For DWI&lt;br /&gt;
* Use Case 1: Edit gradients manually or load existing gradients from file (.txt or .nhdr).&lt;br /&gt;
* Use Case 2: Edit the [[Modules:Volumes:Diffusion_Editor-Documentation-3.2#Measurement_Frame| measurement frame]] manually or simply rotate/swap/invert columns by selecting them. &lt;br /&gt;
* Use Case 3: Test the parameters by estimating a tensor and displaying glyphs and tracts.&lt;br /&gt;
For DTI&lt;br /&gt;
* Use Case 2: Edit the measurement frame as described above.  &lt;br /&gt;
* Use Case 3: Test the parameters by displaying glyphs and tracts.&lt;br /&gt;
&lt;br /&gt;
===Tutorials===&lt;br /&gt;
&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
&lt;br /&gt;
* Download Slicer. The most recent stable Slicer version can be found [http://www.slicer.org/pages/Downloads here]. Or load Slicer's latest snapshot.&lt;br /&gt;
* You can also use SVN to checkout the trunk of the current version of Slicer. See [[Slicer3:Build_Instructions| here]] for more instructions on how to build Slicer.&lt;br /&gt;
* Download example data: [[ media:DiffusionEditor_ExampleData.zip | DiffusionEditor_ExampleData.zip ]] and unzip it.&lt;br /&gt;
&lt;br /&gt;
To start a tutorial video simply click on the link in the table.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#abcdef&amp;quot;&lt;br /&gt;
! title !!short description&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Load DWI-Dicom| Load DICOM]]  ||Load a DWI dicom data set in Slicer.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Edit Gradients | Edit gradients ]]||Change gradients manually and load them from a file. Save your changes afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Edit Measurement frame| Edit measurement frame]] ||Change the measurement frame by swapping and inverting. Save your changes afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Testing | Testing ]]||Run tensor estimation and show glyphs and tracts; &lt;br /&gt;
Run second estimation with 90°rotation and switch between both tensors and see the impact of that change.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Quick Tour of Features and Use===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
* '''Measurement frame:'''&lt;br /&gt;
# The determinant of the measurement frame has to be 1. This is checked by the editor.&lt;br /&gt;
# '''Invert''': Select the columns you want to invert.&lt;br /&gt;
# '''Swap''': Select two columns you want to swap.&lt;br /&gt;
# '''Rotate''': Select one column you want to rotate by an angle you can choose from a given set of values or set yourself.&lt;br /&gt;
# '''Identity''': Set the measurement frame to the identity matrix.&lt;br /&gt;
# Set your own values.&lt;br /&gt;
&lt;br /&gt;
* '''Gradients frame:'''&lt;br /&gt;
# If the active volume is a DWI the editor will put the gradients in the text field; otherwise this frame is disabled.&lt;br /&gt;
# You can copy/paste your own gradients in the text field or change them manually.&lt;br /&gt;
# You can load gradients from a text file or .nhdr file. For the .txt file the format of gradients is easy, it can contain only values ([[ media:DiffusionEditor_ExampleData.zip | see example data ]]).&lt;br /&gt;
&lt;br /&gt;
* '''Undo/Redo/Restore:'''&lt;br /&gt;
#'''Undo''': Undo the last change of measurement/gradient values.&lt;br /&gt;
#'''Redo''': Redo the last change of measurement/gradient values.&lt;br /&gt;
#'''Restore''': All parameters are restored to original.&lt;br /&gt;
&amp;lt;font color=&amp;quot;Red&amp;quot;&amp;gt;NOTE:&amp;lt;/font&amp;gt; You lose all previous changes when a new active volume is loaded or selected.&lt;br /&gt;
&lt;br /&gt;
* '''Testing frame:'''&lt;br /&gt;
# '''Run''' tensor estimation. The new tensor node shows up in the DTI selector.&lt;br /&gt;
# Select a DTI node from the current mrml scene and for&lt;br /&gt;
## Glyph visibility: Select the planes on which you want to see glyphs and adjust the glyph spacing.&lt;br /&gt;
## Tract visibility: Add some fiducials and choose the fiducial list in the selector. Show tracts with Tractography Fiducial Seeding.&lt;br /&gt;
&lt;br /&gt;
|[[Image:DiffusionEditor_v8.jpg|thumb|280px|User Interface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
===Notes from the Developer(s)===&lt;br /&gt;
&lt;br /&gt;
==== Measurement Frame ====&lt;br /&gt;
The measurement frame of all DWI is always displayed in the RAS space. That's because Slicer stores all internal coordinates in RAS. &lt;br /&gt;
If you save changes in a new .nhdr file the measurement frame will always be in RAS.&lt;br /&gt;
&lt;br /&gt;
==== Used Tensor Estimation ==== &lt;br /&gt;
The Diffusion Editor uses the Tensor Estimation CLM (Command Line Module) of Slicer to compute tensors. &lt;br /&gt;
* The module provides the linear-least-squares, non-linear-least squares and weighted-least-square method for the estimation. But the DiffusionEditor uses the linear-least-squares method by default, as it is the fastest and most robust.&lt;br /&gt;
* See [[Slicer3:DTMRI#Tensor_Estimation_from_DWI_Module],|[http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:TeemExamples#tend_estim:_tensor_estimation]] for more information on the Tensor Estimation CLM.&lt;br /&gt;
&lt;br /&gt;
The testing frame provides just a small subset of DTI display options. For more detailed settings&lt;br /&gt;
* load the DTI as the active volume in the volumes modul&lt;br /&gt;
* go to the display frame and adjust parameters.&lt;br /&gt;
&lt;br /&gt;
==== Used Tractography Fiducial Seeding ==== &lt;br /&gt;
The Diffusion Editor uses the Tractography Fiducial Seeding module of Slicer to compute tracts.&lt;br /&gt;
* The Diffusion Editor uses the default parameters. To change tractography parameters select the modul: Tractography/Seeding/Fiducial Seeding [[Slicer3:DTMRI#Tractography_Fiducial_Seeding_Module].|Changes there have an immediate impact for the tracts in the Diffusion Editor.&lt;br /&gt;
* For more detailed exploring of tracts use the Fiducial Seeding module or for display options select the module Tractography/DisplayLoadSave [https://www.slicer.org/wiki/Slicer3:DTMRI#Tractography_Module]].* See [[Slicer3:DTMRI#Tractography_Module|here]] for more information on the Tractography modules.&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
&lt;br /&gt;
No other modules or packages are required for this module's use.&lt;br /&gt;
&lt;br /&gt;
===Tests===&lt;br /&gt;
&lt;br /&gt;
On the [http://www.cdash.org/CDash/index.php?project=Slicer3 Dashboard], these tests verify that the module is working on various platforms:&lt;br /&gt;
&lt;br /&gt;
*[http://svn.slicer.org/Slicer3/trunk/Modules/Volumes/Testing/DiffusionEditor_GradientsTest.tcl DiffusionEditor_GradientsTest.tcl]&lt;br /&gt;
*[http://svn.slicer.org/Slicer3/trunk/Modules/Volumes/Testing/DiffusionEditorTensorTest.tcl DiffusionEditorTensorTest.tcl]&lt;br /&gt;
*[http://svn.slicer.org/Slicer3/trunk/Modules/Volumes/Testing/DiffusionEditorTest.tcl DiffusionEditorTest.tcl]&lt;br /&gt;
*[http://svn.slicer.org/Slicer3/trunk/Modules/Volumes/Testing/DiffusionEditor_GradientsTest.tcl DiffusionEditor_GradientsTest.tcl]&lt;br /&gt;
&lt;br /&gt;
===Known bugs===&lt;br /&gt;
&lt;br /&gt;
Follow this [http://na-mic.org/Mantis/main_page.php link] to the Slicer3 bug tracker. &lt;br /&gt;
&lt;br /&gt;
===Usability issues===&lt;br /&gt;
&lt;br /&gt;
Follow this [http://na-mic.org/Mantis/main_page.php link] to the Slicer3 bug tracker. Please select the '''usability issue category''' when browsing or contributing.&lt;br /&gt;
&lt;br /&gt;
* Changing the measurement frame of a DTI has no impact. The tensor is not estimated again. &lt;br /&gt;
** Future work: Adding new rotation filter for tensors (contributed by Raul San Jose)&lt;br /&gt;
* Multiple bValues are not displayed. Currently to describe acquisitions with different b-values the magnitudes of the gradients are changed. See the nrrd format page about [http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:Nrrd_format#Describing_DWIs_with_differen_b-values describing DWIs with different b-values].&lt;br /&gt;
** Future work: Adding different views of gradients/bValues.&lt;br /&gt;
* Checking gradients when one types new values in the textbox is slowly. Reason: SetDiffusionGradients of the vtkMRMLDiffusionWeightedVolumeNode seems to trigger many events.&lt;br /&gt;
** Future work: Use [[Slicer3:EventBroker|Eventbroker]] for performance analysis and if necessary turn off events.&lt;br /&gt;
&lt;br /&gt;
===Source code &amp;amp; documentation===&lt;br /&gt;
&lt;br /&gt;
Links to the module's source code:&lt;br /&gt;
&lt;br /&gt;
Source code:&lt;br /&gt;
*[http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorWidget.cxx vtkSlicerDiffusionEditorWidget.cxx]&lt;br /&gt;
*[http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorWidget.h vtkSlicerDiffusionEditorWidget.h]&lt;br /&gt;
&lt;br /&gt;
*[http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorLogic.cxx vtkSlicerDiffusionEditorLogic.cxx]&lt;br /&gt;
*[http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorLogic.h vtkSlicerDiffusionEditorLogic.h]&lt;br /&gt;
&lt;br /&gt;
*[http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerMeasurementFrameWidget.cxx vtkSlicerMeasurementFrameWidget.cxx]&lt;br /&gt;
*[http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerMeasurementFrameWidget.h vtkSlicerMeasurementFrameWidget.h]&lt;br /&gt;
&lt;br /&gt;
*[http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerGradientsWidget.cxx vtkSlicerGradientsWidget.cxx]&lt;br /&gt;
*[http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerGradientsWidget.h vtkSlicerGradientsWidget.h]&lt;br /&gt;
&lt;br /&gt;
*[http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionTestingWidget.cxx vtkSlicerDiffusionTestingWidget.cxx]&lt;br /&gt;
*[http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionTestingWidget.h vtkSlicerDiffusionTestingWidget.h]&lt;br /&gt;
 &lt;br /&gt;
Doxygen documentation:&lt;br /&gt;
*[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classvtkSlicerDiffusionEditorWidget.html SlicerDiffusionEditorWidget]&lt;br /&gt;
*[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classvtkSlicerDiffusionEditorLogic.html DiffusionEditorLogic]&lt;br /&gt;
*[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classvtkSlicerGradientsWidget.html GradientsWidget]&lt;br /&gt;
*[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classvtkSlicerDiffusionTestingWidget.html DiffusionTestingWidget]&lt;br /&gt;
&lt;br /&gt;
== More Information == &lt;br /&gt;
&lt;br /&gt;
===Acknowledgment===&lt;br /&gt;
This research project was part of a Master thesis (Diplomarbeit) in cooperation of the faculty of Medical Informatics, University of Heidelberg/Germany and the Surgical Planning Lab. It was supported by a grant of the Lions Club Heilbronn/Franken.&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
[[Image:Thesis_letter.pdf|Thesis]]&lt;br /&gt;
&lt;br /&gt;
[[Slicer3:DTMRI|DTMRI]]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:Nrrd_format Nrrd format]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:DICOM_for_DWI_and_DTI DICOM for DWI and DTI]&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/FAQ/Extensions&amp;diff=62671</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=62671"/>
		<updated>2019-11-27T14:52:34Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;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 &amp;lt;code&amp;gt;SlicerAwesomeFilter&amp;lt;/code&amp;gt;. Note that the following variations are also possible &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;
We suggest you keep the Slicer prefix in the extension name when the extension is a Slicer interface to some third-party library (SlicerOpenIGTLink, SlicerElastix, SlicerOpenCV, …).&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;
'''Note: to build C++ extensions you need to have built Slicer from source on your machine; they cannot be built against a binary download.'''&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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;
&lt;br /&gt;
'''MaxOSX''': Extension '''must be configured''' specifying &amp;lt;code&amp;gt;CMAKE_OSX_*&amp;lt;/code&amp;gt; variables matching the one used to configure Slicer:&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_ARCHITECTURES:STRING=x86_64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=/same/as/Slicer&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;-DCMAKE_OSX_SYSROOT:PATH=SameAsSlicer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Run ''CMake (cmake-gui)'' from the Windows Start menu.&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;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;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;code&amp;gt;MyExtension.sln&amp;lt;/code&amp;gt; in Visual Studio&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select '''Release''' build configuration.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select 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;
== Is there a way to automatically set CMAKE_OSX_* variables ? ==&lt;br /&gt;
&lt;br /&gt;
Within your extension, including the &amp;lt;code&amp;gt;ConfigurePrerequisites&amp;lt;/code&amp;gt; component before the project statement should ensure it uses the same CMAKE_OSX_* variables as Slicer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find_package(Slicer COMPONENTS ConfigurePrerequisites REQUIRED)&lt;br /&gt;
&lt;br /&gt;
project(Foo)&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
find_package(Slicer REQUIRED)&lt;br /&gt;
include(${Slicer_USE_FILE})&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;lt;code&amp;gt;ConfigurePrerequisites&amp;lt;/code&amp;gt; component should be considered experimental and could change without notice.&lt;br /&gt;
&lt;br /&gt;
For more details, see [https://github.com/Slicer/Slicer/blob/75fc96bf05e65659eb5204f47b5205442cc6fd8e/CMake/SlicerConfig.cmake.in#L10-L38 here].&lt;br /&gt;
&lt;br /&gt;
== How to run extension tests ? ==&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ ctest -j&amp;lt;NUMBEROFCORES&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
To run all tests, start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&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; in Visual Studio&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select &amp;lt;code&amp;gt;RUN_TESTS&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;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run test individually, open  Command Line Prompt. [http://windows.microsoft.com/en-us/windows/command-prompt-faq Need help?]&lt;br /&gt;
{{pre2|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;gt; cd C:\path\to\MyExtension-build&lt;br /&gt;
&amp;gt; ctest -R NameOfTest -V&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To debug individual tests.&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;Launch Visual Studio from the Command Line Prompt: &amp;lt;code&amp;gt;C:\path\to\Slicer-build\Slicer.exe --VisualStudio --launcher-no-splash --launcher-additional-settings C:\path\to\MyExtension-build\AdditionalLauncherSettings.ini C:\path\to\MyExtension-build\MyExtension.sln&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Find the project of the test you want to debug (e.g. ''qSlicerMODULE_NAMEModuleGenericCxxTests'').&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Go to the project debugging properties (right-click -&amp;gt; Properties, then Configuration Properties / Debugging).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In ''Command Arguments'', type the name of the test you want to run (e.g. ''qSlicerMODULE_NAMEModuleGenericTest'').&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the test takes arguments, enter the arguments after the test name in ''Command Arguments''.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the project as the StartUp Project (right-click -&amp;gt; Set As StartUp Project).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start debugging (F5).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&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; in Visual Studio&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;
{{remark|red|{{:Documentation/{{documentation/version}}/Developers/Tutorials/BuildTestPackageDistributeExtensions/ExperimentalFolderAccess}} }}&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;packageupload&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;| Linux or MacOSX (Makefile)&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;
&lt;br /&gt;
Start a terminal.&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 packageupload&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
Run ''CMake (cmake-gui)'' from the Windows Start menu.&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;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;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start Windows Explorer. [http://www.wikihow.com/Open-Windows-Explorer Need help?]&lt;br /&gt;
&amp;lt;ol&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; in Visual Studio&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;packageupload&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;
Alternatively, you could also [[#How_to_cache_API_credentials_.3F|cache your API credentials]].&lt;br /&gt;
&lt;br /&gt;
== How to build Slicer bundling extensions ? ==&lt;br /&gt;
&lt;br /&gt;
Configuring Slicer specifying option &amp;lt;tt&amp;gt;EXTENSION_SOURCE_DIRS&amp;lt;/tt&amp;gt; as a list of extension source directories will do it. Multiple extension source paths need to be separated using semicolons.&lt;br /&gt;
&lt;br /&gt;
Note that Superbuild-type extensions expected to be bundled have to be updated to explicitly list Slicer dependencies. More specifically, the &amp;lt;tt&amp;gt;External_*.cmake&amp;lt;/tt&amp;gt; files that were implicitly depending on project built by Slicer have to be updated.&lt;br /&gt;
&lt;br /&gt;
For example, the file [https://github.com/KitwareMedical/SlicerVirtualReality/blob/master/SuperBuild/External_VTKRenderingOpenVR.cmake &amp;lt;tt&amp;gt;External_VTKRenderingOpenVR.cmake&amp;lt;/tt&amp;gt;] available in the [https://github.com/KitwareMedical/SlicerVirtualReality &amp;lt;tt&amp;gt;SlicerVirtualReality&amp;lt;/tt&amp;gt;] extension was updated to append &amp;lt;tt&amp;gt;VTKv9&amp;lt;/tt&amp;gt; to the list of dependencies if bundled in Slicer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
    &lt;br /&gt;
set(${proj}_DEPENDENCIES OpenVR)&lt;br /&gt;
if(DEFINED Slicer_SOURCE_DIR)&lt;br /&gt;
  list(APPEND ${proj}_DEPENDENCIES VTKv9)&lt;br /&gt;
endif()&lt;br /&gt;
    &lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;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;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;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;code&amp;gt;packageupload&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Locally package and upload the extension&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;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;&amp;lt;s&amp;gt;ExperimentalUpload&amp;lt;/s&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;s&amp;gt;Equivalent to Experimental target followed by packaging and upload of the extension on the extension server.&amp;lt;/s&amp;gt; Not available anymore. Removed in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=26271 r26271]&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;&amp;lt;s&amp;gt;ExperimentalUploadOnly&amp;lt;/s&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;s&amp;gt;Only proceed to the upload of the extension on the extension server.&amp;lt;/s&amp;gt;. Not available anymore. Superseded by &amp;lt;code&amp;gt;packageupload&amp;lt;/code&amp;gt;. Removed in [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=26271 r26271]&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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/DoSomethingAwesome&amp;quot;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;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: https://www.slicer.org/wiki/Documentation/Nightly/Extensions/SkullStripper == 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''' &amp;lt;s&amp;gt;and also '''continuously''' during the day&amp;lt;/s&amp;gt;.&lt;br /&gt;
* Slicer {{documentation/currentversion}} lastest stable release package occurs '''every night'''.&lt;br /&gt;
&lt;br /&gt;
All extensions associated can be expected by mid-morning. Checking the dashboard will give a definite answer. Check [[Documentation/Nightly/Developers/Tutorials/BuildTestPackageDistributeExtensions#Continuous_Integration|this page]] to learn how to easily get the status of any given extension.&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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/EmptyExtensionTemplate&amp;quot;)  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://www.slicer.org/w/img_auth.php/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;https://www.slicer.org/wiki/Documentation/Nightly/Extensions/EmptyExtensionTemplate&amp;quot;)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://www.slicer.org/w/img_auth.php/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;br /&gt;
&lt;br /&gt;
== How to package third party libraries ? ==&lt;br /&gt;
&lt;br /&gt;
Extensions integrating third party libraries should follow the [https://github.com/Slicer/Slicer/tree/master/Utilities/Templates/Extensions/SuperBuild SuperBuild extension template].&lt;br /&gt;
&lt;br /&gt;
Each third party libraries will be configured and built using a dedicated &amp;lt;code&amp;gt;External_MyLib.cmake&amp;lt;/code&amp;gt; file, the install location of binaries and libraries should be set to &amp;lt;code&amp;gt;Slicer_INSTALL_BIN_DIR&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Slicer_INSTALL_LIB_DIR&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Also, starting with [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=25959 r25959], extension can package python modules and packages using &amp;lt;code&amp;gt;PYTHON_SITE_PACKAGES_SUBDIR&amp;lt;/code&amp;gt; CMake variable to specify the install destination. &lt;br /&gt;
&lt;br /&gt;
These relative paths are the one that the extensions manager will consider when generating the launcher and application settings for a given extension.&lt;br /&gt;
&lt;br /&gt;
== Can I use C++11/14/17 language features ? ==&lt;br /&gt;
&lt;br /&gt;
Since Slicer is not built with these features (it used c++98/c++03), you should not use C++11/14/17 language features in your extensions.&lt;br /&gt;
&lt;br /&gt;
If your extension can be compiled as a standalone project where you would like to use newer feature, you could rely on CMake detecting compile features. See [https://cmake.org/cmake/help/v3.5/manual/cmake-compile-features.7.html cmake-compile-features] for more details.&lt;br /&gt;
&lt;br /&gt;
See the labs topic on [https://www.slicer.org/wiki/Documentation/Labs/UpgradingCompilerInfrastructure upgrading compiler infrastructure] for additional information/status.&lt;br /&gt;
&lt;br /&gt;
== How do I publish a paper about my extension ? ==&lt;br /&gt;
&lt;br /&gt;
Consider publishing a paper describing your extension.  This link contains a list of journals that publish papers about software:&lt;br /&gt;
&lt;br /&gt;
[http://www.software.ac.uk/resources/guides/which-journals-should-i-publish-my-software http://www.software.ac.uk/resources/guides/which-journals-should-i-publish-my-software]&lt;br /&gt;
&lt;br /&gt;
== How to force a different Slicer revision for downloading different extension ? ==&lt;br /&gt;
&lt;br /&gt;
Since extensions available from the [[Documentation/{{documentation/currentversion}}/SlicerApplication/ExtensionsManager|Extensions Manager]] are associated with a particular slicer revision, for testing purpose it is practical to override the current revision. This can be done by explicitly setting a revision number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; extensionManagerModel = slicer.app.extensionsManagerModel()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; extensionManagerModel.slicerRevision = &amp;quot;25742&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On other approach is to re-configure Slicer setting the &amp;lt;tt&amp;gt;Slicer_FORCED_WC_REVISION&amp;lt;/tt&amp;gt; option.&lt;br /&gt;
&lt;br /&gt;
== How to address ITK test driver caught an ITK exception &amp;quot;Could not create IO object for reading file&amp;quot; ? ==&lt;br /&gt;
&lt;br /&gt;
If the following execption is reported when trying to run tests associated with a CLI modules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ITK test driver caught an ITK exception:&lt;br /&gt;
 &lt;br /&gt;
 itk::ImageFileReaderException (0x1bd8430)&lt;br /&gt;
 Location: &amp;quot;unknown&amp;quot; &lt;br /&gt;
 File: /path/to/Slicer-SuperBuild/ITK/Modules/IO/ImageBase/include/itkImageFileReader.hxx&lt;br /&gt;
 Line: 139&lt;br /&gt;
 Description:  Could not create IO object for reading file /path/to/image.nrrd&lt;br /&gt;
   Tried to create one of the following:&lt;br /&gt;
     MRMLIDImageIO&lt;br /&gt;
   You probably failed to set a file suffix, or&lt;br /&gt;
     set the suffix to an unsupported type.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It most likely means that the test driver is not linking against &amp;lt;tt&amp;gt;ITKFactoryRegistration&amp;lt;/tt&amp;gt; library and/or registrering the ITK factories. To address this, the test driver should be updated:&lt;br /&gt;
* (1) to link against &amp;lt;tt&amp;gt;${SlicerExecutionModel_EXTRA_EXECUTABLE_TARGET_LIBRARIES}&amp;lt;/tt&amp;gt;&lt;br /&gt;
* (2) to include &amp;lt;tt&amp;gt;itkFactoryRegistration.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
* (3) to call &amp;lt;tt&amp;gt;itk::itkFactoryRegistration();&amp;lt;/tt&amp;gt; in its main function&lt;br /&gt;
&lt;br /&gt;
For more details, read [[Documentation/Nightly/Developers/FAQ#What_is_the_ITKFactoryRegistration_library_.3F|What is the ITKFactoryRegistration library ?]]&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Modules:Volumes:Diffusion_Editor-Documentation&amp;diff=62670</id>
		<title>Modules:Volumes:Diffusion Editor-Documentation</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Modules:Volumes:Diffusion_Editor-Documentation&amp;diff=62670"/>
		<updated>2019-11-27T14:52:17Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Documentation|Return to Slicer Documentation]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Diffusion Editor=&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:DiffusionEditor helix.jpg|thumb|250px|Diffusion Editor, showing tracts and glyphs on helix example]]&lt;br /&gt;
|[[Image:Tracts_glyphs.jpg|thumb|250px|tracts and glyphs view]]&lt;br /&gt;
|[[Image:Tracts_glyphs_90degrees.jpg|thumb|250px|tracts and glyphs view - +90° rotation of measurement frame]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= General Information =&lt;br /&gt;
==Module Type &amp;amp; Category==&lt;br /&gt;
&lt;br /&gt;
Type: Interactive&lt;br /&gt;
&lt;br /&gt;
Category: Diffusion Imaging&lt;br /&gt;
&lt;br /&gt;
==Authors, Collaborators &amp;amp; Contact==&lt;br /&gt;
* Author: Kerstin Kessel&lt;br /&gt;
* Supervisor: Steve Pieper, Ron Kikinis&lt;br /&gt;
&lt;br /&gt;
==Module Description==&lt;br /&gt;
As the documentation of acquisition parameters in dicom data is not standardized, MRI scanners (Siemens, GE) handle gradients/bValues/measurement frame differently in their dicom headers. Because of that there is a big need to add/modify them manually.&lt;br /&gt;
&lt;br /&gt;
The Diffusion Editor is a 3D Slicer module, which allows modifying parameters (gradients, bValues, measurement frame) of DWI data and provides a quick way to interpret them. For that it estimates a tensor and shows glyphs and tracts for visual exploration. &lt;br /&gt;
&lt;br /&gt;
=== Measurement Frame ===&lt;br /&gt;
The measurement frame of all DWI is always displayed in the RAS space. That's because Slicer stores all internal coordinates in RAS. &lt;br /&gt;
&lt;br /&gt;
If you save changes in a new .nhdr file the measurement frame will always be in RAS.&lt;br /&gt;
&lt;br /&gt;
=== Used Tensor Estimation === &lt;br /&gt;
The Diffusion Editor uses the Tensor Estimation CLM (Command Line Module) of Slicer to compute tensors. &lt;br /&gt;
* The module provides the linear-least-squares, non-linear-least squares and weighted-least-square method for the estimation. But the DiffusionEditor uses the linear-least-squares method by default, as it is the fastest and most robust.&lt;br /&gt;
* See [[Slicer3:DTMRI#Tensor_Estimation_from_DWI_Module],|[http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:TeemExamples#tend_estim:_tensor_estimation]] for more information on the Tensor Estimation CLM.&lt;br /&gt;
&lt;br /&gt;
The testing frame provides just a small subset of DTI display options. For more detailed settings&lt;br /&gt;
* load the DTI as the active volume in the volumes modul&lt;br /&gt;
* go to the display frame and adjust parameters.&lt;br /&gt;
&lt;br /&gt;
=== Used Tractography Fiducial Seeding === &lt;br /&gt;
The Diffusion Editor uses the Tractography Fiducial Seeding module of Slicer to compute tracts.&lt;br /&gt;
* The Diffusion Editor uses the default parameters. To change tractography parameters select the modul: Tractography/Seeding/Fiducial Seeding [[Slicer3:DTMRI#Tractography_Fiducial_Seeding_Module].|Changes there have an immediate impact for the tracts in the Diffusion Editor.&lt;br /&gt;
* For more detailed exploring of tracts use the Fiducial Seeding module or for display options select the module Tractography/DisplayLoadSave [https://www.slicer.org/wiki/Slicer3:DTMRI#Tractography_Module]].* See [[Slicer3:DTMRI#Tractography_Module|here]] for more information on the Tractography modules.&lt;br /&gt;
&lt;br /&gt;
=== Current features of the Diffusion Editor=== &lt;br /&gt;
For DWI&lt;br /&gt;
* Edit gradients manually or load existing gradients from file (.txt or .nhdr).&lt;br /&gt;
* Edit the [[Modules:Volumes:Diffusion_Editor-Documentation#Measurement_Frame| measurement frame]] manually or simply rotate/swap/invert columns by selecting them. &lt;br /&gt;
* Test the parameters by estimating a tensor and displaying glyphs and tracts.&lt;br /&gt;
For DTI&lt;br /&gt;
* Edit the measurement frame as described above.  &lt;br /&gt;
* Test by displaying glyphs and tracts.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
==Examples &amp;amp; Tutorials==&lt;br /&gt;
&lt;br /&gt;
=== Preparation ===&lt;br /&gt;
&lt;br /&gt;
* Download Slicer. The most recent stable Slicer version can be found [http://www.slicer.org/pages/Downloads here]. Or load Slicer's latest snapshot.&lt;br /&gt;
* You can also use SVN to checkout the trunk of the current version of Slicer. See [[Slicer3:Build_Instructions| here]] for more instructions on how to build Slicer.&lt;br /&gt;
* Download example data: [[ media:DiffusionEditor_ExampleData.zip | DiffusionEditor_ExampleData.zip ]] and unzip it.&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
To start a tutorial video simply click on the link in the table.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#abcdef&amp;quot;&lt;br /&gt;
! title !!short description&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Load DWI-Dicom| Load DICOM]]  ||Load a DWI dicom data set in Slicer.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Edit Gradients | Edit gradients ]]||Change gradients manually and load them from a file. Save your changes afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Edit Measurement frame| Edit measurement frame]] ||Change the measurement frame by swapping and inverting. Save your changes afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tutorials:DiffusionEditor-Testing | Testing ]]||Run tensor estimation and show glyphs and tracts; &lt;br /&gt;
Run second estimation with 90°rotation and switch between both tensors and see the impact of that change.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Quick Tour of Features and Use==&lt;br /&gt;
&lt;br /&gt;
[[Image:DiffusionEditor_v8.jpg|right|overview]]&lt;br /&gt;
&lt;br /&gt;
* '''Measurement frame:'''&lt;br /&gt;
&lt;br /&gt;
# The determinant of the measurement frame has to be 1. This is checked by the editor.&lt;br /&gt;
# '''Invert''': Select the columns you want to invert.&lt;br /&gt;
# '''Swap''': Select two columns you want to swap.&lt;br /&gt;
# '''Rotate''': Select one column you want to rotate by an angle you can choose from a given set of values or set yourself.&lt;br /&gt;
# '''Identity''': Set the measurement frame to the identity matrix.&lt;br /&gt;
# Set your own values.&lt;br /&gt;
&lt;br /&gt;
* '''Gradients frame:'''&lt;br /&gt;
# If the active volume is a DWI the editor will put the gradients in the text field; otherwise this frame is disabled.&lt;br /&gt;
# You can copy/paste your own gradients in the text field or change them manually.&lt;br /&gt;
# You can load gradients from a text file or .nhdr file. For the .txt file the format of gradients is easy, it can contain only values ([[ media:DiffusionEditor_ExampleData.zip | see example data ]]).&lt;br /&gt;
&lt;br /&gt;
* '''Undo/Redo/Restore:'''&lt;br /&gt;
#'''Undo''': Undo the last change of measurement/gradient values.&lt;br /&gt;
#'''Redo''': Redo the last change of measurement/gradient values.&lt;br /&gt;
#'''Restore''': All parameters are restored to original.&lt;br /&gt;
&amp;lt;font color=&amp;quot;Red&amp;quot;&amp;gt;NOTE:&amp;lt;/font&amp;gt; You lose all previous changes when a new active volume is loaded or selected.&lt;br /&gt;
&lt;br /&gt;
* '''Testing frame:'''&lt;br /&gt;
# '''Run''' tensor estimation. The new tensor node shows up in the DTI selector.&lt;br /&gt;
# Select a DTI node from the current mrml scene and for&lt;br /&gt;
## Glyph visibility: Select the planes on which you want to see glyphs and adjust the glyph spacing.&lt;br /&gt;
## Tract visibility: Add some fiducials and choose the fiducial list in the selector. Show tracts with Tractography Fiducial Seeding.&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
&lt;br /&gt;
== Status / Implementation Progress ==&lt;br /&gt;
The editor is now successfully integrated in the Volumes module of the trunk version of Slicer3.&lt;br /&gt;
*measurement frame (gui/load/change/save): 100%&lt;br /&gt;
*gradients (gui/load/change/save): 100%&lt;br /&gt;
*undo/redo/restore mechanism: 100%&lt;br /&gt;
*testing frame: 100%&lt;br /&gt;
** tensor estimation for DWI with existing clm: 100%&lt;br /&gt;
** glyphs view in all three planes with the possibility to change spacing: 100%&lt;br /&gt;
** tractography fiducial seeding: 100%&lt;br /&gt;
*ctest: 100%&lt;br /&gt;
*documentation, tutorials (videos): 100%&lt;br /&gt;
*writing master thesis: 60% :-)&lt;br /&gt;
&lt;br /&gt;
== Known issues / bugs ==&lt;br /&gt;
&lt;br /&gt;
Follow this link to the Slicer3 bug tracker to see known bugs, or to report a new one. Please select the '''usability issue category''' when browsing or contributing:&lt;br /&gt;
&lt;br /&gt;
http://na-mic.org/Mantis/main_page.php&lt;br /&gt;
&lt;br /&gt;
Queries, feature requests and other feedback should be posted on [https://discourse.slicer.org/ Slicer discourse website]. You can also sign up at the website to make sure you hear of new developments, releases and bug fixes.&lt;br /&gt;
&lt;br /&gt;
=== Issues ===&lt;br /&gt;
* Changing the measurement frame of a DTI has no impact. The tensor is not estimated again. &lt;br /&gt;
** Future work: Adding new rotation filter for tensors (contributed by Raul San Jose)&lt;br /&gt;
* Multiple bValues are not displayed. Currently to describe acquisitions with different b-values the magnitudes of the gradients are changed. See the nrrd format page about [http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:Nrrd_format#Describing_DWIs_with_differen_b-values describing DWIs with different b-values].&lt;br /&gt;
** Future work: Adding different views of gradients/bValues.&lt;br /&gt;
* Checking gradients when one types new values in the textbox is slowly. Reason: SetDiffusionGradients of the vtkMRMLDiffusionWeightedVolumeNode seems to trigger many events.&lt;br /&gt;
** Future work: Use [[Slicer3:EventBroker|Eventbroker]] for performance analysis and if necessary turn off events.&lt;br /&gt;
&lt;br /&gt;
== Source code &amp;amp; documentation ==&lt;br /&gt;
&lt;br /&gt;
Source code is available here:&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorWidget.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorLogic.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionEditorLogic.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerMeasurementFrameWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerMeasurementFrameWidget.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerGradientsWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerGradientsWidget.h&lt;br /&gt;
&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionTestingWidget.cxx&lt;br /&gt;
http://viewvc.slicer.org/viewcvs.cgi/trunk/Modules/Volumes/vtkSlicerDiffusionTestingWidget.h&lt;br /&gt;
&lt;br /&gt;
Links to documentation generated by doxygen:&lt;br /&gt;
&lt;br /&gt;
http://www.na-mic.org/Slicer/Documentation/Slicer3/html/&lt;br /&gt;
&lt;br /&gt;
= More Information =&lt;br /&gt;
&lt;br /&gt;
== Acknowledgement ==&lt;br /&gt;
This research project was part of a Master thesis (Diplomarbeit) in cooperation of the faculty of Medical Informatics, University of Heidelberg/Germany and the Surgical Planning Lab. It was supported by a grant of the Lions Club Heilbronn/Franken.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Thesis: [[Image:Thesis_letter.pdf|https://www.slicer.org/wiki/Media:Thesis_letter.pdf]] DTMRI: [[Slicer3:DTMRI|https://www.slicer.org/wiki/Slicer3:DTMRI]] Nrrd format: [http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:Nrrd_format http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:Nrrd_format]&lt;br /&gt;
&lt;br /&gt;
DICOM for DWI and DTI : [http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:DICOM_for_DWI_and_DTI http://wiki.na-mic.org/Wiki/index.php/NAMIC_Wiki:DTI:DICOM_for_DWI_and_DTI]&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Tutorials/CreateExtension&amp;diff=62669</id>
		<title>Documentation/Nightly/Developers/Tutorials/CreateExtension</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Developers/Tutorials/CreateExtension&amp;diff=62669"/>
		<updated>2019-11-27T14:52:13Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. Create repo on github&lt;br /&gt;
&lt;br /&gt;
2. Clone repo locally&lt;br /&gt;
&lt;br /&gt;
Copy/Paste Slicer4/Extensions/CLIExtensionTemplate.s4ext at the root directory of your local repo&lt;br /&gt;
Copy/Paste Slicer4/Extensions/Testing/CLIExtensionTemplate at the root directory of your local repo&lt;br /&gt;
Rename CLIExtensionTemplate into Modules/CLI/ImageMaker&lt;br /&gt;
Rename all the files and CMakeLists.txt&lt;br /&gt;
&lt;br /&gt;
Add license to files&lt;br /&gt;
&lt;br /&gt;
Edit your CLI&lt;br /&gt;
&lt;br /&gt;
Build your extension&lt;br /&gt;
&lt;br /&gt;
Open Slicer and in Application Settings, add build path to Slicer&lt;br /&gt;
&lt;br /&gt;
Restart and reopen Slicer with module&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; debug ( Slicer.exe --VisualStudio Slicer.sln  and breakpoints in CLI).&lt;br /&gt;
&lt;br /&gt;
Push code to github:&lt;br /&gt;
  Extension icon: https://raw.github.com/finetjul/QuickTools/master/Resources/QuickToolsLogo.png&lt;br /&gt;
&lt;br /&gt;
Edit .s4xt&lt;br /&gt;
&lt;br /&gt;
Set MIDAS_PACKAGE_EMAIL and MIDAS_PACKAGE_API&lt;br /&gt;
&lt;br /&gt;
Build ExperimentalUpload&lt;br /&gt;
&lt;br /&gt;
Create:&lt;br /&gt;
   https://www.slicer.org/wiki/Documentation/Nightly/Modules/ImageMaker   https://www.slicer.org/wiki/Documentation/Nightly/Extensions/QuickToolsEdit:&lt;br /&gt;
   https://www.slicer.org/wiki/Documentation/Nightly/Extensions#Cat_2Remove module path from Application Settings&lt;br /&gt;
Open Extension Manager&lt;br /&gt;
Download experimental extension&lt;br /&gt;
-&amp;gt; works !&lt;br /&gt;
Edit s4xt with screenshots URLS made for the doc wiki pages.&lt;br /&gt;
go to https://github.com/Slicer/ExtensionsIndex&lt;br /&gt;
Fork it&lt;br /&gt;
git clone it&lt;br /&gt;
git checkout -b add-QuickTools&lt;br /&gt;
git gui&lt;br /&gt;
git push origin add-QuickTools&lt;br /&gt;
on github, do the pull request.&lt;br /&gt;
...&lt;br /&gt;
check dashboards.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/SlicerApplication/StructureSets&amp;diff=62668</id>
		<title>Documentation/4.8/SlicerApplication/StructureSets</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/SlicerApplication/StructureSets&amp;diff=62668"/>
		<updated>2019-11-27T14:52:12Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;https?:\/\/www.slicer.org\/slicerWiki\/index.php\/([^ ]+)
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1&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;
__NOTOC__&lt;br /&gt;
These are Greg's development notes.  Beware of inaccurate and misleading information below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
The term &amp;quot;structure set&amp;quot; is used in RT to denote a set of structures (labels) which are attached to an image.  &lt;br /&gt;
The goal of this project is to improve Slicer so it can handle overlapping structures.  &lt;br /&gt;
The following is a rough list of required functionality:&lt;br /&gt;
&lt;br /&gt;
# Identify structureset images at load time&lt;br /&gt;
# Load structureset images&lt;br /&gt;
# Display overlapping contours in structure set&lt;br /&gt;
# Editor can switch between labelmap and structureset representation&lt;br /&gt;
# Modify editor GUI to make easier selecting current structure&lt;br /&gt;
# Save structureset images&lt;br /&gt;
&lt;br /&gt;
=How to git=&lt;br /&gt;
# Basic tutorials&lt;br /&gt;
## https://www.slicer.org/wiki/Slicer3:git-svn## http://git.or.cz/course/svn.html&lt;br /&gt;
# My code is located here&lt;br /&gt;
## https://github.com/gregsharp/Slicer/tree/gcstest&lt;br /&gt;
# It is a fork of SlicerRT&lt;br /&gt;
## https://github.com/SlicerRt/Slicer&lt;br /&gt;
# Or perhaps Slicer&lt;br /&gt;
## https://github.com/Slicer/Slicer&lt;br /&gt;
# Update like this:&lt;br /&gt;
## git pull git@github.com:gregsharp/Slicer.git gcstest&lt;br /&gt;
## Or, because I created an alias, like this:&lt;br /&gt;
## git pull gcs gcstest&lt;br /&gt;
## The alias is made like this:&lt;br /&gt;
## git remote add gcs git@github.com:gregsharp/Slicer.git&lt;br /&gt;
# My code is branched off of SlicerRT&lt;br /&gt;
## To rebase onto main slicer trunk, do this:&lt;br /&gt;
## git remote add slicer https://github.com/Slicer/Slicer.git&lt;br /&gt;
## git pull --rebase slicer master&lt;br /&gt;
## However, this doesn't work because my fork contains all of SlicerRT, which conflicts with slicer&lt;br /&gt;
# So I make a new fork, based on slicer itself&lt;br /&gt;
## git clone git://github.com/Slicer/Slicer.git Slicer-gcs&lt;br /&gt;
## git remote add gcs-slicer git@github.com:gregsharp/gcs-slicer.git&lt;br /&gt;
## git push gcs-slicer master&lt;br /&gt;
## But this doesn't work &amp;quot;ERROR: Repository not found.&amp;quot;&lt;br /&gt;
# Eventually I had to give up, and delete the repository&lt;br /&gt;
## The changes were to this file: Libs/MRML/Core/vtkMRMLVolumeArchetypeStorageNode.cxx&lt;br /&gt;
&lt;br /&gt;
=Notes=&lt;br /&gt;
&lt;br /&gt;
# Identifying structureset images&lt;br /&gt;
## For now, I just assume that any vector image is a structureset image&lt;br /&gt;
# Loading structureset images&lt;br /&gt;
## Images, when loaded, are sent to vtkMRMLVolumeArchetypeStorageNode::ReadData(), which decides whether the file has a scalar or vector image&lt;br /&gt;
## The type of the MRML node created is vtkMRMLVectorVolumeNode&lt;br /&gt;
## Ref: Libs/MRML/Core/vtkMRMLVolumeArchetypeStorageNode.cxx&lt;br /&gt;
## A vtkMRMLVectorVolumeDisplayNode is attached to the storage node&lt;br /&gt;
# Is an image a labelmap?&lt;br /&gt;
## This is apparently a function of the XML file, not the image&lt;br /&gt;
## vtkMRMLScalarVolumeNode::SetLabelMap()&lt;br /&gt;
# Labelmap display&lt;br /&gt;
## ??&lt;br /&gt;
## ??&lt;br /&gt;
# Displaying overlapping contours&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Modules/Segmentations&amp;diff=62667</id>
		<title>Documentation/4.8/Modules/Segmentations</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Modules/Segmentations&amp;diff=62667"/>
		<updated>2019-11-27T14:39:17Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;\[https:\/\/(?:www|wiki).?slicer.org\/slicerWiki\/index.php\?title=([^ ]+)([^]]*)]&amp;quot; to &amp;quot;[https://www.slicer.org/wiki/$1$2]&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;
This work is part of the SparKit project, funded by An Applied Cancer Research Unit of Cancer Care Ontario with funds provided by the Ministry of Health and Long-Term Care and the Ontario Consortium for Adaptive Interventions in Radiation Oncology (OCAIRO) to provide free, open-source toolset for radiotherapy and related image-guided interventions.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Csaba Pinter (PerkLab, Queen's University)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Csaba Pinter, &amp;lt;email&amp;gt;csaba.pinter@queensu.ca&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|cco}}|{{collaborator|longname|cco}}&lt;br /&gt;
|{{collaborator|logo|sparkit}}|{{collaborator|longname|sparkit}}&lt;br /&gt;
|{{collaborator|logo|ocairo}}|{{collaborator|longname|ocairo}}&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;
The {{documentation/modulename}} module manages segmentations. Each segmentation can contain multiple segments, which correspond to one structure or ROI. Each segment can contain multiple data representations for the same structure, and the module supports automatic conversion between these representations (the default ones are: planar contour, binary labelmap, closed surface model), as well as advanced display settings and import/export features.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Motivation, features, and details of the infrastructure are explained in [https://www.slicer.org/w/images/6/64/20160526_Segmentations.pptx these slides] ([https://www.slicer.org/w/images/a/ae/20160526_Segmentations.pdf PDF]).'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: It is important to remember that segmentations are not labelmaps, i.e. they are not one 3D volume containing color indices in a color table. There is a legacy labelmap support that temporarilymerges the segments into an old-school labelmap, but that feature will be removed, and under the hood the segmentation node is structured as explained above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
* 3D printing: Convert labelmaps to surface models and export them to STL&lt;br /&gt;
* Contour analysis: Convert RT planar contours to labelmap for per-voxel analysis&lt;br /&gt;
* Nice and flexible visualization: Show any structure as 3D surface, and line intersections in 2D views; Show surface and labelmap simultaneously&lt;br /&gt;
* Organize segmented structures: Each segmentation contains multiple &amp;quot;segments&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
|[[File:20160526_SegmentationObject.PNG|thumb|371px| Segmentation node containing and managing multiple structures (called segments - the columns in the figure) in multiple representations (rows)]]&lt;br /&gt;
|[[File:20150710_SegmentationsModuleUI.png|thumb|480px| Segmentations module UI]]&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;
* [http://www.na-mic.org/Wiki/images/3/3f/SegmentationFor3DPrinting_TutorialContestWinter2017.pptx Segmentation for 3D printing tutorial] ([http://www.na-mic.org/Wiki/images/a/a6/SegmentationFor3DPrinting_TutorialContestWinter2017.pdf PDF]): create a printable STL model from a section of the spinal column segmented from a CT image, attached to a base designed in CAD software ([http://www.na-mic.org/Wiki/index.php/2017_Tutorial_Contest 2017 tutorial contest, MIT])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|How to}}&lt;br /&gt;
&lt;br /&gt;
; Create segmentation from scratch&lt;br /&gt;
: Select 'Create new Segmentation' or 'Create new Segmentation as...' in the Current segmentation drop-down box at the top of the Segmentations module&lt;br /&gt;
&lt;br /&gt;
; Create segment from labelmap volume or model&lt;br /&gt;
: Expand Copy/move segment (import/export) section at the bottom of the Segmentations module (it is collapsed by default)&lt;br /&gt;
: Select labelmap volume or model in the list on the right&lt;br /&gt;
: Click on '&amp;lt;+' button to import the selected object as a segment to the currently selected segmentation (multiple segments in case of multi-label labelmap)&lt;br /&gt;
&lt;br /&gt;
; Export labelmap or surface model representation from a segment (for editing, saving to STL, etc). There are two possible routes to take:&lt;br /&gt;
* Expand the Export/import segments section at the bottom of the Segmentations module (it is collapsed by default). Select output type, then click Export. If exporting to an existing node is needed, it can be selected as Output node. If only a subset of the segments are needed, then open the Advanced section, where this selection can be changed, along with the reference volume.&lt;br /&gt;
* Switch to the Data module and make sure the Subject hierarchy tree is selected. Right-click the segmentation node, then select one of the Export functions&lt;br /&gt;
: To save exported result to file, use the Save data dialog (left side of top toolbar). To save to STL, change the File Format selector to STL in the rows of the models to be saved.&lt;br /&gt;
&lt;br /&gt;
; Create new representation in segmentation (conversion)&lt;br /&gt;
: The supported representations are listed as rows in the Representations section. The already existing representations have a green tick, the master representation (that is the source of all conversions and the representation that can be edited) a gold star&lt;br /&gt;
: To create a representation that is missing, click on the Create button in its row. If custom conversion path or parameters are to be used (reference grid for labelmaps, smoothing for surfaces, etc.), long-press the button and choose &amp;quot;Advanced create...&amp;quot;. In the appearing window the available conversion paths are listed in a list, ordered by estimated time cost. After selecting the desired path, the involved parameters are listed in the bottom section of the window&lt;br /&gt;
: To re-convert an existing representation (to use different conversion path or parameters), click the Update buitton in their row&lt;br /&gt;
&lt;br /&gt;
; Change display mode of segments&lt;br /&gt;
* By long-pressing the eye icon in the segments table the display options are shown and the different display modes can be turned on or off&lt;br /&gt;
* In Data module's Subject hierarchy, right-clicking the visibility eye icon next to the segmentation node or its segments also offers advanced display options&lt;br /&gt;
&lt;br /&gt;
; Managing segmentations in python&lt;br /&gt;
: See [https://www.slicer.org/wiki/Documentation/Nightly/ScriptRepository#Segmentations Segmentations section] in the script in repository&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;
* Segments table&lt;br /&gt;
** Add/remove segments&lt;br /&gt;
** Edit selected: takes user to [[Documentation/{{documentation/version}}/Modules/SegmentEditor|Segment Editor]] module&lt;br /&gt;
** Set visibility and per-segment display settings, opacity, color, segment name&lt;br /&gt;
* Display&lt;br /&gt;
** Segmentations-wide display settings (not per-segment!): visibility, opacity (will be multiplied with per-segment opacity for display)&lt;br /&gt;
** Views: Individual views to show the active segmentation in&lt;br /&gt;
** Slice intersection thickness&lt;br /&gt;
** Representation in 3D/2D views: The representation to be shown in the 3D and 2D views. Useful if there are multiple representations available, for example if we want to show the closed surface in the 3D view but the labelmap in the slice views&lt;br /&gt;
* Representations&lt;br /&gt;
** List of supported representations and related operations &lt;br /&gt;
** The already existing representations have a green tick, the master representation (that is the source of all conversions and the representation that can be edited) a gold star&lt;br /&gt;
** The buttons in each row can be used to create, remove, update a representation&lt;br /&gt;
*** Advanced conversion is possible (to use the non-default path or conversion parameters) by long-pressing the Create or Update button&lt;br /&gt;
*** Existing representations can be made master by clicking Make master. The master representation is used as source for conversions, it is the one that can be edited, and saved to disk&lt;br /&gt;
* Copy/move (import/export)&lt;br /&gt;
** Left panel lists the segments in the active segmentation&lt;br /&gt;
** Right panel shows the external data container&lt;br /&gt;
** The arrow buttons van be used to copy (with plus sign) or move (no plus sign) segments between the segmentation and the external node&lt;br /&gt;
** New labelmap or model can be created by clicking the appropriate button on the top of the right panel&lt;br /&gt;
** Multiple segments can be exported into a labelmap. In case of overlapping segments, the subsequent segments will overwrite the previous ones!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''' Subject hierarchy support'''&lt;br /&gt;
* Segmentations are shown in subject hierarchy as any other node, with the exception that the contained segments are in a &amp;quot;virtual branch&amp;quot;.&lt;br /&gt;
** The segments can be moved between segmentations, but drag&amp;amp;drop to anywhere other than under another segmentation is not allowed&lt;br /&gt;
* Special subject hierarchy features for segmentations&lt;br /&gt;
** Create representation: Create the chosen representation using the default path&lt;br /&gt;
* Special subject hierarchy features for segments&lt;br /&gt;
** Show only this segment: Useful if only one segment needs to be shown and there are many, so clicking the eye buttons woud take a long time&lt;br /&gt;
** Show all segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''' DICOM export '''&lt;br /&gt;
* The master representation is used when exporting into DICOM&lt;br /&gt;
* RT structure set export is available if SlicerRT is installed&lt;br /&gt;
* DICOM SegObj export - coming soon!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{documentation/{{documentation/version}}/module-parametersdescription}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Modules/SegmentEditor|Segment Editor]] module is used to edit Segmentation nodes&lt;br /&gt;
* This module and infrastructure is a successor of the [[Documentation/4.4/Modules/Contours|Contours]] module and mechanism, which was the first implementation for this task, but its design was overgrewn by the new features and needs, and became inconvenient and unstable. Further information about the Segmentation effort on the related [https://www.assembla.com/spaces/slicerrt/tickets/626 Assembla ticket] and [https://www.assembla.com/spaces/slicerrt/wiki/Segmentation wiki page], and the links pointing from these pages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
* Past references&lt;br /&gt;
** Issue for Segmentations (complete Contours overhaul, delivery June 2015) [https://www.assembla.com/spaces/slicerrt/tickets/626 here]&lt;br /&gt;
** Issue for original Contours effort on SlicerRT Assembla ticketing system [https://www.assembla.com/spaces/slicerrt/tickets/137 here]&lt;br /&gt;
** Development notes [https://www.assembla.com/spaces/slicerrt/wiki/Segmentation wiki 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/Labs/Segmentations|Labs page]]&lt;br /&gt;
* Numerous scripting examples are listed in the [[Documentation/Nightly/ScriptRepository|Script repository]] page&lt;br /&gt;
* How to create new representation or converter - TODO&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
=FAQ=&lt;br /&gt;
; The closed surface generated from the RT Structure Set contour points is flawed&lt;br /&gt;
: Please [[Documentation/SlicerRT/HowToReportAnError|report]] the issue first so that we can fix the conversion.&lt;br /&gt;
: Use advanced conversion and choose a path through Ribbon model representation. SlicerRT extension needs to be installed for this.&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>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.6/Modules/Segmentations&amp;diff=62665</id>
		<title>Documentation/4.6/Modules/Segmentations</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.6/Modules/Segmentations&amp;diff=62665"/>
		<updated>2019-11-27T14:39:12Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;\[https:\/\/(?:www|wiki).?slicer.org\/slicerWiki\/index.php\?title=([^ ]+)([^]]*)]&amp;quot; to &amp;quot;[https://www.slicer.org/wiki/$1$2]&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;
This work is part of the SparKit project, funded by An Applied Cancer Research Unit of Cancer Care Ontario with funds provided by the Ministry of Health and Long-Term Care and the Ontario Consortium for Adaptive Interventions in Radiation Oncology (OCAIRO) to provide free, open-source toolset for radiotherapy and related image-guided interventions.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Csaba Pinter (PerkLab, Queen's University)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Csaba Pinter, &amp;lt;email&amp;gt;csaba.pinter@queensu.ca&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|cco}}|{{collaborator|longname|cco}}&lt;br /&gt;
|{{collaborator|logo|sparkit}}|{{collaborator|longname|sparkit}}&lt;br /&gt;
|{{collaborator|logo|ocairo}}|{{collaborator|longname|ocairo}}&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;
The {{documentation/modulename}} module manages segmentations. Each segmentation can contain multiple segments, which correspond to one structure or ROI. Each segment can contain multiple data representations for the same structure, and the module supports automatic conversion between these representations (the default ones are: planar contour, binary labelmap, closed surface model), as well as advanced display settings and import/export features.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Motivation, features, and details of the infrastructure are explained in [[File:20160526_Segmentations.pptx|these slides]].'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: It is important to remember that segmentations are not labelmaps, i.e. they are not one 3D volume containing color indices in a color table. There is a legacy labelmap support that temporarilymerges the segments into an old-school labelmap, but that feature will be removed, and under the hood the segmentation node is structured as explained above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
* 3D printing: Convert labelmaps to surface models and export them to STL&lt;br /&gt;
* Contour analysis: Convert RT planar contours to labelmap for per-voxel analysis&lt;br /&gt;
* Nice and flexible visualization: Show any structure as 3D surface, and line intersections in 2D views; Show surface and labelmap simultaneously&lt;br /&gt;
* Organize segmented structures: Each segmentation contains multiple &amp;quot;segments&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
|[[File:20160526_SegmentationObject.PNG|thumb|371px| Segmentation node containing and managing multiple structures (called segments - the columns in the figure) in multiple representations (rows)]]&lt;br /&gt;
|[[File:20150710_SegmentationsModuleUI.png|thumb|480px| Segmentations module UI]]&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;
* Coming soon...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|How to}}&lt;br /&gt;
&lt;br /&gt;
; Create segmentation from scratch&lt;br /&gt;
: Select 'Create new Segmentation' or 'Create new Segmentation as...' in the Current segmentation drop-down box at the top of the Segmentations module&lt;br /&gt;
&lt;br /&gt;
; Create segment from labelmap volume or model&lt;br /&gt;
: Expand Copy/move segment (import/export) section at the bottom of the Segmentations module (it is collapsed by default)&lt;br /&gt;
: Select labelmap volume or model in the list on the right&lt;br /&gt;
: Click on '&amp;lt;+' button to import the selected object as a segment to the currently selected segmentation (multiple segments in case of multi-label labelmap)&lt;br /&gt;
&lt;br /&gt;
; Export labelmap or surface model representation from a segment (for editing, saving to STL, etc).&lt;br /&gt;
: Make sure the representation to export is present. If there is no green tick icon next to binary labelmap (if exporting to labelmap) or closed surface (if exporting to model), then click on the Create 'Default' button in the row of desired representation&lt;br /&gt;
: Expand Copy/move segment (import/export) section at the bottom of the Segmentations module (it is collapsed by default)&lt;br /&gt;
: Select segment to export (multiple segments can be exported to labelmap, but note that if they overlap then the alphabetical order of the segments determine which one is exported)&lt;br /&gt;
: Select representation node (labelmap or model) to export the segment to. New node can be conveniently created by the two small buttons next to the node selector box.&lt;br /&gt;
: Export segment(s) by clicking '&amp;gt;' or '+&amp;gt;' buttons. Move button ('&amp;gt;') will remove the segment from the segmentation while the copy button ('+&amp;gt;') will not.&lt;br /&gt;
: To save exported result to file, use the Save data dialog (left side of top toolbar). To save to STL, change the File Format selector to STL in the rows of the models to be saved.&lt;br /&gt;
&lt;br /&gt;
; Create new representation in segmentation (conversion)&lt;br /&gt;
: The supported representations are listed as rows in the Representations section. The already existing representations have a green tick, the master representation (that is the source of all conversions and the representation that can be edited) a gold star&lt;br /&gt;
: To create a representation that is missing, click on the Create button in its row. If custom conversion path or parameters are to be used (reference grid for labelmaps, smoothing for surfaces, etc.), long-press the button and choose &amp;quot;Advanced create...&amp;quot;. In the appearing window the available conversion paths are listed in a list, ordered by estimated time cost. After selecting the desired path, the involved parameters are listed in the bottom section of the window&lt;br /&gt;
: To re-convert an existing representation (to use different conversion path or parameters), click the Update buitton in their row&lt;br /&gt;
&lt;br /&gt;
; Change display mode of segments&lt;br /&gt;
: By long-pressing the eye icon in the segments table the display options are shown and the different display modes can be turned on or off&lt;br /&gt;
&lt;br /&gt;
; Managing segmentations in python&lt;br /&gt;
: See [https://www.slicer.org/wiki/Documentation/Nightly/ScriptRepository&amp;amp;action=submit#Segmentations Segmentations section] in the script in repository&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;
* Segments table&lt;br /&gt;
** Add/remove segments&lt;br /&gt;
** Edit selected: takes user to [[Documentation/{{documentation/version}}/Modules/SegmentEditor|Segment Editor]] module&lt;br /&gt;
** Set visibility and per-segment display settings, opacity, color, segment name&lt;br /&gt;
* Display&lt;br /&gt;
** Segmentations-wide display settings (not per-segment!): visibility, opacity (will be multiplied with per-segment opacity for display)&lt;br /&gt;
** Views: Individual views to show the active segmentation in&lt;br /&gt;
** Slice intersection thickness&lt;br /&gt;
** Representation in 3D/2D views: The representation to be shown in the 3D and 2D views. Useful if there are multiple representations available, for example if we want to show the closed surface in the 3D view but the labelmap in the slice views&lt;br /&gt;
* Representations&lt;br /&gt;
** List of supported representations and related operations &lt;br /&gt;
** The already existing representations have a green tick, the master representation (that is the source of all conversions and the representation that can be edited) a gold star&lt;br /&gt;
** The buttons in each row can be used to create, remove, update a representation&lt;br /&gt;
*** Advanced conversion is possible (to use the non-default path or conversion parameters) by long-pressing the Create or Update button&lt;br /&gt;
*** Existing representations can be made master by clicking Make master. The master representation is used as source for conversions, it is the one that can be edited, and saved to disk&lt;br /&gt;
* Copy/move (import/export)&lt;br /&gt;
** Left panel lists the segments in the active segmentation&lt;br /&gt;
** Right panel shows the external data container&lt;br /&gt;
** The arrow buttons van be used to copy (with plus sign) or move (no plus sign) segments between the segmentation and the external node&lt;br /&gt;
** New labelmap or model can be created by clicking the appropriate button on the top of the right panel&lt;br /&gt;
** Multiple segments can be exported into a labelmap. In case of overlapping segments, the subsequent segments will overwrite the previous ones!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''' Subject hierarchy support'''&lt;br /&gt;
* Segmentations are shown in subject hierarchy as any other node, with the exception that the contained segments are in a &amp;quot;virtual branch&amp;quot;.&lt;br /&gt;
** The segments can be moved between segmentations, but drag&amp;amp;drop to anywhere other than under another segmentation is not allowed&lt;br /&gt;
* Special subject hierarchy features for segmentations&lt;br /&gt;
** Create representation: Create the chosen representation using the default path&lt;br /&gt;
* Special subject hierarchy features for segments&lt;br /&gt;
** Show only this segment: Useful if only one segment needs to be shown and there are many, so clicking the eye buttons woud take a long time&lt;br /&gt;
** Show all segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''' DICOM export '''&lt;br /&gt;
* The master representation is used when exporting into DICOM&lt;br /&gt;
* RT structure set export is available if SlicerRT is installed&lt;br /&gt;
* DICOM SegObj export - coming soon!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{documentation/{{documentation/version}}/module-parametersdescription}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Modules/SegmentEditor|Segment Editor]] module is used to edit Segmentation nodes&lt;br /&gt;
* This module and infrastructure is a successor of the [[Documentation/4.4/Modules/Contours|Contours]] module and mechanism, which was the first implementation for this task, but its design was overgrewn by the new features and needs, and became inconvenient and unstable. Further information about the Segmentation effort on the related [https://www.assembla.com/spaces/slicerrt/tickets/626 Assembla ticket] and [https://www.assembla.com/spaces/slicerrt/wiki/Segmentation wiki page], and the links pointing from these pages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
* Past references&lt;br /&gt;
** Issue for Segmentations (complete Contours overhaul, delivery June 2015) [https://www.assembla.com/spaces/slicerrt/tickets/626 here]&lt;br /&gt;
** Issue for original Contours effort on SlicerRT Assembla ticketing system [https://www.assembla.com/spaces/slicerrt/tickets/137 here]&lt;br /&gt;
** Development notes [https://www.assembla.com/spaces/slicerrt/wiki/Segmentation wiki 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/Labs/Segmentations|Labs page]]&lt;br /&gt;
* Numerous scripting examples are listed in the [[Documentation/Nightly/ScriptRepository|Script repository]] page&lt;br /&gt;
* How to create new representation or converter - TODO&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
=FAQ=&lt;br /&gt;
; The closed surface generated from the RT Structure Set contour points is flawed&lt;br /&gt;
: Please [[Documentation/SlicerRT/HowToReportAnError|report]] the issue first so that we can fix the conversion.&lt;br /&gt;
: Use advanced conversion and choose a path through Ribbon model representation. SlicerRT extension needs to be installed for this.&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>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/Segmentations&amp;diff=62666</id>
		<title>Documentation/Nightly/Modules/Segmentations</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/Segmentations&amp;diff=62666"/>
		<updated>2019-11-27T14:39:12Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;\[https:\/\/(?:www|wiki).?slicer.org\/slicerWiki\/index.php\?title=([^ ]+)([^]]*)]&amp;quot; to &amp;quot;[https://www.slicer.org/wiki/$1$2]&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;
This work is part of the SparKit project, funded by An Applied Cancer Research Unit of Cancer Care Ontario with funds provided by the Ministry of Health and Long-Term Care and the Ontario Consortium for Adaptive Interventions in Radiation Oncology (OCAIRO) to provide free, open-source toolset for radiotherapy and related image-guided interventions.&amp;lt;br&amp;gt;&lt;br /&gt;
Author: Csaba Pinter (PerkLab, Queen's University)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Csaba Pinter, &amp;lt;email&amp;gt;pinter.csaba@gmail.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|cco}}|{{collaborator|longname|cco}}&lt;br /&gt;
|{{collaborator|logo|sparkit}}|{{collaborator|longname|sparkit}}&lt;br /&gt;
|{{collaborator|logo|ocairo}}|{{collaborator|longname|ocairo}}&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;
The {{documentation/modulename}} module manages segmentations. Each segmentation can contain multiple segments, which correspond to one structure or ROI. Each segment can contain multiple data representations for the same structure, and the module supports automatic conversion between these representations (the default ones are: planar contour, binary labelmap, closed surface model), as well as advanced display settings and import/export features.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Motivation, features, and details of the infrastructure are explained in [https://www.slicer.org/w/images/6/64/20160526_Segmentations.pptx these slides] ([https://www.slicer.org/w/images/a/ae/20160526_Segmentations.pdf PDF]).'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: It is important to remember that segmentations are not labelmaps, i.e. they are not one 3D volume containing color indices in a color table. There is a legacy labelmap support that temporarilymerges the segments into an old-school labelmap, but that feature will be removed, and under the hood the segmentation node is structured as explained above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
* 3D printing: Convert labelmaps to surface models and export them to STL&lt;br /&gt;
* Contour analysis: Convert RT planar contours to labelmap for per-voxel analysis&lt;br /&gt;
* Nice and flexible visualization: Show any structure as 3D surface, and line intersections in 2D views; Show surface and labelmap simultaneously&lt;br /&gt;
* Organize segmented structures: Each segmentation contains multiple &amp;quot;segments&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
|[[File:20160526_SegmentationObject.PNG|thumb|371px| Segmentation node containing and managing multiple structures (called segments - the columns in the figure) in multiple representations (rows)]]&lt;br /&gt;
|[[File:20150710_SegmentationsModuleUI.png|thumb|480px| Segmentations module UI]]&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;
* [[Documentation/{{documentation/version}}/Training#Slicer4_Image_Segmentation|Segmentation tutorials]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|How to}}&lt;br /&gt;
&lt;br /&gt;
; Edit segmentation&lt;br /&gt;
: Segment structures in the '''[{{documentation/{{documentation/version}}/slicer-manual-base-url}}/user_guide/module_segmenteditor.html Segment Editor]''' module&lt;br /&gt;
&lt;br /&gt;
; ''Import labelmap'' volume or ''model'' into segmentation&lt;br /&gt;
# In Segmentations module&lt;br /&gt;
#* Expand Export/import models and labelmaps section at the bottom of the Segmentations module (it is collapsed by default)&lt;br /&gt;
#* Select Import, import type, then choose imported node: labelmap, model, or folder containing models&lt;br /&gt;
#* Click Import&lt;br /&gt;
# In Data module (Subject hierarchy tab)&lt;br /&gt;
#* Right-click model or model hierarchy node&lt;br /&gt;
#* Select 'Convert model to segmentation node'&lt;br /&gt;
&lt;br /&gt;
; ''Export labelmap'' or surface ''model'' from segmentation (for saving to STL, editing, etc).&lt;br /&gt;
# Expand the Export/import segments section at the bottom of the Segmentations module (it is collapsed by default). Select output type, then click Export. If exporting to an existing node is needed, it can be selected as Output node. If only a subset of the segments are needed, then open the Advanced section, where this selection can be changed, along with the reference volume.&lt;br /&gt;
# Switch to the Data module and make sure the Subject hierarchy tree is selected. Right-click the segmentation node, then select one of the Export functions&lt;br /&gt;
: To save exported result to file, use the Save data dialog (left side of top toolbar). To save to STL, change the File Format selector to STL in the rows of the models to be saved.&lt;br /&gt;
&lt;br /&gt;
; Create new representation in segmentation (conversion)&lt;br /&gt;
: The supported representations are listed as rows in the Representations section. The already existing representations have a green tick, the master representation (that is the source of all conversions and the representation that can be edited) a gold star&lt;br /&gt;
: To create a representation that is missing, click on the Create button in its row. If custom conversion path or parameters are to be used (reference grid for labelmaps, smoothing for surfaces, etc.), long-press the button and choose &amp;quot;Advanced create...&amp;quot;. In the appearing window the available conversion paths are listed in a list, ordered by estimated time cost. After selecting the desired path, the involved parameters are listed in the bottom section of the window&lt;br /&gt;
: To re-convert an existing representation (to use different conversion path or parameters), click the Update buitton in their row&lt;br /&gt;
&lt;br /&gt;
; Change display mode of segments&lt;br /&gt;
# By long-pressing the eye icon in the segments table the display options are shown and the different display modes can be turned on or off&lt;br /&gt;
# In Data module's Subject hierarchy, right-clicking the visibility eye icon next to the segmentation node or its segments also offers advanced display options&lt;br /&gt;
&lt;br /&gt;
; Managing segmentations in python&lt;br /&gt;
: See [https://www.slicer.org/wiki/Documentation/Nightly/ScriptRepository#Segmentations Segmentations section] in the script in repository&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;
* Segments table&lt;br /&gt;
** Add/remove segments&lt;br /&gt;
** Edit selected: takes user to [[Documentation/{{documentation/version}}/Modules/SegmentEditor|Segment Editor]] module&lt;br /&gt;
** Set visibility and per-segment display settings, opacity, color, segment name&lt;br /&gt;
* Display&lt;br /&gt;
** Segmentations-wide display settings (not per-segment!): visibility, opacity (will be multiplied with per-segment opacity for display)&lt;br /&gt;
** Views: Individual views to show the active segmentation in&lt;br /&gt;
** Slice intersection thickness&lt;br /&gt;
** Representation in 3D/2D views: The representation to be shown in the 3D and 2D views. Useful if there are multiple representations available, for example if we want to show the closed surface in the 3D view but the labelmap in the slice views&lt;br /&gt;
* Representations&lt;br /&gt;
** List of supported representations and related operations &lt;br /&gt;
** The already existing representations have a green tick, the master representation (that is the source of all conversions and the representation that can be edited) a gold star&lt;br /&gt;
** The buttons in each row can be used to create, remove, update a representation&lt;br /&gt;
*** Advanced conversion is possible (to use the non-default path or conversion parameters) by long-pressing the Create or Update button&lt;br /&gt;
*** Existing representations can be made master by clicking Make master. The master representation is used as source for conversions, it is the one that can be edited, and saved to disk&lt;br /&gt;
* Copy/move (import/export)&lt;br /&gt;
** Left panel lists the segments in the active segmentation&lt;br /&gt;
** Right panel shows the external data container&lt;br /&gt;
** The arrow buttons van be used to copy (with plus sign) or move (no plus sign) segments between the segmentation and the external node&lt;br /&gt;
** New labelmap or model can be created by clicking the appropriate button on the top of the right panel&lt;br /&gt;
** Multiple segments can be exported into a labelmap. In case of overlapping segments, the subsequent segments will overwrite the previous ones!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''' Subject hierarchy support'''&lt;br /&gt;
* Segmentations are shown in subject hierarchy as any other node, with the exception that the contained segments are in a &amp;quot;virtual branch&amp;quot;.&lt;br /&gt;
** The segments can be moved between segmentations, but drag&amp;amp;drop to anywhere other than under another segmentation is not allowed&lt;br /&gt;
* Special subject hierarchy features for segmentations&lt;br /&gt;
** Create representation: Create the chosen representation using the default path&lt;br /&gt;
* Special subject hierarchy features for segments&lt;br /&gt;
** Show only this segment: Useful if only one segment needs to be shown and there are many, so clicking the eye buttons woud take a long time&lt;br /&gt;
** Show all segments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''' DICOM export '''&lt;br /&gt;
* The master representation is used when exporting into DICOM&lt;br /&gt;
* RT structure set export is available if SlicerRT is installed&lt;br /&gt;
* DICOM SegObj export - coming soon!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{documentation/{{documentation/version}}/module-parametersdescription}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
* [http://slicer.readthedocs.io/en/latest/user_guide/module_segmenteditor.html Segment Editor] module is used to edit Segmentation nodes&lt;br /&gt;
* This module and infrastructure is a successor of the [[Documentation/4.4/Modules/Contours|Contours]] module and mechanism, which was the first implementation for this task, but its design was overgrown by the new features and needs, and became inconvenient and unstable. Further information about the Segmentation effort on the related [https://github.com/SlicerRt/SlicerRT/wiki/Segmentation design wiki page], the [https://www.slicer.org/wiki/Documentation/Labs/Segmentations labs wiki page], and the links pointing from these pages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
* Past references&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
** Issue for Segmentations (complete Contours overhaul, delivery June 2015) [https://www.assembla.com/spaces/slicerrt/tickets/626 here]&lt;br /&gt;
** Issue for original Contours effort on SlicerRT Assembla ticketing system [https://www.assembla.com/spaces/slicerrt/tickets/137 here]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** Development notes [https://github.com/SlicerRt/SlicerRT/wiki/Segmentation wiki 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;
* [https://github.com/Slicer/Slicer/tree/master/Libs/vtkSegmentationCore vtkSegmentationCore on GitHub] (within Slicer)&lt;br /&gt;
* [https://github.com/Slicer/Slicer/tree/master/Modules/Loadable/Segmentations Segmentations Slicer module on GitHub]&lt;br /&gt;
* [[Documentation/Labs/Segmentations|Labs page]]&lt;br /&gt;
* Numerous scripting examples are listed in the [[Documentation/Nightly/ScriptRepository|Script repository]] page&lt;br /&gt;
* How to create new representation or converter - TODO&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
=FAQ=&lt;br /&gt;
; The closed surface generated from the RT Structure Set contour points is flawed&lt;br /&gt;
: Please [[Documentation/SlicerRT/HowToReportAnError|report]] the issue first so that we can fix the conversion.&lt;br /&gt;
: Use advanced conversion and choose a path through Ribbon model representation. SlicerRT extension needs to be installed for this.&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>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=MediaWiki:Sidebar&amp;diff=62664</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=MediaWiki:Sidebar&amp;diff=62664"/>
		<updated>2019-11-27T14:33:18Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Wiki2Web is not in service&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* About slicer&lt;br /&gt;
**Documentation/Release/Announcements|Introduction&lt;br /&gt;
**Documentation/Release/Acknowledgments|Acknowledgments&lt;br /&gt;
**News|News&lt;br /&gt;
**Contact|Contact Us&lt;br /&gt;
**Licensing | Licensing&lt;br /&gt;
**CommercialUse|Commercial Use&lt;br /&gt;
&lt;br /&gt;
* Publication&lt;br /&gt;
**http://www.spl.harvard.edu/publications/pages/display/?collection=11|Publication DB&lt;br /&gt;
**http://www.spl.harvard.edu/publications/gallery?selectedCollection=11|Image Gallery&lt;br /&gt;
**Main_Page/SlicerCommunity|Slicer Community&lt;br /&gt;
**CitingSlicer|Citing Slicer&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** Documentation/Nightly/Training | Slicer Training&lt;br /&gt;
** Documentation/Nightly | User manual&lt;br /&gt;
** Documentation/Nightly/Developers | Developer manual&lt;br /&gt;
&lt;br /&gt;
* Help&lt;br /&gt;
** Help | Help&lt;br /&gt;
** FAQ | User Q&amp;amp;A&lt;br /&gt;
** Documentation/Nightly/Developers/FAQ | Developer FAQ&lt;br /&gt;
** https://discourse.slicer.org/ | Discussion Forum&lt;br /&gt;
&lt;br /&gt;
* Links&lt;br /&gt;
** http://download.slicer.org | Downloads&lt;br /&gt;
** https://www.slicer.org/wiki/Main_Page | Wiki&lt;br /&gt;
** https://www.slicer.org | Homepage&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Ideally we should add these links to the &amp;quot;toolbox&amp;quot; below. To be able to edit the toolbox, we would have to apply this trick: https://www.mediawiki.org/wiki/User:Seb35/modifyToolbox&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** Special:Recentchanges | Recent Changes&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer_Wiki:About&amp;diff=62663</id>
		<title>Slicer Wiki:About</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer_Wiki:About&amp;diff=62663"/>
		<updated>2019-11-27T14:30:57Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: SlicerWikiWeb is deprecated and not in service&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Administrative links (passwords required):&lt;br /&gt;
&lt;br /&gt;
https://intweb/Information-about-websites&lt;br /&gt;
&lt;br /&gt;
http://www.slicer.org/wiki/Special:UserLogin&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.4/Developers/ReleaseProcess&amp;diff=62662</id>
		<title>Documentation/4.4/Developers/ReleaseProcess</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.4/Developers/ReleaseProcess&amp;diff=62662"/>
		<updated>2019-11-27T14:29:52Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;'/slicerWiki/'&amp;quot; to &amp;quot;'/wiki/'&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Create release dashboard scripts ==&lt;br /&gt;
&lt;br /&gt;
{{wip}}&lt;br /&gt;
&lt;br /&gt;
== Feature freeze ==&lt;br /&gt;
&lt;br /&gt;
Usually ~1 month before release.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
* Update modules documentation link in help section (loadable, scripted and cli)&lt;br /&gt;
** And some html links in Welcome module (Modules/Loadable/SlicerWelcome/Resources/HTML)&lt;br /&gt;
** Update CLI XML description files&lt;br /&gt;
&lt;br /&gt;
Commit message: &amp;lt;code&amp;gt;Update Documentation to X.Y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example: [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22407 r22407]&lt;br /&gt;
&lt;br /&gt;
== Release-candidate ==&lt;br /&gt;
&lt;br /&gt;
Since there all development occurs on &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, each time version is updated, two commits will be required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;RC&amp;gt;&amp;lt;/code&amp;gt; corresponds to the release candidate number. It is greater or equal to one.&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;&amp;lt;p&amp;gt;Update the Slicer version information for the release candidate:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, uncomment and set:&amp;lt;/p&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;Slicer_VERSION_RC&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&amp;lt;RC&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;...and if this is the first release candidate, update at least one these variables: &amp;lt;code&amp;gt;Slicer_VERSION_MAJOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_MINOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_PATCH&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Slicer X.Y.Z-rc&amp;lt;RC&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Generate packages based on REVISION associated with step 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update the Slicer version information for the development:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, comment &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; so that the next builds will contain the date associated with the last commit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Begin post-X.Y.Z-rc&amp;lt;RC&amp;gt; development&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
Since there all development occurs on &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, each time version is updated, two commits will be required.&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;&amp;lt;p&amp;gt;Update the Slicer version information for the release:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, uncomment and set &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;...and if this no release candidate has been made, update at least one these variables: &amp;lt;code&amp;gt;Slicer_VERSION_MAJOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_MINOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_PATCH&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Slicer X.Y.Z&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Generate packages based on REVISION associated with step 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Tag the repository:&amp;lt;/p&amp;gt;&lt;br /&gt;
 svn copy -r&amp;lt;REVISION&amp;gt; http://svn.slicer.org/Slicer4/trunk  \&lt;br /&gt;
      http://svn.slicer.org/Slicer4/tags/Slicer-X-Y  \&lt;br /&gt;
     -m &amp;quot;ENH: Tag of X.Y.Z release based on r&amp;lt;REVISION&amp;gt;.&amp;quot;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update the Slicer version information for the development:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, comment and set:&amp;lt;/p&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; so that the next builds will contain the date associated with the last commit.&lt;br /&gt;
* &amp;lt;code&amp;gt;Slicer_VERSION_RC&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Begin post-X.Y.Z development&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Post release ==&lt;br /&gt;
&lt;br /&gt;
=== Create a release branch ===&lt;br /&gt;
&lt;br /&gt;
 svn copy -r &amp;lt;REVISION&amp;gt; http://svn.slicer.org/Slicer4/trunk http://svn.slicer.org/Slicer4/branches/Slicer-X-Y \&lt;br /&gt;
  -m &amp;quot;ENH: Branching from trunk to Slicer-X-Y at &amp;lt;REVISION&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  svn checkout http://svn.slicer.org/Slicer4/branches/Slicer-X-Y&lt;br /&gt;
&lt;br /&gt;
=== Generate ChangeLog ===&lt;br /&gt;
&lt;br /&gt;
* See [https://raw.github.com/cryos/avogadro/master/scripts/gitlog2changelog.py gitlog2changelog.py]. More details [http://blog.cryos.net/archives/202-Git-and-Automatic-ChangeLog-Generation.html here].&lt;br /&gt;
&lt;br /&gt;
* Update [[Release Details]] page using generated ChangeLog&lt;br /&gt;
&lt;br /&gt;
=== Update Mantis ===&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Release&amp;quot; current target&lt;br /&gt;
* Create new target&lt;br /&gt;
* Check the &amp;quot;fixed in&amp;quot; fields&lt;br /&gt;
&lt;br /&gt;
=== Midas ===&lt;br /&gt;
&lt;br /&gt;
==== Tag release packages ====&lt;br /&gt;
&lt;br /&gt;
* If needed, create a X.Y.Z folder in [http://slicer.kitware.com/midas3/folder/274 Slicer/Packages/Application/Release]&lt;br /&gt;
** Copy uploaded packages into the folder created above&lt;br /&gt;
** Identify the item_id associated with uploaded packages. For example: 11926, 11925, 11927, 11992&lt;br /&gt;
** SSH connect to &amp;lt;code&amp;gt;jcfr@slicer.kitwarein.com&amp;lt;/code&amp;gt;&lt;br /&gt;
** Connect to mysql using &amp;lt;code&amp;gt;mysql -u midas -p&amp;lt;/code&amp;gt;&lt;br /&gt;
*** See file &amp;lt;code&amp;gt;/var/www/midas3/core/configs/database.local.ini&amp;lt;/code&amp;gt; for password&lt;br /&gt;
*** Choose midas database: &amp;lt;code&amp;gt;use midas&amp;lt;/code&amp;gt;&lt;br /&gt;
** List packages associated with identified items and check they are the appropriate ones:&lt;br /&gt;
*** &amp;lt;code&amp;gt;select *  from slicerpackages_package as p , item as i where i.item_id = p.item_id and p.item_id in (11926, 11925, 11927, 11992);&amp;lt;/code&amp;gt;&lt;br /&gt;
** Set release field&lt;br /&gt;
*** &amp;lt;code&amp;gt;update slicerpackages_package set `release`=&amp;quot;4.2.2-1&amp;quot; where item_id in (11926, 11925, 11927, 11992);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version NA-MIC data tree ====&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;&amp;lt;p&amp;gt;[[Documentation/{{documentation/version}}/Developers/Tutorials/ObtainExtensionServerApiKey|Create an account on the extension server and obtain an API Key]]. You will then use your midas login and api key to substitute &amp;lt;code&amp;gt;&amp;lt;YOUR-MIDAS-LOGIN&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;YOUR-MIDAS-APIKEY&amp;gt;&amp;lt;/code&amp;gt; in the examples.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;If not already done, go to [http://slicer.kitware.com/midas3/community/23 NA-MIC community] and click on &amp;lt;code&amp;gt;Join community&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Send an email on the developer list asking to be added to the &amp;lt;code&amp;gt;DataManager&amp;lt;/code&amp;gt; group on NA-MIC community. That will grant you read/write permissions to the &amp;lt;code&amp;gt;Data&amp;lt;/code&amp;gt; folder and sub-folders.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Install prerequisites&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo pip install pydas&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Identify &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; of the &amp;lt;code&amp;gt;Data&amp;lt;/code&amp;gt; folder. For example [http://slicer.kitware.com/midas3/folder/301 301]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Simulate creation of &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; data folders based &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; ones&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/Slicer/Base/Python/slicer/release&lt;br /&gt;
$ python midasdata.py --url=http://slicer.kitware.com/midas3 --data_id=301 \&lt;br /&gt;
  --email=&amp;lt;YOUR-MIDAS-LOGIN&amp;gt; --apikey=&amp;lt;YOUR-MIDAS-APIKEY&amp;gt; --source_version=Nightly --dest_version=X.Y --dry-run&lt;br /&gt;
Application ( folder_id: 302 )&lt;br /&gt;
'-Nightly ( folder_id: 831 )&lt;br /&gt;
'-'-Testing ( folder_id: 832 )&lt;br /&gt;
'-'-'-Baseline ( folder_id: 889 )&lt;br /&gt;
'-'-'-'-DiffusionTensorImagingTutorial.png ( item_id: 12067 )&lt;br /&gt;
'-'-'-'-NeurosurgicalPlanningTutorial.png ( item_id: 12066 )&lt;br /&gt;
'-'-'-'-SlicerTestingTest.png ( item_id: 17760 )&lt;br /&gt;
'-'-'-Input ( folder_id: 833 )&lt;br /&gt;
'-'-'-'-AtlasTests ( folder_id: 834 )&lt;br /&gt;
'-'-'-'-'-2012-10-26-BrainAtlas.mrb ( item_id: 10276 )&lt;br /&gt;
[...]&lt;br /&gt;
Module: VotingBinaryHoleFillingImageFilter ( folder_id: 1491 )&lt;br /&gt;
'-Nightly ( folder_id: 1491 )&lt;br /&gt;
'-'-Testing ( folder_id: 1492 )&lt;br /&gt;
'-'-'-Baseline ( folder_id: 1493 )&lt;br /&gt;
'-'-'-'-VotingBinaryHoleFillingImageFilterTest.nhdr ( item_id: 103418 )&lt;br /&gt;
'-'-'-'-VotingBinaryHoleFillingImageFilterTest.raw.gz ( item_id: 103419 )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Create &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; data tree based &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; ones&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python midasdata.py --url=http://slicer.kitware.com/midas3 --data_id=301 \&lt;br /&gt;
  --email=&amp;lt;YOUR-MIDAS-LOGIN&amp;gt; --apikey=&amp;lt;YOUR-MIDAS-APIKEY&amp;gt; --source_version=Nightly --dest_version=X.Y&lt;br /&gt;
&lt;br /&gt;
Versioning of the NA-MIC Data tree for release X.Y...&lt;br /&gt;
Versioning Modules...&lt;br /&gt;
[...]&lt;br /&gt;
Versioning Modules...[DONE]&lt;br /&gt;
Versioning Application...&lt;br /&gt;
Creating folder X.Y under Application directory&lt;br /&gt;
Duplicating subfolders from Nightly to X.Y...&lt;br /&gt;
Duplicating subfolders from Nightly to X.Y...[DONE]&lt;br /&gt;
Versioning Application...[DONE]&lt;br /&gt;
Versioning of the NA-MIC Data tree for release X.Y...[DONE]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update Slicer wiki ===&lt;br /&gt;
&lt;br /&gt;
The copy of the pages associated with the &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; namespace into the &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; namespace is done using the convenience python module [https://github.com/jcfr/mwdoc#readme mwdoc].&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;&amp;lt;p&amp;gt;Check with &amp;lt;email&amp;gt;jchris.fillionr@kitware.com&amp;lt;/email&amp;gt; to get the credential associated with &amp;lt;code&amp;gt;UpdateBot&amp;lt;/code&amp;gt; user.&amp;lt;/p&amp;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;Copy &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; pages into &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; pages.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd ~/Projects&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install mwclient==0.6.5&lt;br /&gt;
&lt;br /&gt;
$ git clone git://github.com/jcfr/mwdoc&lt;br /&gt;
&lt;br /&gt;
$ cd mwdoc&lt;br /&gt;
&lt;br /&gt;
$ python&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import mwdoc&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc = mwdoc.Documentation('slicer.org', '/wiki/')&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc.login('UpdateBot', 'XXXXXXX')&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc.versionPages('Nightly', '4.3', ['Documentation', 'Template:Documentation'])&lt;br /&gt;
[INFO] Page successfully created: 'Documentation/4.3/Extensions/ErodeDilateLabel'&lt;br /&gt;
[...]&lt;br /&gt;
[INFO] Page successfully created: 'Template:Documentation/4.3/module-header'&lt;br /&gt;
[INFO] Page successfully created: 'Template:Documentation/4.3/module-section'&lt;br /&gt;
[INFO] Page successfully created: 'Template:Documentation/4.3/module/footer'&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/nextversion]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/currentversion]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/versionlist]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[FAQ]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/Release]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/Release/Announcements]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/UserTraining]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/UserOrientation]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/DeveloperOrientation]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CDash ===&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;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Create new CDash groups for extension submissions associated with &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; release:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Extensions-X.Y-Nightly&lt;br /&gt;
Extensions-X.Y-Continuous&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update external website ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/3DSlicer&lt;br /&gt;
* http://www.nitrc.org/projects/slicer/&lt;br /&gt;
&lt;br /&gt;
=== Tag associated projects ===&lt;br /&gt;
* Slicer/SlicerExecutionModel&lt;br /&gt;
* Slicer/VTK&lt;br /&gt;
* Slicer/ITK&lt;br /&gt;
* commontk/CTK ?&lt;br /&gt;
* commontk/PythonQt ?&lt;br /&gt;
&lt;br /&gt;
=== Backport commit into release branch ===&lt;br /&gt;
&lt;br /&gt;
The following steps will lead to the creation of new git-svn clone having two branches:&lt;br /&gt;
* &amp;lt;code&amp;gt;git-svn&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git-svn-XY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reference: http://www.dmo.ca/blog/20070608113513/&lt;br /&gt;
&lt;br /&gt;
==== Step 1: Checkout sources ====&lt;br /&gt;
&lt;br /&gt;
 git clone git://github.com/Slicer/Slicer.git Slicer-X.Y&lt;br /&gt;
 cd Slicer-X.Y&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;
==== Step 2: Add release branch remote ====&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;code&amp;gt;.git/config&amp;lt;/code&amp;gt;, and in addition to the existing 'git-svn' remote, add the following one:&lt;br /&gt;
&lt;br /&gt;
 [svn-remote &amp;quot;svn-XY&amp;quot;]&lt;br /&gt;
    url = http://svn.slicer.org/Slicer4/branches/Slicer-X-Y&lt;br /&gt;
    fetch = :refs/remotes/git-svn-XY&lt;br /&gt;
&lt;br /&gt;
==== Step 3: Pull associated SVN branch ====&lt;br /&gt;
&lt;br /&gt;
 git svn fetch svn-XY&lt;br /&gt;
 git checkout -b master-XY git-svn-XY&lt;br /&gt;
&lt;br /&gt;
==== Step 4: Backport ====&lt;br /&gt;
&lt;br /&gt;
We can now cherry pick commit associated with master (trunk) into &amp;lt;code&amp;gt;master-XY&amp;lt;/code&amp;gt; (Slicer-X-Y)&lt;br /&gt;
&lt;br /&gt;
==== Step 5: Create a patch release ====&lt;br /&gt;
&lt;br /&gt;
{{wip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Slicer trunk: Update Major/Minor/Patch version to match latest release&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.6/Developers/ReleaseProcess&amp;diff=62661</id>
		<title>Documentation/4.6/Developers/ReleaseProcess</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.6/Developers/ReleaseProcess&amp;diff=62661"/>
		<updated>2019-11-27T14:29:40Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;'/slicerWiki/'&amp;quot; to &amp;quot;'/wiki/'&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Release planning ==&lt;br /&gt;
&lt;br /&gt;
Usually ~1 month before release.&lt;br /&gt;
&lt;br /&gt;
* Sept 13: Discussed next release during the dev hangout&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;small&amp;gt;&lt;br /&gt;
{{documentation/banner&lt;br /&gt;
| text  = These updates should &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; be needed anymore. See details below. }}&lt;br /&gt;
&amp;lt;/small&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Following [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22423 r22423], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22424 r22424] and [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=25430 r25430] documentation URLs should all reference the &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; namespace and are automatically updated at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Make sure to patch VS2008 using the script [https://gist.github.com/jcfr/3c7bef3f8b32f9f6ad4b fix-vc9-redist-manifests.ps1]&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{remark|green|VS2013 is now used}}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Update modules documentation link in help section (loadable, scripted and cli)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;And some html links in Welcome module (Modules/Loadable/SlicerWelcome/Resources/HTML)&amp;lt;/strike&amp;gt; - Not needed since [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=25430 r25430]&lt;br /&gt;
** &amp;lt;strike&amp;gt;Update CLI XML description files&amp;lt;/strike&amp;gt;&lt;br /&gt;
&amp;lt;strike&amp;gt;&lt;br /&gt;
Commit message: &amp;lt;code&amp;gt;Update Documentation to X.Y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example: [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22407 r22407]&lt;br /&gt;
&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release-candidate ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;small&amp;gt;&lt;br /&gt;
{{documentation/banner&lt;br /&gt;
| text  = This step is &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; part of our current release process. }}&lt;br /&gt;
&amp;lt;/small&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since there all development occurs on &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, each time version is updated, two commits will be required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;RC&amp;gt;&amp;lt;/code&amp;gt; corresponds to the release candidate number. It is greater or equal to one.&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;&amp;lt;p&amp;gt;Update the Slicer version information for the release candidate:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, uncomment and set:&amp;lt;/p&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;Slicer_VERSION_RC&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&amp;lt;RC&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;...and if this is the first release candidate, update at least one these variables: &amp;lt;code&amp;gt;Slicer_VERSION_MAJOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_MINOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_PATCH&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Slicer X.Y.Z-rc&amp;lt;RC&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Generate packages based on REVISION associated with step 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update the Slicer version information for the development:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, comment &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; so that the next builds will contain the date associated with the last commit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Begin post-X.Y.Z-rc&amp;lt;RC&amp;gt; development&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;small&amp;gt;&lt;br /&gt;
{{documentation/banner&lt;br /&gt;
| text  = Start here. &lt;br /&gt;
| background-color = 8FBC8F }}&lt;br /&gt;
&amp;lt;/small&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since there all development occurs on &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, each time version is updated, two commits will be required.&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;&amp;lt;p&amp;gt;Update the Slicer version information for the release:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, uncomment and set &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;...and if this no release candidate has been made, update at least one these variables: &amp;lt;code&amp;gt;Slicer_VERSION_MAJOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_MINOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_PATCH&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;If not doing a clean build, make sure to specify the version: &amp;lt;code&amp;gt;cmake -DSlicer_VERSION_MAJOR:STRING=4 -DSlicer_VERSION_MINOR:STRING=6 -DSlicer_VERSION_PATCH:STRING=0 .&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Slicer X.Y.Z&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 ENH: Slicer 4.6.0&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Generate packages based on REVISION associated with step 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Tag the repository:&amp;lt;/p&amp;gt;&lt;br /&gt;
SVN:&lt;br /&gt;
 svn copy -r&amp;lt;REVISION&amp;gt; http://svn.slicer.org/Slicer4/trunk  \&lt;br /&gt;
      http://svn.slicer.org/Slicer4/tags/Slicer-X-Y  \&lt;br /&gt;
     -m &amp;quot;ENH: Tag of X.Y.Z release based on r&amp;lt;REVISION&amp;gt;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
GIT:&lt;br /&gt;
 git tag -s -m &amp;quot;ENH: Slicer X.Y.Z&amp;quot; vX.Y.Z origin/master&lt;br /&gt;
 git push origin vX.Y.Z&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update the Slicer version information for the development:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;,&amp;lt;/p&amp;gt;&lt;br /&gt;
* Increment &amp;lt;code&amp;gt;Slicer_VERSION_MINOR&amp;lt;/code&amp;gt;&lt;br /&gt;
and comment and set:&lt;br /&gt;
* &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; so that the next builds will contain the date associated with the last commit.&lt;br /&gt;
* &amp;lt;code&amp;gt;Slicer_VERSION_RC&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Begin X.(Y+1).Z development&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 ENH: Begin 4.7.0 development&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Post release ==&lt;br /&gt;
&lt;br /&gt;
=== Create a release branch ===&lt;br /&gt;
&lt;br /&gt;
 svn copy -r &amp;lt;REVISION&amp;gt; http://svn.slicer.org/Slicer4/trunk http://svn.slicer.org/Slicer4/branches/Slicer-X-Y \&lt;br /&gt;
  -m &amp;quot;ENH: Branching from trunk to Slicer-X-Y at &amp;lt;REVISION&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  svn checkout http://svn.slicer.org/Slicer4/branches/Slicer-X-Y&lt;br /&gt;
&lt;br /&gt;
=== Generate ChangeLog ===&lt;br /&gt;
&lt;br /&gt;
* See [https://raw.github.com/cryos/avogadro/master/scripts/gitlog2changelog.py gitlog2changelog.py]. More details [http://blog.cryos.net/archives/202-Git-and-Automatic-ChangeLog-Generation.html here].&lt;br /&gt;
&lt;br /&gt;
* Update [[Release Details]] page using generated ChangeLog&lt;br /&gt;
&lt;br /&gt;
=== Update Mantis ===&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Release&amp;quot; current target&lt;br /&gt;
* Create new target&lt;br /&gt;
* Check the &amp;quot;fixed in&amp;quot; fields&lt;br /&gt;
&lt;br /&gt;
=== Midas ===&lt;br /&gt;
&lt;br /&gt;
==== Tag release packages ====&lt;br /&gt;
&lt;br /&gt;
* If needed, create a X.Y.Z folder in [http://slicer.kitware.com/midas3/folder/274 Slicer/Packages/Application/Release]&lt;br /&gt;
** Copy uploaded packages into the folder created above&lt;br /&gt;
** Identify the item_id associated with uploaded packages. For example: 11926, 11925, 11927, 11992&lt;br /&gt;
** From Kitware internal network, SSH connect to &amp;lt;code&amp;gt;jcfr@slicer.kitware.com&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;jcfr@192.168.120.210&amp;lt;/code&amp;gt;)&lt;br /&gt;
** Connect to mysql using &amp;lt;code&amp;gt;mysql -u midas -p&amp;lt;/code&amp;gt;&lt;br /&gt;
*** See file &amp;lt;code&amp;gt;/var/www/midas3/core/configs/database.local.ini&amp;lt;/code&amp;gt; for password&lt;br /&gt;
*** Choose midas database: &amp;lt;code&amp;gt;use midas&amp;lt;/code&amp;gt;&lt;br /&gt;
** List packages associated with identified items and check they are the appropriate ones:&lt;br /&gt;
*** &amp;lt;code&amp;gt;select *  from slicerpackages_package as p , item as i where i.item_id = p.item_id and p.item_id in (11926, 11925, 11927, 11992);&amp;lt;/code&amp;gt;&lt;br /&gt;
** Set release field&lt;br /&gt;
*** &amp;lt;code&amp;gt;update slicerpackages_package set `release`=&amp;quot;4.2.2-1&amp;quot; where item_id in (11926, 11925, 11927, 11992);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version NA-MIC data tree ====&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;&amp;lt;p&amp;gt;[[Documentation/{{documentation/version}}/Developers/Tutorials/ObtainExtensionServerApiKey|Create an account on the extension server and obtain an API Key]]. You will then use your midas login and api key to substitute &amp;lt;code&amp;gt;&amp;lt;YOUR-MIDAS-LOGIN&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;YOUR-MIDAS-APIKEY&amp;gt;&amp;lt;/code&amp;gt; in the examples.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;If not already done, go to [http://slicer.kitware.com/midas3/community/23 NA-MIC community] and click on &amp;lt;code&amp;gt;Join community&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Send an email on the developer list asking to be added to the &amp;lt;code&amp;gt;DataManager&amp;lt;/code&amp;gt; group on NA-MIC community. That will grant you read/write permissions to the &amp;lt;code&amp;gt;Data&amp;lt;/code&amp;gt; folder and sub-folders.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Install prerequisites&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ pip install pydas&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Identify &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; of the &amp;lt;code&amp;gt;Data&amp;lt;/code&amp;gt; folder. For example [http://slicer.kitware.com/midas3/folder/301 301]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Simulate creation of &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; data folders based &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; ones&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/Slicer/Base/Python/slicer/release&lt;br /&gt;
$ python midasdata.py --url=http://slicer.kitware.com/midas3 --data_id=301 \&lt;br /&gt;
  --email=&amp;lt;YOUR-MIDAS-LOGIN&amp;gt; --apikey=&amp;lt;YOUR-MIDAS-APIKEY&amp;gt; --source_version=Nightly --dest_version=X.Y --dry-run&lt;br /&gt;
Application ( folder_id: 302 )&lt;br /&gt;
'-Nightly ( folder_id: 831 )&lt;br /&gt;
'-'-Testing ( folder_id: 832 )&lt;br /&gt;
'-'-'-Baseline ( folder_id: 889 )&lt;br /&gt;
'-'-'-'-DiffusionTensorImagingTutorial.png ( item_id: 12067 )&lt;br /&gt;
'-'-'-'-NeurosurgicalPlanningTutorial.png ( item_id: 12066 )&lt;br /&gt;
'-'-'-'-SlicerTestingTest.png ( item_id: 17760 )&lt;br /&gt;
'-'-'-Input ( folder_id: 833 )&lt;br /&gt;
'-'-'-'-AtlasTests ( folder_id: 834 )&lt;br /&gt;
'-'-'-'-'-2012-10-26-BrainAtlas.mrb ( item_id: 10276 )&lt;br /&gt;
[...]&lt;br /&gt;
Module: VotingBinaryHoleFillingImageFilter ( folder_id: 1491 )&lt;br /&gt;
'-Nightly ( folder_id: 1491 )&lt;br /&gt;
'-'-Testing ( folder_id: 1492 )&lt;br /&gt;
'-'-'-Baseline ( folder_id: 1493 )&lt;br /&gt;
'-'-'-'-VotingBinaryHoleFillingImageFilterTest.nhdr ( item_id: 103418 )&lt;br /&gt;
'-'-'-'-VotingBinaryHoleFillingImageFilterTest.raw.gz ( item_id: 103419 )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Create &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; data tree based &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; ones&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python midasdata.py --url=http://slicer.kitware.com/midas3 --data_id=301 \&lt;br /&gt;
  --email=&amp;lt;YOUR-MIDAS-LOGIN&amp;gt; --apikey=&amp;lt;YOUR-MIDAS-APIKEY&amp;gt; --source_version=Nightly --dest_version=X.Y&lt;br /&gt;
&lt;br /&gt;
Versioning of the NA-MIC Data tree for release X.Y...&lt;br /&gt;
Versioning Modules...&lt;br /&gt;
[...]&lt;br /&gt;
Versioning Modules...[DONE]&lt;br /&gt;
Versioning Application...&lt;br /&gt;
Creating folder X.Y under Application directory&lt;br /&gt;
Duplicating subfolders from Nightly to X.Y...&lt;br /&gt;
Duplicating subfolders from Nightly to X.Y...[DONE]&lt;br /&gt;
Versioning Application...[DONE]&lt;br /&gt;
Versioning of the NA-MIC Data tree for release X.Y...[DONE]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update Slicer wiki ===&lt;br /&gt;
&lt;br /&gt;
The copy of the pages associated with the &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; namespace into the &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; namespace is done using the convenience python module [https://github.com/jcfr/mwdoc#readme mwdoc].&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;&amp;lt;p&amp;gt;Check with &amp;lt;email&amp;gt;jchris.fillionr@kitware.com&amp;lt;/email&amp;gt; to get the credential associated with &amp;lt;code&amp;gt;UpdateBot&amp;lt;/code&amp;gt; user.&amp;lt;/p&amp;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;Copy &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; pages into &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; pages.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd ~/Projects&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install mwclient==0.6.5&lt;br /&gt;
&lt;br /&gt;
$ git clone git://github.com/jcfr/mwdoc&lt;br /&gt;
&lt;br /&gt;
$ cd mwdoc&lt;br /&gt;
&lt;br /&gt;
$ python&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import mwdoc&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc = mwdoc.Documentation('slicer.org', '/wiki/')&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc.login('UpdateBot', 'XXXXXXX')&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc.versionPages('Nightly', '4.3', ['Documentation', 'Template:Documentation'])&lt;br /&gt;
[INFO] Page successfully created: 'Documentation/4.3/Extensions/ErodeDilateLabel'&lt;br /&gt;
[...]&lt;br /&gt;
[INFO] Page successfully created: 'Template:Documentation/4.3/module-header'&lt;br /&gt;
[INFO] Page successfully created: 'Template:Documentation/4.3/module-section'&lt;br /&gt;
[INFO] Page successfully created: 'Template:Documentation/4.3/module/footer'&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/prevversion]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/nextversion]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/currentversion]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/versionlist]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/acknowledgments-versionlist]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[FAQ]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/Release]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/Release/Announcements]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/Release/Acknowledgments]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/Release/Report a problem]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/UserTraining]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/UserOrientation]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/UserFeedback]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/Release/SlicerApplication/HardwareConfiguration]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&amp;lt;del&amp;gt;Update [[Documentation/DeveloperOrientation]]&amp;lt;/del&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CDash ===&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;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Create new CDash groups for extension submissions associated with &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; release:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Extensions-X.Y-Nightly&lt;br /&gt;
Extensions-X.Y-Continuous&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ExtensionsIndex ==&lt;br /&gt;
&lt;br /&gt;
See https://github.com/Slicer/ExtensionsIndex&lt;br /&gt;
&lt;br /&gt;
1) Create branch X.Y based of master&lt;br /&gt;
&lt;br /&gt;
=== Update external website ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/3DSlicer&lt;br /&gt;
* http://www.nitrc.org/projects/slicer/&lt;br /&gt;
&lt;br /&gt;
=== Tag associated projects ===&lt;br /&gt;
* Slicer/SlicerExecutionModel&lt;br /&gt;
* Slicer/VTK&lt;br /&gt;
* Slicer/ITK&lt;br /&gt;
* commontk/CTK ?&lt;br /&gt;
* commontk/PythonQt ?&lt;br /&gt;
&lt;br /&gt;
=== Update User Survey ===&lt;br /&gt;
&lt;br /&gt;
Title of the survey should be updated.&lt;br /&gt;
See https://docs.google.com/forms/d/1rggxoTV5KL_vt3gX9BNNAcKH4pnL5lkMqPnklOThINg&lt;br /&gt;
&lt;br /&gt;
=== Sign packages ===&lt;br /&gt;
&lt;br /&gt;
==== MacOSX ====&lt;br /&gt;
As discussed in issue [http://na-mic.org/Bug/view.php?id=3965 #3965], the code signing command is of the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
codesign --deep --force --sign &amp;quot;Developer ID Application: &amp;lt;Name-of-certificate-in-keychain&amp;gt;&amp;quot; ./Slicer.app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the argument to &amp;lt;code&amp;gt;--sign&amp;lt;/code&amp;gt; is the name of the developer's certificate in Mac OS X Keychain.app .&lt;br /&gt;
&lt;br /&gt;
'''Note: The signing of MacOSX package is not yet implemented in our nightly and release build workflows.''' See [[Documentation/Nightly/Developers/Mac_OS_X_Code_Signing]] for more information.&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
TBD - See [http://na-mic.org/Bug/view.php?id=2697 #2697]&lt;br /&gt;
&lt;br /&gt;
Also see [[Documentation/Nightly/Developers/Windows_Code_Signing]] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Backport commit into release branch ===&lt;br /&gt;
&lt;br /&gt;
The following steps will lead to the creation of new git-svn clone having two branches:&lt;br /&gt;
* &amp;lt;code&amp;gt;git-svn&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git-svn-XY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reference: http://www.dmo.ca/blog/20070608113513/&lt;br /&gt;
&lt;br /&gt;
==== Step 1: Checkout sources ====&lt;br /&gt;
&lt;br /&gt;
 git clone git://github.com/Slicer/Slicer.git Slicer-X.Y&lt;br /&gt;
 cd Slicer-X.Y&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;
==== Step 2: Add release branch remote ====&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;code&amp;gt;.git/config&amp;lt;/code&amp;gt;, and in addition to the existing 'git-svn' remote, add the following one:&lt;br /&gt;
&lt;br /&gt;
 [svn-remote &amp;quot;svn-XY&amp;quot;]&lt;br /&gt;
    url = http://svn.slicer.org/Slicer4/branches/Slicer-X-Y&lt;br /&gt;
    fetch = :refs/remotes/git-svn-XY&lt;br /&gt;
&lt;br /&gt;
==== Step 3: Pull associated SVN branch ====&lt;br /&gt;
&lt;br /&gt;
 git svn fetch svn-XY&lt;br /&gt;
 git checkout -b master-XY git-svn-XY&lt;br /&gt;
&lt;br /&gt;
==== Step 4: Backport ====&lt;br /&gt;
&lt;br /&gt;
We can now cherry pick commit associated with master (trunk) into &amp;lt;code&amp;gt;master-XY&amp;lt;/code&amp;gt; (Slicer-X-Y)&lt;br /&gt;
&lt;br /&gt;
==== Step 5: Create a patch release ====&lt;br /&gt;
&lt;br /&gt;
{{wip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Slicer trunk: Update Major/Minor/Patch version to match latest release&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.3/Developers/Versioning&amp;diff=62660</id>
		<title>Documentation/4.3/Developers/Versioning</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.3/Developers/Versioning&amp;diff=62660"/>
		<updated>2019-11-27T14:29:28Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;'/slicerWiki/'&amp;quot; to &amp;quot;'/wiki/'&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;!-- &lt;br /&gt;
= How to create a Slicer package =&lt;br /&gt;
&lt;br /&gt;
== Locally on your machine ==&lt;br /&gt;
&lt;br /&gt;
After Slicer correctly build and test, to create a binary package on mac/unix:&lt;br /&gt;
&lt;br /&gt;
 $ cd Slicer-Superbuild/Slicer-build&lt;br /&gt;
 $ make package&lt;br /&gt;
&lt;br /&gt;
For Visual Studio on Windows, the inner Slicer (not superbuild) solution file contains a 'PACKAGE' project, just build it. You might have to install [http://nsis.sourceforge.net/Download NSIS] prior.&lt;br /&gt;
&lt;br /&gt;
On Mac OS X, a 'dmg' file is generated, on unix it's a tar.gz archive and on Windows it's a exe installer.&lt;br /&gt;
&lt;br /&gt;
== Automatically expose it to the Slicer community ==&lt;br /&gt;
&lt;br /&gt;
CTest can automatically create a package and upload it on [http://slicer.cdash.org slicer.cdash.org] and [http://download.slicer.org download.slicer.org] to be available to the community.&lt;br /&gt;
&lt;br /&gt;
You need to create a script following the template [http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/CMake/SlicerDashboardScript.TEMPLATE.cmake?view=markup Slicer/CMake/SlicerDashboardScript.TEMPLATE.cmake]. Change the following variables &amp;lt;code&amp;gt;WITH_PACKAGES&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SCRIPT_MODE&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;experimental&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Then you can run your script:&lt;br /&gt;
 $ ctest -S /path/to/SlicerPackageScript.cmake -VV &amp;gt; /path/to/logs.txt 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
Please note that the source and build directories should not be located in '''/usr'''. The libraries would be considered by the packaging mechanism as &amp;quot;system&amp;quot; libraries.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Versioning =&lt;br /&gt;
&lt;br /&gt;
== Project fork ==&lt;br /&gt;
&lt;br /&gt;
While Slicer specific patches related to dependent project (i.e. VTK) are integrated upstream, it is not uncommon to build Slicer against a Slicer specific fork of the project.&lt;br /&gt;
&lt;br /&gt;
For example: https://github.com/Slicer/VTK&lt;br /&gt;
&lt;br /&gt;
=== Patches for tagged release ===&lt;br /&gt;
&lt;br /&gt;
For each version of the project requiring some specific patches, a branch following that convention will be created: &amp;lt;code&amp;gt;slicer-vX.Y.Z&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;X.Y.Z&amp;lt;/code&amp;gt; corresponds to the version of the project.&lt;br /&gt;
&lt;br /&gt;
For example, in case of the SlicerVTK fork, the branch &amp;lt;code&amp;gt;slicer-v5.10.1&amp;lt;/code&amp;gt; has been created.&lt;br /&gt;
&lt;br /&gt;
=== Patches for development branch ===&lt;br /&gt;
&lt;br /&gt;
In this case, since there is no tag associated with the branch, the Slicer specific patch should be added to a branch named using the date of the commit parent of the Slicer branch: &amp;lt;code&amp;gt;slicer-YEAR-MONTH-DAY-vX.Y&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; corresponds to the fork release.&lt;br /&gt;
&lt;br /&gt;
== Create release dashboard scripts ==&lt;br /&gt;
&lt;br /&gt;
{{wip}}&lt;br /&gt;
&lt;br /&gt;
== Feature freeze ==&lt;br /&gt;
&lt;br /&gt;
Usually ~1 month before release.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
* Update modules documentation link in help section (loadable, scripted and cli)&lt;br /&gt;
** And some html links in Welcome module (Modules/Loadable/SlicerWelcome/Resources/HTML)&lt;br /&gt;
** Update CLI XML description files&lt;br /&gt;
&lt;br /&gt;
Commit message: &amp;lt;code&amp;gt;Update Documentation to X.Y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example: [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22407 r22407]&lt;br /&gt;
&lt;br /&gt;
== Release-candidate ==&lt;br /&gt;
&lt;br /&gt;
Since there all development occurs on &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, each time version is updated, two commits will be required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;RC&amp;gt;&amp;lt;/code&amp;gt; corresponds to the release candidate number. It is greater or equal to one.&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;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, uncomment and set:&lt;br /&gt;
*&amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;Slicer_VERSION_RC&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;... and if this is the first release candidate, update at least one these variables: &amp;lt;code&amp;gt;Slicer_VERSION_MAJOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_MINOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_PATCH&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt; changes using this message:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;ENH: Slicer X.Y.Z-rc&amp;lt;RC&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Generate packages based on REVISION associated with step1.&amp;lt;/p&amp;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;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, comment &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; so that the next builds will contain the date associated with the last commit.&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;Commit &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt; changes using this message:&amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt;ENH: Begin post-X.Y.Z-rc&amp;lt;RC&amp;gt; development&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
Since there all development occurs on &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, each time version is updated, two commits will be required.&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;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, uncomment and set &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;... and if this no release candidate has been made, update at least one these variables: &amp;lt;code&amp;gt;Slicer_VERSION_MAJOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_MINOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_PATCH&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt; changes using this message:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;ENH: Slicer X.Y.Z&amp;lt;/pre&amp;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;Generate packages based on REVISION associated with step1.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;Tag the repository:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
  svn copy -r&amp;lt;REVISION&amp;gt; http://svn.slicer.org/Slicer4/trunk  \&lt;br /&gt;
       http://svn.slicer.org/Slicer4/tags/Slicer-X-Y  \&lt;br /&gt;
      -m &amp;quot;ENH: Tag of X.Y.Z release based on r&amp;lt;REVISION&amp;gt;.&amp;quot;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, comment and set:&amp;lt;/p&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; so that the next builds will contain the date associated with the last commit.&lt;br /&gt;
* &amp;lt;code&amp;gt;Slicer_VERSION_RC&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt; changes using this message:&amp;lt;/p&amp;gt; &amp;lt;pre&amp;gt;ENH: Begin post-X.Y.Z development&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Post release ==&lt;br /&gt;
&lt;br /&gt;
=== Create a release branch ===&lt;br /&gt;
&lt;br /&gt;
 svn copy -r &amp;lt;REVISION&amp;gt; http://svn.slicer.org/Slicer4/trunk http://svn.slicer.org/Slicer4/branches/Slicer-X-Y&lt;br /&gt;
&lt;br /&gt;
=== Backport commit into release branch ===&lt;br /&gt;
&lt;br /&gt;
The following steps will lead to the creation of new git-svn clone having to branch:&lt;br /&gt;
* &amp;lt;code&amp;gt;git-svn&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git-svn-XY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reference: http://www.dmo.ca/blog/20070608113513/&lt;br /&gt;
&lt;br /&gt;
==== Step 1: Checkout sources ====&lt;br /&gt;
&lt;br /&gt;
 git clone git://github.com/Slicer/Slicer.git Slicer-X.Y&lt;br /&gt;
 cd Slicer-X.Y&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;
==== Step 2: Add release branch remote ====&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;code&amp;gt;.git/config&amp;lt;/code&amp;gt;, and in addition to the existing 'git-svn' remote, add the following one:&lt;br /&gt;
&lt;br /&gt;
 [svn-remote &amp;quot;svn-XY&amp;quot;]&lt;br /&gt;
    url = http://svn.slicer.org/Slicer4/branches/Slicer-X-Y&lt;br /&gt;
    fetch = :refs/remotes/git-svn-XY&lt;br /&gt;
&lt;br /&gt;
==== Step 3: Pull associated SVN branch ====&lt;br /&gt;
&lt;br /&gt;
 git svn fetch git-svn-XY -r &amp;lt;REVISION&amp;gt;&lt;br /&gt;
 git checkout -b master-XY git-svn-XY&lt;br /&gt;
&lt;br /&gt;
==== Step 4: Backport ====&lt;br /&gt;
&lt;br /&gt;
We can now cherry pick commit associated with master (trunk) into &amp;lt;code&amp;gt;master-XY&amp;lt;/code&amp;gt; (Slicer-X-Y)&lt;br /&gt;
&lt;br /&gt;
==== Step 5: Create a patch release ====&lt;br /&gt;
&lt;br /&gt;
{{wip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Slicer trunk: Update Major/Minor/Patch version to match latest release&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Generate ChangeLog ===&lt;br /&gt;
&lt;br /&gt;
* See [https://raw.github.com/cryos/avogadro/master/scripts/gitlog2changelog.py gitlog2changelog.py]. More details [http://blog.cryos.net/archives/202-Git-and-Automatic-ChangeLog-Generation.html here].&lt;br /&gt;
&lt;br /&gt;
* Update [[Release Details]] page using generated ChangeLog&lt;br /&gt;
&lt;br /&gt;
=== Update Mantis ===&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Release&amp;quot; current target&lt;br /&gt;
* Create new target&lt;br /&gt;
* Check the &amp;quot;fixed in&amp;quot; fields&lt;br /&gt;
&lt;br /&gt;
=== Midas ===&lt;br /&gt;
&lt;br /&gt;
==== Tag release packages ====&lt;br /&gt;
&lt;br /&gt;
* If needed, create a X.Y.Z folder in [http://slicer.kitware.com/midas3/folder/274 Slicer/Packages/Application/Release]&lt;br /&gt;
** Copy uploaded packages into the folder created above&lt;br /&gt;
** Identify the item_id associated with uploaded packages. For example: 11926, 11925, 11927, 11992&lt;br /&gt;
** SSH connect to &amp;lt;code&amp;gt;jcfr@slicer.kitwarein.com&amp;lt;/code&amp;gt;&lt;br /&gt;
** Connect to mysql using &amp;lt;code&amp;gt;mysql -u midas -p&amp;lt;/code&amp;gt;&lt;br /&gt;
*** See file &amp;lt;code&amp;gt;/var/www/midas3/core/configs/database.local.ini&amp;lt;/code&amp;gt; for password&lt;br /&gt;
*** Choose midas database: &amp;lt;code&amp;gt;use midas&amp;lt;/code&amp;gt;&lt;br /&gt;
** List packages associated with identified items and check they are the appropriate ones:&lt;br /&gt;
*** &amp;lt;code&amp;gt;select *  from slicerpackages_package as p , item as i where i.item_id = p.item_id and p.item_id in (11926, 11925, 11927, 11992);&amp;lt;/code&amp;gt;&lt;br /&gt;
** Set release field&lt;br /&gt;
*** &amp;lt;code&amp;gt;update slicerpackages_package set `release`=&amp;quot;4.2.2-1&amp;quot; where item_id in (11926, 11925, 11927, 11992);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version NA-MIC data tree ====&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;&amp;lt;p&amp;gt;[[Documentation/{{documentation/version}}/Developers/Tutorials/ObtainExtensionServerApiKey|Create an account on the extension server and obtain an API Key]]. You will then use your midas login and api key to substitute &amp;lt;code&amp;gt;&amp;lt;YOUR-MIDAS-LOGIN&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;YOUR-MIDAS-APIKEY&amp;gt;&amp;lt;/code&amp;gt; in the examples.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;If not already done, go to [http://slicer.kitware.com/midas3/community/23 NA-MIC community] and click on &amp;lt;code&amp;gt;Join community&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Send an email on the developer list asking to be added to the &amp;lt;code&amp;gt;DataManager&amp;lt;/code&amp;gt; group on NA-MIC community. That will grant you read/write permissions to the &amp;lt;code&amp;gt;Data&amp;lt;/code&amp;gt; folder and sub-folders.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Install prerequisites&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo pip install pydas&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Identify &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; of the &amp;lt;code&amp;gt;Data&amp;lt;/code&amp;gt; folder. For example [http://slicer.kitware.com/midas3/folder/301 301]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Simulate creation of &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; data folders based &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; ones&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/Slicer/Base/Python/slicer/release&lt;br /&gt;
$ python midasdata.py --url=http://slicer.kitware.com/midas3 --data_id=301 \&lt;br /&gt;
  --email=&amp;lt;YOUR-MIDAS-LOGIN&amp;gt; --apikey=&amp;lt;YOUR-MIDAS-APIKEY&amp;gt; --source_version=Nightly --dest_version=X.Y --dry-run&lt;br /&gt;
Application ( folder_id: 302 )&lt;br /&gt;
'-Nightly ( folder_id: 831 )&lt;br /&gt;
'-'-Testing ( folder_id: 832 )&lt;br /&gt;
'-'-'-Baseline ( folder_id: 889 )&lt;br /&gt;
'-'-'-'-DiffusionTensorImagingTutorial.png ( item_id: 12067 )&lt;br /&gt;
'-'-'-'-NeurosurgicalPlanningTutorial.png ( item_id: 12066 )&lt;br /&gt;
'-'-'-'-SlicerTestingTest.png ( item_id: 17760 )&lt;br /&gt;
'-'-'-Input ( folder_id: 833 )&lt;br /&gt;
'-'-'-'-AtlasTests ( folder_id: 834 )&lt;br /&gt;
'-'-'-'-'-2012-10-26-BrainAtlas.mrb ( item_id: 10276 )&lt;br /&gt;
[...]&lt;br /&gt;
Module: VotingBinaryHoleFillingImageFilter ( folder_id: 1491 )&lt;br /&gt;
'-Nightly ( folder_id: 1491 )&lt;br /&gt;
'-'-Testing ( folder_id: 1492 )&lt;br /&gt;
'-'-'-Baseline ( folder_id: 1493 )&lt;br /&gt;
'-'-'-'-VotingBinaryHoleFillingImageFilterTest.nhdr ( item_id: 103418 )&lt;br /&gt;
'-'-'-'-VotingBinaryHoleFillingImageFilterTest.raw.gz ( item_id: 103419 )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Create &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; data tree based &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; ones&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python midasdata.py --url=http://slicer.kitware.com/midas3 --data_id=301 \&lt;br /&gt;
  --email=&amp;lt;YOUR-MIDAS-LOGIN&amp;gt; --apikey=&amp;lt;YOUR-MIDAS-APIKEY&amp;gt; --source_version=Nightly --dest_version=X.Y&lt;br /&gt;
&lt;br /&gt;
Versioning of the NA-MIC Data tree for release X.Y...&lt;br /&gt;
Versioning Modules...&lt;br /&gt;
[...]&lt;br /&gt;
Versioning Modules...[DONE]&lt;br /&gt;
Versioning Application...&lt;br /&gt;
Creating folder X.Y under Application directory&lt;br /&gt;
Duplicating subfolders from Nightly to X.Y...&lt;br /&gt;
Duplicating subfolders from Nightly to X.Y...[DONE]&lt;br /&gt;
Versioning Application...[DONE]&lt;br /&gt;
Versioning of the NA-MIC Data tree for release X.Y...[DONE]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update Slicer wiki ===&lt;br /&gt;
&lt;br /&gt;
The copy of the pages associated with the &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; namespace into the &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; namespace is done using the convenience python module [https://github.com/jcfr/mwdoc#readme mwdoc].&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;&amp;lt;p&amp;gt;Check with &amp;lt;email&amp;gt;jchris.fillionr@kitware.com&amp;lt;/email&amp;gt; to get the credential associated with &amp;lt;code&amp;gt;UpdateBot&amp;lt;/code&amp;gt; user.&amp;lt;/p&amp;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;Copy &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; pages into &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; pages.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd ~/Projects&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install mwclient&lt;br /&gt;
&lt;br /&gt;
$ git clone git://github.com/jcfr/mwdoc&lt;br /&gt;
&lt;br /&gt;
$ cd mwdoc&lt;br /&gt;
&lt;br /&gt;
$ python&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import mwdoc&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc = mwdoc.Documentation('slicer.org', '/wiki/')&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc.login('UpdateBot', 'XXXXXXX')&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc.versionPages('Nightly', '4.3', ['Documentation', 'Template:Documentation'])&lt;br /&gt;
[INFO] Page successfully created: 'Documentation/4.3/Extensions/ErodeDilateLabel'&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update external website ===&lt;br /&gt;
&lt;br /&gt;
See http://en.wikipedia.org/wiki/3DSlicer&lt;br /&gt;
&lt;br /&gt;
= Slicer Package naming scheme =&lt;br /&gt;
{{ambox|text=The following information is for Slicer maintainers only}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Slicer-&amp;amp;lt;MAJOR_VERSION&amp;amp;gt;.&amp;amp;lt;MINOR_VERSION&amp;amp;gt;.&amp;amp;lt;PATCH_VERSION&amp;amp;gt;[-rc{1|2|3...}][-&amp;amp;lt;TWEAK_VERSION&amp;amp;gt;][-&amp;amp;lt;DATE&amp;amp;gt;][-svn&amp;amp;lt;REV&amp;amp;gt;][-dirty]-&amp;amp;lt;ARCH&amp;amp;gt;-&amp;amp;lt;PLATFORM&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are 2 types of builds, releases and developments:&lt;br /&gt;
; Release&lt;br /&gt;
: Special builds made on a given revision (e.g. r19033: &amp;quot;ENH: Slicer 4.0.1&amp;quot;)&lt;br /&gt;
: Don't contain date or revision number.&lt;br /&gt;
: The optional suffix '''-rc{1|2|3|...}''' identifies the release candidates leading to a final release.&lt;br /&gt;
: Eventually, a tweak number can be added (e.g. 4.0.1-1)&lt;br /&gt;
; Development&lt;br /&gt;
: Nightly or experimental builds&lt;br /&gt;
: Contains suffixes after the major.minor.patch version &lt;br /&gt;
: The suffix '''svn&amp;amp;lt;REV&amp;amp;gt;''' allows to identify the revision associated with the current package.&lt;br /&gt;
: The '''-dirty''' prefix indicates if the package has been generated from a locally modified source tree.&lt;br /&gt;
&lt;br /&gt;
== Example of linux 64bits packages ==&lt;br /&gt;
 [              File name               ][   date   ][ build type ][                      note                     ]&lt;br /&gt;
 Slicer-4.0.0-linux-amd64                 2011-11-24    release     release of Slicer 4.0.0&lt;br /&gt;
 Slicer-4.0.0-2011-12-10-linux-amd64      2011-11-25  development   nightly build after 4.0.0&lt;br /&gt;
 Slicer-4.0.1-rc1-linux-amd64             2012-01-04    release     release candidate 1 of Slicer 4.0.1&lt;br /&gt;
 Slicer-4.0.1-rc1-2012-01-05-linux-amd64  2012-01-05  development   nightly build after the release candidate&lt;br /&gt;
 Slicer-4.0.1-rc2-linux-amd64             2012-01-11    release     release candidate 2 of Slicer 4.0.1&lt;br /&gt;
 Slicer-4.0.1-rc2-2012-01-12-linux-amd64  2012-01-12  development   nightly build after the release candidate&lt;br /&gt;
 Slicer-4.0.1-linux-amd64                 2012-01-14    release     release of Slicer 4.0.1&lt;br /&gt;
 Slicer-4.0.1-2012-01-20-linux-amd64      2012-01-20  development   nightly build after 4.0.1&lt;br /&gt;
 Slicer-4.0.1-1-linux-amd64               2012-01-28    release     tweak version 1 of Slicer 4.0.1&lt;br /&gt;
 Slicer-4.0.2-linux.amd64                 2012-06-05    release     release of Slicer 4.0.2&lt;br /&gt;
&lt;br /&gt;
= Extension package - Naming scheme =&lt;br /&gt;
&lt;br /&gt;
* Create &amp;lt;code&amp;gt;Extensions-XYZ-Nightly&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Extensions-XYZ-Continuous&amp;lt;/code&amp;gt; tracks on CDash&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.5/Developers/ReleaseProcess&amp;diff=62659</id>
		<title>Documentation/4.5/Developers/ReleaseProcess</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.5/Developers/ReleaseProcess&amp;diff=62659"/>
		<updated>2019-11-27T14:29:25Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;'/slicerWiki/'&amp;quot; to &amp;quot;'/wiki/'&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Create release dashboard scripts ==&lt;br /&gt;
&lt;br /&gt;
{{wip}}&lt;br /&gt;
&lt;br /&gt;
== Feature freeze ==&lt;br /&gt;
&lt;br /&gt;
Usually ~1 month before release.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&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;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Update modules documentation link in help section (loadable, scripted and cli)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** And some html links in Welcome module (Modules/Loadable/SlicerWelcome/Resources/HTML)&lt;br /&gt;
** &amp;lt;strike&amp;gt;Update CLI XML description files&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit message: &amp;lt;code&amp;gt;Update Documentation to X.Y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example: [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22407 r22407]&lt;br /&gt;
&lt;br /&gt;
Note: Some of this updates are not needed anymore. Indeed, following [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22423 r22423] and [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=22424 r22424] documentation url should already reference the &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; namespace.&lt;br /&gt;
&lt;br /&gt;
== Release-candidate ==&lt;br /&gt;
&lt;br /&gt;
Since there all development occurs on &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, each time version is updated, two commits will be required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;RC&amp;gt;&amp;lt;/code&amp;gt; corresponds to the release candidate number. It is greater or equal to one.&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;&amp;lt;p&amp;gt;Update the Slicer version information for the release candidate:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, uncomment and set:&amp;lt;/p&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;Slicer_VERSION_RC&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&amp;lt;RC&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;...and if this is the first release candidate, update at least one these variables: &amp;lt;code&amp;gt;Slicer_VERSION_MAJOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_MINOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_PATCH&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Slicer X.Y.Z-rc&amp;lt;RC&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Generate packages based on REVISION associated with step 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update the Slicer version information for the development:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, comment &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; so that the next builds will contain the date associated with the last commit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Begin post-X.Y.Z-rc&amp;lt;RC&amp;gt; development&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
&lt;br /&gt;
Since there all development occurs on &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, each time version is updated, two commits will be required.&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;&amp;lt;p&amp;gt;Update the Slicer version information for the release:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, uncomment and set &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;...and if this no release candidate has been made, update at least one these variables: &amp;lt;code&amp;gt;Slicer_VERSION_MAJOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_MINOR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Slicer_VERSION_PATCH&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Slicer X.Y.Z&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Generate packages based on REVISION associated with step 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Tag the repository:&amp;lt;/p&amp;gt;&lt;br /&gt;
 svn copy -r&amp;lt;REVISION&amp;gt; http://svn.slicer.org/Slicer4/trunk  \&lt;br /&gt;
      http://svn.slicer.org/Slicer4/tags/Slicer-X-Y  \&lt;br /&gt;
     -m &amp;quot;ENH: Tag of X.Y.Z release based on r&amp;lt;REVISION&amp;gt;.&amp;quot;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update the Slicer version information for the development:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;In &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;, comment and set:&amp;lt;/p&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Slicer_VERSION_TWEAK&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; so that the next builds will contain the date associated with the last commit.&lt;br /&gt;
* &amp;lt;code&amp;gt;Slicer_VERSION_RC&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Re-run CMake in order to update &amp;lt;code&amp;gt;Utilities/Scripts/SlicerWizard/__version__.py&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Commit the above changes using this message:&amp;lt;/p&amp;gt;&lt;br /&gt;
 ENH: Begin post-X.Y.Z development&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Post release ==&lt;br /&gt;
&lt;br /&gt;
=== Create a release branch ===&lt;br /&gt;
&lt;br /&gt;
 svn copy -r &amp;lt;REVISION&amp;gt; http://svn.slicer.org/Slicer4/trunk http://svn.slicer.org/Slicer4/branches/Slicer-X-Y \&lt;br /&gt;
  -m &amp;quot;ENH: Branching from trunk to Slicer-X-Y at &amp;lt;REVISION&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  svn checkout http://svn.slicer.org/Slicer4/branches/Slicer-X-Y&lt;br /&gt;
&lt;br /&gt;
=== Generate ChangeLog ===&lt;br /&gt;
&lt;br /&gt;
* See [https://raw.github.com/cryos/avogadro/master/scripts/gitlog2changelog.py gitlog2changelog.py]. More details [http://blog.cryos.net/archives/202-Git-and-Automatic-ChangeLog-Generation.html here].&lt;br /&gt;
&lt;br /&gt;
* Update [[Release Details]] page using generated ChangeLog&lt;br /&gt;
&lt;br /&gt;
=== Update Mantis ===&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Release&amp;quot; current target&lt;br /&gt;
* Create new target&lt;br /&gt;
* Check the &amp;quot;fixed in&amp;quot; fields&lt;br /&gt;
&lt;br /&gt;
=== Midas ===&lt;br /&gt;
&lt;br /&gt;
==== Tag release packages ====&lt;br /&gt;
&lt;br /&gt;
* If needed, create a X.Y.Z folder in [http://slicer.kitware.com/midas3/folder/274 Slicer/Packages/Application/Release]&lt;br /&gt;
** Copy uploaded packages into the folder created above&lt;br /&gt;
** Identify the item_id associated with uploaded packages. For example: 11926, 11925, 11927, 11992&lt;br /&gt;
** SSH connect to &amp;lt;code&amp;gt;jcfr@slicer.kitwarein.com&amp;lt;/code&amp;gt;&lt;br /&gt;
** Connect to mysql using &amp;lt;code&amp;gt;mysql -u midas -p&amp;lt;/code&amp;gt;&lt;br /&gt;
*** See file &amp;lt;code&amp;gt;/var/www/midas3/core/configs/database.local.ini&amp;lt;/code&amp;gt; for password&lt;br /&gt;
*** Choose midas database: &amp;lt;code&amp;gt;use midas&amp;lt;/code&amp;gt;&lt;br /&gt;
** List packages associated with identified items and check they are the appropriate ones:&lt;br /&gt;
*** &amp;lt;code&amp;gt;select *  from slicerpackages_package as p , item as i where i.item_id = p.item_id and p.item_id in (11926, 11925, 11927, 11992);&amp;lt;/code&amp;gt;&lt;br /&gt;
** Set release field&lt;br /&gt;
*** &amp;lt;code&amp;gt;update slicerpackages_package set `release`=&amp;quot;4.2.2-1&amp;quot; where item_id in (11926, 11925, 11927, 11992);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version NA-MIC data tree ====&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;&amp;lt;p&amp;gt;[[Documentation/{{documentation/version}}/Developers/Tutorials/ObtainExtensionServerApiKey|Create an account on the extension server and obtain an API Key]]. You will then use your midas login and api key to substitute &amp;lt;code&amp;gt;&amp;lt;YOUR-MIDAS-LOGIN&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;YOUR-MIDAS-APIKEY&amp;gt;&amp;lt;/code&amp;gt; in the examples.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;If not already done, go to [http://slicer.kitware.com/midas3/community/23 NA-MIC community] and click on &amp;lt;code&amp;gt;Join community&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Send an email on the developer list asking to be added to the &amp;lt;code&amp;gt;DataManager&amp;lt;/code&amp;gt; group on NA-MIC community. That will grant you read/write permissions to the &amp;lt;code&amp;gt;Data&amp;lt;/code&amp;gt; folder and sub-folders.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Install prerequisites&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ pip install pydas&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Identify &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; of the &amp;lt;code&amp;gt;Data&amp;lt;/code&amp;gt; folder. For example [http://slicer.kitware.com/midas3/folder/301 301]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Simulate creation of &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; data folders based &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; ones&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/Slicer/Base/Python/slicer/release&lt;br /&gt;
$ python midasdata.py --url=http://slicer.kitware.com/midas3 --data_id=301 \&lt;br /&gt;
  --email=&amp;lt;YOUR-MIDAS-LOGIN&amp;gt; --apikey=&amp;lt;YOUR-MIDAS-APIKEY&amp;gt; --source_version=Nightly --dest_version=X.Y --dry-run&lt;br /&gt;
Application ( folder_id: 302 )&lt;br /&gt;
'-Nightly ( folder_id: 831 )&lt;br /&gt;
'-'-Testing ( folder_id: 832 )&lt;br /&gt;
'-'-'-Baseline ( folder_id: 889 )&lt;br /&gt;
'-'-'-'-DiffusionTensorImagingTutorial.png ( item_id: 12067 )&lt;br /&gt;
'-'-'-'-NeurosurgicalPlanningTutorial.png ( item_id: 12066 )&lt;br /&gt;
'-'-'-'-SlicerTestingTest.png ( item_id: 17760 )&lt;br /&gt;
'-'-'-Input ( folder_id: 833 )&lt;br /&gt;
'-'-'-'-AtlasTests ( folder_id: 834 )&lt;br /&gt;
'-'-'-'-'-2012-10-26-BrainAtlas.mrb ( item_id: 10276 )&lt;br /&gt;
[...]&lt;br /&gt;
Module: VotingBinaryHoleFillingImageFilter ( folder_id: 1491 )&lt;br /&gt;
'-Nightly ( folder_id: 1491 )&lt;br /&gt;
'-'-Testing ( folder_id: 1492 )&lt;br /&gt;
'-'-'-Baseline ( folder_id: 1493 )&lt;br /&gt;
'-'-'-'-VotingBinaryHoleFillingImageFilterTest.nhdr ( item_id: 103418 )&lt;br /&gt;
'-'-'-'-VotingBinaryHoleFillingImageFilterTest.raw.gz ( item_id: 103419 )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Create &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; data tree based &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; ones&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python midasdata.py --url=http://slicer.kitware.com/midas3 --data_id=301 \&lt;br /&gt;
  --email=&amp;lt;YOUR-MIDAS-LOGIN&amp;gt; --apikey=&amp;lt;YOUR-MIDAS-APIKEY&amp;gt; --source_version=Nightly --dest_version=X.Y&lt;br /&gt;
&lt;br /&gt;
Versioning of the NA-MIC Data tree for release X.Y...&lt;br /&gt;
Versioning Modules...&lt;br /&gt;
[...]&lt;br /&gt;
Versioning Modules...[DONE]&lt;br /&gt;
Versioning Application...&lt;br /&gt;
Creating folder X.Y under Application directory&lt;br /&gt;
Duplicating subfolders from Nightly to X.Y...&lt;br /&gt;
Duplicating subfolders from Nightly to X.Y...[DONE]&lt;br /&gt;
Versioning Application...[DONE]&lt;br /&gt;
Versioning of the NA-MIC Data tree for release X.Y...[DONE]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update Slicer wiki ===&lt;br /&gt;
&lt;br /&gt;
The copy of the pages associated with the &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; namespace into the &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; namespace is done using the convenience python module [https://github.com/jcfr/mwdoc#readme mwdoc].&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;&amp;lt;p&amp;gt;Check with &amp;lt;email&amp;gt;jchris.fillionr@kitware.com&amp;lt;/email&amp;gt; to get the credential associated with &amp;lt;code&amp;gt;UpdateBot&amp;lt;/code&amp;gt; user.&amp;lt;/p&amp;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;Copy &amp;lt;code&amp;gt;Nightly&amp;lt;/code&amp;gt; pages into &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; pages.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd ~/Projects&lt;br /&gt;
&lt;br /&gt;
$ sudo pip install mwclient==0.6.5&lt;br /&gt;
&lt;br /&gt;
$ git clone git://github.com/jcfr/mwdoc&lt;br /&gt;
&lt;br /&gt;
$ cd mwdoc&lt;br /&gt;
&lt;br /&gt;
$ python&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import mwdoc&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc = mwdoc.Documentation('slicer.org', '/wiki/')&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc.login('UpdateBot', 'XXXXXXX')&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; doc.versionPages('Nightly', '4.3', ['Documentation', 'Template:Documentation'])&lt;br /&gt;
[INFO] Page successfully created: 'Documentation/4.3/Extensions/ErodeDilateLabel'&lt;br /&gt;
[...]&lt;br /&gt;
[INFO] Page successfully created: 'Template:Documentation/4.3/module-header'&lt;br /&gt;
[INFO] Page successfully created: 'Template:Documentation/4.3/module-section'&lt;br /&gt;
[INFO] Page successfully created: 'Template:Documentation/4.3/module/footer'&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/prevversion]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/nextversion]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/currentversion]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/versionlist]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Template:Documentation/acknowledgments-versionlist]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[FAQ]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/Release]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/Release/Announcements]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/UserTraining]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [[Documentation/UserOrientation]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&amp;lt;del&amp;gt;Update [[Documentation/DeveloperOrientation]]&amp;lt;/del&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CDash ===&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;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Create new CDash groups for extension submissions associated with &amp;lt;code&amp;gt;X.Y&amp;lt;/code&amp;gt; release:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Extensions-X.Y-Nightly&lt;br /&gt;
Extensions-X.Y-Continuous&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update external website ===&lt;br /&gt;
&lt;br /&gt;
* http://en.wikipedia.org/wiki/3DSlicer&lt;br /&gt;
* http://www.nitrc.org/projects/slicer/&lt;br /&gt;
&lt;br /&gt;
=== Tag associated projects ===&lt;br /&gt;
* Slicer/SlicerExecutionModel&lt;br /&gt;
* Slicer/VTK&lt;br /&gt;
* Slicer/ITK&lt;br /&gt;
* commontk/CTK ?&lt;br /&gt;
* commontk/PythonQt ?&lt;br /&gt;
&lt;br /&gt;
=== Update User Survey ===&lt;br /&gt;
&lt;br /&gt;
Title of the survey should be updated.&lt;br /&gt;
See https://docs.google.com/forms/d/1rggxoTV5KL_vt3gX9BNNAcKH4pnL5lkMqPnklOThINg&lt;br /&gt;
&lt;br /&gt;
=== Sign packages ===&lt;br /&gt;
&lt;br /&gt;
==== MacOSX ====&lt;br /&gt;
As discussed in issue [http://na-mic.org/Bug/view.php?id=3965 #3965], the code signing command is of the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
codesign --deep --force --sign &amp;quot;Developer ID Application: ...&amp;quot; ./Slicer.app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the argument to &amp;lt;code&amp;gt;--sign&amp;lt;/code&amp;gt; is the name of the developer's certificate in Mac OS X Keychain.app .&lt;br /&gt;
&lt;br /&gt;
=== Backport commit into release branch ===&lt;br /&gt;
&lt;br /&gt;
The following steps will lead to the creation of new git-svn clone having two branches:&lt;br /&gt;
* &amp;lt;code&amp;gt;git-svn&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git-svn-XY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reference: http://www.dmo.ca/blog/20070608113513/&lt;br /&gt;
&lt;br /&gt;
==== Step 1: Checkout sources ====&lt;br /&gt;
&lt;br /&gt;
 git clone git://github.com/Slicer/Slicer.git Slicer-X.Y&lt;br /&gt;
 cd Slicer-X.Y&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;
==== Step 2: Add release branch remote ====&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;code&amp;gt;.git/config&amp;lt;/code&amp;gt;, and in addition to the existing 'git-svn' remote, add the following one:&lt;br /&gt;
&lt;br /&gt;
 [svn-remote &amp;quot;svn-XY&amp;quot;]&lt;br /&gt;
    url = http://svn.slicer.org/Slicer4/branches/Slicer-X-Y&lt;br /&gt;
    fetch = :refs/remotes/git-svn-XY&lt;br /&gt;
&lt;br /&gt;
==== Step 3: Pull associated SVN branch ====&lt;br /&gt;
&lt;br /&gt;
 git svn fetch svn-XY&lt;br /&gt;
 git checkout -b master-XY git-svn-XY&lt;br /&gt;
&lt;br /&gt;
==== Step 4: Backport ====&lt;br /&gt;
&lt;br /&gt;
We can now cherry pick commit associated with master (trunk) into &amp;lt;code&amp;gt;master-XY&amp;lt;/code&amp;gt; (Slicer-X-Y)&lt;br /&gt;
&lt;br /&gt;
==== Step 5: Create a patch release ====&lt;br /&gt;
&lt;br /&gt;
{{wip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Slicer trunk: Update Major/Minor/Patch version to match latest release&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/Sandbox&amp;diff=62658</id>
		<title>Documentation/4.1/Developers/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.1/Developers/Sandbox&amp;diff=62658"/>
		<updated>2019-11-27T14:04:23Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;{{#evp&amp;quot; to &amp;quot;{{#ev&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;
= Graphviz test =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graphviz border='frame' format='png'&amp;gt;&lt;br /&gt;
 digraph example1 {Hello-&amp;gt;World!}&lt;br /&gt;
&amp;lt;/graphviz&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Embedded video =&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|0iQCLlu1dko|320|right|Embedded Video test}}&lt;br /&gt;
&lt;br /&gt;
= Test modulo function associated with CURRENTTIMESTAMP =&lt;br /&gt;
&lt;br /&gt;
{{#expr: {{CURRENTTIMESTAMP}} mod 40}}&lt;br /&gt;
&lt;br /&gt;
= Random image =&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/Developers/random-image}}&lt;br /&gt;
&lt;br /&gt;
= Use of get_web_data and for_external_table =&lt;br /&gt;
&lt;br /&gt;
The raw set of data retrieved using this [http://wiki.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data URL] is reported below:&lt;br /&gt;
&lt;br /&gt;
{{ambox&lt;br /&gt;
| type      = content&lt;br /&gt;
| text      = There are two extra empty lines !&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Name,Color,Shape&lt;br /&gt;
Apple,Red,Round&lt;br /&gt;
Banana,Yellow,Oblong&lt;br /&gt;
Orange,Orange,Round&lt;br /&gt;
Pear,Yellow,&amp;quot;Pear-shaped&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ambox&lt;br /&gt;
| type      = speedy&lt;br /&gt;
| text      = The following table should contains Fruits&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:url=http://wiki.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data|format=CSV with header|data=name=Name,color=Color,shape=Shape}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Color {{#for_external_table:&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} [[{{{name}}}]]&lt;br /&gt;
{{!}} {{{color}}} }}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Use of get_web_data and external_value =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using filter as template parameter ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=http://wiki.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data&lt;br /&gt;
|format=CSV with header&lt;br /&gt;
|data=bananashape0=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape0}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=http://wiki.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data&lt;br /&gt;
|format=CSV with header&lt;br /&gt;
|data=bananashape0=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using filter as URL parameter ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=http://wiki.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data,Name=Banana&lt;br /&gt;
|format=CSV with header&lt;br /&gt;
|data=bananashape1=Shape&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape1}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url=http://wiki.slicer.org/wiki/Special:GetData/Documentation/4.0/Developers/Sandbox_data,Name=Banana&lt;br /&gt;
|format=CSV with header&lt;br /&gt;
|data=bananashape1=Shape&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using fullurl ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url={{fullurl:Special:GetData/Documentation/4.0/Developers/Sandbox_data}}&lt;br /&gt;
|format=CSV with header&lt;br /&gt;
|data=bananashape2=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape2}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{fullurl:Special:GetData/Documentation/4.0/Developers/Sandbox_data,Name=Banana}}&lt;br /&gt;
&lt;br /&gt;
{{#get_web_data:&lt;br /&gt;
url={{fullurl:Special:GetData/Documentation/4.0/Developers/Sandbox_data}}&lt;br /&gt;
|format=CSV with header&lt;br /&gt;
|data=bananashape2=Shape&lt;br /&gt;
|filters=Name=Banana&lt;br /&gt;
}}&lt;br /&gt;
* {{#external_value:bananashape2}}&lt;br /&gt;
&lt;br /&gt;
= Debug module-footer template =&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules|DicomToNrrdConverter]]&lt;br /&gt;
{{#if: {{documentation/{{documentation/version}}/module-category}} | &amp;lt;!-- The following category will be 'MainCategory' assuming category parameter was 'MainCategory.SubCategory'--&amp;gt;&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/{{Strloc_prefix|{{documentation/{{documentation/version}}/module-category}}|strloc= {{strfind_short|{{documentation/{{documentation/version}}/module-category}}|.|1|lenstr={{strlen_quick|{{documentation/{{documentation/version}}/module-category}}}}|}}-1}}|DicomToNrrdConverter]]&lt;br /&gt;
[[Category:Documentation/{{documentation/version}}/Modules/{{documentation/{{documentation/version}}/module-category}}|DicomToNrrdConverter]]&lt;br /&gt;
| }}&lt;/div&gt;</summary>
		<author><name>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Modules/TractographyLabelMapSeeding&amp;diff=62657</id>
		<title>Documentation/4.8/Modules/TractographyLabelMapSeeding</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Modules/TractographyLabelMapSeeding&amp;diff=62657"/>
		<updated>2019-11-27T14:02:31Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;\bhttps:\/\/www\.slicer\.org\/slicerWiki\/index\.php\/([^ ]+)\b
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1 &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;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-acknowledgements}}&lt;br /&gt;
Contact:  &amp;lt;email&amp;gt;slicer-users@bwh.harvard.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: http://slicerdmri.github.io/&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;
|Image:SlicerDMRIScreenshot.jpg|SlicerDMRI&lt;br /&gt;
|Image:Logo-splnew.jpg|Surgical Planning Laboratory&lt;br /&gt;
|Image:NAC-logo.png|NAC&lt;br /&gt;
|Image:Seeding map.png|Seeding label map&lt;br /&gt;
|Image:Seeding_tracts.png|Output tractography&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;
{{documentation/{{documentation/version}}/module-description}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
Most frequently used for these scenarios:&lt;br /&gt;
&lt;br /&gt;
* Use Case 1: Using a label map, trace all the fibers emanating from it.&lt;br /&gt;
* Use Case 2: Using a brain mask, perform a full brain tractography.&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
Links to tutorials that use this module&lt;br /&gt;
* Slicer4 Diffusion Tensor Imaging Tutorial: https://www.slicer.org/wiki/Documentation/Nightly/Training#Slicer4_Diffusion_Tensor_Imaging_Tutorial &lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&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;
* TractographyInteractiveSeeding: https://www.slicer.org/wiki/Documentation/Nightly/Modules/TractographyInteractiveSeeding &lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
*  http://slicerdmri.github.io/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
* https://github.com/SlicerDMRI&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>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.6/Modules/TractographyInteractiveSeeding&amp;diff=62655</id>
		<title>Documentation/4.6/Modules/TractographyInteractiveSeeding</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.6/Modules/TractographyInteractiveSeeding&amp;diff=62655"/>
		<updated>2019-11-27T14:02:02Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;\bhttps:\/\/www\.slicer\.org\/slicerWiki\/index\.php\/([^ ]+)\b
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1 &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;
&lt;br /&gt;
&lt;br /&gt;
Title: Tractography Interactive Seeding&lt;br /&gt;
&lt;br /&gt;
Author(s)/Contributor(s): Alex Yarmarkovich, Steve Pieper, Demian Wassermann, Isaiah Norton (SPL, LMI, BWH, SlicerDMRI)&lt;br /&gt;
&lt;br /&gt;
License: 3D Slicer Contribution and Software License Agreement&lt;br /&gt;
&lt;br /&gt;
Acknowledgements: The SlicerDMRI developers gratefully acknowledge funding for this project provided by NIH NCI ITCR U01CA199459 (Open Source Diffusion MRI Technology For Brain Cancer Research), NIH P41EB015898 (National Center for Image-Guided Therapy) and NIH P41EB015902 (Neuroimaging Analysis Center), as well as 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.&lt;br /&gt;
&lt;br /&gt;
Contact:  slicer-users@bwh.harvard.edu&lt;br /&gt;
&lt;br /&gt;
Website: http://slicerdmri.github.io/&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;
|Image:SlicerDMRIScreenshot.jpg|SlicerDMRI&lt;br /&gt;
|Image:Logo-splnew.jpg|Surgical Planning Laboratory&lt;br /&gt;
|Image:NAC-logo.png|NAC&lt;br /&gt;
|Image:Fiducials seeding 1.png| Tractography Fiducial Seeding&lt;br /&gt;
|Image:Fiducials seeding 2.png| Tractography Fiducial Seeding&lt;br /&gt;
}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&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 for interactive seeding of DTI fiber tracts starting from a list of fiducial points or vertices of a model, or a label map volume.&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;
Most frequently used for these scenarios:&lt;br /&gt;
&lt;br /&gt;
* Use Case 1: Create DTI fiber tracts starting from a list of fiducial points. Tracks created from a small number of fiducial points are are highly interactive and can be used in exploration mode while moving fiducials with the help of transformations. This mode can be useful in pre-op planning or for tracking tools during the surgery.&lt;br /&gt;
* Use Case 2: Create DTI fiber tracts starting from vertices of a model. This mode can be useful for exploring tracts around a tumor model.&lt;br /&gt;
* Use Case 2: Create DTI fiber tracts starting from a label map volume. Tracks created from a label map ROI can be used in interactive mode while modifying the label map using Editor module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
Links to tutorials that use this module:&lt;br /&gt;
* Slicer4 Diffusion Tensor Imaging Tutorial: https://www.slicer.org/wiki/Documentation/Nightly/Training#Slicer4_Diffusion_Tensor_Imaging_Tutorial * Slicer4 Neurosurgical Planning Tutorial: https://www.slicer.org/wiki/Documentation/4.5/Training#Slicer4_Neurosurgical_Planning_Tutorial &amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* Parameters panel:&lt;br /&gt;
** Parameters: select an existing setting for the module or create a new one.&lt;br /&gt;
** Presets: select an Slicer4 or Slicer3 parameters setting for the module.&lt;br /&gt;
* IO panel:&lt;br /&gt;
** Input DTI volume: select an existing tensor volume.&lt;br /&gt;
** Input FiducialList, Model, or Label Map: select an existing fiducial list, or a model, or a label map volume to be used as seeds for tracking.&lt;br /&gt;
** Output FiberBundle: Select the bundle that you want to create or modify from a list.&lt;br /&gt;
** Enable Seeding Tracts: A toggle to enable/disable seeding. Disable if you want to change multiple parameters without re-running module at each step.&lt;br /&gt;
* Seed Placement Option panel:&lt;br /&gt;
** Fiducial Region Size: The size of the box around each fiducial used for seeding (mm).&lt;br /&gt;
** Fiducial Seeding Step Size: Step between the seeding samples in the box (mm).&lt;br /&gt;
** Seed Selected Fiducials: Flag indicating whether to use only selected fiducials for seeding or all of them.&lt;br /&gt;
** Maximum Number of Seeds: Used with models to specify the limit of the number of vertices to be used for seeding.&lt;br /&gt;
* Tractography Seeding Parameters panel:&lt;br /&gt;
** Minimum Path Length: Select only tracts that are longer than this value (mm).&lt;br /&gt;
** Maximum Path Length: Select only tracts that are shorter than this value (mm).&lt;br /&gt;
** Stopping Criteria: Select Linear Measure or FA to be used as stopping criteria.&lt;br /&gt;
** Stopping Value: Select Linear Measure or FA stopping value, tracking will stop when the value drops below this one.&lt;br /&gt;
** Stopping Track Curvature: Select the curvature stopping value in degree per mm, tracking will stop when the radius of curvature is smaller than this one.&lt;br /&gt;
&lt;br /&gt;
* Enabling Options panel:&lt;br /&gt;
** Create Tracts Initially As: Select Tubes or Lines&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
* Tractography Label Map Seeding&lt;br /&gt;
* UKF Tractography&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
* Interactive Diffusion Tensor Tractography Visualization for Neurosurgical Planning: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3112275/&lt;br /&gt;
*  http://slicerdmri.github.io/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
* https://github.com/SlicerDMRI&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>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.6/Modules/TractographyLabelMapSeeding&amp;diff=62656</id>
		<title>Documentation/4.6/Modules/TractographyLabelMapSeeding</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.6/Modules/TractographyLabelMapSeeding&amp;diff=62656"/>
		<updated>2019-11-27T14:02:02Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;\bhttps:\/\/www\.slicer\.org\/slicerWiki\/index\.php\/([^ ]+)\b
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1 &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;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-acknowledgements}}&lt;br /&gt;
Contact:  &amp;lt;email&amp;gt;slicer-users@bwh.harvard.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: http://slicerdmri.github.io/&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;
|Image:SlicerDMRIScreenshot.jpg|SlicerDMRI&lt;br /&gt;
|Image:Logo-splnew.jpg|Surgical Planning Laboratory&lt;br /&gt;
|Image:NAC-logo.png|NAC&lt;br /&gt;
|Image:Seeding map.png|Seeding label map&lt;br /&gt;
|Image:Seeding_tracts.png|Output tractography&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;
{{documentation/{{documentation/version}}/module-description}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
Most frequently used for these scenarios:&lt;br /&gt;
&lt;br /&gt;
* Use Case 1: Using a label map, trace all the fibers emanating from it.&lt;br /&gt;
* Use Case 2: Using a brain mask, perform a full brain tractography.&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
Links to tutorials that use this module&lt;br /&gt;
* Slicer4 Diffusion Tensor Imaging Tutorial: https://www.slicer.org/wiki/Documentation/Nightly/Training#Slicer4_Diffusion_Tensor_Imaging_Tutorial &lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&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;
* TractographyInteractiveSeeding: https://www.slicer.org/wiki/Documentation/Nightly/Modules/TractographyInteractiveSeeding &lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
*  http://slicerdmri.github.io/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
* https://github.com/SlicerDMRI&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>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Modules/TractographyDICOMSave&amp;diff=62654</id>
		<title>Documentation/4.8/Modules/TractographyDICOMSave</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Modules/TractographyDICOMSave&amp;diff=62654"/>
		<updated>2019-11-27T14:01:37Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;\bhttps:\/\/www\.slicer\.org\/slicerWiki\/index\.php\/([^ ]+)\b
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1 &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;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-acknowledgements}}&lt;br /&gt;
Contact:  &amp;lt;email&amp;gt;slicer-users@bwh.harvard.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: http://slicerdmri.github.io/&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;
|Image:SlicerDMRIScreenshot.jpg|SlicerDMRI&lt;br /&gt;
|Image:Logo-splnew.jpg|Surgical Planning Laboratory&lt;br /&gt;
|Image:NAC-logo.png|NAC&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;
{{documentation/{{documentation/version}}/module-description}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
Most frequently used for these scenarios:&lt;br /&gt;
&lt;br /&gt;
* Use Case 1: Save DICOM format tractography files in 3D Slicer.&lt;br /&gt;
* Use Case 2: Convert vtk format tractography files to DICOM format on the command line.&lt;br /&gt;
&lt;br /&gt;
Both use cases require a reference diffusion-weighted MRI DICOM scan. The reference scan must be the DICOM data from which the tractography was created.&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
Links to tutorials that use this module&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;
{{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;
* TractographyDICOMLoad: https://www.slicer.org/wiki/Documentation/Nightly/Modules/TractographyDICOMLoad &lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
*  http://slicerdmri.github.io/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
* https://github.com/SlicerDMRI&lt;br /&gt;
* The CLI module is called: VTK_to_DICOMTract&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>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/TractographyInteractiveSeeding&amp;diff=62652</id>
		<title>Documentation/Nightly/Modules/TractographyInteractiveSeeding</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Modules/TractographyInteractiveSeeding&amp;diff=62652"/>
		<updated>2019-11-27T14:01:12Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;\bhttps:\/\/www\.slicer\.org\/slicerWiki\/index\.php\/([^ ]+)\b
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1 &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;
&lt;br /&gt;
&lt;br /&gt;
Title: Tractography Interactive Seeding&lt;br /&gt;
&lt;br /&gt;
Author(s)/Contributor(s): Alex Yarmarkovich, Steve Pieper, Demian Wassermann, Isaiah Norton (SPL, LMI, BWH, SlicerDMRI)&lt;br /&gt;
&lt;br /&gt;
License: 3D Slicer Contribution and Software License Agreement&lt;br /&gt;
&lt;br /&gt;
Acknowledgements: The SlicerDMRI developers gratefully acknowledge funding for this project provided by NIH NCI ITCR U01CA199459 (Open Source Diffusion MRI Technology For Brain Cancer Research), NIH P41EB015898 (National Center for Image-Guided Therapy) and NIH P41EB015902 (Neuroimaging Analysis Center), as well as 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.&lt;br /&gt;
&lt;br /&gt;
Contact:  slicer-users@bwh.harvard.edu&lt;br /&gt;
&lt;br /&gt;
Website: http://slicerdmri.github.io/&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;
|Image:SlicerDMRIScreenshot.jpg|SlicerDMRI&lt;br /&gt;
|Image:Logo-splnew.jpg|Surgical Planning Laboratory&lt;br /&gt;
|Image:NAC-logo.png|NAC&lt;br /&gt;
|Image:Fiducials seeding 1.png| Tractography Fiducial Seeding&lt;br /&gt;
|Image:Fiducials seeding 2.png| Tractography Fiducial Seeding&lt;br /&gt;
}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&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 for interactive seeding of DTI fiber tracts starting from a list of fiducial points or vertices of a model, or a label map volume.&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;
Most frequently used for these scenarios:&lt;br /&gt;
&lt;br /&gt;
* Use Case 1: Create DTI fiber tracts starting from a list of fiducial points. Tracks created from a small number of fiducial points are are highly interactive and can be used in exploration mode while moving fiducials with the help of transformations. This mode can be useful in pre-op planning or for tracking tools during the surgery.&lt;br /&gt;
* Use Case 2: Create DTI fiber tracts starting from vertices of a model. This mode can be useful for exploring tracts around a tumor model.&lt;br /&gt;
* Use Case 2: Create DTI fiber tracts starting from a label map volume. Tracks created from a label map ROI can be used in interactive mode while modifying the label map using Editor module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
Links to tutorials that use this module:&lt;br /&gt;
* Slicer4 Diffusion Tensor Imaging Tutorial: https://www.slicer.org/wiki/Documentation/Nightly/Training#Slicer4_Diffusion_Tensor_Imaging_Tutorial * Slicer4 Neurosurgical Planning Tutorial: https://www.slicer.org/wiki/Documentation/4.5/Training#Slicer4_Neurosurgical_Planning_Tutorial &amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Panels and their use}}&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* Parameters panel:&lt;br /&gt;
** Parameters: select an existing setting for the module or create a new one.&lt;br /&gt;
** Presets: select an Slicer4 or Slicer3 parameters setting for the module.&lt;br /&gt;
* IO panel:&lt;br /&gt;
** Input DTI volume: select an existing tensor volume.&lt;br /&gt;
** Input FiducialList, Model, or Label Map: select an existing fiducial list, or a model, or a label map volume to be used as seeds for tracking.&lt;br /&gt;
** Output FiberBundle: Select the bundle that you want to create or modify from a list.&lt;br /&gt;
** Enable Seeding Tracts: A toggle to enable/disable seeding. Disable if you want to change multiple parameters without re-running module at each step.&lt;br /&gt;
* Seed Placement Option panel:&lt;br /&gt;
** Fiducial Region Size: The size of the box around each fiducial used for seeding (mm).&lt;br /&gt;
** Fiducial Seeding Step Size: Step between the seeding samples in the box (mm).&lt;br /&gt;
** Seed Selected Fiducials: Flag indicating whether to use only selected fiducials for seeding or all of them.&lt;br /&gt;
** Maximum Number of Seeds: Used with models to specify the limit of the number of vertices to be used for seeding.&lt;br /&gt;
* Tractography Seeding Parameters panel:&lt;br /&gt;
** Minimum Path Length: Select only tracts that are longer than this value (mm).&lt;br /&gt;
** Maximum Path Length: Select only tracts that are shorter than this value (mm).&lt;br /&gt;
** Stopping Criteria: Select Linear Measure or FA to be used as stopping criteria.&lt;br /&gt;
** Stopping Value: Select Linear Measure or FA stopping value, tracking will stop when the value drops below this one.&lt;br /&gt;
** Stopping Track Curvature: Select the curvature stopping value in degree per mm, tracking will stop when the radius of curvature is smaller than this one.&lt;br /&gt;
&lt;br /&gt;
* Enabling Options panel:&lt;br /&gt;
** Create Tracts Initially As: Select Tubes or Lines&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Similar Modules}}&lt;br /&gt;
* Tractography Label Map Seeding&lt;br /&gt;
* UKF Tractography&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
* Interactive Diffusion Tensor Tractography Visualization for Neurosurgical Planning: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3112275/&lt;br /&gt;
*  http://slicerdmri.github.io/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
* https://github.com/SlicerDMRI&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>Grundlett</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/4.8/Modules/FiberTractMeasurements&amp;diff=62653</id>
		<title>Documentation/4.8/Modules/FiberTractMeasurements</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/4.8/Modules/FiberTractMeasurements&amp;diff=62653"/>
		<updated>2019-11-27T14:01:12Z</updated>

		<summary type="html">&lt;p&gt;Grundlett: Text replacement - &amp;quot;\bhttps:\/\/www\.slicer\.org\/slicerWiki\/index\.php\/([^ ]+)\b
&amp;quot; to &amp;quot;https://www.slicer.org/wiki/$1 &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;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-acknowledgements}}&lt;br /&gt;
Contact:  &amp;lt;email&amp;gt;slicer-users@bwh.harvard.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: http://slicerdmri.github.io/&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;
|Image:SlicerDMRIScreenshot.jpg|SlicerDMRI&lt;br /&gt;
|Image:Logo-splnew.jpg|Surgical Planning Laboratory&lt;br /&gt;
|Image:NAC-logo.png|NAC&lt;br /&gt;
|Image:Multple tracts.png|Multiple tracts from Corpus callosum (CC)&lt;br /&gt;
|Image:Csv measurements.png|Tensor measurements of the CC tracts&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;
{{documentation/{{documentation/version}}/module-description}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Use Cases}}&lt;br /&gt;
Most frequently used for these scenarios:&lt;br /&gt;
&lt;br /&gt;
* Use Case 1: Compute measurements from all tractography files in a directory (from command-line interface or Slicer).&lt;br /&gt;
* Use Case 2: Compute measurements using a fiber tract hierarchy to select and combine tractography files in a directory (for example to define corpus callosum subregions). Use this from command-line interface (CLI) only.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Tutorials}}&lt;br /&gt;
Links to tutorials that use this module&lt;br /&gt;
* Slicer4 Fiber Bundle Selection and Scalar Measurements Tutorial: https://www.slicer.org/wiki/Documentation/4.5/Training#Fiber_Bundle_Selection_and_Scalar_Measurements * Tractography selection and measurements in command line interface (CLI) mode: http://slicerdmri.github.io/docs/tutorials/CLITutorial.pdf&lt;br /&gt;
* Usage from CLI with whitematteranalysis: https://github.com/SlicerDMRI/whitematteranalysis/wiki/Visualization-and-Analysis-of-Clustered-Tracts&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;
{{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;
* DWIToDTIEstimation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|References}}&lt;br /&gt;
*  http://slicerdmri.github.io/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Information for Developers}}&lt;br /&gt;
* https://github.com/SlicerDMRI&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>Grundlett</name></author>
		
	</entry>
</feed>