FSL 6.0.7.8, 27th February 2024
-
eddy
: There has been a significant "fix" toeddy
. We discovered that under certain circumstances an outlier caused by large Jacobian modulation, in turn caused a small mismatch between topup-field and data, could propagate through all volumes. This would happen mainly in areas with a large gradient in the off-resonance field. We have only seen it around the ear-canals, but it is concievable it could happen also near the sinuses. -
One obvious manifestation of this has been the inability to find a shape-reference for slice-to-volume registration. It would happen primarily in low b-value shells in the presence of high b-value shells. But we have seen it also in more "normal" circumstances.
-
We have found a fix for it that, as far as we can tell, has completely solved the problem. As an extra "bonus" our fix will also improve the ability to detect outliers in high b-value shells.
-
But, this bonus also means that one should not mix the "new" eddy with results from "old" eddy. If one has not seen any of the problems described above, one can run new eddy with the additional parameters
--ol_jacut=10
and--ol_ss=pooled
, and that will run "new eddy" in "old eddy"-mode. But one should be aware that means one will miss out on the better outlier detection for high b-value data. -
On the whole these are important fixes, and we would recommend everyone to use the new version unless there are very good (compatibility) reasons not to.
-
There has also been a bug fix. In the past the CNR file that we written was calculated as range(signal)/std(residuals) instead of std(signal)/std(residuals) as we had intended. There is just a scaling difference between them, and any comparison of CNR between scans will still have been valid. But the new CNR values should not be compared to those calculated by "old eddy". Unfortunately there will also have been a time before that bug was introduced, so "very old eddy" will have been consistent with "new eddy".
- New
pyFIX
: A Python-based re-implementation of FIX, for automated classification of ICA components, and denoising of fMRI data. - New FSL documentation site: The FSL documentation has been modernised and migrated to a new site at https://fsl.fmrib.ox.ac.uk/fsl/docs/. A frozen version of the old wiki is still available at https://fsl.fmrib.ox.ac.uk/fsl/oldwiki/.
- FSL installations are now based on miniconda by default, due to ongoing issues with mambaforge on macOS Sonoma.
file-tree 1.2.1 -> 1.3.0
Added
- A
link
keyword toupdate_glob
, which allows one to indicate that two placeholders should co-vary.
Changed
-
The code repository namespace has been moved to the FSL namespace (https://git.fmrib.ox.ac.uk/fsl/file-tree) and the documentation to the FSL pages (https://fsl.pages.fmrib.ox.ac.uk/file-tree).
-
update_glob
will now always set the top-most level possible (i.e., instead of setting "input/subject" it will set "subject").
Fixed
- In hierarchical placeholders using in sub-trees, "A/B/C" is now a child of "B/C" rather than "A/C" (both of which are children of "C").
fmrib-unpack 3.7.1 -> 3.8.0
- ENH: New
--fail_if_missing
option, which raises an error if a requested variable is not in input file(s) - MNT: Always emit a warning on missing variables (unless
--fail_if_missing
is set)
Detailed history
- lENH: New fail-if-missing feature, raise error if a requested variable is not in input file(s)
- TEST: test --fail_if_missing
- MNT: Update built-in schema
- TEST: Update notebook outputs
- MNT: Change logic so that a warning is always emitted if a requested variable is missing (unless --fail_if_missing is set)
fsleyes 1.10.0 -> 1.10.2
Detailed history
- MNT: Don't allow a corrupt plugin to crash FSLeyes. Print stack trace if FSLeyes bombs out during initialisation.
- MNT: Tweak to warning messages
- RF: Render accepts, but ignores, --movieSync. Otherwise it may reject CLI calls generated by the 'show command line for scene' menu option
- MNT: Action objects can be given a reference to the object that owns the function they invoke.
- MNT: imagewrapper was moved months ago
- BF: Don't call destroy on Action objects which may be owned/managed by some other entity. For example, the OrthoPanel.toggleEditMode method is an Action which is added to the Tools menu, and was being corrupted by a call to its destroy method.
- TEST: Regression test for edit mode issue
- BF: Missed in refactor (!412) - makeValidMapKey moved to separate fsleyes.utils module
- TEST: Update cmap tests, add loadcolourmap test
- TEST: remove debug, patch NiftiVectorOpts rather than VectorOpts
- MNT: There's no need to sync mask alpha/colour - the value of colour[3] is never used
- TEST: regression test, and update previously bad benchmark
- CI: run notebook test separately
fslpy 3.15.3 -> 3.18.0
- MNT: New 'silent' option to run function
New silent
option to run
function, which is equivalent to passing log={'tee':false}
. When calling run(..., submit=True)
, any log
argument is passed through to fsl_sub
- this means that calling run(..., submit=True, silent=True)
will prevent the job ID from being printed.
- ENH: New
prefix
option to thetempdir
function
The fsl.utils.tempdir.tempdir
function now accepts a prefix
option, which is passed straight through to the tempfile.mkdtemp
function.
- MNT: Add more functions to
fslmaths
wrapper - ENH: New
smoothest
wrapper function
New wrapper function for the FSL smoothest
command. The fsl.wrappers.cluster
module has been renamed to fsl.wrappers.cluster_commands
, to remove the name clash between the fsl.wrappers.cluster
module and the fsl.wrappers.cluster.cluster
function (which gets imported into fsl.wrappers
, thus masking the module). This has been done to make testing easier, and is not considered an API change, as users should be importing functions from fsl.wrappers
.
- ENH: New wrapper function for
fsl_get_standard
- ENH: New wrapper function for
vecreg
- MNT: suppress smoothest stdout by default
- MNT: Update metadata for release 3.16.0
- ENH: Allow
log{stdout}
andlog{stderr}
options to be file-likes or callables -
ENH: New wrapper functions for
makerot
andim*
scripts -
New wrapper functions for the FLIRT
makerot
command -
New wrapper functions for the
imcp
,immv
,imrm
,imln
,imglob
andimtest
commands. These are all implemented withinfslpy
, so the wrapper functions invoke them directly (i.e. within the same process). -
ENH: New
version
option when creating anImage
object -
The
Image
class now accepts aversion
parameter, as an easy way of specifying the NIfTI file format version. -
New wrapper function for the
midtrans
command. -
MNT: Pre-release administrative updates
Detailed history
- MNT: New 'silent' option to run function, which is equivalent to passing
log={'tee':false}
. When callingrun(..., submit=True)
, any log argument is passed through to fsl_sub - this means that callingrun(..., submit=True, silent=True)
will prevent the job ID from being printed - TEST: Test silent=True
- TEST: mock fsl sub was printing log value to stderr. Replace use of fsl.utils.fslsub with fsl.utils.run equivalents
- ENH: Allow tempdir prefix
- MNT: Make sure root is absolute
- TEST: Test tempdir prefix option
- MNT: Remove hold job stdout/err files
- MNT: Add all options to fslmaths, and minor clean-up
- TEST: Test all fslmaths functions
- MNT: Add boolean flags to fnirt wrapper
- MNT,ENH: Rename cluster module so I can mock things within. New smoothest wrapper function
- TEST: Test smoothest wrapper
- DOC: function to check for API doc completeness
- DOC: Add stubs for oxford_asl and cluster
- DOC: Clarify fslstats wrapper usage
- ENH: Wrapper for fsl_get_standard
- TEST: Unit test for get_standard wrapper
- TEST: Wrong exe name
- ENH,RF: Move dtifit.py to fdt.py; add vecreg wrapper
- BF: Missing import and vecreg argument
- TEST: vecreg unit test
- MNT: suppress smoothest stdout by default
- MNT: Pre-release version bump
- ENH: log stdout/stderr options can now be either file-likes or callables
- TEST: Test log stdout/err as callables
- ENH: Wrapper for makerot
- MNT: USe
ndimage.map_coordinates
rather than the deprecatedndimage.interpolation.map_coordinates
- TEST: Test for makerot wrapper
- RF: Allow images/arrays for relevant args
- BF: No need for argmap
- RF,ENH: Make imtest callable. Wrapper functions for im* commands
- TEST: Tests for im* wrappers
- TEST: bug in makerot test
- MNT: Pre-release version bump
- ENH: New version option when creating an Image - easy method of selecting the NIfTI format
- ENH: new midtrans wrapper
- TEST: Tests for midtrans and Image(version)
- MNT: Pre-release version bump
fsl-base 2309.2 -> 2401.0
- Create
Tool
andTool_gui
commands on Linux, and expand functionality ofcreateFSLWrapper
Historically, FSL GUIs have been named Tool
on linux, and Tool_gui
on macOS. In FSL ~6.0.7.5, we are now naming them Tool_gui
on both linux and macOS for consistency across the platforms. However, to minimise disruption, we will continue creating commands called Tool
on linux.
During the transition period some linux GUIs may have both Tool
and Tool_gui
variants in $FSLDIR/bin/
, but others may only have the Tool
variant. Therefore the createFSLWrapper
script has been updated to create both Tool
and Tool_gui
wrappers in $FSLDIR/share/fsl/bin/
, regardless of whether we only have $FSLDIR/bin/Tool
or both $FSLDIR/bin/Tool
and $FSLDIR/bin/Tool_gui
.
The createFSLWrapper
and removeFSLWrapper
commands have also been rewritten in Python; createFSLWrapper
now has additional functionality, including the ability to specify the source and destination directories, and to create "unresolved" wrapper scripts, which call e.g. ${FSLDIR}/bin/tool
rather than /fully/resolved/path/to/fsldir/bin/tool
.
- BF: Don't create
$FSLDIR/bin/"Tool"
on macOS, as it may overwrite$FSLDIR/bin/"tool"
This was an oversight introduced in !102
- MNT: Make
update_fsl_package
request specific package builds
Make update_fsl_package
request specific packager builds, as otherwise conda install <package>=<version>
will not update <package>
if <version>
is already installed, even if a new build is available.
Detailed history
- RF: Rewrite create/removeFSLWrapper in python. Add ability to change source/dest directories, and limited customisation of wrapper script contents
- TEST: Tests for new createFSLWrapper features
- MNT: Option to override platform, for testing
- TEST: Test both macOS / linux gui wrapper creation
- BF: Read targets in as binary, otherwise attempts to decode as text will raise an error
- RF: Add
--force
optionto allow creation withoutFSL_CREATE_WRAPPER_SCRIPTS
- RF: Extend --force option so that wrappers are created if the target exe does not exist
- Create
<tool>_gui
links on both platforms - BF: Don't sniff target exe if it doesn't exist (if
--force
was used). SimplyTool
/Tool_gui
wrapper creation logic - RF: Wrapper script has to end with _gui
- BF: Don't assume target exe exists
- RF: On Linux, if only
$FSLDIR/bin/Tool
exists, create bothTool
andTool_gui
wrappers - TEST: Test that Tool and Tool_gui wrappers are created on linux
- MNT: Only remove Tool and Tool_gui on linux, and only if a GUI wrapper was specified
- MNT: note about CUDA stuff
- MNT: Use curly braces in shell scripts
- BF: Don't create
$FSLDIR/bin/"Tool"
on macOS, as it may overwrite$FSLDIR/bin/"tool"
- MNT: Allow
SYSTYPE
to be overridden by the environment - useful for testing - TEST: Test that GUI links are installed correctly
- BF: Conditionally delete GUI link
- TEST: Can't run Linux tests on macOS
- MNT: indentation
- TEST: disable selective test execution as it causes no tests to run when called via pyfeeds
- MNT: Allow
<Tool>_gui
to be executed on any platform - MNT: Store build string in conda.Package objects. Make update_fsl_package request the specific build, as
conda install <package>=<version>
will not update<package>
if<version>
is already installed, even if a new build is available.
fsl-bet2 2111.4 -> 2111.7
- BF: Remove carriage returns from bet4animal as it is otherwise not executable under linux
- Enh/bet4animal
- ENH: Allow 1 exit code
Detailed history
- BF: Remove carriage returns from bet4animal as it is otherwise not executable under linux
- ENH: bet4animal 1.0 kindly provided by Takuya Hayashi
- MNT: Permissions
- MNT: Added bet4animal test
- ENH: Allow 1 exit code
fsl-eddy 2111.0 -> 2401.2
-
RF: Set BUILDDIR/CUDABUILDDIR so that depend.mk file is correctly generated
-
Add an example of compiling against a different CUDA toolkit version into the
Makefile
comments. - Set the
BUILDDIR
andCUDABUILDDIR
variables so that they can be used by thedepend.mk
rule (defined in$FSLDIR/config/rules.mk
in the fsl/base> project) to generate correct target names for automatically generated dependencies. -
We can also remove hand-curated dependencies for
.cu
object files, as these are now automatically added todepend.mk
-
RF: Use new find_cuda_exe script to find suitable eddy_cuda.
- RF: install wrapper as part of CPU build
- Release with unfinished/untested major new features, done in order to allow us to release minor bug fixes/features that was mixed in with the development.
This release contains lots of unfinished/untested features such as eddy for fMRI and modelling of temporal evolution of eddy currents. The untested features are either hidden or disabled to try and ensure we don't put anything that is wrong out there. The released version has passed all the eddy feeds tests, so hopefully it will not introduce any bugs in functionality the is currently being used. The reason for the release is to allow us to release a bunch of minor features and bug fixes that have been bundled up in the general development of the major new features. Going forward it will allow us to make bug-fixes as bugs gets reported on short lived, dedicated, branches and release them in a timely manor. We can then rebase the development onto the new master to make sure that we bring those fixes with us into the development branch.
- Fix shape ref scan nos
A new parameter, --shape_ref_scan_nos, was not visible because I hadn't added it to options. Now fixed.
- Fixed bug that meant that derivative images were wrong on the first iteration.
I had a report that there were discernible differences between GPU and CPU results for a specific data set. I found and fixed a bug that meant that derivative images were wrong on the first iteration when not supplying a --topup field. In addition to that I changed the Levenberg strategy so that it now always resets the Levenberg Lambda for each volume after each iteration. It will be slower, but should reduce the risk of a local minimum. The results are much more similar between CPU and GPU now, but still not identical. I will keep the branch open and keep looking.
- Changes to how derivatives are calculated to ensure that CPU and GPU results are more similar
This is a continuation of my investigation into why CPU and GPU results were notably different in a dataset given to me by Wenchuan and Xinyu. There was a problem when calculating the derivatives on the first iteration when running eddy without a topup fieldmap on the GPU. In addition, there was a different problem with how the derivatives were calculated on the GPU. That was related to using an inverse of a field to guide the inversion of another very similar (minimally perturbed) field. That problem had a much smaller, but still non-negligible, effect. These problems have both been fixed.
- Added EddyStopwatch class for simple timing tasks
Branch intended to look at/fix problem with strange, single voxel, "holes" in the CPU predictions. It turns out it is caused by treating zeros in input data as NaN. It only affects the CPU version on the first iteration when input images are of integer type and when no topup field is supplied. Hence it will have minimal impact on the end results and fixing it would require quite large changes. I have therefore decided to drop it for now. As part of my explorations I discovered that the CPU parallelisation of the GP prediction is incredibly inefficient, and should be fixed. I also implemented a simple stopwatch class for use in basic benchmarking.
- Fixed very vexing bug that would sometimes cause a slice to be labelled as outlier in all volumes in a shell. Not fully tested yet.
Fixed very vexing bug that would sometimes cause a slice to be labelled as outlier in all volumes in a shell. Not fully tested yet. Sometimes a slice was labelled as outliers because the prediction had "too large" values (caused by large Jacobian determinants) in a set of voxels. Once that had happened the predictions would now be biased towards too large values in those voxels, which in turn could cause that slice to be labelled as an outlier in some mode volumes, etc etc. Eventually, after enough iterations, that slice could be labelled as an outlier in all volumes. That would in turn mean that no shape-reference volume could be found (as reported many times by the HCP people) and/or very large intensity values in the eddy corrected data in those voxels (usually small clusters of voxels on the edges of the ear-canals). It has been solved by adding a mask to the comparison between observed and predicted data. The mask is based on the Jacobian determinants, so that the comparison is only based on voxels with Jacobians greater than zero and below some threshold (default 3.0).
- Problem(s) that meant that eddy couldn't find a volume without outliers to use as shape-ref for slice-to-volume
This should, hopefully, finally fix the problem of eddy not finding volumes without outliers to use as shape-reference for slice-to-volume. It has been a longstanding issue that I have thought depended on timing problems in the sequence, leading to some slices having consistently lower intensity. And I have indeed seen data like that. But since it has been a lot of complaints from the LS-HCP crowd (Mike Harms) I decided to finally look more closely at the problem. But as it turns out there are two distinct mechanisms/problems that can cause this to happen. 1. Very large Jacobian determinants in the inverse field can inflate the intensity of the predictions when warped back into observation space. That means that when comparing the observation to the prediction the observation can have appreciatively lower intensity than "expected", and be labelled as an outlier. That slice is the replaced by the prediction (which has inflated intensity), which in turn means that several of the predictions in the nest iteration will have inflated intensities. That can then cause additional volumes for that slice to be labelled as outliers, etc. The end result is that for some slices all volumes (in one or more shells) are labelled as outliers. And in the "corrected" images there may be one or several clusters, typically coinciding with areas of Jacobians>3 in the inverse field, with very high intensities. This problem is not unique to LS-HCP data, and I have even been sent a data set by Fidel where this is a problem in UKB data. In the cases I have seen it has been primarily located near the ear canals, where the Jacobians of the inverse field can get large. The solution to this was to limit (mask) the comparison between prediction and observation to voxels where the Jacobian of the inverse field was < 3 (default, it is accessible at the command line with --jacut). The solution worked well on the UKB data set from Fidel, which is what I used for testing because of the much shorter run-time than for the LS-HCP data. But it turned out not to solve the problem for the LS-HCP data. 2. Pooled summary statistics for outlier detection. I must admit I didn't even remember that I did it this way. But what I did was to consider all slice-sum-of-difference values to come from the same distribution, which is unsurprisingly not a very sensible thing to do. If looking at the distributions from different shells it is quite clear that the low b-value shells have a much greater standard deviation than the high b-value shells. If there is a reasonable balance in terms of number of volumes per shell (like in the original HCP data) it will not have any "catastrophic" consequences. The main consequence in that case would be slightly inflated statistics for the lower shell and slightly too low statistics for the higher shell. I am now thinking this is one of the reasons why we tend to detect more outliers in the lower b-value shells. But if there is one (or more) very low b-value shells with a very small number of volumes (in the LS-HCP data there is a b=200 shell with 3 directions and a b=500 shell with 6 directions) the summary statistics (mean and standard deviation) is completely dominated by the higher b-values with more than an order of magnitude more volumes. The means that the slice-sum-of-difference values for the b=200 and b=500 shells are transformed to z-scores using a standard deviation that is much too small, leading to a lot of false positives. When combined with the problem of large Jacobian determinants (see above) it leads to these false positives being located in particular slices (near the ear canals in the examples that I have seen) and on gets a similar situation as described above where the actual data is being replaced by predictions with too high signal. And similar to above this then spreads to the other predictions in the same shell. I have solved that by instead calculating shell-wise summary statistics, something that should obviously have been done from the beginning. Using shell-wise stats is now the default, since this is clearly the right thing to do. That will mean that even on less extreme data sets, e.g. two shell data with ~equal number volumes per shell, there will be appreciable differences. If someone was to re-run their data they would see fewer outliers detected in the lower b-shell and more in the higher b-shell. There is therefore the option to set --ol_ss=pooled to use the same model as before if one wants to keep things constant. This will have to be carefully pointed out in the release notes. I have tested it on one of the problematic data sets sent me by Mike H and Selena, and it seems to run fine. No need to specify reference volumes, and the results look very good. I have also run all the Feeds tests with this new version, and they have all passed.
- Fixed bug that made eddy crash for certain orderings of b0/DWI scans
Fixed bug that was introduced as part of the rewrite of calculating the summary statistics for outlier detection. The rewrite was part of fixing the problem with eddy not being able to find shape reference volumes for slice-to-volume.
- Fixed bug that meant range_cnr images were written instead of std_cnr images
There was a bug that meant that the "range-cnr" images were written out instead of cnr images defined as std(signal)/std(residuals), where std(signal) is estimated from the predictions. As far as I can tell this bug must have been present for a long time. It is not a serious bug in that it only concerns a "diagnostic" output metric, and all relative CNRs will have been the same. But the scale has been wrong, which means that CNR values should not be compared across the bug fix.
Detailed history
- DOC: Add an example for compiling against a specific CUDA toolkit
- RF: Set BUILDDIR/CUDABUILDDIR so that depend.mk file is correctly generated (see recent changes to fsl/base)
- MNT: No longer need to manually create dependencies for .cu files, as this is supported by depend.mk in $FSLDIR/config/rules.mk (see the fsl/base project)
- RF: Use new find_cuda_exe script to find suitable eddy_cuda.
- MNT: print error message if can't find an executable
- RF: install wrapper as part of CPU build
- Changes related to fmri version of eddy
- Changes related to fmri version of eddy
- Changes related to rewriting eddy to work with C++ threads instead of OpenMP
- Parallelised .cf() for MMLHyParCF and CVHyParCF
- MNT: Add namespace to string invocation
- MNT: No longer using openmp
- Changes to exception classes to make sure string is valid
- Saving changes ahead of updating FSL environment. Probably doesnt compile
- This version compiles, but is not yet properly tested
- Bug fixes from initial round of testing
- Fixed bug in multi-threaded version of align_shells_using_MI
- Made MoveBySuscCFImpl use parallel version of splinefield
- Fixed silly bug that was introduced in the last commit
- Parallelised SLResampler on a slice level. Redundant as already parallel at volume level
- Added option to set shape reference scans manually
- Changes to DoVolumetoVolumeRegistration to accomodate fMRI
- Changes to DoSliceToVolumeRegistration to accomodate fMRI
- Added posibility to set b-range from command line
- Added writing of shell indicies for the benefit of eddyQC
- Now writes a single .json file with all the ascii output. Can optionally supress writing of the old-style text files. Not yet tested (because of heat wave).
- Changed JsonReader to use nlohmann library
- Additional minor changes to json reader
- Changes to classes and basic methods to allow for estimation of time-varying EC. No actual estimation yet.
- Minor changes
- Added user option to estimate time varying eddy currents
- Started writing functions for estimating time varying eddy currents. Does NOT compile
- A set of new classes used for modelling long time-constant eddy currents
- Lots of changes related to modelling of long time-constant EC
- Minor change to add range check to long EC weights
- Minor changes
- Debugging and testing of CPU version of long EC modelling
- Starting to implement GPU version of long EC modelling
- Continued work on the GPU implementation of long time-constant EC modelling
- Continued work on GPU version of long EC modelling
- GPU version og long EC modelling now compiles. Not yet tested
- Continued work on GPU version of long EC modelling
- Fixed a bug affecting the --init flag
- Changed time-constant models for long EC
- Changed kernels for making EC fields to include previous field
- Minor chage to reflect rewrite of time-constant long EC model
- Lots of fiddling to hide nlohmann from the Nvidia compiler (because of problem with pre 10.2 version)
- Push for backup reasons
- Changes to make cuda estimation of long EC to use Levenberg instead of straight GN
- Now uses Levenberg updates for long EC on CPU branch
- Fixed bug that meant dynamic susc fields were not used when updating long EC
- Levenberg updates for individual long EC parameters parallelised
- Work related to long EC estimation and adding Levenberg to regular EC estimation on the CPU branch
- Levenberg updates used for movement and EC for CPU branch
- Now longEC estimation alternates with updates of movement and EC
- Minor bugfix
- Implemented GPU version for calculating the movement RMS
- Minor bugfix
- Made it optional to re-estimate EC and movement along with long EC
- Minor bug fix
- Now properly throws if .eddy_command_txt cannot be written
- Added nearest neighbour resampling option for Stam
- Changed model for separating movement and DC to now use one-lag model
- Made it optional to separate offset and movement when estimating long EC
- Made sure the we still align shells along PE when estimating long EC
- Debug version
- Debug version
- Debug version
- Debug version
- Debug version
- Debug version
- Debug version
- Removed debug printouts from previous submits
- Fixed bug that caused crash for --slm=linear
- Temporarily disabled fMRI functionality to allow for a bug fix release
- Removed debug output
- Fix shape ref scan nos
- Now resets Levenberg lambda to small value after each iteration
- Fixed bug that meant that derivative images were wrong on the first iteration when not supplying a --topup field
- Changes to how derivatives are calculated to ensure that CPU and GPU results are more similar
- Added EddyStopwatch class for simple timing tasks
- Cleaned up terminal output to make sure that volume numbers were consistently reported as global index
- Added Jacobian thresholding to outlier detection. Not yet fully tested
- Problem(s) that meant that eddy couldn't find a volume without outliers to use as shape-ref for slice-to-volume
- Fixed bug that made eddy crash for certain orderings of b0/DWI scans
- Fixed bug that meant range_cnr images were written instead of std_cnr images
fsl-fdt 2202.6 -> 2202.7
- ENH: Add
--premat
and--postmat
options tovecreg
Add --premat
and --postmat
options to vecreg
so that, when warping a vector or tensor field, an initial affine transform can also be provided. This is useful when working with MMORF, as MMORF saves its displacement fields without encoding any source-to-reference affine transfornm.
Detailed history
- MNT: Make indentation consistent
- ENH: add pre/post affines
fsl-gps 2211.0 -> 2211.1
- MNT: Remove unnecessary include statement
fsl-installer 3.5.7 -> 3.9.0
- MNT: Set installation directory to
$FSLDIR
if it is already set - MNT: Make post-installation failures non-fatal
The post-installation finalisation/clean up routines can fail for undetermined reasons. Adjust the installer so that, in such scenarios, the installation completes but a warning is printed.
- MNT: The
--skip_ssl_verify
option was not being applied for all downloads - MNT: Add trailing newline to shell profile
- MNT: Add a new progress reporting mechanism
Add a new progress reporting mechanism - the total number of files installed into $FSLDIR/pkgs/
, $FSLDIR/bin/
, and $FSLDIR/lib/
.
-
ENH: Register installations with a remote server
-
FSL installations are now registered with a remote server. Basic installation and system information is sent as part of the registration process. This can be skipped by passing the
--skip_registration
/-r
command-line option. -
Another update to the installation progress reporting - now the total amount of data downloaded and saved to
$FSLDIR/pkgs/
is tracked. -
ENH: Allow an existing conda installation to be used, and allow FSL to be installed as a child environment
The fslinstaller.py
script can now be told to use an existing base conda/mamba installation instead of downloading/installing its own, via the --miniconda
option, e.g.:
fslinstaller.py --miniconda=/Users/xyz/miniconda3/
FSL can either be installed into the base environment by giving the same location for the destination directory, e.g.:
fslinstaller.py --miniconda=~/fsl/ --dest=~/fsl/
Alternatively FSL can be installed as a child environment by giving a different destination directory, e.g.:
fslinstaller.py --miniconda=~/miniconda3/ --dest=~/fsl/
- BF: Make sure that
$CONDARC
environment is passed throughsudo
commands - BF: Don't use
$CONDARC
during installation
Don't use $CONDARC
during installation, as it allows user ~/.condarc
settings (the channel list in particular) to override our settings. Instead, pre-create $FSLDIR
- conda seems to be ok with this, although I am slightly concerned that this behaviour is not guaranteed. However, if this becomes a problem in the future, it would only affect child-environment installations.
-
ENH: New
--progress_file
and--logfile
options -
New
--logfile
option, allowing the log file location to be customised. - New
--progress_file
option, which instructs the installer to write progress updates to a file for external monitoring.
Detailed history
- MNT: Clear MAMBA env vars during conda/mamba operations. Log environment on error.
- MNT: Set destdir to $FSLDIR if it is set
- TEST: TEST installation with $FSLDIR already set
- TEST: Adjust test
- MNT: Make finalise/post-install cleanup failures non-fatal
- TEST: Test for finalise/post-inst failures
- MNT: SSL verification was not being disabled for all downloads
- MNT: A few more things needed to skip SSL verification
- TEST: Test skip SSL verification
- MNT: Support py34
- MNT: Add trailing newline when appending to end of shell profile
- MNT: Add a new progress reporting mechanism, which is total number of files installed into $FSLDIR/pkgs/, $FSLDIR/bin/, and $FSLDIR/lib/
- ENH: Prompt user to accept FSL license. Depends on the presence of a license_url field in the manifest
- ENH: Sledgehammer approach - monitor number of bytes downloaded to $FSLDIR/pkgs/ for reporting progress
- ENH: Implement progress reporting mechanism v4
- RF: Make get_terminal_width standalone
- ENH: Word-wrap text to terminal width
- BF: Fix devrelease parsing - the devreleases.txt file contains both public and development releases
- ENH: Allow warnings to be selectively directed to screen/logfile
- TEST: update HTTPServer to accept POSTs
- ENH: Functions for HTTP post requests, and for generating a timestamp. Process.check_output and check_call have optional check argument
- TEST: Test Process.check_*, timestamp, post_request
- RF: Make check_call return exit code
- RF: add license/reg url properties to Context
- ENH: Register installation and send basic system information to a remote server. Can be skipped with --skip_registration
- TEST: Test installer with --agree_to_license and --skip_registration
- MNT: py2 compatibility
- TEST: Fix a few tests r.e. license/reg urls
- MNT: py2 compat
- TEST: sleep a bit on each server invocation
- MNT: Remove --agree_to_license - instead, print a message stating that running the installation implies acceptance of the license
- TEST: remove --agree_to_license
- CI: Test py312
- MNT: Include both /etc/os-release and wsl.exe -v for WSL installs
- ENH: Scaffolding for option to install FSL as a child env/using existing miniconda install
- ENH: Ability to install using an existing miniconda installation, and as a child env. Progress reporting mechanisms take into account the initial contents of $FSLDIR/
/ and offset progress accordingly - BF: Avoid progress reporting crash if directories do not exist
- BF: A few fixes to baseenv/download logic
- TEST: Test --miniconda=
and --child_env - RF: Remove -child_env option - that distinction can be made from testing whether basedir == destdir. All permutations are possible by setting --destdir and --miniconda accordingly
- TEST: adjust child-env tests
- TEST: Add sanity check tests for old progress reporting methods
- MNT: Expand tilde in manifest/miniconda
- TEST remove comments from mock manifest
- TEST: Don't use f-strings
- MNT: Cosmetic updates
- BF: Use append_env, otherwise vars do not pass through sudo
- BF: Explicitly handle append_env
- TEST: Basic test to ensure env/append_env are passed through Context.run
- BF: Don't use $CONDARC, as it allows user ~/.condarc settings (the channel list in particular) to override our settings. Instead, pre-create $FSLDIR - conda seems to be ok with this
- ENH: New --logfile option
- ENH: New --progress_file option - the installer will write progress updates to that file
- TEST: Basic test for progress file
fsl_mrs 2.1.13 -> 2.1.19
- BF: Fix CI Docker image
Move to micromamba docker and on the fly fsl tools install.
- CI: Build test Docker image
Add Dockerfile and instructions for building test image. Add to CI action
-
CI: Version fix
-
Update versioneer to 0.29
-
Revert "Merge branch 'ci/versioneer' into 'master'"
This reverts merge request !97
- CI: Upgrade versioneer to fix deploy issue
Upgrade versioneer to 0.29
- CI: Remove curl from validate script
-remove curl installation from docker validate
- Enh: Better dynamic visualisation
Improved plots and reports for first stage dynamic fitting.
- Enh: Windowed phase frequency alignment
Add windowed averaging option to the phase and frequency alignment tools.
- Rel: 2.1.16
- CI: Add git to docker image
Required for the validate job.
-
BF: Windowed alignment
-
Bug fixes in windowed alignment.
-
Minor tweaks to edit pipeline when using dynamic alignment.
-
BF: Summarise non-unique names
Fixes issue in fsl_mrs_summarise
where an infinite while loop was caused if no level of the paths were unique.
- CI: Tags in validate
Fix git tags appearing in validate CI jobs so that proper version numbers are used.
-
ENH: Allow multiple water reference metabolites.
-
Multiple metabolites can now be specified as the water scaling metabolite
- Default water scaling metabolite is now PCr+Cr to add robustness to one of PCr or Cr not being fit.
- Improved error logging in
fsl_mrsi
when parallel processing enabled.
Detailed history
- BF: Fix CI Docker image
- Add Dockerfile and instructions for building test image. Add to CI action
- [skip-tests] Update versioneer to 0.29
- Revert "Merge branch 'ci/versioneer' into 'master'" This reverts merge request !97
- CI: Upgrade versioneer to fix deploy issue
- [skip-tests] remove curl isntallation from docker validate
- Improved plotting for dynamic fitting results.
- minor additional tweaks
- Update dynamic report with new plots.
- Enh: Windowed phase frequency alignment
- [skip-tests] update changelog for new release.
- [skip-tests] Add git to the installed tools of the test docker image.
- Bug fixes in windowed alignment. Minor tweaks to edit pipeline when using dynamic alignment.
- BF: Summarise non-unique names
- CI: Tags in validate
- ENH: Allow multiple water reference metabolites.
fsl-newimage 2203.11 -> 2203.12
- MNT: Remove
gitlab-ci.yml
fromnewimage
source repository
Remove gitlab-ci.yml
- this is not used anymore, as the newimage
unit tests are run on the fsl/conda/fsl-newimage> conda recipe repository.
- Refactored fill_holes code
This code should be functionally equivalent to the previous version.
- Fixed modal filter
The previous version would pick the next most frequent mode if the mode was the lowest value in the kernel
- RF: Clearly identify nature of output
- MNT: Explictly describe operator behaviour
Detailed history
- MNT: Remove gitlab-ci.yml - this is not used anymore, as the newimage unit tests are run on the fsl/conda/fsl-newimage conda recipe repository.
- MNT: restructured fill_holes, matches old behaviour
- MNT: additional refactoring of fill_holes, matches old behaviour
- RF: More refactoring, passes test case
- RF: Moved logic to if
- RF: Final version of fill_holes
- BF: Mode calculation
- RF: Whitespace
- RF: Whitespace
- RF: Clearly identify nature of output
- MNT: Explictly describe operator behaviour
fsl-nets 0.8.2 -> 0.8.5
- BF: Don't use
$TMPDIR
for storing temporary files, as it may not be shared across nodes on a HPC cluster system - BF: Fix
netmats(ts, 'amp')
Reported at https://www.jiscmail.ac.uk/cgi-bin/wa-jisc.exe?A2=FSL;20486de.2401
Calls to netmats(ts, 'amp')
were incorrectly returning the standard deviation across all nodes, rather than returning the standard deviation for each node.
-
RF: Save netmats as NIfTI2; a couple of bug fixes
-
Netmats are now saved in NIfTI2 format when being passed to
randomise
, to support numbers of edges/subjects greater than 32768. - Fixed some issues in the R-to-Z transformation used in
nets.netmats
. - Fixed an issue with
nets.clean
incorrectly handling multi-run data.
Detailed history
- MNT: Don't use $TMPDIR, as it may not be shared across machines on a cluster system
- MNT: make sure all outputs are saved into temp dir
- MNT: Use new tempdir prefix option so tempdir is hidden
- BF: netmats('amp') was returning stddev across all nodes
- RF: Use nifti2 when saving netmats to pass to randomise
- MNT: require latest fslpy
- BF: nets.clean was not handling multi-run data correctly
- BF: Account for differences in behaviour between numpy/matlab log/std functions
- TEST: Sanity check test that nets.clean handles multiple runs
fsl-pipe 1.0.1 -> 1.0.2
Moved the fsl-pipe code and documentation from the ndcn0236 to the FSL namespace in gitlab
fsl-pyfeeds 0.12.2 -> 0.12.4
- MNT: Make vector field comparison routine programmatically accessible
- MNT: Set a
PYFEEDS_TESTING
environment variable sofeedsRun
scripts can determine whether they are being called bypyfeeds
, or by other means.
Detailed history
- MNT: Separate out vector image evaluation routine so it can be called programmatically
- TEST: Basic unit tests for evalImage/evalVectorImage
- MNT: Version, expose compare routines
- MNT: Set a PYFEEDS_TESTING env var when calling test scripts
- DOC: Note about PYFEEDS_TESTING env var
- DOC: Fix changelog formatting
fsl-pyfeeds-tests 2302.0 -> 2401.1
- Update runEddy script to work with new multi-threaded version.
The eddy_cpu
command is called twice - once with --nthr=1
, and again with --nthr=8
Note that these changes will not work with the openmp eddy build, so do not merge / use this MR until threddy has been released.
- Remove avwutils unit tests - they have been added to the fsl/avwutils project
See fsl/avwutils!22
- TEST: Test for typical/standard MMORF run; needs external/shared data
- MNT: Make scripts executable
- MNT: Run GPU jobs via fsl_sub, so they can be run locally or on the cluster
- TEST: Test fslStartup logic
Make sure that BLAS threading is disabled, and OMP threading is enabled, by default
- BF: Script tries to remove wait file in pwd not outdir
The current script tries to remove wait
in pwd
not outdir
and so wait loop will never exit.
- BF: Use fslpython rather than system
The feedsRun
script should call fslpython
as the system python
may not be compatible ( e.g. Python 2.x ).
- BF: /opt/fmrib/fsl may not contain activate
child FSL environments will not contain activate
so it must be provided by PATH instead.
- Unit tests for vecreg
Primarily testing the new --premat
/ --postmat
options (see fsl/fdt!23)
- changed --ol_type=slice to --ol_type=sw in feedsRun.EddyS2V
Bug that previously had no effect (sw is default, so that got picked anyway as intended). But eddy now checks for correct input so no longer accepts this.
Detailed history
- Remove avwutils unit tests - they have been added to the fsl/avwutils project
- TEST: Test for typical/standard MMORF run; needs external/shared data
- MNT: Make scripts executable
- MNT: Run GPU jobs via fsl_sub, so they can be run locally or on the cluster
- BF: Script tries to remove wait file in pwd not outdir
- TEST: Test fslStartup logic
- TEST: Adjust fslstartup test
- TEST: MAke sure build env is activated
- TEST: Test FSL_SKIP_GLOBAL=0
- TEST: Just creating an OptionParser is not enough, as the OptionParser class is entirely defined in options.h, and the linker may optimise out libfsl-utils. The usage function is in options.cc though
- BF: Use fslpython rather than system
- BF: /opt/fmrib/fsl may not contain activate
- MNT: update runEddy script to work with new multi-threaded version. The eddy_cpu command is called twice - once with --nthr=1, and again with --nthr=8
- RF: Typo in varname. Only request an openmp/multi-core node for --nthr[N>1]
- RF: Use an array instead of separate vars for extra arguments
- BF: get nthreads from basename, not full executable path
- BF: eddy_ is stripped from variant in sed call above
- BF: expand array when calling fsl_sub
- MNT: Use 6 threads
- MNT: Only run single threaded when being invoked by pyfeeds (requires pyfeeds 0.12.4)
- Basic unit test for vecreg
- changed --ol_type=slice to --ol_type=sw in feedsRun.EddyS2V
fsl-tirl v2.2.1 -> 3.6.2
- Unify original v2.2.1 with rebased v2.2.1
- Commit manually constructed from: eb02d452 (ihuszar/master, ihuszar/HEAD, master) Bugfix to DummyLogger 91202a5f Adding print_fn to Optimiser a0907eb4 Removed deprecated numba compilation from transformations d85e35e4 Moved srchash from the archived tirlscripts module to TIRL bb790fc7 Replaced setup.py with pip in the installation instructions 1b87a622 Fixed tirlscript registration routine. 3544c446 Fixed tirlscript registration routine. 31c706d7 Moved cli and scripting utils to tirlscripts. c55b5929 Changed TIRLSCRIPTS --> TSREGISTRY 74bb6029 Implemented the new tirlscripts management system cd8e5cbd Merge branch 'master' of /Users/inhuszar/apps/tirl-cliutils Merging CLI utilities into the main TIRL repository. 7d6dd030 Module structure is ready to be merged into TIRL c5099f13 Merge branch 'master' of /Users/inhuszar/apps/tirl-scriptutils Merging scriptutils into main TIRL repository. 1537f71b Module structure update 2. ff336b92 Fixed module structure. 725dd3f6 Scriptutils are ready to be merged into TIRL 4cfac73d v31: MND Stage 4 bugfix log; updated (C) information 80e85081 v31: MND Stage 4 bugfix log; updated (C) information 4b00c663 Updated copyright information. 551fa598 Change from FSL licence to Apache v2 2e34ec58 v3.6: new tirlenv w/py310 + amended (C) dates 61b5c19c v3.5 - Fortran-to-C conversion on import from NIfTI fb15e8a2 Accidental version update to v3.5 after reverting rotation changes. 6f15c661 Monkey project 2 stage 1 registration commit. f67a45d5 Version 3.4.1 update - TImage masking bugfix 47ce7619 Gitignore update 7cf80982 Version 3.4 update - finalising file I/O changes 2d3694d0 v3.4 updates - no more overuse of file handles 6f86fe98 Version 24 update -- cliutils extension b98daf10 Version 24 -- BigMac: configurable sapshot resolution 51f3d7d8 Version 3.2 update - added method: TImage.resample() 4dc90eba v3.2.1 updates - resolved multi-user conflict on TWD 3ff97cff v3.2.1 updates - resolved multi-user conflict on TWD 5f484880 v3.2.1 updates - resolved multi-user conflict on TWD 39538ef2 v3.2 updates - string update 06fe4db8 Version 21 update -- versioning changes, bugfixes in BigMac 341ebeb1 Merge remote-tracking branch 'origin/master' 27e9a20b v3.2 updates - minor code reformatting 30de277c Version 1.2.1 update - project-specific version control, bigmac bugfixes. f121e637 Bugfix in TiffTileLoader, removed all test instructions. dac1b0e4 v3.1.5 updates - added TIRLLoader class 5be15300 v3.1.5 updates - TField and TImage instance name assignment 36496776 v3.1.5 updates - bugfixes a2b1d632 v3.1.5 updates - bugfixes 806479b4 v3.1.5 updates - bugfixes dd88a411 Version 1.1 update. 9800106a v3.1.4 updates - added "affine" option for loading NIfTI files. f29d27c8 v3.1.4 updates - auto-install SimpleITK to the tirl environment 9ce8c050 v3.1.4 updates - MINC support, CostPoints, and bugfix. 3eeacdf4 v3.1.3 updates - added VIPS-generated pyramidal TIFF support to TiffTileLoader 2492a79e v3.1.2 updates - bugfix for large Domain objects that occasionally returned invalid voxel coordinates due to integer-type overflow 4ce3248f v3.1.1 updates b7507511 Initial commit v1.0.0 357ea452 Restructuring the tirl repository for FSL release 6e083b9a Fixed git merge error. f1b717a0 Partial bugfix for TIRLFile object ID redundancy problem. 38a47398 Partial bugfix for TIRLFile object ID redundancy problem. 5e6edf7e Bugfix: eliminate NaNs from interpolated mask (wasteful)
- A couple of necessary changes required to allow TIRL to be built as a python/conda package: - The "tirl" package cannot be imported in setup.py because, when setup.py is executed, tirl will not have been installed, and there is no guarantee that it will be available on the python module path. Instead, in order to extract the TIRL version number, tirl/init.py is read in as a text file. - Move TIRL config file initialisation from setup.py into tirl/settings.py - for reasons related to the above, setup.py is executed at build time, and is almost certainly executed on a different machine than that on which TIRL will be installed and used. So it doesn't make sense to install and initialise user-specific configuration files in setup.py - this must be done at installation or run-time. - Move the tirl.yml and tirlscripts.yml templates into the tirl/ package directory so that they are installed into the TIRL package, and can be used for one-time initialisation of the user-specific TIRL configuration file and tirlscripts registry.
- Add some macros to prevent use of deprecated numpy APIS. Add a pyproject.toml file which lists build-time dependencies so that TIRL can be built with modern tooling.
- Make sure that all source files are included in sdist
- Fix tirlscripts registry initialisation
- Move tirl.yml/tirlscripts.yml into tirl package so they are installed on end-user systems
- Guard against tirlscripts.yml being empty, or having an empty tirlscripts entry
- Remove unnecessary conda recipe