<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.commontk.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hans+Meine</id>
	<title>Commontk - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.commontk.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hans+Meine"/>
	<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Special:Contributions/Hans_Meine"/>
	<updated>2026-04-13T02:11:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/CLI_In_Context&amp;diff=2292</id>
		<title>Documentation/CLI In Context</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/CLI_In_Context&amp;diff=2292"/>
		<updated>2015-02-15T06:36:29Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: mention MeVisLab integration in NA-MIC summer project week 2013&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some example and notes on different integration of CLI modules in different frameworks including CTK (see [[Documentation/Command_Line_Interface]] for a general overview of CLI modules). The first interoperability testing was done during the [http://www.creatis.insa-lyon.fr/Interoperability_workshop third] VPH NoE Imaging workshop hold in Lyon, France on October 22-23, 2012. It will be continued in consecutive hackfests. The aim is to try to plug in CLI modules in CLI compatible frameworks and come up with possible improvement of the CLI standard, advice to CLI module and CLI framework developers.&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
&lt;br /&gt;
* [[CTK-Hackfest-Nov-2011|CTK Hackfest]] in Sophia Antipolis, France in November 2011&lt;br /&gt;
** Preliminary work to integrate CLI into GIMIAS&lt;br /&gt;
* [[CTK-Hackfest-Jul-2012|CTK Hackfest]] in Boston, USA in July 2012&lt;br /&gt;
** Preliminary work to integrate CLI into MITK&lt;br /&gt;
* [http://www.creatis.insa-lyon.fr/Interoperability_workshop 3rd VPH NoE Imaging workshop] in Lyon, France on October 22-23, 2012&lt;br /&gt;
** [[#First_Interoperability_tests|First Interoperability tests]] with CTK, GIMIAS, NiftyView and Slicer&lt;br /&gt;
* [[CTK-Hackfest-Dec-2012|CTK Hackfest]] in Bologna, Italy on December, 2012&lt;br /&gt;
** Preliminary work to integrate CLI into medInria, MAF3&lt;br /&gt;
** Semi-Automatic framework CLI integration tests&lt;br /&gt;
* [http://www.na-mic.org/Wiki/index.php/2013_Summer_Project_Week NA-MIC summer project week]&lt;br /&gt;
** [http://www.na-mic.org/Wiki/index.php/2013_Summer_Project_Week:CLI_modules_in_MeVisLab Integration of CLI modules into MeVisLab]&lt;br /&gt;
* [[CTK-Hackfest-Nov-2013|CTK Hackfest]] in London, UK on November, 2013&lt;br /&gt;
** [[#Second_Interoperability_tests|Second Interoperability tests]]: GIMIAS&#039;s Command Line Plugins in CTK&#039;s Command Line Module Explorer, CTK&#039;s Command Line Modules in Taverna Workbench&lt;br /&gt;
&lt;br /&gt;
== First Interoperability tests ==&lt;br /&gt;
&lt;br /&gt;
These first tests mainly concern the integration of niftyreg (registration algorithms from UCL). The different stages of integration are: load, execute and results. Meaning that the CLI module can be loaded. executed and provides the same results as if it was run only from the command line. The problems we encountered were:&lt;br /&gt;
&lt;br /&gt;
* GIMIAS does not support to have a `default` element different that `None` for the output, not sure about the `advanced` option for the `parameters` element &lt;br /&gt;
* niftyreg was using `fileExtensions` with stars (`*.nii`) which is not supported by neither GIMIAS nor Slicer (the star is directly used in the file name)&lt;br /&gt;
* The default output folder should be set to the user folder and not the running one, otherwise the CLI module can crash because they were denied access to write in that folder (for example `Program Files` under Windows)&lt;br /&gt;
* What to do with CLI modules that have dependencies on shared libraries with the platform but of different versions? Platforms should have the option to only use the libraries shipped with the CLI module&lt;br /&gt;
* Platforms should align the way they treat data since if two load data differently, the same CLI module could give different results&lt;br /&gt;
&lt;br /&gt;
It would be interesting to create test CLI modules for these integration tests. For example one that exposes all possible types of options, one running a simple algorithm without any dependencies (as niftyreg) and one with dependencies.&lt;br /&gt;
&lt;br /&gt;
Some thoughts on the tested platforms:&lt;br /&gt;
* Niftyview has nice controls on the way CLI modules are found and loaded (control on the `XML` validation)&lt;br /&gt;
* Slicer has a nice display of the loaded and non loaded CLI modules (appear in red, there could be more explanation why the loading failed)&lt;br /&gt;
&lt;br /&gt;
Test datasets:&lt;br /&gt;
&lt;br /&gt;
The test datasets [https://drive.google.com/file/d/0B3kBRNGHGeP0bGFjZlZNcHJLNEU/edit?usp=sharing source_2down.nii] and [https://drive.google.com/file/d/0B3kBRNGHGeP0N2gzZTVYV2JTX28/edit?usp=sharing target_2down.nii] were obtained from [http://brainweb.bic.mni.mcgill.ca/brainweb BrainWeb] and [http://adni.loni.usc.edu/ ADNI].&lt;br /&gt;
&lt;br /&gt;
Here are the snapshots of niftyreg on the different platforms (collected over many events):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;niftyreg on the different platforms&amp;quot; widths=&amp;quot;400px&amp;quot; heights=&amp;quot;300px&amp;quot; perrow=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
Image:Niftyreg-ctk.png|CTK command line module explorer &lt;br /&gt;
Image:Niftyreg-slicer.png|3D Slicer&lt;br /&gt;
Image:Niftyreg-niftyview.png|NiftyView (based on MITK Workbench)&lt;br /&gt;
Image:Niftyreg-gimias.png|GIMIAS&lt;br /&gt;
Image:medinria-cli-niftyreg.png|MedInria &lt;br /&gt;
Image:Niftyreg-MeVisLab.png|MeVisLab (see [https://www.youtube.com/watch?v=FSCrmiWEcbA screencast])&lt;br /&gt;
Image:Niftyreg-MITK-Workbench.png|MITK Workbench&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Second Interoperability tests ==&lt;br /&gt;
&lt;br /&gt;
* GIMIAS&#039;s Command Line Plugins in CTK&#039;s Command Line Module Explorer&lt;br /&gt;
&lt;br /&gt;
This interoperability test was done under Windows 8. Similar steps can be performed in other platforms.&lt;br /&gt;
&lt;br /&gt;
Typically, GIMIAS&#039;s Command Line Plugins (CLPs) are located in folder &#039;&#039;&#039;&amp;lt;GIMIAS_install_dir&amp;gt;\commandLinePlugins&#039;&#039;&#039;. However, the DLL dependencies of these CLPs are located in &#039;&#039;&#039;&amp;lt;GIMIAS_install_dir&amp;gt;&#039;&#039;&#039;. This is a problem when attempting to use GIMIAS&#039;s CLPs in CTK&#039;s Command Line Module Explorer (CLME), as the CLME will fail to load the CLPs. &lt;br /&gt;
&lt;br /&gt;
This can be easily solved by copying GIMIAS&#039;s CLPs in a different folder, let&#039;s say &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039;, along with its DLL dependencies (for finding out the DLL dependencies of a CLP, a program such as [http://dependencywalker.com/ Dependency Walker] can be used).&lt;br /&gt;
&lt;br /&gt;
After creating &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and copying the necessary files in it. Start CTK&#039;s CLME, go to menu &amp;quot;Module&amp;quot; and choose &amp;quot;Options&amp;quot;. In &amp;quot;Module Settings&amp;quot; go to &amp;quot;Search Paths&amp;quot;, and then add &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; to the search paths. Press &amp;quot;OK&amp;quot; and the CLME will scan &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and load the CLPs. &lt;br /&gt;
&lt;br /&gt;
If the loading process fails, you are probably missing a DLL dependency, close the CLME and go to the cache folder (&#039;&#039;&#039;&amp;lt;user_directory&amp;gt;\AppData\Local\CommonTK\CommandLineModuleExplorer\cache&#039;&#039;&#039; on MS Windows). Clear the content of that directory, add the additional DLL to &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and then start the CLME again.&lt;br /&gt;
&lt;br /&gt;
If a CLP shows up in the list with a warning sign, place the mouse on top of the CLP&#039;s name and look at the warning message. Most likely the XML that defines the CLP has a compatibility problem with the CLME, which means that is does not adhere to the [http://www.commontk.org/docs/html/ctkCmdLineModule.xsd CTK XML Schema]. See the definition of the Schema, correct the XML of the CLP, clear CLME&#039;s cache folder as described in the previous paragraph, and start the CLME again.&lt;br /&gt;
&lt;br /&gt;
After following these steps, you will be able to see and use your CLP in the CLME. &#039;&#039;&#039;This means that you can share your GIMIAS&#039;s CLP with any CTK user at any time, by just sharing your CLPs executable file and its DLL dependencies&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following image shows GIMIAS&#039;s CLPs loaded in CTK&#039;s CLME. The &amp;quot;Create a DICOM Series&amp;quot; CLP is selected. The &amp;quot;Settings&amp;quot; dialog is also shown, indicating how to add the CLPs directory to the CLME&#039;s search paths. Notice that some CLPs are shown with a warning sign, so their XML definitions has to be corrected.&lt;br /&gt;
&lt;br /&gt;
[[File:GIMIAS_CLPs_on_CTK_CLME.png|400px]]&lt;br /&gt;
&lt;br /&gt;
* CTK&#039;s Command Line Modules in Taverna Workbench&lt;br /&gt;
&lt;br /&gt;
[http://www.taverna.org.uk/download/workbench/ Taverna Workbench] is an open source Workflow Management System written in Java. GIMIAS&#039;s Command Line Plugins (CLPs) can be used in Taverna Workbench for creating medical imaging workflows composed of several filters. In order to be able to do this, the &#039;&#039;&#039;Center Computational Imaging and Simulation Technologies in Biomedicine (CISTIB)&#039;&#039;&#039; at the [http://www.shef.ac.uk/ University of Sheffield] has created a Taverna Workbench plugin for GIMIAS.&lt;br /&gt;
&lt;br /&gt;
General instructions on how to install GIMIAS Command-Line Taverna Plugin can be found [https://drive.google.com/file/d/0B3kBRNGHGeP0dE53THFMYjdsdDQ/edit?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
In this interoperability test, a CTK Command Line Module was created and tested with GIMIAS Command-Line Taverna Plugin. The sample plugin is called &#039;&#039;&#039;CopyPlugin&#039;&#039;&#039;. It is a simple code to open a VTK ASCII file containing a PolyData, and save the contents of the file on another VTK file. The plugin code can be accessed [https://drive.google.com/file/d/0B3kBRNGHGeP0bVZVWHZkS1NydnM/edit?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
The result was successful, which means that &#039;&#039;&#039;GIMIAS&#039;s CLPs and CTK&#039;s Command Line Modules can be combined to create processing workflows in Taverna Workbench !!&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The following image shows the CopyPlugin running on CTK&#039;s Command Line Module Explorer.&lt;br /&gt;
&lt;br /&gt;
[[File:COPYPLUGIN_CTK_CLME.png‎|400px]]&lt;br /&gt;
&lt;br /&gt;
The CopyPlugin Command Line Module Explorer can also be imported into GIMIAS, see the following image&lt;br /&gt;
&lt;br /&gt;
[[File:COPYPLUGIN_CTK_GIMIAS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The following image shows a simple workflow that includes the CopyPlugin, after being imported using GIMIAS Command-Line Taverna Plugin.&lt;br /&gt;
&lt;br /&gt;
[[File:CTL_CLM_TAVERNA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
GIMIAS&#039;s CLPs and CTK&#039;s Command Line Modules can be combined into the same Taverna workflow. See the following image where a Marching Cubes GIMIAS&#039;s CLP is used along with the CopyPlugin, a CTK Command Line Module.&lt;br /&gt;
&lt;br /&gt;
[[File:GIMIAS_CTK_WORKFLOW.png|400px]]&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/CLI_In_Context&amp;diff=2287</id>
		<title>Documentation/CLI In Context</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/CLI_In_Context&amp;diff=2287"/>
		<updated>2015-02-03T12:27:08Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: add link to screencast for CLI modules in MeVisLab&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some example and notes on different integration of CLI modules in different frameworks including CTK (see [[Documentation/Command_Line_Interface]] for a general overview of CLI modules). The first interoperability testing was done during the [http://www.creatis.insa-lyon.fr/Interoperability_workshop third] VPH NoE Imaging workshop hold in Lyon, France on October 22-23, 2012. It will be continued in consecutive hackfests. The aim is to try to plug in CLI modules in CLI compatible frameworks and come up with possible improvement of the CLI standard, advice to CLI module and CLI framework developers.&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
&lt;br /&gt;
* [[CTK-Hackfest-Nov-2011|CTK Hackfest]] in Sophia Antipolis, France in November 2011&lt;br /&gt;
** Preliminary work to integrate CLI into GIMIAS&lt;br /&gt;
* [[CTK-Hackfest-Jul-2012|CTK Hackfest]] in Boston, USA in July 2012&lt;br /&gt;
** Preliminary work to integrate CLI into MITK&lt;br /&gt;
* [http://www.creatis.insa-lyon.fr/Interoperability_workshop 3rd VPH NoE Imaging workshop] in Lyon, France on October 22-23, 2012&lt;br /&gt;
** [[#First_Interoperability_tests|First Interoperability tests]] with CTK, GIMIAS, NiftyView and Slicer&lt;br /&gt;
* [[CTK-Hackfest-Dec-2012|CTK Hackfest]] in Bologna, Italy on December, 2012&lt;br /&gt;
** Preliminary work to integrate CLI into medInria, MAF3&lt;br /&gt;
** Semi-Automatic framework CLI integration tests&lt;br /&gt;
* [[CTK-Hackfest-Nov-2013|CTK Hackfest]] in London, UK on November, 2013&lt;br /&gt;
** [[#Second_Interoperability_tests|Second Interoperability tests]]: GIMIAS&#039;s Command Line Plugins in CTK&#039;s Command Line Module Explorer, CTK&#039;s Command Line Modules in Taverna Workbench&lt;br /&gt;
&lt;br /&gt;
== First Interoperability tests ==&lt;br /&gt;
&lt;br /&gt;
These first tests mainly concern the integration of niftyreg (registration algorithms from UCL). The different stages of integration are: load, execute and results. Meaning that the CLI module can be loaded. executed and provides the same results as if it was run only from the command line. The problems we encountered were:&lt;br /&gt;
&lt;br /&gt;
* GIMIAS does not support to have a `default` element different that `None` for the output, not sure about the `advanced` option for the `parameters` element &lt;br /&gt;
* niftyreg was using `fileExtensions` with stars (`*.nii`) which is not supported by neither GIMIAS nor Slicer (the star is directly used in the file name)&lt;br /&gt;
* The default output folder should be set to the user folder and not the running one, otherwise the CLI module can crash because they were denied access to write in that folder (for example `Program Files` under Windows)&lt;br /&gt;
* What to do with CLI modules that have dependencies on shared libraries with the platform but of different versions? Platforms should have the option to only use the libraries shipped with the CLI module&lt;br /&gt;
* Platforms should align the way they treat data since if two load data differently, the same CLI module could give different results&lt;br /&gt;
&lt;br /&gt;
It would be interesting to create test CLI modules for these integration tests. For example one that exposes all possible types of options, one running a simple algorithm without any dependencies (as niftyreg) and one with dependencies.&lt;br /&gt;
&lt;br /&gt;
Some thoughts on the tested platforms:&lt;br /&gt;
* Niftyview has nice controls on the way CLI modules are found and loaded (control on the `XML` validation)&lt;br /&gt;
* Slicer has a nice display of the loaded and non loaded CLI modules (appear in red, there could be more explanation why the loading failed)&lt;br /&gt;
&lt;br /&gt;
Test datasets:&lt;br /&gt;
&lt;br /&gt;
The test datasets [https://drive.google.com/file/d/0B3kBRNGHGeP0bGFjZlZNcHJLNEU/edit?usp=sharing source_2down.nii] and [https://drive.google.com/file/d/0B3kBRNGHGeP0N2gzZTVYV2JTX28/edit?usp=sharing target_2down.nii] were obtained from [http://brainweb.bic.mni.mcgill.ca/brainweb BrainWeb] and [http://adni.loni.usc.edu/ ADNI].&lt;br /&gt;
&lt;br /&gt;
Here are the snapshots of niftyreg on the different platforms:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;niftyreg on the different platforms&amp;quot; widths=&amp;quot;400px&amp;quot; heights=&amp;quot;300px&amp;quot; perrow=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
Image:Niftyreg-ctk.png|CTK command line module explorer &lt;br /&gt;
Image:Niftyreg-slicer.png|3D Slicer&lt;br /&gt;
Image:Niftyreg-niftyview.png|NiftyView (based on MITK Workbench)&lt;br /&gt;
Image:Niftyreg-gimias.png|GIMIAS&lt;br /&gt;
Image:medinria-cli-niftyreg.png|MedInria &lt;br /&gt;
Image:Niftyreg-MeVisLab.png|MeVisLab (see [https://www.youtube.com/watch?v=FSCrmiWEcbA screencast])&lt;br /&gt;
Image:Niftyreg-MITK-Workbench.png|MITK Workbench&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Second Interoperability tests ==&lt;br /&gt;
&lt;br /&gt;
* GIMIAS&#039;s Command Line Plugins in CTK&#039;s Command Line Module Explorer&lt;br /&gt;
&lt;br /&gt;
This interoperability test was done under Windows 8. Similar steps can be performed in other platforms.&lt;br /&gt;
&lt;br /&gt;
Typically, GIMIAS&#039;s Command Line Plugins (CLPs) are located in folder &#039;&#039;&#039;&amp;lt;GIMIAS_install_dir&amp;gt;\commandLinePlugins&#039;&#039;&#039;. However, the DLL dependencies of these CLPs are located in &#039;&#039;&#039;&amp;lt;GIMIAS_install_dir&amp;gt;&#039;&#039;&#039;. This is a problem when attempting to use GIMIAS&#039;s CLPs in CTK&#039;s Command Line Module Explorer (CLME), as the CLME will fail to load the CLPs. &lt;br /&gt;
&lt;br /&gt;
This can be easily solved by copying GIMIAS&#039;s CLPs in a different folder, let&#039;s say &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039;, along with its DLL dependencies (for finding out the DLL dependencies of a CLP, a program such as [http://dependencywalker.com/ Dependency Walker] can be used).&lt;br /&gt;
&lt;br /&gt;
After creating &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and copying the necessary files in it. Start CTK&#039;s CLME, go to menu &amp;quot;Module&amp;quot; and choose &amp;quot;Options&amp;quot;. In &amp;quot;Module Settings&amp;quot; go to &amp;quot;Search Paths&amp;quot;, and then add &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; to the search paths. Press &amp;quot;OK&amp;quot; and the CLME will scan &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and load the CLPs. &lt;br /&gt;
&lt;br /&gt;
If the loading process fails, you are probably missing a DLL dependency, close the CLME and go to the cache folder (&#039;&#039;&#039;&amp;lt;user_directory&amp;gt;\AppData\Local\CommonTK\CommandLineModuleExplorer\cache&#039;&#039;&#039; on MS Windows). Clear the content of that directory, add the additional DLL to &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and then start the CLME again.&lt;br /&gt;
&lt;br /&gt;
If a CLP shows up in the list with a warning sign, place the mouse on top of the CLP&#039;s name and look at the warning message. Most likely the XML that defines the CLP has a compatibility problem with the CLME, which means that is does not adhere to the [http://www.commontk.org/docs/html/ctkCmdLineModule.xsd CTK XML Schema]. See the definition of the Schema, correct the XML of the CLP, clear CLME&#039;s cache folder as described in the previous paragraph, and start the CLME again.&lt;br /&gt;
&lt;br /&gt;
After following these steps, you will be able to see and use your CLP in the CLME. &#039;&#039;&#039;This means that you can share your GIMIAS&#039;s CLP with any CTK user at any time, by just sharing your CLPs executable file and its DLL dependencies&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following image shows GIMIAS&#039;s CLPs loaded in CTK&#039;s CLME. The &amp;quot;Create a DICOM Series&amp;quot; CLP is selected. The &amp;quot;Settings&amp;quot; dialog is also shown, indicating how to add the CLPs directory to the CLME&#039;s search paths. Notice that some CLPs are shown with a warning sign, so their XML definitions has to be corrected.&lt;br /&gt;
&lt;br /&gt;
[[File:GIMIAS_CLPs_on_CTK_CLME.png|400px]]&lt;br /&gt;
&lt;br /&gt;
* CTK&#039;s Command Line Modules in Taverna Workbench&lt;br /&gt;
&lt;br /&gt;
[http://www.taverna.org.uk/download/workbench/ Taverna Workbench] is an open source Workflow Management System written in Java. GIMIAS&#039;s Command Line Plugins (CLPs) can be used in Taverna Workbench for creating medical imaging workflows composed of several filters. In order to be able to do this, the &#039;&#039;&#039;Center Computational Imaging and Simulation Technologies in Biomedicine (CISTIB)&#039;&#039;&#039; at the [http://www.shef.ac.uk/ University of Sheffield] has created a Taverna Workbench plugin for GIMIAS.&lt;br /&gt;
&lt;br /&gt;
General instructions on how to install GIMIAS Command-Line Taverna Plugin can be found [https://drive.google.com/file/d/0B3kBRNGHGeP0dE53THFMYjdsdDQ/edit?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
In this interoperability test, a CTK Command Line Module was created and tested with GIMIAS Command-Line Taverna Plugin. The sample plugin is called &#039;&#039;&#039;CopyPlugin&#039;&#039;&#039;. It is a simple code to open a VTK ASCII file containing a PolyData, and save the contents of the file on another VTK file. The plugin code can be accessed [https://drive.google.com/file/d/0B3kBRNGHGeP0bVZVWHZkS1NydnM/edit?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
The result was successful, which means that &#039;&#039;&#039;GIMIAS&#039;s CLPs and CTK&#039;s Command Line Modules can be combined to create processing workflows in Taverna Workbench !!&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The following image shows the CopyPlugin running on CTK&#039;s Command Line Module Explorer.&lt;br /&gt;
&lt;br /&gt;
[[File:COPYPLUGIN_CTK_CLME.png‎|400px]]&lt;br /&gt;
&lt;br /&gt;
The CopyPlugin Command Line Module Explorer can also be imported into GIMIAS, see the following image&lt;br /&gt;
&lt;br /&gt;
[[File:COPYPLUGIN_CTK_GIMIAS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The following image shows a simple workflow that includes the CopyPlugin, after being imported using GIMIAS Command-Line Taverna Plugin.&lt;br /&gt;
&lt;br /&gt;
[[File:CTL_CLM_TAVERNA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
GIMIAS&#039;s CLPs and CTK&#039;s Command Line Modules can be combined into the same Taverna workflow. See the following image where a Marching Cubes GIMIAS&#039;s CLP is used along with the CopyPlugin, a CTK Command Line Module.&lt;br /&gt;
&lt;br /&gt;
[[File:GIMIAS_CTK_WORKFLOW.png|400px]]&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2286</id>
		<title>Documentation/Command Line Interface</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2286"/>
		<updated>2014-12-26T21:36:07Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: add links to new bot-generated lists of Slicer extensions that can be filtered by type=cli&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What are CLI modules? ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CLI (commandline interface) modules&amp;quot; are standalone tools (for instance, a segmentation algorithm) that offer a commandline interface and a &#039;&#039;&#039;--xml&#039;&#039;&#039; switch that outputs a &#039;&#039;machine-readable kind of --help&#039;&#039; (XML description of their supported parameters, values, hints, etc.).  This makes it possible to use such CLIs as some kind of &amp;quot;plugins&amp;quot; for rich GUI applications that offer visualization and &#039;&#039;&#039;automatically generated GUI panels&#039;&#039;&#039; for parameter adjustment.  Also, the whole data handling is left to the host application (which may e.g. implement a batch processing pipeline, running the CLI systematically on all relevant data for a particular study), and it becomes possible to use the &#039;&#039;&#039;same algorithm in various different host applications and contexts&#039;&#039;&#039;, by agreeing on a common standard for the --xml output.&lt;br /&gt;
&lt;br /&gt;
== CTK Support for CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
CTK provides an API for interfacing with such self-describing command line modules, and the XML schema for the parameter description and most of the supported feature set for a module has been adopted from the Slicer Execution Model (the first host where this idea originated).&lt;br /&gt;
&lt;br /&gt;
The API provided by CTK allows the management, GUI generation, and asynchronous execution of such modules in a toolkit-independent and interoperable way. Application writers can rely on the provided libraries and their API to quickly integrate command line modules into their applications.  CTK also comes with an example application, called ctkCommandLineModuleExplorer which can be used to load different kinds of modules, to verify their correctness, to run - and finally inspect their output.&lt;br /&gt;
&lt;br /&gt;
;More information on CTK&#039;s support for CLI modules:&lt;br /&gt;
: There is [http://www.commontk.org/docs/html/CommandLineModules_Page.html a well-written page in the Doxygen docs] (and a [http://www.commontk.org/docs/html/group__CommandLineModules__Group.html group for the classes]), as well as [[Documentation/CLI Support in CTK|a separate wiki page]].&lt;br /&gt;
&lt;br /&gt;
== Example Applications ==&lt;br /&gt;
&lt;br /&gt;
CLI modules are already supported by a number of host applications, e.g. 3D Slicer, NiftyView / MITK Workbench, GIMIAS, MedInria, MeVisLab, nipype and more.  You can see some examples on the [[Documentation/CLI_In_Context|CLI In Context]] page.&lt;br /&gt;
&lt;br /&gt;
== Background Information / Specs ==&lt;br /&gt;
&lt;br /&gt;
Currently, the CLI module standard is documented as [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation Slicer&#039;s Execution Model].  There is an [https://github.com/commontk/CTK/blob/master/Libs/CommandLineModules/Core/Resources/ctkCmdLineModule.xsd XML schema definition] ([http://www.commontk.org/docs/html/ctkCmdLineModule.xsd auto-generated pretty-printed documentation]) that was created retroactively, and not all existing modules strictly follow the spec.  However, one problem is that the schema definition does not facilitate to specify that e.g. the order of author and description elements is irrelevant, so the schema is more strict than the actual implementation in some respects (and less strict in some other).&lt;br /&gt;
&lt;br /&gt;
You are welcome to join the [http://www.commontk.org/index.php/Getting_Started#CTK_mailing_list ctk-developers mailing list] for discussing related questions.&lt;br /&gt;
&lt;br /&gt;
TODO: The standard (Slicer execution model description) should probably be moved to the CTK domain.&lt;br /&gt;
&lt;br /&gt;
== Creating your own CLI modules ==&lt;br /&gt;
&lt;br /&gt;
There is a [https://github.com/Slicer/SlicerExecutionModel &amp;quot;SlicerExecutionModel&amp;quot;] project at GitHub that shall help you with implementing new CLIs, e.g. by offering means to &#039;&#039;&#039;automatically parse commandline arguments&#039;&#039;&#039; based on the XML spec.&lt;br /&gt;
&lt;br /&gt;
The Slicer documentation also contains instructions on [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/Modules how to extend Slicer via CLI modules] or other means.&lt;br /&gt;
&lt;br /&gt;
If you want to implement a Python-based solution, you might also be interested in [https://github.com/commontk/ctk-cli the code available on GitHub] and [https://pypi.python.org/pypi/ctk-cli the Python Package Index] that was developed as part of the [http://www.na-mic.org/Wiki/index.php/2013_Summer_Project_Week:CLI_modules_in_MeVisLab CLI integration in MeVisLab] during the NA-MIC summer project week 2013.&lt;br /&gt;
&lt;br /&gt;
== Examples of CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
Wherever feasible, Slicer developers are encouraged to encapsulate functionality as CLI modules.&lt;br /&gt;
* [https://github.com/Slicer/Slicer/tree/master/Modules/CLI Source code of Slicer&#039;s CLI Modules]&lt;br /&gt;
* Many [http://slicer.kitware.com/midas3/slicerappstore?os=win&amp;amp;arch=amd64&amp;amp;revision=23777&amp;amp;category=&amp;amp;search=&amp;amp;layout=layout Slicer extensions] provide command line modules (unfortunately, ATM, it is not possible yet to query only CLI modules, but there are now [http://wiki.slicer.org/slicerWiki/index.php/User:UpdateBot/Issue-2843-Consolidated-Extension-List auto-generated lists] that can be [http://wiki.slicer.org/slicerWiki/index.php/User:UpdateBot/Issue-2843-Consolidated-Extension-List/4.4#cli filtered by type=cli]).&lt;br /&gt;
* The [http://www.nitrc.org/projects/slicer NITRC.org project for 3D Slicer] lists associations to software packages that interoperate with Slicer, and many of these consist of one or more CLI modules.&lt;br /&gt;
* [http://sourceforge.net/projects/niftyreg/ niftyreg] contains registration algorithms (from UCL, hosted on SF.net).&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2278</id>
		<title>Documentation/Command Line Interface</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2278"/>
		<updated>2014-11-11T10:38:41Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: link to new ctk_cli package&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What are CLI modules? ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CLI (commandline interface) modules&amp;quot; are standalone tools (for instance, a segmentation algorithm) that offer a commandline interface and a &#039;&#039;&#039;--xml&#039;&#039;&#039; switch that outputs a &#039;&#039;machine-readable kind of --help&#039;&#039; (XML description of their supported parameters, values, hints, etc.).  This makes it possible to use such CLIs as some kind of &amp;quot;plugins&amp;quot; for rich GUI applications that offer visualization and &#039;&#039;&#039;automatically generated GUI panels&#039;&#039;&#039; for parameter adjustment.  Also, the whole data handling is left to the host application (which may e.g. implement a batch processing pipeline, running the CLI systematically on all relevant data for a particular study), and it becomes possible to use the &#039;&#039;&#039;same algorithm in various different host applications and contexts&#039;&#039;&#039;, by agreeing on a common standard for the --xml output.&lt;br /&gt;
&lt;br /&gt;
== CTK Support for CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
CTK provides an API for interfacing with such self-describing command line modules, and the XML schema for the parameter description and most of the supported feature set for a module has been adopted from the Slicer Execution Model (the first host where this idea originated).&lt;br /&gt;
&lt;br /&gt;
The API provided by CTK allows the management, GUI generation, and asynchronous execution of such modules in a toolkit-independent and interoperable way. Application writers can rely on the provided libraries and their API to quickly integrate command line modules into their applications.  CTK also comes with an example application, called ctkCommandLineModuleExplorer which can be used to load different kinds of modules, to verify their correctness, to run - and finally inspect their output.&lt;br /&gt;
&lt;br /&gt;
;More information on CTK&#039;s support for CLI modules:&lt;br /&gt;
: There is [http://www.commontk.org/docs/html/CommandLineModules_Page.html a well-written page in the Doxygen docs] (and a [http://www.commontk.org/docs/html/group__CommandLineModules__Group.html group for the classes]), as well as [[Documentation/CLI Support in CTK|a separate wiki page]].&lt;br /&gt;
&lt;br /&gt;
== Example Applications ==&lt;br /&gt;
&lt;br /&gt;
CLI modules are already supported by a number of host applications, e.g. 3D Slicer, NiftyView / MITK Workbench, GIMIAS, MedInria, MeVisLab, nipype and more.  You can see some examples on the [[Documentation/CLI_In_Context|CLI In Context]] page.&lt;br /&gt;
&lt;br /&gt;
== Background Information / Specs ==&lt;br /&gt;
&lt;br /&gt;
Currently, the CLI module standard is documented as [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation Slicer&#039;s Execution Model].  There is an [https://github.com/commontk/CTK/blob/master/Libs/CommandLineModules/Core/Resources/ctkCmdLineModule.xsd XML schema definition] ([http://www.commontk.org/docs/html/ctkCmdLineModule.xsd auto-generated pretty-printed documentation]) that was created retroactively, and not all existing modules strictly follow the spec.  However, one problem is that the schema definition does not facilitate to specify that e.g. the order of author and description elements is irrelevant, so the schema is more strict than the actual implementation in some respects (and less strict in some other).&lt;br /&gt;
&lt;br /&gt;
You are welcome to join the [http://www.commontk.org/index.php/Getting_Started#CTK_mailing_list ctk-developers mailing list] for discussing related questions.&lt;br /&gt;
&lt;br /&gt;
TODO: The standard (Slicer execution model description) should probably be moved to the CTK domain.&lt;br /&gt;
&lt;br /&gt;
== Creating your own CLI modules ==&lt;br /&gt;
&lt;br /&gt;
There is a [https://github.com/Slicer/SlicerExecutionModel &amp;quot;SlicerExecutionModel&amp;quot;] project at GitHub that shall help you with implementing new CLIs, e.g. by offering means to &#039;&#039;&#039;automatically parse commandline arguments&#039;&#039;&#039; based on the XML spec.&lt;br /&gt;
&lt;br /&gt;
The Slicer documentation also contains instructions on [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/Modules how to extend Slicer via CLI modules] or other means.&lt;br /&gt;
&lt;br /&gt;
If you want to implement a Python-based solution, you might also be interested in [https://github.com/commontk/ctk-cli the code available on GitHub] and [https://pypi.python.org/pypi/ctk-cli the Python Package Index] that was developed as part of the [http://www.na-mic.org/Wiki/index.php/2013_Summer_Project_Week:CLI_modules_in_MeVisLab CLI integration in MeVisLab] during the NA-MIC summer project week 2013.&lt;br /&gt;
&lt;br /&gt;
== Examples of CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
Wherever feasible, Slicer developers are encouraged to encapsulate functionality as CLI modules.&lt;br /&gt;
* [https://github.com/Slicer/Slicer/tree/master/Modules/CLI Source code of Slicer&#039;s CLI Modules]&lt;br /&gt;
* Many [http://slicer.kitware.com/midas3/slicerappstore?os=win&amp;amp;arch=amd64&amp;amp;revision=23777&amp;amp;category=&amp;amp;search=&amp;amp;layout=layout Slicer extensions] provide command line modules (unfortunately, ATM, it is not possible yet to query only CLI modules).&lt;br /&gt;
* The [http://www.nitrc.org/projects/slicer NITRC.org project for 3D Slicer] lists associations to software packages that interoperate with Slicer, and many of these consist of one or more CLI modules.&lt;br /&gt;
* [http://sourceforge.net/projects/niftyreg/ niftyreg] contains registration algorithms (from UCL, hosted on SF.net).&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2277</id>
		<title>Documentation/Command Line Interface</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2277"/>
		<updated>2014-11-11T10:36:13Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: mention niftyreg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What are CLI modules? ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CLI (commandline interface) modules&amp;quot; are standalone tools (for instance, a segmentation algorithm) that offer a commandline interface and a &#039;&#039;&#039;--xml&#039;&#039;&#039; switch that outputs a &#039;&#039;machine-readable kind of --help&#039;&#039; (XML description of their supported parameters, values, hints, etc.).  This makes it possible to use such CLIs as some kind of &amp;quot;plugins&amp;quot; for rich GUI applications that offer visualization and &#039;&#039;&#039;automatically generated GUI panels&#039;&#039;&#039; for parameter adjustment.  Also, the whole data handling is left to the host application (which may e.g. implement a batch processing pipeline, running the CLI systematically on all relevant data for a particular study), and it becomes possible to use the &#039;&#039;&#039;same algorithm in various different host applications and contexts&#039;&#039;&#039;, by agreeing on a common standard for the --xml output.&lt;br /&gt;
&lt;br /&gt;
== CTK Support for CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
CTK provides an API for interfacing with such self-describing command line modules, and the XML schema for the parameter description and most of the supported feature set for a module has been adopted from the Slicer Execution Model (the first host where this idea originated).&lt;br /&gt;
&lt;br /&gt;
The API provided by CTK allows the management, GUI generation, and asynchronous execution of such modules in a toolkit-independent and interoperable way. Application writers can rely on the provided libraries and their API to quickly integrate command line modules into their applications.  CTK also comes with an example application, called ctkCommandLineModuleExplorer which can be used to load different kinds of modules, to verify their correctness, to run - and finally inspect their output.&lt;br /&gt;
&lt;br /&gt;
;More information on CTK&#039;s support for CLI modules:&lt;br /&gt;
: There is [http://www.commontk.org/docs/html/CommandLineModules_Page.html a well-written page in the Doxygen docs] (and a [http://www.commontk.org/docs/html/group__CommandLineModules__Group.html group for the classes]), as well as [[Documentation/CLI Support in CTK|a separate wiki page]].&lt;br /&gt;
&lt;br /&gt;
== Example Applications ==&lt;br /&gt;
&lt;br /&gt;
CLI modules are already supported by a number of host applications, e.g. 3D Slicer, NiftyView / MITK Workbench, GIMIAS, MedInria, MeVisLab, nipype and more.  You can see some examples on the [[Documentation/CLI_In_Context|CLI In Context]] page.&lt;br /&gt;
&lt;br /&gt;
== Background Information / Specs ==&lt;br /&gt;
&lt;br /&gt;
Currently, the CLI module standard is documented as [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation Slicer&#039;s Execution Model].  There is an [https://github.com/commontk/CTK/blob/master/Libs/CommandLineModules/Core/Resources/ctkCmdLineModule.xsd XML schema definition] ([http://www.commontk.org/docs/html/ctkCmdLineModule.xsd auto-generated pretty-printed documentation]) that was created retroactively, and not all existing modules strictly follow the spec.  However, one problem is that the schema definition does not facilitate to specify that e.g. the order of author and description elements is irrelevant, so the schema is more strict than the actual implementation in some respects (and less strict in some other).&lt;br /&gt;
&lt;br /&gt;
You are welcome to join the [http://www.commontk.org/index.php/Getting_Started#CTK_mailing_list ctk-developers mailing list] for discussing related questions.&lt;br /&gt;
&lt;br /&gt;
TODO: The standard (Slicer execution model description) should probably be moved to the CTK domain.&lt;br /&gt;
&lt;br /&gt;
== Creating your own CLI modules ==&lt;br /&gt;
&lt;br /&gt;
There is a [https://github.com/Slicer/SlicerExecutionModel &amp;quot;SlicerExecutionModel&amp;quot;] project at GitHub that shall help you with implementing new CLIs, e.g. by offering means to &#039;&#039;&#039;automatically parse commandline arguments&#039;&#039;&#039; based on the XML spec.&lt;br /&gt;
&lt;br /&gt;
The Slicer documentation also contains instructions on [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/Modules how to extend Slicer via CLI modules] or other means.&lt;br /&gt;
&lt;br /&gt;
If you want to implement a Python-based solution, you might also be interested in [https://github.com/hmeine/MeVisLab-CLI/tree/master/Modules/Scripts/python the code available on GitHub] that was developed as part of the [http://www.na-mic.org/Wiki/index.php/2013_Summer_Project_Week:CLI_modules_in_MeVisLab CLI integration in MeVisLab] during the NA-MIC summer project week 2013.&lt;br /&gt;
&lt;br /&gt;
== Examples of CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
Wherever feasible, Slicer developers are encouraged to encapsulate functionality as CLI modules.&lt;br /&gt;
* [https://github.com/Slicer/Slicer/tree/master/Modules/CLI Source code of Slicer&#039;s CLI Modules]&lt;br /&gt;
* Many [http://slicer.kitware.com/midas3/slicerappstore?os=win&amp;amp;arch=amd64&amp;amp;revision=23777&amp;amp;category=&amp;amp;search=&amp;amp;layout=layout Slicer extensions] provide command line modules (unfortunately, ATM, it is not possible yet to query only CLI modules).&lt;br /&gt;
* The [http://www.nitrc.org/projects/slicer NITRC.org project for 3D Slicer] lists associations to software packages that interoperate with Slicer, and many of these consist of one or more CLI modules.&lt;br /&gt;
* [http://sourceforge.net/projects/niftyreg/ niftyreg] contains registration algorithms (from UCL, hosted on SF.net).&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2267</id>
		<title>Documentation/Command Line Interface</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2267"/>
		<updated>2014-11-07T09:19:45Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: /* Examples of CLI Modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What are CLI modules? ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CLI (commandline interface) modules&amp;quot; are standalone tools (for instance, a segmentation algorithm) that offer a commandline interface and a &#039;&#039;&#039;--xml&#039;&#039;&#039; switch that outputs a &#039;&#039;machine-readable kind of --help&#039;&#039; (XML description of their supported parameters, values, hints, etc.).  This makes it possible to use such CLIs as some kind of &amp;quot;plugins&amp;quot; for rich GUI applications that offer visualization and &#039;&#039;&#039;automatically generated GUI panels&#039;&#039;&#039; for parameter adjustment.  Also, the whole data handling is left to the host application (which may e.g. implement a batch processing pipeline, running the CLI systematically on all relevant data for a particular study), and it becomes possible to use the &#039;&#039;&#039;same algorithm in various different host applications and contexts&#039;&#039;&#039;, by agreeing on a common standard for the --xml output.&lt;br /&gt;
&lt;br /&gt;
== CTK Support for CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
CTK provides an API for interfacing with such self-describing command line modules, and the XML schema for the parameter description and most of the supported feature set for a module has been adopted from the Slicer Execution Model (the first host where this idea originated).&lt;br /&gt;
&lt;br /&gt;
The API provided by CTK allows the management, GUI generation, and asynchronous execution of such modules in a toolkit-independent and interoperable way. Application writers can rely on the provided libraries and their API to quickly integrate command line modules into their applications.  CTK also comes with an example application, called ctkCommandLineModuleExplorer which can be used to load different kinds of modules, to verify their correctness, to run - and finally inspect their output.&lt;br /&gt;
&lt;br /&gt;
;More information on CTK&#039;s support for CLI modules:&lt;br /&gt;
: There is [http://www.commontk.org/docs/html/CommandLineModules_Page.html a well-written page in the Doxygen docs] (and a [http://www.commontk.org/docs/html/group__CommandLineModules__Group.html group for the classes]), as well as [[Documentation/CLI Support in CTK|a separate wiki page]].&lt;br /&gt;
&lt;br /&gt;
== Example Applications ==&lt;br /&gt;
&lt;br /&gt;
CLI modules are already supported by a number of host applications, e.g. 3D Slicer, NiftyView / MITK Workbench, GIMIAS, MedInria, MeVisLab, nipype and more.  You can see some examples on the [[Documentation/CLI_In_Context|CLI In Context]] page.&lt;br /&gt;
&lt;br /&gt;
== Background Information / Specs ==&lt;br /&gt;
&lt;br /&gt;
Currently, the CLI module standard is documented as [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation Slicer&#039;s Execution Model].  There is an [https://github.com/commontk/CTK/blob/master/Libs/CommandLineModules/Core/Resources/ctkCmdLineModule.xsd XML schema definition] ([http://www.commontk.org/docs/html/ctkCmdLineModule.xsd auto-generated pretty-printed documentation]) that was created retroactively, and not all existing modules strictly follow the spec.  However, one problem is that the schema definition does not facilitate to specify that e.g. the order of author and description elements is irrelevant, so the schema is more strict than the actual implementation in some respects (and less strict in some other).&lt;br /&gt;
&lt;br /&gt;
You are welcome to join the [http://www.commontk.org/index.php/Getting_Started#CTK_mailing_list ctk-developers mailing list] for discussing related questions.&lt;br /&gt;
&lt;br /&gt;
TODO: The standard (Slicer execution model description) should probably be moved to the CTK domain.&lt;br /&gt;
&lt;br /&gt;
== Creating your own CLI modules ==&lt;br /&gt;
&lt;br /&gt;
There is a [https://github.com/Slicer/SlicerExecutionModel &amp;quot;SlicerExecutionModel&amp;quot;] project at GitHub that shall help you with implementing new CLIs, e.g. by offering means to &#039;&#039;&#039;automatically parse commandline arguments&#039;&#039;&#039; based on the XML spec.&lt;br /&gt;
&lt;br /&gt;
The Slicer documentation also contains instructions on [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/Modules how to extend Slicer via CLI modules] or other means.&lt;br /&gt;
&lt;br /&gt;
If you want to implement a Python-based solution, you might also be interested in [https://github.com/hmeine/MeVisLab-CLI/tree/master/Modules/Scripts/python the code available on GitHub] that was developed as part of the [http://www.na-mic.org/Wiki/index.php/2013_Summer_Project_Week:CLI_modules_in_MeVisLab CLI integration in MeVisLab] during the NA-MIC summer project week 2013.&lt;br /&gt;
&lt;br /&gt;
== Examples of CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
Wherever feasible, Slicer developers are encouraged to encapsulate functionality as CLI modules.&lt;br /&gt;
* [https://github.com/Slicer/Slicer/tree/master/Modules/CLI Source code of Slicer&#039;s CLI Modules]&lt;br /&gt;
* Many [http://slicer.kitware.com/midas3/slicerappstore?os=win&amp;amp;arch=amd64&amp;amp;revision=23777&amp;amp;category=&amp;amp;search=&amp;amp;layout=layout Slicer extensions] provide command line modules (unfortunately, ATM, it is not possible yet to query only CLI modules).&lt;br /&gt;
* The [http://www.nitrc.org/projects/slicer NITRC.org project for 3D Slicer] lists associations to software packages that interoperate with Slicer, and many of these consist of one or more CLI modules.&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/CLI_In_Context&amp;diff=2251</id>
		<title>Documentation/CLI In Context</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/CLI_In_Context&amp;diff=2251"/>
		<updated>2014-11-05T10:58:22Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some example and notes on different integration of CLI modules in different frameworks including CTK (see [[Documentation/Command_Line_Interface]] for a general overview of CLI modules). The first interoperability testing was done during the [http://www.creatis.insa-lyon.fr/Interoperability_workshop third] VPH NoE Imaging workshop hold in Lyon, France on October 22-23, 2012. It will be continued in consecutive hackfests. The aim is to try to plug in CLI modules in CLI compatible frameworks and come up with possible improvement of the CLI standard, advice to CLI module and CLI framework developers.&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
&lt;br /&gt;
* [[CTK-Hackfest-Nov-2011|CTK Hackfest]] in Sophia Antipolis, France in November 2011&lt;br /&gt;
** Preliminary work to integrate CLI into GIMIAS&lt;br /&gt;
* [[CTK-Hackfest-Jul-2012|CTK Hackfest]] in Boston, USA in July 2012&lt;br /&gt;
** Preliminary work to integrate CLI into MITK&lt;br /&gt;
* [http://www.creatis.insa-lyon.fr/Interoperability_workshop 3rd VPH NoE Imaging workshop] in Lyon, France on October 22-23, 2012&lt;br /&gt;
** [[#First_Interoperability_tests|First Interoperability tests]] with CTK, GIMIAS, NiftyView and Slicer&lt;br /&gt;
* [[CTK-Hackfest-Dec-2012|CTK Hackfest]] in Bologna, Italy on December, 2012&lt;br /&gt;
** Preliminary work to integrate CLI into medInria, MAF3&lt;br /&gt;
** Semi-Automatic framework CLI integration tests&lt;br /&gt;
* [[CTK-Hackfest-Nov-2013|CTK Hackfest]] in London, UK on November, 2013&lt;br /&gt;
** [[#Second_Interoperability_tests|Second Interoperability tests]]: GIMIAS&#039;s Command Line Plugins in CTK&#039;s Command Line Module Explorer, CTK&#039;s Command Line Modules in Taverna Workbench&lt;br /&gt;
&lt;br /&gt;
== First Interoperability tests ==&lt;br /&gt;
&lt;br /&gt;
These first tests mainly concern the integration of niftyreg (registration algorithms from UCL). The different stages of integration are: load, execute and results. Meaning that the CLI module can be loaded. executed and provides the same results as if it was run only from the command line. The problems we encountered were:&lt;br /&gt;
&lt;br /&gt;
* GIMIAS does not support to have a `default` element different that `None` for the output, not sure about the `advanced` option for the `parameters` element &lt;br /&gt;
* niftyreg was using `fileExtensions` with stars (`*.nii`) which is not supported by neither GIMIAS nor Slicer (the star is directly used in the file name)&lt;br /&gt;
* The default output folder should be set to the user folder and not the running one, otherwise the CLI module can crash because they were denied access to write in that folder (for example `Program Files` under Windows)&lt;br /&gt;
* What to do with CLI modules that have dependencies on shared libraries with the platform but of different versions? Platforms should have the option to only use the libraries shipped with the CLI module&lt;br /&gt;
* Platforms should align the way they treat data since if two load data differently, the same CLI module could give different results&lt;br /&gt;
&lt;br /&gt;
It would be interesting to create test CLI modules for these integration tests. For example one that exposes all possible types of options, one running a simple algorithm without any dependencies (as niftyreg) and one with dependencies.&lt;br /&gt;
&lt;br /&gt;
Some thoughts on the tested platforms:&lt;br /&gt;
* Niftyview has nice controls on the way CLI modules are found and loaded (control on the `XML` validation)&lt;br /&gt;
* Slicer has a nice display of the loaded and non loaded CLI modules (appear in red, there could be more explanation why the loading failed)&lt;br /&gt;
&lt;br /&gt;
Test datasets:&lt;br /&gt;
&lt;br /&gt;
The test datasets [https://drive.google.com/file/d/0B3kBRNGHGeP0bGFjZlZNcHJLNEU/edit?usp=sharing source_2down.nii] and [https://drive.google.com/file/d/0B3kBRNGHGeP0N2gzZTVYV2JTX28/edit?usp=sharing target_2down.nii] were obtained from [http://brainweb.bic.mni.mcgill.ca/brainweb BrainWeb] and [http://adni.loni.usc.edu/ ADNI].&lt;br /&gt;
&lt;br /&gt;
Here are the snapshots of niftyreg on the different platforms:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;niftyreg on the different platforms&amp;quot; widths=&amp;quot;400px&amp;quot; heights=&amp;quot;300px&amp;quot; perrow=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
Image:Niftyreg-ctk.png|CTK command line module explorer &lt;br /&gt;
Image:Niftyreg-slicer.png|3D Slicer&lt;br /&gt;
Image:Niftyreg-niftyview.png|NiftyView (based on MITK Workbench)&lt;br /&gt;
Image:Niftyreg-gimias.png|GIMIAS&lt;br /&gt;
Image:medinria-cli-niftyreg.png|MedInria &lt;br /&gt;
Image:Niftyreg-MeVisLab.png|MeVisLab&lt;br /&gt;
Image:Niftyreg-MITK-Workbench.png|MITK Workbench&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Second Interoperability tests ==&lt;br /&gt;
&lt;br /&gt;
* GIMIAS&#039;s Command Line Plugins in CTK&#039;s Command Line Module Explorer&lt;br /&gt;
&lt;br /&gt;
This interoperability test was done under Windows 8. Similar steps can be performed in other platforms.&lt;br /&gt;
&lt;br /&gt;
Typically, GIMIAS&#039;s Command Line Plugins (CLPs) are located in folder &#039;&#039;&#039;&amp;lt;GIMIAS_install_dir&amp;gt;\commandLinePlugins&#039;&#039;&#039;. However, the DLL dependencies of these CLPs are located in &#039;&#039;&#039;&amp;lt;GIMIAS_install_dir&amp;gt;&#039;&#039;&#039;. This is a problem when attempting to use GIMIAS&#039;s CLPs in CTK&#039;s Command Line Module Explorer (CLME), as the CLME will fail to load the CLPs. &lt;br /&gt;
&lt;br /&gt;
This can be easily solved by copying GIMIAS&#039;s CLPs in a different folder, let&#039;s say &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039;, along with its DLL dependencies (for finding out the DLL dependencies of a CLP, a program such as [http://dependencywalker.com/ Dependency Walker] can be used).&lt;br /&gt;
&lt;br /&gt;
After creating &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and copying the necessary files in it. Start CTK&#039;s CLME, go to menu &amp;quot;Module&amp;quot; and choose &amp;quot;Options&amp;quot;. In &amp;quot;Module Settings&amp;quot; go to &amp;quot;Search Paths&amp;quot;, and then add &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; to the search paths. Press &amp;quot;OK&amp;quot; and the CLME will scan &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and load the CLPs. &lt;br /&gt;
&lt;br /&gt;
If the loading process fails, you are probably missing a DLL dependency, close the CLME and go to the cache folder (&#039;&#039;&#039;&amp;lt;user_directory&amp;gt;\AppData\Local\CommonTK\CommandLineModuleExplorer\cache&#039;&#039;&#039; on MS Windows). Clear the content of that directory, add the additional DLL to &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and then start the CLME again.&lt;br /&gt;
&lt;br /&gt;
If a CLP shows up in the list with a warning sign, place the mouse on top of the CLP&#039;s name and look at the warning message. Most likely the XML that defines the CLP has a compatibility problem with the CLME, which means that is does not adhere to the [http://www.commontk.org/docs/html/ctkCmdLineModule.xsd CTK XML Schema]. See the definition of the Schema, correct the XML of the CLP, clear CLME&#039;s cache folder as described in the previous paragraph, and start the CLME again.&lt;br /&gt;
&lt;br /&gt;
After following these steps, you will be able to see and use your CLP in the CLME. &#039;&#039;&#039;This means that you can share your GIMIAS&#039;s CLP with any CTK user at any time, by just sharing your CLPs executable file and its DLL dependencies&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following image shows GIMIAS&#039;s CLPs loaded in CTK&#039;s CLME. The &amp;quot;Create a DICOM Series&amp;quot; CLP is selected. The &amp;quot;Settings&amp;quot; dialog is also shown, indicating how to add the CLPs directory to the CLME&#039;s search paths. Notice that some CLPs are shown with a warning sign, so their XML definitions has to be corrected.&lt;br /&gt;
&lt;br /&gt;
[[File:GIMIAS_CLPs_on_CTK_CLME.png|400px]]&lt;br /&gt;
&lt;br /&gt;
* CTK&#039;s Command Line Modules in Taverna Workbench&lt;br /&gt;
&lt;br /&gt;
[http://www.taverna.org.uk/download/workbench/ Taverna Workbench] is an open source Workflow Management System written in Java. GIMIAS&#039;s Command Line Plugins (CLPs) can be used in Taverna Workbench for creating medical imaging workflows composed of several filters. In order to be able to do this, the &#039;&#039;&#039;Center Computational Imaging and Simulation Technologies in Biomedicine (CISTIB)&#039;&#039;&#039; at the [http://www.shef.ac.uk/ University of Sheffield] has created a Taverna Workbench plugin for GIMIAS.&lt;br /&gt;
&lt;br /&gt;
General instructions on how to install GIMIAS Command-Line Taverna Plugin can be found [https://drive.google.com/file/d/0B3kBRNGHGeP0dE53THFMYjdsdDQ/edit?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
In this interoperability test, a CTK Command Line Module was created and tested with GIMIAS Command-Line Taverna Plugin. The sample plugin is called &#039;&#039;&#039;CopyPlugin&#039;&#039;&#039;. It is a simple code to open a VTK ASCII file containing a PolyData, and save the contents of the file on another VTK file. The plugin code can be accessed [https://drive.google.com/file/d/0B3kBRNGHGeP0bVZVWHZkS1NydnM/edit?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
The result was successful, which means that &#039;&#039;&#039;GIMIAS&#039;s CLPs and CTK&#039;s Command Line Modules can be combined to create processing workflows in Taverna Workbench !!&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The following image shows the CopyPlugin running on CTK&#039;s Command Line Module Explorer.&lt;br /&gt;
&lt;br /&gt;
[[File:COPYPLUGIN_CTK_CLME.png‎|400px]]&lt;br /&gt;
&lt;br /&gt;
The CopyPlugin Command Line Module Explorer can also be imported into GIMIAS, see the following image&lt;br /&gt;
&lt;br /&gt;
[[File:COPYPLUGIN_CTK_GIMIAS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The following image shows a simple workflow that includes the CopyPlugin, after being imported using GIMIAS Command-Line Taverna Plugin.&lt;br /&gt;
&lt;br /&gt;
[[File:CTL_CLM_TAVERNA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
GIMIAS&#039;s CLPs and CTK&#039;s Command Line Modules can be combined into the same Taverna workflow. See the following image where a Marching Cubes GIMIAS&#039;s CLP is used along with the CopyPlugin, a CTK Command Line Module.&lt;br /&gt;
&lt;br /&gt;
[[File:GIMIAS_CTK_WORKFLOW.png|400px]]&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/CLI_Support_in_CTK&amp;diff=2250</id>
		<title>Documentation/CLI Support in CTK</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/CLI_Support_in_CTK&amp;diff=2250"/>
		<updated>2014-11-05T10:57:30Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Command Line Interface (CLI) support in CTK will primarly focus on providing an API for working with existing CLI modules. Providing utilities and tools for creating CLI modules from scratch is a desired addition but there are no concrete plans for this yet. See [[Documentation/Command_Line_Interface]] for more general information about CLI modules.&lt;br /&gt;
&lt;br /&gt;
=== Getting the Code ===&lt;br /&gt;
&lt;br /&gt;
The code is available in the CTK master:&lt;br /&gt;
&lt;br /&gt;
https://github.com/commontk/CTK&lt;br /&gt;
&lt;br /&gt;
Enable the following CMake options to be able to play with the code:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; (for creating CLI test modules)&lt;br /&gt;
* &#039;&#039;&#039;CTK_APP_ctkCommandLineModuleExplorer&#039;&#039;&#039; (small program allowing you to test-drive CLI modules using the CTK CLI module API, enables all the options below)&lt;br /&gt;
* &#039;&#039;&#039;CTK_LIB_CommandLineModules/Core&#039;&#039;&#039; (the CTK library providing the core CLI module API)&lt;br /&gt;
* &#039;&#039;&#039;CTK_LIB_CommandLineModules/Frontend/QtGui&#039;&#039;&#039; (the CTK library providing GUI generation using the Qt widgets)&lt;br /&gt;
* &#039;&#039;&#039;CTK_LIB_CommandLineModules/Backend/LocalProcess&#039;&#039;&#039; (the CTK library for executing local executable files as command line modules)&lt;br /&gt;
&lt;br /&gt;
=== API Design ===&lt;br /&gt;
&lt;br /&gt;
This is a partially overview of the API design, showing the GUI generation process for the Qt front-end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graphviz&amp;gt;&lt;br /&gt;
digraph G {&lt;br /&gt;
graph [&lt;br /&gt;
rankdir = &amp;quot;TB&amp;quot;&lt;br /&gt;
];&lt;br /&gt;
node [&lt;br /&gt;
fontsize = &amp;quot;16&amp;quot;&lt;br /&gt;
shape = &amp;quot;ellipse&amp;quot;&lt;br /&gt;
];&lt;br /&gt;
edge [&lt;br /&gt;
];&lt;br /&gt;
subgraph cluster_0 {&lt;br /&gt;
  label = &amp;quot;CTK&amp;quot;;&lt;br /&gt;
  color = lightGray;&lt;br /&gt;
  &amp;quot;xmlFile&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; Command Line Module XML (.xml)| &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
  &amp;quot;gui&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; Qt GUI | &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
  &amp;quot;uiFile&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; CLI UI (.ui) | &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
  &amp;quot;ctkCLIModuleDescription&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; ctkCmdLineModuleDescription| &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
subgraph cluster_1 {&lt;br /&gt;
  label = &amp;quot;3D Slicer&amp;quot;;&lt;br /&gt;
  color = gray;&lt;br /&gt;
  &amp;quot;vtkMRMLParametersNode&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; vtkMRMLParametersNode| &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
}&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f0:e -&amp;gt; &amp;quot;xmlFile&amp;quot;:f0:ne [label = &amp;quot;XSD file check&amp;quot; ];&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f1 -&amp;gt; &amp;quot;uiFile&amp;quot;:f0 [label = &amp;quot;QtGui XSL file&amp;quot; ];&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f1 -&amp;gt; &amp;quot;uiFile&amp;quot;:f0 [label = &amp;quot;&amp;quot; style=invis];&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f1 -&amp;gt; &amp;quot;ctkCLIModuleDescription&amp;quot;:f0 [label=ctkCmdLineModuleXmlParser];&lt;br /&gt;
&amp;quot;ctkCLIModuleDescription&amp;quot;:f1 -&amp;gt; &amp;quot;vtkMRMLParametersNode&amp;quot;:f0 [label=create];&lt;br /&gt;
&amp;quot;uiFile&amp;quot;:f1 -&amp;gt; &amp;quot;gui&amp;quot;:f0 [label = QUiLoader];&lt;br /&gt;
&amp;quot;gui&amp;quot;:f1:e -&amp;gt; &amp;quot;vtkMRMLParametersNode&amp;quot;:f1:w [dir = both label=synchronize constraint=false];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graphviz&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Overview of some central classes and their scope.&lt;br /&gt;
&lt;br /&gt;
Please see the full [file:///opt/ctk-builds/CTK-debug-gcc/CTK-build/Documentation/html/group__CommandLineModulesCore__API.html Core API] for a list of available classes and their documentation.&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleDescription ====&lt;br /&gt;
&lt;br /&gt;
C++ API for accessing the command line arguments meta-data defined in the XML description.&lt;br /&gt;
&lt;br /&gt;
This class is &#039;&#039;read-only&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleReference ====&lt;br /&gt;
&lt;br /&gt;
A handle to a command line module.&lt;br /&gt;
&lt;br /&gt;
* Get ctkCmdLineModuleDescription class&lt;br /&gt;
* Convenient meta-data access (module location etc.)&lt;br /&gt;
* Used to crate actual ctkCmdLineModuleFrontend instances from specific ctkCmdLineModuleFrontendFactory implementations&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleFrontend ====&lt;br /&gt;
&lt;br /&gt;
Represents an invokable command line module and its current parameter values.&lt;br /&gt;
&lt;br /&gt;
Multiple instances for the same ModuleReference may exist.&lt;br /&gt;
&lt;br /&gt;
* Set/Get individual parameter values or all at once&lt;br /&gt;
* Reset to default parameters&lt;br /&gt;
* Get GUI representation (QObject*)&lt;br /&gt;
* Get parameter value change notifications&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleFuture ====&lt;br /&gt;
&lt;br /&gt;
Returned by the ctkCmdLineModuleManager run method and used to communicate with a running module.&lt;br /&gt;
&lt;br /&gt;
* Run/Abort &lt;br /&gt;
* Status&lt;br /&gt;
* Progress reporting&lt;br /&gt;
 &lt;br /&gt;
==== ctkCmdLineModuleManager ====&lt;br /&gt;
&lt;br /&gt;
Responsible for managing and running other ctkCmdLineModule* classes.&lt;br /&gt;
 &lt;br /&gt;
* Register specific back-ends for handling different types of modules&lt;br /&gt;
* Register/Unregister modules&lt;br /&gt;
* Get ctkCmdLineModuleReference objects&lt;br /&gt;
* Run ctkCmdLineModuleFrontend objects&lt;br /&gt;
&lt;br /&gt;
=== Customizability ===&lt;br /&gt;
&lt;br /&gt;
==== Qt Widget related ====&lt;br /&gt;
&lt;br /&gt;
See also the [http://www.commontk.org/docs/html/classctkCmdLineModuleFrontendQtGui.html ctkCmdLineModuleFrontendQtGui] class for customization information.&lt;br /&gt;
&lt;br /&gt;
* Use parameters for the default XSLT file to customize widget class names for argument types&lt;br /&gt;
* Use your own XSLT file for custom transformations of XML to UI&lt;br /&gt;
* Use your own QUiLoader to control instantiation of certain widget types&lt;br /&gt;
&lt;br /&gt;
==== General ====&lt;br /&gt;
&lt;br /&gt;
* Use a custom &#039;&#039;factory&#039;&#039; to create your own GUI based on a ctkCmdLineModuleDescription instance.&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/CLI_Support_in_CTK&amp;diff=2249</id>
		<title>Documentation/CLI Support in CTK</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/CLI_Support_in_CTK&amp;diff=2249"/>
		<updated>2014-11-05T10:57:20Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: link back to general information page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Command Line Interface (CLI) support in CTK will primarly focus on providing an API for working with existing CLI modules. Providing utilities and tools for creating CLI modules from scratch is a desired addition but there are no concrete plans for this yet. See [[Documentation/Command_Line_Interface] for more general information about CLI modules.&lt;br /&gt;
&lt;br /&gt;
=== Getting the Code ===&lt;br /&gt;
&lt;br /&gt;
The code is available in the CTK master:&lt;br /&gt;
&lt;br /&gt;
https://github.com/commontk/CTK&lt;br /&gt;
&lt;br /&gt;
Enable the following CMake options to be able to play with the code:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; (for creating CLI test modules)&lt;br /&gt;
* &#039;&#039;&#039;CTK_APP_ctkCommandLineModuleExplorer&#039;&#039;&#039; (small program allowing you to test-drive CLI modules using the CTK CLI module API, enables all the options below)&lt;br /&gt;
* &#039;&#039;&#039;CTK_LIB_CommandLineModules/Core&#039;&#039;&#039; (the CTK library providing the core CLI module API)&lt;br /&gt;
* &#039;&#039;&#039;CTK_LIB_CommandLineModules/Frontend/QtGui&#039;&#039;&#039; (the CTK library providing GUI generation using the Qt widgets)&lt;br /&gt;
* &#039;&#039;&#039;CTK_LIB_CommandLineModules/Backend/LocalProcess&#039;&#039;&#039; (the CTK library for executing local executable files as command line modules)&lt;br /&gt;
&lt;br /&gt;
=== API Design ===&lt;br /&gt;
&lt;br /&gt;
This is a partially overview of the API design, showing the GUI generation process for the Qt front-end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graphviz&amp;gt;&lt;br /&gt;
digraph G {&lt;br /&gt;
graph [&lt;br /&gt;
rankdir = &amp;quot;TB&amp;quot;&lt;br /&gt;
];&lt;br /&gt;
node [&lt;br /&gt;
fontsize = &amp;quot;16&amp;quot;&lt;br /&gt;
shape = &amp;quot;ellipse&amp;quot;&lt;br /&gt;
];&lt;br /&gt;
edge [&lt;br /&gt;
];&lt;br /&gt;
subgraph cluster_0 {&lt;br /&gt;
  label = &amp;quot;CTK&amp;quot;;&lt;br /&gt;
  color = lightGray;&lt;br /&gt;
  &amp;quot;xmlFile&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; Command Line Module XML (.xml)| &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
  &amp;quot;gui&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; Qt GUI | &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
  &amp;quot;uiFile&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; CLI UI (.ui) | &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
  &amp;quot;ctkCLIModuleDescription&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; ctkCmdLineModuleDescription| &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
subgraph cluster_1 {&lt;br /&gt;
  label = &amp;quot;3D Slicer&amp;quot;;&lt;br /&gt;
  color = gray;&lt;br /&gt;
  &amp;quot;vtkMRMLParametersNode&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; vtkMRMLParametersNode| &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
}&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f0:e -&amp;gt; &amp;quot;xmlFile&amp;quot;:f0:ne [label = &amp;quot;XSD file check&amp;quot; ];&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f1 -&amp;gt; &amp;quot;uiFile&amp;quot;:f0 [label = &amp;quot;QtGui XSL file&amp;quot; ];&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f1 -&amp;gt; &amp;quot;uiFile&amp;quot;:f0 [label = &amp;quot;&amp;quot; style=invis];&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f1 -&amp;gt; &amp;quot;ctkCLIModuleDescription&amp;quot;:f0 [label=ctkCmdLineModuleXmlParser];&lt;br /&gt;
&amp;quot;ctkCLIModuleDescription&amp;quot;:f1 -&amp;gt; &amp;quot;vtkMRMLParametersNode&amp;quot;:f0 [label=create];&lt;br /&gt;
&amp;quot;uiFile&amp;quot;:f1 -&amp;gt; &amp;quot;gui&amp;quot;:f0 [label = QUiLoader];&lt;br /&gt;
&amp;quot;gui&amp;quot;:f1:e -&amp;gt; &amp;quot;vtkMRMLParametersNode&amp;quot;:f1:w [dir = both label=synchronize constraint=false];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graphviz&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Overview of some central classes and their scope.&lt;br /&gt;
&lt;br /&gt;
Please see the full [file:///opt/ctk-builds/CTK-debug-gcc/CTK-build/Documentation/html/group__CommandLineModulesCore__API.html Core API] for a list of available classes and their documentation.&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleDescription ====&lt;br /&gt;
&lt;br /&gt;
C++ API for accessing the command line arguments meta-data defined in the XML description.&lt;br /&gt;
&lt;br /&gt;
This class is &#039;&#039;read-only&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleReference ====&lt;br /&gt;
&lt;br /&gt;
A handle to a command line module.&lt;br /&gt;
&lt;br /&gt;
* Get ctkCmdLineModuleDescription class&lt;br /&gt;
* Convenient meta-data access (module location etc.)&lt;br /&gt;
* Used to crate actual ctkCmdLineModuleFrontend instances from specific ctkCmdLineModuleFrontendFactory implementations&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleFrontend ====&lt;br /&gt;
&lt;br /&gt;
Represents an invokable command line module and its current parameter values.&lt;br /&gt;
&lt;br /&gt;
Multiple instances for the same ModuleReference may exist.&lt;br /&gt;
&lt;br /&gt;
* Set/Get individual parameter values or all at once&lt;br /&gt;
* Reset to default parameters&lt;br /&gt;
* Get GUI representation (QObject*)&lt;br /&gt;
* Get parameter value change notifications&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleFuture ====&lt;br /&gt;
&lt;br /&gt;
Returned by the ctkCmdLineModuleManager run method and used to communicate with a running module.&lt;br /&gt;
&lt;br /&gt;
* Run/Abort &lt;br /&gt;
* Status&lt;br /&gt;
* Progress reporting&lt;br /&gt;
 &lt;br /&gt;
==== ctkCmdLineModuleManager ====&lt;br /&gt;
&lt;br /&gt;
Responsible for managing and running other ctkCmdLineModule* classes.&lt;br /&gt;
 &lt;br /&gt;
* Register specific back-ends for handling different types of modules&lt;br /&gt;
* Register/Unregister modules&lt;br /&gt;
* Get ctkCmdLineModuleReference objects&lt;br /&gt;
* Run ctkCmdLineModuleFrontend objects&lt;br /&gt;
&lt;br /&gt;
=== Customizability ===&lt;br /&gt;
&lt;br /&gt;
==== Qt Widget related ====&lt;br /&gt;
&lt;br /&gt;
See also the [http://www.commontk.org/docs/html/classctkCmdLineModuleFrontendQtGui.html ctkCmdLineModuleFrontendQtGui] class for customization information.&lt;br /&gt;
&lt;br /&gt;
* Use parameters for the default XSLT file to customize widget class names for argument types&lt;br /&gt;
* Use your own XSLT file for custom transformations of XML to UI&lt;br /&gt;
* Use your own QUiLoader to control instantiation of certain widget types&lt;br /&gt;
&lt;br /&gt;
==== General ====&lt;br /&gt;
&lt;br /&gt;
* Use a custom &#039;&#039;factory&#039;&#039; to create your own GUI based on a ctkCmdLineModuleDescription instance.&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2248</id>
		<title>Documentation/Command Line Interface</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2248"/>
		<updated>2014-11-05T10:55:24Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: link to mailing list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What are CLI modules? ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CLI (commandline interface) modules&amp;quot; are standalone tools (for instance, a segmentation algorithm) that offer a commandline interface and a &#039;&#039;&#039;--xml&#039;&#039;&#039; switch that outputs a &#039;&#039;machine-readable kind of --help&#039;&#039; (XML description of their supported parameters, values, hints, etc.).  This makes it possible to use such CLIs as some kind of &amp;quot;plugins&amp;quot; for rich GUI applications that offer visualization and &#039;&#039;&#039;automatically generated GUI panels&#039;&#039;&#039; for parameter adjustment.  Also, the whole data handling is left to the host application (which may e.g. implement a batch processing pipeline, running the CLI systematically on all relevant data for a particular study), and it becomes possible to use the &#039;&#039;&#039;same algorithm in various different host applications and contexts&#039;&#039;&#039;, by agreeing on a common standard for the --xml output.&lt;br /&gt;
&lt;br /&gt;
== CTK Support for CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
CTK provides an API for interfacing with such self-describing command line modules, and the XML schema for the parameter description and most of the supported feature set for a module has been adopted from the Slicer Execution Model (the first host where this idea originated).&lt;br /&gt;
&lt;br /&gt;
The API provided by CTK allows the management, GUI generation, and asynchronous execution of such modules in a toolkit-independent and interoperable way. Application writers can rely on the provided libraries and their API to quickly integrate command line modules into their applications.  CTK also comes with an example application, called ctkCommandLineModuleExplorer which can be used to load different kinds of modules, to verify their correctness, to run - and finally inspect their output.&lt;br /&gt;
&lt;br /&gt;
;More information on CTK&#039;s support for CLI modules:&lt;br /&gt;
: There is [http://www.commontk.org/docs/html/CommandLineModules_Page.html a well-written page in the Doxygen docs] (and a [http://www.commontk.org/docs/html/group__CommandLineModules__Group.html group for the classes]), as well as [[Documentation/CLI Support in CTK|a separate wiki page]].&lt;br /&gt;
&lt;br /&gt;
== Example Applications ==&lt;br /&gt;
&lt;br /&gt;
CLI modules are already supported by a number of host applications, e.g. 3D Slicer, NiftyView / MITK Workbench, GIMIAS, MedInria, MeVisLab, nipype and more.  You can see some examples on the [[Documentation/CLI_In_Context|CLI In Context]] page.&lt;br /&gt;
&lt;br /&gt;
== Background Information / Specs ==&lt;br /&gt;
&lt;br /&gt;
Currently, the CLI module standard is documented as [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation Slicer&#039;s Execution Model].  There is an [https://github.com/commontk/CTK/blob/master/Libs/CommandLineModules/Core/Resources/ctkCmdLineModule.xsd XML schema definition] ([http://www.commontk.org/docs/html/ctkCmdLineModule.xsd auto-generated pretty-printed documentation]) that was created retroactively, and not all existing modules strictly follow the spec.  However, one problem is that the schema definition does not facilitate to specify that e.g. the order of author and description elements is irrelevant, so the schema is more strict than the actual implementation in some respects (and less strict in some other).&lt;br /&gt;
&lt;br /&gt;
You are welcome to join the [http://www.commontk.org/index.php/Getting_Started#CTK_mailing_list ctk-developers mailing list] for discussing related questions.&lt;br /&gt;
&lt;br /&gt;
TODO: The standard (Slicer execution model description) should probably be moved to the CTK domain.&lt;br /&gt;
&lt;br /&gt;
== Creating your own CLI modules ==&lt;br /&gt;
&lt;br /&gt;
There is a [https://github.com/Slicer/SlicerExecutionModel &amp;quot;SlicerExecutionModel&amp;quot;] project at GitHub that shall help you with implementing new CLIs, e.g. by offering means to &#039;&#039;&#039;automatically parse commandline arguments&#039;&#039;&#039; based on the XML spec.&lt;br /&gt;
&lt;br /&gt;
The Slicer documentation also contains instructions on [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/Modules how to extend Slicer via CLI modules] or other means.&lt;br /&gt;
&lt;br /&gt;
If you want to implement a Python-based solution, you might also be interested in [https://github.com/hmeine/MeVisLab-CLI/tree/master/Modules/Scripts/python the code available on GitHub] that was developed as part of the [http://www.na-mic.org/Wiki/index.php/2013_Summer_Project_Week:CLI_modules_in_MeVisLab CLI integration in MeVisLab] during the NA-MIC summer project week 2013.&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2247</id>
		<title>Documentation/Command Line Interface</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2247"/>
		<updated>2014-11-05T10:53:17Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: /* Creating your own CLI modules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What are CLI modules? ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CLI (commandline interface) modules&amp;quot; are standalone tools (for instance, a segmentation algorithm) that offer a commandline interface and a &#039;&#039;&#039;--xml&#039;&#039;&#039; switch that outputs a &#039;&#039;machine-readable kind of --help&#039;&#039; (XML description of their supported parameters, values, hints, etc.).  This makes it possible to use such CLIs as some kind of &amp;quot;plugins&amp;quot; for rich GUI applications that offer visualization and &#039;&#039;&#039;automatically generated GUI panels&#039;&#039;&#039; for parameter adjustment.  Also, the whole data handling is left to the host application (which may e.g. implement a batch processing pipeline, running the CLI systematically on all relevant data for a particular study), and it becomes possible to use the &#039;&#039;&#039;same algorithm in various different host applications and contexts&#039;&#039;&#039;, by agreeing on a common standard for the --xml output.&lt;br /&gt;
&lt;br /&gt;
== CTK Support for CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
CTK provides an API for interfacing with such self-describing command line modules, and the XML schema for the parameter description and most of the supported feature set for a module has been adopted from the Slicer Execution Model (the first host where this idea originated).&lt;br /&gt;
&lt;br /&gt;
The API provided by CTK allows the management, GUI generation, and asynchronous execution of such modules in a toolkit-independent and interoperable way. Application writers can rely on the provided libraries and their API to quickly integrate command line modules into their applications.  CTK also comes with an example application, called ctkCommandLineModuleExplorer which can be used to load different kinds of modules, to verify their correctness, to run - and finally inspect their output.&lt;br /&gt;
&lt;br /&gt;
;More information on CTK&#039;s support for CLI modules:&lt;br /&gt;
: There is [http://www.commontk.org/docs/html/CommandLineModules_Page.html a well-written page in the Doxygen docs] (and a [http://www.commontk.org/docs/html/group__CommandLineModules__Group.html group for the classes]), as well as [[Documentation/CLI Support in CTK|a separate wiki page]].&lt;br /&gt;
&lt;br /&gt;
== Example Applications ==&lt;br /&gt;
&lt;br /&gt;
CLI modules are already supported by a number of host applications, e.g. 3D Slicer, NiftyView / MITK Workbench, GIMIAS, MedInria, MeVisLab, nipype and more.  You can see some examples on the [[Documentation/CLI_In_Context|CLI In Context]] page.&lt;br /&gt;
&lt;br /&gt;
== Background Information / Specs ==&lt;br /&gt;
&lt;br /&gt;
Currently, the CLI module standard is documented as [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation Slicer&#039;s Execution Model].  There is an [https://github.com/commontk/CTK/blob/master/Libs/CommandLineModules/Core/Resources/ctkCmdLineModule.xsd XML schema definition] ([http://www.commontk.org/docs/html/ctkCmdLineModule.xsd auto-generated pretty-printed documentation]) that was created retroactively, and not all existing modules strictly follow the spec.  However, one problem is that the schema definition does not facilitate to specify that e.g. the order of author and description elements is irrelevant, so the schema is more strict than the actual implementation in some respects (and less strict in some other).&lt;br /&gt;
&lt;br /&gt;
TODO: The standard (Slicer execution model description) should probably be moved to the CTK domain.&lt;br /&gt;
&lt;br /&gt;
== Creating your own CLI modules ==&lt;br /&gt;
&lt;br /&gt;
There is a [https://github.com/Slicer/SlicerExecutionModel &amp;quot;SlicerExecutionModel&amp;quot;] project at GitHub that shall help you with implementing new CLIs, e.g. by offering means to &#039;&#039;&#039;automatically parse commandline arguments&#039;&#039;&#039; based on the XML spec.&lt;br /&gt;
&lt;br /&gt;
The Slicer documentation also contains instructions on [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/Modules how to extend Slicer via CLI modules] or other means.&lt;br /&gt;
&lt;br /&gt;
If you want to implement a Python-based solution, you might also be interested in [https://github.com/hmeine/MeVisLab-CLI/tree/master/Modules/Scripts/python the code available on GitHub] that was developed as part of the [http://www.na-mic.org/Wiki/index.php/2013_Summer_Project_Week:CLI_modules_in_MeVisLab CLI integration in MeVisLab] during the NA-MIC summer project week 2013.&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2245</id>
		<title>Documentation/Command Line Interface</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2245"/>
		<updated>2014-11-05T10:37:31Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: /* Background Information / Specs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What are CLI modules? ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CLI (commandline interface) modules&amp;quot; are standalone tools (for instance, a segmentation algorithm) that offer a commandline interface and a &#039;&#039;&#039;--xml&#039;&#039;&#039; switch that outputs a &#039;&#039;machine-readable kind of --help&#039;&#039; (XML description of their supported parameters, values, hints, etc.).  This makes it possible to use such CLIs as some kind of &amp;quot;plugins&amp;quot; for rich GUI applications that offer visualization and &#039;&#039;&#039;automatically generated GUI panels&#039;&#039;&#039; for parameter adjustment.  Also, the whole data handling is left to the host application (which may e.g. implement a batch processing pipeline, running the CLI systematically on all relevant data for a particular study), and it becomes possible to use the &#039;&#039;&#039;same algorithm in various different host applications and contexts&#039;&#039;&#039;, by agreeing on a common standard for the --xml output.&lt;br /&gt;
&lt;br /&gt;
== CTK Support for CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
CTK provides an API for interfacing with such self-describing command line modules, and the XML schema for the parameter description and most of the supported feature set for a module has been adopted from the Slicer Execution Model (the first host where this idea originated).&lt;br /&gt;
&lt;br /&gt;
The API provided by CTK allows the management, GUI generation, and asynchronous execution of such modules in a toolkit-independent and interoperable way. Application writers can rely on the provided libraries and their API to quickly integrate command line modules into their applications.  CTK also comes with an example application, called ctkCommandLineModuleExplorer which can be used to load different kinds of modules, to verify their correctness, to run - and finally inspect their output.&lt;br /&gt;
&lt;br /&gt;
;More information on CTK&#039;s support for CLI modules:&lt;br /&gt;
: There is [http://www.commontk.org/docs/html/CommandLineModules_Page.html a well-written page in the Doxygen docs] (and a [http://www.commontk.org/docs/html/group__CommandLineModules__Group.html group for the classes]), as well as [[Documentation/CLI Support in CTK|a separate wiki page]].&lt;br /&gt;
&lt;br /&gt;
== Example Applications ==&lt;br /&gt;
&lt;br /&gt;
CLI modules are already supported by a number of host applications, e.g. 3D Slicer, NiftyView / MITK Workbench, GIMIAS, MedInria, MeVisLab, nipype and more.  You can see some examples on the [[Documentation/CLI_In_Context|CLI In Context]] page.&lt;br /&gt;
&lt;br /&gt;
== Background Information / Specs ==&lt;br /&gt;
&lt;br /&gt;
Currently, the CLI module standard is documented as [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation Slicer&#039;s Execution Model].  There is an [https://github.com/commontk/CTK/blob/master/Libs/CommandLineModules/Core/Resources/ctkCmdLineModule.xsd XML schema definition] ([http://www.commontk.org/docs/html/ctkCmdLineModule.xsd auto-generated pretty-printed documentation]) that was created retroactively, and not all existing modules strictly follow the spec.  However, one problem is that the schema definition does not facilitate to specify that e.g. the order of author and description elements is irrelevant, so the schema is more strict than the actual implementation in some respects (and less strict in some other).&lt;br /&gt;
&lt;br /&gt;
TODO: The standard (Slicer execution model description) should probably be moved to the CTK domain.&lt;br /&gt;
&lt;br /&gt;
== Creating your own CLI modules ==&lt;br /&gt;
&lt;br /&gt;
There is a [https://github.com/Slicer/SlicerExecutionModel &amp;quot;SlicerExecutionModel&amp;quot;] project at GitHub that shall help you with implementing new CLIs, e.g. by offering means to &#039;&#039;&#039;automatically parse commandline arguments&#039;&#039;&#039; based on the XML spec.&lt;br /&gt;
&lt;br /&gt;
The Slicer documentation also contains instructions on [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/Modules how to extend Slicer via CLI modules] or other means.&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2244</id>
		<title>Documentation/Command Line Interface</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2244"/>
		<updated>2014-11-05T10:36:08Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What are CLI modules? ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CLI (commandline interface) modules&amp;quot; are standalone tools (for instance, a segmentation algorithm) that offer a commandline interface and a &#039;&#039;&#039;--xml&#039;&#039;&#039; switch that outputs a &#039;&#039;machine-readable kind of --help&#039;&#039; (XML description of their supported parameters, values, hints, etc.).  This makes it possible to use such CLIs as some kind of &amp;quot;plugins&amp;quot; for rich GUI applications that offer visualization and &#039;&#039;&#039;automatically generated GUI panels&#039;&#039;&#039; for parameter adjustment.  Also, the whole data handling is left to the host application (which may e.g. implement a batch processing pipeline, running the CLI systematically on all relevant data for a particular study), and it becomes possible to use the &#039;&#039;&#039;same algorithm in various different host applications and contexts&#039;&#039;&#039;, by agreeing on a common standard for the --xml output.&lt;br /&gt;
&lt;br /&gt;
== CTK Support for CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
CTK provides an API for interfacing with such self-describing command line modules, and the XML schema for the parameter description and most of the supported feature set for a module has been adopted from the Slicer Execution Model (the first host where this idea originated).&lt;br /&gt;
&lt;br /&gt;
The API provided by CTK allows the management, GUI generation, and asynchronous execution of such modules in a toolkit-independent and interoperable way. Application writers can rely on the provided libraries and their API to quickly integrate command line modules into their applications.  CTK also comes with an example application, called ctkCommandLineModuleExplorer which can be used to load different kinds of modules, to verify their correctness, to run - and finally inspect their output.&lt;br /&gt;
&lt;br /&gt;
;More information on CTK&#039;s support for CLI modules:&lt;br /&gt;
: There is [http://www.commontk.org/docs/html/CommandLineModules_Page.html a well-written page in the Doxygen docs] (and a [http://www.commontk.org/docs/html/group__CommandLineModules__Group.html group for the classes]), as well as [[Documentation/CLI Support in CTK|a separate wiki page]].&lt;br /&gt;
&lt;br /&gt;
== Example Applications ==&lt;br /&gt;
&lt;br /&gt;
CLI modules are already supported by a number of host applications, e.g. 3D Slicer, NiftyView / MITK Workbench, GIMIAS, MedInria, MeVisLab, nipype and more.  You can see some examples on the [[Documentation/CLI_In_Context|CLI In Context]] page.&lt;br /&gt;
&lt;br /&gt;
== Background Information / Specs ==&lt;br /&gt;
&lt;br /&gt;
Currently, the CLI module standard is documented as [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation Slicer&#039;s Execution Model].  There is an [https://github.com/commontk/CTK/blob/master/Libs/CommandLineModules/Core/Resources/ctkCmdLineModule.xsd XML schema definition] ([http://www.commontk.org/docs/html/ctkCmdLineModule.xsd auto-generated pretty-printed documentation]) that was created retroactively, and not all existing modules strictly follow the spec.  However, one problem is that XSL does not facilitate to specify that e.g. the order of author and description elements is irrelevant, so the schema is more strict than the actual implementation in some respects.&lt;br /&gt;
&lt;br /&gt;
TODO: The standard (Slicer execution model description) should probably be moved to the CTK domain.&lt;br /&gt;
&lt;br /&gt;
== Creating your own CLI modules ==&lt;br /&gt;
&lt;br /&gt;
There is a [https://github.com/Slicer/SlicerExecutionModel &amp;quot;SlicerExecutionModel&amp;quot;] project at GitHub that shall help you with implementing new CLIs, e.g. by offering means to &#039;&#039;&#039;automatically parse commandline arguments&#039;&#039;&#039; based on the XML spec.&lt;br /&gt;
&lt;br /&gt;
The Slicer documentation also contains instructions on [http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/Modules how to extend Slicer via CLI modules] or other means.&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2243</id>
		<title>Documentation/Command Line Interface</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2243"/>
		<updated>2014-11-05T10:18:21Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What are CLI modules? ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CLI (commandline interface) modules&amp;quot; are standalone tools (for instance, a segmentation algorithm) that offer a commandline interface and a &#039;&#039;&#039;--xml&#039;&#039;&#039; switch that outputs a &#039;&#039;machine-readable kind of --help&#039;&#039; (XML description of their supported parameters, values, hints, etc.).  This makes it possible to use such CLIs as some kind of &amp;quot;plugins&amp;quot; for rich GUI applications that offer visualization and &#039;&#039;&#039;automatically generated GUI panels&#039;&#039;&#039; for parameter adjustment.  Also, the whole data handling is left to the host application (which may e.g. implement a batch processing pipeline, running the CLI systematically on all relevant data for a particular study), and it becomes possible to use the &#039;&#039;&#039;same algorithm in various different host applications and contexts&#039;&#039;&#039;, by agreeing on a common standard for the --xml output.&lt;br /&gt;
&lt;br /&gt;
== CTK Support for CLI Modules ==&lt;br /&gt;
&lt;br /&gt;
CTK provides an API for interfacing with such self-describing command line modules, and the XML schema for the parameter description and most of the supported feature set for a module has been adopted from the Slicer Execution Model (the first host where this idea originated).&lt;br /&gt;
&lt;br /&gt;
The API provided by CTK allows the management, GUI generation, and asynchronous execution of such modules in a toolkit-independent and interoperable way. Application writers can rely on the provided libraries and their API to quickly integrate command line modules into their applications.  CTK also comes with an example application, called ctkCommandLineModuleExplorer which can be used to load different kinds of modules, to verify their correctness, to run - and finally inspect their output.&lt;br /&gt;
&lt;br /&gt;
;More information on CTK&#039;s support for CLI modules:&lt;br /&gt;
: There is [http://www.commontk.org/docs/html/CommandLineModules_Page.html|a well-written page in the Doxygen docs] (and a [http://www.commontk.org/docs/html/group__CommandLineModules__Group.html|group for the classes]), as well as [[Documentation/CLI Support in CTK|a separate wiki page]].&lt;br /&gt;
&lt;br /&gt;
== Example Applications ===&lt;br /&gt;
&lt;br /&gt;
CLI modules are already supported by a number of host applications, e.g. 3D Slicer, NiftyView / MITK Workbench, GIMIAS, MedInria, MeVisLab, nipype and more.  You can see some examples on the [[Documentation/CLI_In_Context|CLI In Context]] page.&lt;br /&gt;
&lt;br /&gt;
== Background Information / Specs ==&lt;br /&gt;
&lt;br /&gt;
Currently, the CLI module standard is documented as [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation|Slicer&#039;s Execution Model].  The XML schema was created retroactively, and not all existing modules strictly follow the spec.  However, one problem is that XSL does not facilitate to specify that e.g. the order of author and description elements is irrelevant, so the schema is more strict than the actual implementation in some respects.&lt;br /&gt;
&lt;br /&gt;
TODO: The standard (Slicer execution model description) should probably be moved to the CTK domain.&lt;br /&gt;
&lt;br /&gt;
== Creating your own CLI modules ==&lt;br /&gt;
&lt;br /&gt;
Additional resources that may help you to implement new CLIs &lt;br /&gt;
&lt;br /&gt;
The Slicer documentation http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Developers/Modules&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2241</id>
		<title>Documentation/Command Line Interface</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/Command_Line_Interface&amp;diff=2241"/>
		<updated>2014-11-05T09:15:40Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: moved Documentation/Command Line Interface to Documentation/CLI Support in CTK: &amp;quot;Command Line Interface&amp;quot; shall be a more general overview page soon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Documentation/CLI Support in CTK]]&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/CLI_Support_in_CTK&amp;diff=2240</id>
		<title>Documentation/CLI Support in CTK</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/CLI_Support_in_CTK&amp;diff=2240"/>
		<updated>2014-11-05T09:15:40Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: moved Documentation/Command Line Interface to Documentation/CLI Support in CTK: &amp;quot;Command Line Interface&amp;quot; shall be a more general overview page soon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Command Line Interface (CLI) support in CTK will primarly focus on providing an API for working with existing CLI modules. Providing utilities and tools for creating CLI modules from scratch is a desired addition but there are no concrete plans for this yet. See [http://www.slicer.org/slicerWiki/index.php/Slicer3:Execution_Model_Documentation Slicer3:Execution Model Documentation] for the definition of the standard. For example integration in different frameworks, see [[Documentation/CLI_In_Context|CLI In Context]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the Code ===&lt;br /&gt;
&lt;br /&gt;
The code is available in the CTK master:&lt;br /&gt;
&lt;br /&gt;
https://github.com/commontk/CTK&lt;br /&gt;
&lt;br /&gt;
Enable the following CMake options to be able to play with the code:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BUILD_TESTING&#039;&#039;&#039; (for creating CLI test modules)&lt;br /&gt;
* &#039;&#039;&#039;CTK_APP_ctkCommandLineModuleExplorer&#039;&#039;&#039; (small program allowing you to test-drive CLI modules using the CTK CLI module API, enables all the options below)&lt;br /&gt;
* &#039;&#039;&#039;CTK_LIB_CommandLineModules/Core&#039;&#039;&#039; (the CTK library providing the core CLI module API)&lt;br /&gt;
* &#039;&#039;&#039;CTK_LIB_CommandLineModules/Frontend/QtGui&#039;&#039;&#039; (the CTK library providing GUI generation using the Qt widgets)&lt;br /&gt;
* &#039;&#039;&#039;CTK_LIB_CommandLineModules/Backend/LocalProcess&#039;&#039;&#039; (the CTK library for executing local executable files as command line modules)&lt;br /&gt;
&lt;br /&gt;
=== API Design ===&lt;br /&gt;
&lt;br /&gt;
This is a partially overview of the API design, showing the GUI generation process for the Qt front-end.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graphviz&amp;gt;&lt;br /&gt;
digraph G {&lt;br /&gt;
graph [&lt;br /&gt;
rankdir = &amp;quot;TB&amp;quot;&lt;br /&gt;
];&lt;br /&gt;
node [&lt;br /&gt;
fontsize = &amp;quot;16&amp;quot;&lt;br /&gt;
shape = &amp;quot;ellipse&amp;quot;&lt;br /&gt;
];&lt;br /&gt;
edge [&lt;br /&gt;
];&lt;br /&gt;
subgraph cluster_0 {&lt;br /&gt;
  label = &amp;quot;CTK&amp;quot;;&lt;br /&gt;
  color = lightGray;&lt;br /&gt;
  &amp;quot;xmlFile&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; Command Line Module XML (.xml)| &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
  &amp;quot;gui&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; Qt GUI | &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
  &amp;quot;uiFile&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; CLI UI (.ui) | &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
  &amp;quot;ctkCLIModuleDescription&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; ctkCmdLineModuleDescription| &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
subgraph cluster_1 {&lt;br /&gt;
  label = &amp;quot;3D Slicer&amp;quot;;&lt;br /&gt;
  color = gray;&lt;br /&gt;
  &amp;quot;vtkMRMLParametersNode&amp;quot; [&lt;br /&gt;
  label = &amp;quot;{&amp;lt;f0&amp;gt; vtkMRMLParametersNode| &amp;lt;f1&amp;gt;}&amp;quot;&lt;br /&gt;
  shape = &amp;quot;record&amp;quot;&lt;br /&gt;
  ];&lt;br /&gt;
}&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f0:e -&amp;gt; &amp;quot;xmlFile&amp;quot;:f0:ne [label = &amp;quot;XSD file check&amp;quot; ];&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f1 -&amp;gt; &amp;quot;uiFile&amp;quot;:f0 [label = &amp;quot;QtGui XSL file&amp;quot; ];&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f1 -&amp;gt; &amp;quot;uiFile&amp;quot;:f0 [label = &amp;quot;&amp;quot; style=invis];&lt;br /&gt;
&amp;quot;xmlFile&amp;quot;:f1 -&amp;gt; &amp;quot;ctkCLIModuleDescription&amp;quot;:f0 [label=ctkCmdLineModuleXmlParser];&lt;br /&gt;
&amp;quot;ctkCLIModuleDescription&amp;quot;:f1 -&amp;gt; &amp;quot;vtkMRMLParametersNode&amp;quot;:f0 [label=create];&lt;br /&gt;
&amp;quot;uiFile&amp;quot;:f1 -&amp;gt; &amp;quot;gui&amp;quot;:f0 [label = QUiLoader];&lt;br /&gt;
&amp;quot;gui&amp;quot;:f1:e -&amp;gt; &amp;quot;vtkMRMLParametersNode&amp;quot;:f1:w [dir = both label=synchronize constraint=false];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graphviz&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Overview of some central classes and their scope.&lt;br /&gt;
&lt;br /&gt;
Please see the full [file:///opt/ctk-builds/CTK-debug-gcc/CTK-build/Documentation/html/group__CommandLineModulesCore__API.html Core API] for a list of available classes and their documentation.&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleDescription ====&lt;br /&gt;
&lt;br /&gt;
C++ API for accessing the command line arguments meta-data defined in the XML description.&lt;br /&gt;
&lt;br /&gt;
This class is &#039;&#039;read-only&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleReference ====&lt;br /&gt;
&lt;br /&gt;
A handle to a command line module.&lt;br /&gt;
&lt;br /&gt;
* Get ctkCmdLineModuleDescription class&lt;br /&gt;
* Convenient meta-data access (module location etc.)&lt;br /&gt;
* Used to crate actual ctkCmdLineModuleFrontend instances from specific ctkCmdLineModuleFrontendFactory implementations&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleFrontend ====&lt;br /&gt;
&lt;br /&gt;
Represents an invokable command line module and its current parameter values.&lt;br /&gt;
&lt;br /&gt;
Multiple instances for the same ModuleReference may exist.&lt;br /&gt;
&lt;br /&gt;
* Set/Get individual parameter values or all at once&lt;br /&gt;
* Reset to default parameters&lt;br /&gt;
* Get GUI representation (QObject*)&lt;br /&gt;
* Get parameter value change notifications&lt;br /&gt;
&lt;br /&gt;
==== ctkCmdLineModuleFuture ====&lt;br /&gt;
&lt;br /&gt;
Returned by the ctkCmdLineModuleManager run method and used to communicate with a running module.&lt;br /&gt;
&lt;br /&gt;
* Run/Abort &lt;br /&gt;
* Status&lt;br /&gt;
* Progress reporting&lt;br /&gt;
 &lt;br /&gt;
==== ctkCmdLineModuleManager ====&lt;br /&gt;
&lt;br /&gt;
Responsible for managing and running other ctkCmdLineModule* classes.&lt;br /&gt;
 &lt;br /&gt;
* Register specific back-ends for handling different types of modules&lt;br /&gt;
* Register/Unregister modules&lt;br /&gt;
* Get ctkCmdLineModuleReference objects&lt;br /&gt;
* Run ctkCmdLineModuleFrontend objects&lt;br /&gt;
&lt;br /&gt;
=== Customizability ===&lt;br /&gt;
&lt;br /&gt;
==== Qt Widget related ====&lt;br /&gt;
&lt;br /&gt;
See also the [http://www.commontk.org/docs/html/classctkCmdLineModuleFrontendQtGui.html ctkCmdLineModuleFrontendQtGui] class for customization information.&lt;br /&gt;
&lt;br /&gt;
* Use parameters for the default XSLT file to customize widget class names for argument types&lt;br /&gt;
* Use your own XSLT file for custom transformations of XML to UI&lt;br /&gt;
* Use your own QUiLoader to control instantiation of certain widget types&lt;br /&gt;
&lt;br /&gt;
==== General ====&lt;br /&gt;
&lt;br /&gt;
* Use a custom &#039;&#039;factory&#039;&#039; to create your own GUI based on a ctkCmdLineModuleDescription instance.&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Main_Page&amp;diff=2239</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Main_Page&amp;diff=2239"/>
		<updated>2014-11-05T09:13:12Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: Command_Line_Interface overview/read more link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;CTK - The Common Toolkit&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; margin-left:12px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;wikiscript type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://www.ohloh.net/p/483293/widgets/project_basic_stats.js&amp;quot;&amp;gt;&amp;lt;/wikiscript&amp;gt;&lt;br /&gt;
&amp;lt;wikiscript type=&amp;quot;text/javascript&amp;quot;&amp;gt;document.write(&#039;&amp;lt;style&amp;gt;div.gadget { border-color: #bbb; }&amp;lt;/style&amp;gt;&#039;)&amp;lt;/wikiscript&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal of CTK is to support biomedical image computing. CTK code is licensed under [http://www.apache.org/licenses/LICENSE-2.0.html Apache 2.0]. This means that users of CTK are allowed to use the code for academic, commercial, or other purposes without paying license fees or being restricted in their ability to redistribute their code or keep it private. &lt;br /&gt;
&lt;br /&gt;
CTK works on topics that are not covered by existing toolkits that support the mutual interest and needs of the CTK community. The main scope of current CTK efforts includes the topics &#039;&#039;DICOM&#039;&#039;, &#039;&#039;DICOM Application Hosting&#039;&#039;, &#039;&#039;Widgets&#039;&#039;, and &#039;&#039;Plugin Framework&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:table-row;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:table-cell; max-width:450px;&amp;quot;&amp;gt;&lt;br /&gt;
{{documentation/g-box-start|Documentation/Dicom_Overview|DICOM}}Provides high-level classes supporting query and retrieve operations from PACS and local databases. Includes Qt widgets to easily set-up a server connection and to send queries and view the results. [http://dicom.offis.de/dcmtk DCMTK] is used as the underlying toolkit.&lt;br /&gt;
{{documentation/g-box-links|imggalurl=|apiurl=http://www.commontk.org/docs/html/group__Project__DICOM.html|issuelabel=DICOM}}. &lt;br /&gt;
[[Documentation/Dicom_Overview | Read more...]]&lt;br /&gt;
CTK is also the home of [http://dcmjs.org dcmjs].&lt;br /&gt;
{{documentation/g-box-end}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:table-cell; max-width:450px;&amp;quot;&amp;gt;&lt;br /&gt;
{{documentation/g-box-start|Documentation/DicomApplicationHosting|DICOM Application Hosting}}Aims at creating a C++ reference implementation of the [[media:DicomAppHostingSpecs.pdf | DICOM Part 19 Application Hosting specifications]]. It provides an infrastructure to create both hosts and hosted applications. The project is still in alpha status but may be useful for conformance testing and initial experimentation.&lt;br /&gt;
{{documentation/g-box-links|imggalurl=|apiurl=http://www.commontk.org/docs/html/group__Project__DICOMAppHosting.html|issuelabel=DICOMApplicationHosting}}&lt;br /&gt;
[[Documentation/DicomApplicationHosting | Read more...]]&lt;br /&gt;
{{documentation/g-box-end}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:table-row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:table-cell; max-width:450px;&amp;quot;&amp;gt;&lt;br /&gt;
{{documentation/g-box-start|Documentation/Widgets|Widgets}}A collection of Qt Widgets for usage in biomedical imaging applications.&lt;br /&gt;
{{documentation/g-box-links|imggalurl=Documentation/ImageGallery|apiurl=http://www.commontk.org/docs/html/group__Project__Widgets.html|issuelabel=Widgets}}&lt;br /&gt;
[[Documentation/Widgets | Read more...]]&lt;br /&gt;
{{documentation/g-box-end}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:table-cell; max-width:450px;&amp;quot;&amp;gt;&lt;br /&gt;
{{documentation/g-box-start|Documentation/Plugin_Framework|Plugin Framework}}A dynamic component system for C++, modeled after the [http://www.osgi.org OSGi] specifications. It enables a development model where applications are (dynamically) composed of many different (reusable) components following a service oriented approach.&lt;br /&gt;
{{documentation/g-box-links|imggalurl=|apiurl=http://www.commontk.org/docs/html/group__PluginFramework.html|issuelabel=PluginFramework}}&lt;br /&gt;
[[Documentation/Plugin_Framework | Read more...]]&lt;br /&gt;
{{documentation/g-box-end}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:table-row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:table-cell; max-width:450px;&amp;quot;&amp;gt;&lt;br /&gt;
{{documentation/g-box-start|Documentation/Command_Line_Interface|Command Line Interfaces}}A technology that allows the algorithms written as self-contained executables to be used in multiple end-user application environments without modifications.&lt;br /&gt;
{{documentation/g-box-links|imggalurl=|apiurl=http://www.commontk.org/docs/html/group__CommandLineModules__Group.html|issuelabel=CmdLineModules}}&lt;br /&gt;
[[Documentation/Command_Line_Interface | Read more...]]&lt;br /&gt;
{{documentation/g-box-end}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
=== Important Links ===&lt;br /&gt;
&lt;br /&gt;
Although the CTK efforts are concentrated on the topics described above, there are a couple of other working areas covering topics like &#039;&#039;[[Interoperability | interoperability]]&#039;&#039; and &#039;&#039;software testing&#039;&#039; which might be of interest to the biomedical imaging community. Please see the links given below for more details.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot; width=&amp;quot;98%&amp;quot; valign=&amp;quot;top&amp;quot; cellspacing=&amp;quot;7&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;33%&amp;quot;|&lt;br /&gt;
! |&lt;br /&gt;
! width=&amp;quot;33%&amp;quot;|&lt;br /&gt;
! |&lt;br /&gt;
! width=&amp;quot;33%&amp;quot;|&lt;br /&gt;
|- &lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #555555; font-size: 18px; font-weight: bold;&amp;quot;&amp;gt;About CTK&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* [[News]]&lt;br /&gt;
* [[Events]]&lt;br /&gt;
* [[The Team]]&lt;br /&gt;
* [[CTK-Roadmap | CTK Roadmap Document]]&lt;br /&gt;
* [[Interoperability]]&lt;br /&gt;
* [[Documentation | Technical Documentation]]&lt;br /&gt;
* [[CTKBarCamp | CTKBarCamp]]&lt;br /&gt;
&lt;br /&gt;
|bgcolor=&amp;quot;#CCCCCC&amp;quot;|&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #555555; font-size: 18px; font-weight: bold;&amp;quot;&amp;gt;CTK Users&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* [[Getting Started]]&lt;br /&gt;
* [[Build Instructions]]&lt;br /&gt;
* [http://www.commontk.org/docs/html/classes.html API Documentation]&lt;br /&gt;
* [[Tools:_Application_launcher|Application Launcher]]&lt;br /&gt;
&lt;br /&gt;
|bgcolor=&amp;quot;#CCCCCC&amp;quot;|&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #555555; font-size: 18px; font-weight: bold;&amp;quot;&amp;gt;CTK Developers&amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* [http://github.com/commontk/CTK Source Code]&lt;br /&gt;
* [http://my.cdash.org/index.php?project=CTK Dashboard]&lt;br /&gt;
* [[Contributing to CTK]]&lt;br /&gt;
* [http://github.com/commontk/CTK/issues/new Report a problem]&lt;br /&gt;
* [[Project Ideas]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
{|cellspacing=&amp;quot;16px&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|CTK builds on some awesome technology: &lt;br /&gt;
| [[File:200px-GitHub.png|x26px|link=http://github.com/commontk/CTK]]&lt;br /&gt;
| [[File:Cmake-logo.png|x26px|link=Documentation/BuildSystem_Description]]&lt;br /&gt;
| [[File:Qt-logo.png|x26px|link=http://qt.nokia.com]]&lt;br /&gt;
| [[File:Python-powered-w-100x40.png|x26px|link=Documentation/Python_Scripting]]&lt;br /&gt;
| [[File:Dcmtk-logo.png|x26px|link=http://www.dcmtk.org]]&lt;br /&gt;
| [[File:ItkLogo med.png|x26px|link=http://www.itk.org]]&lt;br /&gt;
| [[File:VTKlogo.png|x26px|link=http://www.vtk.org]]&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Getting_Started&amp;diff=2233</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Getting_Started&amp;diff=2233"/>
		<updated>2014-11-04T10:19:53Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: correct signup URL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Commontk getting started.png|50px]]&lt;br /&gt;
If you are new to CTK and want to learn more about the scope of the toolkit, please read the [[Main Page]].&lt;br /&gt;
=How to=&lt;br /&gt;
* Build CTK: Instructions to build CTK are available [[Build_Instructions|here]].&lt;br /&gt;
* Integrate CTK: The [http://www.github.com/commontk/Examples Examples] project shows how to integrate CTK within an application.&lt;br /&gt;
* Add CTK widgets in Qt Designer: [[CTK_In_QtDesigner|Step by step guide]] to load the CTK plugins in the Qt Designer&lt;br /&gt;
&lt;br /&gt;
=CTK mailing list=&lt;br /&gt;
For asking questions, please use the mailing list:&lt;br /&gt;
&lt;br /&gt;
 ctk-developers@commontk.org&lt;br /&gt;
&lt;br /&gt;
The signup form and historical data for the mailing list is:&lt;br /&gt;
&lt;br /&gt;
 http://public.kitware.com/mailman/listinfo/ctk-developers&lt;br /&gt;
&lt;br /&gt;
The mailing list archives are available here:&lt;br /&gt;
&lt;br /&gt;
  http://public.kitware.com/pipermail/ctk-developers/&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=CTK-Hackfest-Nov-2014&amp;diff=2182</id>
		<title>CTK-Hackfest-Nov-2014</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=CTK-Hackfest-Nov-2014&amp;diff=2182"/>
		<updated>2014-10-23T05:41:42Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: /* Attendees */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event pictures ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Progress ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date:&#039;&#039;&#039; November 3-7, 2014&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Location:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
German Cancer Research Center, Heidelberg, Germany&lt;br /&gt;
&lt;br /&gt;
More details to follow.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Goal:&#039;&#039;&#039; A follow on to the [[Commontk:Current_events#Past_events|wildly successful previous hackfests!]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements:&#039;&#039;&#039; Attendees must be willing to spend their time during the event writing ctk code that contributes to the main [[CTK-Roadmap | ctk roadmap]].  This means spending the week immersed in C++, Qt, DCMTK, CMake, and related technologies.  People who do not feel qualified for this task are politely not invited :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group size:&#039;&#039;&#039; Maximum 20 participants so we can have a manageable working meeting.  The organizing committee will invite and select participants based on input from [[TheTeam]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site Hosts:&#039;&#039;&#039; Marco Nolden, Sascha Zelzer, Ivo Wolf&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Organizing Committee:&#039;&#039;&#039; Steve Pieper, Ivo Wolf, Stephen Aylward&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Events:&#039;&#039;&#039; Future hackfests will be announced in advance, and we hope lots of people will be interested in participating.  The venue and activities at future hackfests will be determined based on the number of active participants in the project.   We welcome participation via the CTK email lists, the source code repository, and this website.&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
* So far we have received confirmation for the following people (in no particular order). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please fill in your intentions in terms of common accommodation.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;Participants&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Name&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Organization&lt;br /&gt;
|-&lt;br /&gt;
|Marco Nolden&lt;br /&gt;
|German Cancer Research Center, Heidelberg, Germany&lt;br /&gt;
|-&lt;br /&gt;
|Sascha Zelzer&lt;br /&gt;
|German Cancer Research Center, Heidelberg, Germany&lt;br /&gt;
|-&lt;br /&gt;
|Andreas Fetzer&lt;br /&gt;
|German Cancer Research Center, Heidelberg, Germany&lt;br /&gt;
|-&lt;br /&gt;
|Ivo Wolf&lt;br /&gt;
|Mannheim University of Applied Sciences, Germany&lt;br /&gt;
|-&lt;br /&gt;
|Steve Pieper&lt;br /&gt;
|Isomics, Inc., USA&lt;br /&gt;
|-&lt;br /&gt;
|Michael Onken&lt;br /&gt;
|Open Connections GmbH / OFFIS&lt;br /&gt;
|-&lt;br /&gt;
|Jean-Christophe Fillion-Robin&lt;br /&gt;
|Kitware, Inc., USA&lt;br /&gt;
|-&lt;br /&gt;
|Miklos Espak&lt;br /&gt;
|University College London, UK&lt;br /&gt;
|-&lt;br /&gt;
|Nicolas Toussaint&lt;br /&gt;
|University College London, UK&lt;br /&gt;
|-&lt;br /&gt;
|Gergely Zombori&lt;br /&gt;
|University College London, UK&lt;br /&gt;
|-&lt;br /&gt;
|Christian Askeland&lt;br /&gt;
|SINTEF Medical Technology, Trondheim, Norway&lt;br /&gt;
|-&lt;br /&gt;
|Stefan Baumann&lt;br /&gt;
|Basel, Switzerland&lt;br /&gt;
|-&lt;br /&gt;
|Hans Meine&lt;br /&gt;
|Fraunhofer MEVIS, Germany&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;Google Hangout Participants&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Name&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Organization&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Availablity (Central European Time)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* People who manifested interest in joining the fest. Please move your names up to the confirmed table, with the details as soon as you can to facilitate discussions with potential hotels.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot; style=&amp;quot;text-align:left; border:1px solid black;&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;&#039;&#039;Confirmed&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Name&lt;br /&gt;
! scope=col style=&amp;quot;background:#cde6f8;&amp;quot;| Organization&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}}There were also other invitations sent to active people on the community, and people who recently showed interest. When their intent will be known they will be added to the list.&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
Developers should bring a laptop with the [http://github.com/commontk/CTK current CTK source code] downloaded and [[Build_Instructions|built]].&lt;br /&gt;
&lt;br /&gt;
Use the [http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers CTK developers mailing list] to discuss build issues and topics for ongoing work.&lt;br /&gt;
&lt;br /&gt;
Phone conferences have been scheduled in the weeks leading to the event:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;https://plus.google.com/hangouts/_/g3vi3lz7sycalj74ys2xpnpr3ya&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Topics and Projects ==&lt;br /&gt;
&lt;br /&gt;
Consider reading [http://www.commontk.org/index.php/Contributing_to_CTK#Integrate_your_new_feature Contributing_to_CTK#Integrate_your_new_feature]&lt;br /&gt;
&lt;br /&gt;
Reminder: when integrating branches, remember to use --log --no-ff when merging.&lt;br /&gt;
&lt;br /&gt;
We plan to have concrete hacking topics as well as dedicated discussions in smaller groups. People are encouraged to show their interest in a particular subject by adding their name to the list below.&lt;br /&gt;
&lt;br /&gt;
=== Hacking Topics ===&lt;br /&gt;
&lt;br /&gt;
==== Infrastructure ====&lt;br /&gt;
&lt;br /&gt;
* Qt5 migration (Christian)&lt;br /&gt;
* Packaging / install support (Marco)&lt;br /&gt;
* Dashboard&lt;br /&gt;
** General Situation: Continuous/Nightly clients, coverage&lt;br /&gt;
** Configurations: Qt4, Qt5, etc.&lt;br /&gt;
** Travis CI (Sascha, Steve)&lt;br /&gt;
&lt;br /&gt;
==== DICOM ====&lt;br /&gt;
&lt;br /&gt;
* Multi-frame support (Steve, Christian, Michael)&lt;br /&gt;
* Making CLIs read and write valid DICOM (Steve, Michael)&lt;br /&gt;
* Anonymization (Andreas Fetzer, Marco, Steve, Stefan)&lt;br /&gt;
** Client-side options: gdcmanon, dcmtk (?), dcmjs, DicomCleaner, CTP...&lt;br /&gt;
&lt;br /&gt;
==== XNAT ====&lt;br /&gt;
&lt;br /&gt;
* Improve and extend the XNAT API (Sascha Zelzer, Miklos Espak)&lt;br /&gt;
** Data editing&lt;br /&gt;
** Caching&lt;br /&gt;
** Filtered data query based on data type and/or properties&lt;br /&gt;
** Launch pipelines (remote) and follow progress&lt;br /&gt;
&lt;br /&gt;
==== CLI ====&lt;br /&gt;
&lt;br /&gt;
* Make it customisable what options to generate to the final command (Gergely Zombori)&lt;br /&gt;
&lt;br /&gt;
==== ?? ====&lt;br /&gt;
&lt;br /&gt;
=== Planned Discussions ===&lt;br /&gt;
* Possible extensions of CTK to the IGT domain&lt;br /&gt;
** OpenIGT link&lt;br /&gt;
** ...&lt;br /&gt;
* QIICR Presentation&lt;br /&gt;
==== ... ====&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
==== Monday ====&lt;br /&gt;
&lt;br /&gt;
Opening discussion&lt;br /&gt;
* Review topics and projects&lt;br /&gt;
* Plans for the week&lt;br /&gt;
* Review [https://github.com/commontk/CTK/issues?state=open open issues on github].&lt;br /&gt;
&lt;br /&gt;
Evening:&lt;br /&gt;
&lt;br /&gt;
==== Tuesday ====&lt;br /&gt;
&lt;br /&gt;
During the day: hack, hack, hack...&lt;br /&gt;
&lt;br /&gt;
Evening:&lt;br /&gt;
&lt;br /&gt;
==== Wednesday ====&lt;br /&gt;
&lt;br /&gt;
During the day: hack, hack, hack...&lt;br /&gt;
&lt;br /&gt;
16:00 Famous Old City tour guided by Hans-Peter Meinzer&lt;br /&gt;
&lt;br /&gt;
==== Thursday ====&lt;br /&gt;
&lt;br /&gt;
During the day: hack, hack, hack...&lt;br /&gt;
&lt;br /&gt;
Evening: &lt;br /&gt;
&lt;br /&gt;
==== Friday ====&lt;br /&gt;
&lt;br /&gt;
During the day: hack, hack, hack...&lt;br /&gt;
&lt;br /&gt;
11:00: Closing discussion&lt;br /&gt;
&lt;br /&gt;
Afternoon: hack or travel&lt;br /&gt;
&lt;br /&gt;
== Travel &amp;amp; Hotel ==&lt;br /&gt;
&lt;br /&gt;
===Local contacts===&lt;br /&gt;
&lt;br /&gt;
* Marco Nolden (m.nolden@dkfz-heidelberg.de)&lt;br /&gt;
* Sascha Zelzer (s.zelzer@dkfz-heidelberg.de)&lt;br /&gt;
* Andreas Fetzer (a.fetzer@dkfz-heidelberg.de)&lt;br /&gt;
&lt;br /&gt;
===Transportation===&lt;br /&gt;
&lt;br /&gt;
It takes about an hour from Frankfurt Airport (FRA) to Heidelberg Main Station with one change in Mannheim. If you stay in the Old Town you can also look for connections going to &amp;quot;Heidelberg Altstadt&amp;quot;. You can look it up at [http://www.bahn.de/p_en/view/index.shtml Deutsche Bahn], but they run quite frequently.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Local:&#039;&#039;&#039; from the Old Town, &amp;quot;Universitätsplatz&amp;quot;, runs bus number 32 via Main Station to DKFZ, exit at &amp;quot;Chirurgische Klinik&amp;quot;, bus direction is &amp;quot;Neuenheim&amp;quot;. After you exit, DKFZ is on your right.&lt;br /&gt;
&lt;br /&gt;
During the day the bus runs every 10 minutes in both directions, timetables are also available at [http://fahrplanauskunft.vrn.de/vrn/XSLT_TRIP_REQUEST2?language=en VRN].&lt;br /&gt;
&lt;br /&gt;
===Lodging===&lt;br /&gt;
&lt;br /&gt;
We recommend to stay in the historic Old Town. There is an easy direct bus ride every 10 minutes from there to DKFZ.&lt;br /&gt;
&lt;br /&gt;
We have reserved a number of rooms at the [http://www.hollaender-hof.de/en/ Holländer Hof] hotel! Please use &amp;quot;CTK 2014&amp;quot; when you do a reservation there. Of course there are plenty of other hotels in that area, e.g. [http://www.hotel-goldener-hecht.de/ Goldener Hecht] or the oldest house in town, [http://www.ritter-heidelberg.de/ Hotel zum Ritter].&lt;br /&gt;
&lt;br /&gt;
===Weather===&lt;br /&gt;
&lt;br /&gt;
November is a rather wet month. [http://www.weather-and-climate.com/average-monthly-Rainfall-Temperature-Sunshine,heidelberg,Germany Average weather in Heidelberg]&lt;br /&gt;
&lt;br /&gt;
===Food===&lt;br /&gt;
&lt;br /&gt;
Plan on having breakfast at your hotel before the meeting. Please email the organizers if you have any allergies or dietary restrictions. &lt;br /&gt;
&lt;br /&gt;
Being a university and hospital campus, there are several lunch possibilities, including cafeterias, a students mensa, and two restaurants.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===Optional Activities in the Area===&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=File:Niftyreg-MeVisLab.png&amp;diff=2061</id>
		<title>File:Niftyreg-MeVisLab.png</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=File:Niftyreg-MeVisLab.png&amp;diff=2061"/>
		<updated>2013-12-04T13:18:52Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: uploaded a new version of &amp;amp;quot;File:Niftyreg-MeVisLab.png&amp;amp;quot;: updated version for CLI in context page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;reg_aladin in MeVisLab (for &amp;quot;CLI in context&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=Documentation/CLI_In_Context&amp;diff=2060</id>
		<title>Documentation/CLI In Context</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=Documentation/CLI_In_Context&amp;diff=2060"/>
		<updated>2013-12-04T13:08:52Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: add MeVisLab screenshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some example and notes on different integration of CLI modules in different frameworks including CTK (see [[Documentation/Command_Line_Interface]]). The first interoperability testing was done during the [http://www.creatis.insa-lyon.fr/Interoperability_workshop third] VPH NoE Imaging workshop hold in Lyon, France on October 22-23, 2012. It will be continued in consecutive hackfests. The aim is to try to plug in CLI modules in CLI compatible frameworks and come up with possible improvement of the CLI standard, advice to CLI module and CLI framework developers.&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
&lt;br /&gt;
* [[CTK-Hackfest-Nov-2011|CTK Hackfest]] in Sophia Antipolis, France in November 2011&lt;br /&gt;
** Preliminary work to integrate CLI into GIMIAS&lt;br /&gt;
* [[CTK-Hackfest-Jul-2012|CTK Hackfest]] in Boston, USA in July 2012&lt;br /&gt;
** Preliminary work to integrate CLI into MITK&lt;br /&gt;
* [http://www.creatis.insa-lyon.fr/Interoperability_workshop 3rd VPH NoE Imaging workshop] in Lyon, France on October 22-23, 2012&lt;br /&gt;
** [[#First_Interoperability_tests|First Interoperability tests]] with CTK, GIMIAS, NiftyView and Slicer&lt;br /&gt;
* [[CTK-Hackfest-Dec-2012|CTK Hackfest]] in Bologna, Italy on December, 2012&lt;br /&gt;
** Preliminary work to integrate CLI into medInria, MAF3&lt;br /&gt;
** Semi-Automatic framework CLI integration tests&lt;br /&gt;
* [[CTK-Hackfest-Nov-2013|CTK Hackfest]] in London, UK on November, 2013&lt;br /&gt;
** [[#Second_Interoperability_tests|Second Interoperability tests]]: GIMIAS&#039;s Command Line Plugins in CTK&#039;s Command Line Module Explorer, CTK&#039;s Command Line Modules in Taverna Workbench&lt;br /&gt;
&lt;br /&gt;
== First Interoperability tests ==&lt;br /&gt;
&lt;br /&gt;
These first tests mainly concern the integration of niftyreg (registration algorithms from UCL). The different stages of integration are: load, execute and results. Meaning that the CLI module can be loaded. executed and provides the same results as if it was run only from the command line. The problems we encountered were:&lt;br /&gt;
&lt;br /&gt;
* GIMIAS does not support to have a `default` element different that `None` for the output, not sure about the `advanced` option for the `parameters` element &lt;br /&gt;
* niftyreg was using `fileExtensions` with stars (`*.nii`) which is not supported by neither GIMIAS nor Slicer (the star is directly used in the file name)&lt;br /&gt;
* The default output folder should be set to the user folder and not the running one, otherwise the CLI module can crash because they were denied access to write in that folder (for example `Program Files` under Windows)&lt;br /&gt;
* What to do with CLI modules that have dependencies on shared libraries with the platform but of different versions? Platforms should have the option to only use the libraries shipped with the CLI module&lt;br /&gt;
* Platforms should align the way they treat data since if two load data differently, the same CLI module could give different results&lt;br /&gt;
&lt;br /&gt;
It would be interesting to create test CLI modules for these integration tests. For example one that exposes all possible types of options, one running a simple algorithm without any dependencies (as niftyreg) and one with dependencies.&lt;br /&gt;
&lt;br /&gt;
Some thoughts on the tested platforms:&lt;br /&gt;
* Niftyview has nice controls on the way CLI modules are found and loaded (control on the `XML` validation)&lt;br /&gt;
* Slicer has a nice display of the loaded and non loaded CLI modules (appear in red, there could be more explanation why the loading failed)&lt;br /&gt;
&lt;br /&gt;
Test datasets:&lt;br /&gt;
&lt;br /&gt;
The test datasets [https://drive.google.com/file/d/0B3kBRNGHGeP0bGFjZlZNcHJLNEU/edit?usp=sharing source_2down.nii] and [https://drive.google.com/file/d/0B3kBRNGHGeP0N2gzZTVYV2JTX28/edit?usp=sharing target_2down.nii] were obtained from [http://brainweb.bic.mni.mcgill.ca/brainweb BrainWeb] and [http://adni.loni.usc.edu/ ADNI].&lt;br /&gt;
&lt;br /&gt;
Here are the snapshots of niftyreg on the different platforms:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;niftyreg on the different platforms&amp;quot; widths=&amp;quot;400px&amp;quot; heights=&amp;quot;300px&amp;quot; perrow=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
Image:Niftyreg-ctk.png|CTK command line module explorer &lt;br /&gt;
Image:Niftyreg-slicer.png|3D Slicer&lt;br /&gt;
Image:Niftyreg-niftyview.png|NiftyView&lt;br /&gt;
Image:Niftyreg-gimias.png|GIMIAS&lt;br /&gt;
Image:medinria-cli-niftyreg.png|MedInria &lt;br /&gt;
Image:Niftyreg-MeVisLab.png|MeVisLab&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Second Interoperability tests ==&lt;br /&gt;
&lt;br /&gt;
* GIMIAS&#039;s Command Line Plugins in CTK&#039;s Command Line Module Explorer&lt;br /&gt;
&lt;br /&gt;
This interoperability test was done under Windows 8. Similar steps can be performed in other platforms.&lt;br /&gt;
&lt;br /&gt;
Typically, GIMIAS&#039;s Command Line Plugins (CLPs) are located in folder &#039;&#039;&#039;&amp;lt;GIMIAS_install_dir&amp;gt;\commandLinePlugins&#039;&#039;&#039;. However, the DLL dependencies of these CLPs are located in &#039;&#039;&#039;&amp;lt;GIMIAS_install_dir&amp;gt;&#039;&#039;&#039;. This is a problem when attempting to use GIMIAS&#039;s CLPs in CTK&#039;s Command Line Module Explorer (CLME), as the CLME will fail to load the CLPs. &lt;br /&gt;
&lt;br /&gt;
This can be easily solved by copying GIMIAS&#039;s CLPs in a different folder, let&#039;s say &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039;, along with its DLL dependencies (for finding out the DLL dependencies of a CLP, a program such as [http://dependencywalker.com/ Dependency Walker] can be used).&lt;br /&gt;
&lt;br /&gt;
After creating &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and copying the necessary files in it. Start CTK&#039;s CLME, go to menu &amp;quot;Module&amp;quot; and choose &amp;quot;Options&amp;quot;. In &amp;quot;Module Settings&amp;quot; go to &amp;quot;Search Paths&amp;quot;, and then add &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; to the search paths. Press &amp;quot;OK&amp;quot; and the CLME will scan &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and load the CLPs. &lt;br /&gt;
&lt;br /&gt;
If the loading process fails, you are probably missing a DLL dependency, close the CLME and go to the cache folder (&#039;&#039;&#039;&amp;lt;user_directory&amp;gt;\AppData\Local\CommonTK\CommandLineModuleExplorer\cache&#039;&#039;&#039; on MS Windows). Clear the content of that directory, add the additional DLL to &#039;&#039;&#039;&amp;lt;CLP_folder&amp;gt;&#039;&#039;&#039; and then start the CLME again.&lt;br /&gt;
&lt;br /&gt;
If a CLP shows up in the list with a warning sign, place the mouse on top of the CLP&#039;s name and look at the warning message. Most likely the XML that defines the CLP has a compatibility problem with the CLME, which means that is does not adhere to the [http://www.commontk.org/docs/html/ctkCmdLineModule.xsd CTK XML Schema]. See the definition of the Schema, correct the XML of the CLP, clear CLME&#039;s cache folder as described in the previous paragraph, and start the CLME again.&lt;br /&gt;
&lt;br /&gt;
After following these steps, you will be able to see and use your CLP in the CLME. &#039;&#039;&#039;This means that you can share your GIMIAS&#039;s CLP with any CTK user at any time, by just sharing your CLPs executable file and its DLL dependencies&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following image shows GIMIAS&#039;s CLPs loaded in CTK&#039;s CLME. The &amp;quot;Create a DICOM Series&amp;quot; CLP is selected. The &amp;quot;Settings&amp;quot; dialog is also shown, indicating how to add the CLPs directory to the CLME&#039;s search paths. Notice that some CLPs are shown with a warning sign, so their XML definitions has to be corrected.&lt;br /&gt;
&lt;br /&gt;
[[File:GIMIAS_CLPs_on_CTK_CLME.png|400px]]&lt;br /&gt;
&lt;br /&gt;
* CTK&#039;s Command Line Modules in Taverna Workbench&lt;br /&gt;
&lt;br /&gt;
[http://www.taverna.org.uk/download/workbench/ Taverna Workbench] is an open source Workflow Management System written in Java. GIMIAS&#039;s Command Line Plugins (CLPs) can be used in Taverna Workbench for creating medical imaging workflows composed of several filters. In order to be able to do this, the &#039;&#039;&#039;Center Computational Imaging and Simulation Technologies in Biomedicine (CISTIB)&#039;&#039;&#039; at the [http://www.shef.ac.uk/ University of Sheffield] has created a Taverna Workbench plugin for GIMIAS.&lt;br /&gt;
&lt;br /&gt;
General instructions on how to install GIMIAS Command-Line Taverna Plugin can be found [https://drive.google.com/file/d/0B3kBRNGHGeP0dE53THFMYjdsdDQ/edit?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
In this interoperability test, a CTK Command Line Module was created and tested with GIMIAS Command-Line Taverna Plugin. The sample plugin is called &#039;&#039;&#039;CopyPlugin&#039;&#039;&#039;. It is a simple code to open a VTK ASCII file containing a PolyData, and save the contents of the file on another VTK file. The plugin code can be accessed [https://drive.google.com/file/d/0B3kBRNGHGeP0bVZVWHZkS1NydnM/edit?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
The result was successful, which means that &#039;&#039;&#039;GIMIAS&#039;s CLPs and CTK&#039;s Command Line Modules can be combined to create processing workflows in Taverna Workbench !!&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
The following image shows the CopyPlugin running on CTK&#039;s Command Line Module Explorer.&lt;br /&gt;
&lt;br /&gt;
[[File:COPYPLUGIN_CTK_CLME.png‎|400px]]&lt;br /&gt;
&lt;br /&gt;
The CopyPlugin Command Line Module Explorer can also be imported into GIMIAS, see the following image&lt;br /&gt;
&lt;br /&gt;
[[File:COPYPLUGIN_CTK_GIMIAS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The following image shows a simple workflow that includes the CopyPlugin, after being imported using GIMIAS Command-Line Taverna Plugin.&lt;br /&gt;
&lt;br /&gt;
[[File:CTL_CLM_TAVERNA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
GIMIAS&#039;s CLPs and CTK&#039;s Command Line Modules can be combined into the same Taverna workflow. See the following image where a Marching Cubes GIMIAS&#039;s CLP is used along with the CopyPlugin, a CTK Command Line Module.&lt;br /&gt;
&lt;br /&gt;
[[File:GIMIAS_CTK_WORKFLOW.png|400px]]&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
	<entry>
		<id>https://www.commontk.org/index.php?title=File:Niftyreg-MeVisLab.png&amp;diff=2059</id>
		<title>File:Niftyreg-MeVisLab.png</title>
		<link rel="alternate" type="text/html" href="https://www.commontk.org/index.php?title=File:Niftyreg-MeVisLab.png&amp;diff=2059"/>
		<updated>2013-12-04T13:07:26Z</updated>

		<summary type="html">&lt;p&gt;Hans Meine: reg_aladin in MeVisLab (for &amp;quot;CLI in context&amp;quot;)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;reg_aladin in MeVisLab (for &amp;quot;CLI in context&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Hans Meine</name></author>
	</entry>
</feed>