fslpy
release history¶
This document contains the fslpy
release history in reverse chronological
order.
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.
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
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)¶
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)¶
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¶
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.0 (Thursday September 13th 2018)¶
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.
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.
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.
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.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