Summary of what happened:
Hello all,
I am very very new to DTI data processing and analysis, so sorry if my question is very naive.
I am using QSIPrep and QSIRecon to get the VOF bundles of subjects. I will attach the snippets that I am running. As my main question involves the individual variability and its consequences, it is very important that I get the segmented bundles residing in the native spaces of individuals.
My pipeline(attached), using IFOD outputs one .tck file containing all the bundles of the brain. QSIprep outputs preproc_T1w nifti. When I visualize the track file overlayed on the preproc_T1w nifti file, it is clear that the track file is aligned to this preproc_T1w file. However, this preproc_T1w nifti file has the same dimension (193,229,193) and affine transformation[[-1. 0. 0. 96.0] [0 -1 0 96.] [0 0 1 -78] [0 0 0 1]] across all participants. I know that the QSIPrep outputs are aligned to ACPC space, but why they share the same dimension? Most importantly, given this, are my track files in the native space?
Also, QSI recon outputs a nifti file that is labeled as desc-preproc_desc-hsvs_5tt and it has different dimensions compared to both T1 scan (176,256,256) and QSIPrep T1(135,173,137,5). What are the differences between the spaces of these nifti files? Are they in native space?
Please note that the T1 scans have the same dimension across participants too.
Thanks a lot.
Command used (and if a helper script was used, a link to the helper script or the command generated):
QSIPrep Command
docker run -it --rm \
--memory "48g" \
--volume "$HOME/Desktop/my_projects:/data" \
--volume "$HOME/Desktop/my_projects/work:/work" \
--volume "$HOME/Desktop/licenses.txt:/license.txt" \
pennbbl/qsiprep:0.18.1 \
/data /data/derivatives participant \
--output-resolution 1.2 \
--fs-license-file /license.txt \
--work-dir /work \
--nthreads 4 \
--omp-nthreads 3 \
-v -v
QSIRecon command
docker run -it --rm \
--memory "48g" \
--volume "$HOME/Desktop/my_projects:/data" \
--volume "$HOME/Desktop/license.txt:/license.txt" \
--volume "$HOME/derivatives/qsiprep:/derivatives" \
--volume "$HOME/freesurfer/subjects:/freesurferResults" \
--volume "$PWD:/recon_spec" \
pennbbl/qsiprep:0.18.1 \
/data/bids /data/derivatives participant \
--fs-license-file /license.txt \
--recon_input /derivatives \
--recon_spec /recon_spec/msmt_hsvs_pyafq.json \
--recon-only \
--freesurfer-input /freesurferResults \
--nthreads 4 \
--omp-nthreads 3 \
-v -v
QSIRecon pipeline parameters
"name": "mrtrix_msmt_pyafq",
"space": "T1w",
"atlases": [],
"anatomical": [
"mrtrix_5tt_hsvs"
],
"nodes": [
{
"name": "msmt_csd",
"software": "MRTrix3",
"action": "csd",
"output_suffix": "msmtcsd",
"input": "qsiprep",
"parameters": {
"mtnormalize": true,
"response": {
"algorithm": "dhollander"
},
"fod": {
"algorithm": "msmt_csd",
"max_sh": [
8,
8,
8
]
}
}
},
{
"name": "track_ifod2",
"software": "MRTrix3",
"action": "tractography",
"output_suffix": "ifod2",
"input": "msmt_csd",
"parameters": {
"use_5tt": true,
"method_5tt": "hsvs",
"use_sift2": true,
"tckgen": {
"algorithm": "iFOD2",
"select": 1000000,
"max_length": 250,
"min_length": 30,
"power": 0.33,
"crop_at_gmwmi": true,
"backtrack": true,
"quiet": true
},
"sift2": {}
}
},
{
"name": "pyafq_tractometry",
"software": "pyAFQ",
"action": "pyafq_tractometry",
"input": "track_ifod2",
"output_suffix": "PYAFQ_TRACTOMETRY_ET",
"parameters": {
"use_external_tracking": true,
"export": "all",
"directions": "prob",
"max_angle": 30.0,
"sphere": "",
"seed_mask": "",
"seed_threshold": 0,
"n_seeds": 1,
"random_seeds": false,
"rng_seed": "",
"stop_mask": "",
"stop_threshold": 0,
"step_size": 0.5,
"min_length": 50,
"max_length": 250,
"odf_model": "CSD",
"tracker": "local",
"nb_points": false,
"nb_streamlines": false,
"seg_algo": "AFQ",
"reg_algo": "",
"clip_edges": false,
"parallel_segmentation": "{'n_jobs': -1, 'engine': 'joblib', 'backend': 'loky'}",
"progressive": true,
"greater_than": 50,
"rm_small_clusters": 50,
"model_clust_thr": 1.25,
"reduction_thr": 25,
"refine": false,
"pruning_thr": 12,
"b0_threshold": 50,
"prob_threshold": 0,
"roi_dist_tie_break": false,
"dist_to_waypoint": "",
"rng": "",
"return_idx": false,
"presegment_bundle_dict": "",
"presegment_kwargs": "{}",
"filter_by_endpoints": true,
"dist_to_atlas": 4,
"save_intermediates": "",
"n_points": 100,
"clean_rounds": 5,
"distance_threshold": 3,
"length_threshold": 4,
"min_sl": 20,
"stat": "mean",
"min_bval": "",
"max_bval": "",
"filter_b": true,
"robust_tensor_fitting": false,
"csd_response": "",
"csd_sh_order": "",
"csd_lambda_": 1,
"csd_tau": 0.1,
"gtol": 0.01,
"brain_mask_definition": "",
"bundle_info": "",
"reg_template_spec": "mni_T1",
"mapping_definition": "",
"reg_subject_spec": "power_map",
"profile_weights": "gauss",
"scalars": "['dti_fa', 'dti_md']",
"import_tract": "",
"sbv_lims_bundles": "[None, None]",
"volume_opacity_bundles": 0.3,
"n_points_bundles": 40,
"sbv_lims_indiv": "[None, None]",
"volume_opacity_indiv": 0.3,
"n_points_indiv": 40,
"viz_backend_spec": "plotly_no_gif",
"virtual_frame_buffer": false
}
}
]
}
Version:
0.18.1
Environment (Docker, Singularity / Apptainer, custom installation):
Docker
Data formatted according to a validatable standard? Please provide the output of the validator:
PASTE VALIDATOR OUTPUT HERE
Relevant log outputs (up to 20 lines):
PASTE LOG OUTPUT HERE