The purpose of this example is essentailly do a better job of the analysis we did in Example 1 on the same data using the BASIL tools in FSL. Thus this example incorporates various corrections, for motion and distortion, as outlined in Chapter 2 of the primer. The example then goes on to explore calibration (Chapter 5), partial volume correction (Chapter 6) and analysis using epochs (Chapter 7).
NOTE that we reccomend you use FSL v6.0.1 (or higher) for these exercises.
For this example you should use the Single PLD pcASL dataset set. This ASL data was acquired using pcASL labelling with a label duration of 1.8 seconds and a post-labelling delay (PLD) of 1.8 seconds, following the recommendations of the ASL consensus paper.
Get the data
We can proceed to do the full quantification using a single call to
oxford_asl
as we did in Example 1, only now with a few extra options:
oxford_asl -i asltc -o oxasl --wp --casl --iaf=tc --tis=3.6 --bolus=1.8 --slicedt=0.0452 --spatial --mc -c aslcalib --tr 4.8 --cblip=aslcalib_PA --pedir=y --echospacing=0.00095
Note that we have now specified:
--mc
. This is
simply an application of mcflirt
to the ASL series, as
well as realignment of the calibration images to the series
too.--cblip=aslcalib_PA.nii.gz --pedir=y
--echospacing=0.00095
.--spatial
. This will reduce the
appearance of noise in the final perfusion image and effect the
minimum ammount of smoothing appropriate for the data.
For this analysis we still have oxford_asl
into 'White
Paper' mode (--wp
).Specifically this tells it to use the
simplest kinetic model that assumes all delivered blood-water has
the same T1 as that of blood (see Chapter 4 of the ASL primer for
more information) and that the Arterial Transit Time should be
treated as 0 seconds.
To view the final result:
fsleyes oxasl/native_space/perfusion_calib.nii.gz
The result will be similar to the analysis in Example 1 although the effect of distortion correction should be noticeable in the anterior protion of the brain. The effects of motion correction are less obvious, this data does not have a lot of motion corruption in it.
Thus far all of the analyses have relied purely on the ASL data alone. However, often you will have a (higher resolution) structural image in the same subject and would like to use this as well, at the very least as part of the proceess to transform the perfusion images into some template space.
We can repeat the analysis above but now providing structural
information to oxford_asl
. The recommended way to do
this is to take your T1 weighted structural image (which is most
common) and firstly process using fsl_anat
, passing the
output directly from that tool to oxford_asl
:
fsl_anat -i T1.nii.gz oxford_asl -i asltc -o oxasl --wp --casl --iaf=tc --tis=3.6 --bolus=1.8 --slicedt=0.0452 --spatial --mc \ -c aslcalib --tr 4.8 --cblip=aslcalib_PA --pedir=y --echospacing=0.00095 --fslanat=T1.anat
This analysis will take longer overall, although the extra time is taken up doing registration between ASL and structural images.
You will now find some new results in the output directory:
oxasl/struct_space
- this sub-drectory contains results
transformed into the same space as the structural image. The
files in here will match those in the native_space
subdirectry of the earlier analysis, i.e., containing perfusion
images with and without calibration.oxasl/native_space/asl2struct.mat
- this is the
(linear) transformation between ASL and structural space. It can be
used along with a transofrmation between sturcutral and template
space to transofrm the ASL data into the template space. It was used
to creat the results in oxasl/struct_space
.oxasl/native_space/perfusion_calib_gm_mean.txt
-
this contains the result of calculating the perfusion within a gray
matter mask, these are in ml/100g/min. The mask was derived from the partial volume estimates
created by fsl_anat
and transformed into ASL space
followed by thresholding at 70%. This is a helpful check on the
absolute perfusion values found and it is not aytpical too see
values in the range 30-50 here. There is also a white matter result
(for which a threshold of 90% was used).oxasl/native_space/gm_mask.nii.gz
- this is the gray
matter mask used in the above calculations. There is also the
associated white matter mask.oxasl/native_space/gm_roi.nii.gz
- this is another
mask that represents areas in which there is some grey matter (at
least 10% from the partial volume estimates). This can be useful for
visualisation, but mainly when looking at partial volume corrected
data.Thus far the calibration to get perfsion in units of ml/100g/min has been done using a voxelwise division of the realtive perfusion image by the (suitbaly corrected) calibration image - so called 'voxelwise' calibration. This is in keeping with the recommendations of the ASL White Paper for a simple to implement quantitative analysis. However, we could also choose to use a reference tissue to derive a single value for the equilirbirum mangetizstion of arterial blood and use that in the calibnration process:
oxford_asl -i asltc -o oxasl --bat=0 --casl --iaf=tc --tis=3.6 --bolus=1.8 --slicedt=0.0452 --spatial --mc \ -c aslcalib --tr 4.8 --cblip=aslcalib_PA --pedir=y --echospacing=0.00095 --fslanat=T1.anat
Notice the change in the command: --wp
has been replaced by --bat=0
. In this run
oxford_asl
is no longer in 'White Paper' mode, but we
are keeping with the assumption (implicitly) made by the ASL White
Paper that arterial transit time is zero (for historical reasons oxford_asl
calls it bat rather than att). The major difference is that
oxford_asl
uses with the
--cmethod
option.
The resulting perfusion images should look very similar to those
produce using the voxelwise calibration, and the absolute values
should be similar too. For this, and many datasets, the two methods
are broadly equivalent. You can check on some of the interim
calcuations for the calibration by looking in the
oxasl/calib
subdirectory: here you will find the value
of the estimated equilirbirum mangetization of arterial blood for
this dataset in M0.txt
and the reference tissue mask in
refmask.nii.gz
. It is worth checking that the latter
does indeed only lie in the venticles when overlaid on an ASL image
(e.g. the perfusion image or the calibration image), it should be
conservative, i.e., only select voxels well within the ventricles
and not on the boundary with white matter.
Having dealt with structural image and in the process obtained partial volume estimates we are now in a position to do partial volume correction. This does more than simply attempt to estimate the mean perfusion within the grey matter by the definition of an ROI based on the partial voume estimates, but attempts to derive and image of gray matter perfusion directly (along with a separate image for white matter).
As long as the structural image is available
oxford_asl
will allow you to do partial volume
correction by the addition of the --pvcorr
option:
oxford_asl -i asltc -o oxasl --bat=0 --casl --iaf=tc --tis=3.6 --bolus=1.8 --slicedt=0.0452 --spatial --mc \ -c aslcalib --tr 4.8 --cblip=aslcalib_PA --pedir=y --echospacing=0.00095 --fslanat=T1.anat --pvcorr
In the results directory you will still find an analysis performed
without partial volume correction in oxasl/native_space
as before. The results of partial volume correction can be found in
oxasl/native_space/pvcorr
. This new subdirectory has the
sam structure as the non-corrected results, only now
perfusion_calib.nii.gz
is an estimate of perfusion only
in gray matter, it has been joined by a new set of images for the
estimation of white matter perfusion, e.g.,
perfusion_wm_calib.nii.gz
. It may be more helpful to look at
perfusion_calib_masked.nii.gz
(and the equivalent
perfusion_wm_calib_masked.nii.gz
) since this has been
masked to include on voxels with more than 10% gray matter (white
matter), i.e., voxels in which it is reasonable to interpret the gray
matter (white matter) perfusion values.
It is possible to analyse subsets of this ASL data to look for potential fluctuations in perfusion during the scan. As this was a resting scan wemight not expect to see large chanages; but, the principles of analysing 'epochs' of data can be applied in setigns where gradual or unpredictable perfusion changes might occur
For epoch analysis we have to specifcy the 'length' of the epoch to use (number of volumes to be extracted for each perfusion image created) and the overlap between epochs (again the number of volumes). Here we will use epochs of 10 volumes with an overlap of 5, giving a total of 5 epochs.
oxford_asl -i asltc -o oxasl --bat=0 --casl --iaf=tc --tis=3.6 --bolus=1.8 --slicedt=0.0452 --spatial --mc \ -c aslcalib --tr 4.8 --fslanat=T1.anat \ --elen=10 --eol=5
As before this will produce a perfusion image using the whole of
the data which is found in the native_space
subdirectory. This will have been joined by a series of
sub_directories, epoch0000
... epoch0004
,
that contain the results of analysis of only the label-control images
in each epoch.
In this example we have allowed oxford_asl
to do the
distortion correction, which uses TOPUP internally. You can opt to
do this for yourself, which may be necessary if your data is not in
the form oxford_asl
expects, e.g., you do not have
blip-reversed calibration images.
To do distortion correction using TOPUP on this data you would need to do the following:
Run TOPUP to estimate the distortion.
fslmerge -t aslcalib_blipped aslcalib aslcalib_PA echo "0 1 0 0.06" > topup_params.txt echo "0 -1 0 0.06" >> topup_params.txt topup --imain=aslcalib_blipped --datain=topup_params.txt --config=b02b0.cnf --out=topup_results
Apply the correction to the calibration images.
applytopup --imain=aslcalib,aslcalib_PA --inindex=1,2 --datain=topup_params.txt --topup=topup_results --out=aslcalib_corr --method=jac
Apply the correction to the ASL series.
applytopup --imain=asltc --datain=topup_params.txt --inindex=1 --topup=topup_results --out=asltc_corr --method=jac
We can do a quick check to see if this has worked by looking at the
PWI, which we can generate using asl_file
:
asl_file --data=id${id}_asltc_corr --ntis=1 --iaf=tc --diff --out=asldiffdata_corr --mean=asldiffdata_corr_mean
Compare this to the uncorrected case:
asl_file --data=asltc --ntis=1 --iaf=tc --diff --out=asldiffdata --mean=asldiffdata_mean fsleyes asldiffdata_mean asldiffdata_corr_mean
Ideally we would like to apply motion correction together with distortion correction (having derived suitable estimates of their separate effects first). A pragmatic compromise would be to do the motion correction first and then the disotortion correction.
The partial volume correction in oxford_asl
is based
on a method that exploits the Bayesian inference methods built into
BASIL. However, you can opt to use the alternative Linear Regression
approach should you wish. To do this you have to do the correction in
a first step, using asl_file
, prior to quantification
using oxford_asl
:
# get partial volume estimates into the ASL space convert_xfm -omat struct2asl.mat -inverse oxasl/native_space/asl2struct.mat applywarp --ref=asltc --in=T1.anat/T1_fast_pve_1 --out=pvgminasl --premat=struct2asl.mat --super --interp=spline --superlevel=4 # do linear regression on the ASL difference data asl_file --data=asltc --ntis=1 --iaf=tc --diff --out=asldiffdata asl_file --data=asldiffdata --ntis=1 --iaf=diff --mask=oxasl/native_space/mask \ --pvgm=pvgminasl --pvwm=pvwminasl --kernel=5 --out=asldiff_LR # do the quantification on the LR corrected difference data oxford_asl -i asldiff_LR -o oxasl_LR --spatial --bat=0 --iaf=diff --casl --tis=3.6 --bolus=1.8 --slicedt=0.0452 \ -c aslcalib --csf=oxasl/calib/refmask --cmethod=single fslmaths oxasl_LR/native_space/perfusion_calib -mas oxasl/native_space/gm_mask LR_perfusion_calib_masked
Note that we have made use of the results from a previous run of oxford_asl on the non-corrected data for things like the brain mask, transformation between ASL and structural space and the grey matter mask. This routine only computes gray matter perfusion, a similar approach could be taken for white matter.