Difference between revisions of "2011 Winter Project Week:Breakout Slicer"
m (Text replacement - "http://www.slicer.org/slicerWiki/index.php/" to "https://www.slicer.org/wiki/") |
|||
(32 intermediate revisions by 8 users not shown) | |||
Line 3: | Line 3: | ||
'''Session Leaders: Steve Pieper, Julien Finet''' | '''Session Leaders: Steve Pieper, Julien Finet''' | ||
− | This session looks at the development of [ | + | This session looks at the development of [https://www.slicer.org/wiki/Slicer4 Slicer4]. |
People interested in the use of Slicer3.6 should consider attending the [[2011_Winter_Project_Week:Breakout_Slicer_with_Ron|Monday breakout session with Ron]]. | People interested in the use of Slicer3.6 should consider attending the [[2011_Winter_Project_Week:Breakout_Slicer_with_Ron|Monday breakout session with Ron]]. | ||
Line 10: | Line 10: | ||
This talk will provide an overview of the technologies included in slicer4 and the transition path from slicer3 to slicer4. [[media:2011 AHM-Slicer4.ppt|slides]] | This talk will provide an overview of the technologies included in slicer4 and the transition path from slicer3 to slicer4. [[media:2011 AHM-Slicer4.ppt|slides]] | ||
[[image:Slicer4-arch.png|thumb|right|200px|Slicer4 Architecture Diagram]] | [[image:Slicer4-arch.png|thumb|right|200px|Slicer4 Architecture Diagram]] | ||
+ | |||
+ | See [http://wiki.slicer.org/slicerWiki/index.php/Slicer4:QtPort/Releases this page for status of slicer4 development and the Qt port]. | ||
===Creating a Loadable C++ Module - J2=== | ===Creating a Loadable C++ Module - J2=== | ||
+ | *[[File:2011_01-AHM-QtPortInSlicer.ppt]] | ||
+ | *Other resources | ||
+ | **[https://www.kitware.com/Customers/Slicer Slicer 4.0 beta binaries] | ||
+ | **[[Projects:ARRA:SlicerUI|Progress report]] | ||
+ | **SlicerQt [http://wiki.slicer.org/slicerWiki/index.php/Slicer4:QtPort/Gallery image gallery] | ||
+ | **Qt port [http://wiki.slicer.org/slicerWiki/index.php/Slicer4:QtPort Wiki pages] | ||
+ | **Qt port [http://wiki.slicer.org/slicerWiki/index.php/Slicer4:QtPort/Tutorials tutorials] | ||
+ | **Previous [http://wiki.slicer.org/slicerWiki/index.php/Slicer4:QtPort/Documents#Documents presentations] | ||
+ | |||
+ | === Python Scripting - Jc === | ||
− | + | * [http://na-mic.org/Wiki/index.php/File:AHM-2011-SlicerAndPython.pdf Presentation] | |
===Command line modules / Slicer Execution Model - Jim === | ===Command line modules / Slicer Execution Model - Jim === | ||
Line 19: | Line 31: | ||
* What do we have plans for? | * What do we have plans for? | ||
* What do you want? | * What do you want? | ||
+ | * [[Media:Slicer4 CLI.ppt | Slides]] | ||
+ | |||
===ITK4 Integration - Bill=== | ===ITK4 Integration - Bill=== | ||
[[2011_Winter_Project_Week:_Slicer4-ITK4_Continuous_Integration| Slicer4/ITK4 integration]] | [[2011_Winter_Project_Week:_Slicer4-ITK4_Continuous_Integration| Slicer4/ITK4 integration]] | ||
+ | ===Afternoon Qt Loadable Module Tutorial=== | ||
+ | [http://wiki.slicer.org/slicerWiki/index.php/Slicer3:Developers:Projects:QtSlicer/Tutorials/ModuleWriting 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 [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 | ||
+ | |||
+ | === Extensions === | ||
+ | * Extensions to be converted to Slicer4 (most are CLIs) | ||
+ | ** ABC - to: Marcel http://www.nitrc.org/projects/abc/ | ||
+ | ** ARCTIC - to: Clement http://www.nitrc.org/projects/arctic/ | ||
+ | ** CMTK - to: Dominique, cc: Kilian, Torsten http://www.nitrc.org/projects/cmtk | ||
+ | ** EMFiberBundle Clustering - to: Mahnaz, cc: Jim http://www.nitrc.org/projects/quantitativedti | ||
+ | ** Examples: Loadable, CLI, Scripted to: Jc, Steve cc: Jim | ||
+ | ** FourDImageAnalysis - to Junichi http://www.na-mic.org/Wiki/index.php/Slicer3:FourDAnalysis | ||
+ | ** GAMBIT - to: Clement, cc: Martin http://www.nitrc.org/projects/gambit | ||
+ | ** GTRACT - to: Demian, cc: Vince, Mark http://www.nitrc.org/projects/vmagnotta/ | ||
+ | ** Hammer Registration: to: Dingang, cc: Jim http://www.nitrc.org/projects/hammerwml | ||
+ | ** Label Diameter Estimation: to: Andrey http://wiki.slicer.org/slicerWiki/index.php/Modules:LabelDiameterEstimation-Documentation-3.5 | ||
+ | ** Left Atrium Segmenter: to: Yi http://wiki.na-mic.org/Wiki/index.php/DBP3:Main | ||
+ | ** Lesion Segmentation: to: Mark http://www.nitrc.org/projects/lupuslesion | ||
+ | ** Line Motion - to: Laurent | ||
+ | ** MORSS - to: Yi http://wiki.na-mic.org/Wiki/index.php/RobustStatisticsSegmentation | ||
+ | ** OsteoPlan - to: Laurent | ||
+ | ** Skull Stripper - to: Xiaodong | ||
+ | ** Spine Segmentation - to: Sylvain J. http://wiki.na-mic.org/Wiki/index.php/2010_Winter_Project_Week_Spine_Segmentation_Module_in_Slicer3 | ||
+ | ** VMTK - to: Daniel, cc: Luca http://www.vmtk.org/Main/VmtkIn3DSlicer | ||
+ | ** plastimatch - to: Greg http://plastimatch.org/ | ||
+ | |||
+ | ==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== | ||
+ | |||
+ | DONE - See r15925[http://viewvc.slicer.org/viewcvs.cgi?rev=15925&root=Slicer4&view=rev] - 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 | ||
+ | <pre> | ||
+ | /// 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); | ||
+ | |||
+ | </pre> | ||
+ | * 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 |
Latest revision as of 18:05, 10 July 2017
Home < 2011 Winter Project Week:Breakout SlicerBack 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.
Contents
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
See this page for status of slicer4 development and the Qt port.
Creating a Loadable C++ Module - J2
- File:2011 01-AHM-QtPortInSlicer.ppt
- Other resources
- Slicer 4.0 beta binaries
- Progress report
- SlicerQt image gallery
- Qt port Wiki pages
- Qt port tutorials
- Previous presentations
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
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 [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
Extensions
- Extensions to be converted to Slicer4 (most are CLIs)
- ABC - to: Marcel http://www.nitrc.org/projects/abc/
- ARCTIC - to: Clement http://www.nitrc.org/projects/arctic/
- CMTK - to: Dominique, cc: Kilian, Torsten http://www.nitrc.org/projects/cmtk
- EMFiberBundle Clustering - to: Mahnaz, cc: Jim http://www.nitrc.org/projects/quantitativedti
- Examples: Loadable, CLI, Scripted to: Jc, Steve cc: Jim
- FourDImageAnalysis - to Junichi http://www.na-mic.org/Wiki/index.php/Slicer3:FourDAnalysis
- GAMBIT - to: Clement, cc: Martin http://www.nitrc.org/projects/gambit
- GTRACT - to: Demian, cc: Vince, Mark http://www.nitrc.org/projects/vmagnotta/
- Hammer Registration: to: Dingang, cc: Jim http://www.nitrc.org/projects/hammerwml
- Label Diameter Estimation: to: Andrey http://wiki.slicer.org/slicerWiki/index.php/Modules:LabelDiameterEstimation-Documentation-3.5
- Left Atrium Segmenter: to: Yi http://wiki.na-mic.org/Wiki/index.php/DBP3:Main
- Lesion Segmentation: to: Mark http://www.nitrc.org/projects/lupuslesion
- Line Motion - to: Laurent
- MORSS - to: Yi http://wiki.na-mic.org/Wiki/index.php/RobustStatisticsSegmentation
- OsteoPlan - to: Laurent
- Skull Stripper - to: Xiaodong
- Spine Segmentation - to: Sylvain J. http://wiki.na-mic.org/Wiki/index.php/2010_Winter_Project_Week_Spine_Segmentation_Module_in_Slicer3
- VMTK - to: Daniel, cc: Luca http://www.vmtk.org/Main/VmtkIn3DSlicer
- plastimatch - to: Greg http://plastimatch.org/
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
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