ITK/Release 4/New Code Contribution Process: Difference between revisions

From KitwarePublic
< ITK‎ | Release 4
Jump to navigationJump to search
 
(68 intermediate revisions by 3 users not shown)
Line 5: Line 5:
= Level of Contribution =
= Level of Contribution =


== New Classes and Filters ==
== New Classes==
A new class (or filter) must be submitted to the [http://www.insight-journal.org/ Insight Journal].
A new class must be submitted to the [http://www.insight-journal.org/ Insight Journal].
 
'''Please Note:''' This requirement is waived for ITKv4 contractors.
 
'''Please Note:''' ITKv4 will remove the Review directory. Moving classes from Review into the appropriate Module must follow the process for adding new classes. [https://spreadsheets.google.com/spreadsheet/ccc?key=0ApfVzIsZe0VFdFUxdE95WE5kMVE4LTJ6b3ZYQnpRalE&hl=en_US&ndplr=1#gid=0 This document] describes the destination Module for each class in Review.
 
 
===Process===
# Follow [[ITK/Git|the procedure to become an ITK developer and setup your environment]].
# Follow [[ITK/Git|the procedure to become an ITK developer and setup your environment]].
# [http://www.insight-journal.org/help/submission Submission to the Insight Journal]
# [http://www.insight-journal.org/help/submission Submit an article to the Insight Journal]
# Code Reviewed using the [[ITK_Release_4/Modularization/Code Reviews/Checklist|Checklist]]
#* Waived for ITKv4 contractors.
# Posted as Gerrit Patches
# Follow [[ITK_Release_4/Modularization/Add_new_classes|the procedure to add a new class]].
# Peer-reviewed
# Review the code using the [[ITK_Release_4/Modularization/Code Reviews/Checklist|Checklist]]
# Cdash@home tested
# Post as a [[ITK/Git/Develop#Workflow|Gerrit Patch]]
# Merged
## Gerrit provides a Peer-review mechanism for the patch
## Gerrit uses [[ITK_Release_4/Testing_On_Demand/Tutorial|Cdash@home]] to provide automated testing of patches
# After Gerrit peer-review approval, [[ITK/Git/Develop#Merge_a_Topic|merge the topic]].


== Internal Modules ==
== Internal Modules ==


Internal modules are full fledged modules that are actually intended to be integrated with the ITK git repository and to be distributed as part of ITK.
Internal modules are full fledged modules that will be integrated with the ITK git repository and will be distributed as part of ITK.
 
===Process===
 
# Follow [[ITK/Git|the procedure to become an ITK developer and setup your environment]].
# Follow [[ITK_Release_4/Modularization/_Add_a_module| the procedure to Add an Internal Module]]
# Create a topic branch
# Review the code using the [[ITK_Release_4/Modularization/Code Reviews/Checklist|Checklist]]
# For review purposes:
#* Rebase topic branch on top of master
#** git checkout -b topicbranchforreview topicbranch
#** git rebase origin/master
#* Squash topic branch and submit to Gerrit
#** The patch in Gerrit is not intended to be merged directly into ITK. It is here '''ONLY''' to be reviewed.
# When approved in Gerrit:
#* Go back to topic branch
#* Merge master into topic branch
#* Notify ITK developers list, requesting your branch to be merged into ITK master


Examples:
===Examples===


* Video classes
* Video classes
Line 25: Line 51:
* Deconvolution
* Deconvolution


Process
== Bridge Modules ==
 
A bridge module depends on third party headers not distributed with ITK. A bridge module usually connects classes that interface to two or more toolkits.


===Process===
# Follow [[ITK/Git|the procedure to become an ITK developer and setup your environment]].
# Follow [[ITK/Git|the procedure to become an ITK developer and setup your environment]].
# Create a topic branch
# Follow [[ITK_Release_4/Modularization/_Add_a_module| the procedure to Add an Internal Module]].
#* Place your module in the group '''Bridge'''
#* Create ''itk-module-init.cmake''
#** This file should contain ''find_package'' commands to locate the third party libraries and headers
#* Edit the ''itk-module.cmake'' and add '''EXCLUDE_FROM_ALL''' to the ''itk_module'' call. This prevents this Bridge Module from being included when '''ITK_BUILD_ALL_MODULES''' is selected during the cmake configuration. To build your module you will need to explicitly turn it on. For example, if your Bridge Module is called ''Foo'', then while running cmake a '''Module_ITK-Foo''' variable will be listed under the Modules group
# Create a topic branch, add and commit your changes.
# Review the code using the [[ITK_Release_4/Modularization/Code Reviews/Checklist|Checklist]]
# For review purposes:
# For review purposes:
#* Rebase topic branch on top of master  
#* Rebase topic branch on top of master  
Line 34: Line 69:
#** git rebase origin/master
#** git rebase origin/master
#* Squash topic branch and submit to Gerrit
#* Squash topic branch and submit to Gerrit
#** The patch in Gerrit is not intended to be merged directly into ITK. It is here '''ONLY''' to be reviewed.
# When approved in Gerrit:
# When approved in Gerrit:
#* Go back to topic branch
#* Go back to topic branch
Line 39: Line 75:
#* Notify ITK developers list, requesting your branch to be merged into ITK master
#* Notify ITK developers list, requesting your branch to be merged into ITK master


=== Bridge Modules ===
===Examples===
 
A bridge module is one that depends on third party headers not distributed with ITK.
 
Examples:


* Connecting ITK to VTK
* Connecting ITK to VTK
* Connecting ITK to OpenCV
* Connecting ITK to OpenCV
* Connecting ITK to dcmtk
* Connecting ITK to dcmtk
A bridge module involves:
# Connecting classes that interface two toolkit


== External Modules ==
== External Modules ==
External modules are ITK-like modules that cannot be included in ITK because of license issues or should not be included in ITK because of scope and/or specialized use.
External modules are ITK-like modules that cannot be included in ITK because of license issues or should not be included in ITK because of scope and/or specialized use.


Examples:
===Process===
# Follow [[ITK/Git|the procedure to become an ITK developer and setup your environment]].
# Follow [[ITK_Release_4/Modularization/Add_an_external_module_%28external_module%29|the procedure to Add an External Module]]


===Examples===
* Lesion Sizing Toolkit
* Lesion Sizing Toolkit
** see the [http://public.kitware.com/LesionSizingKit/index.php/Main_Page Lesion Sizing Toolkit].
** see the [http://public.kitware.com/LesionSizingKit/index.php/Main_Page Lesion Sizing Toolkit].
Line 69: Line 100:
Software that presents a different interface to ITK.  
Software that presents a different interface to ITK.  


Examples:
===Process===
* Alternatives
** Use the CMake ''find_package(ITK)'' command from the external layer (library or application).
** Use ITK as an external project in a Superbuild approach.
*** The Superbuild groups the external layer along with ITK into a larger distribution...


* SimpleITK
===Examples===
** see [[ITK_Release_4/SimpleITK|SimpleITK]].
* [[ITK_Release_4/SimpleITK|SimpleITK]]
* ManagedITK
* ManagedITK
** Wrapping for C#
** Wrapping for C#


==Applications ==


== Applications ==
Applications are programs that often provide a GUI and/or use other toolkits, e.g. [http://vtk.org/ VTK].


Applications are programs that often provide a GUI and/or use other toolkits, e.g. [http://vtk.org/ VTK].
===Process===
Applications have their own ''CMakeLists.txt'' files. They will either locate ITK or build it as part of their process.
* Alternatives
** Use the CMake ''find_package(ITK)'' command from the application.
** Use ITK as a [http://www.kitware.com/products/html/BuildingExternalProjectsWithCMake2.8.html CMake external project] in a Superbuild approach.


Examples:
===Examples===


* Volview Plugins
* find_package
* V3D Plugins
** Volview Plugins
** V3D Plugins
** [[ITK/Examples|ITK Wiki Examples]]


== Adding Data ==
* Superbuild
** [http://www.slicer.org/slicerWiki/index.php/Slicer4 Slicer4]


Data may be needed as part of testing code and/or examples on how to run new layers. Please see the following link for instructions on how to add data:
== New Data ==


* [[ITK_Release_4/Testing Data|Testing Data]]
Data may be needed as part of testing code and/or examples on how to run new classes, applications or layers.
* [[ITK_Release_4/Data Collection|MIDAS]]


(new page will be added soon...)
===Process===
Please see the [[ITK/Git/Develop/Data|instructions on how to add data]].


== Bug Fixes ==
== Bug Fixes ==


Bug fixes are contributions that repair defects reported in the [http://public.kitware.com/Bug/view_all_bug_page.php Mantis Bug Tracker] or repair daily defects that creep into ITK.
Bug fixes are contributions that repair defects reported in the [http://issues.itk.org JIRA Issue Tracker] or repair daily defects that creep into ITK.
 
===Process===
# Follow [[ITK/Git/Develop|the procedure to become an ITK developer]].
# Follow [[ITK/Git/Develop|the procedure to become an ITK developer]].
# To reference JIRA issue XY, add " (#ITK-XY)" to the END of the FIRST line." or '''BUG: ITK-XY''' as the commit prefix.
# Post as a [[ITK/Git/Develop#Workflow|Gerrit Patch]]
# Post as a [[ITK/Git/Develop#Workflow|Gerrit Patch]]
## Gerrit provides a Peer-review mechanism for the patch
## Gerrit provides a Peer-review mechanism for the patch
## Gerrit uses [[ITK_Release_4/Testing_On_Demand/Tutorial|Cdash@home]] to provide automated testing of patches
## Gerrit uses [[ITK_Release_4/Testing_On_Demand/Tutorial|Cdash@home]] to provide automated testing of patches
# After Gerrit peer-review, [[ITK/Git/Develop#Merge_a_Topic|merge the topic]].
# After Gerrit peer-review approval, [[ITK/Git/Develop#Merge_a_Topic|merge the topic]].


== Wiki Examples ==
==Wiki Examples==
Wiki examples are independent, compilable examples that illustrate ITK concepts.
Wiki examples are independent, compilable examples that illustrate ITK concepts.
'''Please Note:''' The examples illustrate existing ITK classes and '''do not''' introduce new classes.
===Process===
Follow [[ITK/Examples/Instructions/ForDevelopers|this procedure]] to add a Wiki example.
Follow [[ITK/Examples/Instructions/ForDevelopers|this procedure]] to add a Wiki example.


'''NOTE:''' The examples illustrate existing ITK classes and do not introduce new classes.
= ITKv4 Refactoring =


Brainstorming suggestion for workflow:
[[ITK_Release_4/The Team/ITKv4 Development Team|ITKv4 Development Team]]


# Enable users to add Examples in the Wiki
== FEM Refactoring ==
# Automatically take the new examples and push them as patches to a Gerrit system (with cdash@home testing)
# After approval: merging it into a Git repository of Examples (separate from the current ITK Git).


= ITKv4 A2D2 Contributions =
* Modified existing classes


== Git Topic Branches ==
== Level Sets Refactoring ==


Scenario: the refactoring team has been working on a separate repository and have branches for their work.
* New Classes
* Modified existing classes


=== Checkout their topic branch ===
== Registration Refactoring ==


  git checkout MyWorkingBranch
* New Classes
* Modified existing classes
* [https://github.com/picslITK/ITK4_topics/tree/RegistrationRefactoringNew Registration Refactory github] - Registration New branch]


=== Update their master ===
== Pipeline Refactoring ==


  git fetch origin master:master
* ??


=== Merge master into their topic branch ===
== GPU ==


  git merge master
* New classes
* New Internal Module
 
== DICOM ==
 
* GDCM level ?
** Integrated with GDCM upstream ?


== SimpleITK ==


=== See Status ===
* External Layer


The following command will show any conflicts resulting from the merge
== WrapITK ==


  git status
* Internal Layer


= ITKv4 A2D2 Contributions =


=== Brainstorming ===
[[ITK_Release_4/The Team/A2D2 Development Team|A2D2 Development Team]]


==== Raghu1 ====
== [[ITK_Release_4/The_Team/A2D2_Development_Team#A_Comprehensive_Workflow_for_Robust_Characterization_of_Microstructure_for_Cancer_Studies|A Comprehensive Workflow for Robust Characterization of Microstructure for Cancer Studies]] ==


* New Application (with GUI and Viz)
* New Application (with GUI and Viz)
* New classes (denoising)
* New classes (denoising)


==== Raghu2 ====
== [[ITK_Release_4/The_Team/A2D2_Development_Team#Comprehensive_Workflow_for_Large_Histology_Segmentation_and_Visualization|Comprehensive Workflow for Large Histology Segmentation and Visualization]]  ==


* New classes
* New classes
** Color correction, artifact removal, image registration
** Color correction, artifact removal, image registration


==== Deconvolution ====
== [[ITK_Release_4/The_Team/A2D2_Development_Team#Adding_Deconvolution_Algorithms_to_ITK|Adding Deconvolution Algorithms to ITK]] ==


* New classes
* New classes
* New Internal Module
* New Internal Module


==== Video ====
==[[ITK_Release_4/The_Team/A2D2_Development_Team#ITK_Extensions_for_Video_Processing|ITK Extensions for Video Processing]]==


* New Internal Modules
* New Internal Modules
** Some Bridge Modules
** Some Bridge Modules


==== Video Grabber ====
==[[ITK_Release_4/The_Team/A2D2_Development_Team#Real-Time_Image_Capture_for_ITK_through_a_Video_Grabber|Real-Time Image Capture for ITK through a Video Grabber]]==


* New Classes
* New Classes
* Some Bridge Modules
* Some Bridge Modules


==== CMU Course ====
==[[ITK_Release_4/The_Team/A2D2_Development_Team#Methods_in_Medical_Image_Analysis:_an_ITK-based_course|Methods in Medical Image Analysis: an ITK-based course]]==


* New Classes
* New Classes
* Some Bridge Modules  
* Some Bridge Modules
** (OpenCV point cloud library)
** (OpenCV point cloud library)


==== Shape Modeling ====
==[[ITK_Release_4/The_Team/A2D2_Development_Team#ITK_Algorithms_for_Analyzing_Time-varying_Shape_with_Application_to_Longitudinal_Heart_Modeling|ITK Algorithms for Analyzing Time-varying Shape with Application to Longitudinal Heart Modeling]]==


* New Classes
* New Classes
* New Internal Modules
** Particle System Data Container
** Cost Functions
** Optimizers
* New Internal Module (about 12 classes)
** Particle System Module
*** Higher level filters
**** Longitudinal shape modeling pipeline (Filter)
**** Procrustes Registration (Affine transform output)
 
* SVN Repository


==== Nikos NRR ====
==[[ITK_Release_4/The_Team/A2D2_Development_Team#3D_Real-time_Physics-based_Non-rigid_Registration_for_Image-guided_Neurosurgery|3D Real-time Physics-based Non-rigid Registration for Image-guided Neurosurgery]]==


* Application
* Application
** External Layer ?
** External Layer ?


==== Denoising Microscopy ====
==[[ITK_Release_4/The_Team/A2D2_Development_Team#Denoising_Microscopy.2C_MRI.2C_and_Ultrasound_Images|Denoising Microscopy, MRI, and Ultrasound Images]]==


* New Classes
* New Classes
* New Internal Modules
* New Internal Modules
==[[ITK_Release_4/The_Team/A2D2_Development_Team#Framework_for_Automated_Parameter_Tuning_of_ITK_Registration_Pipelines|Framework for Automated Parameter Tuning of ITK Registration Pipelines]]==
==[[ITK_Release_4/The_Team/A2D2_Development_Team#SCORE:_Systematic_Comparison_through_Objective_Rating_and_Evaluation|SCORE: Systematic Comparison through Objective Rating and Evaluation]]==
==[[ITK_Release_4/The_Team/A2D2_Development_Team#SCORE.2B.2B:_Crowd_sourced_data.2C_automatic_segmentation.2C_and_ground_truth_for_ITK4|SCORE++: Crowd sourced data, automatic segmentation, and ground truth for ITK4]]==
==[[ITK_Release_4/The_Team/A2D2_Development_Team#Fostering_Open_Science_for_Lung_Cancer_Lesion_Sizing|Fostering Open Science for Lung Cancer Lesion Sizing]]==

Latest revision as of 15:59, 9 December 2011

This page describes the multiple mechanisms available to contribute code to the ITK Ecosystem.

Overview

Level of Contribution

New Classes

A new class must be submitted to the Insight Journal.

Please Note: This requirement is waived for ITKv4 contractors.

Please Note: ITKv4 will remove the Review directory. Moving classes from Review into the appropriate Module must follow the process for adding new classes. This document describes the destination Module for each class in Review.


Process

  1. Follow the procedure to become an ITK developer and setup your environment.
  2. Submit an article to the Insight Journal
    • Waived for ITKv4 contractors.
  3. Follow the procedure to add a new class.
  4. Review the code using the Checklist
  5. Post as a Gerrit Patch
    1. Gerrit provides a Peer-review mechanism for the patch
    2. Gerrit uses Cdash@home to provide automated testing of patches
  6. After Gerrit peer-review approval, merge the topic.

Internal Modules

Internal modules are full fledged modules that will be integrated with the ITK git repository and will be distributed as part of ITK.

Process

  1. Follow the procedure to become an ITK developer and setup your environment.
  2. Follow the procedure to Add an Internal Module
  3. Create a topic branch
  4. Review the code using the Checklist
  5. For review purposes:
    • Rebase topic branch on top of master
      • git checkout -b topicbranchforreview topicbranch
      • git rebase origin/master
    • Squash topic branch and submit to Gerrit
      • The patch in Gerrit is not intended to be merged directly into ITK. It is here ONLY to be reviewed.
  6. When approved in Gerrit:
    • Go back to topic branch
    • Merge master into topic branch
    • Notify ITK developers list, requesting your branch to be merged into ITK master

Examples

  • Video classes
  • GPU Support
  • Deconvolution

Bridge Modules

A bridge module depends on third party headers not distributed with ITK. A bridge module usually connects classes that interface to two or more toolkits.

Process

  1. Follow the procedure to become an ITK developer and setup your environment.
  2. Follow the procedure to Add an Internal Module.
    • Place your module in the group Bridge
    • Create itk-module-init.cmake
      • This file should contain find_package commands to locate the third party libraries and headers
    • Edit the itk-module.cmake and add EXCLUDE_FROM_ALL to the itk_module call. This prevents this Bridge Module from being included when ITK_BUILD_ALL_MODULES is selected during the cmake configuration. To build your module you will need to explicitly turn it on. For example, if your Bridge Module is called Foo, then while running cmake a Module_ITK-Foo variable will be listed under the Modules group
  3. Create a topic branch, add and commit your changes.
  4. Review the code using the Checklist
  5. For review purposes:
    • Rebase topic branch on top of master
      • git checkout -b topicbranchforreview topicbranch
      • git rebase origin/master
    • Squash topic branch and submit to Gerrit
      • The patch in Gerrit is not intended to be merged directly into ITK. It is here ONLY to be reviewed.
  6. When approved in Gerrit:
    • Go back to topic branch
    • Merge master into topic branch
    • Notify ITK developers list, requesting your branch to be merged into ITK master

Examples

  • Connecting ITK to VTK
  • Connecting ITK to OpenCV
  • Connecting ITK to dcmtk

External Modules

External modules are ITK-like modules that cannot be included in ITK because of license issues or should not be included in ITK because of scope and/or specialized use.

Process

  1. Follow the procedure to become an ITK developer and setup your environment.
  2. Follow the procedure to Add an External Module

Examples

  • Lesion Sizing Toolkit
  • PETSc
    • Numerical Libraries that too large to be included in ITK proper
  • FFTW
    • Library distributed under GPL (overriding the ITK's Apache License)

External Layers

Software that presents a different interface to ITK.

Process

  • Alternatives
    • Use the CMake find_package(ITK) command from the external layer (library or application).
    • Use ITK as an external project in a Superbuild approach.
      • The Superbuild groups the external layer along with ITK into a larger distribution...

Examples

Applications

Applications are programs that often provide a GUI and/or use other toolkits, e.g. VTK.

Process

Applications have their own CMakeLists.txt files. They will either locate ITK or build it as part of their process.

  • Alternatives
    • Use the CMake find_package(ITK) command from the application.
    • Use ITK as a CMake external project in a Superbuild approach.

Examples

New Data

Data may be needed as part of testing code and/or examples on how to run new classes, applications or layers.

Process

Please see the instructions on how to add data.

Bug Fixes

Bug fixes are contributions that repair defects reported in the JIRA Issue Tracker or repair daily defects that creep into ITK.

Process

  1. Follow the procedure to become an ITK developer.
  2. To reference JIRA issue XY, add " (#ITK-XY)" to the END of the FIRST line." or BUG: ITK-XY as the commit prefix.
  3. Post as a Gerrit Patch
    1. Gerrit provides a Peer-review mechanism for the patch
    2. Gerrit uses Cdash@home to provide automated testing of patches
  4. After Gerrit peer-review approval, merge the topic.

Wiki Examples

Wiki examples are independent, compilable examples that illustrate ITK concepts.

Please Note: The examples illustrate existing ITK classes and do not introduce new classes.

Process

Follow this procedure to add a Wiki example.

ITKv4 Refactoring

ITKv4 Development Team

FEM Refactoring

  • Modified existing classes

Level Sets Refactoring

  • New Classes
  • Modified existing classes

Registration Refactoring

Pipeline Refactoring

  • ??

GPU

  • New classes
  • New Internal Module

DICOM

  • GDCM level ?
    • Integrated with GDCM upstream ?

SimpleITK

  • External Layer

WrapITK

  • Internal Layer

ITKv4 A2D2 Contributions

A2D2 Development Team

A Comprehensive Workflow for Robust Characterization of Microstructure for Cancer Studies

  • New Application (with GUI and Viz)
  • New classes (denoising)

Comprehensive Workflow for Large Histology Segmentation and Visualization

  • New classes
    • Color correction, artifact removal, image registration

Adding Deconvolution Algorithms to ITK

  • New classes
  • New Internal Module

ITK Extensions for Video Processing

  • New Internal Modules
    • Some Bridge Modules

Real-Time Image Capture for ITK through a Video Grabber

  • New Classes
  • Some Bridge Modules

Methods in Medical Image Analysis: an ITK-based course

  • New Classes
  • Some Bridge Modules
    • (OpenCV point cloud library)

ITK Algorithms for Analyzing Time-varying Shape with Application to Longitudinal Heart Modeling

  • New Classes
    • Particle System Data Container
    • Cost Functions
    • Optimizers
  • New Internal Module (about 12 classes)
    • Particle System Module
      • Higher level filters
        • Longitudinal shape modeling pipeline (Filter)
        • Procrustes Registration (Affine transform output)
  • SVN Repository

3D Real-time Physics-based Non-rigid Registration for Image-guided Neurosurgery

  • Application
    • External Layer ?

Denoising Microscopy, MRI, and Ultrasound Images

  • New Classes
  • New Internal Modules

Framework for Automated Parameter Tuning of ITK Registration Pipelines

SCORE: Systematic Comparison through Objective Rating and Evaluation

SCORE++: Crowd sourced data, automatic segmentation, and ground truth for ITK4

Fostering Open Science for Lung Cancer Lesion Sizing