This document contains the fslpy
release history in reverse chronological
order.
- The :func:`.fixlabels.loadLabelFile` and :func:`.fixlabels.saveLabelFile` functions now support FIX label files which contain classification probabilities, as generated by pyfix >= 0.9.0, and old FIX >= 1.069 (!464).
- Behaviour of the
imcp
/immv
commands has been adjusted so that when an image file is copied/moved, and converted to a different format (e.g..nii
to.nii.gz
), the image data and header slope/intercept fields are not modified (!462).
- New functions/methods in the :mod:`.featanalysis` module and :class:`.FEATImage` class for accessing F-test results (!460).
- Minor Updates for compatibility with
numpy
2.0 (!458).
- New :func:`.bedpostx` and :func:`.bedpostx_gpu` wrapper functions (!455).
- New :meth:`.Platform.wsl` property for detecting whether we are running under Microsoft WSL (!456).
- Deprecated the :func:`.bedpostx_postproc_gpu` wrapper function - the
bedpostx_postproc_gpu.sh
andbedpostx_postproc.sh
scripts are not intended to be called directly (!455).
- Fixed an issue with :mod:
fsl.wrappers
functions not finding output files when$FSLOUTPUTTYPE
is set to something other thanNIFTI_GZ
(!452).
- Made some changes to the :mod:`fsl.utils.run` module to improve compatibility with [dill](https://github.com/uqfoundation/dill/) (!449).
- Fixed an issue which could cause :mod:`fsl.wrappers` functions to crash when being executed concurrently (!446).
- New wrapper function for the FLIRT midtrans command (!443).
- The :class:`.Image` class now accepts a
version
parameter, as an easy way of specifying the NIfTI file format version (!443).
- New wrapper function for the FLIRT makerot command (!441).
- New wrapper functions for the imcp, immv, imrm, imln, imglob and imtest commands. These are all implemented within fslpy, so the wrapper functions invoke them directly (i.e. within the same process) (!441).
- The :func:`run` function now allows the
log{'stdout']
andlog{'stderr'}
options (used for capturing the standard output/error streams of a called process) to be either file-likes or callables (!438).
- Added more functions to the :class:`.fslmaths` wrapper (!431).
- New :func:`.smoothest` wrapper function (!432).
- New :func:`.get_standard` wrapper function (!433).
- New :func:`.vecreg` wrapper function (!434).
- New silent option to the :func:`.run` function = passing
silent=True
is equivalent to passinglog={'tee':False}
(!428). - New prefix option to the :func:`.tempdir` function, which is passed through
to
tempfile.mkdtemp
(!429).
- Adjusted the :func:`.loadLabelFile` function to accept files with missing entries, and files which only contain the MELODIC directory path and list of noisy components (!424, !425).
- Fixed a bug in the :func:`.run.hold` function (!426).
- Removed the obsolete :func:`fsl.wrappers.misc.cluster` wrapper function (!422).
- Fixed a problem with some unit tests (!420).
- New :func:`.cluster` wrapper function for the FSL
cluster
/fsl-cluster
command (!417).
- All metadata stored in GIfTI files is now copied by :class:`.GiftiMesh` instances into their :class:`.Meta` store (!416).
- Fixed a bug in :meth:`.Image.__setitem__` - change listeners were being
passed an un-normalised
slice
object (with slices for trailing dimensions of length 1 present) (!414).
- New :func:`.affine.flip` function, for applying a flip/inversion to the axes of an affine transformation (!403).
- The
sform
/qform
fields of a :class:`.DeformationField` instance are automatically set from the reference image if they are not already set (!402). - Replaced
setup.py
-based build system withpyproject.toml
(!402). - Tests have been moved into the
fsl/tests/
package (!402). - Updated the
`immv
/imcp
scripts to supportFSLOUTPUTTYPE=ANALYZE
(!405).
- Updated the
`immv
/imcp
scripts to honour the$FSLOUTPUTTYPE
environment variable more closely - conversions between NIFTI1 and NIFTI2 were not being performed correctly (!405).
- Callback functions registered with :class:`.Notifier` instances no longer need to accept three arguments (!400).
- New
scaleAtOrigin
option to the :func:`.affine.compose` function, which allows the origin to be preserved by scaling parameters (!398).
- Fixed some minor issues with API documentation (!396).
- New :func:`.runfunc` function which can be used to execute a Python function in a separate process (or as a submitted cluster job), via the :func:`~fsl.utils.run.func_to_cmd` function (!390).
- New
keys()
,values()
, anditems()
methods on the :class:`.Cache` class (!391).
- The :func:`.run.func_to_cmd`, :func:`.run.hold`, and :func:`.run.job_output` functions have been moved from :mod:`fsl.utils.fslsub` to the :mod:`fsl.utils.run` module (!390).
- The :mod:`fsl.utils.fslsub` module has been deprecated, and scheduled for
removal in
fslpy 4.0.0
(!390).
- The :mod:`fsl.scripts.Text2Vest` now handles column vector inputs correctly (!387, !388).
- The :func:`.tempdir` function was not changing back to the original
working directory when the
override
argument was used (!388).
- New :func:`.randomise` wrapper function.
- The :func:`.fslmaths` wrapper function now allows the
-dt
and-odt
options to be set (!381). - Assertions (from the :mod:`.assertions` module) called within wrapper
functions are now disabled if the command is to be submitted via
fsl_sub
(!382). - The :class:`.Image` class will now resolve symlinks when loading images from file (!383).
- The :func:`.fslstats` wrapper no longer overwrites the
log
option that is passed to :func:`~.run.run`, if a :func:`.wrapperconfig` context is active (!381).
- Fixed another bug in the :func:`.dcm2niix` function (!379).
- Fixed a bug in the :func:`.dcm2niix` function (!376).
- Adjusted the :mod:`.imrm` and :mod:`.imglob` scripts to support incomplete
wildcard patterns (e.g.
img_??
matchingimg_01.nii.gz
) (!377).
- New :func:`.featquery` wrapper function (!374).
- fixed the :class:`.fslstats` wrapper to handle index masks (the
-K
option) with missing label values (!374).
- New :func:`.standard_space_roi`, :func:`.fslswapdim`, :func:`.fslmerge`, :func:`.fslsplit`, :func:`fslselectvols`, and :func:`.fslcpgeom` wrapper functions (!351, !354, !364).
- New :mod:`fsl.wrappers.first` wrapper functions (!355).
- New :mod:`fsl.wrappers.bianca` and :mod:`fsl.wrappers.avwutils` wrapper functions (!358).
- New :mod:`fsl.wrappers.bedpostx` and :mod:`~.wrappers.dtifit` wrapper functions (!364).
- New :func:`~fsl.wrappers.feat.feat`, :func:`~.melodic.fsl_regfilt` and :func:`~.melodic.fsl_glm` wrapper functions (!364).
- New :func:`.oxford_asl` and :func:`asl_file` wrapper functions (!368).
- New :func:`.wrapperconfig` context manager function, which allows the default values for arguments passed by the :mod:`fsl.wrappers` functions to the :func:`fsl.utils.run.run` function to be changed (!352, !356).
- New :func:`.affine.mergeBounds` function (!360).
- The :class:`fsl.wrappers.fslmaths.fslmaths` and :class:`fsl.wrappers.fslstats.fslstats` wrapper functions have been updated to accept arguments destined for :func:`fsl.utils.run.run` (!352).
- :class:`.Mesh` objects can now be created without indices/triangles - they can be assigned after creation (!360).
- The :mod:`.dicom` module will now preferentially call
$FSLDIR/bin/dcm2niix
, instead of calling the firstdcm2niix
on the$PATH
(!365). - The :func:`.applyArgStyle`
argmap
argument can now be a callable which defines a rule which will be applied to all argument names (!366). - The :func:`.applyArgStyle`
valmap
argument now accepts a newEXPAND_LIST
option, which allows sequences to be expanded as separate command-line options (!366). - :class:`.Image` objects can now be created without passing a
nibabel.Nifti1Image
(or similar) object, as long as anibabel.Nifti1Header
and a :class:`.DataManager` are provided (!362).
- Fixed a bug in the :meth:`.Image.strval` method (!353).
- New :func:`fsl.wrappers.eddy.eddy` function, to replace :func:`.eddy_cuda`. Note that this function will not work with FSL versions 6.0.5.2 or older (!348).
- The :func:`fsl.wrappers.eddy.eddy_cuda` function has been deprecated in
favour of the
eddy
function (!348).
- The .fslmaths wrapper now supports the
-roi
option, via the :meth:`.fslmaths.roi` method (!346).
- Updated the :func:`.ensureIsImage` function to support
pathlib.Path
objects (!343).
- Some fixes in the :mod:`.wrappers` module (specifically in the
:class:`.FileOrThing` class) to better support
pathlib.Path
objects (!343).
- Changed the behaviour of :meth:`.Image.__getitem__` so that, if image
data is accessed with a boolean mask array (e.g.
image[mask > 0]
), the image data is loaded into memory (!341).
- Fixed an issue in the :func:`~.fslsub.func_to_cmd` function (!339).
- Added the :data:`.NIFTI_XFORM_TEMPLATE_OTHER` identifier, an extension to the NIfTI standard (!337).
- Adjusted the :func:`.applyArgStyle` function so that it allows separate
specification of the style to use for single-character arguments. This
fixes some usage issues with commands such as FSL
fast
, which have regular--=
arguments, but also single-character arguments which expect multiple positional values (!335).
- New :meth:`.Image.niftiDataTypeSize` method, which reports the number of bits per voxel, according to the NIfTI data type (!327).
- The :class:`.Image` class no longer uses an :class:`.ImageWrapper` to manage data access and assignment (!327).
- Semantics for accessing and modifying image data have changed. By default,
image data access is now delegated to the underlying
nibabel.Nifti1Image
object (and so remains on disk by default). Image data can be loaded into memory by accessing the :meth:`.Image.data` property, or by modifying the data through :meth:`.Image.__setitem__` (!327). - The :func:`~.fslsub.func_to_cmd` function now uses dill instead of
pickle
for serialisation (!328).
- Fixes to the :mod:`.melodic` and :meth:`.eddy` wrapper functions.
- The :mod:`.imagewrapper` module (and the :class:`.ImageWrapper` class) is being migrated to FSLeyes (!327).
- The
loadData
,calcRange
, andthreaded
arguments to the :class:`.Image` class are deprecated and no longer have any effect (!327). - The :meth:`.Nifti.mapIndices` method is deprecated (!327).
- The :meth:`.Image.getImageWrapper`, :meth:`.Image.calcRange` and :meth:`.Image.loadData` methods are deprecated and no longer have any effect (!327).
- The the :func:`.topup` wrapper function now allows multiple file names to
be passed to the
--imain
argument (!324).
- The :func:`.melodic` wrapper function no longer requires its
input
argument to be a NIFTI image or file (!321).
- New :func:`.fslorient` wrapper function (!315).
- The :class:`.Bitmap` class has basic support for loading JPEG2000 images (!316).
- Fixed an issue with API documentation generation (!317).
- BIDS and
dcm2niix
.json
sidecar files with control characters are now accepted (!312).
- Fixed an issue with temporary input files created by :mod:`fsl.wrappers` functions not being deleted (!313).
- New :mod:`fsl.wrappers.fsl_sub` wrapper function for the
fsl_sub
command (!309).
- Performance of the :mod:`.imglob`, :mod:`.imln`, :mod:`imtest`, :mod:`.imrm`
and :mod:`.remove_ext` scripts has been improved, by re-organising them to
avoid unnecessary and expensive imports such as
numpy
(!310). - The default behaviour of the :func:`fsl.utils.run.run` function (and hence
that of all :mod:`fsl.wrappers` functions) has been changed so that the
standard output and error of the called command is now forwarded to the
calling Python process, in addition to being returned from
run
as strings. In other words, the default behaviour ofrun('cmd')
, is now equivalent torun('cmd', log={"tee":True})
. The previous default behaviour can be achieved withrun('cmd', log={"tee":False})
(!309). - The :func:`fsl.utils.run.run` and :func:`fsl.utils.run.runfsl` functions
(and hence all :mod:`fsl.wrappers` functions) have been modified to use
fsl.wrappers.fsl_sub
instead offsl.utils.fslsub.submit
. This is an internal change which should not affect the usage of therun
,runfsl
or wrapper functions (!309).
- :class:`fsl.utils.fslsub.SubmitParams` and :func:`fsl.utils.fslsub.submit`
have been deprecated in favour of using the
fsl.wrappers.fsl_sub
wrapper function (!309). - The :func:`fsl.utils.fslsub.info` function has been deprecated in favour of
using the
fsl_sub.report
function, from the separate fsl_sub Python library (!309).
- New :func:`.epi_reg` wrapper function (!306).
- New :meth:`.fslmaths.kernel` and :meth:`.fslmaths.fmeanu` options on the :class:`.fslmaths` wrapper (!304).
- When creating an
Image
object withloadData=False
, thecalcRange
argument is ignored, as it would otherwise cause the data to be loaded (!301).
- The
fsl.wrappers.fast
wrapper passes-v
tofast
ifv=True
orverbose=True
is specified.
- Removed the
dataclasses
backport from requirements (!297).
- The
fslpy
API ocumentation is now hosted at https://open.win.ox.ac.uk/pages/fsl/fslpy (!290). - The :mod:`fsl` and :mod:`fsl.scripts` packages have been changed from being pkgutil-style namespace packages to now being native namespace packages (!290).
- The :class:`.TaskThread` now allows an error handler function to be specified, which is run on the :mod:`.idle` loop (!283).
- The :func:`.bids.loadMetadata` function no long resolves sym-links when determining whether a file is contained within a BIDS data set (!287).
- The :class:`.Image` class can now be created from a
pathlib.Path
object (!292). - Some functions in the :mod:`.path` module can now be used with
pathlib.Path
objects (!293).
- Deprecated a number of GUI-specific properties in the
:mod:`fsl.utils.platform` module, including
frozen
,haveGui
,canHaveGui
,inSSHSession
,inVNCSession
,wxPlatform
,wxFlavour
,glVersion
,glRenderer
, andglIsSoftwareRenderer
. Equivalent functions are being added to thefsleyes-widgets
library (!285). - The :mod:`fsl.utils.filetree` package has been deprecated, and will be
removed in a future version of
fslpy
- it is now published as a separate library on [PyPI](https://pypi.org/project/file-tree/) (!286).
- Fixed an edge-case in the :mod:`.gifti` module, where a surface with a single triangle was being loaded incorrectly (!288).
- Fixed an issue in the :func:`~.fslsub.func_to_cmd` function, where it was unintentionally leaving flie handles open (!291).
- Fixed a bug in :func:`.featanalysis.loadClusterResults` (!281).
- Adjusted the :func:`.dicom.scanDir` function so that it will set a
default value for
SeriesDescription
if it is not present in thedcm2niix
json
output (!279). - Fixed some issues with API documentation generation (!279).
- New :func:`.featanalysis.loadFsf` function, for loading arbitrary
.fsf
files (!276).
- Adjustments to :mod:`.dicom` tests to work with different versions of
dcm2niix
(!277).
- New
fsl_anat.tree
, for use with the :mod:`~fsl.utils.filetree` package (!264). - New :func:`.fsl_prepare_fieldmap` wrapper function (!265).
- The :class:`.fslmaths` wrapper now supports the
fslmaths -s
option via the :meth:`.fslmaths.smooth` method (!271).
- Windows/WSL-specific workaround to the :func:`fsl.utils.run.run` function to avoid console windows from popping up, when used from a graphical program (!272).
- New :mod:`.tbss` wrapper functions for TBSS commands.
- Calls to functions in the :mod:`.assertions` module are disabled when a
wrapper function is called with
cmdonly=True
.
- The :func:`.fileOrImage` (and related) decorators will not manipulate the
return value of a decorated function if an argument
cmdonly=True
is passed. This is so that wrapper functions will directly return the command that would be executed whencmdonly=True
.
- Most :func:`.wrapper` functions now accept an argument called
cmdonly
which, ifTrue
, will cause the generated command-line call to be returned, instead of executed.
- The :func:`.affine.decompose` and :func:`.affine.compose` functions now have the ability to return/accept shear components.
- Fixed a bug in the :func:`.affine.decompose` function which was corrupting the scale estimates when given an affine containing shears.
- New ported versions of various core FSL tools, including
imrm
,imln
,imtest
,fsl_abspath
,remove_ext
,Text2Vest
, andVest2Text
. - New :func:`.gps` function, wrapping the FSL
gps
command. - New :func:`.vest.loadVestFile` and :func:`.vest.generateVest` functions.
- Updates to the BIDS filetree specification.
- The :class:`.CoefficientField` class now works with alternate reference images (i.e. a reference image with different dimensions to that which was originally used when the non-linear transformation was calculated).
- The :func:`.fslsub.func_to_cmd` function allows more fine-grained control over whether the script file is removed after the job has finished running.
- Minor updates to documentation.
- A new :func:`.fslsub.hold` function to wait on previously submitted jobs, to
be used in place of the
wait
function.
- The :func:`.fslsub.wait` (and :func:`.run.wait`) function has been removed, as
repeated calls to
qstat
can adversely affect the cluster job submission system.
- New :mod:`.cifti` module, providing classes and functions for working with CIFTI data.
- New :func:`.winpath` and :func:`wslpath` functions for working with paths when using FSL in a Windows Subsystem for Linux (WSL) environment.
- New :func:`.wslcmd` function for generating a path to a FSL command installed in a WSL environment.
- New :meth:`.Platform.fslwsl` attribute for detecting whether FSL is installed in a WSL environment.
- New :meth:`.Image.niftiDataType` property.
- The :class:`.FileTree` class has been updated to allow creation of deep copies via the new :meth:`.FileTree.copy` method.
- :func:`.Image` objects created from
numpy
arrays will be NIFTI1 or NIFTI2, depending on the value of the$FSLOUTPUTTYPE
environment variable.
- Updated the :func:`.fast` wrapper to support some single-character command-line flags.
- The :func:`.isMelodicDir` function now accepts directories that do not end
with
.ica
, as long as all required files are present. - Added the
dataclasses
backport, sofslpy
is now compatible with Python 3.6 again.
- New wrapper functions for the FSL :class:`.fslstats`, :func:`.prelude` and :func:`applyxfm4D` commands.
- New
firstDot
option to the :func:`.path.getExt`, :func:`.path.removeExt`, and :func:`.path.splitExt`, functions, offering rudimentary support for double-barrelled filenames. - The :func:`.nonlinear.applyDeformation` function now accepts a
premat
affine, which is applied to the input image before the deformation field. - New :class:`.SubmitParams` class, providing a higer level interface for cluster submission.
- New :meth:`.FileTree.load_json` and :meth:`.FileTree.save_json` methods.
fslpy
now requires a minimum Python version of 3.7.- The default value for the
partial_fill
option to :meth:`.FileTree.read` has been changed toFalse
. Accordingly, the :class:`.FileTreeQuery` calls the :meth:`.FileTree.partial_fill` method on theFileTree
it is given. - The :func:`.gifti.relatedFiles` function now supports files with BIDS-style naming conventions.
- The :func:`.run.run` and :func:`.run.runfsl` functions now pass through any
additional keyword arguments to
subprocess.Popen
or, ifsubmit=True
, to :func:`fslsub.submit`. - The :func:`.fslsub.submit` function now accepts an
env
option, allowing environment variables to be specified. - The :func:`.run.runfsl` function now raises an error on attempts to
run a command which is not present in
$FSLDIR/bin/
(e.g.ls
). - The :mod:`.bids` module has been updated to support files with any
extension, not just those in the core BIDS specification (
.nii
,.nii.gz
,.json
,.tsv
). - The return value of a function decorated with :func:`.fileOrImage`,
:func:`.fileOrArray`, or :func:`.fileOrText` is now accessed via an attribute
called
stdout
, instead ofoutput
. - Output files of functions decorated with :func:`.fileOrImage`, :func:`.fileOrArray`, or :func:`.fileOrText`, which have been loaded via the :attr:`.LOAD` symbol, can now be accessed as attributes of the returned results object, in addition to being accessed as dict items.
- Wrapper functions decorated with the :func:`.fileOrImage`,
:func:`.fileOrArray`, or :func:`.fileOrText` decorators will now pass all
arguments and return values through unchanged if an argument called
submit
is passed in, and is set toTrue
(or any non-False
value). Furthermore, in such a scenario a :exc:`ValueError` will be raised if any in-memory objects orLOAD
symbols are passed. - The :func:`.fileOrText` decorator has been updated to work with input
values - file paths must be passed in as
pathlib.Path
objects, so they can be differentiated from input values. - Loaded :class:`.Image` objects returned by :mod:`fsl.wrappers` functions are now named according to the wrapper function argument name.
- Updated the :func:`.prepareArgs` function to use
shlex.split
when preparing shell command arguments, instead of performing a naive whitespace split. - Fixed some bugs in the :func:`.fslsub.info` and :func:`.fslinfo.wait` functions.
- Fixed the :func:`.DeformationField.transform` method so it works with a single set of coordinates.
- :class:`.Image` creation does not fail if
loadMeta
is set, and a sidecar file containing invalid JSON is present.
- Removed the deprecated
.StatisticAtlas.proportions
,.StatisticAtlas.coordProportions
, and.StatisticAtlas.maskProportions
methods. - Removed the deprecated
indexed
option to :meth:`.Image.__init__`. - Removed the deprecated
.Image.resample
method. - Removed the deprecated
.image.loadIndexedImageFile
function. - Removed the deprecatd
.FileTreeQuery.short_names
and.Match.short_name
properties. - Removed the deprecated
.idle.inIdle
,.idle.cancelIdle
,.idle.idleReset
,.idle.getIdleTimeout
, and.idle.setIdleTimeout
functions. - Removed the deprecated
resample.calculateMatrix
function.
- Added a new
partial_fill
option to :meth:`.FileTree.read`, which effectively eliminates any variables which only have one value. This was added to accommodate some behavioural changes that were introduced in 2.8.2.
- Fixed a bug in the :meth:`.Image.save` method.
- Fixed some subtle bugs in the :func:`.filetree.utils.get_all` function.
- Fixed a bug where an error would be raised on attempts to load an image file without a BIDS-compatible name from a BIDS-like directory.
- New :meth:`.Nifti.adjust` method, for creating a copy of a :class:`.Nifti` header with adjusted shape, pixdims, and affine. This can be useful for creating a resampling reference.
- New :func:`.affine.rescale` function, for adjusting a scaling matrix.
- New :func:`.mghimage.voxToSurfMat` function, for creating a voxel-to-freesurfer affine transform from any image.
- The :class:`.ImageWrapper` now maintains its own image data cache, rather
than depending on
nibabel
. - Internal changes to avoid using the deprecated
nibabel.dataobj_images.DataobjImage.get_data
method.
- Improved the algorithm used by the :func:`.mesh.needsFixing` function.
- The :meth:`.fslmaths.run` method now accepts :attr:`.wrappers.LOAD` as an output specification.
- Fixed a bug in the :class:`.Mesh` class to prevent indices from being loaded as floating point type.
- Fixed a bug in the :func:`.resample` function.
- Fixed a bug in the :class:`.MGHImage` class, which was causing pixdims to be overridden by scales derived from the affine.
- :func:`.calculateMatrix` - its functionality has been moved to the :func:`.affine.rescale` function.
- New
until
option to the :func:`.idle.block` function. - New :meth:`.Idle.neverQueue` setting, which can be used to force all tasks passed to :func:`.idle.idle` to be executed synchronously.
- New :meth:`.IdleLoop.synchronous` context manager, to temporarily change the value of :meth:`.IdleLoop.neverQueue`.
- New :mod:`.bids` module, containing a few simple functions for working with BIDS datasets.
- New :func:`.image.loadMetadata` function, and
loadMeta
option to the :class:`.Image` class, to automatically find and load any sidecar JSON files associated with an image file.
- Internal reorganisation in the :mod:`.idle` module.
- Fixed incorrect usage of
setuptools.find_packages
, which was causing unit tests to be installed.
- :func:`.idle.inIdle` - replaced by :meth:`.IdleLoop.inIdle`.
- :func:`.idle.cancelIdle` - replaced by :meth:`.IdleLoop.cancelIdle`.
- :func:`.idle.idleReser` - replaced by :meth:`.IdleLoop.idleReset`.
- :func:`.idle.getIdleTimeout` - replaced by :meth:`.IdleLoop.callRate`.
- :func:`.idle.setIdleTimeout` - replaced by :meth:`.IdleLoop.callRate`.
- Added a debugging hook in the :mod:`.idle` module.
- The :func:`.fslsub.submit` function is now more flexible in the way it accepts the command and input arguments.
- The :func:`.run.prepareArgs` function has been renamed (from
_prepareArgs
).
fslpy
is no longer tested against Python 3.5, and is now tested against Python 3.6, 3.7, and 3.8.
- New :meth:`.Image.iscomplex` attribute.
- Support for a new
Statistic
atlas type.
- The :class:`.Cache` class has a new
lru
option, allowing it to be used as a least-recently-used cache. - The :mod:`fsl.utils.filetree` module has been refactored to make it easier for the :mod:`.query` module to work with file tree hierarchies.
- The :meth:`.LabelAtlas.get` method has a new
binary
flag, allowing either a binary mask, or a mask with the original label value, to be returned. - The :mod:`.dicom` module has been updated to work with the latest version of
dcm2niix
.
- :meth:`.ProbabilisticAtlas.proportions`, :meth:`.ProbabilisticAtlas.maskProportions`, and :meth:`.ProbabilisticAtlas.labelProportions` have been deprecated in favour of :meth:`.StatisticAtlas.values`, :meth:`.StatisticAtlas.maskValues`, and :meth:`.StatisticAtlas.labelValues`
- New :meth:`.Image.getAffine` method, for retrieving an affine between any of the voxel, FSL, or world coordinate systems.
- New :mod:`fsl.transforms` package, which contains classes and functions for working with linear and non-linear FLIRT and FNIRT transformations.
- New static methods :meth:`.Nifti.determineShape`, :meth:`.Nifti.determineAffine`, :meth:`.Nifti.generateAffines`, and :meth:`.Nifti.identifyAffine`.
- New prototype :mod:`fsl.transforms.x5` module, for reading/writing linear and non-linear X5 files (preliminary release, subject to change).
- New prototype :mod:`.fsl_convert_x5` :mod:`.fsl_apply_x5` programs, for working with X5 transformations (preliminary release, subject to change).
- The :mod:`.vest.looksLikeVestLutFile` function has been made slightly more lenient.
- h5py has been added to the
fslpy
dependencies.
- The :mod:`fsl.utils.transform` module has been deprecated; its functions can now be found in the :mod:`fsl.transforms.affine` and :mod:`fsl.transform.flirt` modules.
- New :mod:`.image.roi` module, for extracting an ROI of an image, or expanding its field-of-view.
- The :mod:`.resample_image` script has been updated to support resampling of images with more than 3 dimensions.
- The :class:`.Bitmap` class now supports greyscale images and palette images.
- New :class:`.Bitmap` class, for loading bitmap images. The
:meth:`.Bitmap.asImage` method can be used to convert a
Bitmap
into an :class:`.Image`. - The :class:`.Image` class now has support for the
RGB24
andRGBA32
NIfTI data types. - New :attr:`.Image.nvals` property, for use with
RGB24
/RGBA32
images. - New :meth:`.LabelAtlas.get` and :meth:`ProbabilisticAtlas.get` methods, which return an :class:`.Image` for a specific region.
- The :meth:`.AtlasDescription.find` method also now a
name
parameter, allowing labels to be looked up by name. - New :meth:`.FileTree.defines` and :meth:`.FileTree.on_disk` methods, to replace the :func:`.FileTree.exists` method.
- The :func:`.makeWriteable` function will always create a copy of an
array
if its base is abytes
object. - Fixed a bug in the :meth:`.GitfitMesh.loadVertices` method.
- Fixed a bug in the :meth:`.Mesh.addVertices` method where the wrong face normals could be used for newly added vertex sets.
- New :mod:`.resample_image` script.
- New :mod:`.resample` module (replacing the :func:`.Image.resample` method), containing functions to resample an :class:`.Image`.
- New :func:`.resample.resampleToPixdim` and :func:`.resample.resampleToReference` functions, convenience wrappers around :func:`.resample.resample`.
- New :func:`.idle.block` function.
- The :func:`.resample` function (formerly :meth:`.Image.resample`) now
accepts
origin
andmatrix
parameters, which can be used to adjust the alignment of the voxel grids of the input and output images. - The :func:`.transform.decompose` function now accepts both
(3, 3)
and(4, 4)
matrices.
- Minor fixes to some :mod:`.filetree.filetree` tree definitions.
- The :meth:`.Image.resample` method has been deprecated in favour of the :func:`.resample.resample` function.
- New tensor conversion routines in the :mod:`~fsl.data.dtifit` module (Michiel Cottaar).
- New :func:`.makeWriteable` function which ensures that a
numpy.array
is writeable, and creates a copy if necessary
- The :class:`.GiftiMesh` class no longer creates copies of the mesh vertex/index arrays. This means that, these arrays will be flagged as read-only.
- The :class:`.Mesh` class handles vertex data sets requiring different triangle unwinding orders, at the cost of potentially having to store two copies of the mesh indices.
- The :class:`.FeatDesign` class now handles "compressed" voxelwise EV files, such as those generated by PNM.
- Fixed a bug with the :func:`.gifti.relatedFiles` function returning duplicate files.
- New :mod:`fsl.utils.filetree` package for defining and working with file/directory templates (Michiel Cottaar).
- Simple built-in :mod:`.deprecated` decorator.
- New :mod:`fsl.data.utils` module, which currently contains one function :func:`.guessType`, which guesses the data type of a file/directory path.
- New :func:`.commonBase` function for finding the common prefix of a set of file/directory paths.
- Removed support for Python 2.7 and 3.4.
- Minimum required version of
nibabel
is now 2.3. - The :class:`.Image` class now fully delegates to
nibabel
for managing file handles. - The :class:`.GiftiMesh` class can now load surface files which contain
vertex data, and will accept surface files which end in
.gii
, rather than requiring files which end in.surf.gii
. - The
name
property of :class:`.Mesh` instances can now be updated.
- Many deprecated items removed.
- Deprecated the :func:`.loadIndexedImageFile` function, and the
indexed
flag to the :class:`.Image` constructor.
- Fixed an issue with the :func:`.dicom.loadSeries` using memory-mapping for image files that would subsequently be deleted.
- Fixed an issue in the :class:`.GiftiMesh` class, where
numpy
/nibabel
was returning read-only index arrays.
- The :meth:`.Image.resample` method now supports images with more than three dimensions.
- The :func:`fsl.utils.fslsub.submit` now returns the job-id as a string rather than a one-element tuple. It now also accepts a nested sequence of job ids rather than just a flat sequence. This will also changes the output from the function wrappers in :mod:`fsl.wrappers` if submitted.
- Fix to the :class:`.ImageWrapper` regarding complex data types.
- Added a missing
image
attribute in the :class:`.VoxelwiseConfoundEV` class. - Make sure that FEAT
Cluster
objects (created by the :func:`.loadClusterResults` function) containp
andlogp
attributes, even when cluster thresholding was not used.
- New wrapper functions for :func:`.fsl_anat`, :func:`.applytopup` (Martin Craig).
- New :func:`.fileOrText` decorator for use in wrapper functions (Martin Craig).
- Various minor changes and enhancements to the FSL function :mod:`.wrappers` interfaces (Martin Craig).
- The
immv
andimcp
scripts now accept incorrect file extensions on input arguments.
- The
extract_noise
script has been renamed to :mod:`.fsl_ents`. - Increased the minimum required version of
dcm2niix
in the :mod:`fsl.data.dicom` module.
- The
extract_noise
script.
- Fixed a Python 2 incompatibility in the :mod:`.settings` module.
- A couple of new convenience functions to the :mod:`.settings` module.
- Development (test and documentation dependencies) are no longer listed
in
setup.py
- they now need to be installed manually. - Removed conda build infrastructure.
- The :func:`.parseVersionString` function accepts (and ignores) local version identifer strings.
- The :meth:`.Image.save` method was not handling memory-mapped images correctly.
- Minor adjustmenets to improve Windows compatibility.
- The :mod:`.FEATImage.getCOPE` method was returning PE images.
- A new script, :mod:`.extract_noise`, which can be used to extract ICA component time courses from a MELODIC ICA analysis.
- New :func:`.path.allFiles` function which returns all files underneath a directory.
- The :func:`.fileOrImage` and :func:`.fileOrArray` decorators now support loading of files which are specified with an output basename.
- New :mod:`.fast` wrapper function for the FSL FAST tool.
- When using the :func:`.run.run` function, the command output/error streams are now forwarded immediately.
- Removed dependency on
pytest-runner
.
- New :meth:`.Image.data` property method, for easy access to image data
as a
numpy
array. - New
log
option to the :func:`.run.run` function, allowing more fine-grained control over sub-process output streams. - New :meth:`.Platform.fsldevdir` property, allowing the
$FSLDEVDIR
environment variable to be queried/changed.
- :meth:`.Image.ndims` has been renamed to :meth:`.Image.ndim`, to align
more closely with
numpy
naming conventions. - The
err
andret
parameters to the :func:`.run.run` function have been renamed tostderr
andexitcode
respectively. - The :func:`.runfsl` function will give priority to the
$FSLDEVDIR
environment variable if it is set.
- :meth:`.Image.ndims`.
- The
err
andret
parameters to :func:`.run.run`.
- The :func:`.fileOrImage` decorator function now accepts :class:`.Image`
objects as well as
nibabel
image objects.
- New :mod:`.wrappers` package, containing wrapper functions for a range of FSL tools.
- New :mod:`fsl.utils.run` module, to replace the :mod:`fsl.utils.callfsl` module.
- New :mod:`fsl.utils.fslsub` module, containing a :func:`.fslsub.submit`
function which submits a cluster job via
fsl_sub
. - Assertions (in the :mod:`.assertions` module) can be disabled with the new :func:`.assertions.disabled` context manager.
- New :mod:`fsl.utils.parse_data` module containing various neuroimaging
data constructors for use with
argparse
. - The :func:`.memoize.skipUnchanged` decorator has an
invalidate
function which allows its cache to be cleared.
- The :func:`.tempdir` function has an option to not change to the newly created directory.
- The :mod:`fsl.utils.callfsl` module (replaced with :mod:`fsl.utils.run`).
- Added the :meth:`.MGHImage.voxToSurfMat` and related properties, giving access to the voxel-to-surface affine for an MGH image.
- Adjusted :func:`.parseVersionString` so it accepts
.dev*
suffixes.
- Removed deprecated use of :func:`.imagewrapper.canonicalShape`.
- The :mod:`fsl.utils.assertions` module contains a range of functions which can be used to assert that some condition is met.
- The :mod:`fsl.utils.ensure` module contains a range of functions (currently just one) which can be used to ensure that some condiution is met.
- The :mod:`.settings` module now saves its files in a format that is compatible with Python 2 and 3.
- The :func:`.tempdir` function now accepts a
root
argument, which specifies the location in which the temporary directory should be created. - An image's data source can now be set via :meth:`.Image.__init__`.
- :meth:`.MGHImage` objects now have a :meth:`.MGHImage.save` method.
- Adjustments to the
conda
package build and deployment process. - The :func:`.ImageWrapper.canonicalShape` function has been moved to the :mod:`.data.image` class.
- The :func:`.ImageWrapper.naninfrange` function has been moved into its own :mod:`.naninfrange` module.
- Fixed a bug in the :class:`.MutexFactory` class.
- :func:`.ImageWrapper.canonicalShape` (moved to the :mod:`.data.image` module)
- :func:`.ImageWrapper.naninfrange` function (moved to the :mod:`.naninfrange` module)
- The atlasq, immv, imcp and imglob scripts suppress some warnings.
- More further adjustments to the
conda
package build. - Adjustments to pypi source distribution - the
requirements-extra.txt
file was not being included.
- Further adjustments to the
conda
package build.
- Adjustments to the
conda
package build.
- The :mod:`.platform` module emits a warning if it cannot import
wx
.
- Minor enhancements to the :class:`.WeakFunctionRef` class.
- Some bugfixes to the :mod:`fsl.utils.imcp` module, with respect to handling relative path names, moving file groups (e.g. .img/.hdr pairs), and non-existent directories.
- Updates to the
conda
installation process. - A new script is installed when
fslpy
is installed viapip
orconda
-atlasquery
, which emulates the FSLatlasquery
tool.
- Removed
lxml
as a dependency - this was necessary in older versions oftrimesh
.
- The new :class:`.Mesh` class is now the base class for all mesh types. It has been written to allow multiple sets of vertices to be associated with a mesh object (to support e.g. white matter, inflated, spherical models for a GIFTI/freeusrfer mesh).
- The new :class:`.VTKMesh` class must now be used for loading VTK model files, instead of the old :class:`.TriangleMesh` class.
- The new :class:`.Mesh` class uses the
trimesh
library (https://github.com/mikedh/trimesh) to perform various geometrical operations, accessible via new :meth:`.Mesh.rayIntersection`, :meth:`.Mesh.planeIntersection`, :meth:`.Mesh.nearestVertex` methods. - The :class:`.Nifti` and :class:`.Mesh` classes have new methods allowing arbitrary metadata to be stored with the image, as key-value pairs. These are provided by a new mixin class, :class:`.Meta`.
- Freesurer surface files and vertex data can now be loaded via the :class:`.FreesurferMesh` class, in the new :mod:`.freesurfer` module.
- Freesurfer
mgz
/mgh
image files can now be loaded via the new :mod:`.mghimage` module. Internally, these image files are converted to NIFTI - the :class:`.MGHImage` class derives from the :class:`.Image` class. - Meta-data access methods on the :class:`.DicomImage` class have been deprecated, as their functionality is provided by the new :class:`.Meta` mixin.
- The :class:`.TriangleMesh` class has been deprecated in favour of the new :class:`.Mesh` class.
- Optional dependencies
wxpython
,indexed_gzip
,trimesh
, andrtree
are now listed separately, sofslpy
can be used without them (although relevant functionality will be disabled if they are not present).
- Actually included the fix that was supposed to be in version 1.5.3.
- Bug fix to :meth:`.ImageWrapper.__expandCoverage` - was not correctly handling
large images with lots of
nan
values.
- Fixed issue with
MANIFEST.in
file.
- Fixed bug in :func:`.dicom.scanDir` function related to data series ordering.
- New module :mod:`.dicom`, which provides a thin wrapper on top of Chris Rorden's dcm2niix.
- New module :mod:`.tempdir`, which has a convenience function for creating temporary directories.
- Fixed small issue in :meth:`.Image.dtype` - making sure that it access image data via the :class:`.ImageWrapper`, rather than via the Nifti1Image object.
- New function :func:`.transform.rmsdev` function, which implements the RMS deviation equation for comparing two affine transformations (FMRIB Technical Report TR99MJ1, available at https://www.fmrib.ox.ac.uk/datasets/techrep/).
- Some small bugfixes to the :mod:`.atlasq` and :mod:`.atlases` moduless.
- Fixed bug in
setup.py
.
- The :func:`.uniquePrefix` function now raises a :exc:`~.path.PathError` instead of a :exc:`.ValueError`, when an invalid path is provided.
- The :mod:`fsl.utils.async` module is now deprecated, as
async
will become a reserved word in Python 3.7. It has been renamed tofsl.utils.idle
, with no other API changes. - For image file pairs, the
hdr
extension now takes precedence over theimg
extension, when using the :func:`fsl.data.image.addExt` (and related) functions. - The :func:`fsl.utils.path.addExt` function accepts a new parameter,
unambiguous
which causes it to allow an ambiguous prefix, and return all matching paths. - New :mod:`~fsl.scripts.atlasq` application, intended to replace the FSL
atlasquery
tool. - New :mod:`~fsl.scripts.imglob` application, intended to replace the FSL
imglob
tool. - The :meth:`.Image.resample` method explicitly raises a
ValueError
if incompatible shapes are provided.
- Fixed bug in :meth:`.Platform.wxPlatform` causing it to always return
WX_UNKNOWN
.
- :class:`.Atlas` classes can now pass
kwargs
through to the :class:`.Image` constructor. - :class:`.LabelAtlas` image values no longer need to match the index of the
label into the :class:`.AtlasDescription`
labels
list. This means that label atlas XML files may contain non-sequential label values. - :class:`.Cache` now implements
__getitem__
and__setitem__
- The :func:`.image.read_segments` function (monkey-patched into
nibabel
) is deprecated, as it is no longer necessary as ofnibabel
2.2.0. - :func:`.platform.isWidgetAlive` is deprecated in favour of an equivalent
function in the
fsleyes-widgets
library. scipy
is now explicitly listed as a requirement (this should have been done in 1.2.1).
- The :func:`.image.read_segments` function is only monkey-patched into
nibabel
2.1.0, as it breaks when used with 2.2.0.
- If an :class:`.Image` is passed an existing
nibabel
header object, it creates a copy, rather than using the original. - New :meth:`.Image.resample` method, which resamples the image data to a different resolution.
- New :meth:`.LabelAtlas.coordLabel`, :meth:`.LabelAtlas.maskLabel`,
:meth:`.ProbabilisticAtlas.coordProportions` and
:meth:`.ProbabilisticAtlas.maskProportions` methods. The
coord
methods perform coordinate queries in voxel or world coordinates, and themask
methods perform mask-based queries.
- :meth:`fsl.data.image.Nifti.voxelsToScaledVoxels` method deprecated in favour of new :meth:`.Nifti.voxToScaledVoxMat` and :meth:`Nifti.scaledVoxToVoxMat` properties.
- The :mod:`fsl` package is now a
pkgutil
-style namespace package, so it can be used for different projects. - Updates to :class:`fsl.data.image.Nifti` and :class:`fsl.data.image.Image`
to add support for images with more than 4 dimensions:
- New
ndims
property -is4DImage
method deprecated
- New functions and further adjustments in :mod:`fsl.utils.transform` module:
- :func:`.transform.rotMatToAffine` converts a
(3, 3)
rotation matrix into a(4, 4)
affine.- :func:`.transform.transformNormal` applies an affine transform to one or more vectors.
- :func:`.transform.veclength` calculates the length of a vector
- :func:`.transform.normalise` normalises a vector
- :func:`.transform.scaleOffsetXform` adjusted to have more flexibility with respect to inputs.
- :func:`.transform.decompose` can return rotations either as three axis-angles, or as a rotation matrix
- Updates to :class:`fsl.data.mesh.TriangleMesh` -
vertices
andindices
are nowproperty
attributes. New lazily generatednormals
andvnormals
properties (face and vertex normals respectively). Option to__init__
to fix the face winding order of a mesh. - :func:`fsl.utils.memoize.memoize` decorator made into a class rather than a
function. The new :class:`.Memoize` class has an
invalidate
method, which clears the cache.
- Python 2/3 compatibility fix to :mod:`fsl.utils.callfsl`.
- Fix to :func:`fsl.utils.transform.scaleOffsetXform` - accepts inputs that are not lists.
- :func:`fsl.utils.transform.compose` accepts either a sequence of three
axis angles, or a
(3, 3)
rotation matrix.
- Fix to :mod:`fsl.utils.async` which was breaking environments where multiple
wx.App
instances were being created.
- Python 2/3 compatibility fixes
- New :func:`fsl.version.patchVersion` function.
- New version number parsing functions in :mod:`fsl.version`.
- Removed many GUI-related modules - they have been moved to the
fsleyes-widgets
project. The following modules have been removed: - :mod:`fsl.utils.colourbarbitmap` - :mod:`fsl.utils.dialog` - :mod:`fsl.utils.imagepanel` - :mod:`fsl.utils.layout` - :mod:`fsl.utils.platform` - :mod:`fsl.utils.runwindow` - :mod:`fsl.utils.status` - :mod:`fsl.utils.textbitmap` - :mod:`fsl.utils.typedict` - :mod:`fsl.utils.webpage` - :mod:`fsl.utils.settings` module rewritten. It no longer uses
wx
, but instead stores plain-text andpickle
files in the user's home directory. - Software GL renderer test in :mod:`fsl.utils.platform` is more lenient
- New :class:`.AtlasLabel` class
- :meth:`.Image.__init__` allows arguments to be passed through to
nibabel.load
. - New :meth:`.Nifti.strval` method to handle escaped strings in NIFTI headers.
- Python 2/3 compatibility fixes
- First public release as part of FSL 5.0.10