This document contains the fslpy
release history in reverse chronological order.
- The
sform
/qform
fields of a.DeformationField
instance are automatically set from the reference image if they are not already set (!402). - Replaced
setup.py
-based build system withpyproject.toml
(!402). - Tests have been moved into the
fsl/tests/
package (!402).
- Callback functions registered with
.Notifier
instances no longer need to accept three arguments (!400).
- New
scaleAtOrigin
option to the.affine.compose
function, which allows the origin to be preserved by scaling parameters (!398).
- Fixed some minor issues with API documentation (!396).
- New
.runfunc
function which can be used to execute a Python function in a separate process (or as a submitted cluster job), via the~fsl.utils.run.func_to_cmd
function (!390). - New
keys()
,values()
, anditems()
methods on the.Cache
class (!391).
- The
.run.func_to_cmd
,.run.hold
, and.run.job_output
functions have been moved fromfsl.utils.fslsub
to thefsl.utils.run
module (!390).
- The
fsl.utils.fslsub
module has been deprecated, and scheduled for removal infslpy 4.0.0
(!390).
- 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).
- New
.randomise
wrapper function.
- 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).
- The
.fslstats
wrapper no longer overwrites thelog
option that is passed to~.run.run
, if a.wrapperconfig
context is active (!381).
- Fixed another bug in the
.dcm2niix
function (!379).
- Fixed a bug in the
.dcm2niix
function (!376). - Adjusted the
.imrm
and.imglob
scripts to support incomplete wildcard patterns (e.g.img_??
matchingimg_01.nii.gz
) (!377).
- New
.featquery
wrapper function (!374).
- fixed the
.fslstats
wrapper to handle index masks (the-K
option) with missing label values (!374).
- New
.standard_space_roi
,.fslswapdim
,.fslmerge
,.fslsplit
,fslselectvols
, and.fslcpgeom
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
and~.wrappers.dtifit
wrapper functions (!364). - New
~fsl.wrappers.feat.feat
,~.melodic.fsl_regfilt
and~.melodic.fsl_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).
- 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 a.DataManager
are provided (!362).
- Fixed a bug in the
.Image.strval
method (!353).
- New
fsl.wrappers.eddy.eddy
function, to replace.eddy_cuda
. Note that this function will not work with FSL versions 6.0.5.2 or older (!348).
- The
fsl.wrappers.eddy.eddy_cuda
function has been deprecated in favour of theeddy
function (!348).
- The .fslmaths wrapper now supports the
-roi
option, via the.fslmaths.roi
method (!346).
- Updated the
.ensureIsImage
function to supportpathlib.Path
objects (!343).
- Some fixes in the
.wrappers
module (specifically in the.FileOrThing
class) to better supportpathlib.Path
objects (!343).
- 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).
- Fixed an issue in the
~.fslsub.func_to_cmd
function (!339).
- Added the
.NIFTI_XFORM_TEMPLATE_OTHER
identifier, an extension to the NIfTI standard (!337).
- 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).
- New
.Image.niftiDataTypeSize
method, which reports the number of bits per voxel, according to the NIfTI data type (!327).
- The
.Image
class no longer uses an.ImageWrapper
to manage data access and assignment (!327). - Semantics for accessing and modifying image data have changed. By default, image data access is now delegated to the underlying
nibabel.Nifti1Image
object (and so remains on disk by default). Image data can be loaded into memory by accessing the.Image.data
property, or by modifying the data through.Image.__setitem__
(!327). - The
~.fslsub.func_to_cmd
function now uses dill instead ofpickle
for serialisation (!328).
- Fixes to the
.melodic
and.eddy
wrapper functions.
- The
.imagewrapper
module (and the.ImageWrapper
class) is being migrated to FSLeyes (!327). - The
loadData
,calcRange
, andthreaded
arguments to the.Image
class are deprecated and no longer have any effect (!327). - The
.Nifti.mapIndices
method is deprecated (!327). - The
.Image.getImageWrapper
,.Image.calcRange
and.Image.loadData
methods are deprecated and no longer have any effect (!327).
- The the
.topup
wrapper function now allows multiple file names to be passed to the--imain
argument (!324).
- The
.melodic
wrapper function no longer requires itsinput
argument to be a NIFTI image or file (!321).
- New
.fslorient
wrapper function (!315). - The
.Bitmap
class has basic support for loading JPEG2000 images (!316).
- Fixed an issue with API documentation generation (!317).
- BIDS and
dcm2niix
.json
sidecar files with control characters are now accepted (!312).
- Fixed an issue with temporary input files created by
fsl.wrappers
functions not being deleted (!313).
- New
fsl.wrappers.fsl_sub
wrapper function for thefsl_sub
command (!309).
- Performance of the
.imglob
,.imln
,imtest
,.imrm
and.remove_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).
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).
- New
.epi_reg
wrapper function (!306). - New
.fslmaths.kernel
and.fslmaths.fmeanu
options on the.fslmaths
wrapper (!304).
- When creating an
Image
object withloadData=False
, thecalcRange
argument is ignored, as it would otherwise cause the data to be loaded (!301).
- The
fsl.wrappers.fast
wrapper passes-v
tofast
ifv=True
orverbose=True
is specified.
- Removed the
dataclasses
backport from requirements (!297).
- The
fslpy
API ocumentation is now hosted at https://open.win.ox.ac.uk/pages/fsl/fslpy (!290). - The
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 the.idle
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 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 an edge-case in the
.gifti
module, where a surface with a single triangle was being loaded incorrectly (!288). - Fixed an issue in the
~.fslsub.func_to_cmd
function, where it was unintentionally leaving flie handles open (!291).
- Fixed a bug in
.featanalysis.loadClusterResults
(!281).
- 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).
- New
.featanalysis.loadFsf
function, for loading arbitrary.fsf
files (!276).
- Adjustments to
.dicom
tests to work with different versions ofdcm2niix
(!277).
- New
fsl_anat.tree
, for use with the~fsl.utils.filetree
package (!264). - New
.fsl_prepare_fieldmap
wrapper function (!265). - The
.fslmaths
wrapper now supports thefslmaths -s
option via the.fslmaths.smooth
method (!271).
- 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).
- New
.tbss
wrapper functions for TBSS commands.
- Calls to functions in the
.assertions
module are disabled when a wrapper function is called withcmdonly=True
.
- 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
.
- Most
.wrapper
functions now accept an argument calledcmdonly
which, ifTrue
, will cause the generated command-line call to be returned, instead of executed.
- The
.affine.decompose
and.affine.compose
functions now have the ability to return/accept shear components.
- Fixed a bug in the
.affine.decompose
function which was corrupting the scale estimates when given an affine containing shears.
- New ported versions of various core FSL tools, including
imrm
,imln
,imtest
,fsl_abspath
,remove_ext
,Text2Vest
, andVest2Text
. - New
.gps
function, wrapping the FSLgps
command. - New
.vest.loadVestFile
and.vest.generateVest
functions.
- Updates to the BIDS filetree specification.
- 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).
- The
.fslsub.func_to_cmd
function allows more fine-grained control over whether the script file is removed after the job has finished running.
- Minor updates to documentation.
- A new
.fslsub.hold
function to wait on previously submitted jobs, to be used in place of thewait
function.
- The
.fslsub.wait
(and.run.wait
) function has been removed, as repeated calls toqstat
can adversely affect the cluster job submission system.
- 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 new.FileTree.copy
method.
.Image
objects created fromnumpy
arrays will be NIFTI1 or NIFTI2, depending on the value of the$FSLOUTPUTTYPE
environment variable.
- Updated the
.fast
wrapper to support some single-character command-line flags.
- 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.
- New wrapper functions for the FSL
.fslstats
,.prelude
andapplyxfm4D
commands. - New
firstDot
option to the.path.getExt
,.path.removeExt
, and.path.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
and.FileTree.save_json
methods.
fslpy
now requires a minimum Python version of 3.7.- The default value for the
partial_fill
option to.FileTree.read
has been changed toFalse
. Accordingly, the.FileTreeQuery
calls the.FileTree.partial_fill
method on theFileTree
it is given. - The
.gifti.relatedFiles
function now supports files with BIDS-style naming conventions. - The
.run.run
and.run.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
, or.fileOrText
is now accessed via an attribute calledstdout
, instead ofoutput
. - Output files of functions decorated with
.fileOrImage
,.fileOrArray
, or.fileOrText
, which have been loaded via the.LOAD
symbol, can now be accessed as attributes of the returned results object, in addition to being accessed as dict items. - Wrapper functions decorated with the
.fileOrImage
,.fileOrArray
, or.fileOrText
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.
- 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
and.fslinfo.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 the deprecated
.StatisticAtlas.proportions
,.StatisticAtlas.coordProportions
, and.StatisticAtlas.maskProportions
methods. - Removed the deprecated
indexed
option to.Image.__init__
. - Removed the deprecated
.Image.resample
method. - Removed the deprecated
.image.loadIndexedImageFile
function. - Removed the deprecatd
.FileTreeQuery.short_names
and.Match.short_name
properties. - Removed the deprecated
.idle.inIdle
,.idle.cancelIdle
,.idle.idleReset
,.idle.getIdleTimeout
, and.idle.setIdleTimeout
functions. - Removed the deprecated
resample.calculateMatrix
function.
- Added a new
partial_fill
option to.FileTree.read
, which effectively eliminates any variables which only have one value. This was added to accommodate some behavioural changes that were introduced in 2.8.2.
- Fixed a bug in the
.Image.save
method.
- Fixed some subtle bugs in the
.filetree.utils.get_all
function.
- Fixed a bug where an error would be raised on attempts to load an image file without a BIDS-compatible name from a BIDS-like directory.
- New
.Nifti.adjust
method, for creating a copy of a.Nifti
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.
- 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.
- Improved the algorithm used by the
.mesh.needsFixing
function. - The
.fslmaths.run
method now accepts.wrappers.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.
.calculateMatrix
- its functionality has been moved to the.affine.rescale
function.
- New
until
option to the.idle.block
function. - New
.Idle.neverQueue
setting, which can be used to force all tasks passed to.idle.idle
to be executed synchronously. - New
.IdleLoop.synchronous
context manager, to temporarily change the value of.IdleLoop.neverQueue
. - New
.bids
module, containing a few simple functions for working with BIDS datasets. - New
.image.loadMetadata
function, andloadMeta
option to the.Image
class, to automatically find and load any sidecar JSON files associated with an image file.
- Internal reorganisation in the
.idle
module.
- Fixed incorrect usage of
setuptools.find_packages
, which was causing unit tests to be installed.
.idle.inIdle
- replaced by.IdleLoop.inIdle
..idle.cancelIdle
- replaced by.IdleLoop.cancelIdle
..idle.idleReser
- replaced by.IdleLoop.idleReset
..idle.getIdleTimeout
- replaced by.IdleLoop.callRate
..idle.setIdleTimeout
- replaced by.IdleLoop.callRate
.
- 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
).
fslpy
is no longer tested against Python 3.5, and is now tested against Python 3.6, 3.7, and 3.8.
- New
.Image.iscomplex
attribute. - Support for a new
Statistic
atlas type.
- 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 the.query
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
.
.ProbabilisticAtlas.proportions
,.ProbabilisticAtlas.maskProportions
, and.ProbabilisticAtlas.labelProportions
have been deprecated in favour of.StatisticAtlas.values
,.StatisticAtlas.maskValues
, and.StatisticAtlas.labelValues
- 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
, and.Nifti.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).
- The
.vest.looksLikeVestLutFile
function has been made slightly more lenient. - h5py has been added to the
fslpy
dependencies.
- The
fsl.utils.transform
module has been deprecated; its functions can now be found in thefsl.transforms.affine
andfsl.transform.flirt
modules.
- New
.image.roi
module, for extracting an ROI of an image, or expanding its field-of-view.
- The
.resample_image
script has been updated to support resampling of images with more than 3 dimensions.
- The
.Bitmap
class now supports greyscale images and palette images.
- New
.Bitmap
class, for loading bitmap images. The.Bitmap.asImage
method can be used to convert aBitmap
into an.Image
. - 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 an.Image
for a specific region. - The
.AtlasDescription.find
method also now aname
parameter, allowing labels to be looked up by name. - New
.FileTree.defines
and.FileTree.on_disk
methods, to replace the.FileTree.exists
method.
- 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.
- New
.resample_image
script. - New
.resample
module (replacing the.Image.resample
method), containing functions to resample an.Image
. - New
.resample.resampleToPixdim
and.resample.resampleToReference
functions, convenience wrappers around.resample.resample
. - New
.idle.block
function.
- The
.resample
function (formerly.Image.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.
- Minor fixes to some
.filetree.filetree
tree definitions.
- The
.Image.resample
method has been deprecated in favour of the.resample.resample
function.
- New tensor conversion routines in the
~fsl.data.dtifit
module (Michiel Cottaar). - New
.makeWriteable
function which ensures that anumpy.array
is writeable, and creates a copy if necessary
- The
.GiftiMesh
class no longer creates copies of the mesh vertex/index arrays. This means that, these arrays will be flagged as read-only. - The
.Mesh
class handles vertex data sets requiring different triangle unwinding orders, at the cost of potentially having to store two copies of the mesh indices.
- The
.FeatDesign
class now handles "compressed" voxelwise EV files, such as those generated by PNM.
- Fixed a bug with the
.gifti.relatedFiles
function returning duplicate files.
- 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 function.guessType
, 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.
- 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 of.Mesh
instances can now be updated.
- Many deprecated items removed.
- Deprecated the
.loadIndexedImageFile
function, and theindexed
flag to the.Image
constructor.
- 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.
- 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.
- Fix to the
.ImageWrapper
regarding complex data types.
- Added a missing
image
attribute in the.VoxelwiseConfoundEV
class. - Make sure that FEAT
Cluster
objects (created by the.loadClusterResults
function) containp
andlogp
attributes, even when cluster thresholding was not used.
- New wrapper functions for
.fsl_anat
,.applytopup
(Martin Craig). - New
.fileOrText
decorator for use in wrapper functions (Martin Craig).
- Various minor changes and enhancements to the FSL function
.wrappers
interfaces (Martin Craig).
- The
immv
andimcp
scripts now accept incorrect file extensions on input arguments.
- The
extract_noise
script has been renamed to.fsl_ents
. - Increased the minimum required version of
dcm2niix
in thefsl.data.dicom
module.
- The
extract_noise
script.
- Fixed a Python 2 incompatibility in the
.settings
module.
- A couple of new convenience functions to the
.settings
module.
- Development (test and documentation dependencies) are no longer listed in
setup.py
- they now need to be installed manually. - Removed conda build infrastructure.
- The
.parseVersionString
function accepts (and ignores) local version identifer strings.
- The
.Image.save
method was not handling memory-mapped images correctly.
- Minor adjustmenets to improve Windows compatibility.
- The
.FEATImage.getCOPE
method was returning PE images.
- 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
and.fileOrArray
decorators now support loading of files which are specified with an output basename. - New
.fast
wrapper function for the FSL FAST tool.
- When using the
.run.run
function, the command output/error streams are now forwarded immediately. - Removed dependency on
pytest-runner
.
- New
.Image.data
property method, for easy access to image data as anumpy
array. - New
log
option to the.run.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.
.Image.ndims
has been renamed to.Image.ndim
, to align more closely withnumpy
naming conventions.- The
err
andret
parameters to the.run.run
function have been renamed tostderr
andexitcode
respectively. - The
.runfsl
function will give priority to the$FSLDEVDIR
environment variable if it is set.
.Image.ndims
.- The
err
andret
parameters to.run.run
.
- The
.fileOrImage
decorator function now accepts.Image
objects as well asnibabel
image objects.
- 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 a.fslsub.submit
function which submits a cluster job viafsl_sub
. - Assertions (in the
.assertions
module) can be disabled with the new.assertions.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.
- The
.tempdir
function has an option to not change to the newly created directory.
- The
fsl.utils.callfsl
module (replaced withfsl.utils.run
).
- Added the
.MGHImage.voxToSurfMat
and related properties, giving access to the voxel-to-surface affine for an MGH image.
- Adjusted
.parseVersionString
so it accepts.dev*
suffixes.
- Removed deprecated use of
.imagewrapper.canonicalShape
.
- 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.
- 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 a.MGHImage.save
method.- Adjustments to the
conda
package build and deployment process. - The
.ImageWrapper.canonicalShape
function has been moved to the.data.image
class. - The
.ImageWrapper.naninfrange
function has been moved into its own.naninfrange
module.
- Fixed a bug in the
.MutexFactory
class.
.ImageWrapper.canonicalShape
(moved to the.data.image
module).ImageWrapper.naninfrange
function (moved to the.naninfrange
module)
- The atlasq, immv, imcp and imglob scripts suppress some warnings.
- More further adjustments to the
conda
package build. - Adjustments to pypi source distribution - the
requirements-extra.txt
file was not being included.
- Further adjustments to the
conda
package build.
- Adjustments to the
conda
package build.
- The
.platform
module emits a warning if it cannot importwx
.
- 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.
- Updates to the
conda
installation process. - A new script is installed when
fslpy
is installed viapip
orconda
-atlasquery
, which emulates the FSLatlasquery
tool.
- Removed
lxml
as a dependency - this was necessary in older versions oftrimesh
.
- The new
.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 old.TriangleMesh
class. - The new
.Mesh
class uses thetrimesh
library (https://github.com/mikedh/trimesh) to perform various geometrical operations, accessible via new.Mesh.rayIntersection
,.Mesh.planeIntersection
,.Mesh.nearestVertex
methods. - The
.Nifti
and.Mesh
classes have new methods allowing arbitrary metadata to be stored with the image, as key-value pairs. These are provided by a new mixin class,.Meta
. - Freesurer surface files and vertex data can now be loaded via the
.FreesurferMesh
class, in the new.freesurfer
module. - Freesurfer
mgz
/mgh
image files can now be loaded via the new.mghimage
module. Internally, these image files are converted to NIFTI- the
.MGHImage
class derives from the.Image
class.
- the
- Meta-data access methods on the
.DicomImage
class have been deprecated, as their functionality is provided by the new.Meta
mixin. - The
.TriangleMesh
class has been deprecated in favour of the new.Mesh
class. - Optional dependencies
wxpython
,indexed_gzip
,trimesh
, andrtree
are now listed separately, sofslpy
can be used without them (although relevant functionality will be disabled if they are not present).
- Actually included the fix that was supposed to be in version 1.5.3.
- Bug fix to
.ImageWrapper.__expandCoverage
- was not correctly handling large images with lots ofnan
values.
- Fixed issue with
MANIFEST.in
file.
- Fixed bug in
.dicom.scanDir
function related to data series ordering.
- 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 the.ImageWrapper
, rather than via the Nifti1Image object.
- 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/). - Some small bugfixes to the
.atlasq
and.atlases
moduless.
- Fixed bug in
setup.py
.
- The
.uniquePrefix
function now raises a~.path.PathError
instead of a.ValueError
, 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
~fsl.scripts.atlasq
application, intended to replace the FSLatlasquery
tool. - New
~fsl.scripts.imglob
application, intended to replace the FSLimglob
tool. - The
.Image.resample
method explicitly raises aValueError
if incompatible shapes are provided.
- Fixed bug in
.Platform.wxPlatform
causing it to always returnWX_UNKNOWN
.
.Atlas
classes can now passkwargs
through to the.Image
constructor..LabelAtlas
image values no longer need to match the index of the label into the.AtlasDescription
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).
- The
.image.read_segments
function is only monkey-patched intonibabel
2.1.0, as it breaks when used with 2.2.0.
- 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
and.ProbabilisticAtlas.maskProportions
methods. Thecoord
methods perform coordinate queries in voxel or world coordinates, and themask
methods perform mask-based queries.
fsl.data.image.Nifti.voxelsToScaledVoxels
method deprecated in favour of new.Nifti.voxToScaledVoxMat
andNifti.scaledVoxToVoxMat
properties.
- 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:- New
ndims
property is4DImage
method deprecated
- New
- 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 new.Memoize
class has aninvalidate
method, which clears the cache.
- 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.
- Fix to
fsl.utils.async
which was breaking environments where multiplewx.App
instances were being created.
- Python 2/3 compatibility fixes
- New
fsl.version.patchVersion
function.
- New version number parsing functions in
fsl.version
.
- 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 lenient - New
.AtlasLabel
class .Image.__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
- First public release as part of FSL 5.0.10