Code Monkey home page Code Monkey logo

slicerrt's Introduction

slicerrt's People

Contributors

achataigner avatar anna-ilina avatar auneri avatar cpinter avatar ferdymercury avatar gregsharp avatar jcfr avatar lassoan avatar michaelcolonel avatar simonoxen avatar sunderlandkyl avatar tavaughan avatar thomasbulenga avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

slicerrt's Issues

Scalar bar show-hide method is not exposed by the Color module

The Color module in the Slicer core does not expose the scalar bar show-hide method. Need to add it there (and maybe some more functions that allow the selection of a color table as the current table).
Some more improvements would be needed in the color module as well:

  • Display the scalar bar in the slice viewers or secondary 3D viewer
  • Display labels instead of scalar values (e.g., GenericAnatomyColors labels cannot be displayed)
  • Color module crashes if %s is entered in the formatting string
  • If the opacity value is changed then the label is overwritten (e.g., "R=0.000 G=1.000 B=0.000 A=0.800")

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/139-scalar-bar-show-hide-method-is-not-exposed-by-the-color-module/details

Improve leak finder

There are some ideas to improve LeakFinder. Further ideas are to be discussed under this ticket.

  • In vtkDebugLeaksManager destructor, the counter never reaches 0 if StackWalker::ShowCallstack is called (otherwise it does), and so the Finalizing function is not called. There's a workaround in the current patch we made, but unfortunately that way many more objects are shown as leaking. It would be great if we found out what connection is there between calling ShowCallstack and that counter, and fix this issue. Ideas:
    • Use ApplicationVerifier, maybe it unveils a memory corruption or something
    • Use mutexes, maybe this issue is related to multitasking
  • Filter out certain python calls from the stack trace: PyEval_EvalCodeEx, PyEval_EvalFrameEx, call_function, etc. Write "NNN stack frames were skipped"

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/170-improve-leak-finder/details

Plastimatch is statically linked in the binaries thus excessively increasing the package size

Plastimatch libraries are statically linked in many binaries. A decrease of about 31.8MB or 64% can potentially be achieved by this.

  • We could have PlmCommon, that dynamically linked in the following libraries
  • Shared PlmUtil, and deal with packaging the Plastimatch DLLs in installation

vtkSlicerPlastimatchPyModuleLogic
vtkSlicerDicomRtExportModuleLogic
vtkSlicerContourComparisonModuleLogic
vtkSlicerDoseComparisonModuleLogic
vtkSlicerContoursModuleMRML

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/520-plastimatch-is-statically-linked-in-the-binaries-thus-excessively-increasing-the/details

Add Doxygen documentation for SlicerRT source code

Using doxygen will create a need for us to better document the C++ code. Plus we can throw in some extra user manual info into the html.

Plan on how to proceed:

first step is to manually generate the html and push to a website somewhere and have it link to Assembla. need to ask Andras about where to host it.

Next step to automatically generate the html.

at last is to add other user manual stuff to doxygen.

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/709-add-doxygen-documentation-for-slicerrt-source-code/details

Update dose color table when the isodose one is changed

Right now the color tables for the isodose and the dose distribution are tied in the sense that the default isodose color table is read from disk, and the dose one is generated from that automatically. It would be useful to have the dose color table follow it.

Tasks:

  • Make a copy of the default isodose table for each dose distribution loaded and generate a dose color table for that (parameter set nodes are already created for each one)
  • [DONE] Enable full editing of the isodose color table
    ** Make the dose one read-only as much as possible
  • Create events and observers for changes in the isodose color tables and re-generate the corresponding dose color table
  • Enable using percentages of prescribed dose as well as absolute values
  • Use the Eclipse isodose colors as default (80% deep blue, 90% lighter warmer blue, 100% yellow, 105% orange, 110% red)

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/315-update-dose-color-table-when-the-isodose-one-is-changed/details

Change self test to use CLI modules without the wait cycles

Make use of the 2 new states in the CLI node status ("Cancelling" and "Completing"). This gives the ability to scripted python modules to run CLIs without having to wait on them, option to cancel the cli, and most importantly, to be notified when the CLI is completed AND the outputs are loaded back into the scene.
The example below automatically assigns a color node to the generated output:
486 def runMergeLabels(self, run):
487 if run:
488 cliNode = self.getCLINode(slicer.modules.changelabel)
489 parameters = self.mergeLabelsParameters()
490 self.get('MergeLabelsApplyPushButton').setChecked(True)
491 self.addObserver(cliNode, self.StatusModifiedEvent, self.onMergeLabelsCLIModified)
492 cliNode = slicer.cli.run(slicer.modules.changelabel, cliNode, parameters, wait_for_completion = False)
493 else:
494 cliNode = self.observer(self.StatusModifiedEvent, self.onMergeLabelsCLIModified)
495 self.get('MergeLabelsApplyPushButton').setEnabled(False)
496 cliNode.Cancel()
497
498 def onMergeLabelsCLIModified(self, cliNode, event):
499 if cliNode.GetStatusString() == 'Completed':
500 # apply label map
501 newNode = self.get('MergeLabelsOutputNodeComboBox').currentNode()
502 colorNode = self.get('LabelmapColorNodeComboBox').currentNode()
503 if newNode != None and colorNode != None:
504 newNode.GetDisplayNode().SetAndObserveColorNodeID(colorNode.GetID())
505
506 if not cliNode.IsBusy():
507 self.get('MergeLabelsApplyPushButton').setChecked(False)
508 self.get('MergeLabelsApplyPushButton').setEnabled(True)
509 print 'MergeLabels %s' % cliNode.GetStatusString()
510 self.removeObservers(self.onMergeLabelsCLIModified)

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/281-change-self-test-to-use-cli-modules-without-the-wait-cycles/details

Vff reader might be unreasonable restrictive

When attempting to load a .vff file, Slicer reports the following errors:

  • The value entered for the rank must be 3.
  • The values for the origin must each be greater than or equal to 0.
  • The value entered for the rawsize must be greater than or equal to 0.
  • A string was not entered for Handle Scatter. The value must be separated from the parameter with an '='. The value entered for Handle Scatter must be factor.
  • The value entered for the Reference Scatter Factor must be 1.
  • The value entered for the Data Scatter Factor must be 1.
  • A string was not entered for the filter. The value must be separated from the parameter with an '='. The value entered for the filter must be Ram-Lak.

However, I installed Microview and loaded them with no reported issues. I then exported them to DICOM and loaded that via Slicer successfully.

This would imply that the reported errors above are not errors but more warnings.

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/551-vff-reader-might-be-unreasonable-restrictive/details

Use multi-selection for DICOM export

It is now possible to select multiple nodes in subject hierarchy, and it would be good if the user could use that feature to select objects to export to DICOM.

  • On multi-selection, all context menu options are disabled except for Delete. It will be needed to implement handling of "multi-enabled" actions
  • The selected series could be in different studies or could be outside any study. How to auto-fill the patient/study fields?

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/768-use-multi-selection-for-dicom-export/details

Multiple isodose sets: one for each dose volume

It would be nice to support multiple isodoses, one for each dose volume. The isodose should be a child node of a dose image. Then, when you display a dose image, the isodose associated with that dose image gets displayed. Switching between different doses would show different isodoses.

This could be a feature of Subject Hierarcny

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/143-multiple-isodose-sets--one-for-each-dose-volume/details

Create a tool that can convert tracked ultrasound sequences to CT volumes

Create a tool that can convert tracked ultrasound sequences to CT volumes, for prostate HDR brachytherapy planning.

Sample script is available here:
https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/sandbox/UsToCtConverterSample

The final solution should be something like this:

  • A standalone executable, which uses Plus and DCMTK
  • Plus is used to read the input ultrasound sequence metafile (mha) acquired using the Plus toolkit
  • DCMTK is used to construct a sequence of CT slices that contain all the mandatory fields (the CT data set in the UsToCtConverterSample/originalCT directory contains some optional, private fields as well, so not all of them have to be included, only those required by the DICOM standard Part 3)
  • Some fields are updated in the sample script (pixel data, image size, etc.), but some more fields would need to be updated in the final solution (at least new instance UID should be generated for each slice)

Optional:

  • Would be nice to get the pixel spacing from the Plus configuration file (from the ImageToProbeTransform matrix)
  • Would be useful to be able to burn in the centerline of reconstructed needle trajectories into the US image pixels to improve the catheter visibility
  • Might be useful to support arbitrary image orientation (for freehand tracked US acquisition; by reconstructing an US volume)

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/193-create-a-tool-that-can-convert-tracked-ultrasound-sequences-to-ct-volumes/details

Consolidate error handling method in logic classes

There are several ways to handle errors right now in the code:

  • Return with 0 on success, non-zero on error (Kevin's classes mostly)
  • Have an std::string argument for errorMessage. If it is not empty, then there is an error and it is displayed on the module GUI
  • Return with a bool success flag

It would be better to set a convention for this, e.g.:
Return bool success flags in every class, and have a string error message argument if it is needed to be displayed on the GUI.

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/426-consolidate-error-handling-method-in-logic-classes/details

Update documentation - tutorials, wikis, promo

  • Tutorials (presentations)
    • Handling fractions
      • Transform studies
      • Dose accumulation
    • Creating, editing, visualizing contours
    • ...
  • Re-organize main SlicerRT wiki page, more links to small categories
    • Registration (Reg. case library, reg. modules, SH plugin)
    • Contour handling and segmentation
    • Fractions (organizing data, transform studies, etc.)
    • Beams
  • Update montage: no whole screenshots, just viewers (no need for all those 2Ds)

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/317-update-documentation---tutorials--wikis--promo/details

Split SlicerRtCommon into utility and constants

There are a lot of constants in SlicerRtCommon, while it also contains utility functions. It would be good to have a SlicerRtConstants class that contains these constants, and provides python wrapping for them.

Also probably move constants from common to their class of usage where no other class uses those

Change static members into static function so that they can be called from python (to avoid copy-paste errors and regressions when the constants are changed). Do it similarly to what was done in vtkMRMLSubjectHierarchyConstants:
static const std::string GetSubjectHierarchyNodeNamePostfix()
{ return "_SubjectHierarchy"; };

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/350-split-slicerrtcommon-into-utility-and-constants/details

Create separate Plastimatch extension

Needed features:

  • Auto-install dependent extensions in Extension Manager (SlicerRT would depend on Plastimatch) (DONE)

An example to follow when creating the Plastimatch extension is the OpenCV extension:
https://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/SlicerOpenCV (code: https://github.com/SBU-BMI/SlicerOpenCV)
and the example module that uses it:
https://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Extensions/OpenCVExample

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/383-create-separate-plastimatch-extension/details

Load CERR PlanC files

This format ( http://www.cerr.info ) comes up a lot in RT dose research. It is a bunch of nested MATLAB structures in a cell array in a .MAT container. It's an adaptive format with a built-in index, and can contain almost anything- comments, 3D volumes, structure lists, DVH, etc.

CERR in particular is pretty common in RT research and the ability to read its files would make Slicer a lot more accessible to this community.

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/207-load-cerr-planc-files/details

Patient name is not always displayed correctly in the Slicer DICOM browser

In the Slicer DICOM browser the patient name sometimes contains ^ characters (the ^ characters are supposed to separate first/last/middle names and should not be displayed). It is reproducible with the SlicerRt test data set (https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/data/), see the attached screenshot

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/25-patient-name-is-not-always-displayed-correctly-in-the-slicer-dicom-browser/details

Set best guess registration parameters based on input properties

Register plugin in subject hierarchy allows selecting two input volumes and the main registration method, which saves the user more than half the user interactions needed. However, more detailed parameter setting would be possible based on the image modalities and possibly other image properties.
These settings could be stored in parameter set nodes that are deployed in the SlicerRT install tree, and loaded on demand when certain conditions are met after selecting the two input volumes and the registration method.

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/582-set-best-guess-registration-parameters-based-on-input-properties/details

Add support for open contours

Issue reported in http://www.na-mic.org/Bug/view.php?id=4087
Adding this support will be also useful for future projects.

The open contours are to be loaded to segmentation objects with

  • Non-planar contour
    • Contains the raw contour points
    • Converter is needed to closed surface
  • Closed surface containing the tube model
    • What should be the radius of the tube? Half of the slice thickness calculated from the planar contours from the other contained structures? Constant 1mm? -> Start with 1mm, it will be a conversion parameter

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/786-add-support-for-open-contours/details

Handling connections better in DICOM export

Current possibility: one plugin offers all the objects to export, and maybe calls other plugins to do the actual export
Problem: If we want to export a more complicated study, we cannot do that in one export session
Possible fix: The plugins tell the central plugin handler their required connections. It collects them, and exposes some more advanced view to the user when selecting the plugins (step 2. of the export workflow, under the tree)

Migrated from https://app.assembla.com/spaces/slicerrt/tickets/686-handling-connections-better-in-dicom-export/details

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.