2011 Winter Project Week:Breakout Slicer

From NAMIC Wiki
Jump to: navigation, search
Home < 2011 Winter Project Week:Breakout Slicer
 Back to  Project Week Agenda

Session Leaders: Steve Pieper, Julien Finet

This session looks at the development of Slicer4.

People interested in the use of Slicer3.6 should consider attending the Monday breakout session with Ron.

Slicer4 Architecture & Status - Steve

This talk will provide an overview of the technologies included in slicer4 and the transition path from slicer3 to slicer4. slides

Slicer4 Architecture Diagram

See this page for status of slicer4 development and the Qt port.

Creating a Loadable C++ Module - J2

Python Scripting - Jc

Command line modules / Slicer Execution Model - Jim

  • What can it do?
  • What do we have plans for?
  • What do you want?
  • Slides

ITK4 Integration - Bill

Slicer4/ITK4 integration

Afternoon Qt Loadable Module Tutorial

How to write a loadable module

Plans

Plans for the time between Jan 2011 and June 2011. Identify a list of modules that are still missing and must be available, when we roll out Slicer 4 for end users. We need to identify owners for each of these:

Developer Contacts for Slicer4

For modules currently scheduled for porting or already ported.

to: primary contact going forward

cc: was involved with the porting to Qt

  • Colors - to: Nicole, cc: Julien
  • Data/Dicom import/load - to:Steve
  • Editor - to:Steve
  • Models - to:Alex, cc:Julien
  • Mouse Modes - to:Wendy
  • ROI - to:Alex, Daniel, cc:Julien (to be transitioned to the Annotation module)
  • SlicerWelcome - to:Wendy, cc: JC
  • Slices - to:Jim, cc: JC
  • Transforms - to:Alex, cc: JC
  • Volume rendering: Redesign?
    • GPU mappers (NCI: Yanling; Kitware: J2)
    • Nodes and Displayable Managers to:Alex Y, cc: JC
    • Qt GUI to:Julien, cc:JC
  • Volumes - to:Julien, cc:Alex
  • Diffusion frame work: Redesign? - to:Demian, cc:CF
    • FibreBundles - cc:Alex
    • DiffusionWelcome - to:Demian
    • Tractography - to: Alex
  • Endoscopy - to: Steve, cc:JC
  • Brainsfit - to:Hans
  • EM segementation - to:Dominique, cc:Kilian, cc:JC (Qt only)
    • AtlasCreator - to:Daniel
  • Fast Marching - to:Andrey
  • GrowCutSegement - to:Harini, cc: Jim, Steve
  • RSS (robust statistical segmentation): to:Yi Gao
  • CompareView - to:JC, cc:Julien, Jim, Steve, Wendy
  • Wizards
    • NeuroNav - to:Laurent Chauvin?, cc:Noby Hata
    • ProstateNav? - to:Andras,Andrey
    • ChangeTracker? - to:Andrey
  • IGT
    • OpenIGTLinkIF - to: Junichi
  • Extensions
    • Factory - to: Dave P, cc: JC, Steve
    • VMTK? - to:Daniel, cc:Suares,Luca
    • TubeTK - to:Danielle, cc: StephenA
  • FetchMI - to:Wendy, cc:JC
  • LabelStatistics - to:Steve
  • Annotations - to:Daniel, cc:Nicole, Kilian
  • SceneView - to:Daniel
  • Command line module - to:Jim, cc:Julien
  • CropVolume - to:Andrey
  • PETCTFusion - to: Wendy
  • RegistrationWelcome - to: Dominik Meier
  • SegmentationWelcome - to: Dominik Meier

Not Currently Scheduled For Porting

  • QueryAtlas?
  • CaptureBetaProbe - to:Laurent
  • ClipModel - to:Alex
  • CollectFiducials - to:?
  • DistanceTransformModel - to:Steve
  • FourDImage - to: Junichi
  • IGT
    • IGTRecorder - to:Steve
    • IGTToolSelector - to:Brian (Northern Digital), cc: Steve
  • ModelIntoLabelVolume - to: Nicole
  • SlicerDaemon - to: Steve
  • IntensityNormalization - to: Andrey
  • Meshing - to: Curtis
  • ModelMirror - to: Wendy
  • Pharmacokinetics - to: Wendy
  • ModelTransform - to: Alex
  • UDPServer - to: Laurent
  • Python - to:Steve
    • BinarizeScalarValues.py
    • ConvertFiducialToLabelMap.py
    • ConvertVolumeToArray.py
    • CreateROIPerLabel.py
    • ExplodeVolumeTransform.py
    • LoadVolumeFromArray.py
    • NumpyScript.py
    • PythonScript.py
    • RecenterMaskToDWI.py
    • ShiftDWIValues.py
    • SliceDWIPerVolume.py
    • StochasticTractoGraphyGenerator.py
    • StochasticTractoGraphyGeneratorWithLabels.py
    • StochasticTractography.py
    • StochasticTractographyServer
    • StochasticTractographyServerMP
    • SurfaceConnectivity.py
    • SurfaceICPRegistration.py
    • SurfaceToolbox.py

ToBeRemoved

  • ExtractSubvolume
  • ExtractSubvolumeROI
  • GradientAnisotropicDiffusion
  • Measurements
  • PythonGADScriptedModule
  • QueryAtlas
  • ScriptedModule
  • ScriptedModuleExample
  • VolumeRendering1

New Modules

  • Annotation
  • SceneViews
  • TubeTK?

MRML and Annotation Breakout

From Nicole's notes:

Ordering of nodes discussion

- need some notion of order for: drag and drop, processing longitudinal data sets, pre op and post ops, need sort by time sequence
- can get up to thousands of hierarchy elements if have fiducials in a hierarchy
- there's a hierarchy logic helper that caches tree information
- put the sorting in the hierarchy node? redo the nodes so that they have a list of child node ids
- hierarchies manage grouping, inheritance and ordering of nodes
- could add order number to hierarchy node, parent node keeps cached list 
- when rendering, needed to get the display properties of parent if the hierarchy is collapsed
- getchildren will always returned the sorted order
- search in the Qt tree widget to jump/select to a given name of node: Julien
- when add a node to a hierarchy, how to set the priority?
  - setparent needs to be over ridden to add a priority
  - then add setpriority
- Nicole will write the test and Alex will write the code
- vtkMRMLHierarchyNode will have an order number, sort priority (Steve wants a double so it's a time stamp, I want an unsigned integer index), have both, could have a priority that's a double and an unsigned long integer that's the sort index
  - index is private
  - when drop a new node recompute the indices of the children
  - only index, recompute index when drop
  - write helper classes that recalculate the index based on various factors, like name, priority, provenance
  - when remove a node, recalc indices 
  - if read in a mrml scene that doesn't have indices, set them as read in, increasing + 1 with each one read in
  - drag and drop with annotation hierarchies needs to be fixed
 - in the qt tree, the hierarchy is a line in the display and should have an edit display properites
  - when collaspe use the hierarhcy, use the display manager

Nodes not in scene when trying to observe their ids

  - set and observe node id, the node that corresponds to the id doesn't correspond to the scene 
  - there are a couple of times where you can check if the scene pointer is null, when update reference ids, ie when loading a scene and have a storage node id that doesn't exist in the scene yet
  - have a cache/pointer to a node: when set the node id and find it in the scene, when you set the scene, or call update references 
  - when remove it, should have a place where remove the references, should be in removenode
  - when want to listen to node, set id, if can't find pointer, not a problem, next time ask for it, check again.
  - set and observe id can fail gracefully while saving the id, when update references add the observers
  - update references called when load, when delete, or restore a scene
  - if !scene is loading, make it an error case?
  - jf puts in asserts when hasn't handled a case, if take it out handle that case

Annotation module

 - second timne put down  caption widget/text annotation is using the wrong offset of the text box
 - property editor needs to be finished : Nicole
 - get fiducidals from annotation accessible from python, can't wrap the subdir: Steve
 - generalise the WriteXML
 - gui CLI allow selecting a hierarchy or multiple volumes
   - use hierarchies
   - combo box can only select one
 - vtkMRMLROINode is missing, ROI needs to use the annotation module roi
   - need to extend the annotation module, reimplement
   - get the four chosen annotation widgets really solid (from Ron)
   - used in volume rendering, in people's criticla path
   - update old one when read in  to be a annotation roi node
     - issues with linking the annotation mrml library
     - if mrml scene version node is too old, convert?
     - when reading in the scene, just change a string for the tag?
     - same with fids?
     - writes out as new format
     - roi node has centre and three dimensions(?)
     - when see node added with an old node, trigger adding an annotation roi node and remove the old one?
     - or importer
     - object factory register import?
     - register node twice with different tags?
     	- in annotation module when register with the old tag as well? add a new method that has an optional tag name
   - daniel has a displayale manager written, but not instantiated
   - daniel can update it this week