Framework Changes#

Algorithms#

New features#

  • (#41439) The Fit v1 algorithm now supports custom step sizes to control the perturbation applied to each parameter during fitting. Set StepSizeMethod to Custom and pass the step size using the CustomStepSizes parameter.

  • (#41714) ConvertToMD v1 now supports using time-series log values at event times as coordinates for additional dimensions when UseLogTimes is enabled and the log names are specified in the OtherDimensions property.

  • (#41402) ConvertToMD v1 now supports the UseLogTimes option, which uses neutron event times in coordinate calculations instead of the average log time.

  • (#41427) FileFinder and MultipleFileProperty now resolve multi-run hint strings (ranges and lists) in a single batched archive lookup for HFIR and SNS data, replacing the previous per-run network round trips to ONCat.

  • (#41457) Stitch1DMany v1 has a new OutputWorkspaceSuffixes property, which allows users to specify custom suffixes for the child workspaces in the output group when stitching workspace groups.

  • (#41510) HFIRPowderReduction v1 now attempts to autopopulate the sample absorption parameters if correct data is found in sample run files.

  • (#41601) Stitch1D and Stitch1DMany have a UseValidDataOnly option. When true, ignores the contribution of invalid signal values to overlap bins when another workspace has valid data in the same bin. When false (default), the previous behaviour is maintained, where presence of invalid data in an overlap bin from either workspace results in the same invalid value in the output workspace.

  • (#41778) Added the VesuvioTransmission v1 algorithm to evaluate the transmission spectrum on the VESUVIO spectrometer for measured sample and empty run numbers.

  • (#41618) SumSpectra v1 has been optimized for better performance.

  • (#41757) HFIRPowderReduction v1 now has an IDFFilename property to optionally override the instrument geometry from the sample file, and loads MIDAS data with LoadEventAsWorkspace2D v1.

  • (#41802) MDNormDirectSC v1 can now handle MDEvent workspaces created by ConvertToMD v1 with UseLogTimes=True.

  • (#41806) FitPeaks v1 has a new StrictConvergence flag to control whether fits that stop when the parameter step size falls below the stopping threshold are considered successful. The default is True, preserving the previous behaviour.

  • (#41806) FitPeaks v1 now supports the Unweighted least squares cost function.

  • (#41806) FitPeaks v1 has a new PositionToleranceMode property to control how PositionTolerance is applied. The default Check mode preserves the previous behaviour of discarding fits whose peak positions fall outside the specified tolerance. The new Constrain mode applies the tolerances as constraints during fitting and requires ConstrainPeakPositions to be disabled.

  • (#41806) FitPeaks v1 has a new CalculateUnconstrainedErrors property to control whether fit errors are recalculated without constraints after fitting. The default is False.

  • (#41806) FitPeaks v1 has a new PositionToleranceFractional property to specify whether the PositionTolerance is treated as a fraction of the peak window (True) or as an absolute value (False, the default).

  • (#41853) A new SaveMDToAscii v1 algorithm to save an MDHistoWorkspace to a plain ASCII file, with configurable exclusion of integrated dimensions, normalization, column separator and numeric precision.

  • (#41867) EstimatePeakIntensities v1 now allows parallel, fit-free estimation of peak intensities within specified windows, using a skew-seeded background estimation.

  • (#41892) Parallelisation has been added to ConvertToMD v1 and improved in MDNormDirectSC v1.

  • (#42028) RenameWorkspace can now assign a name to a workspace object that is not already in the Analysis Data Service (ADS). In this case, the workspace will be added to the ADS.

  • (#42124) HFIRGoniometerIndependentBackground v1 has new options for duration- and monitor-count normalization. Backgrounds can now be calculated from exposure-normalized rotations and either retained in normalized units or restored to the per-rotation exposure scale. WAND (HB2C) and DEMAND (HB3A) sample-log naming conventions are supported.

  • (#42124) HFIRGoniometerIndependentBackground v1 no longer accepts a negative BackgroundLevel. The property is a percentile and must be between 0 and 100.

  • (#42126) MDNorm now supports continuous rotation data (generated by ConvertToMD with useLogTimes).

  • (#41749) SaveDaveGrp v1 has a new ToQsInQENSData property that enables saving Q values instead of spectrum numbers in the .grp file, calculated using GetQsInQENSData v1.

  • (#42513) The memory checks performed by Rebin v1, BinMD v1 and SliceMD v1 can now be disabled by setting algorithms.memorycheck = Off in the properties file. This is useful when the system-reported available memory does not reflect the memory actually available to Mantid.

Bugfixes#

  • (#41427) FileFinder now recognises compound file extensions (e.g. .nxs.h5) listed in Facilities.xml when expanding multi-run hints. This allows ranges such as CNCS100:105.nxs.h5 to resolve correctly, rather than being misinterpreted as a stem ending in .nxs plus an .h5 extension. As a consequence, hints that explicitly specify an extension (e.g. BSS_24234_event.nxs or SXD30904.raw.md5) no longer silently resolve to files with a different extension. To use the facility’s preferred extensions, specify the run number without an extension.

  • (#41559) In BeamProfileFactory the auto-generated beam profile dimensions are now correct when the sample bounding box is offset from the origin. The beam half-extent is now taken from the furthest sample face on either side, so the beam remains valid for samples that are translated or rotated into a negative half-space.

  • (#41559) EstimateScatteringVolumeCentreOfMass now accounts for the workspace’s goniometer when determining the shape’s centre of mass. Previously, the goniometer was ignored, resulting in incorrect values for shapes that are not rotationally symmetric.

  • (#41631) CreateDetectorTable has been significantly optimised for large workspaces with many spectra. This should also improve the performance of the new Instrument View, which uses this algorithm when opening.

  • (#41707) ExtractSpectra no longer gives an error when the argument DetectorList is used on focused workspaces where a workspace index maps to several detector IDs.

  • (#41806) FitPeaks v1, the PeakParameterValueTable input option now reads and applies row-per-spectrum parameter starting values. Previously this functionality was declared but not applied.

  • (#41883) CopySample v1 no longer causes a crash when called with CopyShape = False, CopyMaterial = True and an input workspace that is subsequently overwritten.

  • (#41886) SaveYDA v1 now correctly distinguishes between spectra and bin centre axes when saving data.

  • (#42075) Unreadable instrument geometry cache files are now recreated automatically, preventing instrument loading failures.

  • (#42115) In HFIRPowderReduction v1, the OutputWorkspace field now has a default based on the IPTS and run number. OutputDirectory now browses to a directory and the user can manually set the file name by typing it in the box.

  • (#42134) CylinderAbsorptionCW v1 no longer has a MultipleScattering checkbox, and the AttenuationXSection property has been renamed to AbsorptionXSection.

  • (#42207) SavePlot1D v1 no longer fails when run with Plotly 7.0 or later. The plotly and plotly-full output types used plotly interfaces that were deprecated and then removed.

  • (#42256) BinaryOperateMasks v1 no longer throws a spurious validation error when acting upon input workspaces with non-default detector mapping.

  • (#42397) Loading an instrument through InstrumentFileFinder now consistently selects parameter files matching the search string when multiple candidates have the same validity date. This prevents parameters from being loaded from less suitable files.

Deprecated#

  • (#41906) The DPDFreduction algorithm has been deprecated and has no direct replacement.

Removed#

  • (#41830) Removed SofQWCentre and SofQWPolygon (deprecated since release 6.12.0).

  • (#41781) Removed the deprecated BayesQuasi and BayesStretch algorithms, which were based on the quasielasticbayes library. Users should now use the new quickbayes replacements, BayesQuasi2 v1 and BayesStretch2 v1, respectively.

Fit Functions#

New features#

  • (#41422) The Levenberg-Marquardt minimizer now supports Poisson deviance as a cost function.

Bugfixes#

  • (#41380) fitting parameters defined in an Instrument Parameter File no longer overwrite each other when they have the same name but belong to different functions (e.g. Bk2BkExpConvPV:Gamma and IkedaCarpenterPV:Gamma).

Data Objects#

New features#

  • (#41719) Sample Environment is now saved in the Nexus File.

  • (#41901) getInstrumentName() can now be used on workspaces or ExperimentInfo objects to get the name of the underlying instrument. Use this instead of getInstrument().getName().

  • (#42206) InstrumentMetadata is now accessible from workspaces and ExperimentInfo objects through the methods instrumentValidFromDate(), instrumentValidToDate(), instrumentFilename(), instrumentXmlText(), instrumentDefaultView() and instrumentDefaultAxis().

  • (#42245) Instrument parameters are now stored in the Instrument 2.0 ParameterInfo store and accessed in C++ through ComponentInfo. Parameter values and the Python instrument API are unchanged. IComponent::getParameterNamesByComponent() and direct iteration over ParameterMap have been removed; see Instrument Access via SpectrumInfo, DetectorInfo, ComponentInfo for the replacements.

Bugfixes#

  • (#41794) Fixed a boundary-condition bug in MDGridBox splitting that could cause events exactly on a child box’s upper boundary to be dropped during serial or threaded splitting.

  • (#42494) Fixed sample log filtering that could prevent files from loading. Each sample log is now filtered only by its own invalid values, preventing invalid values in one log from incorrectly affecting other logs.

Live Data#

New features#

  • (#42089) Live-data algorithms have a new optional Facility property, which determines the facility against which the Instrument property is resolved. If Facility is not set, the Mantid default facility is used. The Facility and Instrument properties are now validated together, and mismatches are reported against the offending property rather than raising an exception.

Bugfixes#

  • (#41606) The SNSLiveEventDataListener state machine has been refactored to simplify its structure, remove race conditions, and make all state transitions explicit. These changes primarily add to the ILiveListener interface and deprecate its runStatus method, while leaving most ILiveListener implementations largely unchanged.

  • (#41722) The socket-read poll in SNSLiveEventDataListener has been refactored to detect peer disconnections cleanly and improve responsiveness. This is expected to fix several cases where the live-data system hung when the ADARA server changed state.

  • (#42089) Resolving Instrument no longer falls back to searching other facilities if the instrument is not found at the resolved facility. This fallback made instrument names shared between facilities ambiguous and undermined the purpose of having a default facility. Scripts that rely on finding an instrument outside the default facility must now specify its Facility.

Python#

New features#

  • (#41559) The MeshObject class now exposes getBoundingBox to python.

  • (#41890) MDHistoWorkspace now provides setNumEventsArray to overwrite the number-of-events array from a numpy array, mirroring the existing setSignalArray and setErrorSquaredArray methods. Manual updates through these array setters clear any link to the original MDEventWorkspace so downstream rebinning or slicing cannot bypass the manually-set values.

  • (#41922) The dimensions of an IMDHistoWorkspace can now have their name and units edited from Python using getDimension(i).setName(...) and getDimension(i).setUnits(...). Unit editing is supported for HKL and general frames; an HKL dimension accepts r.l.u. or an inverse-Angstrom-style label such as in 2.5 A^-1. This is useful for relabelling the dimensions produced by MDNorm for unusual projections.

  • (#42012) Added mantid.api.MinimizerStatus, which exposes the status strings reported by function minimizers through a fit’s OutputStatus and provides an isConverged method, so Python callers no longer have to hard code the wording. By default, the tolerance-limited stopping conditions count as converged alongside success; pass strict=True for an exact match.

  • (#42028) Output workspace properties of the generic type Workspace now return a WorkspaceGroup object when an algorithm is automatically dispatched over an input workspace group. Previously, the property value would be set to equal the WorkspaceGroup name, but the workspace component would be null.

  • (#42205) ComponentInfo now provides access to grid spacing, pixel counts and detector-ID numbering for rectangular detector grids through methods such as pixelGridNX and pixelGridXStep. The isGridDetector method can be used to check whether a component has such a grid.

  • (#42306) Instrument parameters can now be read and written from Python through ComponentInfo, using methods such as hasParameter, getNumberParameter, and addDouble. These replace the equivalent methods on Instrument and its components. The optional index argument defaults to the instrument itself, as in component_info.getNumberParameter("x-pixel-size").

  • (#41739) The Instrument class now exposes getXmlText to python.

Bugfixes#

  • (#41876) Fixed a crash where a Peak retrieved from a PeaksWorkspace in Python could reference deleted memory after the owning workspace is deleted. Peaks now keep their owning workspace alive for as long as they are in use.

Deprecated#

  • (#41756) MatrixWorkspace now exposes the preferred Histogram data accessors to python: x(), y(), e(), dx() (read-only numpy wrappers) and mutableX(), mutableY(), mutableE(), mutableDx() (writable numpy wrappers). The legacy readX(), readY(), readE(), readDx(), dataX(), dataY(), dataE(), dataDx() methods are now deprecated and emit a DeprecationWarning naming the replacement, but continue to work and return the same data. By default, these warnings are shown for deprecated calls made directly from user scripts or interactive sessions, but are filtered out for calls from imported modules. Run Python with -W default to show all occurrences, or -W error to raise them as exceptions. The dx() and mutableDx() methods preserve the behaviour of readDx() and dataDx(): initialize missing X-error data to zeros, so they can be called without first checking hasDx(). See the Transition to the HistogramData module concept page for more information on the Histogram data model.

  • (#41768) ComponentInfo now exposes solidAngle(index, observer) and componentType(index) (returning a ComponentType) to python. These provide index-based replacements for IDetector.solidAngle and the RectangularDetector/GridDetector type checks, as part of the migration to the ComponentInfo/DetectorInfo access layers.

  • (#42181) PanelSurfaceCalculator.getSideBySideViewPos() no longer takes an instrument parameter.

Dependencies#

New features#

Bugfixes#

  • (#42067) Fixed an issue that could cause Matplotlib font-cache problems when running Mantid Workbench on Linux systems with shared home directories.

Removed#

  • (#41781) Mantid no longer depends on quasielasticbayes, removing an obstacle to the upgrade to Qt 6.

  • (#42108) Removed the ArielToMantidXML tool, which was used to migrate instrument definitions from other reduction software to Mantid but is no longer needed.

MantidWorkbench#

See Mantid Workbench Changes.

Release 7.0.0