Version history

Version increment rules

  • major version increment

    • 100 minor version increments

  • minor version increment

    • new python interpreter version (+50 minor version increments)

    • 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

      • this resulted in 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, change returned 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

    • settings/MR.xdcm

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

    • settings/dialogs.xml

    • settings/tootips.xml

    • 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

    • 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

    • settings/tooltips.xml

    • 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

    • 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

    • settings/settings.xml

    • settings/dialogs.xml

    • gui/doc/ipython.txt

  • new files

    • gui/lightroi/console.png

    • 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_installation.rst

    • PySisyphe_Registration.rst

    • PySisyphe_Segmentation.rst

    • PySisyphe_dockroitools.rst

    • PySisyphe_Mapping.rst

    • version-histrory.rst update

    • rebuild sphinx documentation

  • updated files

    • gui/doc/ipython.txt

      • add %gemini command documentation

    • settings/settings.xml

      • add <Gemini> section, <APIKey> field

    • templates/ICBM152/icbm152_sym_template_mask.xvol

    • templates/ICBM152/icbm152_asym_template_mask.xvol

      • datatype conversion, from float32 to uint8

  • new external module

    • google-genai

    • esayocr

    • pymupdf

      • rebuild frozen version (pyinstaller with upx=False)

  • 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

      • there is a dramatic improvement in processing time (less than 10s) with the new MR perfusion processing using PyPeT implementation

  • 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

version 0.25.04, build 20/01/2026

  • updated html documentation

    • API/api_tools.rst

    • API/api_fiducial.rst

    • version-histrory.rst update

    • rebuild sphinx documentation

  • updated file

    • settings/functions.xml

      • fix xml error, line 386, remove “‘s” in Block-circulant SVD with Simpson’s rule

  • updated modules

    • core.sisypheTools

    • core.sisypheFiducialBox

    • core.sisypheTools

    • core.sisyphePDF

    • core.sisypheImage

    • core.sisypheDownload

    • widgets.sliceViewWidgets

    • widgets.attributesWidgets

    • gui.dialogPerfusion

    • gui.dialogSettings

    • gui.dialogReorient

    • gui.windowSisyphe

  • updated classes

    • core.sisypheTools.LineWidget

      • update getVector() method

      • new method getAngleToLineWidget()

      • new alias method setEntryPosition()

      • new alias method getEntryPosition()

      • new alias method setTargetPosition()

      • new alias method getTargetPosition()

      • new alias method extendEntryPosition()

    • new alias method extendTargetPosition()

    • new alias method extendEntryPositionToPlane()

    • new alias method extendTargetPositionToPlane()

    • new alias method extendEntryPositionToMeshSurface()

    • new alias method extendTargetPositionToMeshSurface()
      • new alias method extendEntryPositionToMeshCenterOfMass()

    • new alias method extendTargetPositionToMeshCenterOfMass()
      • new alias method extendEntryPositionToMeshCenter()

      • new alias method extendTargetPositionToMeshCenter()

    • core.sisypheFiducialBox.LeksellProcessings

      • update computeEntryPoint() method

      • update convertAngles() method

    • core.sisypheTools.ToolWidgetCollection

      • new verifyName() method

    • core.sisyphePDF.SisypheParsePdf

      • update loadFieldNames() method

      • update parse() method

      • new parseRenishawReport() method

    • core.sisypheImage.SisypheImage

      • new fillSlicesWith() method

      • new getReorient() method

    • core.sisypheDownload

      • update installFromHost() method

    • widgets.sliceViewWidgets.SliceViewWidget

      • update displayOn() method

    • widgets.attributesWidgets.ListToolAttributesWidget

      • update open() method

    • gui.dialogPerfusion.DialogPerfusion2

      • update function() method

    • gui.dialogSettings.DialogSettings

      • update apply() method

      • update default() method

    • gui.dialogReorient.DialogReorient

      • update __init__() method

      • update autoTransform() method

    • gui.windowSisyphe.WindowSisyphe

      • update __init__() method

      • update getUserDirectory() method

  • new methods

    • core.sisypheTools.LineWidget.getAngleToLineWidget()

      • get angle between a LineWidget and the current LineWidget instance

    • core.sisypheTools.LineWidget.setEntryPosition()

    • core.sisypheTools.LineWidget.getEntryPosition()

    • core.sisypheTools.LineWidget.setTargetPosition()

    • core.sisypheTools.LineWidget.getTargetPosition()

    • core.sisypheTools.LineWidget.extendEntryPosition()

    • core.sisypheTools.LineWidget.extendTargetPosition()

    • core.sisypheTools.LineWidget.extendEntryPositionToPlane()

    • core.sisypheTools.LineWidget.extendTargetPositionToPlane()

    • core.sisypheTools.LineWidget.extendEntryPositionToMeshSurface()

    • core.sisypheTools.LineWidget.extendTargetPositionToMeshSurface()
      • core.sisypheTools.LineWidget.extendEntryPositionToMeshCenterOfMass()

    • core.sisypheTools.LineWidget.extendTargetPositionToMeshCenterOfMass()
      • core.sisypheTools.LineWidget.extendEntryPositionToMeshCenter()

      • core.sisypheTools.LineWidget.extendTargetPositionToMeshCenter()

        • method aliases

      • core.sisypheTools.ToolWidgetCollection.verifyName()

        • check if a tool name is already in the current ToolWidgetCollection instance. If so, a new name is returned

      with a numeric suffix (e.g. #1 …), the same name is returned otherwise

    • core.sisyphePDF.SisypheParsePdf.parseRenishawReport()

      • Renishaw robotic neurosurgery system report parsing

    • core.sisypheImage.SisypheImage.fillSlicesWith()

      • fill slices with a given value

    • core.sisypheImage.SisypheImage.getReorient()

      • Get the rotations (y-axis and z-axis) to automatically reorient the volume

  • updated methods

    • core.sisypheTools.LineWidget.getVector()

      • bug fix, line 4519

    • core.sisypheTools.LineWidget.extendPosition1ToMeshSurface()

      • search direction management (both, target to entry direction or entry to target direction)

    • core.sisypheTools.LineWidget.extendPosition2ToMeshSurface()

      • search direction management (both, target to entry direction or entry to target direction)

    • core.sisypheFiducialBox.LeksellProcessings.computeEntryPoint()

      • bug fix, changing the sign of the z-value of vectors

    • core.sisypheFiducialBox.LeksellProcessings.convertAngles()

      • removal of vector normalization and matrix inversion, which are unnecessary

    • core.sisyphePDF.SisypheParsePdf.loadFieldNames()

      • bug fix, line 437, add line node = node.nextSibling

    • core.sisyphePDF.SisypheParsePdf.parse()

      • line 264, modifiy relative threshold to detect line increments (from 0.95 to 0.98)

    • core.sisypheDownload.installFromHost()

      • lines 181 & 211, call setUserSettingsToDefault()

      • add exception management

      • add logger information

    • widgets.sliceViewWidgets.SliceViewWidget.displayOn()

      • bug fix, line 994, self._action[‘showicbm’] & self._action[‘showframe’] visibility condition

    • widgets.attributesWidgets.ListToolAttributesWidget.open()

      • bug fix, lines 5313, 5390 & 5429, rename tool if its name is already in the ListToolAttributesWidget

    • gui.dialogPerfusion.DialogPerfusion2.function()

      • line 389, remove “‘s” from “Block-circulant SVD with Simpson’s rule”

    • gui.dialogSettings.DialogSettings.apply()

      • line 563, DockWidgets setMaxCount()

    • gui.dialogSettings.DialogSettings.default()

      • bug fix, line 453, add line if c < 0: c = 0

    • gui.dialogReorient.DialogReorient.__init__()

      • line 178, add self._auto button

    • gui.dialogReorient.DialogReorient.autoTransform()

      • replace autoTransform method, automatic reorientation processing

    • gui.windowSisyphe.WindowSisyphe.__init__()

      • line 584, add chdir(self.getUserDirectory())

    • gui.windowSisyphe.WindowSisyphe.getUserDirectory()

      • line 188, call setUserSettingsToDefault()

version 0.76.22, build 29/01/2026

  • Python interpreter upgrade

    • from 3.10 to 3.12

    • rebuild frozen version (pyinstaller)

  • upgraded modules

    • itk, from 5.4.3 to 5.4.5

    • vtk, from 9.4.2 to 9.5.2

    • pyradiomics to pyradiomics-bhklab, from 3.0.1 to 3.1.4

    • scikit-image, from 0.25.2 to 0.26.0

    • scikit-learn, from 1.6.1 to 1.8.0

  • updated files

    • update requirements.txt file for upgraded modules

    • settings/functions.xml

    • settings/settings.xml

    • templates/ICBM152/icbm152_asym_template_gm.xvol

    • templates/ICBM152/icbm152_sym_template_cortical_gm.xvol

    • templates/ICBM152/icbm152_sym_template_subcortical_gm.xvol

    • templates/ICBM152/icbm152_sym_template_gm.xvol

    • templates/ATROPOS/atropos_template_prior_brainstem.xvol

    • templates/ATROPOS/atropos_template_prior_cerebellum.xvol

    • templates/ATROPOS/atropos_template_prior_cortical_gm.xvol

    • templates/ATROPOS/atropos_template_prior_csf.xvol

    • templates/ATROPOS/atropos_template_prior_gm.xvol

    • templates/ATROPOS/atropos_template_prior_subcortical_gm.xvol

    • templates/ATROPOS/atropos_template_prior_wm.xvol

  • updated html documentation

    • PySisyphe_overview.rst

    • version-histrory.rst update

    • rebuild sphinx documentation

  • update plugins

    • SEEG

    • REPORT

  • updated modules

    • version

    • core.sisypheDownload

    • core.sisypheMesh

    • core.sisypheROI

    • core.sisypheDicom

    • core.sisypheFiducialBox

    • core.sisypheImageAttributes

    • core.sisypheImage

    • widgets.dicomWidgets

    • widgets.sliceViewWidgets

    • widgets.attributesWidgets

    • widgets.abstractViewWidget

    • widgets.tabToolsWidgets

    • dialog.dialogDicomImport

    • dialog.dialogXmlDicom

    • dialog.dialogRegistration

    • dialog.dialogManualRegistration

    • dialog.dialogSplash

    • dialog.dialogSegmentation

  • new functions

    • version.getBuildDate()

    • version.getBuildDateAsStr()

  • updated function

    • core.sisypheDownload.installFromHost()

      • lines 157 & 179, python version management

  • updated classes

    • core.sisypheMesh.SisypheMesh

      • update setName() method

    • core.sisypheROI.SisypheROI

      • update the class constant to a raw string _REGEXP = r’^[_A-Za-z0-9#-_s+,]+$’

      • update setName() method

    • core.sisypheDicom.XmlDicom

      • update loadXmlDicomFilename() method

    • core.sisypheFiducialBox.SisypheFiducialBox

      • update markersSearch() method

      • update _firstSliceSearch() method

    • core.sisypheImageAttributes.SisypheAcquisition

      • new setSequenceToFilledMask() method

    • core.sisypheImage.SisypheImage

      • update getPercentile() method

    • widgets.dicomWidgets.DicomVRLineEdit

      • update _initPN() method

      • update _initUI() method

    • widgets.dicomWidgets.DicomFilesTreeWidget

      • update _pathToDict() method

      • update _updateWidget() method

    • widgets.sliceViewWidgets.SliceRegistrationViewWidget

      • update getRegistrationBoxMaskArea() method

    • widgets.attributesWidgets.ListToolAttributesWidget

      • update duplicate() method

    • widgets.attributesWidgets.ItemToolAttributesWidget

      • update _nameChanged() method

    • widgets.abstractViewWidget.AbstractViewWidget

      • update synchroniseToolRenamed() method

      • update renameTool() method

    • widgets.tabToolsWidgets.TabROIToolsWidget

      • update voiObject() method

      • update voiBack() method

      • update slcObject() method

      • update slcBack() method

    • dialog.dialogDicomImport.DialogDicomImport

      • update convert() method

    • dialog.dialogXmlDicom.DialogXmlDicom

      • update __init__() method

    • dialog.dialogRegistration.DialogRegistration

      • update execute() method

    • dialog.dialogManualRegistration.DialogManualRegistration

      • update _resample() method

      • update _estimate() method

      • update calcMask() method

    • dialog.dialogSplash.DialogSplash

      • update __init__() method

    • dialog.dialogSegmentation.DialogPriorBasedSegmentation

      • update execute() method

  • new methods

    • core.sisypheImageAttributes.SisypheAcquisition.setSequenceToFilledMask()

      • filled hole mask sequence

    • core.sisypheImageAttributes.SisypheAcquisition.setSequenceToBoneWindowCT()

    • core.sisypheImageAttributes.SisypheAcquisition.isGreyMatterMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isSubCorticalGreyMatterMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isWhiteMatterMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isCerebroSpinalFluidMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isBrainstemMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isCerebellumMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isCorticalThicknessMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isCerebralBloodFlowMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isCerebralBloodVolumeMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isMeanTransitTimeMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isTimeToPicMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isDoseMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isFractionalAnisotropyMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isApparentDiffusionMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isDensityMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isBiasFieldMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isDistanceMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isMeanMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isMedianMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isMinimumMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isMaximumMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isStandardDeviationMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isAlgebraMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isMask()

    • core.sisypheImageAttributes.SisypheAcquisition.isFilledMask()

    • core.sisypheImageAttributes.SisypheAcquisition.isStructMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isLabelMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isDisplacementFieldMap()

    • core.sisypheImageAttributes.SisypheAcquisition.isT1Weighted()

    • core.sisypheImageAttributes.SisypheAcquisition.isT2Weighted()

    • core.sisypheImageAttributes.SisypheAcquisition.isT2Star()

    • core.sisypheImageAttributes.SisypheAcquisition.isProtonDensityWeighted()

    • core.sisypheImageAttributes.SisypheAcquisition.isFLAIR()

    • core.sisypheImageAttributes.SisypheAcquisition.isContrastEnhancedT1()

    • core.sisypheImageAttributes.SisypheAcquisition.isContrastEnhancedT2()

    • core.sisypheImageAttributes.SisypheAcquisition.isContrastEnhancedFLAIR()

    • core.sisypheImageAttributes.SisypheAcquisition.isContrastEnhancedTOF(s)

    • core.sisypheImageAttributes.SisypheAcquisition.isEchoPlanar()

    • core.sisypheImageAttributes.SisypheAcquisition.isB0()

    • core.sisypheImageAttributes.SisypheAcquisition.isDiffusionWeighted()

    • core.sisypheImageAttributes.SisypheAcquisition.isPerfusionWeighted()

    • core.sisypheImageAttributes.SisypheAcquisition.isSusceptibilityWeighted()

    • core.sisypheImageAttributes.SisypheAcquisition.isTimeOfFlight()

    • core.sisypheImageAttributes.SisypheAcquisition.isContrastEnhancedCT()

    • core.sisypheImageAttributes.SisypheAcquisition.isBoneWindowCT()

    • core.sisypheImageAttributes.SisypheAcquisition.isFDG()

    • core.sisypheImageAttributes.SisypheAcquisition.isFDOPA()

    • core.sisypheImageAttributes.SisypheAcquisition.isHMPAO()

    • core.sisypheImageAttributes.SisypheAcquisition.isECD()

    • core.sisypheImageAttributes.SisypheAcquisition.isFPCIT()

  • updated methods

    • core.sisypheMesh.SisypheMesh.setName()

      • line 471, change r to a raw string r = r’[^A-Za-z0-9#-_s,]’

    • core.sisypheROI.SisypheROI.setName()

      • line 761, change r to a raw string r = r’[^A-Za-z0-9#-_s,]’

    • core.sisypheDicom.XmlDicom.loadXmlDicomFilename()

      • bug fix, line 1345, UTF-8 non-English character management

    • core.sisypheFiducialBox.SisypheFiducialBox.markersSearch()

      • lines 792 & 798, save self._volume

    • core.sisypheFiducialBox.SisypheFiducialBox._firstSliceSearch()

      • bug fix, line 562, replace minf < buff[i] or buff[i] > msup by buff[i] < minf or buff[i] > msup

    • core.sisypheImage.SisypheImage.getPercentile()

      • perc parameter includes the additional type float

    • widgets.dicomWidgets.DicomVRLineEdit._initPN()

    • widgets.dicomWidgets.DicomVRLineEdit._initUI()

      • line 376, change regex constant to a raw string r’[A-Za-z-s]+^[A-Za-z-s]+’

      • line 406, change regex constant to a raw string r’^[0-9][0-9.]+[0-9]$’

    • widgets.dicomWidgets.DicomFilesTreeWidget._pathToDict()

      • line 944, update dicom tag list

      • line 1048, manage the absence of the DICOM “slice location” field

    • widgets.dicomWidgets.DicomFilesTreeWidget._updateWidget()

      • line 1164, close wait dialog before displaying messageBox

    • widgets.sliceViewWidgets.SliceRegistrationViewWidget.getRegistrationBoxMaskArea()

      • bug fix, line 6311, replace ‘unit8’ by ‘uint8’

      • bug fix, line 6322, add v.setFilename(self._volume.getFilename())

    • widgets.attributesWidgets.ListToolAttributesWidget.duplicate()

      • bug fix, lines 5529,5569 & 5599, replace addTrajectory(p1, p2, name) by addTrajectory(p1, p2, name=name)

    • widgets.attributesWidgets.ItemToolAttributesWidget._nameChanged()

      • bug fix, line 1444, replace self._item.setName(self._name.getEditText()) by self._item.setName(name)

    • widgets.abstractViewWidget.AbstractViewWidget.synchroniseToolRenamed()

    • widgets.abstractViewWidget.AbstractViewWidget.renameTool()

      • bug fix, call self._updateToolMenu() after tool renaming

    • widgets.tabToolsWidgets.TabROIToolsWidget.voiObject()

    • widgets.tabToolsWidgets.TabROIToolsWidget.voiBack()

    • widgets.tabToolsWidgets.TabROIToolsWidget.slcObject()

    • widgets.tabToolsWidgets.TabROIToolsWidget.slcBack()

      • lines 2231 & 2250, change parameters values of maskSegment2() and notMaskSegment2()

    • dialog.dialogDicomImport.DialogDicomImport.convert()

      • lines 242, 279 & 292, hide/show wait box

    • dialog.dialogXmlDicom.DialogXmlDicom.__init__()

      • line 122, remove the fixed width of the OK button

    • dialog.dialogRegistration.DialogRegistration.execute()

      • lines 475 & 499, hide/show wait box

      • line 444, adaptative mask dilatation

      • bug fix, line 467, add parent parameter to DialogManualRegistration

      • bug fix, line 483, add deg=True to trf.setRotations()

    • dialog.dialogRegistration.DialogRegistration.calcMask()

      • lines 118 & 125, dilate parameter includes the additional types tuple and list

    • dialog.dialogManualRegistration.DialogManualRegistration._resample()

      • line 300, close dialog after resampling

    • dialog.dialogManualRegistration.DialogManualRegistration._resample()

      • bug fix, lines 312 & 323, cast images to float32

    • dialog.dialogSplash.DialogSplash.__init__()

      • line 222, add build date

    • dialog.dialogSegmentation.DialogPriorBasedSegmentation.execute()

      • line 1425, replace grey by gray

version 0.78.08, build 01/02/2026

  • updated html documentation

    • version-histrory.rst update

    • PySisyphe_Segmentation.rst

    • PySisyphe_sliceview.rst

    • PySisyphe_orthogonalview.rst

    • PySisyphe_synchronizedview.rst

    • PySisyphe_multicomponentview.rst

    • PySisyphe_Registration.rst

    • PySisyphe_File.rst

    • rebuild sphinx documentation

  • updated files

    • /templates/ICBM152/DESIKAN/icbm152_IIT_accumbens area left.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_accumbens area right.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_amygdala left.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_amygdala right.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_caudate left.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_caudate right.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_hippocampus left.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_hippocampus right.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_pallidum left.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_pallidum right.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_putamen left.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_putamen right.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_thalamus proper left.xml

    • /templates/ICBM152/DESIKAN/icbm152_IIT_thalamus proper right.xml

    • /settings/functions.xml

  • update plugins

    • SEEG Report, version 1.1

    • SEEG Trajectories, version 1.2

  • updated modules

    • core.sisypheTransform

    • core.sisypheDicom

    • core.sisypheVolume

    • processing.simpleItkFilters

    • gui.windowSisyphe

    • gui.dialogSegmentation

    • gui.dialogDeepSegmentation

    • gui.dialogWait

    • gui.dialogManualRegistration

    • gui.dialogReorient

    • widgets.attributesWidgets

    • widgets.toolBarThumnail

    • widgets.sliceViewWidgets

  • updated function

    • processing.simpleItkFilters.biasFieldCorrection()

      • line 172, change number of iteration parameter

  • updated classes

    • core.sisypheTransform.Sisyphe.SisypheApplyTransform

      • update resampleMoving() method

    • core.sisypheDicom.XmlDicom

      • update getDataElement() method

    • core.sisypheVolume.SisypheVolume

      • update getICBMfromWorld() method

    • gui.windowSisyphe.WindowSisyphe

      • update _updatePluginsMenu() method

      • update _openPluginsMenu() method

      • update _addPlugin() method

      • update _removePlugin() method

    • gui.dialogSegmentation.DialogRegistrationBasedSegmentation

      • update load() method

      • update save() method

      • update showEvent() method

      • update _structChange() method

      • update _updateTemplateFilter() method

    • gui.dialogDeepSegmentation.DialogDeepTOFVesselSegmentation

      • update execute() method

    • gui.dialogDeepSegmentation.DialogDeepTissueSegmentation

      • update execute() method

    • gui.dialogWait.DialogWaitRegistration

      • update setStages() method

      • update setProgressByLevel() method

      • update setConvergenceThreshold() method

      • update setMultiResolutionIterations() method

    • gui.dialogManualRegistration.DialogManualRegistration

      • update __init__() method

    • gui.dialogReorient.DialogReorient

      • update __init__() method

    • widgets.attributesWidgets.ListROIAttributesWidget

      • update saveSisyphe() method

      • update saveNifti() method

      • update saveNRRD() method

      • update saveMinc() method

      • update saveNumpy() method

      • update saveVTK() method

    • widgets.toolBarThumnail.ToolBarThumbnail

      • update open() method

      • update addVolume() method

      • update saveSelected() method

      • update saveSelectedAs() method

      • update editAttributesSelected() method

      • update dropEvent() method

    • widgets.sliceViewWidgets.SliceViewWidget

      • update _getInfoValuesText() method

  • updated methods

    • core.sisypheTransform.Sisyphe.SisypheApplyTransform.resampleMoving()

      • line 3153, copy geometric tranform ID to resampled volume

    • core.sisypheDicom.XmlDicom.getDataElement()

      • lines 1536 & 1548, try to split with ‘ ‘ if there is no separator ‘|’’

    • core.sisypheVolume.SisypheVolume.getICBMfromWorld()

      • add the mni parameter (bool) to indicate whether or not to take the MNI origin (x=98.0,y=134.0,z=72.0) into account

    • gui.windowSisyphe.WindowSisyphe._updatePluginsMenu()

      • replace ‘_’ with space in the plugin name

    • gui.windowSisyphe.WindowSisyphe._openPluginsMenu()

      • replace space with ‘_’ in the plugin name

    • gui.windowSisyphe.WindowSisyphe._addPlugin()

      • bug fix windows platform, line 4801, replace ‘/’ with ‘\’ in path strings

    • gui.windowSisyphe.WindowSisyphe._removePlugin()

      • bug fix windows platform, line 4858, replace ‘/’ with ‘\’ in path string using abspath

    • gui.dialogSegmentation.DialogRegistrationBasedSegmentation.load()

    • gui.dialogSegmentation.DialogRegistrationBasedSegmentation.save()

      • add ‘RegistrationSequence’ XML field

    • gui.dialogSegmentation.DialogRegistrationBasedSegmentation.showEvent()

    • gui.dialogSegmentation.DialogRegistrationBasedSegmentation._structChange()

    • gui.dialogSegmentation.DialogRegistrationBasedSegmentation._updateTemplateFilter()

      • bug fix, add self._structSelect.isEnabled() condition

    • gui.dialogDeepSegmentation.DialogDeepTOFVesselSegmentation.execute()

      • bug fix, line 1444, replace flt with extractor

    • gui.dialogDeepSegmentation.DialogDeepTissueSegmentation.execute()

      • line 1732, replace generic “struct” sequence with tissue sequences

    • gui.dialogWait.DialogWaitRegistration.setStages()

    • gui.dialogWait.DialogWaitRegistration.setProgressByLevel()

    • gui.dialogWait.DialogWaitRegistration.setConvergenceThreshold()

    • gui.dialogWait.DialogWaitRegistration.setMultiResolutionIterations()

      • bug fix, remove unnecessary conditions

    • gui.dialogManualRegistration.DialogManualRegistration.__init__()

      • self._ok is no longer the default button

    • gui.dialogReorient.DialogReorient.__init__()

      • self._cancel is no longer the default button

    • widgets.attributesWidgets.ListROIAttributesWidget.saveSisyphe()

    • widgets.attributesWidgets.ListROIAttributesWidget.saveNifti()

    • widgets.attributesWidgets.ListROIAttributesWidget.saveNRRD()

    • widgets.attributesWidgets.ListROIAttributesWidget.saveMinc()

    • widgets.attributesWidgets.ListROIAttributesWidget.saveNumpy()

    • widgets.attributesWidgets.ListROIAttributesWidget.saveVTK()

      • bug fix, replace item by roi

    • widgets.toolBarThumnail.ToolBarThumbnail.open()

    • widgets.toolBarThumnail.ToolBarThumbnail.addVolume()

    • widgets.toolBarThumnail.ToolBarThumbnail.saveSelected()

    • widgets.toolBarThumnail.ToolBarThumbnail.saveSelectedAs()

    • widgets.toolBarThumnail.ToolBarThumbnail.editAttributesSelected()

    • widgets.toolBarThumnail.ToolBarThumbnail.dropEvent()

      • replace messageBox parent (main window rather than self)

    • widgets.sliceViewWidgets.SliceViewWidget._getInfoValuesText()

      • display Leksell coordinates if self._action[‘showframe’].isChecked()

      • display ICBM coordinates if self._action[‘showicbm’].isChecked()

      • take the MNI origin (x=98.0, y=134.0, z=72.0) into account when calculating ICBM coordinates

version 0.80.15, build 20/02/2026

  • new html documentation

    • PySisyphe_browser.rst

  • updated html documentation

    • version-histrory.rst update

    • PySisyphe_main.rst

    • PySisyphe_ipython.rst

    • PySisyphe_Registration.rst

    • PySisyphe_installation.rst

    • PySisyphe_overview.rst

    • PySisyphe_File.rst

    • PySisyphe_Functions.rst

    • PySisyphe_Mapping.rst

    • PySisyphe_dockroi.rst

    • PySisyphe_dockmesh.rst

    • PySisyphe_docktarget.rst

    • PySisyphe_database.rst

    • rebuild sphinx documentation

  • new files

    • /gui/darkroi/labels.png

    • /gui/lightroi/labels.png

    • /doc/_images/labels.png

    • /doc/_images/browser.png

  • updated files

    • /gui/doc/ipyhton.txt

    • /settings/functions.xml

    • /settings/dialogs.xml

  • new external module

    • openpyxl

      • bug fix, used by pandas Excel XLSX file IO methods

  • update main PySisyphe.py

    • exception handling for registry manipulations on the Windows platform, to avoid exceptions for sessions without administrator rights

    • fix crash on first run after installation

      • logging code calls initPySisypheUserPath() -> getDPIScaleFactor() which raises an exception because QApplication is called before application creation

      • moving the logging code after creating the application

    • replace splash.close() by splash.hide()

    • rebuild frozen version (pyinstaller)

  • new module

    • widgets.fileBrowserWidget

  • updated modules

    • core.sisypheVolume

    • core.sisypheImageAttributes

    • core.processing.simpleItkFilters

    • core.sisypheStatistics

    • core.sisypheDownload

    • core.sisypheMesh

    • core.sisypheTools

    • gui.dialogSegmentation

    • gui.dialogRegistration

    • gui.dialogFileSelection

    • gui.dialogWorkflow

    • gui.dialogWait

    • gui.dialogStatResult

    • gui.dialogStatModel

    • gui.dialogStatContrast

    • gui.dialogDicomDataset

    • gui.dialogDatabase

    • gui.dialogGenericResults

    • gui.dialogSplash

    • gui.dialogAlgebra

    • gui.dialogDatatype

    • gui.dialogDicomExport

    • gui.dialogDicomImport

    • gui.dialogRTImport

    • gui.dialogExport

    • gui.dialogFlipAxes

    • gui.dialogImport

    • gui.windowSisyphe

    • widgets.iconBarViewWidgets

    • widgets.multiComponentViewWidget

    • widgets.multiViewWidgets

    • widgets.consoleWidget

    • widgets.selectFileWidgets

    • widgets.attributesWidgets

    • widgets.tabToolsWidget

    • widgets.basicWidgets

    • widgets.databaseWidget

    • widgets.toolBarThumbnail

  • update PySisyphe.py

  • new functions

    • core.sisypheDownload.getPackageMetadata()

      • extract metadata from packages

    • core.sisypheDownload.getPackagesToUpdate()

      • list of packages to check for installation or update

    • core.sisypheDownload.getPackageFolder()

      • get the package folder of the current Python environment

      • add wait parameter

    • core.sisypheDownload.updatePackages()

      • install or update package(s)

  • updated functions

    • core.processing.simpleItkFilters.regressionIntensityMatching()

      • bug fix, cast to reference image datatype

      • line 973, replace copyPropertiesFrom by copyAttributesFrom

    • core.sisypheDownload.updatePySisyphe()

      • implementation of package installation/update

  • new class

    • widgets.fileBrowserWidget.FileBrowserWidget

      • File browser and preview widget.

  • updated classes

    • core.sisypheVolume.SisypheVolume

      • update cast() method

      • update getICBMfromWorld() method

      • update getWorldfromICBM() method

    • core.sisypheImageAttributes.SisypheAcquisition

      • new getReselCount() method

      • new setReselCount() method

      • update __init_() method

      • update __str__() method

      • update createXML() method

      • update parseXML() method

      • update copyFrom() method

      • update copy() method

      • update setContrast() method

    • core.sisypheStatistics.SisypheDesign

      • new setANCOVADesign() method

      • new isANCOVADesign() method

      • update _makeDesignMatrix() method

      • update addHRFBoxCarModelToCondition() method

      • update addHighPassToCondition() method

      • update __init__() method

      • update estimate() method

      • update parseXML() method

      • update createXML() method

    • core.sisypheMesh.SisypheMesh

      • update convertToVTKImage() method

      • update convertToSisypheROI() method

      • update convertToSisypheVolume() method

      • update createFromROI() method

    • core.sisypheTools.ToolWidgetCollection

      • new __str__() method

      • update hasFilename() method

    • gui.dialogSegmentation.DialogRegistrationBasedSegmentation

      • update execute() method

    • gui.dialogRegistration.DialogEddyCurrentCorrection

      • update __init__() method

      • update execute() method

    • gui.dialogFileSelection.DialogFileSelection

      • update __init__() method

    • gui.dialogFileSelection.DialogMultiFileSelection

      • update __init__() method

    • gui.dialogFileSelection.DialogFilesSelection

      • update __init__() method

    • gui.dialogWorkflow.WorkflowItem

      • update init() method

      • update setFilenames() method

    • gui.dialogWorkflow.DialogWorkflow

      • update __init__() method

      • update _addProcessing() method

      • update _insertProcessing() method

      • update load() method

      • update execute()

    • gui.dialogWait.DialogWaitRegistration

      • update setAntsRegistrationProgress() method

    • gui.dialogStatModel.DialogModel

      • update __init__() method

      • update addObservations() method

    • gui.dialogStatModel.DialogfMRIObs

      • update __init__() method

    • gui.dialogStatModel.DialogModel

      • update __init__() method

      • update saveModel() method

    • gui.dialogStatResult.DialogResult

      • new _updateProjectionView() method

      • update __init__() method

      • update setMap() method

      • update _update() method

      • update _updateBetaChart() method

    • gui.dialogStatContrast.DialogContrast

      • update __init__() method

    • gui.dialogDicomDataset.DialogDicomDataset

      • new setFilename() method

    • gui.dialogDatabase.DialogDatabase

      • update __init__() method

      • new _console() method

      • new _acpc() method

      • new _frame() method

      • new _reorient() method

    • gui.dialogGenericResults

      • update addTreeWidgetRow() method

      • update setTreeWidgetArray() method

      • update setTreeWidgetDict() method

    • gui.dialogSplash.DialogSplash

      • update __init__() method

    • gui.dialogAlgebra.DialogAlgebra

      • update execute() method

    • gui.dialogDatatype.DialogDatatype

      • update execute() method

    • gui.dialogDicomExport.DialogDicomExport

      • update convert() method

    • gui.dialogDicomImport.DialogDicomImport

      • update convert() method

    • gui.dialogRTImport.DialogRTImport

      • update _convert() method

    • gui.dialogExport.DialogExport

      • update convert() method

    • gui.dialogFlipAxes.DialogFlipAxes

      • update accept() method

    • gui.dialogImport.DialogImport

      • update convert() method

    • gui.windowSisyphe.WindowSisyphe

      • new showBrowser() method

      • new hideBrowser() method

      • new setBrowserVisibility() method

      • new getBrowserVisibility() method

      • new getBrowser() method

      • update __init__() method

      • update _initWindowMenu() method

      • update showCaptures() method

      • update hideCaptures() method

      • update setCapturesVisibility() method

      • update getCapturesVisibility() method

      • update showConsole() method

      • update hideConsole() method

      • update setConsoleVisibility() method

      • update getConsoleVisibility() method

      • update setCurrentTabView() method

      • update _initFunctionsMenu() method

      • update datasetDicom() method

      • update about() method

    • widgets.iconBarViewWidgets.IconBarOrthogonalRegistrationViewWidget2

      • update __init__() method

    • widgets.multiComponentViewWidget.MultiComponentViewWidget

      • update __init__() method

    • widgets.multiViewWidgets.MultiViewWidget

      • new setOverlayColorBar() method

    • widgets.consoleWidget.RichJupyterWidget2

      • update execute() method

      • new _gemini() metohd

      • new _packages() method

      • new _open() method

    • widgets.selectFileWidgets.SelectionFilter

      • new filterSisyspheTools() method

      • update filterExtension() method

      • update setFiltersToDefault() method

      • update clearFilters() method

    • widgets.selectFileWidgets.FileSelectionWidget

      • update open() method

    • widgets.selectFileWidgets.FilesSelectionWidget

      • update add() method

    • widgets.attributesWidgets.ItemROIAttributesWidget

      • update save() method

    • widgets.attributesWidgets.ListROIAttributesWidget

      • new labeling() method

      • update __init__() method

      • update setIconSize() method

    • widgets.attributesWidgets.ListMeshAttributesWidget

      • new labeling() method

      • update __init__() method

      • update setIconSize() method

    • widgets.attributesWidgets.ListToolAttributesWidget

      • new labeling() method

      • update __init__() method

      • update setIconSize() method

    • widgets.tabToolsWidget.TabROIToolsWidget

      • new _brushSizePressed() method

      • update __init__() method

    • widgets.basicWidgets.LabeledSlider

      • new __call__() method

      • new mousePressEvent() method

    • widgets.toolBarThumbnail.ToolBarThumbnail

      • update open() method

    • widgets.databaseWidget.DatabaseWidget

      • new isEmpty() method

      • new getPatientCount() method

  • new methods

    • core.sisypheTools.ToolWidgetCollection.__str__()

      • overloaded method called by the built-in str() python function

    • core.sisypheImageAttributes.SisypheAcquisition.getReselCount()

    • core.sisypheImageAttributes.SisypheAcquisition.setReselCount()

    • core.sisypheImageAttributes.SisypheAcquisition.hasReselCount()

      • set/get/has resel count attribute (self._rc)

    • core.sisypheStatistics.SisypheDesign.getAnalysisROIFilename()

    • core.sisypheStatistics.SisypheDesign.getNormalizationROIFilename()

    • core.sisypheStatistics.SisypheDesign.setAnalysisROIFilename()

    • core.sisypheStatistics.SisypheDesign.setNormalizationROIFilename()

    • core.sisypheStatistics.SisypheDesign.hasAnalysisROIFilename()

    • core.sisypheStatistics.SisypheDesign.hasNormalizationROIFilename()

      • get/set/has analysis ROI filename attribute (self._roi1)

      • get/set/has normalization ROI filename attribute (self._roi2)

    • core.sisypheStatistics.SisypheDesign.setANCOVADesign()

    • core.sisypheStatistics.SisypheDesign.isANCOVADesign()

      • get/set ANOVA design attribute (self._dancova)

    • gui.dialogStatResult.DialogResult._updateProjectionView()

      • update statistical map in the projection view display

    • gui.windowSisyphe.WindowSisyphe.labelingROI()

    • gui.windowSisyphe.WindowSisyphe.labelingMesh()

    • gui.windowSisyphe.WindowSisyphe.labelingTool()

      • atlas labeling of ROI(s), mesh(es) and tool(s)

    • gui.windowSisyphe.WindowSisyphe.showBrowser()

    • gui.windowSisyphe.WindowSisyphe.hideBrowser()

    • gui.windowSisyphe.WindowSisyphe.setBrowserVisibility()

    • gui.windowSisyphe.WindowSisyphe.getBrowserVisibility()

    • gui.windowSisyphe.WindowSisyphe.getBrowser()

      • file browser management

    • gui.dialogDicomDataset.DialogDicomDataset.setFilename()

      • add dicom filename to dialog

    • gui.dialogDatabase.DialogDatabase._console()

    • gui.dialogDatabase.DialogDatabase._acpc()

    • gui.dialogDatabase.DialogDatabase._frame()

    • gui.dialogDatabase.DialogDatabase._reorient()

      • copy to console, AC-PC detection, frame detection management and reorient management

    • widgets.multiViewWidgets.MultiViewWidget.setOverlayColorBar()

      • replace volume colorbar by overlay color

    • widgets.consoleWidget.RichJupyterWidget2._gemini()

    • widgets.consoleWidget.RichJupyterWidget2._packages()

    • widgets.consoleWidget.RichJupyterWidget2._open()

      • methods called by %gemini, %packages and %open magic commands

    • widgets.selectFileWidgets.SelectionFilter.filterSisyspheTools()

      • create a new filter self._refxtools for .xpoint, .xline and .xtools files

    • widgets.attributesWidgets.ListROIAttributesWidget.labeling()

    • widgets.attributesWidgets.ListMeshAttributesWidget.labeling()

    • widgets.attributesWidgets.ListToolAttributesWidget.labeling()

      • atlas labeling methods for ROI, mesh, tool (HandleWidget, LindeWidget)

    • widgets.tabToolsWidget.TabROIToolsWidget._brushSizePressed()

      • pressed Qt event to trigger QSlider’s single step

    • widgets.basicWidgets.LabeledSlider.__call__()

      • to get self._slider QSlider attribute

    • widgets.basicWidgets.LabeledSlider.mousePressEvent()

      • Qt event to trigger self._slider QSlider’s single step

    • widgets.databaseWidget.DatabaseWidget.isEmpty()

    • widgets.databaseWidget.DatabaseWidget.getPatientCount()

  • updated methods

    • core.sisypheVolume.SisypheVolume.cast()

      • line 1587, copy transform ID

    • core.sisypheVolume.SisypheVolume.getICBMfromWorld()

    • core.sisypheVolume.SisypheVolume.getWorldfromICBM()

      • implement the ICBM152 case, add mni parameter (take the MNI origin into account or not)

      • bug fix, replace ICBM152 ID

    • core.sisypheImageAttributes.SisypheAcquisition.setContrast()

      • tuple type management

    • core.sisypheImageAttributes.SisypheAcquisition.__init__()

      • add resel count attribute (self._rc)

    • core.sisypheImageAttributes.SisypheAcquisition.__str__()

      • print resel count attribute value (self._rc)

    • core.sisypheImageAttributes.SisypheAcquisition.createXML()

    • core.sisypheImageAttributes.SisypheAcquisition.parseXML()

      • write/read resel count attribute (self._rc)

    • core.sisypheImageAttributes.SisypheAcquisition.copy()

    • core.sisypheImageAttributes.SisypheAcquisition.copyFrom()

      • copy resel count attribute (self._rc)

    • core.sisypheStatistics.SisypheDesign._makeDesignMatrix()

      • line 2723, add global factor

    • core.sisypheStatistics.SisypheDesign.addHRFBoxCarModelToCondition()

      • line 3518, replace if ‘ ‘.join(name[1:]) == cond by if name[-1] == cond

    • core.sisypheStatistics.SisypheDesign.addHighPassToCondition()

      • line 3563, replace if ‘ ‘.join(name[1:]) == cond by if name[-1] == cond

    • core.sisypheStatistics.SisypheDesign.__init__()

      • add self._roi1 & self._roi2 attributes

    • core.sisypheStatistics.SisypheDesign.estimate()

      • management of self._roi1 & self._roi2 attributes

    • core.sisypheStatistics.SisypheDesign.__init__()

      • add ANCOVA design attribute (self._dancova)

    • core.sisypheStatistics.SisypheDesign.parseXML()

    • core.sisypheStatistics.SisypheDesign.createXML()

      • read/write self._roi1 & self._roi2 attributes

      • read/write ANOVA design attribute (self._dancova)

    • core.sisypheMesh.SisypheMesh.convertToVTKImage()

    • core.sisypheMesh.SisypheMesh.convertToSisypheROI()

    • core.sisypheMesh.SisypheMesh.convertToSisypheVolume()

      • add str support for refimg paramete

      • filename manamgement

    • core.sisypheMesh.SisypheMesh.setDefaultFilename()

      • bug fix, line 635, replace self._name != ‘’: self.setDefaultName() by self._name == ‘’: self.setDefaultName()

    • core.sisypheMesh.SisypheMesh.createFromROI()

      • bug fix, line 2522, replace self.setDirname(roi.getDirname()) by self.saveAs(roi.getFilename())

    • core.sisypheTools.ToolWidgetCollection.hasFilename()

      • bug fix, line 6726, remove exists condition

    • gui.dialogSegmentation.DialogRegistrationBasedSegmentation.execute()

      • line 2742, correcting wait dialog

      • line 2890, save ROI

    • gui.dialogRegistration.DialogEddyCurrentCorrection.__init__()

      • line 1440, set B0 sequence filter

    • gui.dialogRegistration.DialogEddyCurrentCorrection.execute()

      • line 1504, add self._reg = ‘Transform’

    • gui.dialogFileSelection.DialogFileSelection.__init__()

      • line 133, replace ok by self._ok, cancel by self._cancel

    • gui.dialogFileSelection.DialogMultiFileSelection.__init__()

      • line 224, replace ok by self._ok, cancel by self._cancel

    • gui.dialogFileSelection.DialogFilesSelection.__init__()

      • line 434, replace ok by self._ok, cancel by self._cancel

    • gui.dialogWorkflow.WorkflowItem.__init__()

      • lines 1088 & 1101, add self._erase QCheckBox

    • gui.dialogWorkflow.WorkflowItem.setFilenames()

      • line 968, replace setMoving(input1) by setMoving(input1, editable=False)

      • line 968, replace setFixed(input1) by setFixed(input1, editable=False)

    • gui.dialogWorkflow.DialogWorkflow.WorkflowItem.init()

      • lines 164, 194, 587, 626, 665 and 704, add self._dialog._cancel.setFixedWidth(100)

      • bug fix, line 268, replace k1 != ‘Radius’ by k1 not in (‘Radius’, ‘Batch’)

    • gui.dialogWorkflow.DialogWorkflow._addProcessing()

    • gui.dialogWorkflow.DialogWorkflow._insertProcessing()

    • gui.dialogWorkflow.DialogWorkflow.load()

      • lines 1122, 1137 and 1246, add parent parameter, WorkflowItem(node.nodeName, last, parent=self)

      • line 1281, add w.init(last)

    • gui.dialogWorkflow.DialogWorkflow.execute()

      • bug fix, line 1352, bad use of shutils.copyfile function

      • line 1485, Remove volumes of intermediate stages

    • gui.dialogWait.DialogWaitRegistration.setAntsRegistrationProgress()

      • take into account iter value

    • gui.dialogStatModel.DialogModel.__init__()

      • add progress dialog

    • gui.dialogStatModel.DialogModel._isFull()

    • gui.dialogStatModel.DialogModel.addGlobalCovariable()

    • gui.dialogStatModel.DialogModel.addCovariableByGroup()

    • gui.dialogStatModel.DialogModel.addCovariableBySubject()

    • gui.dialogStatModel.DialogModel.addCovariableByCondition()

      • ANCOVA design management for model estimability

    • gui.dialogStatModel.DialogModel.saveModel()

      • save self._maskroi and self._normroi attributes

    • gui.dialogStatModel.DialogfMRIObs.__init__()

      • self._cnd.setMinimum(1)

      • self._sbj.setMinimum(2)

      • self._grp.setMinimum(2)

    • gui.dialogStatModel.DialogModel.__init__()

      • self._cnd.setMinimum(1)

      • self._sbj.setMinimum(2)

      • self._grp.setMinimum(2)

    • gui.dialogStatResult.DialogResult.__init__()

      • line 205, add self._projUpdateFlag attribute

    • gui.dialogStatResult.DialogResult.setMap()

      • line 1375, add self._map.display.setWindowMin(0.0)

      • line 1386, save resel count

      • line 1541, hide the time series chart if it is fMRI design

    • gui.dialogStatResult.DialogResult._update()

      • line 764, only update the projection view if it is currently displayed

    • gui.dialogStatResult.DialogResult._updateBetaChart()

      • bug fix, line 1154, display beta values if is not fMRI Design

    • gui.dialogStatContrast.DialogContrast.__init__()

      • bug fix, line 215, factors visibility

    • gui.dialogDatabase.DialogDatabase.__init__()

      • add popup menu actions: self._action[‘console’], self._action[‘acpc’], self._action[‘frame’], self._action[‘reorient’]

    • gui.dialogGenericResults.addTreeWidgetRow()

    • gui.dialogGenericResults.setTreeWidgetArray()

    • gui.dialogGenericResults.setTreeWidgetDict()

      • add text alignment paramerter

    • gui.dialogSplash.DialogSplash.__init__()

      • add esayocr, google genai, pymupdf module information

    • gui.dialogAlgebra.DialogAlgebra.execute()

      • line 156, add setCurrentProgressValue(0)

    • gui.dialogDatatype.DialogDatatype.execute()

      • line 434, add setCurrentProgressValue(0)

    • gui.dialogDicomExport.DialogDicomExport.convert()

      • line 124, add setCurrentProgressValue(0)

    • gui.dialogDicomImport.DialogDicomImport.convert()

      • line 184, add setCurrentProgressValue(0)

    • gui.dialogRTImport.DialogRTImport._convert()

      • lines 311 & 552, add setCurrentProgressValue(0)

    • gui.dialogExport.DialogExport.convert()

      • line 140, add setCurrentProgressValue(0)

    • gui.dialogFlipAxes.DialogFlipAxes.accept()

      • line 101, add setCurrentProgressValue(0)

    • gui.dialogImport.DialogImport.convert()

      • line 139, add setCurrentProgressValue(0)

    • gui.windowSisyphe.WindowSisyphe.__init__()

    • gui.windowSisyphe.WindowSisyphe._initWindowMenu()

    • gui.windowSisyphe.WindowSisyphe.showCaptures()

    • gui.windowSisyphe.WindowSisyphe.hideCaptures()

    • gui.windowSisyphe.WindowSisyphe.setCapturesVisibility()

    • gui.windowSisyphe.WindowSisyphe.getCapturesVisibility()

    • gui.windowSisyphe.WindowSisyphe.showConsole()

    • gui.windowSisyphe.WindowSisyphe.hideConsole()

    • gui.windowSisyphe.WindowSisyphe.setConsoleVisibility()

    • gui.windowSisyphe.WindowSisyphe.getConsoleVisibility()

    • gui.windowSisyphe.WindowSisyphe.setCurrentTabView()

      • add file browser attribute (self._browser), and correction of its effects

    • gui.windowSisyphe.WindowSisyphe.about()

      • show persistent __main__.splash DialogSplash

      • if exception, create a new DialogSplash

    • gui.windowSisyphe.WindowSisyphe.dicomDataset()

      • add filename parameter

    • gui.windowSisyphe.WindowSisyphe._initFunctionsMenu()

      • add labeling ROI(s), mesh(es) and tool(s) menus

    • widgets.iconBarViewWidgets.IconBarOrthogonalRegistrationViewWidget2.__init__()

      • line 2433, on macos platform, set the background of the frame with the translation and rotation buttons to black

    • widgets.multiComponentViewWidget.MultiComponentViewWidget.__init__()

      • line 144, self._canvas relative size (1/3)

    • widgets.consoleWidget.RichJupyterWidget2.execute()

      • add %packages and %open magic commands management

      • call _gemini(), _packages() and _open() methods

    • widgets.selectFileWidgets.SelectionFilter.filterExtension()

    • widgets.selectFileWidgets.SelectionFilter.setFiltersToDefault()

    • widgets.selectFileWidgets.SelectionFilter.clearFilters()

      • new self._refxtools filter management

    • widgets.selectFileWidgets.FileSelectionWidget.open()

      • bug fix, line 2032, replace getDicomExt().append(‘’) by getDicomExt()

      • line 2056, new self._refxtools filter management

    • widgets.selectFileWidgets.FilesSelectionWidget.add()

      • bug fix, line 4001, replace getDicomExt().append(‘’) by getDicomExt()

      • bug fix, lines 3793, 3916 & 4118, replace QFileDialog.getOpenFileName by QFileDialog.getOpenFileNames

    • widgets.attributesWidgets.ItemROIAttributesWidget.save()

      • bug fix, line 640, dirname correction

    • widgets.attributesWidgets.ListROIAttributesWidget.__init__()

    • widgets.attributesWidgets.ListROIAttributesWidget.setIconSize()

      • add self._labeling button attribute

      • size management of self._labeling button

    • widgets.attributesWidgets.ListMeshAttributesWidget.__init__()

    • widgets.attributesWidgets.ListMeshAttributesWidget.setIconSize()

      • add self._labeling button attribute

      • size management of self._labeling button

    • widgets.attributesWidgets.ListToolAttributesWidget.__init__()

    • widgets.attributesWidgets.ListToolAttributesWidget.setIconSize()

      • add self._labeling button attribute

      • size management of self._labeling button

    • widgets.tabToolsWidget.TabROIToolsWidget. __init__()

      • add self._brushSize QSlider pressed Qt event management

    • widgets.toolBarThumbnail.ToolBarThumbnail

      • bug fix, line 417, add wait.setCurrentProgressValue(0)