fslpy release history
This document contains the fslpy release history in reverse chronological
order.
3.24.0 (Monday 29th September 2025)
Changed
Adjust the
hold()function - there is no need for it to submit itself with a jobtime - it will sit in the queue until the held job completes, then will run more or less instantly (!476).Now using
setuptools-scmfor automatic number management.
Fixed
Adjust the
gps()wrapper - thegpscommand expects an output file prefix, and can be passed multiple values for--ndir(!477).Fixed a bug in the
fslstats()wrapper function when there is missing data in multi-dimensional output (!478).
3.23.0 (Tuesday 10th June 2025)
Added
New
submitfunc()function, allowing a Python function to be synchronously executed on a cluster viafsl_sub(!474).New
saveargument to thefunc_to_cmd()function, allowing the function return value to be serialised and saved to a file (!474).New
envoption to thefunc_to_cmd()function, allowing additional environment variables to be set when the function is executed (!474).New
deleteoption to thetempdir()function, which can be used to prevent the directory from being deleted (!474).New
mkstemp()function, which is simply a wrapper around the built-intempfile.mkstempfunction, but which closes the open file handle (!474).
3.22.1 (Monday 2nd June 2025)
Fixed
3.22.0 (Monday 17th February 2025)
Changed
The
Nifti.getAffine()method now supports the'scaled'coordinate system, which is equivalent to the'fsl'coordinate system, but without any flip along the first axis (!466).
Deprecated
Deprecated the
Nifti.voxToScaledVoxMat()andNifti.caledVoxToVoxMat()properties in favour of using theNifti.getAffine()method (!466).
3.21.1 (Friday 27th September 2024)
Changed
The
fixlabels.loadLabelFile()andfixlabels.saveLabelFile()functions now support FIX label files which contain classification probabilities, as generated by pyfix >= 0.9.0, and old FIX >= 1.069 (!464).
3.21.0 (Tuesday 23rd July 2024)
Changed
Behaviour of the
imcp/immvcommands has been adjusted so that when an image file is copied/moved, and converted to a different format (e.g..niito.nii.gz), the image data and header slope/intercept fields are not modified (!462).
3.20.0 (Wednesday 10th July 2024)
Added
New functions/methods in the
featanalysismodule andFEATImageclass for accessing F-test results (!460).
3.19.1 (Wednesday 26th June 2024)
Fixed
Minor Updates for compatibility with
numpy2.0 (!458).
3.19.0 (Friday 24th May 2024)
Added
New
bedpostx()andbedpostx_gpu()wrapper functions (!455).New
Platform.wsl()property for detecting whether we are running under Microsoft WSL (!456).
Deprecated
Deprecated the
bedpostx_postproc_gpu()wrapper function - thebedpostx_postproc_gpu.shandbedpostx_postproc.shscripts are not intended to be called directly (!455).
3.18.3 (Saturday 4th May 2024)
Fixed
Fixed an issue with :mod:
fsl.wrappersfunctions not finding output files when$FSLOUTPUTTYPEis set to something other thanNIFTI_GZ(!452).
3.18.2 (Wednesday 3rd April 2024)
Fixed
Made some changes to the
fsl.utils.runmodule to improve compatibility with [dill](https://github.com/uqfoundation/dill/) (!449).
3.18.1 (Tuesday 5th March 2024)
Fixed
Fixed an issue which could cause
fsl.wrappersfunctions to crash when being executed concurrently (!446).
3.18.0 (Thursdday 22nd February 2024)
Added
New wrapper function for the FLIRT midtrans command (!443).
The
Imageclass now accepts aversionparameter, as an easy way of specifying the NIfTI file format version (!443).
3.17.0 (Friday 9th February 2024)
Added
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).
3.16.1 (Wednesday 17th January 2024)
Added
The
run()function now allows thelog{'stdout']andlog{'stderr'}options (used for capturing the standard output/error streams of a called process) to be either file-likes or callables (!438).
3.16.0 (Thursday 21st December 2023)
Added
Added more functions to the
fslmathswrapper (!431).New
smoothest()wrapper function (!432).New
get_standard()wrapper function (!433).New
vecreg()wrapper function (!434).
3.15.4 (Monday 27th November 2023)
Added
3.15.3 (Thursday 16th November 2023)
Changed
Adjusted the
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
Fixed a bug in the
run.hold()function (!426).
3.15.2 (Wednesday 4th October 2023)
Fixed
Removed the obsolete
fsl.wrappers.misc.cluster()wrapper function (!422).
3.15.1 (Monday 25th September 2023)
Fixed
Fixed a problem with some unit tests (!420).
3.15.0 (Monday 25th September 2023)
Added
New
cluster()wrapper function for the FSLcluster/fsl-clustercommand (!417).
Changed
3.14.1 (Thursday 31st August 2023)
Fixed
Fixed a bug in
Image.__setitem__()- change listeners were being passed an un-normalisedsliceobject (with slices for trailing dimensions of length 1 present) (!414).
3.14.0 (Wednesday 30th August 2023)
Added
New
affine.flip()function, for applying a flip/inversion to the axes of an affine transformation (!403).
Changed
The
sform/qformfields of aDeformationFieldinstance 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/imcpscripts to supportFSLOUTPUTTYPE=ANALYZE(!405).
Fixed
Updated the
`immv/imcpscripts to honour the$FSLOUTPUTTYPEenvironment variable more closely - conversions between NIFTI1 and NIFTI2 were not being performed correctly (!405).
3.13.3 (Monday 17th July 2023)
Changed
Callback functions registered with
Notifierinstances no longer need to accept three arguments (!400).
3.13.2 (Monday 3rd July 2023)
Added
New
scaleAtOriginoption to theaffine.compose()function, which allows the origin to be preserved by scaling parameters (!398).
3.13.1 (Tuesday 13th June 2023)
Fixed
Fixed some minor issues with API documentation (!396).
3.13.0 (Monday 12th June 2023)
Added
New
runfunc()function which can be used to execute a Python function in a separate process (or as a submitted cluster job), via thefunc_to_cmd()function (!390).New
keys(),values(), anditems()methods on theCacheclass (!391).
Changed
The
run.func_to_cmd(),run.hold(), andrun.job_output()functions have been moved fromfsl.utils.fslsubto thefsl.utils.runmodule (!390).
Deprecated
The
fsl.utils.fslsubmodule has been deprecated, and scheduled for removal infslpy 4.0.0(!390).
3.12.1 (Tuesday 23rd May 2023)
Fixed
The
fsl.scripts.Text2Vestnow handles column vector inputs correctly (!387, !388).The
tempdir()function was not changing back to the original working directory when theoverrideargument was used (!388).
3.12.0 (Friday 19th May 2023)
Added
New
randomise()wrapper function.
Changed
The
fslmaths()wrapper function now allows the-dtand-odtoptions to be set (!381).Assertions (from the
assertionsmodule) called within wrapper functions are now disabled if the command is to be submitted viafsl_sub(!382).The
Imageclass will now resolve symlinks when loading images from file (!383).
Fixed
The
fslstats()wrapper no longer overwrites thelogoption that is passed torun(), if awrapperconfig()context is active (!381).
3.11.3 (Thursday 2nd March 2023)
Fixed
Fixed another bug in the
dcm2niix()function (!379).
3.11.2 (Monday 27th February 2023)
Fixed
Fixed a bug in the
dcm2niix()function (!376).Adjusted the
imrmandimglobscripts to support incomplete wildcard patterns (e.g.img_??matchingimg_01.nii.gz) (!377).
3.11.1 (Friday 24th February 2023)
Added
New
featquery()wrapper function (!374).
Fixed
fixed the
fslstatswrapper to handle index masks (the-Koption) with missing label values (!374).
3.11.0 (Monday 20th February 2023)
Added
New
standard_space_roi(),fslswapdim(),fslmerge(),fslsplit(),fslselectvols(), andfslcpgeom()wrapper functions (!351, !354, !364).New
fsl.wrappers.firstwrapper functions (!355).New
fsl.wrappers.biancaandfsl.wrappers.avwutilswrapper functions (!358).New
fsl.wrappers.bedpostxanddtifitwrapper functions (!364).New
feat(),fsl_regfilt()andfsl_glm()wrapper functions (!364).New
oxford_asl()andasl_file()wrapper functions (!368).New
wrapperconfig()context manager function, which allows the default values for arguments passed by thefsl.wrappersfunctions to thefsl.utils.run.run()function to be changed (!352, !356).New
affine.mergeBounds()function (!360).
Changed
The
fsl.wrappers.fslmaths.fslmathsandfsl.wrappers.fslstats.fslstatswrapper functions have been updated to accept arguments destined forfsl.utils.run.run()(!352).Meshobjects can now be created without indices/triangles - they can be assigned after creation (!360).The
dicommodule will now preferentially call$FSLDIR/bin/dcm2niix, instead of calling the firstdcm2niixon the$PATH(!365).The
applyArgStyle()argmapargument can now be a callable which defines a rule which will be applied to all argument names (!366).The
applyArgStyle()valmapargument now accepts a newEXPAND_LISToption, which allows sequences to be expanded as separate command-line options (!366).Imageobjects can now be created without passing anibabel.Nifti1Image(or similar) object, as long as anibabel.Nifti1Headerand aDataManagerare provided (!362).
Fixed
Fixed a bug in the
Image.strval()method (!353).
3.10.0 (Wednesday 29th June 2022)
Added
New
fsl.wrappers.eddy.eddy()function, to replaceeddy_cuda(). Note that this function will not work with FSL versions 6.0.5.2 or older (!348).
Deprecated
The
fsl.wrappers.eddy.eddy_cuda()function has been deprecated in favour of theeddyfunction (!348).
3.9.6 (Wednesday 15th June 2022)
Added
The .fslmaths wrapper now supports the
-roioption, via thefslmaths.roi()method (!346).
3.9.5 (Thursday 2nd June 2022)
Changed
Updated the
ensureIsImage()function to supportpathlib.Pathobjects (!343).
Fixed
Some fixes in the
wrappersmodule (specifically in theFileOrThingclass) to better supportpathlib.Pathobjects (!343).
3.9.4 (Friday 27th May 2022)
Changed
Changed the behaviour of
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).
3.9.3 (Friday 27th May 2022)
Fixed
Fixed an issue in the
func_to_cmd()function (!339).
3.9.2 (Friday 20th May 2022)
Changed
Added the
NIFTI_XFORM_TEMPLATE_OTHERidentifier, an extension to the NIfTI standard (!337).
3.9.1 (Friday 13th May 2022)
Changed
Adjusted the
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 FSLfast, which have regular--=arguments, but also single-character arguments which expect multiple positional values (!335).
3.9.0 (Tuesday 12th April 2022)
Added
New
Image.niftiDataTypeSize()method, which reports the number of bits per voxel, according to the NIfTI data type (!327).
Changed
The
Imageclass no longer uses anImageWrapperto 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.Nifti1Imageobject (and so remains on disk by default). Image data can be loaded into memory by accessing theImage.data()property, or by modifying the data throughImage.__setitem__()(!327).The
func_to_cmd()function now uses dill instead ofpicklefor serialisation (!328).
Fixed
Fixes to the
melodicandeddy()wrapper functions.
Deprecated
The
imagewrappermodule (and theImageWrapperclass) is being migrated to FSLeyes (!327).The
loadData,calcRange, andthreadedarguments to theImageclass are deprecated and no longer have any effect (!327).The
Nifti.mapIndices()method is deprecated (!327).The
Image.getImageWrapper(),Image.calcRange()andImage.loadData()methods are deprecated and no longer have any effect (!327).
3.8.2 (Tuesday 15th February 2022)
Fixed
The the
topup()wrapper function now allows multiple file names to be passed to the--imainargument (!324).
3.8.1 (Tuesday 28th December 2021)
Fixed
The
melodic()wrapper function no longer requires itsinputargument to be a NIFTI image or file (!321).
3.8.0 (Thursday 23rd December 2021)
Added
New
fslorient()wrapper function (!315).The
Bitmapclass has basic support for loading JPEG2000 images (!316).
Fixed
Fixed an issue with API documentation generation (!317).
3.7.1 (Friday 12th November 2021)
Changed
BIDS and
dcm2niix.jsonsidecar files with control characters are now accepted (!312).
Fixed
Fixed an issue with temporary input files created by
fsl.wrappersfunctions not being deleted (!313).
3.7.0 (Friday 20th August 2021)
Added
New
fsl.wrappers.fsl_subwrapper function for thefsl_subcommand (!309).
Changed
Performance of the
imglob,imln,imtest,imrmandremove_extscripts has been improved, by re-organising them to avoid unnecessary and expensive imports such asnumpy(!310).The default behaviour of the
fsl.utils.run.run()function (and hence that of allfsl.wrappersfunctions) 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 fromrunas 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
fsl.utils.run.run()andfsl.utils.run.runfsl()functions (and hence allfsl.wrappersfunctions) have been modified to usefsl.wrappers.fsl_subinstead offsl.utils.fslsub.submit. This is an internal change which should not affect the usage of therun,runfslor wrapper functions (!309).
Deprecated
fsl.utils.fslsub.SubmitParamsandfsl.utils.fslsub.submit()have been deprecated in favour of using thefsl.wrappers.fsl_subwrapper function (!309).The
fsl.utils.fslsub.info()function has been deprecated in favour of using thefsl_sub.reportfunction, from the separate fsl_sub Python library (!309).
3.6.4 (Tuesday 3rd August 2021)
Added
New
epi_reg()wrapper function (!306).New
fslmaths.kernel()andfslmaths.fmeanu()options on thefslmathswrapper (!304).
3.6.3 (Wednesday 28th July 2021)
Changed
When creating an
Imageobject withloadData=False, thecalcRangeargument is ignored, as it would otherwise cause the data to be loaded (!301).
3.6.2 (Wednesday 23rd June 2021)
Changed
The
fsl.wrappers.fastwrapper passes-vtofastifv=Trueorverbose=Trueis specified.
3.6.1 (Thursday 27th May 2021)
Changed
Removed the
dataclassesbackport from requirements (!297).
3.6.0 (Monday 19th April 2021)
Changed
The
fslpyAPI ocumentation is now hosted at https://open.win.ox.ac.uk/pages/fsl/fslpy (!290).The
fslandfsl.scriptspackages have been changed from being pkgutil-style namespace packages to now being native namespace packages (!290).The
TaskThreadnow allows an error handler function to be specified, which is run on theidleloop (!283).The
bids.loadMetadata()function no long resolves sym-links when determining whether a file is contained within a BIDS data set (!287).The
Imageclass can now be created from apathlib.Pathobject (!292).Some functions in the
pathmodule can now be used withpathlib.Pathobjects (!293).
Deprecated
Deprecated a number of GUI-specific properties in the
fsl.utils.platformmodule, includingfrozen,haveGui,canHaveGui,inSSHSession,inVNCSession,wxPlatform,wxFlavour,glVersion,glRenderer, andglIsSoftwareRenderer. Equivalent functions are being added to thefsleyes-widgetslibrary (!285).The
fsl.utils.filetreepackage has been deprecated, and will be removed in a future version offslpy- it is now published as a separate library on [PyPI](https://pypi.org/project/file-tree/) (!286).
Fixed
Fixed an edge-case in the
giftimodule, where a surface with a single triangle was being loaded incorrectly (!288).Fixed an issue in the
func_to_cmd()function, where it was unintentionally leaving flie handles open (!291).
3.5.3 (Tuesday 9th February 2021)
Fixed
Fixed a bug in
featanalysis.loadClusterResults()(!281).
3.5.2 (Friday 29th January 2021)
Fixed
Adjusted the
dicom.scanDir()function so that it will set a default value forSeriesDescriptionif it is not present in thedcm2niixjsonoutput (!279).Fixed some issues with API documentation generation (!279).
3.5.1 (Thursday 21st January 2021)
Added
New
featanalysis.loadFsf()function, for loading arbitrary.fsffiles (!276).
Fixed
Adjustments to
dicomtests to work with different versions ofdcm2niix(!277).
3.5.0 (Wednesday 20th January 2021)
Added
New
fsl_anat.tree, for use with thefiletreepackage (!264).New
fsl_prepare_fieldmap()wrapper function (!265).The
fslmathswrapper now supports thefslmaths -soption via thefslmaths.smooth()method (!271).
Fixed
Windows/WSL-specific workaround to the
fsl.utils.run.run()function to avoid console windows from popping up, when used from a graphical program (!272).
3.4.0 (Tuesday 20th October 2020)
Added
Changed
Calls to functions in the
assertionsmodule are disabled when a wrapper function is called withcmdonly=True.
3.3.3 (Wednesday 13th October 2020)
Changed
The
fileOrImage()(and related) decorators will not manipulate the return value of a decorated function if an argumentcmdonly=Trueis passed. This is so that wrapper functions will directly return the command that would be executed whencmdonly=True.
3.3.2 (Tuesday 12th October 2020)
Changed
Most
wrapper()functions now accept an argument calledcmdonlywhich, ifTrue, will cause the generated command-line call to be returned, instead of executed.
3.3.1 (Thursday 8th October 2020)
Changed
The
affine.decompose()andaffine.compose()functions now have the ability to return/accept shear components.
Fixed
Fixed a bug in the
affine.decompose()function which was corrupting the scale estimates when given an affine containing shears.
3.3.0 (Tuesday 22nd September 2020)
Added
New ported versions of various core FSL tools, including
imrm,imln,imtest,fsl_abspath,remove_ext,Text2Vest, andVest2Text.New
gps()function, wrapping the FSLgpscommand.New
vest.loadVestFile()andvest.generateVest()functions.
Changed
Updates to the BIDS filetree specification.
Fixed
The
CoefficientFieldclass 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).
3.2.2 (Thursday 9th July 2020)
Changed
The
fslsub.func_to_cmd()function allows more fine-grained control over whether the script file is removed after the job has finished running.
3.2.1 (Tuesday 23rd June 2020)
Changed
Minor updates to documentation.
3.2.0 (Thursday 11th June 2020)
Added
A new
fslsub.hold()function to wait on previously submitted jobs, to be used in place of thewaitfunction.
Removed
The
fslsub.wait()(andrun.wait()) function has been removed, as repeated calls toqstatcan adversely affect the cluster job submission system.
3.1.0 (Thursday 21st May 2020)
Added
New
ciftimodule, providing classes and functions for working with CIFTI data.New
winpath()andwslpath()functions for working with paths when using FSL in a Windows Subsystem for Linux (WSL) environment.New
wslcmd()function for generating a path to a FSL command installed in a WSL environment.New
Platform.fslwsl()attribute for detecting whether FSL is installed in a WSL environment.New
Image.niftiDataType()property.The
FileTreeclass has been updated to allow creation of deep copies via the newFileTree.copy()method.
Changed
Image()objects created fromnumpyarrays will be NIFTI1 or NIFTI2, depending on the value of the$FSLOUTPUTTYPEenvironment variable.
Fixed
Updated the
fast()wrapper to support some single-character command-line flags.
3.0.1 (Wednesday 15th April 2020)
Changed
The
isMelodicDir()function now accepts directories that do not end with.ica, as long as all required files are present.Added the
dataclassesbackport, sofslpyis now compatible with Python 3.6 again.
3.0.0 (Sunday 29th March 2020)
Added
New wrapper functions for the FSL
fslstats,prelude()andapplyxfm4D()commands.New
firstDotoption to thepath.getExt(),path.removeExt(), andpath.splitExt(), functions, offering rudimentary support for double-barrelled filenames.The
nonlinear.applyDeformation()function now accepts apremataffine, which is applied to the input image before the deformation field.New
SubmitParamsclass, providing a higer level interface for cluster submission.New
FileTree.load_json()andFileTree.save_json()methods.
Changed
fslpynow requires a minimum Python version of 3.7.The default value for the
partial_filloption toFileTree.read()has been changed toFalse. Accordingly, theFileTreeQuerycalls theFileTree.partial_fill()method on theFileTreeit is given.The
gifti.relatedFiles()function now supports files with BIDS-style naming conventions.The
run.run()andrun.runfsl()functions now pass through any additional keyword arguments tosubprocess.Popenor, ifsubmit=True, tofslsub.submit().The
fslsub.submit()function now accepts anenvoption, allowing environment variables to be specified.The
run.runfsl()function now raises an error on attempts to run a command which is not present in$FSLDIR/bin/(e.g.ls).The
bidsmodule 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
fileOrImage(),fileOrArray(), orfileOrText()is now accessed via an attribute calledstdout, instead ofoutput.Output files of functions decorated with
fileOrImage(),fileOrArray(), orfileOrText(), which have been loaded via theLOADsymbol, can now be accessed as attributes of the returned results object, in addition to being accessed as dict items.Wrapper functions decorated with the
fileOrImage(),fileOrArray(), orfileOrText()decorators will now pass all arguments and return values through unchanged if an argument calledsubmitis passed in, and is set toTrue(or any non-Falsevalue). Furthermore, in such a scenario aValueErrorwill be raised if any in-memory objects orLOADsymbols are passed.The
fileOrText()decorator has been updated to work with input values - file paths must be passed in aspathlib.Pathobjects, so they can be differentiated from input values.Loaded
Imageobjects returned byfsl.wrappersfunctions are now named according to the wrapper function argument name.
Fixed
Updated the
prepareArgs()function to useshlex.splitwhen preparing shell command arguments, instead of performing a naive whitespace split.Fixed some bugs in the
fslsub.info()andfslinfo.wait()functions.Fixed the
DeformationField.transform()method so it works with a single set of coordinates.Imagecreation does not fail ifloadMetais set, and a sidecar file containing invalid JSON is present.
Removed
Removed the deprecated
.StatisticAtlas.proportions,.StatisticAtlas.coordProportions, and.StatisticAtlas.maskProportionsmethods.Removed the deprecated
indexedoption toImage.__init__().Removed the deprecated
.Image.resamplemethod.Removed the deprecated
.image.loadIndexedImageFilefunction.Removed the deprecatd
.FileTreeQuery.short_namesand.Match.short_nameproperties.Removed the deprecated
.idle.inIdle,.idle.cancelIdle,.idle.idleReset,.idle.getIdleTimeout, and.idle.setIdleTimeoutfunctions.Removed the deprecated
resample.calculateMatrixfunction.
2.8.4 (Monday 2nd March 2020)
Added
Added a new
partial_filloption toFileTree.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.
2.8.3 (Friday 28th February 2020)
Fixed
Fixed a bug in the
Image.save()method.
2.8.2 (Thursday 27th February 2020)
Fixed
Fixed some subtle bugs in the
filetree.utils.get_all()function.
2.8.1 (Thursday 20th February 2020)
Fixed
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.
2.8.0 (Wednesday 29th January 2020)
Added
New
Nifti.adjust()method, for creating a copy of aNiftiheader with adjusted shape, pixdims, and affine. This can be useful for creating a resampling reference.New
affine.rescale()function, for adjusting a scaling matrix.New
mghimage.voxToSurfMat()function, for creating a voxel-to-freesurfer affine transform from any image.
Changed
The
ImageWrappernow maintains its own image data cache, rather than depending onnibabel.Internal changes to avoid using the deprecated
nibabel.dataobj_images.DataobjImage.get_datamethod.
Fixed
Improved the algorithm used by the
mesh.needsFixing()function.The
fslmaths.run()method now acceptswrappers.LOADas an output specification.Fixed a bug in the
Meshclass to prevent indices from being loaded as floating point type.Fixed a bug in the
resample()function.Fixed a bug in the
MGHImageclass, which was causing pixdims to be overridden by scales derived from the affine.
Deprecated
calculateMatrix()- its functionality has been moved to theaffine.rescale()function.
2.7.0 (Wednesday 6th November 2019)
Added
New
untiloption to theidle.block()function.New
Idle.neverQueue()setting, which can be used to force all tasks passed toidle.idle()to be executed synchronously.New
IdleLoop.synchronous()context manager, to temporarily change the value ofIdleLoop.neverQueue().New
bidsmodule, containing a few simple functions for working with BIDS datasets.New
image.loadMetadata()function, andloadMetaoption to theImageclass, to automatically find and load any sidecar JSON files associated with an image file.
Changed
Internal reorganisation in the
idlemodule.
Fixed
Fixed incorrect usage of
setuptools.find_packages, which was causing unit tests to be installed.
Deprecated
idle.inIdle()- replaced byIdleLoop.inIdle().idle.cancelIdle()- replaced byIdleLoop.cancelIdle().idle.idleReser()- replaced byIdleLoop.idleReset().idle.getIdleTimeout()- replaced byIdleLoop.callRate().idle.setIdleTimeout()- replaced byIdleLoop.callRate().
2.6.2 (Monday 7th October 2019)
Changed
Added a debugging hook in the
idlemodule.The
fslsub.submit()function is now more flexible in the way it accepts the command and input arguments.The
run.prepareArgs()function has been renamed (from_prepareArgs).
2.6.1 (Thursday 19th September 2019)
Changed
fslpyis no longer tested against Python 3.5, and is now tested against Python 3.6, 3.7, and 3.8.
2.6.0 (Tuesday 10th September 2019)
Added
New
Image.iscomplex()attribute.Support for a new
Statisticatlas type.
Changed
The
Cacheclass has a newlruoption, allowing it to be used as a least-recently-used cache.The
fsl.utils.filetreemodule has been refactored to make it easier for thequerymodule to work with file tree hierarchies.The
LabelAtlas.get()method has a newbinaryflag, allowing either a binary mask, or a mask with the original label value, to be returned.The
dicommodule has been updated to work with the latest version ofdcm2niix.
Deprecated
ProbabilisticAtlas.proportions(),ProbabilisticAtlas.maskProportions(), andProbabilisticAtlas.labelProportions()have been deprecated in favour ofStatisticAtlas.values(),StatisticAtlas.maskValues(), andStatisticAtlas.labelValues()
2.5.0 (Tuesday 6th August 2019)
Added
New
Image.getAffine()method, for retrieving an affine between any of the voxel, FSL, or world coordinate systems.New
fsl.transformspackage, which contains classes and functions for working with linear and non-linear FLIRT and FNIRT transformations.New static methods
Nifti.determineShape(),Nifti.determineAffine(),Nifti.generateAffines(), andNifti.identifyAffine().New prototype
fsl.transforms.x5module, for reading/writing linear and non-linear X5 files (preliminary release, subject to change).New prototype
fsl_convert_x5fsl_apply_x5programs, for working with X5 transformations (preliminary release, subject to change).
Changed
The
vest.looksLikeVestLutFilefunction has been made slightly more lenient.h5py has been added to the
fslpydependencies.
Deprecated
The
fsl.utils.transformmodule has been deprecated; its functions can now be found in thefsl.transforms.affineandfsl.transform.flirtmodules.
2.4.0 (Wednesday July 24th 2019)
Added
New
image.roimodule, for extracting an ROI of an image, or expanding its field-of-view.
Changed
The
resample_imagescript has been updated to support resampling of images with more than 3 dimensions.
2.3.1 (Friday July 5th 2019)
Fixed
The
Bitmapclass now supports greyscale images and palette images.
2.3.0 (Tuesday June 25th 2019)
Added
New
Bitmapclass, for loading bitmap images. TheBitmap.asImage()method can be used to convert aBitmapinto anImage.The
Imageclass now has support for theRGB24andRGBA32NIfTI data types.New
Image.nvalsproperty, for use withRGB24/RGBA32images.New
LabelAtlas.get()andProbabilisticAtlas.get()methods, which return anImagefor a specific region.The
AtlasDescription.find()method also now anameparameter, allowing labels to be looked up by name.New
FileTree.defines()andFileTree.on_disk()methods, to replace theFileTree.exists()method.
Fixed
The
makeWriteable()function will always create a copy of anarrayif its base is abytesobject.Fixed a bug in the
GitfitMesh.loadVertices()method.Fixed a bug in the
Mesh.addVertices()method where the wrong face normals could be used for newly added vertex sets.
2.2.0 (Wednesday May 8th 2019)
Added
New
resample_imagescript.New
resamplemodule (replacing theImage.resample()method), containing functions to resample anImage.New
resample.resampleToPixdim()andresample.resampleToReference()functions, convenience wrappers aroundresample.resample().New
idle.block()function.
Changed
The
resample()function (formerlyImage.resample()) now acceptsoriginandmatrixparameters, which can be used to adjust the alignment of the voxel grids of the input and output images.The
transform.decompose()function now accepts both(3, 3)and(4, 4)matrices.
Fixed
Minor fixes to some
filetree.filetreetree definitions.
Deprecated
The
Image.resample()method has been deprecated in favour of theresample.resample()function.
2.1.0 (Saturday April 13th 2019)
Added
New tensor conversion routines in the
dtifitmodule (Michiel Cottaar).New
makeWriteable()function which ensures that anumpy.arrayis writeable, and creates a copy if necessary
Changed
Fixed
The
FeatDesignclass now handles “compressed” voxelwise EV files, such as those generated by PNM.
2.0.1 (Monday April 1st 2019)
Fixed
Fixed a bug with the
gifti.relatedFiles()function returning duplicate files.
2.0.0 (Friday March 20th 2019)
Added
New
fsl.utils.filetreepackage for defining and working with file/directory templates (Michiel Cottaar).Simple built-in
deprecateddecorator.New
fsl.data.utilsmodule, which currently contains one functionguessType(), which guesses the data type of a file/directory path.New
commonBase()function for finding the common prefix of a set of file/directory paths.
Changed
Removed support for Python 2.7 and 3.4.
Minimum required version of
nibabelis now 2.3.The
Imageclass now fully delegates tonibabelfor managing file handles.The
GiftiMeshclass 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
nameproperty ofMeshinstances can now be updated.
Removed
Many deprecated items removed.
Deprecated
Deprecated the
loadIndexedImageFile()function, and theindexedflag to theImageconstructor.
1.13.3 (Friday February 8th 2019)
Fixed
Fixed an issue with the
dicom.loadSeries()using memory-mapping for image files that would subsequently be deleted.Fixed an issue in the
GiftiMeshclass, wherenumpy/nibabelwas returning read-only index arrays.
1.13.2 (Friday November 30th 2018)
Changed
The
Image.resample()method now supports images with more than three dimensions.The
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 infsl.wrappersif submitted.
Fixed
Fix to the
ImageWrapperregarding complex data types.
1.13.1 (Friday November 23rd 2018)
Fixed
Added a missing
imageattribute in theVoxelwiseConfoundEVclass.Make sure that FEAT
Clusterobjects (created by theloadClusterResults()function) containpandlogpattributes, even when cluster thresholding was not used.
1.13.0 (Thursday 22nd November 2018)
Added
New wrapper functions for
fsl_anat(),applytopup()(Martin Craig).New
fileOrText()decorator for use in wrapper functions (Martin Craig).
Changed
Various minor changes and enhancements to the FSL function
wrappersinterfaces (Martin Craig).
Fixed
The
immvandimcpscripts now accept incorrect file extensions on input arguments.
1.12.0 (Sunday October 21st 2018)
Changed
The
extract_noisescript has been renamed tofsl_ents.Increased the minimum required version of
dcm2niixin thefsl.data.dicommodule.
Deprecated
The
extract_noisescript.
1.11.1 (Friday September 14th 2018
Fixed
Fixed a Python 2 incompatibility in the
settingsmodule.
1.11.0 (Thursday September 13th 2018)
Added
A couple of new convenience functions to the
settingsmodule.
Changed
Development (test and documentation dependencies) are no longer listed in
setup.py- they now need to be installed manually.Removed conda build infrastructure.
1.10.3 (Sunday September 9th 2018)
Added
The
parseVersionString()function accepts (and ignores) local version identifer strings.
1.10.2 (Friday September 7th 2018)
Fixed
The
Image.save()method was not handling memory-mapped images correctly.
1.10.1 (Friday August 3rd 2018)
Changed
Minor adjustmenets to improve Windows compatibility.
Fixed
The
FEATImage.getCOPEmethod was returning PE images.
1.10.0 (Wednesday July 18th 2018)
Added
A new script,
extract_noise, which can be used to extract ICA component time courses from a MELODIC ICA analysis.New
path.allFiles()function which returns all files underneath a directory.The
fileOrImage()andfileOrArray()decorators now support loading of files which are specified with an output basename.New
fastwrapper function for the FSL FAST tool.
Changed
When using the
run.run()function, the command output/error streams are now forwarded immediately.Removed dependency on
pytest-runner.
1.9.0 (Monday June 4th 2018)
Added
New
Image.data()property method, for easy access to image data as anumpyarray.New
logoption to therun.run()function, allowing more fine-grained control over sub-process output streams.New
Platform.fsldevdir()property, allowing the$FSLDEVDIRenvironment variable to be queried/changed.
Changed
Image.ndims()has been renamed toImage.ndim(), to align more closely withnumpynaming conventions.The
errandretparameters to therun.run()function have been renamed tostderrandexitcoderespectively.The
runfsl()function will give priority to the$FSLDEVDIRenvironment variable if it is set.
Deprecated
Image.ndims().The
errandretparameters torun.run().
1.8.1 (Friday May 11th 2018)
Changed
The
fileOrImage()decorator function now acceptsImageobjects as well asnibabelimage objects.
1.8.0 (Thursday May 3rd 2018)
Added
New
wrapperspackage, containing wrapper functions for a range of FSL tools.New
fsl.utils.runmodule, to replace thefsl.utils.callfslmodule.New
fsl.utils.fslsubmodule, containing afslsub.submit()function which submits a cluster job viafsl_sub.Assertions (in the
assertionsmodule) can be disabled with the newassertions.disabled()context manager.New
fsl.utils.parse_datamodule containing various neuroimaging data constructors for use withargparse.The
memoize.skipUnchanged()decorator has aninvalidatefunction which allows its cache to be cleared.
Changed
The
tempdir()function has an option to not change to the newly created directory.
Deprecated
The
fsl.utils.callfslmodule (replaced withfsl.utils.run).
1.7.2 (Monday March 19th 2018)
Added
Added the
MGHImage.voxToSurfMat()and related properties, giving access to the voxel-to-surface affine for an MGH image.
1.7.1 (Monday March 12th 2018)
Changed
Adjusted
parseVersionString()so it accepts.dev*suffixes.
Fixed
Removed deprecated use of
imagewrapper.canonicalShape().
1.7.0 (Tuesday March 6th 2018)
Added
The
fsl.utils.assertionsmodule contains a range of functions which can be used to assert that some condition is met.The
fsl.utils.ensuremodule contains a range of functions (currently just one) which can be used to ensure that some condiution is met.
Changed
The
settingsmodule now saves its files in a format that is compatible with Python 2 and 3.The
tempdir()function now accepts arootargument, which specifies the location in which the temporary directory should be created.An image’s data source can now be set via
Image.__init__().MGHImage()objects now have aMGHImage.save()method.Adjustments to the
condapackage build and deployment process.The
ImageWrapper.canonicalShape()function has been moved to thedata.imageclass.The
ImageWrapper.naninfrange()function has been moved into its ownnaninfrangemodule.
Fixed
Fixed a bug in the
MutexFactoryclass.
Deprecated
ImageWrapper.canonicalShape()(moved to thedata.imagemodule)ImageWrapper.naninfrange()function (moved to thenaninfrangemodule)
1.6.8 (Monday February 12th 2018)
The atlasq, immv, imcp and imglob scripts suppress some warnings.
1.6.7 (Friday February 9th 2018)
More further adjustments to the
condapackage build.Adjustments to pypi source distribution - the
requirements-extra.txtfile was not being included.
1.6.6 (Thursday February 8th 2018)
Further adjustments to the
condapackage build.
1.6.5 (Tuesday February 6th 2018)
Adjustments to the
condapackage build.
1.6.4 (Monday February 5th 2018)
The
platformmodule emits a warning if it cannot importwx.
1.6.3 (Friday February 2nd 2018)
Minor enhancements to the
WeakFunctionRefclass.Some bugfixes to the
fsl.utils.imcpmodule, with respect to handling relative path names, moving file groups (e.g. .img/.hdr pairs), and non-existent directories.
1.6.2 (Tuesday January 30th 2018)
Updates to the
condainstallation process.A new script is installed when
fslpyis installed viapiporconda-atlasquery, which emulates the FSLatlasquerytool.
1.6.1 (Monday January 29th 2018)
Removed
lxmlas a dependency - this was necessary in older versions oftrimesh.
1.6.0 (Friday January 26th 2018)
The new
Meshclass 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
VTKMeshclass must now be used for loading VTK model files, instead of the oldTriangleMeshclass.The new
Meshclass uses thetrimeshlibrary (https://github.com/mikedh/trimesh) to perform various geometrical operations, accessible via newMesh.rayIntersection(),Mesh.planeIntersection(),Mesh.nearestVertex()methods.The
NiftiandMeshclasses have new methods allowing arbitrary metadata to be stored with the image, as key-value pairs. These are provided by a new mixin class,Meta.Freesurer surface files and vertex data can now be loaded via the
FreesurferMeshclass, in the newfreesurfermodule.Freesurfer
mgz/mghimage files can now be loaded via the newmghimagemodule. Internally, these image files are converted to NIFTI - theMGHImageclass derives from theImageclass.Meta-data access methods on the
DicomImageclass have been deprecated, as their functionality is provided by the newMetamixin.The
TriangleMeshclass has been deprecated in favour of the newMeshclass.Optional dependencies
wxpython,indexed_gzip,trimesh, andrtreeare now listed separately, sofslpycan be used without them (although relevant functionality will be disabled if they are not present).
1.5.4 (Wednesday January 10th 2018)
Actually included the fix that was supposed to be in version 1.5.3.
1.5.3 (Tuesday January 9th 2018)
Bug fix to
ImageWrapper.__expandCoverage()- was not correctly handling large images with lots ofnanvalues.
1.5.2 (Tuesday January 2nd 2018)
Fixed issue with
MANIFEST.infile.
1.5.1 (Thursday December 14th 2017)
Fixed bug in
dicom.scanDir()function related to data series ordering.
1.5.0 (Wednesday December 13th 2017)
New module
dicom, which provides a thin wrapper on top of Chris Rorden’s dcm2niix.New module
tempdir, which has a convenience function for creating temporary directories.Fixed small issue in
Image.dtype()- making sure that it access image data via theImageWrapper, rather than via the Nifti1Image object.
1.4.2 (Tuesday December 5th 2017)
New function
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/).
1.4.1 (Thursday November 9th 2017)
Fixed bug in
setup.py.
1.4.0 (Thursday November 9th 2017)
The
uniquePrefix()function now raises aPathErrorinstead of aValueError, when an invalid path is provided.The
fsl.utils.asyncmodule is now deprecated, asasyncwill 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
hdrextension now takes precedence over theimgextension, when using thefsl.data.image.addExt()(and related) functions.The
fsl.utils.path.addExt()function accepts a new parameter,unambiguouswhich causes it to allow an ambiguous prefix, and return all matching paths.New
atlasqapplication, intended to replace the FSLatlasquerytool.New
imglobapplication, intended to replace the FSLimglobtool.The
Image.resample()method explicitly raises aValueErrorif incompatible shapes are provided.
1.3.1 (Wednesday October 25th 2017)
Fixed bug in
Platform.wxPlatform()causing it to always returnWX_UNKNOWN.
1.3.0 (Wednesday October 25th 2017)
Atlasclasses can now passkwargsthrough to theImageconstructor.LabelAtlasimage values no longer need to match the index of the label into theAtlasDescriptionlabelslist. This means that label atlas XML files may contain non-sequential label values.Cachenow implements__getitem__and__setitem__The
image.read_segments()function (monkey-patched intonibabel) is deprecated, as it is no longer necessary as ofnibabel2.2.0.platform.isWidgetAlive()is deprecated in favour of an equivalent function in thefsleyes-widgetslibrary.scipyis now explicitly listed as a requirement (this should have been done in 1.2.1).
1.2.2 (Saturday October 21st 2017)
The
image.read_segments()function is only monkey-patched intonibabel2.1.0, as it breaks when used with 2.2.0.
1.2.1 (Saturday October 7th 2017)
If an
Imageis passed an existingnibabelheader object, it creates a copy, rather than using the original.New
Image.resample()method, which resamples the image data to a different resolution.New
LabelAtlas.coordLabel(),LabelAtlas.maskLabel(),ProbabilisticAtlas.coordProportions()andProbabilisticAtlas.maskProportions()methods. Thecoordmethods perform coordinate queries in voxel or world coordinates, and themaskmethods perform mask-based queries.
1.2.0 (Thursday September 21st 2017)
fsl.data.image.Nifti.voxelsToScaledVoxels()method deprecated in favour of newNifti.voxToScaledVoxMat()andNifti.scaledVoxToVoxMat()properties.
1.1.0 (Monday September 11th 2017)
The
fslpackage is now apkgutil-style namespace package, so it can be used for different projects.Updates to
fsl.data.image.Niftiandfsl.data.image.Imageto add support for images with more than 4 dimensions: - Newndimsproperty -is4DImagemethod deprecated
1.0.5 (Thursday August 10th 2017)
New functions and further adjustments in
fsl.utils.transformmodule:
transform.rotMatToAffine()converts a(3, 3)rotation matrix into a(4, 4)affine.
transform.transformNormal()applies an affine transform to one or more vectors.
transform.veclength()calculates the length of a vector
transform.normalise()normalises a vector
transform.scaleOffsetXform()adjusted to have more flexibility with respect to inputs.
transform.decompose()can return rotations either as three axis-angles, or as a rotation matrix
Updates to
fsl.data.mesh.TriangleMesh-verticesandindicesare nowpropertyattributes. New lazily generatednormalsandvnormalsproperties (face and vertex normals respectively). Option to__init__to fix the face winding order of a mesh.fsl.utils.memoize.memoize()decorator made into a class rather than a function. The newMemoizeclass has aninvalidatemethod, which clears the cache.
1.0.4 (Friday July 14th 2017)
Python 2/3 compatibility fix to
fsl.utils.callfsl.Fix to
fsl.utils.transform.scaleOffsetXform()- accepts inputs that are not lists.fsl.utils.transform.compose()accepts either a sequence of three axis angles, or a(3, 3)rotation matrix.
1.0.3 (Sunday June 11th 2017)
Fix to
fsl.utils.asyncwhich was breaking environments where multiplewx.Appinstances were being created.
1.0.2 (Thursday June 8th 2017)
Python 2/3 compatibility fixes
New
fsl.version.patchVersion()function.
1.0.1 (Sunday 4th June 2017)
New version number parsing functions in
fsl.version.
1.0.0 (Saturday May 27th 2017)
Removed many GUI-related modules - they have been moved to the
fsleyes-widgetsproject. The following modules have been removed: -fsl.utils.colourbarbitmap-fsl.utils.dialog-fsl.utils.imagepanel-fsl.utils.layout-fsl.utils.platform-fsl.utils.runwindow-fsl.utils.status-fsl.utils.textbitmap-fsl.utils.typedict-fsl.utils.webpagefsl.utils.settingsmodule rewritten. It no longer useswx, but instead stores plain-text andpicklefiles in the user’s home directory.Software GL renderer test in
fsl.utils.platformis more lenientNew
AtlasLabelclassImage.__init__()allows arguments to be passed through tonibabel.load.New
Nifti.strval()method to handle escaped strings in NIFTI headers.Python 2/3 compatibility fixes
0.11.0 (Thursday April 20th 2017)
First public release as part of FSL 5.0.10