Contents
Introduction
This tutorial runs through the use of oxford_asl (the command line tool) on a number of different multi-TI ASL datasets.The data can be found here (~50 MB)
Please note that the data is only provided for training purposes and should not be used for research without permission.
DATASET 1: pulsed ASL
This dataset is resting-state ASL data collected using a single-shot three-dimensional GRASE readout, TR/TE 3110/23 ms, 3.44x3.44x5mm, 22 slices using a matrix size 64x64, FAIR preparation, background suppression. Alternating control and tag pairs were acquired with 10 TIs (400, 620, 840, 1060, 1280, 1500, 1720, 1940, 2160, 2380 ms), each one repeated 10 times. The data is in the directory data_pasl.
In this case the tag-control subtraction has already been done and the multiple measurements at each TI have been averaged, this has been put in the file diffdata.nii.gz. (In a later exercise we will see how that was done). Have a look at the differenced data using FSLview:
fslview pasl_data/diffdata &
You might like to flick through the different volumes and see if you can spot the label washing in and then decaying away again. Notice that the label arrives in some regions later than others.
Exercise 1.1: CBF estimation
Firstly we are going to do the model-fitting. Try typing this in your terminal
oxford_asl
If you call oxford_asl without any options you get the usage information. There is a lot of functionality (and we do not want to use all of it now), the three main things it can do are: model-fitting, registration and calibration. We need to do model-fitting to get CBF from the multi-TI data, so we will need:
- The tag-control differenced ASL data - we have this already.
- The TIs that were used to acquire the data - 0.4,0.62,0.84,1.06,1.28,1.5,1.72,1.94,2.16,2.38.
- The duration of the ASL bolus - the acquisition was FAIR, so the bolus duration is determined by the labelling coil (body). In fact the bolus duration for this data is around 1.1 s, so we will use that value, but allow the model fitting to refine that estimate (this is automatically done by oxford_asl unless we tell it otherwise).
- A starting guess for the bolus arrival time - we will take the default of 0.7 s, we dont need to be very precise as the model-fitting should work this out for us.
- Values of T1 and T1b for the field strength we used - data was aquired at 3T so use T1 of 1.3 s and T1b of 1.6 s.
We have all the information we need so all we have to do is run this command (check you understand what each bit does):
oxford_asl -i data_pasl/diffdata --tis 0.4,0.62,0.84,1.06,1.28,1.5,1.72,1.94,2.16,2.38 -o ex1_1 --bolus 1.1 --bat 0.7 --t1 1.3 --t1b 1.66 --artoff --spatial
Notice that we have turned off the estimation of the macrovascular component (--artoff), we will come back to this. We are using the 'spatial' mode, which is recommened as it exploits the natural spatial smoothness of the estimated CBF image.
In the results directory, ex1_1, you will find a native_space directory that contains all the estimated images at the same resolution as the original data. You should find in there (and look at using FSLview):
perfusion.nii.gz The estimated CBF image in the same (arbitrary) units as the original data.
arrival.nii.gz The estimated bolus arrival time image (in seconds).
Since we would like the estimated CBF in physiological units (ml/100g/min) we also need:
- Calibration data - we have aslcalib.nii.gz which was acquired using the same readout but no inversion and no background suppression.
- A reference 'tissue' - in this case we are going to use CSF as our reference (yes it isn't actually a 'tissue').
oxford_asl will, if given a structural image, try to automatically segment out the ventricles and use these as a CSF reference for calibration. We want a slightly quicker result, so there is a previously defined CSF mask, csfmask.nii.gz, to use. In this case there was a difference in the gain of a factor of 10 used when acquiring the calibration data (no background suppression) and the main ASL data (with background suppression).
Run the command again but with the extra calibration information supplied:
oxford_asl -i data_pasl/diffdata --tis 0.4,0.62,0.84,1.06,1.28,1.5,1.72,1.94,2.16,2.38 -o ex1_1 --bolus 1.1 --bat 0.7 --t1 1.3 --t1b 1.66 --artoff --spatial -c pasl_data/aslcalib --csf pasl_data/csfmask --cgain 10
You should now find in the results directory an extra image: perfusion_calib.nii.gz, which is the estimated CBF image in ml/100g/min having used the separate calibration information. You should also find a calib subdirectory that includes the results of the calibration process, the main one being M0.txt that contains the estimated equilibrium magnetization of arterial blood (in scanner units). This M0 value was used to scale the perfusion image to get it into physiological units.
Exercise 1.2: CBF estimation with a macro vascular component
In the previous exercise we only fit a tissue based kinetic curve to the data. However, the data was not aquired with flow supression so there should be a substantial contirbution from ASL label still within larger vessels. What we should do, therefore, is to add a macro vascular component to account for this:
oxford_asl -i data_pasl/diffdata -c aslcalib --csf csfmask --tis 0.4,0.62,0.84,1.06,1.28,1.5,1.72,1.94,2.16,2.38 -o ex1_2 --bolus 1.1 --bat 0.7 --t1 1.3 --t1b 1.66 --spatial
Notice that we have run exactly the same command as the previous exercise, we have just removed --artoff. By default oxford_asl always fits the macro vascualr component, even with flow suppression some arterial label can still be present.
In the results directory, ex1_2, you will find the perfusion and arrival results again, along with an image called aCBV.nii.gz, this is the estimated arterial cerebral blood volume image from the macro vascular component. Compare the images from this exercise with the previous one. Notice that the CBF is lower and arrival time is later where the magntiude of the aCBV image is large - around regions where large vessels would be expected.
DATASET 2: pseudo continuous ASL
This dataset is resting-state pcASL data collected using an EPI readout, TR/TE 3750/14 ms, 3.75x3.75x7.5mm, 24 slices using a matrix size 64x64. Alternating control and tag pairs were acquired after 1.4 s of labelling at 5 different post labelling delays (200, 400, 600, 800, 1000 ms), each one repeated 12 times. The data is in the directory pcasl_data
We are going to need to know what the inversion times were for each measurement. For pASL this was the time between labelling and readout. For cASL we need the time from the start of labelling to readout, so our TI = labelling duration + post labelling delay. Thus the TIs are: 1.6, 1.8, 2.0, 2.2, 2.4 s.
Exercise 2.1: Tag-control subtraction
The first thing we need to do is take the raw ASL data and do tag-control subtraction to remove the static tissue contribution. We are also going to take the average of the multiple measurements at each TI to make the model-fitting faster (in practice would could skip this as oxford_asl could do this for us). We could split the data into separate volumes and do subtraction and averaging of these images before re-assembling it all together, but that would be tedious! Instead we have a command that knows how to deal with ASL data, what we want to do is:
asl_file --data=data_pcasl/asl_raw_data --ntis=5 --ibf=rpt --iaf=tc --diff --mean=pcasl_diffdata
The command tells asl_file:
- Where to find the data.
- How many TIs there are in the file.
- That the data contains repeated measurements (where we have cycled through all the TIs each time).
- That the data is in tag-control pairs.
- That we want to do pairwise subtraction.
That it should take the mean of each TI and save that as the output file in the current directory: pcasl_diffdata.
Have a look at the data (pcasl_diffdata) in FSLview as we did for the pASL data. This set will look a bit different as we only have 5 TIs and these are all placed so that they will be near the peak of the kinetic curve. So we dont see the nice clear wash in of the label as we did before.
Exercise 2.2: CBF estimation
We will do CBF estimation in a very similar way to the pASL data. However, this time we will:
Use a cASL model with the --casl option.
Set the bolus duration to 1.4 s - the length of labeling. Since the cASL label is well defined we wont try to estimate its duration, so we add the --fixbolus option.
Supply a structural image, which means that oxford_asl will try to register the ASL data to the structural image and give the CBF results in the same space at the structural. By default oxford_asl will try to register the estimated CBF image to the structural, this can be problematic as there may not be excellent contrast for this. The raw ASL data is a much better basis for registration so we will instruct oxford_asl to use this with the --regfrom commmand.
Not supply a CSF mask. We will let oxford_asl automatically identify the CSF using the structural image.
The full command we need is (again see if you can identify what each term does):
oxford_asl -i pcasl_diffdata -c data_pcasl/calibration_head --tis 1.6,1.8,2.0,2.2,2.4 -o ex2_2 --bolus 1.4 --bat 0.7 --t1 1.3 --t1b 1.66 --artoff --fixbolus --spatial --casl -s data_pcasl/struc --regfrom data_pcasl/asl_raw_data
In the results directory, ex2_2, you will find a native_space set of results, but also the same results at the resolution of the structural image (struct_space). As with the pASL results there are perfusion and bolus arrival time images. Since we only have 5 tightly spaced TIs we wont expect our arrival time images to be as good. You will also notice from the arrival time image that the mask generated by oxford_asl wasn't perfect - it includes all the brain, but some non brain too. We could have made our own mask and supplied it to oxford_asl with the -m option if we had wanted to. It is also worth looking at ex2_2/calib/refmask.nii.gz as this is the mask that was used to indentify the CSF in the calibration image, you should check that it looks like voxels within the ventricles have been indentified.
When we analysed the pASL data we also added a macro vascular component into the model. However, we wont do that here since all the TIs we have come quite late and we are likely to have missed most of the early arriving arterial based label.
DATASET 3: QUASAR
The QUASAR variant of ASL makes use of a combination of flow suppressed and non suppressed multi-TI data to allow for a better separation of the tissue and macro vascular signals. This aids model-based analysis and also permits 'model-free' analysis similar to that used in DSC-MRI. QUASAR data also has all the information within it to do the calibration step. Because the QUASAR sequence is well defined we dont have to worry about all the options in oxford_asl, in fact there is a special version specifcally desgined for QUASAR data called quasil. Again just trying the command brings up the usage - there are not many options this time!
Exercise 3.1: Model-based analysis
Firstly we are going to do a model-based analysis, just like we did in exercise 2, but tailored for QUASAR data. The command we want is:
quasil -i data_quasar/data -o ex3_1
In the results directory, ex3_1, you should find perfusion and aCBV images to examine.
Exercise 3.2: Model-free analysis
Now we are going to compare the model-based results with numerical deconvolution (this is the method proposed in Petersen's original paper). quasil will also do this using the --mfree option:
quasil -i data_quasar/data -o ex3_2 --mfree
Like the model-based analysis both perfusion and aCBV images are produced. Compare the model-based and model-free results, you should find that the model-free perfusion values are generally lower than the model-based results, primiarly due to the underestimation of the numerical deconvolution.
Acknowledgments
Thanks are due to Brad MacIntosh, Dan Gallichan, Michael Kelly, Esben Petersen and Xavier Golay for the provision of the ASL data used in these exercises.