Neonatal Brain Structural Connectome

Hi all,
I am creating Structural Connectome Matrix for a preterm neonatal brain (Gestational Age=32 weeks).
I wanted to make sure the steps I am adopting are correct.
My data consist in:

  • dki_bfc.mif → diffusion image after preprocessing with Mrtrix3 (denoising, unringing, distortion corrections and bias field corrections) (resolution: 1.55556 x 1.55556 x 2.2 x 1)
  • 3dT1_corr_brain.nii.gz → structural T1 image after bias field correction and skull stripping (resolution: 0.890003 x 0.885417 x 0.885417)
  • mean_b0_BRAIN_corr.nii.gz → mask image in diffusion space

First of all, I registered skull-stripped T1 image to mean b=0 diffusion image, though keeping its higher resolution through trasformconvert command

flirt -in mean_b0_BRAIN_corr.nii.gz -ref 3dT1_corr_brain.nii.gz -dof 6 -omat DKI_2_T1.mat
transformconvert DKI_2_T1.mat mean_b0_BRAIN_corr.nii.gz 3dT1_corr_brain.nii.gz  flirt_import DKI_2_T1_mrtrix.txt 
mrtransform -linear DKI_2_T1_mrtrix.txt -inverse 3dT1_corr_brain.nii.gz ${SBJDIR}/T1_in_DKI.nii.gz

Then, I computed 5TT Nifti for ACT/SIFT using -premasked option since T1 is already skull stripped

mrconvert T1_in_DKI.nii.gz anat.nii 
5ttgen fsl anat.nii 5tt.mif -premasked

I computed GMWMI Nifti for ACT/seeding

5tt2gmwmi 5tt.mif gmwmi.mif

I estimated msmt response function

dwi2response msmt_5tt dki_bfc.mif 5tt.mif resp_wm.txt resp_gm.txt

I computed msmt FODs

dwi2fod msmt_csd dki_bfc.mif -mask mean_b0_BRAIN_corr.nii.gz resp_wm.txt fod_WM.mif resp_gm.txt fod_GM.mif resp_csf.txt fod_CSF.mif

I downsample FODs for faster tracking using mrgrid

mrgrid fod_WM.mif regrid -scale 0.5 -interp sinc fod_WM_ds.mif

I generated first tractogram (50million streamlines)

tckgen fod_WM_ds.mif tracks_msmt_50M.tck -act 5tt.mif -backtrack -crop_at_gmwmi -seed_gmwmi gmwmi.mif -maxlength 250 -select 50M -cutoff 0.01 -step 1

I applied SIFT to reduce to 5million streamlines

tcksift tracks_msmt_50M.tck fod_WM_ds.mif tracks_msmt_5M_01.tck -act 5tt.mif -term_number 5000000

As atlas, I wanted to use skull-stripped T1 of JHU neonate atlas (https://cmrm.med.jhmi.edu/cmrm/Data_neonate_atlas/atlas_neonate.htm). It has 122 parcellations listed from 1 to 122 in the attached file (JHU_neonate_lut.pdf) , and interleaved from right and left hemisphere. I registered those ROIs (LABELS_dki_corr.nii.gz) to diffusion space using nearest neighbour interpolations.
My question now concerns how to generate the connectome matrix from this starting point.
Since, Look-Up table is already well-ordered I thought of skipping labelconvert command, and simply run:

tck2connectome tracks_msmt_5M_01.tck LABELS_dki_corr.nii.gz connectome.csv

Is this correct or should I organize and select parcels? Can I use all of them (122)?
Doing so the resulting connectome visualization results as follows, after importing it in MATLAB

sc=importdata('connectome.csv')
sc=triu(dt,1)+triu(dt,1)'
imagesc(sc)

imageProcessing: JHU_neonate_lut.txt…
JHU_neonate_lut.pdf (34.9 KB)

Hi @ros ,

For registration, I would use the main B0 masked, not the mask itself (maybe I understand it wrong and you are already doing that).

I never use 5ttgen for this cohort (I never made it work properly), instead I use specific neonatal segmentation algorithm, the dHCP pipeline for example. You can see the results I obtain here.

For the response function calculation, I would use the dhollander algorithm. Note than you don’t need a tissue segmentation for that, and then for the response function calculation I only use two components: WM and CSF. If my understanding is correct, the separation between WM and GM in this populations is not good, so it is better to use just two comparments.

The tractography + SIFT: the -cutoff of 0.01 seems too low, probably it will include a lot of noisy tracts/ false positives. Is there any reason to use SIFT instead of SIFT2?

If the labels of the atlas are listed from 1 to 122 you can apply it straight away. However, the JHU atlas includes WM parcels that probably you should remove for your connectome creation. Then you have to reorder your labels using labelconvert.

One final thought: if you are interested to perform population studies, you should use the same response function for all of them and mtnormalise.

I hope this helps.

Best regards,

Manuel

1 Like

Thank you very much!

I will try to implement all the steps you suggest ! Which -cutoff do you suggest if 0.01 is too low?
Moreover, do I have to remove all WM parcels from JHU atlas? Do you suggest another atlas more suitable for that?
Finally, I didn’t understand completely how to use labelconvert command: labelconvert JHU_neonate_lut.txt ordered_parcels.nii.gz , and I don’t know what to put instead of “
thank you very much
Rosella

Hi,

Ideally, you have to experiment with this value, but I would leave it as default (0.05 or 0.1, depending of the version).

There are a lot of atlases you could use, nowadays I use the M-CRIB atlas, as the areas are the same as Freesurfer, but this is a personal choice. For this atlas, the lut table can be found here. For the rest, you will have to create it.

You need an edited version of the lut table (you have to create it), including only the labels you want to keep with the new ID number. You can have a look to the ones provided by MRtrix and see what you need.

Best regards,

Manuel

1 Like

Ok I will try to follow your pipeline as well as your atlas. Thank you very much for your precious help.
Rosella