fslpy
release history
This document contains the fslpy
release history in reverse chronological
order.
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
/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).
3.20.0 (Wednesday 10th July 2024)
Added
New functions/methods in the
featanalysis
module andFEATImage
class for accessing F-test results (!460).
3.19.1 (Wednesday 26th June 2024)
Fixed
Minor Updates for compatibility with
numpy
2.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.sh
andbedpostx_postproc.sh
scripts are not intended to be called directly (!455).
3.18.3 (Saturday 4th May 2024)
Fixed
Fixed an issue with :mod:
fsl.wrappers
functions not finding output files when$FSLOUTPUTTYPE
is set to something other thanNIFTI_GZ
(!452).
3.18.2 (Wednesday 3rd April 2024)
Fixed
Made some changes to the
fsl.utils.run
module 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.wrappers
functions 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
Image
class now accepts aversion
parameter, 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
fslmaths
wrapper (!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-cluster
command (!417).
Changed
3.14.1 (Thursday 31st August 2023)
Fixed
Fixed a bug in
Image.__setitem__()
- change listeners were being passed an un-normalisedslice
object (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
/qform
fields of aDeformationField
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).
Fixed
Updated the
`immv
/imcp
scripts to honour the$FSLOUTPUTTYPE
environment 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
Notifier
instances no longer need to accept three arguments (!400).
3.13.2 (Monday 3rd July 2023)
Added
New
scaleAtOrigin
option 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 theCache
class (!391).
Changed
The
run.func_to_cmd()
,run.hold()
, andrun.job_output()
functions have been moved fromfsl.utils.fslsub
to thefsl.utils.run
module (!390).
Deprecated
The
fsl.utils.fslsub
module has been deprecated, and scheduled for removal infslpy 4.0.0
(!390).
3.12.1 (Tuesday 23rd May 2023)
Fixed
The
fsl.scripts.Text2Vest
now handles column vector inputs correctly (!387, !388).The
tempdir()
function was not changing back to the original working directory when theoverride
argument was used (!388).
3.12.0 (Friday 19th May 2023)
Added
New
randomise()
wrapper function.
Changed
The
fslmaths()
wrapper function now allows the-dt
and-odt
options to be set (!381).Assertions (from the
assertions
module) called within wrapper functions are now disabled if the command is to be submitted viafsl_sub
(!382).The
Image
class will now resolve symlinks when loading images from file (!383).
Fixed
The
fslstats()
wrapper no longer overwrites thelog
option 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
imrm
andimglob
scripts 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
fslstats
wrapper to handle index masks (the-K
option) 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.first
wrapper functions (!355).New
fsl.wrappers.bianca
andfsl.wrappers.avwutils
wrapper functions (!358).New
fsl.wrappers.bedpostx
anddtifit
wrapper 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.wrappers
functions to thefsl.utils.run.run()
function to be changed (!352, !356).New
affine.mergeBounds()
function (!360).
Changed
The
fsl.wrappers.fslmaths.fslmaths
andfsl.wrappers.fslstats.fslstats
wrapper functions have been updated to accept arguments destined forfsl.utils.run.run()
(!352).Mesh
objects can now be created without indices/triangles - they can be assigned after creation (!360).The
dicom
module will now preferentially call$FSLDIR/bin/dcm2niix
, instead of calling the firstdcm2niix
on the$PATH
(!365).The
applyArgStyle()
argmap
argument can now be a callable which defines a rule which will be applied to all argument names (!366).The
applyArgStyle()
valmap
argument now accepts a newEXPAND_LIST
option, which allows sequences to be expanded as separate command-line options (!366).Image
objects can now be created without passing anibabel.Nifti1Image
(or similar) object, as long as anibabel.Nifti1Header
and aDataManager
are 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 theeddy
function (!348).
3.9.6 (Wednesday 15th June 2022)
Added
The .fslmaths wrapper now supports the
-roi
option, via thefslmaths.roi()
method (!346).
3.9.5 (Thursday 2nd June 2022)
Changed
Updated the
ensureIsImage()
function to supportpathlib.Path
objects (!343).
Fixed
Some fixes in the
wrappers
module (specifically in theFileOrThing
class) to better supportpathlib.Path
objects (!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_OTHER
identifier, 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
Image
class no longer uses anImageWrapper
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 theImage.data()
property, or by modifying the data throughImage.__setitem__()
(!327).The
func_to_cmd()
function now uses dill instead ofpickle
for serialisation (!328).
Fixed
Fixes to the
melodic
andeddy()
wrapper functions.
Deprecated
The
imagewrapper
module (and theImageWrapper
class) is being migrated to FSLeyes (!327).The
loadData
,calcRange
, andthreaded
arguments to theImage
class 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--imain
argument (!324).
3.8.1 (Tuesday 28th December 2021)
Fixed
The
melodic()
wrapper function no longer requires itsinput
argument to be a NIFTI image or file (!321).
3.8.0 (Thursday 23rd December 2021)
Added
New
fslorient()
wrapper function (!315).The
Bitmap
class 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
.json
sidecar files with control characters are now accepted (!312).
Fixed
Fixed an issue with temporary input files created by
fsl.wrappers
functions not being deleted (!313).
3.7.0 (Friday 20th August 2021)
Added
New
fsl.wrappers.fsl_sub
wrapper function for thefsl_sub
command (!309).
Changed
Performance of the
imglob
,imln
,imtest
,imrm
andremove_ext
scripts 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.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 fromrun
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
fsl.utils.run.run()
andfsl.utils.run.runfsl()
functions (and hence allfsl.wrappers
functions) have been modified to usefsl.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).
Deprecated
fsl.utils.fslsub.SubmitParams
andfsl.utils.fslsub.submit()
have been deprecated in favour of using thefsl.wrappers.fsl_sub
wrapper function (!309).The
fsl.utils.fslsub.info()
function has been deprecated in favour of using thefsl_sub.report
function, 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 thefslmaths
wrapper (!304).
3.6.3 (Wednesday 28th July 2021)
Changed
When creating an
Image
object withloadData=False
, thecalcRange
argument is ignored, as it would otherwise cause the data to be loaded (!301).
3.6.2 (Wednesday 23rd June 2021)
Changed
The
fsl.wrappers.fast
wrapper passes-v
tofast
ifv=True
orverbose=True
is specified.
3.6.1 (Thursday 27th May 2021)
Changed
Removed the
dataclasses
backport from requirements (!297).
3.6.0 (Monday 19th April 2021)
Changed
The
fslpy
API ocumentation is now hosted at https://open.win.ox.ac.uk/pages/fsl/fslpy (!290).The
fsl
andfsl.scripts
packages have been changed from being pkgutil-style namespace packages to now being native namespace packages (!290).The
TaskThread
now allows an error handler function to be specified, which is run on theidle
loop (!283).The
bids.loadMetadata()
function no long resolves sym-links when determining whether a file is contained within a BIDS data set (!287).The
Image
class can now be created from apathlib.Path
object (!292).Some functions in the
path
module can now be used withpathlib.Path
objects (!293).
Deprecated
Deprecated a number of GUI-specific properties in the
fsl.utils.platform
module, includingfrozen
,haveGui
,canHaveGui
,inSSHSession
,inVNCSession
,wxPlatform
,wxFlavour
,glVersion
,glRenderer
, andglIsSoftwareRenderer
. Equivalent functions are being added to thefsleyes-widgets
library (!285).The
fsl.utils.filetree
package 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
gifti
module, 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 forSeriesDescription
if it is not present in thedcm2niix
json
output (!279).Fixed some issues with API documentation generation (!279).
3.5.1 (Thursday 21st January 2021)
Added
New
featanalysis.loadFsf()
function, for loading arbitrary.fsf
files (!276).
Fixed
Adjustments to
dicom
tests to work with different versions ofdcm2niix
(!277).
3.5.0 (Wednesday 20th January 2021)
Added
New
fsl_anat.tree
, for use with thefiletree
package (!264).New
fsl_prepare_fieldmap()
wrapper function (!265).The
fslmaths
wrapper now supports thefslmaths -s
option 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
assertions
module 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=True
is 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 calledcmdonly
which, 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 FSLgps
command.New
vest.loadVestFile()
andvest.generateVest()
functions.
Changed
Updates to the BIDS filetree specification.
Fixed
The
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).
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 thewait
function.
Removed
The
fslsub.wait()
(andrun.wait()
) function has been removed, as repeated calls toqstat
can adversely affect the cluster job submission system.
3.1.0 (Thursday 21st May 2020)
Added
New
cifti
module, 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
FileTree
class has been updated to allow creation of deep copies via the newFileTree.copy()
method.
Changed
Image()
objects created fromnumpy
arrays will be NIFTI1 or NIFTI2, depending on the value of the$FSLOUTPUTTYPE
environment 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
dataclasses
backport, sofslpy
is 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
firstDot
option to thepath.getExt()
,path.removeExt()
, andpath.splitExt()
, functions, offering rudimentary support for double-barrelled filenames.The
nonlinear.applyDeformation()
function now accepts apremat
affine, which is applied to the input image before the deformation field.New
SubmitParams
class, providing a higer level interface for cluster submission.New
FileTree.load_json()
andFileTree.save_json()
methods.
Changed
fslpy
now requires a minimum Python version of 3.7.The default value for the
partial_fill
option toFileTree.read()
has been changed toFalse
. Accordingly, theFileTreeQuery
calls theFileTree.partial_fill()
method on theFileTree
it 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.Popen
or, ifsubmit=True
, tofslsub.submit()
.The
fslsub.submit()
function now accepts anenv
option, 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
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
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 theLOAD
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
fileOrImage()
,fileOrArray()
, orfileOrText()
decorators will now pass all arguments and return values through unchanged if an argument calledsubmit
is passed in, and is set toTrue
(or any non-False
value). Furthermore, in such a scenario aValueError
will be raised if any in-memory objects orLOAD
symbols are passed.The
fileOrText()
decorator has been updated to work with input values - file paths must be passed in aspathlib.Path
objects, so they can be differentiated from input values.Loaded
Image
objects returned byfsl.wrappers
functions are now named according to the wrapper function argument name.
Fixed
Updated the
prepareArgs()
function to useshlex.split
when 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.Image
creation does not fail ifloadMeta
is set, and a sidecar file containing invalid JSON is present.
Removed
Removed the deprecated
.StatisticAtlas.proportions
,.StatisticAtlas.coordProportions
, and.StatisticAtlas.maskProportions
methods.Removed the deprecated
indexed
option toImage.__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.
2.8.4 (Monday 2nd March 2020)
Added
Added a new
partial_fill
option 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 aNifti
header 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
ImageWrapper
now maintains its own image data cache, rather than depending onnibabel
.Internal changes to avoid using the deprecated
nibabel.dataobj_images.DataobjImage.get_data
method.
Fixed
Improved the algorithm used by the
mesh.needsFixing()
function.The
fslmaths.run()
method now acceptswrappers.LOAD
as an output specification.Fixed a bug in the
Mesh
class to prevent indices from being loaded as floating point type.Fixed a bug in the
resample()
function.Fixed a bug in the
MGHImage
class, 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
until
option 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
bids
module, containing a few simple functions for working with BIDS datasets.New
image.loadMetadata()
function, andloadMeta
option to theImage
class, to automatically find and load any sidecar JSON files associated with an image file.
Changed
Internal reorganisation in the
idle
module.
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
idle
module.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
fslpy
is 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
Statistic
atlas type.
Changed
The
Cache
class has a newlru
option, allowing it to be used as a least-recently-used cache.The
fsl.utils.filetree
module has been refactored to make it easier for thequery
module to work with file tree hierarchies.The
LabelAtlas.get()
method has a newbinary
flag, allowing either a binary mask, or a mask with the original label value, to be returned.The
dicom
module 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.transforms
package, 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.x5
module, for reading/writing linear and non-linear X5 files (preliminary release, subject to change).New prototype
fsl_convert_x5
fsl_apply_x5
programs, for working with X5 transformations (preliminary release, subject to change).
Changed
The
vest.looksLikeVestLutFile
function has been made slightly more lenient.h5py has been added to the
fslpy
dependencies.
Deprecated
The
fsl.utils.transform
module has been deprecated; its functions can now be found in thefsl.transforms.affine
andfsl.transform.flirt
modules.
2.4.0 (Wednesday July 24th 2019)
Added
New
image.roi
module, for extracting an ROI of an image, or expanding its field-of-view.
Changed
The
resample_image
script has been updated to support resampling of images with more than 3 dimensions.
2.3.1 (Friday July 5th 2019)
Fixed
The
Bitmap
class now supports greyscale images and palette images.
2.3.0 (Tuesday June 25th 2019)
Added
New
Bitmap
class, for loading bitmap images. TheBitmap.asImage()
method can be used to convert aBitmap
into anImage
.The
Image
class now has support for theRGB24
andRGBA32
NIfTI data types.New
Image.nvals
property, for use withRGB24
/RGBA32
images.New
LabelAtlas.get()
andProbabilisticAtlas.get()
methods, which return anImage
for a specific region.The
AtlasDescription.find()
method also now aname
parameter, 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 anarray
if its base is abytes
object.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_image
script.New
resample
module (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 acceptsorigin
andmatrix
parameters, 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.filetree
tree 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
dtifit
module (Michiel Cottaar).New
makeWriteable()
function which ensures that anumpy.array
is writeable, and creates a copy if necessary
Changed
Fixed
The
FeatDesign
class 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.filetree
package for defining and working with file/directory templates (Michiel Cottaar).Simple built-in
deprecated
decorator.New
fsl.data.utils
module, 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
nibabel
is now 2.3.The
Image
class now fully delegates tonibabel
for managing file handles.The
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 ofMesh
instances can now be updated.
Removed
Many deprecated items removed.
Deprecated
Deprecated the
loadIndexedImageFile()
function, and theindexed
flag to theImage
constructor.
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
GiftiMesh
class, wherenumpy
/nibabel
was 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.wrappers
if submitted.
Fixed
Fix to the
ImageWrapper
regarding complex data types.
1.13.1 (Friday November 23rd 2018)
Fixed
Added a missing
image
attribute in theVoxelwiseConfoundEV
class.Make sure that FEAT
Cluster
objects (created by theloadClusterResults()
function) containp
andlogp
attributes, 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
wrappers
interfaces (Martin Craig).
Fixed
The
immv
andimcp
scripts now accept incorrect file extensions on input arguments.
1.12.0 (Sunday October 21st 2018)
Changed
The
extract_noise
script has been renamed tofsl_ents
.Increased the minimum required version of
dcm2niix
in thefsl.data.dicom
module.
Deprecated
The
extract_noise
script.
1.11.1 (Friday September 14th 2018
Fixed
Fixed a Python 2 incompatibility in the
settings
module.
1.11.0 (Thursday September 13th 2018)
Added
A couple of new convenience functions to the
settings
module.
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.getCOPE
method 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
fast
wrapper 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 anumpy
array.New
log
option to therun.run()
function, allowing more fine-grained control over sub-process output streams.New
Platform.fsldevdir()
property, allowing the$FSLDEVDIR
environment variable to be queried/changed.
Changed
Image.ndims()
has been renamed toImage.ndim()
, to align more closely withnumpy
naming conventions.The
err
andret
parameters to therun.run()
function have been renamed tostderr
andexitcode
respectively.The
runfsl()
function will give priority to the$FSLDEVDIR
environment variable if it is set.
Deprecated
Image.ndims()
.The
err
andret
parameters torun.run()
.
1.8.1 (Friday May 11th 2018)
Changed
The
fileOrImage()
decorator function now acceptsImage
objects as well asnibabel
image objects.
1.8.0 (Thursday May 3rd 2018)
Added
New
wrappers
package, containing wrapper functions for a range of FSL tools.New
fsl.utils.run
module, to replace thefsl.utils.callfsl
module.New
fsl.utils.fslsub
module, containing afslsub.submit()
function which submits a cluster job viafsl_sub
.Assertions (in the
assertions
module) can be disabled with the newassertions.disabled()
context manager.New
fsl.utils.parse_data
module containing various neuroimaging data constructors for use withargparse
.The
memoize.skipUnchanged()
decorator has aninvalidate
function 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.callfsl
module (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.assertions
module contains a range of functions which can be used to assert that some condition is met.The
fsl.utils.ensure
module contains a range of functions (currently just one) which can be used to ensure that some condiution is met.
Changed
The
settings
module now saves its files in a format that is compatible with Python 2 and 3.The
tempdir()
function now accepts aroot
argument, 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
conda
package build and deployment process.The
ImageWrapper.canonicalShape()
function has been moved to thedata.image
class.The
ImageWrapper.naninfrange()
function has been moved into its ownnaninfrange
module.
Fixed
Fixed a bug in the
MutexFactory
class.
Deprecated
ImageWrapper.canonicalShape()
(moved to thedata.image
module)ImageWrapper.naninfrange()
function (moved to thenaninfrange
module)
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
conda
package build.Adjustments to pypi source distribution - the
requirements-extra.txt
file was not being included.
1.6.6 (Thursday February 8th 2018)
Further adjustments to the
conda
package build.
1.6.5 (Tuesday February 6th 2018)
Adjustments to the
conda
package build.
1.6.4 (Monday February 5th 2018)
The
platform
module emits a warning if it cannot importwx
.
1.6.3 (Friday February 2nd 2018)
Minor enhancements to the
WeakFunctionRef
class.Some bugfixes to the
fsl.utils.imcp
module, 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
conda
installation process.A new script is installed when
fslpy
is installed viapip
orconda
-atlasquery
, which emulates the FSLatlasquery
tool.
1.6.1 (Monday January 29th 2018)
Removed
lxml
as a dependency - this was necessary in older versions oftrimesh
.
1.6.0 (Friday January 26th 2018)
The new
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
VTKMesh
class must now be used for loading VTK model files, instead of the oldTriangleMesh
class.The new
Mesh
class uses thetrimesh
library (https://github.com/mikedh/trimesh) to perform various geometrical operations, accessible via newMesh.rayIntersection()
,Mesh.planeIntersection()
,Mesh.nearestVertex()
methods.The
Nifti
andMesh
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,Meta
.Freesurer surface files and vertex data can now be loaded via the
FreesurferMesh
class, in the newfreesurfer
module.Freesurfer
mgz
/mgh
image files can now be loaded via the newmghimage
module. Internally, these image files are converted to NIFTI - theMGHImage
class derives from theImage
class.Meta-data access methods on the
DicomImage
class have been deprecated, as their functionality is provided by the newMeta
mixin.The
TriangleMesh
class has been deprecated in favour of the newMesh
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).
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 ofnan
values.
1.5.2 (Tuesday January 2nd 2018)
Fixed issue with
MANIFEST.in
file.
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 aPathError
instead of aValueError
, when an invalid path is provided.The
fsl.utils.async
module is now deprecated, asasync
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 thefsl.data.image.addExt()
(and related) functions.The
fsl.utils.path.addExt()
function accepts a new parameter,unambiguous
which causes it to allow an ambiguous prefix, and return all matching paths.New
atlasq
application, intended to replace the FSLatlasquery
tool.New
imglob
application, intended to replace the FSLimglob
tool.The
Image.resample()
method explicitly raises aValueError
if 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)
Atlas
classes can now passkwargs
through to theImage
constructor.LabelAtlas
image values no longer need to match the index of the label into theAtlasDescription
labels
list. This means that label atlas XML files may contain non-sequential label values.Cache
now implements__getitem__
and__setitem__
The
image.read_segments()
function (monkey-patched intonibabel
) is deprecated, as it is no longer necessary as ofnibabel
2.2.0.platform.isWidgetAlive()
is deprecated in favour of an equivalent function in thefsleyes-widgets
library.scipy
is 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 intonibabel
2.1.0, as it breaks when used with 2.2.0.
1.2.1 (Saturday October 7th 2017)
If an
Image
is passed an existingnibabel
header 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. Thecoord
methods perform coordinate queries in voxel or world coordinates, and themask
methods 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
fsl
package is now apkgutil
-style namespace package, so it can be used for different projects.Updates to
fsl.data.image.Nifti
andfsl.data.image.Image
to add support for images with more than 4 dimensions: - Newndims
property -is4DImage
method deprecated
1.0.5 (Thursday August 10th 2017)
New functions and further adjustments in
fsl.utils.transform
module:
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
-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.fsl.utils.memoize.memoize()
decorator made into a class rather than a function. The newMemoize
class has aninvalidate
method, 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.async
which was breaking environments where multiplewx.App
instances 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-widgets
project. 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.webpage
fsl.utils.settings
module rewritten. It no longer useswx
, but instead stores plain-text andpickle
files in the user’s home directory.Software GL renderer test in
fsl.utils.platform
is more lenientNew
AtlasLabel
classImage.__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