Version history

Version increment rules

  • major version increment:

    • new python interpreter version

    • 50 minor version increments

  • minor version increment:

    • new module, new external module, external module upgrade

    • 25 patch version increments

  • patch version increment:

    • update html documentation

    • new file, file update

    • new function

    • module update

version 0.9.1, build 26/07/2025

version 0.12.9, build 05/08/2025

  • new files

    • gui/darkroi/texture.png

    • gui/lightroi/texture.png

  • updated files

    • settings/settings.xml

      • add DicomHost section

    • settings/tooltips.xml

      • add DicomHost section

  • new external module

    • pynetdicom 3.0.4

  • upgraded external module

    • pydicom, upgrade 2.3.1 to 3.0.1

      • generate a bug in core.sisypheDicom.ImportFromRTStruct.execute() method

  • new module

    • gui.dialogDicomQuery

      • Dialog box for Dicom Query/retreive

  • updated modules

    • core.sisypheDicom

    • gui.dialogSplash

    • gui.dialogDicomRTImport

    • core.sisypheImageIO

    • gui.dialogGenericResults

    • gui.windowSisyphe

    • gui.attributesWidgets

    • gui.dialogSplash

  • new classes

    • gui.dialogDicomQuery.DialogDicomQueryRetrieve

      • Dialog box for Dicom Query/retreive

    • gui.dialogTexture.Dialog.DialogROITexture

      • Dialog box for texture analysis in ROI

  • new methods

    • gui.windowSisyphe.WindowSisyphe.queryDicom

    • gui.windowSisyphe.WindowSisyphe.texture2

  • new functions

    • gui.dialogDicomQuery.getDicomDirectory

    • gui.dialogDicomQuery.handle_store

  • updated classes

    • core.sisypheDicom.ImportFromRTStruct

      • update execute() method

    • gui.dialogDicomRTImport.DialogRTimport

      • update _convert() method

    • gui.dialogGenericResults.DialogGenericResults

      • update _getDataFrame() method

    • gui.windowSisyphe.WindowSisyphe

      • add queryDicom() method to exec gui.dialogDicomQuery.DialogDicomQueryRetrieve dialog

      • add texture2() method to exec gui.dialogTexture.Dialog.DialogROITexture dialog

    • gui.attributesWidgets.ListROIAttributesWidget

      • add features() method to exec gui.dialogTexture.Dialog.DialogROITexture dialog

      • update __init__() method

    • gui.dialogSplash.DialogSplash

      • update __init__() method

  • updated methods

    • core.sisypheDicom.ImportFromRTStruct.execute()

      • bug fix, since version 3.0.1 of pydicom, the VM attribute of a sequence (SQ) is always 1,

      • to get the number of elements in a sequence (SQ), use len(DataElement.value)

      • bug fix, set reference volume origin to default (0.0, 0.0, 0.0)

      • bug fix, test if the dicom ROIContourSequence field exists

      • bug fix, add multiple folders management

    • gui.dialogDicomRTImport.DialogRTimport._convert()

    • gui.dialogGenericResults.DialogGenericResults._getDataFrame()

      • replace n by space of the dataFrame header row

    • gui.attributesWidgets.ListROIAttributesWidget.__init__()

      • add features IconPushButton (_features)

    • gui.dialogSplash.DialogSplash.__init__()

      • display pynetdicom version in dialog splash

  • updated function

    • core.sisypheImageIO.isDicom

      • bug fix, return value, from str to bool

version 0.12.11, build 28/08/2025

  • updated modules

    • widgets.attributesWidget

    • widgets.tabToolsWidgets

  • updated classes

    • widgets.attributesWidget.ItemMeshAttributesWidget

    • widgets.attributesWidget.ItemToolAttributesWidget

    • widgets.attributesWidget.ItemBundleAttributesWidget

    • widgets.attributesWidget.ListMeshAttributesWidget

    • widgets.attributesWidget.ListToolAttributesWidget

    • widgets.attributesWidget.ListBundleAttributesWidget

    • widgets.tabToolsWidgets.TabROIToolsWidget

    • widgets.tabToolsWidgets.TabTrackingWidget

  • updated methods

    • widgets.attributesWidget.ItemMeshAttributesWidget.settings()

    • widgets.attributesWidget.ItemToolAttributesWidget.properties()

    • widgets.attributesWidget.ItemToolAttributesWidget.target()

    • widgets.attributesWidget.ItemToolAttributesWidget.length()

    • widgets.attributesWidget.ItemBundleAttributesWidget._editColor()

    • widgets.attributesWidget.ListMeshAttributesWidget.addIsosurface()

    • widgets.attributesWidget.ListToolAttributesWidget.newHandle()

    • widgets.attributesWidget.ListToolAttributesWidget.newLine()

    • widgets.attributesWidget.ListToolAttributesWidget.duplicate()

    • widgets.attributesWidget.ListToolAttributesWidget.features()

    • widgets.attributesWidget.ListToolAttributesWidget.features2()

    • widgets.attributesWidget.ListBundleAttributesWidget.dissection()

    • widgets.attributesWidget.ListBundleAttributesWidget.filter()

    • widgets.attributesWidget.ListBundleAttributesWidget.centroid()

    • widgets.attributesWidget.ListBundleAttributesWidget.cluster()

    • widgets.attributesWidget.ListBundleAttributesWidget.statistics()

    • widgets.tabToolsWidgets.TabROIToolsWidget._dialogActiveContour()

    • widgets.tabToolsWidgets.TabTrackingWidget.atlas()

    • widgets.tabToolsWidgets.TabTrackingWidget.dissection()

      • update dialog title bar color for Win32 platform

version 0.12.16, build 30/08/2025

  • updated modules

    • core.sisypheROI

      • update cython compilation

    • widgets.thresholdWidgets

    • widgets.tabToolsWidgets

    • gui.dialogFiducialBox

    • gui.windowSisyphe

  • updated classes

    • core.sisypheROI.SisypheROIDraw

      • update setMorphologyRadius() method

      • update getMorphologyRadius() method

    • widgets.thresholdWidgets.ThresholdViewWidget

      • add _onButtonResetEvent() method

      • add setResetButtonVisibility() method

      • add getResetButtonVisibility() method

      • update __init__() method

    • widgets.tabToolsWidgets.TabROIToolsWidget

      • add _menuThresholdShow() method

      • update _brushThresholdChanged() method

    • gui.dialogFiducialBox.DialogFiducialBox

      • update __init__() method

    • gui.windowSisyphe.WindowSisyphe

      • update frameDetection() method

  • new methods

    • widgets.thresholdWidgets._onButtonResetEvent()

      • event method to reset widget thresholds

    • widgets.thresholdWidgets.setResetButtonVisibility()

      • set reset button visibility

    • widgets.thresholdWidgets.setResetButtonVisibility()

      • get reset button visibility

    • widgets.tabToolsWidgets.TabROIToolsWidget._menuThresholdShow()

      • bug fix, loss of volume display in darwin platform when popup menu is shown

  • updated methods

    • core.sisypheROI.SisypheROIDraw.setMorphologyRadius()

      • bug fix, add int parameter type

    • core.sisypheROI.SisypheROIDraw.getMorphologyRadius()

      • bug fix, change return type from float to int

    • widgets.thresholdWidgets.ThresholdViewWidget.__init__()

      • add reset button (self._resetbutton attribute), to reset widget thresholds

    • widgets.tabToolsWidgets.TabROIToolsWidget._brushThresholdChanged()

      • bug fix, loss of volume display in darwin platform when popup menu is shown

    • gui.dialogFiducialBox.DialogFiducialBox.__init__()

      • bug fix, remove setModal(True)

      • Qt5 bug of modal dialog on darwin platform, popup menu items cannot be selected

    • gui.windowSisyphe.WindowSisyphe.frameDetection()

      • Qt5 bug of modal dialog on darwin platform, popup menu items cannot be selected, modal simulation to fix it

version 0.16.5, build 13/10/2025

  • updated html documentation

    • add texture.png icon

    • update PySisyphe_dockroi.rst

    • add full menu documentation

      • menu Diffusion: PySisyphe_Diffusion.rst

      • menu File PySisyphe:_File.rst

      • menu Functions: PySisyphe_Functions.rst

      • menu Mapping: PySisyphe_Mapping.rst

      • menu Registration: PySisyphe_Registration.rst

      • menu Segmentation: PySisyphe_Segmentation.rst

      • menu Window PySisyphe:_Window.rst

    • add version-histrory.rst

    • update API documentation, docstring corrections

    • rebuild sphinx documentation

  • updated files

    • /Sisyphe/settings/MR.xdcm

      • fix error, line 79, in PixelSpacing value, from 1.0/1.L0 to 1.0/1.0

    • /Sisyphe/settings/dialogs.xml

    • /Sisyphe/settings/tootips.xml

    • /Sisyphe/settings/functions.xml

  • updated modules

    • core.sisypheDicom

    • core.sliceViewFiducialBoxWidget

    • core.sisypheTools

    • core.sisypheStatitics

    • core.sisypheSettings

    • processing.dipyFunctions

    • gui.dialogEditLabels

    • gui.dialogExport

    • gui.dialogDicomExport

    • gui.dialogDicomQuery

    • gui.dialogLabel

    • gui.windowSisyphe

    • gui.dialogWorkflow

    • gui.dialogReorient

    • gui.dialogGenericResults

    • gui.dialogRegistration

    • gui.dialogSegmentation

    • gui.dialogDeepSegmentation

    • gui.dialogDiffusionPreprocessing

    • gui.dialogDiffusionTracking

    • gui.dialogStatConstrast

    • gui.dialogStatModel

    • gui.dialogStatResult

    • gui.windowSisyphe

    • widgets.imageWidgets

    • widgets.functionsSettingsWidget

    • widgets.tabToolsWidgets

  • updated functions

    • core.sisypheSettings.initPySisypheUserPath()

      • line 143, apply DPI scale factor to some settings

    • core.sisypheSettings.setUserSettingsToDefault()

      • line 196, apply DPI scale factor to some settings

    • processing.dipyFunctions.dwiPreprocessing()

      • line 435, change the default value of the blockradius parameter

  • updated classes

    • core.sisypheDicom.ExportToDicom

      • update execute() method

    • core.sliceViewFiducialBoxWidget.SliceViewFiducialBoxWidget

      • update __init__() method

    • core.sisypheTools.HandleWidget

      • update setFontSize() method

      • update getFontSize() method

    • core.sisypheTools.LineWidget

      • update setFontSize() method

      • update getFontSize() method

    • core.sisypheStatitics.SisypheDesign

      • update __str__() method

      • update addGlobalCovariable() method

    • core.sisypheSettings.SisypheSettings

      • getUserSettings() method

    • gui.dialogEditLabels.DialogEditLabels

      • update __init__() method

    • gui.dialogExport.DialogExport

      • update __init__() meaddGlobalCovariable() method

    • gui.dialogDicomExport.DialogDicomExport

      • update __init__() method

    • gui.dialogDicomQuery.DialogDicomQueryRetrieve

      • update __init__() method

    • gui.dialogLabel.DialogVOLtoLabel

      • update __init__() method

    • gui.dialogLabel.DialogROItoLabel

      • update __init__() method

    • gui.dialogLabel.DialogLabeltoROI

      • update __init__() method

    • gui.windowSisyphe.WindowSisyphe

      • update _initRegistrationMenu() method

    • gui.dialogWorkflow.WorkflowItem

      • update __init__() method

    • gui.dialogReorient.DialogReorient

      • update __init__() method

    • gui.dialogGenericResults.DialogGenericResults

      • add showEvent() method

    • gui.dialogRegistration.DialogAsymmetry

      • update __init__() method

      • update execute() method

    • gui.dialogSegmentation.DialogRegistrationBasedSegmentation

      • update _updateAvailability() method

    • gui.dialogDeepSegmentation.DialogDeepTumorSegmentation

      • update execute() method

    • gui.dialogDiffusionPreprocessing.DialogDiffusionPreprocessing

      • update __init__() method

    • gui.dialogDiffusionTracking.DialogDiffusionTracking

      • update _stoppingChanged() method

    • gui.dialogStatConstrast.DialogContrast

      • update __init__() method

    • gui.dialogStatConstrast.DialogConjunction

      • update __init__() method

    • gui.dialogStatConstrast.DialogTMapToZMap

      • update __init__() method

    • gui.dialogStatModel.DialogModel

      • update __init__() method

    • gui.dialogStatModel.DialogObs

      • update __init__() method

    • gui.dialogStatModel.DialogfMRIObs

      • update __init__() method

    • gui.dialogStatResult.DialogResult

      • update setMap() method

    • gui.windowSisyphe.WindowSisyphe

      • display documentation for each menu

    • widgets.imageWidgets.SisypheVolumeThumbnailButtonWidget

      • update editAttributes() method

      • update viewDicomAttributes() method

      • update editLabels() method

      • update statistics() method

    • widgets.functionsSettingsWidget.SettingsWidget

      • update formatLabel() method

    • widgets.tabToolsWidgets.TabHelpWidget

      • add setUrl() method

      • add setPage() method

  • updated methods

    • core.sisypheDicom.ExportToDicom.execute()

      • bug fix, value incrementation of ds[‘ImagePositionPatient’] and ds[‘SliceLocation’]

    • core.sliceViewFiducialBoxWidget.SliceViewFiducialBoxWidget.__init__()

      • HandleWidget font size from GUI settings

    • core.sisypheTools.HandleWidget.setFontSize()

      • font size f(dpi), add usedpi parameter

    • core.sisypheTools.HandleWidget.getFontSize()

      • font size f(dpi), add usedpi parameter

    • core.sisypheTools.LineWidget.setFontSize()

      • font size f(dpi), add usedpi parameter

    • core.sisypheTools.LineWidget.getFontSize()

      • font size f(dpi), add usedpi parameter

    • core.sisypheStatitics.SisypheDesign.__str__()

      • line 2483, translation error, “covariable” to “covariate”

    • core.sisypheSettings.SisypheSettings.getUserSettings()

      • line 296, apply DPI scale factor to some settings

    • core.sisypheStatitics.SisypheDesign.addGlobalCovariable()

      • line 3681, add covariate always at the last column of the design matrix (not before global factor)

    • gui.dialogEditLabels.DialogEditLabels.__init__()

      • remove fixed size of ‘Clear labels’ and ‘Import/export’ buttons

    • gui.dialogExport.DialogExport.__init__()

      • change the name of the ‘Convert’ button to ‘Export’

    • gui.dialogDicomExport.DialogDicomExport.__init__()

      • change the name of the ‘Convert’ button to ‘Export’ and remove icon

    • gui.dialogDicomQuery.DialogDicomQueryRetrieve.__init__()

      • change the name of the ‘Modality date’ to ‘Acq. date’

    • gui.dialogLabel.DialogVOLtoLabel.__init__() method

      • change dialog width

    • gui.dialogLabel.DialogROItoLabel.__init__() method

      • change dialog width

    • gui.dialogLabel.DialogLabeltoROI.__init__() method

      • change dialog width

    • gui.windowSisyphe.WindowSisyphe._initRegistrationMenu()

      • change menu name ‘ICBM normalization’ to ‘ICBM spatial normalization’

    • gui.dialogWorkflow.WorkflowItem.__init__()

      • replace fixed size of _input1 and _input2 QSpinBox attributes, from 60 to 100

    • gui.dialogReorient.DialogReorient.__init__()

      • remove fixedWidth for all buttons

      • remove auto button

    • gui.dialogRegistration.DialogAsymmetry.__init__()

      • add jacobian determinant settings

    • gui.dialogRegistration.DialogAsymmetry.execute()

      • get prefix suffix from jacobian determinant settings

    • gui.dialogSegmentation.DialogRegistrationBasedSegmentation._updateAvailability()

      • visibility of StructureTissue and PMAPCorrection setting parameters

    • gui.dialogDeepSegmentation.DialogDeepTumorSegmentation.execute()

      • bug fix, wrong label index and name in .xlabel file

    • gui.dialogDiffusionPreprocessing.DialogDiffusionPreprocessing.__init__()

      • bug fix, line 134, self._supervised.setSettingsButtonText(‘Self Supervised Denoising’)

    • gui.dialogDiffusionTracking.DialogDiffusionTracking._stoppingChanged()

      • bug fix, line 202, v = self._combo3.currentText() == ‘GM/WM/CSF’ (not ‘MAP’)

    • gui.dialogStatConstrast.DialogContrast.__init__()

      • cancel button, remove fixed size, set autodefault and default

    • gui.dialogStatConstrast.DialogConjunction.__init__()

      • cancel button, remove fixed size, set autodefault and default

    • gui.dialogStatConstrast.DialogTMapToZMap.__init__()

      • cancel button, remove fixed size, set autodefault and default

    • gui.dialogStatModel.DialogModel.__init__()

      • cancel button, remove fixed size

    • gui.dialogStatModel.DialogObs.__init__()

      • cancel button, remove fixed size

    • gui.dialogStatModel.DialogfMRIObs.__init__()

      • cancel button, remove fixed size

    • gui.dialogStatResult.DialogResult.setMap()

      • bug fix, line 1393, replace .setCursorOpacity(0.25) by .setLineOpacity(0.25)

    • widgets.imageWidgets.SisypheVolumeThumbnailButtonWidget.viewDicomAttributes()

      • update dialog title bar color for Win32 platform

    • widgets.imageWidgets.SisypheVolumeThumbnailButtonWidget.editLabels()

      • update dialog title bar color for Win32 platform

    • widgets.imageWidgets.SisypheVolumeThumbnailButtonWidget.statistics()

      • update dialog title bar color for Win32 platform

      • update dialog title bar color for Win32 platform

    • widgets.functionsSettingsWidget.SettingsWidget.formatLabel()

      • buf fix, capitalized word management

  • new function

    • core.sisypheSettings.getDPIScaleFactor()

      • Calculate the scale factor that is used to define the size of icons and some widgets

  • new methods

    • gui.dialogGenericResults.DialogGenericResults.showEvent()

      • adjust the size of the dialog box to fit the content

    • widgets.tabToolsWidgets.TabHelpWidget

      • add setUrl() method

        • Display an url

      • add setPage() method

        • Display a local page

version 0.18.3, build 16/10/2025

  • updated html documentation

    • add “Label volume to mask” dialog box documentation in PySisyphe_File.rst & PySisyphe:_menubar.rst

    • add “Remaps label volume” dialog box documentation in PySisyphe_File.rst & PySisyphe:_menubar.rst

    • add “Laterality index” dialog box documentation in PySisyphe_Mapping.rst & PySisyphe:_menubar.rst

    • PySisyphe_File.rst update

    • PySisyphe_Versions.rst update

    • API documentation update

    • version-histrory.rst update

    • rebuild sphinx documentation

  • updated files

    • /Sisyphe/settings/functions.xml

  • updated modules

    • core.sisypheImageAttributes

    • core.sisypheDownload

    • gui.dialogLabel

    • gui.dialogContrast

    • gui.windowSisyphe

    • gui.dialogRegistration

    • gui.dialogEditLabel

    • gui.dialogFileSelection

    • gui.dialogDataType

    • gui.dialogFlipAxes

    • gui.dialogSwapAxes

    • gui.dialogFunction

    • gui.dialogWorkflow

    • gui.dialogStatContrast

    • gui.dialogTimeSeries

    • gui.dialogDiffusionGradients

  • updated classes

    • core.sisypheImageAttributes.SisypheAcquisition

      • add clearLabels() method

    • gui.windowSisyphe.WindowSisyphe

      • add labelToMask() method

      • add relabel() method

      • add lateralityIndex() method

      • update __inti__() method

      • update getUserDirectory() method

    • gui.dialogRegistration.DialogRegistration

      • update execute() method

    • gui.dialogEditLabels.DialogEditLabels

      • update __inti__() method

      • add _moveTo() method

      • add getFileSelectionWidget() method

    • gui.dialogFileSelection.DialogFileSelection

    • gui.dialogFileSelection.DialogFilesSelection

    • gui.dialogDataType.DialogDataType

    • gui.dialogFlipAxes.DialogFlipAxes

    • gui.dialogSwapAxes.DialogSwapAxes

    • gui.dialogFunction.DialogHistogramIntensityMatching

    • gui.dialogFunction.DialogRegressionIntensityMatching

    • gui.dialogWorkflow.DialogWorkflow

    • gui.dialogStatContrast.DialogConjunction

    • gui.dialogStatContrast.DialogTMapToZMap

    • gui.dialogStatContrast.DialogLateralityIndex

    • gui.dialogTimeSeries.DialogSeriesPreprocessing

    • gui.dialogTimeSeries.DialogSeriesCanICA

    • gui.dialogDiffusionGradients.DialogDiffusionGradients

      • add getFileSelectionWidget() / getFilesSelectionWidget() / getReferenceSelectionWidget() methods

  • updated methods

    • gui.dialogRegistration.DialogRegistration.execute()

      • line 880, bug fix, interpolator setting

    • gui.dialogEditLabels.DialogEditLabels.__init__()

      • line 117, connect _tree double-click signal to _moveTo() method

    • gui.windowSisyphe.WindowSisyphe.__inti__()

      • line 244, call getUserDirectory method

    • gui.windowSisyphe.WindowSisyphe.getUserDirectory()

      • line 185, update PySisyphe user folder functions.xml and settings.xml files when running a new installation for the first time

  • updated functions

    • core.sisypheDownload.installFromHost()

      • new version installation: copy new functions.xml and settings.xml files to the PySisyphe user folder ($User/.PySisyphe)

    • core.sisypheDownload.updatePySisyphe()

      • new version url in section <host><updatepy> (host.xml file) if venv execution, <host><updatepyc> if frozen execution

  • new classes

    • gui.dialogLabel.DialogLabeltoMask

      • dialog box to create a mask as a combination of labels from a label volume

    • gui.dialogLabel.DialogRelabel

      • dialog box to remaps label indexes of a label volume

    • gui.dialogContrast.DialogLateralityIndex

      • dialog box to calculate laterality index of a statistical map

  • new methods

    • core.sisypheImageAttributes.SisypheAcquisition.clearLabels()

      • remove all labels from a label volume

    • gui.windowSisyphe.WindowSisyphe.labelToMask()

      • call gui.dialogLabel.DialogLabeltoMask dialog box

    • gui.windowSisyphe.WindowSisyphe.relabel()

      • call gui.dialogLabel.DialogRelabel dialog box

    • gui.dialogEditLabels.DialogEditLabels._moveTo()

      • center cursor on double-cliked label

version 0.20.16, build 01/11/2025

  • new html documentation

    • /API2/api_dialog_generic_results.rst

    • /API2/api_dialog_wait.rst

    • /API2/api_understanding_views.rst

    • /API2/api_widgets_iconbar.rst

    • /API2/api_widgets_lut.rst

    • /API2/api_widgets_multiple_view.rst

    • /API2/api_widgets_select_file.rst

    • /API2/api_widgets_settings.rst

    • /API2/api_widgets_single_view.rst

    • /API2/index.rst

    • version-histrory.rst update

    • rebuild sphinx documentation

  • updated html documentation

    • PySisyphe_Mapping.rst update

    • rebuild sphinx documentation

  • updated files

    • /Sisyphe/settings/tooltips.xml

    • /Sisyphe/settings/functions.xml

  • updated docstrings & typing

    • Sisyphe.widgets.multiViewWidgets

    • Sisyphe.widgets.volumeViewWidget

    • Sisyphe.widgets.sliceViewWidgets

    • Sisyphe.widgets.sliceTrajectoryViewWidget

    • Sisyphe.widgets.selectFileWidgets

    • Sisyphe.widgets.projectionViewWidget

    • Sisyphe.widgets.multiComponentViewWidget

    • Sisyphe.widgets.iconBarViewWidgets

    • Sisyphe.widgets.LUTWidgets

    • Sisyphe.widgets.functionsSettingsWidget

    • Sisyphe.widgets.abstractViewWidget

    • Sisyphe.widgets.dicomWidgets

    • Sisyphe.widgets.sliceViewFiducialBoxWidget

    • Sisyphe.widgets.thresholdWidgets

    • Sisyphe.gui.dialogFileSelection

    • Sisyphe.gui.dialogWait

    • Sisyphe.gui.dialogGenericResults

  • updated modules

    • core.sisypheDownload

    • gui.windowSisyphe

    • gui.dialogSegmentation

    • gui.dialogTexture

    • widgets.sliceViewWidgets

    • widgets.multiViewWidgets

    • widgets.volumeViewWidget

    • widgets.iconBarViewWidgets

    • widgets.selectFileWidgets

  • updated function

    • core.sisypheDownload.updatePySisyphe()

      • line 238, Try/except block to protect the call to InstallFromHost() method

  • updated classes

    • gui.windowSisyphe.WindowSisyphe

      • update checkUpdate() method

    • gui.dialogSegmentation.DialogPriorBasedSegmentation

      • update _priorsChanged() method

    • gui.dialogTexture.DialogROITexture

      • update _validateROI() method

    • widgets.sliceViewWidgets.SliceViewWidget

      • update _getInfoValuesText() method

    • widgets.multiViewWidgets.OrthogonalSliceViewWidget

      • update getMeshCollection() method

    • widgets.volumeViewWidget.VolumeViewWidget

      • update getSlice0Visibility() method

      • update getSlice1Visibility() method

      • update getSlice2Visibility() method

      • update getSurfaceVisibility() method

      • update getTextureVisibility() method

    • widgets.iconBarViewWidgets.IconBarOrthogonalRegistrationViewWidget2

      • update setMoveOverlayOff() method

    • widgets.selectFileWidgets.FilesSelectionWidget

      • update getItemFromIndex() method

  • updated methods

    • gui.windowSisyphe.WindowSisyphe.checkUpdate()

      • message box to exit after installation

    • gui.dialogSegmentation.DialogPriorBasedSegmentation._priorsChanged()

      • bug fix, line 1027, from ‘Custom’ to ‘CUSTOM’ to display file selection widgets (T1, Mask, GMPrior, CGMPrior, WMPrior, CSFPrior, BrainstemPrior, CerebellumPrior)

    • gui.dialogTexture.DialogROITexture._validateROI()

      • bug fix, line 651/661, row index of a ROI filename

    • widgets.sliceViewWidgets.SliceViewWidget._getInfoValuesText()

      • bug fix, lines 690 and 696, PC and midACPC infos

    • widgets.multiViewWidgets.OrthogonalSliceViewWidget.getMeshCollection()

      • bug fix, line 830, no return value

    • widgets.volumeViewWidget.VolumeViewWidget.getSlice0Visibility()

    • widgets.volumeViewWidget.VolumeViewWidget.getSlice1Visibility()

    • widgets.volumeViewWidget.VolumeViewWidget.getSlice2Visibility()

    • widgets.volumeViewWidget.VolumeViewWidget.getSurfaceVisibility()

    • widgets.volumeViewWidget.VolumeViewWidget.getTextureVisibility()

      • bug fix, lines 1021, 1027, 1033, no return value

    • widgets.iconBarViewWidgets.IconBarOrthogonalRegistrationViewWidget2.setMoveOverlayOff()

      • bug fix, line 2530, replace widget.setMoveOverlayOff() by widget.setMoveOverlayFlag(False)

    • widgets.selectFileWidgets.FilesSelectionWidget.getItemFromIndex()

      • bug fix, return value type (QListWidgetItem, not str)

version 0.21.08, build 18/11/2025

  • updated html documentation

    • PySisyphe_dockroi.rst

    • PySisyphe_dockmesh.rst

    • PySisyphe_docktarget.rst

    • PySisyphe_docktracking.rst

    • /API/api_settings.rst

    • /API/api_volume.rst

    • /API2/api_widgets_select_file.rst

    • /API2/api_widgets_settings.rst

    • version-histrory.rst update

    • rebuild sphinx documentation

  • updated files

    • /Sisyphe/settings/settings.xml

  • updated modules

    • core.sisypheSettings

    • core.sisypheImage

    • core.sisypheDownload

    • core.sisypheTools

    • widgets.selectFileWidgets

    • widgets.functionsSettingsWidget

    • widgets.attributesWidgets

    • widgets.abstractViewWidget

    • widgets.multiViewWidgets

    • widgets.sliceViewWidgets

    • widgets.sliceTrajectoryViewWidget

      • update import: add from Sisyphe.core.sisypheTools import HandleWidget

      • update import: add from Sisyphe.core.sisypheTools import LineWidget

      • remove these imports from TYPE_CHECKING

    • widgets.abstractViewWidget

    • widgets.attributesWidgets

    • widgets.iconBarViewWidgets

    • widgets.tabToolsWidgets

    • gui.dialogSkullStripping

  • updated classes

    • core.sisypheImage.SisypheImage

      • update getMin() method

      • update getValueAtContiuousIndex() method

      • new method getValueAtContiuousIndex()

    • core.sisypheTools.HandleWidget

    • core.sisypheTools.HLineWidget

      • update setFontSize() & getFontSize() methods

    • widgets.selectFileWidgets.SynchronizedFilesSelectionWidget

      • update setSisypheVolumeFilters() method

      • update setSequenceFilters() method

      • update setModalityFilters() method

      • update setSuffixFilters() method

      • update setPrefixFilters() method

      • update setContainsStringFilters() method

    • widgets.selectFileWidgets.SettingsWidget

      • update _initSettingsLayout() method

    • widgets.attributesWidgets.ListAttributesWidget

      • update __init__() method

      • update _addItem() method

    • widgets.attributesWidgets.ListROIAttributesWidget

      • add wait.open() to all methods

    • widgets.sliceViewWidgets.SliceROIViewWidget

      • update _updateCameraOrientation() method

      • update _onLeftPressEvent() method

      • update _onMouseMoveEvent() method

      • new methods to get flag of ROI tools

    • widgets.abstractViewWidget.AbstractViewWidget

      • update _updateToolMenu() method

      • update synchroniseCursorPositionChanged() method

    • widgets.multiViewWidgets.GridViewWidget

      • update setNumberOfVisibleViews() method

    • widgets.attributesWidgets.ListToolAttributesWidget

      • update __init__() method

      • update open() method

      • update setIconSize() method

      • new visibility() method

    • widgets.attributesWidgets.ListROIAttributesWidget

    • widgets.attributesWidgets.ListMeshAttributesWidget

    • widgets.attributesWidgets.ListBundleAttributesWidget

      • update __init__() method

      • update setIconSize() method

      • new visibility() method

    • widgets.iconBarViewWidgets.IconBarWidget

      • update _onExpand method()

    • widgets.iconBarViewWidgets.IconBarViewWidgetCollection

      • new methods to get flag of ROI tools

    • widgets.tabToolsWidgets.SliceROIViewWidget

      • update Slice ROI actions, slice blob actions, volume ROI actions, volume blob actions methods

    • gui.dialogSkullStripping.DialogSkullStripping

      • update function() method

  • updated methods

    • core.sisypheImage.SisypheImage.getMin()

      • bug fix, lines 4042 & 4055, returns std and not min, replace std(img) by img.min()

    • core.sisypheImage.SisypheImage.getValueAtContiuousIndex()

      • add ndarray type for p parameter

    • core.sisypheTools.HandleWidget.getFontSize()

    • core.sisypheTools.HandleWidget.setFontSize()

    • core.sisypheTools.LineWidget.getFontSize()

    • core.sisypheTools.LineWidget.setFontSize()

      • exception handling for dpi

    • core.sisypheTools.DistanceWidget.__init__()

    • core.sisypheTools.OrthogonalDistanceWidget.__init__()

    • core.sisypheTools.AngleWidget.__init__()

    • core.sisypheTools.BoxWidget.__init__()

    • core.sisypheTools.TextWidget.__init__()

    • core.sisypheTools.HandleWidget.__init__()

    • core.sisypheTools.LineWidget.__init__()

      • add self.SetObjectName(), used in widgets.abstractViewWidget.AbstractViewWidget._updateToolMenu(), see below

    • widgets.selectFileWidgets.SynchronizedFilesSelectionWidget.setSisypheVolumeFilters() method

    • widgets.selectFileWidgets.SynchronizedFilesSelectionWidget.setSequenceFilters() method

    • widgets.selectFileWidgets.SynchronizedFilesSelectionWidget.setModalityFilters() method

    • widgets.selectFileWidgets.SynchronizedFilesSelectionWidget.setSuffixFilters() method

    • widgets.selectFileWidgets.SynchronizedFilesSelectionWidget.setPrefixFilters() method

    • widgets.selectFileWidgets.SynchronizedFilesSelectionWidget.setContainsStringFilters() method

      • Typing correction

    • widgets.selectFileWidgets.SettingsWidget._initSettingsLayout()

      • bug fix, lines 768/785/803/820, vols/rois/dcms/dirs add filenames to FilesSelectionWidget

    • widgets.iconBarViewWidgets.IconBarWidget._onExpand()

      • line 713 & 723, disable synchronization when displaying a single (expanded) view to speed up rendering

    • widgets.sliceViewWidgets.SliceROIViewWidget._updateCameraOrientation()

      • line 7191, remove anisotropic testing to update ROI visibility

    • widgets.sliceViewWidgets.SliceROIViewWidget._onLeftPressEvent()

      • line 9883, no ROImodified synchronisation for 2D brush

    • widgets.sliceViewWidgets.SliceROIViewWidget._onMouseMoveEvent()

      • line 9653, no ROImodified signal for the 2D brush, which is responsible for considerable acceleration of the brush tool

    • widgets.abstractViewWidget.AbstractViewWidget._updateToolMenu()

      • bug fix, lines 1441, replace isinstance(tool, HandleWidget) by tool.GetObjectName() == ‘HandleWidget’

      • bug fix, lines 1448, replace isinstance(tool, LineWidget) by tool.GetObjectName() == ‘LineWidget’

    • widgets.abstractViewWidget.AbstractViewWidget.synchroniseCursorPositionChanged()

      • line 1447, use synchronisation flag attribute (no cursor synchronization if flag is False), used to speed up display

    • widgets.multiViewWidgets.GridViewWidget.setNumberOfVisibleViews()

      • lines 2861 & 2868, no synchronization of hidden views, used to speed up display

    • widgets.attributesWidgets.ListAttributesWidget.__init__()

      • line 2365, change the background colour of the selected item

    • widgets.attributesWidgets.ListAttributesWidget._addItem()

      • line 2472, change the background colour of the selected item

    • widgets.attributesWidgets.ListToolAttributesWidget.__init__()

      • create lock and visibility buttons

    • widgets.attributesWidgets.ListToolAttributesWidget.setIconSize()

      • set icon size of the lock and visibility buttons

    • widgets.attributesWidgets.ListROIAttributesWidget.__init__()

    • widgets.attributesWidgets.ListMeshAttributesWidget.__init__()

    • widgets.attributesWidgets.ListBundleAttributesWidget.__init__()

      • create visibility buttons

    • widgets.attributesWidgets.ListROIAttributesWidget.setIconSize()

    • widgets.attributesWidgets.ListMeshAttributesWidget.setIconSize()

    • widgets.attributesWidgets.ListBundleAttributesWidget.setIconSize()

      • set icon size of the visibility button

    • widgets.attributesWidgets.ListToolAttributesWidget.open()

      • lines 5002, 5023, 5063, 5100, opened tools are locked by default

      • lines 4984, 5014, 5038, 5043, wait progress when opening .xtools file

    • gui.dialogSkullStripping.DialogSkullStripping.function()

      • bug fix, line 202, replace copyFromNumpyArray(mask) by copyFromNumpyArray(mask, spacing=s, defaultshape=False)

  • updated function

    • core.sisypheDownload.installFromHost()

      • bug fix, line 194, new directory

  • new classes

    • core.sisypheSettings.SisypheCustomSettings

      • management of settings from a custom XML file

    • widgets.functionsSettingsWidget.CustomSettingsWidget

      • widget to manage settings from a custom XML file

  • new methods

    • core.sisypheImage.SisypheImage.getValueAtContiuousIndex()

      • get an interpolated scalar value from continuous coordinates

    • widgets.attributesWidgets.ListToolAttributesWidget.lock()

      • method called by lock button

    • widgets.attributesWidgets.ListROIAttributesWidget.visibility()

    • widgets.attributesWidgets.ListMeshAttributesWidget.visibility()

    • widgets.attributesWidgets.ListToolAttributesWidget.visibility()

    • widgets.attributesWidgets.ListBundleAttributesWidget.visibility()

      • method called by visibility button

version 0.22.11, build 05/12/2025

  • updated html documentation

    • PySisyphe_dockroi.rst

    • PySisyphe_ipython.rst

    • PySisyphe_dockroi.rst

    • PySisyphe_dockmesh.rst

    • PySisyphe_docktarget.rst

    • PySisyphe_docktracking.rst

    • PySisyphe_thumbnailbar.rst

    • version-histrory.rst update

    • rebuild sphinx documentation

  • updated files

    • /Sisyphe/settings/settings.xml

    • /Sisyphe/settings/dialogs.xml

    • /Sisyphe/gui/doc/ipython.txt

  • new files

    • /Sisyphe/gui/lightroi/console.png

    • /Sisyphe/gui/darkroi/console.png

  • updated modules

    • version

    • core.sisypheImage

    • core.sisypheROI

    • core.sisypheSettings

    • core.sisypheLUT

    • core.sisypheTools

    • cythonize updated core.sisypheROI module

    • gui.dialogRegistration

    • gui.dialogGenericResults

    • gui.dialogRegistration

    • gui.dialogSegmentation

    • gui.dialogROIStatistics

    • gui.windowSisyphe

    • widgets.attributesWidgets

    • widgets.iconBarViewWidgets

    • widgets.functionsSettingsWidget

    • widgets.consoleWidget

    • widgets.imageWidgets

    • widgets.selectFileWidgets

    • widgets.consoleWidget

    • widgets.LUTWidgets

    • widgets.tabToolsWidgets

    • widgets.abstractViewWidget

  • updated classes

    • core.sisypheImage.SisypheImage

      • refactor the method name from ‘getValueAtContiuousIndex’ to ‘getValueAtContinuousIndex’

      • update getHistogram() method

    • core.sisypheTools.ToolWidgetCollection

      • update __init__() method

      • update createXML() method

      • update parseXML() method

      • add setPurpose() method

      • add getPurpose() method

      • add hasPurpose() method

      • add hasSamePurpose() method

    • core.sisypheTools.HandleWidget

    • core.sisypheTools.LineWidget

      • update copyAttributesTo() and copyAttributesFrom() methods

      • update setTubeVisibility() method

    • core.sisypheTools.ToolWidgetCollection

      • update parseXML() method

    • core.sisypheROI.SisypheROI

      • update getDistanceMap() method

    • core.sisypheSettings.SisypheSettings

      • update getFieldValue() method

      • update setFieldValue() method

    • core.sisypheLUT.SisypheLUT

      • add getInternalColormapFromName() method

    • gui.dialogRegistration.DialogRegistration

      • add setFilesToApply() method

      • add getFilesToApply() method

    • gui.dialogGenericResults.DialogGenericResults

      • update __init__() method

      • update newTab() method

      • add _onCopyConsole() method

      • add setConsoleWidget() method

      • add getConsoleWidget() method

      • add hasConsoleWidget() method

    • gui.dialogRegistration.DialogICBMNormalization

      • update _updateTemplate() method

    • gui.dialogSegmentation.DialogCorticalThickness

      • update getFilenames() method

    • gui.dialogROIStatistics.DialogROIStatistics

      • update __init__()

      • add setConsoleWidget() method

      • add getConsoleWidget() method

      • add hasConsoleWidget() method

      • add _copyStatsToConsole() method

      • add _copyHistogramsToConsole() method

    • gui.windowSisyphe.WindowSisyphe

      • update __init__() method

    • widgets.attributesWidgets.ListAttributesWidget

      • update __init__() method

      • update setIconSize() method

      • add copyToConsole() method

    • widgets.attributesWidgets.ListROIAttributesWidget

      • update __init__() method

      • update toDistance() method

      • add copyToConsole() method

    • widgets.attributesWidgets.ListToolAttributesWidget

      • update __init__() method

      • update setIconSize() method

      • add properties() method

      • update features() method

      • add copyToConsole() method

    • widgets.attributesWidgets.ListMeshAttributesWidget

      • update features() method

      • add copyToConsole() method

    • widgets.attributesWidgets.ListBundleAttributesWidget

      • update statistics() method

      • add copyToConsole() method

    • widgets.attributesWidgets.ItemMeshAttributesWidget

    • widgets.attributesWidgets.ItemToolAttributesWidget

    • widgets.attributesWidgets.ItemBundleAttributesWidget

      • update __init__() method

    • widgets.attributesWidgets.ItemToolAttributesWidget

      • update setDefaultAttributesFromSettings() method

    • widgets.iconBarViewWidgets.IconBarWidget

      • update _onExpand() method

      • add isTimerEnabled() method

    • widgets.iconBarViewWidgets.conBarViewWidgetCollection

      • update getSelectedSliceIndex() method

    • widgets.functionsSettingsWidget.SettingsWidget

      • update __init__() method

      • update toggleSettingsVisibility() method

      • update settingsVisibilityOn() method

      • update settingsVisibilityOff() method

      • update resetSettings() method

      • update _initSettingsLayout() method

      • update getParameterValue() method

    • widgets.consoleWidget.ConsoleWidget

      • update __init__()

      • add hasVariable() method

      • add _popupGlobals() method

      • add _plot() method

    • widgets.imageWidgets.SisypheVolumeThumbnailButtonWidget

      • update __init__() method

      • add copyToConsole() method

    • widgets.selectFileWidgets.FileSelectionWidget

      • update open() method

    • widgets.selectFileWidgets.FilesSelectionWidget

      • update add() method

    • widgets.selectFileWidgets.SynchronizedFilesSelectionWidget

      • update getFilenames() method

      • update setFilenames() method

    • widgets.consoleWidget.ConsoleWidget

      • update __init__() method

    • widgets.LUTWidgets.ComboBoxLut

      • add removeFilesLut() method

    • widgets.tabToolsWidgets.TabWidget

      • update __init__() method

      • add setMainWindow() method

      • add getMainWindow() method

      • add hasMainWindow() method

    • widgets.tabToolsWidgets.TabROIToolsWidget

      • update statistics() method

    • widgets.abstractViewWidget.AbstractViewWidget

      • update copyToolAttributes() method

  • updated methods

    • core.sisypheImage.SisypheImage.getHistogram()

      • add intervals to the returned value

    • core.sisypheTools.ToolWidgetCollection.__init__()

      • add the purpose attribute (_purpose)

    • core.sisypheTools.ToolWidgetCollection.createXML()

    • core.sisypheTools.ToolWidgetCollection.parseXML()

      • add the purpose field in the .xtools file format

    • core.sisypheTools.HandleWidget.copyAttributesTo()

    • core.sisypheTools.LineWidget.copyAttributesTo()

    • core.sisypheTools.HandleWidget.copyAttributesFrom()

    • core.sisypheTools.LineWidget.copyAttributesFrom()

      • copy legend, suffix, prefix, and name attributes rather than text

    • core.sisypheTools.ToolWidgetCollection.parseXML()

      • lines 7001 & 7007, set an empty legend parameter rather than using the default values (i.e. ‘Target’ for HandleWidget and (‘Target’, ‘Entry’) for LineWidget)

    • core.sisypheTools.LineWidget.setTubeVisibility()

      • bug fix, restore self._contourActor and self._tubeActor visibility management

    • core.sisypheROI.SisypheROI.getDistanceMap()

      • add outside parameter to calculate distance map with positive values outside (True) or positive values inside (False)

    • core.sisypheSettings.SisypheSettings.getFieldValue()

      • line 869, path xml attribute management for ‘vol’ vartype

      • line 915, returns an empty list for ‘dirs’, ‘vols’, ‘rois’, ‘dcms’ vartype if data node is empty (returned ‘’ previouly)

    • core.sisypheSettings.SisypheSettings.setFieldValue()

      • line 964, path xml attribute management for ‘vol’ vartype

    • widgets.attributesWidgets.ListAttributesWidget.__init__()

      • create ‘Copy to console’ button

    • widgets.attributesWidgets.ListAttributesWidget.setIconSize()

      • set size of the ‘Copy to console’ button

    • widgets.attributesWidgets.ListROIAttributesWidget.__init__()

      • add popup menu to _dist button (‘outside positive’ and ‘inside positive’)

      • add tooltip for the ‘Copy to console’ button

    • widgets.attributesWidgets.ListROIAttributesWidget.toDistance()

      • add outside parameter to calculate distance map with positive values outside (True) or positive values inside (False)

    • widgets.attributesWidgets.ListToolAttributesWidget.__init__()

      • create properties button

      • add tooltip for the ‘Copy to console’ button

    • widgets.attributesWidgets.ListToolAttributesWidget.setIconSize()

      • set icon size of the properties button

    • widgets.attributesWidgets.ListToolAttributesWidget.features()

    • widgets.attributesWidgets.ListToolAttributesWidget.features2()

      • lines 5472 & 5691, add ‘copy to console button’ to DialogGenericResults

    • widgets.attributesWidgets.ListMeshAttributesWidget.__init__()

      • add tooltip for the ‘Copy to console’ button

    • widgets.attributesWidgets.ListMeshAttributesWidget.features()

      • line 4537, add ‘copy to console’ button to DialogGenericResults

    • widgets.attributesWidgets.ListBundleAttributesWidget.__init__()

      • add tooltip for the ‘Copy to console’ button

    • widgets.attributesWidgets.ListBundleAttributesWidget.statistics()

      • line 7239, add ‘copy to console’ button to DialogGenericResults

    • widgets.attributesWidgets.ItemMeshAttributesWidget.__init__()

    • widgets.attributesWidgets.ItemToolAttributesWidget.__init__()

    • widgets.attributesWidgets.ItemBundleAttributesWidget.__init__()

      • change the title bar color of the child dialogs (win32 platform)

    • widgets.attributesWidgets.ItemToolAttributesWidget.setDefaultAttributesFromSettings()

      • bug fix, line 1525, add self._color.setFloatColor(v[0], v[1], v[2], signal=False) to update button color

    • widgets.iconBarViewWidgets.IconBarWidget._onExpand()

      • hide the grid icon when the view is expanded (expand icon selected)

    • widgets.iconBarViewWidgets.conBarViewWidgetCollection.getSelectedSliceIndex()

      • bug fix, line 3963, widget that is displayed

      • bug fix, line 3971, select the first cell if no cell is selected

    • widgets.functionsSettingsWidget.SettingsWidget.__init__()

      • line 345, replace self._button.clicked.connect(self.toggleSettingsVisibility) by self._button.clicked.connect(lambda _: self.toggleSettingsVisibility(True))

    • widgets.functionsSettingsWidget.SettingsWidget.toggleSettingsVisibility()

    • widgets.functionsSettingsWidget.SettingsWidget.settingsVisibilityOn()

    • widgets.functionsSettingsWidget.SettingsWidget.settingsVisibilityOff()

      • add a signal parameter that will indicate whether or not the VisibilityToggled Qt signal is emitted

    • widgets.functionsSettingsWidget.SettingsWidget.resetSettings()

      • line 1275, path xml attribute management for ‘vol’ vartype

    • widgets.functionsSettingsWidget.SettingsWidget._initSettingsLayout()

      • line 723 path xml attribute management for ‘vol’ vartype

    • widgets.functionsSettingsWidget.SettingsWidget.getParameterValue()

      • line 1013, bug fix, isinstance(self._parameters[parameter], ComboBoxLut) before isinstance(self._parameters[parameter], ComboBox)

    • widgets.imageWidgets.SisypheVolumeThumbnailButtonWidget.__init__()

      • add ‘Copy to console’ QAction

    • widgets.selectFileWidgets.FileSelectionWidget.open()

      • lines 1478, 1492, 1515, 1730, 1817, 1881, 1995, 2050, 2099, change default folder of QFileDialog

    • widgets.selectFileWidgets.FilesSelectionWidget.add()

      • change typing of the filenames parameter, from str to str | list[str]

      • line 2988, management of list[str] filenames parameter

    • widgets.selectFileWidgets.SynchronizedFilesSelectionWidget.getFilenames()

    • widgets.selectFileWidgets.SynchronizedFilesSelectionWidget.setFilenames()

      • typing corretion, from dict[str, dict[str, str]] to dict[str, dict[str, str | list[str]]]

    • widgets.consoleWidget.ConsoleWidget.__init__()

      • line 148, replace _console type from RichJupyterWidget to RichJupyterWidget2

      • RichJupyterWidget2 is a subclass of RichJupyterWidget that adds key events

        • key . triggers the complete widget display

        • key ( displays ()

        • key [ displays []

        • key { displays {}

        • key quote displays ‘’

        • key double-quote displays “”

      • line 196, add _globals QTreeWidget popup menu management

    • widgets.tabToolsWidgets.TabWidget.__init__()

      • line 120, add _mainwindow attribute

    • widgets.tabToolsWidgets.TabROIToolsWidget.statistics()

      • line 2251, add self._statistics.setConsoleWidget(self._mainwindow.getConsole())

    • gui.dialogGenericResults.DialogGenericResults.__init__()

      • add _console ConsoleWidget attribute, used to create dataset variable in the console

    • gui.dialogGenericResults.DialogGenericResults.newTab()

      • add ‘Copy to console’ button

      • add tooltips to buttons

    • gui.dialogRegistration.DialogICBMNormalization._updateTemplate()

      • line 1078, change abspath position

    • gui.dialogSegmentation.DialogCorticalThickness.getFilenames()

      • typing corretion, from list[str] to dict[str, str | list[str]]

      • line 1811, change return value from return self._select.getFilenames() to return self._select.getFilenames()[‘multiple’]

    • gui.dialogROIStatistics.DialogROIStatistics.__init__()

      • add ‘Copy to console’ button

    • gui.windowSisyphe.WindowSisyphe.__init__()

      • line 456, add self._tabROITools.setMainWindow(self)

  • new methods

    • core.sisypheTools.ToolWidgetCollection.setPurpose()

    • core.sisypheTools.ToolWidgetCollection.getPurpose()

    • core.sisypheTools.ToolWidgetCollection.hasPurpose()

    • core.sisypheTools.ToolWidgetCollection.hasSamePurpose()

      • methods to manage the new purpose attribute

    • core.sisypheLUT.SisypheLUT.getInternalColormapFromName()

      • returns internal name of a Look-Up table colormap (matplotlib name) from its public name

    • gui.dialogRegistration.DialogRegistration.setFilesToApply()

    • gui.dialogRegistration.DialogRegistration.getFilesToApply()

      • set/get additionnal volume(s) to resample

    • gui.dialogGenericResults.DialogGenericResults._onCopyConsole()

      • method called by ‘Copy to console’ button to copy dataset as variable in the console widget.

    • gui.dialogGenericResults.DialogGenericResults.setConsoleWidget()

    • gui.dialogGenericResults.DialogGenericResults.getConsoleWidget()

    • gui.dialogGenericResults.DialogGenericResults.hasConsoleWidget()

      • set & get _console ConsoleWidget attribute

    • gui.dialogROIStatistics.DialogROIStatistics.setConsoleWidget()

    • gui.dialogROIStatistics.DialogROIStatistics.getConsoleWidget()

    • gui.dialogROIStatistics.DialogROIStatistics.hasConsoleWidget()

      • set & get _console ConsoleWidget attribute

    • gui.dialogROIStatistics.DialogROIStatistics._copyStatsToConsole()

      • called by ‘Copy to console’ button menu event. Copy ROI descriptive and shape statistics to the concole

    • gui.dialogROIStatistics.DialogROIStatistics._copyHistogramsToConsole

      • called by ‘Copy to console’ button menu event. Copy ROI histograms to the console

    • widgets.attributesWidgets.ListAttributesWidget.copyToConsole()

    • widgets.attributesWidgets.ListROIAttributesWidget.copyToConsole()

    • widgets.attributesWidgets.ListMeshAttributesWidget.copyToConsole()

    • widgets.attributesWidgets.ListToolAttributesWidget.copyToConsole()

    • widgets.attributesWidgets.ListBundleAttributesWidget.copyToConsole()

      • copy checked items to the console

    • widgets.attributesWidgets.ListToolAttributesWidget.properties()

      • change properties of checked ItemToolAttributesWidget

    • widgets.consoleWidget.ConsoleWidget.hasVariable()

      • check if a variable already exists in the console

    • widgets.consoleWidget.ConsoleWidget._popupGlobals()

      • displays popup menu after right-click event on Globals QTreeWidgetItem (numpy, list and sitkImage variables)

    • widgets.consoleWidget.ConsoleWidget._plot()

      • called by Globals QTreeWidgetItem popup menu

      • displays various matplotlib pyplot charts (line, bar, stairs, Box-and-Whisker, violin, histogram, scatter, matrix and image plots) in the console

    • widgets.imageWidgets.SisypheVolumeThumbnailButtonWidget.copyToConsole()

      • copy self._volume to PySisyphe console

    • widgets.LUTWidgets.ComboBoxLut.removeFilesLut()

      • remove files lut (keep only internal lut)

    • widgets.tabToolsWidgets.TabWidget.setMainWindow()

    • widgets.tabToolsWidgets.TabWidget.getMainWindow()

    • widgets.tabToolsWidgets.TabWidget.hasMainWindow()

      • methods to get/set _mainwindow attribute

    • widgets.abstractViewWidget.AbstractViewWidget.copyToolAttributes()

      • bug fix, line 4736, add self._renderwindow.Render() to update VolumeView display

    • widgets.iconBarViewWidgets.IconBarWidget.isTimerEnabled()

updated function

  • version.isNewerThan()

    • bug fix, line 100, replace < by > between current[2] and version[2]

version 0.24.14, build 12/01/2026

  • updated html documentation

    • PySisyphe_ipython.rst

    • PySisyphe_Registration.rst

    • PySisyphe_dockroitools.rst

    • PySisyphe_Mapping.rst

    • version-histrory.rst update

    • rebuild sphinx documentation

  • updated files

    • /Sisyphe/gui/doc/ipython.txt

      • add %gemini command documentation

    • /Sisyphe/settings/settings.xml

      • add <Gemini> section, <APIKey> field

    • /Sisyphe/templates/ICBM152/icbm152_sym_template_mask.xvol

    • /Sisyphe/templates/ICBM152/icbm152_asym_template_mask.xvol

      • datatype conversion, from float32 to uint8

  • new external module

    • google-genai

    • esayocr

    • pymupdf

      • rebuild pyinstaller with upx=False (EXE and COLLECT) options

  • new plugins

    • SEEG

    • REPORT

  • new modules

    • core.sisyphePDF

      • new SisyphePDF class

    • gui.dialogGemini

      • new DialogGemini class

  • updated modules

    • core.sisypheSettings

    • core.sisypheDatabase

    • core.sisypheImage

    • core.sisypheVolume

    • core.sisypheROI

      • new cython compilation of the updated core.sisypheROI module

    • core.sisypheTools

    • core.sisypheFiducialBox

    • processing.simpleItkFilters

    • widgets.consoleWidget

    • widgets.iconBarWidgets

    • widgets.tabToolsWidgets

    • widgets.sliceViewWidgets

    • widgets.projectionViewWidget

    • widgets.sliceViewFiducialBoxWidget

    • widgets.multiComponentViewWidget

    • widgets.attributesWidgets

    • widgets.selectFileWidgets

    • processing.dscFunctions

    • gui.dialogDownload

    • gui.dialogVolumeAttributes

    • gui.dialogFunction

    • gui.dialogDatatype

    • gui.dialogSettings

    • gui.dialogSplash

    • gui.dialogManualRegistration

    • gui.dialogRegistration

    • gui.dialogPerfusion

    • gui.windowSisyphe

    • PySisyphe

      • line 15, hide console in frozen mode

  • new functions

    • processing.dscFunctions.gamma_variate()

    • processing.dscFunctions.fit_gamma_variate()

    • processing.dscFunctions.generate_ttp()

    • processing.dscFunctions.generate_leakage()

    • processing.dscFunctions.generate_perfusion_maps()

    • processing.dscFunctions.oSVD()

    • processing.dscFunctions.boxNLR()

    • processing.dscFunctions.fit_boxNLR()

    • processing.dscFunctions.dscMaps2()

      • new MR perfusion processing using PyPeT implementation, dramatic improvement in processing time (less than 10s)

  • updated functions

    • core.sisypheSettings.initPySisypheUserPath()

      • line 185, set current and default database paths (~/.PySisyphe/database) in the settings file

      • line 136, add ~/.PySisyphe/prompts directory

    • core.sisypheSettings.setUserSettingsToDefault()

      • line 245, set current and default database paths (~/.PySisyphe/database) in the settings file

    • processing.simpleItkFilters.regressionIntensityMatching()

      • line 891, remove unnecessary flatten()

      • line 910, cast result to original datatype

  • new classes

    • core core.sisypheFiducialBox.LeksellProcessings

      • arc & ring angles conversion between Leksell orientations

      • calculate entry point from arc, ring, orientation, target point and trajectory length.

    • gui.dialogGemini.DialogGemini

      • GUI dialog window, gemini LLM prompt for segmentation

    • gui.dialogRegistration.DialogFrameBasedRegistration

      • GUI dialog window for frame-based registration

    • gui.dialogPerfusion.DialogPerfusion2

      • new MR perfusion processing using PyPeT implementation, dramatic improvement in processing time (less than 10s)

  • updated classes

    • core.sisypheSettings.SisypheSettings

      • update getUserSettings() method

    • core.sisypheDatabase.SisypheDatabase

      • update setDefaultDatabasePath() method

    • core.sisypheImage.SisypheImage

      • update getMaskROI() method

      • add copyFromPillowImage() method

      • add copyToPillowImage() method

      • update getMask2() method

      • update getMaskROI2() method

      • update setOrigin() method

      • update setDirections() method

      • update getNumpy() method

    • core.sisypheVolume.SisypheVolume

      • add copyToPillowImage() method

      • update getMask2() method

      • update getMaskROI2() method

    • core.sisypheROI.SisypheROI

      • update drawRectangle() method

    • core.sisypheTools.DistanceWidget

    • core.sisypheTools.OrthogonalDistanceWidget

    • core.sisypheTools.AngleWidget

    • core.sisypheTools.BoxWidget

    • core.sisypheTools.TextWidget

      • update getVisibility() method

    • core.sisypheFiducialBox.SisypheFiducialBox

      • update _markersSearch() method

    • widgets.consoleWidget.ConsoleWidget

      • update _popupGlobals() method

      • update __init__() method

    • widgets.consoleWidget.RichJupyterWidget2

      • update __init__() method

      • update execute() method

    • widgets.iconBarWidgets.IconBarWidget

      • update _onExpand() method

      • update setViewWidget() method

    • widgets.widgets.tabToolsWidgets.TabROIToolsWidget

      • update __init__() method

      • add _popupGeminiMenu() method

      • add _geminiClicked() method

    • widgets.sliceViewWidgets.SliceOverlayViewWidget

      • update _addToMenuVoxelOverlayValue() method

      • update _getInfoValuesText() method

    • widgets.projectionViewWidget.ProjectionViewWidget

      • update __init__() method

      • update _updateProjection() method

      • update setVolume() method

      • update removeVolume() method

    • widgets.projectionViewWidget.MultiProjectionViewWidget

      • update __init__() method

      • update setVolume() method

      • update removeVolume() method

    • widgets.sliceViewFiducialBoxWidget.SliceViewFiducialBoxWidget

      • update __init__() method

    • widgets.multiComponentViewWidget.MultiComponentViewWidget

      • update __init__() method

    • widgets.attributesWidgets.ListToolAttributesWidget

      • update open() method

      • update saveall() method

      • update removeall() method

      • update remove() method

      • update removeItem() method

    • widgets.attributesWidgets.ItemToolAttributesWidget

      • update setLock() method

    • widgets.selectFileWidgets.FilesSelectionWidget

      • update add() method

    • widgets.selectFileWidgets.SelectionFilter

      • update init() method

      • add filterTransform() method

      • add getTransformFilter() method

      • update clearFilters() method

    • widgets.selectFileWidgets.FileSelectionWidget

      • update open() method

    • widgets.selectFileWidgets.FilesSelectionWidget

      • update add() method

    • gui.dialogDownload.DialogDownload

      • update download() method

    • gui.dialogVolumeAttributes.DialogVolumeAttributes

      • update __init__() method

      • add _unlockSpacing() method

      • add _unlockOrigin() method

    • gui.dialogFunction.DialogRegressionIntensityMatching

      • update __init__() method

      • update function() method

    • gui.dialogDatatype.DialogEditID

      • update execute() method

      • add getreferenceSelectionWidget() method

      • add setreferenceSelectionWidget() method

    • gui.dialogSettings.DialogSettings

      • update apply() method

    • gui.dialogSplash.DialogSplash

      • update __init__() method

    • gui.dialogManualRegistration.DialogManualRegistration

      • update __init__() method

    • gui.windowSisyphe.WindowSisyphe

      • update __init__() method

      • update editID() method

      • add frameRegistration() method

      • update checkUpdate() method

  • updated methods

    • core.sisypheSettings.SisypheSettings.getUserSettings()

      • line 376, set current and default database paths (~/.PySisyphe/database) if the user file settings do not exist

    • core.sisypheDatabase.SisypheDatabase.setDefaultDatabasePath()

      • line 381, set default database path from ‘DefaultPath’ field of the settings file. If this field is empty, set the PySisyphe patient database folder to ~/.PySisyphe/Database (in user folder)

    • core.sisypheImage.SisypheImage.getMaskROI()

      • line 2613, bug fix, avoid exception if morpho = ‘’

    • core.sisypheImage.SisypheImage.getMask2()

    • core.sisypheImage.SisypheImage.getMaskROI2()

      • add objstep parameter

      • replace morphological operator iteration by the size of the structuring element

    • core.sisypheImage.SisypheVolume.getMask2()

    • core.sisypheImage.SisypheVolume.getMaskROI2()

      • add objstep parameter

    • core.sisypheImage.SisypheImage.setOrigin()

      • bug fix, line 2357, replace self._sitk_image.GetDepth() with self._sitk_image.GetDimension()

    • core.sisypheImage.SisypheImage.setDirections()

      • bug fix, line 2304, 2D image management

    • core.sisypheImage.SisypheImage.getnumpy()

      • bug fix, line 1552, replace self._numpy_array.ndim == 3 with self._numpy_array.ndim in (2, 3)

    • core.sisypheROI.drawRectangle()

      • bug fix, line 1922, replace extent[:,:,-1] with extent[::-1]

    • core.sisypheTools.DistanceWidget.getVisibility()

    • core.sisypheTools.OrthogonalDistanceWidget.getVisibility()

    • core.sisypheTools.AngleWidget.getVisibility()

    • core.sisypheTools.BoxWidget.getVisibility()

    • core.sisypheTools.TextWidget.getVisibility()

      • Converting the return value from int to a bool

    • core.sisypheFiducialBox.SisypheFiducialBox._markersSearch()

      • bug fix, line 670, expand the search for the first slice with the accurate number (6 or 9) of fiducial markers

    • widgets.consoleWidget.ConsoleWidget.__init__()

      • line 418, to avoid displaying “chcp 65001” on the console

    • widgets.consoleWidget.ConsoleWidget._popupGlobals()

      • lines 483 & 494, test data type, no popup for non-numeric types

    • widgets.consoleWidget.RichJupyterWidget2.__init__()

      • add self._aikey attribute: str, google gemini api key

      • add self._aimodel attribute: str, google gemini model

      • add self._client attribute: genai.Client, google gemini client class

    • widgets.consoleWidget.RichJupyterWidget2.execute()

      • ‘%gemini’ magic command management

    • widgets.iconBarWidgets.IconBarWidget._onExpand()

      • line 710, if no view is selected, select the first one and expand it

    • widgets.iconBarWidgets.IconBarWidget.setViewWidget()

      • lines 1166, 1235 & 1286, change iconbar button order

    • widgets.widgets.tabToolsWidgets.TabROIToolsWidget.__init__()

      • add gemini button (self._btn[‘gemini’])

    • widgets.sliceViewWidgets.SliceOverlayViewWidget._addToMenuVoxelOverlayValue()

      • line 3801, remove self._ovlvalue = volume

    • widgets.sliceViewWidgets.SliceOverlayViewWidget._getInfoValuesText()

      • line 3759, display overlay value if overlay size match with reference

    • widgets.projectionViewWidget.ProjectionViewWidget.__init__()

      • add self._mask attribute

    • widgets.projectionViewWidget.ProjectionViewWidget._updateProjection()

      • add self._mask processing

    • widgets.projectionViewWidget.ProjectionViewWidget.setVolume()

      • add self._mask processing

    • widgets.projectionViewWidget.ProjectionViewWidget.removeVolume()

      • add self._mask = None

    • widgets.projectionViewWidget.MultiProjectionViewWidget.__init__()

      • add self._mask attribute

    • widgets.projectionViewWidget.MultiProjectionViewWidget.setVolume()

      • add self._mask processing

    • widgets.projectionViewWidget.MultiProjectionViewWidget.removeVolume()

      • add self._mask = None

    • widgets.attributesWidgets.ListToolAttributesWidget.open()

    • widgets.attributesWidgets.ListToolAttributesWidget.saveall()

    • widgets.attributesWidgets.ListToolAttributesWidget.removeall()

    • widgets.attributesWidgets.ListToolAttributesWidget.remove()

    • widgets.attributesWidgets.ListToolAttributesWidget.removeItem()

      • self._collection purpose attribute management

    • widgets.sliceViewFiducialBoxWidget.SliceViewFiducialBoxWidget.__init__()

      • line 92, add tool.setHandleSize(5.0)

    • widgets.multiComponentViewWidget.MultiComponentViewWidget.__init__()

      • line 143, increases the relative chart area

    • widgets.attributesWidgets.ItemToolAttributesWidget.setLock()

      • bug fix, line 1589, unlock tool

    • widgets.selectFileWidgets.SelectionFilter.__init__()

    • widgets.selectFileWidgets.SelectionFilter.clearFilters()

      • add transform filter attribute (self._reftrf)

    • widgets.selectFileWidgets.FileSelectionWidget.open()

      • line 1743, add transform filter management

    • widgets.selectFileWidgets.FilesSelectionWidget.add()

      • line 3448, add transform filter management

    • gui.dialogDownload.DialogDownload.download()

      • line 261, add information dialog boxes after the download is complete

    • gui.dialogVolumeAttributes.DialogVolumeAttributes.__init__()

      • add QCheckBox self._unlocksp and self._unlocko before spacing/origin

    • gui.dialogFunction.DialogRegressionIntensityMatching.__init__()

      • add self._mask attribute

    • gui.dialogFunction.DialogRegressionIntensityMatching.function()

      • line 870, use self._mask attribute to store mask to avoid recalculating it

    • gui.dialogDatatype.DialogEditID.execute()

      • line 446, replace self._files.clear() by self._files.clearall()

    • gui.dialogSettings.DialogSettings.apply()

      • line 553, gemini button visibility in WindowSisyphe._tabROIList

    • gui.dialogSplash.DialogSplash.__init__()

      • line 180, add device context info (context = renderer.ReportCapabilities())

    • gui.dialogManualRegistration.DialogManualRegistration.__init__()

      • Reverse the order of the ‘OK’ and ‘Cancel’ buttons.

    • gui.windowSisyphe.WindowSisyphe.__init__()

      • line 459, gemini button visibility in self._tabROIList

    • gui.windowSisyphe.WindowSisyphe.editID()

      • line 3375, setToolbarThumbnail to dialog file selection widgets

    • gui.windowSisyphe.WindowSisyphe.checkUpdate()

      • line 3761, message for new modules

  • new methods

    • core.sisypheImage.SisypheImage.copyFromPillowImage()

    • core.sisypheImage.SisypheImage.copyToPillowImage()

      • copy to Pillow image

    • core.sisypheVolume.SisypheImage.copyToPillowImage()

      • copy to Pillow image

    • widgets.widgets.tabToolsWidgets.TabROIToolsWidget._popupGeminiMenu()

    • widgets.widgets.tabToolsWidgets.TabROIToolsWidget._geminiClicked()

      • gemini button menu management

    • widgets.selectFileWidgets.SelectionFilter.filterTransform()

    • widgets.selectFileWidgets.SelectionFilter.getTransformFilter()

      • set and get transform filter methods

    • gui.dialogVolumeAttributes.DialogVolumeAttributes._unlockSpacing()

      • called by QCheckBox self._unlocksp toggled event

    • gui.dialogVolumeAttributes.DialogVolumeAttributes._unlockOrigin()

      • called by QCheckBox self._unlocko toggled event

    • gui.dialogDatatype.DialogEditID.getreferenceSelectionWidget()

    • gui.dialogDatatype.DialogEditID.setreferenceSelectionWidget()

    • gui.windowSisyphe.WindowSisyphe.frameRegistration()

      • call the frame-based registration dialog box