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 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 [Effort focused on CTK/DICOM - Will be integrated to slicer]
  • Editor - to:Steve [Using compatibility layer - Will be ported to a pure python implementation later ...]
  • Models - to:Alex, cc:Julien
  • Mouse Modes - to:Wendy, cc:Nicole
  • ROI - to:Alex, Daniel, cc:Nicole, Julien (to be transitioned to the Annotation module)
  • SlicerWelcome - to:Wendy, cc: JC [Screenshot will need to be updated]
  • Slices - to:Jim, cc: JC [Need to dynamically add other slices controller]
  • Transforms - to:Alex, cc: JC
  • Volume rendering: Redesign? [There is now a place holder gui - Logic / Gui have been split - 10th of old code]
    • 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, Lauren cc:CF
    • FibreBundles - To: Isaiah, cc:Alex [Figure out picking mode / Displayable manager]
    • DiffusionWelcome - to:Demian
    • Tractography - to: Alex
    • Wizards, Workflows, New Features: to: Demian, Lauren, CF, cc: Alex
  • Endoscopy - to: Steve, cc:JC [Python wrapping of mrml annotation node need some work]
  • 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 [Figure out number of active view and push that in the logic]
  • Wizards
    • NeuroNav - to:Laurent Chauvin?, cc:Noby Hata
    • ProstateNav? - to:Andras, Andrey
    • ChangeTracker? - to:Andrey
  • IGT
    • OpenIGTLinkIF - to: Junichi [Could post event to the QApplication process event loop]
  • 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:Nicole, cc:Daniel
  • Command line module - to:Jim, cc:Julien [Progress reporting in the main app]
  • 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


DONE - See r15925[1] - The module code have been moved to Slicer4/Attic UPDATE - Moved to https://github.com/slicer/Attic

  • 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

API Meeting at 1249 Boylston, January 25th

  • Attendees: Alex, Daniel, Nicole
  • keep Get/Set ParentNodeID should append by default but we want to be able to use an index as well
    • maybe renaming ("I want to be the third child of this parent")
    • we want "I want to be the last child", "..first child..", "child number X"
  • Alex moves ModelHierarchyLogic in the MRML
    • and uses the following and combines it with caching
  /// these are from the vtkMRMLDisplayableHierarchyNode and in use

  /// Find all child displayable nodes in the hierarchy
  void GetChildrenDisplayableNodes(vtkCollection *children);

  /// Get Hierarchy node for a given displayable node
  static vtkMRMLDisplayableHierarchyNode* GetDisplayableHierarchyNode(vtkMRMLScene *scene,
                                                          const char *displayableNodeID);

  • we need GetAllChildren (runs through the whole node) and GetImmediateChildren
  • DeleteAllChildren and DeleteImmediateChildren
    • On MRMLHierarchyNode
    • On MRMLDisplayableHierarchyNode
    • when deleting immediate children and a child has children itself, regroup to parent of the deleted node
    • it is important to delete the actual MRML nodes as well
  • parent->GetChildren() will always return hierarchyNodes in order if there is an order
    • only immediate children by default? flag to return all
  • parent->GetChild(int position) will return hierarchyNode
  • MoveNodeBefore, MoveNodeAfter, InsertNodeAt, InsertNodeBefore and InsertNodeAfter on hierarchyNodes
    • take indices
  • parent should observe RemoveNodeEvent and then re-order/update indices if it was a child

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