Title: IGT Software Design and Process
1IGTSoftware Design and Process
- Bill Lorensen
- GE Research
2Outline
- Background
- Design Principles
- Software Process
- Challenges
3Open Source Menu for Success
- A Community with a common vision
- A pool of talented and motivated
developers/scientists - A mix of academic and commercial
- An organized, light weight approach to software
development - A leadership structure
- Communication
- A business model
4Guiding Principles
- Open is good
- Proprietary is bad
- Reuse is good
- NIH is bad
- Modularity is good
- Monolithic is bad
Not invented here
5Design Principles
6Toolkits and Libraries
- Visualization - VTK
- Segmentation/Registration - ITK
- State machines IGSTK
- UI KWWidgets, ??
- Tracking OpenTracker, ??
- DICOM dcmtk, gdcm
- File I/O nrrd, meta, pnglib,
7Object-Oriented Design
- Dominated software systems throughout the 1990s
- Continues to be the accepted software design
technique - Particularly useful for dealing with complexity
- Provides programmatic abstractions to deal with
generalization and encapsulation - C and Java have mechanisms to support OOD
8Generic Programming
- Organize libraries consisting of genericor
reusablesoftware components. - The essential ideas of generic programming are
containers to hold data, iterators to access the
data, and generic algorithms that use containers
and iterators to create efficient, fundamental
algorithms. - ITK uses generic programming to process
n-dimensional images.
9Design Patterns
- Good object-oriented software systems have
recurring designs (patterns) that occur
frequently - ITK employs a number of powerful design patterns
- object factories
- command/observer
- smart pointer memory management
10Frameworks
- Define how a group of participants can be put
together to solve a particular task. - Particularly suitable for describing complex
flows or algorithms that have a number of steps
that can be varied - ITK Frameworks
- A demand-driven data processing pipeline that
connects algorithms to process n-dimensional
image data - Registration framework
- Level-set framework
11Separation of Algorithms from Interfaces
- Implement the algorithms with a clear separation
from the applications and especially the user
interfaces. - Uses the Command/Observer design pattern that
permits applications to watch for significant
events during the execution of an algorithm - ITK has no built-in visualization, but has been
interfaced to several systems including 3D
Slicer, Analyze, SciRun and Volview.
12Slicer 3 Execution Model Goals
- Provide interface to batch programs
- Simplify and unify command line processing
- Auto generate C command line processing
- Simplify and unify GUI
- Auto generate GUI
13Slicer 3.0
User Desktop
Algorithms
ITK
VTK
Slicer Modules
Slicer 3.0
Scripts of Slicer Mods
VTK Apps Using ITK
Batch Programs
Non-NAMIC Cmd tools
LONI Pipeline
Birn Grid Data/Compute
14Execution Model Plugins
- XML Interface Description
- Describes command line options
- Describes suggestions for GUI
- GenerateCLP
- Generates C command line processing code from
XML - Reports XML description
15Program Flow
User Desktop
Slicer Modules
Slicer 3.0
prog.xml
GenerateCLP
progCLP.h
prog.cxx
Non-NAMIC Cmd tools
LONI Pipeline
Birn Grid Data/Compute
16Resample --xml
ltlabelgtIOlt/labelgt ltdescriptiongtInput/output
parameterslt/descriptiongt ltimagegt
ltnamegtInputVolumelt/namegt ltlabelgtinput
Volumelt/labelgt ltchannelgtinputlt/channelgt
ltindexgt0lt/indexgt ltdescriptiongtInput
volume to be resampledlt/descriptiongt
lt/imagegt ltimagegt ltnamegtOutputVolumelt/nam
egt ltlabelgtOutput Volumelt/labelgt
ltchannelgtoutputlt/channelgt ltindexgt1lt/indexgt
ltdescriptiongtResampled Volumelt/descriptiongt
lt/imagegt lt/parametersgt lt/executablegt
- lt?xml version"1.0" encoding"utf-8"?gt
- ltexecutablegt
- ltcategorygtfilteringlt/categorygt
- lttitlegtResample Volumelt/titlegt
- ltdescriptiongtResamples a volumelt/descriptiongt
- ltversiongt1.0lt/versiongt
- ltdocumentationurlgtlt/documentationurlgt
- ltlicensegtlt/licensegt
- ltcontributorgtBill Lorensenlt/contributorgt
- ltparametersgt
- ltlabelgtResampling Parameterslt/labelgt
- ltdescriptiongtParameters used for
resamplinglt/descriptiongt - ltfloat-vectorgt
- ltnamegtoutputPixelSpacinglt/namegt
- ltflaggt-slt/flaggt
- ltlongflaggt--spacinglt/longflaggt
- ltdescriptiongtSpacing along each dimension
(0 means use input spacing)lt/descriptiongt - ltlabelgtSpacinglt/labelgt
- ltdefaultgt0,0,0lt/defaultgt
17Resample.cxx
- .
- .
- .
- include ResampleCLP.h
- Main (int argc, char argv)
-
- PARSE_ARGS
- algorithm code
-
18Resample --help
- USAGE
- ResampleVolume
- --xml
--echo -s ltstdvectorltfloatgtgt - --
-
--version -h ltstdstringgt -
ltstdstringgt - Where
- --xml
- Produce xml description of command line
arguments (default 0) - --echo
- Echo the command line arguments (default 0)
- -s ltstdvectorltfloatgtgt, --spacing
ltstdvectorltfloatgtgt - Spacing along each dimension (0 means use
input spacing) (default 0,0,0) - --, --ignore_rest
- Ignores the rest of the labeled arguments
following this flag. - --version
- Displays version information and exits.
- -h, --help
- Displays usage information and exits.
19Software Process
20NA-MIC Rhythms
- Yearly All-Hands Meeting
- Bi-annual Programmers Week
- Weekly Engineering T-Cons
- Nightly Build/Test
- ITK
- VTK
- Slicer
21NA-MIC Tools
- CMake
- Cross-platform build
- Dart 2
- Build/Test server
- CTest
- Build/Test client
- Cpack
- Packaging and Distribution
- Media Wiki
- Reporting/discussion forum
- POTS
- T-cons
22How DART Enables Collaboration
CVS/SVN maintainssource code revisions
DART compilessource code, runs tests
CVS SVN
Developers check-in code
Developers review results
23Dart
Dart
24(No Transcript)
25Multi-Platform Builds
26IGT Challenges
- Define an architecture tailored to IGT
requirements - Leverage existing toolkits
- Fill in toolkit gaps
27IGTSoftware Design and Process
- Bill Lorensen
- GE Research