.. _page_population_template: Creating a bundle template from a chosen population =================================================== Scilpy scripts enable users to create a WM bundle population template, such as described in figure 3 in our upcoming paper. Such a pipeline includes: 1) segmenting the bundle of interest in each subject’s tractogram. The segmentation of bundles can be based on ROIs of inclusion / exclusion (:ref:`scil_tractogram_segment_with_ROI_and_score` or :ref:`scil_tractogram_filter_by_roi`) or based on the general shape of the streamlines (:ref:`scil_tractogram_segment_with_recobundles`, :ref:`scil_tractogram_segment_with_bundleseg`). See :ref:`page_tractogram_segmentation` for more information on this. 2) registering the bundles to a reference space (e.g., MNI space) and analysing the inter-subject variability, 3) combining them into a reference bundle template, similarly to how one would average many structural MRI images to create a brain template. 4) analysing the results. Then, registration can be performed (see :ref:`page_tractogram_registration`). The tractograms can be downsampled and concatenated (see :ref:`page_tractogram_math`) and even concatenated to their flipped version to obtain a symmetrical template. .. image:: /_static/images/scilpy_paper_figure3.png :alt: Figure 3 in upcoming paper. :width: 75% Preparing data for this tutorial ******************************** To download data for this tutorial, see page :ref:`page_getting_started`. Then do: .. code-block:: bash MNI=$in_dir/mni_masked.nii.gz # Current wmparc is in float. Should be in int. Let's convert. scil_volume_math convert $in_dir/sub-01/sub-01__wmparc.nii.gz \ --data_type int16 -f $in_dir/sub-01/sub-01__wmparc.nii.gz The labels come from a `Freesurfer `_ segmentation, and the labels that it contains are found `in the FsWiki's Color Look-up Table (LUT) `_ . .. tip:: You may download the complete bash script to run the whole tutorial in one step `⭳ here <../../_static/bash/bundle_analysis/create_population_template.sh>`_. Step A. Prepare the bundle of interest in each subject ****************************************************** .. code-block:: bash for subj in "sub-01" # "sub-02" ... If we have many subjects, we can loop on each one do mkdir $subj echo "----> Processing subject $subj" # 1) Use any tool as you want to obtain a gray matter (GM) segmentation of # your volume. Ex: Freesurfer. Here we already have wmparc.nii.gz. # 2) Split your volume into binary masks associated to each label. scil_labels_split_volume_by_ids $in_dir/$subj/${subj}__wmparc.nii.gz \ --out_dir $subj/labels/ -v # 3) Segment the bundle using labels 2024 (ctx-rh-precentral) and 16 (Brain-Stem). # The command below keeps all streamlines with at least one endpoint inside # label 2024 and one endpoint inside label 16. This should select a CST bundle. # The last numbers (3 and 2) are the maximum distance accepted for a endpoint # to be considered inside the ROI. in_tractogram=$in_dir/$subj/${subj}_local_tractogram.trk out_tractogram=$subj/CST.tck scil_tractogram_filter_by_roi $in_tractogram $out_tractogram \ --drawn_roi $subj/labels/2024.nii.gz either_end include 3 \ --drawn_roi $subj/labels/16.nii.gz either_end include 2 -v # 4) Register to MNI space. # You can use any tool for this, such as ANTs # Here is how *we* created the transformation files. # You need to have ANTs installed to run this: # mkdir $in_dir/$subj/transfo/ # antsRegistrationSyNQuick.sh -d 3 -m $MNI \ # -f $in_dir/$subj/${subj}__fa.nii.gz -t r \ # -o $in_dir/$subj/transfo/MNI_ -n 4 transfo=$in_dir/$subj/transfo/MNI_0GenericAffine.mat # 5) Apply the transformation to your tractogram. # Uses the ANTs transformation. We used linear registration so we # can use the .mat output. in_bundle=$subj/CST.tck out_bundle=$subj/CST_MNI.tck ref=$in_dir/$subj/${subj}__fa.nii.gz scil_tractogram_apply_transform $in_bundle $MNI $transfo $out_bundle \ --inverse --cut_invalid --reference $ref # 6) (optional) You could subsampled subsets of streamlines in_bundle=$subj/CST_MNI.tck out_bundle=$subj/CST_MNI_resampled1000.tck scil_tractogram_resample $in_bundle 1000 $out_bundle \ --never_upsample --reference $MNI done Step B. Quantify inter-subject variability ****************************************** We may quantify the overlap between all bundles across subjects. .. code-block:: bash scil_bundle_pairwise_comparison $out_dir/*/CST_MNI.tck \ $out_dir/cst_stats.json --reference $MNI Step C. Combine all subjects into a population template ******************************************************* Let's combine all streamlines from all subjects and visualize the result. .. code-block:: bash # 1) Merge all CST files from all subjects together scil_tractogram_math union $out_dir/*/CST_MNI_resampled1000.tck \ $out_dir/merged_CST_MNI.tck --reference $MNI # 2) Compute the density map scil_tractogram_compute_density_map $out_dir/merged_CST_MNI.tck \ $out_dir/merged_CST_MNI_density.nii.gz --reference $MNI # 3) We color the streamlines with the values of the density map to create # the figure shown in step 7 of the figure. scil_tractogram_assign_custom_color $out_dir/merged_CST_MNI.tck \ $out_dir/merged_CST_MNI.tck --reference $MNI -f \ --from_anatomy $out_dir/merged_CST_MNI_density.nii.gz