workflows.dmri.fsl.artifacts¶
all_fmb_pipeline()
¶
Builds a pipeline including three artifact corrections: head-motion correction (HMC), susceptibility-derived distortion correction (SDC), and Eddy currents-derived distortion correction (ECC).
The displacement fields from each kind of distortions are combined. Thus, only one interpolation occurs between input data and result.
Warning
this workflow rotates the gradients table (b-vectors) [Leemans09].
Examples¶
>>> from nipype.workflows.dmri.fsl.artifacts import all_fmb_pipeline
>>> allcorr = all_fmb_pipeline()
>>> allcorr.inputs.inputnode.in_file = 'epi.nii'
>>> allcorr.inputs.inputnode.in_bval = 'diffusion.bval'
>>> allcorr.inputs.inputnode.in_bvec = 'diffusion.bvec'
>>> allcorr.inputs.inputnode.bmap_mag = 'magnitude.nii'
>>> allcorr.inputs.inputnode.bmap_pha = 'phase.nii'
>>> allcorr.inputs.inputnode.epi_param = 'epi_param.txt'
>>> allcorr.run()
Graph¶
![digraph hmc_sdc_ecc{
label="hmc_sdc_ecc";
hmc_sdc_ecc_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_B0indices[label="B0indices (utility)"];
hmc_sdc_ecc_b0_avg_pre[label="b0_avg_pre (utility)"];
hmc_sdc_ecc_bet_dwi_pre[label="bet_dwi_pre (fsl)"];
hmc_sdc_ecc_b0_avg_post[label="b0_avg_post (utility)"];
hmc_sdc_ecc_bet_dwi_post[label="bet_dwi_post (fsl)"];
hmc_sdc_ecc_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_B0indices;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_b0_avg_pre;
hmc_sdc_ecc_B0indices -> hmc_sdc_ecc_b0_avg_pre;
hmc_sdc_ecc_B0indices -> hmc_sdc_ecc_b0_avg_post;
hmc_sdc_ecc_b0_avg_pre -> hmc_sdc_ecc_bet_dwi_pre;
subgraph cluster_hmc_sdc_ecc_motion_correct {
label="motion_correct";
hmc_sdc_ecc_motion_correct_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_motion_correct_SplitDWI[label="SplitDWI (utility)"];
hmc_sdc_ecc_motion_correct_InsertRefmat[label="InsertRefmat (utility)"];
hmc_sdc_ecc_motion_correct_Rotate_Bvec[label="Rotate_Bvec (utility)"];
hmc_sdc_ecc_motion_correct_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_motion_correct_inputnode -> hmc_sdc_ecc_motion_correct_SplitDWI;
hmc_sdc_ecc_motion_correct_inputnode -> hmc_sdc_ecc_motion_correct_SplitDWI;
hmc_sdc_ecc_motion_correct_inputnode -> hmc_sdc_ecc_motion_correct_SplitDWI;
hmc_sdc_ecc_motion_correct_inputnode -> hmc_sdc_ecc_motion_correct_Rotate_Bvec;
hmc_sdc_ecc_motion_correct_SplitDWI -> hmc_sdc_ecc_motion_correct_InsertRefmat;
subgraph cluster_hmc_sdc_ecc_motion_correct_DWICoregistration {
label="DWICoregistration";
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_SplitDWIs[label="SplitDWIs (fsl)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_MskDilate[label="MskDilate (fsl)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_InitXforms[label="InitXforms (utility)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_DWEqualize[label="DWEqualize (utility)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_Bias[label="Bias (ants)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_B0Equalize[label="B0Equalize (utility)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration[label="CoRegistration (fsl)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_RemoveNegative[label="RemoveNegative (fsl)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_MergeDWIs[label="MergeDWIs (fsl)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_InitXforms;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_InitXforms;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_MskDilate;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_Bias;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_Bias;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_SplitDWIs;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_B0Equalize;
hmc_sdc_ecc_motion_correct_DWICoregistration_SplitDWIs -> hmc_sdc_ecc_motion_correct_DWICoregistration_DWEqualize;
hmc_sdc_ecc_motion_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_motion_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_motion_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_motion_correct_DWICoregistration_DWEqualize;
hmc_sdc_ecc_motion_correct_DWICoregistration_InitXforms -> hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_motion_correct_DWICoregistration_DWEqualize -> hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_motion_correct_DWICoregistration_Bias -> hmc_sdc_ecc_motion_correct_DWICoregistration_B0Equalize;
hmc_sdc_ecc_motion_correct_DWICoregistration_B0Equalize -> hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration -> hmc_sdc_ecc_motion_correct_DWICoregistration_outputnode;
hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration -> hmc_sdc_ecc_motion_correct_DWICoregistration_RemoveNegative;
hmc_sdc_ecc_motion_correct_DWICoregistration_RemoveNegative -> hmc_sdc_ecc_motion_correct_DWICoregistration_MergeDWIs;
hmc_sdc_ecc_motion_correct_DWICoregistration_MergeDWIs -> hmc_sdc_ecc_motion_correct_DWICoregistration_outputnode;
}
hmc_sdc_ecc_motion_correct_InsertRefmat -> hmc_sdc_ecc_motion_correct_Rotate_Bvec;
hmc_sdc_ecc_motion_correct_InsertRefmat -> hmc_sdc_ecc_motion_correct_outputnode;
hmc_sdc_ecc_motion_correct_Rotate_Bvec -> hmc_sdc_ecc_motion_correct_outputnode;
hmc_sdc_ecc_motion_correct_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_motion_correct_SplitDWI -> hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_motion_correct_SplitDWI -> hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_motion_correct_SplitDWI -> hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_motion_correct_DWICoregistration_outputnode -> hmc_sdc_ecc_motion_correct_outputnode;
hmc_sdc_ecc_motion_correct_DWICoregistration_outputnode -> hmc_sdc_ecc_motion_correct_InsertRefmat;
}
subgraph cluster_hmc_sdc_ecc_fmb_correction {
label="fmb_correction";
hmc_sdc_ecc_fmb_correction_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_fmb_correction_PreparePhase[label="PreparePhase (utility)"];
hmc_sdc_ecc_fmb_correction_Baseline[label="Baseline (utility)"];
hmc_sdc_ecc_fmb_correction_GetFirst[label="GetFirst (fsl)"];
hmc_sdc_ecc_fmb_correction_Bias[label="Bias (ants)"];
hmc_sdc_ecc_fmb_correction_BrainExtraction[label="BrainExtraction (fsl)"];
hmc_sdc_ecc_fmb_correction_MskDilate[label="MskDilate (fsl)"];
hmc_sdc_ecc_fmb_correction_SplitDWIs[label="SplitDWIs (fsl)"];
hmc_sdc_ecc_fmb_correction_FMm_to_B0[label="FMm_to_B0 (ants)"];
hmc_sdc_ecc_fmb_correction_PhaseUnwrap[label="PhaseUnwrap (fsl)"];
hmc_sdc_ecc_fmb_correction_SettingsGrabber[label="SettingsGrabber (io)"];
hmc_sdc_ecc_fmb_correction_EffEcho[label="EffEcho (utility)"];
hmc_sdc_ecc_fmb_correction_ToRadSec[label="ToRadSec (utility)"];
hmc_sdc_ecc_fmb_correction_FMp_to_B0[label="FMp_to_B0 (ants)"];
hmc_sdc_ecc_fmb_correction_PreliminaryFugue[label="PreliminaryFugue (fsl)"];
hmc_sdc_ecc_fmb_correction_DemeanFmap[label="DemeanFmap (utility)"];
hmc_sdc_ecc_fmb_correction_AddEmptyVol[label="AddEmptyVol (utility)"];
hmc_sdc_ecc_fmb_correction_ComputeVSM[label="ComputeVSM (fsl)"];
hmc_sdc_ecc_fmb_correction_UnwarpDWIs[label="UnwarpDWIs (fsl)"];
hmc_sdc_ecc_fmb_correction_RemoveNegative[label="RemoveNegative (fsl)"];
hmc_sdc_ecc_fmb_correction_MergeDWIs[label="MergeDWIs (fsl)"];
hmc_sdc_ecc_fmb_correction_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_fmb_correction_inputnode -> hmc_sdc_ecc_fmb_correction_FMm_to_B0;
hmc_sdc_ecc_fmb_correction_inputnode -> hmc_sdc_ecc_fmb_correction_GetFirst;
hmc_sdc_ecc_fmb_correction_inputnode -> hmc_sdc_ecc_fmb_correction_DemeanFmap;
hmc_sdc_ecc_fmb_correction_inputnode -> hmc_sdc_ecc_fmb_correction_SettingsGrabber;
hmc_sdc_ecc_fmb_correction_inputnode -> hmc_sdc_ecc_fmb_correction_SplitDWIs;
hmc_sdc_ecc_fmb_correction_inputnode -> hmc_sdc_ecc_fmb_correction_PreliminaryFugue;
hmc_sdc_ecc_fmb_correction_inputnode -> hmc_sdc_ecc_fmb_correction_Baseline;
hmc_sdc_ecc_fmb_correction_inputnode -> hmc_sdc_ecc_fmb_correction_Baseline;
hmc_sdc_ecc_fmb_correction_inputnode -> hmc_sdc_ecc_fmb_correction_PreparePhase;
hmc_sdc_ecc_fmb_correction_inputnode -> hmc_sdc_ecc_fmb_correction_ComputeVSM;
hmc_sdc_ecc_fmb_correction_PreparePhase -> hmc_sdc_ecc_fmb_correction_PhaseUnwrap;
hmc_sdc_ecc_fmb_correction_Baseline -> hmc_sdc_ecc_fmb_correction_FMm_to_B0;
hmc_sdc_ecc_fmb_correction_Baseline -> hmc_sdc_ecc_fmb_correction_FMp_to_B0;
hmc_sdc_ecc_fmb_correction_GetFirst -> hmc_sdc_ecc_fmb_correction_Bias;
hmc_sdc_ecc_fmb_correction_Bias -> hmc_sdc_ecc_fmb_correction_BrainExtraction;
hmc_sdc_ecc_fmb_correction_Bias -> hmc_sdc_ecc_fmb_correction_PhaseUnwrap;
hmc_sdc_ecc_fmb_correction_Bias -> hmc_sdc_ecc_fmb_correction_FMm_to_B0;
hmc_sdc_ecc_fmb_correction_BrainExtraction -> hmc_sdc_ecc_fmb_correction_MskDilate;
hmc_sdc_ecc_fmb_correction_MskDilate -> hmc_sdc_ecc_fmb_correction_FMm_to_B0;
hmc_sdc_ecc_fmb_correction_MskDilate -> hmc_sdc_ecc_fmb_correction_PhaseUnwrap;
hmc_sdc_ecc_fmb_correction_SplitDWIs -> hmc_sdc_ecc_fmb_correction_UnwarpDWIs;
hmc_sdc_ecc_fmb_correction_FMm_to_B0 -> hmc_sdc_ecc_fmb_correction_FMp_to_B0;
hmc_sdc_ecc_fmb_correction_FMm_to_B0 -> hmc_sdc_ecc_fmb_correction_FMp_to_B0;
hmc_sdc_ecc_fmb_correction_PhaseUnwrap -> hmc_sdc_ecc_fmb_correction_ToRadSec;
hmc_sdc_ecc_fmb_correction_SettingsGrabber -> hmc_sdc_ecc_fmb_correction_EffEcho;
hmc_sdc_ecc_fmb_correction_SettingsGrabber -> hmc_sdc_ecc_fmb_correction_EffEcho;
hmc_sdc_ecc_fmb_correction_SettingsGrabber -> hmc_sdc_ecc_fmb_correction_UnwarpDWIs;
hmc_sdc_ecc_fmb_correction_SettingsGrabber -> hmc_sdc_ecc_fmb_correction_ComputeVSM;
hmc_sdc_ecc_fmb_correction_SettingsGrabber -> hmc_sdc_ecc_fmb_correction_ToRadSec;
hmc_sdc_ecc_fmb_correction_EffEcho -> hmc_sdc_ecc_fmb_correction_ComputeVSM;
hmc_sdc_ecc_fmb_correction_ToRadSec -> hmc_sdc_ecc_fmb_correction_FMp_to_B0;
hmc_sdc_ecc_fmb_correction_FMp_to_B0 -> hmc_sdc_ecc_fmb_correction_PreliminaryFugue;
hmc_sdc_ecc_fmb_correction_PreliminaryFugue -> hmc_sdc_ecc_fmb_correction_DemeanFmap;
subgraph cluster_hmc_sdc_ecc_fmb_correction_Cleanup {
label="Cleanup";
hmc_sdc_ecc_fmb_correction_Cleanup_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_fmb_correction_Cleanup_Despike[label="Despike (fsl)"];
hmc_sdc_ecc_fmb_correction_Cleanup_MskErode[label="MskErode (fsl)"];
hmc_sdc_ecc_fmb_correction_Cleanup_NewMask[label="NewMask (fsl)"];
hmc_sdc_ecc_fmb_correction_Cleanup_ApplyMask[label="ApplyMask (fsl)"];
hmc_sdc_ecc_fmb_correction_Cleanup_Merge[label="Merge (utility)"];
hmc_sdc_ecc_fmb_correction_Cleanup_AddEdge[label="AddEdge (fsl)"];
hmc_sdc_ecc_fmb_correction_Cleanup_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_fmb_correction_Cleanup_inputnode -> hmc_sdc_ecc_fmb_correction_Cleanup_MskErode;
hmc_sdc_ecc_fmb_correction_Cleanup_inputnode -> hmc_sdc_ecc_fmb_correction_Cleanup_AddEdge;
hmc_sdc_ecc_fmb_correction_Cleanup_inputnode -> hmc_sdc_ecc_fmb_correction_Cleanup_Despike;
hmc_sdc_ecc_fmb_correction_Cleanup_inputnode -> hmc_sdc_ecc_fmb_correction_Cleanup_Despike;
hmc_sdc_ecc_fmb_correction_Cleanup_inputnode -> hmc_sdc_ecc_fmb_correction_Cleanup_NewMask;
hmc_sdc_ecc_fmb_correction_Cleanup_Despike -> hmc_sdc_ecc_fmb_correction_Cleanup_ApplyMask;
hmc_sdc_ecc_fmb_correction_Cleanup_MskErode -> hmc_sdc_ecc_fmb_correction_Cleanup_NewMask;
hmc_sdc_ecc_fmb_correction_Cleanup_MskErode -> hmc_sdc_ecc_fmb_correction_Cleanup_Merge;
hmc_sdc_ecc_fmb_correction_Cleanup_NewMask -> hmc_sdc_ecc_fmb_correction_Cleanup_ApplyMask;
hmc_sdc_ecc_fmb_correction_Cleanup_ApplyMask -> hmc_sdc_ecc_fmb_correction_Cleanup_Merge;
hmc_sdc_ecc_fmb_correction_Cleanup_Merge -> hmc_sdc_ecc_fmb_correction_Cleanup_AddEdge;
hmc_sdc_ecc_fmb_correction_Cleanup_AddEdge -> hmc_sdc_ecc_fmb_correction_Cleanup_outputnode;
}
hmc_sdc_ecc_fmb_correction_AddEmptyVol -> hmc_sdc_ecc_fmb_correction_ComputeVSM;
hmc_sdc_ecc_fmb_correction_ComputeVSM -> hmc_sdc_ecc_fmb_correction_outputnode;
hmc_sdc_ecc_fmb_correction_ComputeVSM -> hmc_sdc_ecc_fmb_correction_UnwarpDWIs;
hmc_sdc_ecc_fmb_correction_UnwarpDWIs -> hmc_sdc_ecc_fmb_correction_RemoveNegative;
hmc_sdc_ecc_fmb_correction_RemoveNegative -> hmc_sdc_ecc_fmb_correction_MergeDWIs;
hmc_sdc_ecc_fmb_correction_MergeDWIs -> hmc_sdc_ecc_fmb_correction_outputnode;
subgraph cluster_hmc_sdc_ecc_fmb_correction_Shiftmap2Warping {
label="Shiftmap2Warping";
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_Fix_hdr[label="Fix_hdr (utility)"];
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_ScaleField[label="ScaleField (fsl)"];
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_vsm2dfm[label="vsm2dfm (fsl)"];
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_inputnode -> hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_vsm2dfm;
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_inputnode -> hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_vsm2dfm;
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_inputnode -> hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_Fix_hdr;
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_inputnode -> hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_Fix_hdr;
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_inputnode -> hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_ScaleField;
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_Fix_hdr -> hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_ScaleField;
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_ScaleField -> hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_vsm2dfm;
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_vsm2dfm -> hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_outputnode;
}
hmc_sdc_ecc_fmb_correction_SettingsGrabber -> hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_inputnode;
hmc_sdc_ecc_fmb_correction_ComputeVSM -> hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_inputnode;
hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_outputnode -> hmc_sdc_ecc_fmb_correction_outputnode;
hmc_sdc_ecc_fmb_correction_Cleanup_outputnode -> hmc_sdc_ecc_fmb_correction_AddEmptyVol;
hmc_sdc_ecc_fmb_correction_MergeDWIs -> hmc_sdc_ecc_fmb_correction_Shiftmap2Warping_inputnode;
hmc_sdc_ecc_fmb_correction_inputnode -> hmc_sdc_ecc_fmb_correction_Cleanup_inputnode;
hmc_sdc_ecc_fmb_correction_DemeanFmap -> hmc_sdc_ecc_fmb_correction_Cleanup_inputnode;
}
subgraph cluster_hmc_sdc_ecc_eddy_correct {
label="eddy_correct";
hmc_sdc_ecc_eddy_correct_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_eddy_correct_b0_avg[label="b0_avg (utility)"];
hmc_sdc_ecc_eddy_correct_ExtractDWI[label="ExtractDWI (utility)"];
hmc_sdc_ecc_eddy_correct_SplitDWIs[label="SplitDWIs (fsl)"];
hmc_sdc_ecc_eddy_correct_ModulateDWIs[label="ModulateDWIs (fsl)"];
hmc_sdc_ecc_eddy_correct_RemoveNegative[label="RemoveNegative (fsl)"];
hmc_sdc_ecc_eddy_correct_MergeDWIs[label="MergeDWIs (utility)"];
hmc_sdc_ecc_eddy_correct_GatherMatrices[label="GatherMatrices (utility)"];
hmc_sdc_ecc_eddy_correct_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_ExtractDWI;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_ExtractDWI;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_b0_avg;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_b0_avg;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_GatherMatrices;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_MergeDWIs;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_MergeDWIs;
subgraph cluster_hmc_sdc_ecc_eddy_correct_DWICoregistration {
label="DWICoregistration";
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_Bias[label="Bias (ants)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_MskDilate[label="MskDilate (fsl)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_SplitDWIs[label="SplitDWIs (fsl)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_DWEqualize[label="DWEqualize (utility)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_InitXforms[label="InitXforms (utility)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_B0Equalize[label="B0Equalize (utility)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration[label="CoRegistration (fsl)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_RemoveNegative[label="RemoveNegative (fsl)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_MergeDWIs[label="MergeDWIs (fsl)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_Bias;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_Bias;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_MskDilate;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_SplitDWIs;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_InitXforms;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_InitXforms;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_B0Equalize;
hmc_sdc_ecc_eddy_correct_DWICoregistration_Bias -> hmc_sdc_ecc_eddy_correct_DWICoregistration_B0Equalize;
hmc_sdc_ecc_eddy_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_eddy_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_eddy_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_eddy_correct_DWICoregistration_DWEqualize;
hmc_sdc_ecc_eddy_correct_DWICoregistration_SplitDWIs -> hmc_sdc_ecc_eddy_correct_DWICoregistration_DWEqualize;
hmc_sdc_ecc_eddy_correct_DWICoregistration_DWEqualize -> hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_eddy_correct_DWICoregistration_InitXforms -> hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_eddy_correct_DWICoregistration_B0Equalize -> hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration -> hmc_sdc_ecc_eddy_correct_DWICoregistration_RemoveNegative;
hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration -> hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode;
hmc_sdc_ecc_eddy_correct_DWICoregistration_RemoveNegative -> hmc_sdc_ecc_eddy_correct_DWICoregistration_MergeDWIs;
hmc_sdc_ecc_eddy_correct_DWICoregistration_MergeDWIs -> hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode;
}
hmc_sdc_ecc_eddy_correct_SplitDWIs -> hmc_sdc_ecc_eddy_correct_ModulateDWIs;
hmc_sdc_ecc_eddy_correct_ModulateDWIs -> hmc_sdc_ecc_eddy_correct_RemoveNegative;
hmc_sdc_ecc_eddy_correct_RemoveNegative -> hmc_sdc_ecc_eddy_correct_MergeDWIs;
hmc_sdc_ecc_eddy_correct_MergeDWIs -> hmc_sdc_ecc_eddy_correct_outputnode;
hmc_sdc_ecc_eddy_correct_GatherMatrices -> hmc_sdc_ecc_eddy_correct_outputnode;
hmc_sdc_ecc_eddy_correct_ExtractDWI -> hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_eddy_correct_b0_avg -> hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode -> hmc_sdc_ecc_eddy_correct_GatherMatrices;
hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode -> hmc_sdc_ecc_eddy_correct_ModulateDWIs;
hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode -> hmc_sdc_ecc_eddy_correct_SplitDWIs;
}
subgraph cluster_hmc_sdc_ecc_UnwarpArtifacts {
label="UnwarpArtifacts";
hmc_sdc_ecc_UnwarpArtifacts_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_UnwarpArtifacts_SplitDWIs[label="SplitDWIs (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_Reference[label="Reference (utility)"];
hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp[label="ConvertWarp (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_UnwarpDWIs[label="UnwarpDWIs (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_CoeffComp[label="CoeffComp (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_JacobianComp[label="JacobianComp (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_ModulateDWIs[label="ModulateDWIs (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_RemoveNegative[label="RemoveNegative (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_MergeDWIs[label="MergeDWIs (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_UnwarpArtifacts_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp;
hmc_sdc_ecc_UnwarpArtifacts_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp;
hmc_sdc_ecc_UnwarpArtifacts_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp;
hmc_sdc_ecc_UnwarpArtifacts_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp;
hmc_sdc_ecc_UnwarpArtifacts_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_SplitDWIs;
hmc_sdc_ecc_UnwarpArtifacts_SplitDWIs -> hmc_sdc_ecc_UnwarpArtifacts_UnwarpDWIs;
hmc_sdc_ecc_UnwarpArtifacts_SplitDWIs -> hmc_sdc_ecc_UnwarpArtifacts_Reference;
hmc_sdc_ecc_UnwarpArtifacts_Reference -> hmc_sdc_ecc_UnwarpArtifacts_UnwarpDWIs;
hmc_sdc_ecc_UnwarpArtifacts_Reference -> hmc_sdc_ecc_UnwarpArtifacts_CoeffComp;
hmc_sdc_ecc_UnwarpArtifacts_Reference -> hmc_sdc_ecc_UnwarpArtifacts_JacobianComp;
hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp -> hmc_sdc_ecc_UnwarpArtifacts_UnwarpDWIs;
hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp -> hmc_sdc_ecc_UnwarpArtifacts_CoeffComp;
hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp -> hmc_sdc_ecc_UnwarpArtifacts_outputnode;
hmc_sdc_ecc_UnwarpArtifacts_UnwarpDWIs -> hmc_sdc_ecc_UnwarpArtifacts_ModulateDWIs;
hmc_sdc_ecc_UnwarpArtifacts_CoeffComp -> hmc_sdc_ecc_UnwarpArtifacts_JacobianComp;
hmc_sdc_ecc_UnwarpArtifacts_CoeffComp -> hmc_sdc_ecc_UnwarpArtifacts_outputnode;
hmc_sdc_ecc_UnwarpArtifacts_JacobianComp -> hmc_sdc_ecc_UnwarpArtifacts_ModulateDWIs;
hmc_sdc_ecc_UnwarpArtifacts_JacobianComp -> hmc_sdc_ecc_UnwarpArtifacts_outputnode;
hmc_sdc_ecc_UnwarpArtifacts_ModulateDWIs -> hmc_sdc_ecc_UnwarpArtifacts_RemoveNegative;
hmc_sdc_ecc_UnwarpArtifacts_RemoveNegative -> hmc_sdc_ecc_UnwarpArtifacts_MergeDWIs;
hmc_sdc_ecc_UnwarpArtifacts_MergeDWIs -> hmc_sdc_ecc_UnwarpArtifacts_outputnode;
}
hmc_sdc_ecc_b0_avg_post -> hmc_sdc_ecc_bet_dwi_post;
hmc_sdc_ecc_bet_dwi_post -> hmc_sdc_ecc_outputnode;
hmc_sdc_ecc_eddy_correct_outputnode -> hmc_sdc_ecc_UnwarpArtifacts_inputnode;
hmc_sdc_ecc_eddy_correct_outputnode -> hmc_sdc_ecc_b0_avg_post;
hmc_sdc_ecc_motion_correct_outputnode -> hmc_sdc_ecc_fmb_correction_inputnode;
hmc_sdc_ecc_motion_correct_outputnode -> hmc_sdc_ecc_UnwarpArtifacts_inputnode;
hmc_sdc_ecc_motion_correct_outputnode -> hmc_sdc_ecc_outputnode;
hmc_sdc_ecc_motion_correct_outputnode -> hmc_sdc_ecc_eddy_correct_inputnode;
hmc_sdc_ecc_B0indices -> hmc_sdc_ecc_fmb_correction_inputnode;
hmc_sdc_ecc_UnwarpArtifacts_outputnode -> hmc_sdc_ecc_outputnode;
hmc_sdc_ecc_bet_dwi_pre -> hmc_sdc_ecc_motion_correct_inputnode;
hmc_sdc_ecc_bet_dwi_pre -> hmc_sdc_ecc_eddy_correct_inputnode;
hmc_sdc_ecc_bet_dwi_pre -> hmc_sdc_ecc_fmb_correction_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_eddy_correct_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_eddy_correct_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_motion_correct_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_motion_correct_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_motion_correct_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_fmb_correction_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_fmb_correction_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_fmb_correction_inputnode;
hmc_sdc_ecc_fmb_correction_outputnode -> hmc_sdc_ecc_UnwarpArtifacts_inputnode;
}](../../_images/graphviz-0336ae14bd0a99cd667d20d56249de37b7851f3c.png)
all_fsl_pipeline()
¶
Workflow that integrates FSL topup
and eddy
.
Warning
this workflow rotates the gradients table (b-vectors) [Leemans09].
Warning
this workflow does not perform jacobian modulation of each DWI [Jones10].
Examples¶
>>> from nipype.workflows.dmri.fsl.artifacts import all_fsl_pipeline
>>> allcorr = all_fsl_pipeline()
>>> allcorr.inputs.inputnode.in_file = 'epi.nii'
>>> allcorr.inputs.inputnode.alt_file = 'epi_rev.nii'
>>> allcorr.inputs.inputnode.in_bval = 'diffusion.bval'
>>> allcorr.inputs.inputnode.in_bvec = 'diffusion.bvec'
>>> allcorr.run()
Graph¶
![digraph fsl_all_correct{
label="fsl_all_correct";
fsl_all_correct_inputnode[label="inputnode (utility)"];
fsl_all_correct_b0_avg_pre[label="b0_avg_pre (utility)"];
fsl_all_correct_bet_dwi_pre[label="bet_dwi_pre (fsl)"];
fsl_all_correct_fsl_eddy[label="fsl_eddy (fsl)"];
fsl_all_correct_b0_avg_post[label="b0_avg_post (utility)"];
fsl_all_correct_bet_dwi_post[label="bet_dwi_post (fsl)"];
fsl_all_correct_Rotate_Bvec[label="Rotate_Bvec (utility)"];
fsl_all_correct_outputnode[label="outputnode (utility)"];
fsl_all_correct_inputnode -> fsl_all_correct_fsl_eddy;
fsl_all_correct_inputnode -> fsl_all_correct_fsl_eddy;
fsl_all_correct_inputnode -> fsl_all_correct_fsl_eddy;
fsl_all_correct_inputnode -> fsl_all_correct_fsl_eddy;
fsl_all_correct_inputnode -> fsl_all_correct_b0_avg_post;
fsl_all_correct_inputnode -> fsl_all_correct_b0_avg_pre;
fsl_all_correct_inputnode -> fsl_all_correct_b0_avg_pre;
fsl_all_correct_inputnode -> fsl_all_correct_Rotate_Bvec;
fsl_all_correct_b0_avg_pre -> fsl_all_correct_bet_dwi_pre;
fsl_all_correct_bet_dwi_pre -> fsl_all_correct_fsl_eddy;
subgraph cluster_fsl_all_correct_peb_correction {
label="peb_correction";
fsl_all_correct_peb_correction_inputnode[label="inputnode (utility)"];
fsl_all_correct_peb_correction_b0_ref[label="b0_ref (fsl)"];
fsl_all_correct_peb_correction_b0_alt[label="b0_alt (fsl)"];
fsl_all_correct_peb_correction_b0_list[label="b0_list (utility)"];
fsl_all_correct_peb_correction_b0_merged[label="b0_merged (fsl)"];
fsl_all_correct_peb_correction_topup[label="topup (fsl)"];
fsl_all_correct_peb_correction_unwarp[label="unwarp (fsl)"];
fsl_all_correct_peb_correction_outputnode[label="outputnode (utility)"];
fsl_all_correct_peb_correction_inputnode -> fsl_all_correct_peb_correction_unwarp;
fsl_all_correct_peb_correction_inputnode -> fsl_all_correct_peb_correction_b0_ref;
fsl_all_correct_peb_correction_inputnode -> fsl_all_correct_peb_correction_b0_ref;
fsl_all_correct_peb_correction_inputnode -> fsl_all_correct_peb_correction_b0_alt;
fsl_all_correct_peb_correction_inputnode -> fsl_all_correct_peb_correction_b0_alt;
fsl_all_correct_peb_correction_b0_ref -> fsl_all_correct_peb_correction_b0_list;
fsl_all_correct_peb_correction_b0_alt -> fsl_all_correct_peb_correction_b0_list;
fsl_all_correct_peb_correction_b0_list -> fsl_all_correct_peb_correction_b0_merged;
fsl_all_correct_peb_correction_b0_merged -> fsl_all_correct_peb_correction_topup;
fsl_all_correct_peb_correction_topup -> fsl_all_correct_peb_correction_unwarp;
fsl_all_correct_peb_correction_topup -> fsl_all_correct_peb_correction_unwarp;
fsl_all_correct_peb_correction_topup -> fsl_all_correct_peb_correction_unwarp;
fsl_all_correct_peb_correction_topup -> fsl_all_correct_peb_correction_outputnode;
subgraph cluster_fsl_all_correct_peb_correction_Shiftmap2Warping {
label="Shiftmap2Warping";
fsl_all_correct_peb_correction_Shiftmap2Warping_inputnode[label="inputnode (utility)"];
fsl_all_correct_peb_correction_Shiftmap2Warping_Fix_hdr[label="Fix_hdr (utility)"];
fsl_all_correct_peb_correction_Shiftmap2Warping_ScaleField[label="ScaleField (fsl)"];
fsl_all_correct_peb_correction_Shiftmap2Warping_vsm2dfm[label="vsm2dfm (fsl)"];
fsl_all_correct_peb_correction_Shiftmap2Warping_outputnode[label="outputnode (utility)"];
fsl_all_correct_peb_correction_Shiftmap2Warping_inputnode -> fsl_all_correct_peb_correction_Shiftmap2Warping_vsm2dfm;
fsl_all_correct_peb_correction_Shiftmap2Warping_inputnode -> fsl_all_correct_peb_correction_Shiftmap2Warping_vsm2dfm;
fsl_all_correct_peb_correction_Shiftmap2Warping_inputnode -> fsl_all_correct_peb_correction_Shiftmap2Warping_Fix_hdr;
fsl_all_correct_peb_correction_Shiftmap2Warping_inputnode -> fsl_all_correct_peb_correction_Shiftmap2Warping_Fix_hdr;
fsl_all_correct_peb_correction_Shiftmap2Warping_inputnode -> fsl_all_correct_peb_correction_Shiftmap2Warping_ScaleField;
fsl_all_correct_peb_correction_Shiftmap2Warping_Fix_hdr -> fsl_all_correct_peb_correction_Shiftmap2Warping_ScaleField;
fsl_all_correct_peb_correction_Shiftmap2Warping_ScaleField -> fsl_all_correct_peb_correction_Shiftmap2Warping_vsm2dfm;
fsl_all_correct_peb_correction_Shiftmap2Warping_vsm2dfm -> fsl_all_correct_peb_correction_Shiftmap2Warping_outputnode;
}
fsl_all_correct_peb_correction_unwarp -> fsl_all_correct_peb_correction_outputnode;
fsl_all_correct_peb_correction_Shiftmap2Warping_outputnode -> fsl_all_correct_peb_correction_outputnode;
fsl_all_correct_peb_correction_topup -> fsl_all_correct_peb_correction_Shiftmap2Warping_inputnode;
fsl_all_correct_peb_correction_b0_ref -> fsl_all_correct_peb_correction_Shiftmap2Warping_inputnode;
}
fsl_all_correct_fsl_eddy -> fsl_all_correct_b0_avg_post;
fsl_all_correct_fsl_eddy -> fsl_all_correct_Rotate_Bvec;
fsl_all_correct_fsl_eddy -> fsl_all_correct_outputnode;
fsl_all_correct_b0_avg_post -> fsl_all_correct_bet_dwi_post;
fsl_all_correct_bet_dwi_post -> fsl_all_correct_outputnode;
fsl_all_correct_Rotate_Bvec -> fsl_all_correct_outputnode;
fsl_all_correct_peb_correction_topup -> fsl_all_correct_fsl_eddy;
fsl_all_correct_peb_correction_topup -> fsl_all_correct_fsl_eddy;
fsl_all_correct_peb_correction_topup -> fsl_all_correct_fsl_eddy;
fsl_all_correct_inputnode -> fsl_all_correct_peb_correction_inputnode;
fsl_all_correct_inputnode -> fsl_all_correct_peb_correction_inputnode;
fsl_all_correct_inputnode -> fsl_all_correct_peb_correction_inputnode;
fsl_all_correct_bet_dwi_pre -> fsl_all_correct_peb_correction_inputnode;
}](../../_images/graphviz-0be75f7e5e818ac144cb3d7104b9beaa4d8df29b.png)
all_peb_pipeline()
¶
Builds a pipeline including three artifact corrections: head-motion correction (HMC), susceptibility-derived distortion correction (SDC), and Eddy currents-derived distortion correction (ECC).
Warning
this workflow rotates the gradients table (b-vectors) [Leemans09].
Examples¶
>>> from nipype.workflows.dmri.fsl.artifacts import all_peb_pipeline
>>> allcorr = all_peb_pipeline()
>>> allcorr.inputs.inputnode.in_file = 'epi.nii'
>>> allcorr.inputs.inputnode.alt_file = 'epi_rev.nii'
>>> allcorr.inputs.inputnode.in_bval = 'diffusion.bval'
>>> allcorr.inputs.inputnode.in_bvec = 'diffusion.bvec'
>>> allcorr.run()
Graph¶
![digraph hmc_sdc_ecc{
label="hmc_sdc_ecc";
hmc_sdc_ecc_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_b0_avg_pre[label="b0_avg_pre (utility)"];
hmc_sdc_ecc_bet_dwi_pre[label="bet_dwi_pre (fsl)"];
hmc_sdc_ecc_b0_avg_post[label="b0_avg_post (utility)"];
hmc_sdc_ecc_bet_dwi_post[label="bet_dwi_post (fsl)"];
hmc_sdc_ecc_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_b0_avg_post;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_b0_avg_pre;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_b0_avg_pre;
hmc_sdc_ecc_b0_avg_pre -> hmc_sdc_ecc_bet_dwi_pre;
subgraph cluster_hmc_sdc_ecc_motion_correct {
label="motion_correct";
hmc_sdc_ecc_motion_correct_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_motion_correct_SplitDWI[label="SplitDWI (utility)"];
hmc_sdc_ecc_motion_correct_InsertRefmat[label="InsertRefmat (utility)"];
hmc_sdc_ecc_motion_correct_Rotate_Bvec[label="Rotate_Bvec (utility)"];
hmc_sdc_ecc_motion_correct_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_motion_correct_inputnode -> hmc_sdc_ecc_motion_correct_Rotate_Bvec;
hmc_sdc_ecc_motion_correct_inputnode -> hmc_sdc_ecc_motion_correct_SplitDWI;
hmc_sdc_ecc_motion_correct_inputnode -> hmc_sdc_ecc_motion_correct_SplitDWI;
hmc_sdc_ecc_motion_correct_inputnode -> hmc_sdc_ecc_motion_correct_SplitDWI;
hmc_sdc_ecc_motion_correct_SplitDWI -> hmc_sdc_ecc_motion_correct_InsertRefmat;
subgraph cluster_hmc_sdc_ecc_motion_correct_DWICoregistration {
label="DWICoregistration";
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_SplitDWIs[label="SplitDWIs (fsl)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_InitXforms[label="InitXforms (utility)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_MskDilate[label="MskDilate (fsl)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_DWEqualize[label="DWEqualize (utility)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_Bias[label="Bias (ants)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_B0Equalize[label="B0Equalize (utility)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration[label="CoRegistration (fsl)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_RemoveNegative[label="RemoveNegative (fsl)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_MergeDWIs[label="MergeDWIs (fsl)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_Bias;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_Bias;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_MskDilate;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_InitXforms;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_InitXforms;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_SplitDWIs;
hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_B0Equalize;
hmc_sdc_ecc_motion_correct_DWICoregistration_SplitDWIs -> hmc_sdc_ecc_motion_correct_DWICoregistration_DWEqualize;
hmc_sdc_ecc_motion_correct_DWICoregistration_InitXforms -> hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_motion_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_motion_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_motion_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_motion_correct_DWICoregistration_DWEqualize;
hmc_sdc_ecc_motion_correct_DWICoregistration_DWEqualize -> hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_motion_correct_DWICoregistration_Bias -> hmc_sdc_ecc_motion_correct_DWICoregistration_B0Equalize;
hmc_sdc_ecc_motion_correct_DWICoregistration_B0Equalize -> hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration -> hmc_sdc_ecc_motion_correct_DWICoregistration_RemoveNegative;
hmc_sdc_ecc_motion_correct_DWICoregistration_CoRegistration -> hmc_sdc_ecc_motion_correct_DWICoregistration_outputnode;
hmc_sdc_ecc_motion_correct_DWICoregistration_RemoveNegative -> hmc_sdc_ecc_motion_correct_DWICoregistration_MergeDWIs;
hmc_sdc_ecc_motion_correct_DWICoregistration_MergeDWIs -> hmc_sdc_ecc_motion_correct_DWICoregistration_outputnode;
}
hmc_sdc_ecc_motion_correct_InsertRefmat -> hmc_sdc_ecc_motion_correct_Rotate_Bvec;
hmc_sdc_ecc_motion_correct_InsertRefmat -> hmc_sdc_ecc_motion_correct_outputnode;
hmc_sdc_ecc_motion_correct_Rotate_Bvec -> hmc_sdc_ecc_motion_correct_outputnode;
hmc_sdc_ecc_motion_correct_inputnode -> hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_motion_correct_SplitDWI -> hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_motion_correct_SplitDWI -> hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_motion_correct_SplitDWI -> hmc_sdc_ecc_motion_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_motion_correct_DWICoregistration_outputnode -> hmc_sdc_ecc_motion_correct_InsertRefmat;
hmc_sdc_ecc_motion_correct_DWICoregistration_outputnode -> hmc_sdc_ecc_motion_correct_outputnode;
}
subgraph cluster_hmc_sdc_ecc_eddy_correct {
label="eddy_correct";
hmc_sdc_ecc_eddy_correct_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_eddy_correct_b0_avg[label="b0_avg (utility)"];
hmc_sdc_ecc_eddy_correct_ExtractDWI[label="ExtractDWI (utility)"];
hmc_sdc_ecc_eddy_correct_SplitDWIs[label="SplitDWIs (fsl)"];
hmc_sdc_ecc_eddy_correct_GatherMatrices[label="GatherMatrices (utility)"];
hmc_sdc_ecc_eddy_correct_ModulateDWIs[label="ModulateDWIs (fsl)"];
hmc_sdc_ecc_eddy_correct_RemoveNegative[label="RemoveNegative (fsl)"];
hmc_sdc_ecc_eddy_correct_MergeDWIs[label="MergeDWIs (utility)"];
hmc_sdc_ecc_eddy_correct_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_ExtractDWI;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_ExtractDWI;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_GatherMatrices;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_b0_avg;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_b0_avg;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_MergeDWIs;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_MergeDWIs;
subgraph cluster_hmc_sdc_ecc_eddy_correct_DWICoregistration {
label="DWICoregistration";
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_InitXforms[label="InitXforms (utility)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_SplitDWIs[label="SplitDWIs (fsl)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_MskDilate[label="MskDilate (fsl)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_DWEqualize[label="DWEqualize (utility)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_Bias[label="Bias (ants)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_B0Equalize[label="B0Equalize (utility)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration[label="CoRegistration (fsl)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_RemoveNegative[label="RemoveNegative (fsl)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_MergeDWIs[label="MergeDWIs (fsl)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_InitXforms;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_InitXforms;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_SplitDWIs;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_MskDilate;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_Bias;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_Bias;
hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_B0Equalize;
hmc_sdc_ecc_eddy_correct_DWICoregistration_InitXforms -> hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_eddy_correct_DWICoregistration_SplitDWIs -> hmc_sdc_ecc_eddy_correct_DWICoregistration_DWEqualize;
hmc_sdc_ecc_eddy_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_eddy_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_eddy_correct_DWICoregistration_MskDilate -> hmc_sdc_ecc_eddy_correct_DWICoregistration_DWEqualize;
hmc_sdc_ecc_eddy_correct_DWICoregistration_DWEqualize -> hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_eddy_correct_DWICoregistration_Bias -> hmc_sdc_ecc_eddy_correct_DWICoregistration_B0Equalize;
hmc_sdc_ecc_eddy_correct_DWICoregistration_B0Equalize -> hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration;
hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration -> hmc_sdc_ecc_eddy_correct_DWICoregistration_RemoveNegative;
hmc_sdc_ecc_eddy_correct_DWICoregistration_CoRegistration -> hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode;
hmc_sdc_ecc_eddy_correct_DWICoregistration_RemoveNegative -> hmc_sdc_ecc_eddy_correct_DWICoregistration_MergeDWIs;
hmc_sdc_ecc_eddy_correct_DWICoregistration_MergeDWIs -> hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode;
}
hmc_sdc_ecc_eddy_correct_SplitDWIs -> hmc_sdc_ecc_eddy_correct_ModulateDWIs;
hmc_sdc_ecc_eddy_correct_GatherMatrices -> hmc_sdc_ecc_eddy_correct_outputnode;
hmc_sdc_ecc_eddy_correct_ModulateDWIs -> hmc_sdc_ecc_eddy_correct_RemoveNegative;
hmc_sdc_ecc_eddy_correct_RemoveNegative -> hmc_sdc_ecc_eddy_correct_MergeDWIs;
hmc_sdc_ecc_eddy_correct_MergeDWIs -> hmc_sdc_ecc_eddy_correct_outputnode;
hmc_sdc_ecc_eddy_correct_ExtractDWI -> hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_eddy_correct_inputnode -> hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_eddy_correct_b0_avg -> hmc_sdc_ecc_eddy_correct_DWICoregistration_inputnode;
hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode -> hmc_sdc_ecc_eddy_correct_SplitDWIs;
hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode -> hmc_sdc_ecc_eddy_correct_GatherMatrices;
hmc_sdc_ecc_eddy_correct_DWICoregistration_outputnode -> hmc_sdc_ecc_eddy_correct_ModulateDWIs;
}
subgraph cluster_hmc_sdc_ecc_peb_correction {
label="peb_correction";
hmc_sdc_ecc_peb_correction_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_peb_correction_b0_ref[label="b0_ref (fsl)"];
hmc_sdc_ecc_peb_correction_b0_alt[label="b0_alt (fsl)"];
hmc_sdc_ecc_peb_correction_b0_list[label="b0_list (utility)"];
hmc_sdc_ecc_peb_correction_b0_merged[label="b0_merged (fsl)"];
hmc_sdc_ecc_peb_correction_topup[label="topup (fsl)"];
hmc_sdc_ecc_peb_correction_unwarp[label="unwarp (fsl)"];
hmc_sdc_ecc_peb_correction_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_peb_correction_inputnode -> hmc_sdc_ecc_peb_correction_b0_alt;
hmc_sdc_ecc_peb_correction_inputnode -> hmc_sdc_ecc_peb_correction_b0_alt;
hmc_sdc_ecc_peb_correction_inputnode -> hmc_sdc_ecc_peb_correction_b0_ref;
hmc_sdc_ecc_peb_correction_inputnode -> hmc_sdc_ecc_peb_correction_b0_ref;
hmc_sdc_ecc_peb_correction_inputnode -> hmc_sdc_ecc_peb_correction_unwarp;
hmc_sdc_ecc_peb_correction_b0_ref -> hmc_sdc_ecc_peb_correction_b0_list;
hmc_sdc_ecc_peb_correction_b0_alt -> hmc_sdc_ecc_peb_correction_b0_list;
hmc_sdc_ecc_peb_correction_b0_list -> hmc_sdc_ecc_peb_correction_b0_merged;
hmc_sdc_ecc_peb_correction_b0_merged -> hmc_sdc_ecc_peb_correction_topup;
hmc_sdc_ecc_peb_correction_topup -> hmc_sdc_ecc_peb_correction_unwarp;
hmc_sdc_ecc_peb_correction_topup -> hmc_sdc_ecc_peb_correction_unwarp;
hmc_sdc_ecc_peb_correction_topup -> hmc_sdc_ecc_peb_correction_unwarp;
hmc_sdc_ecc_peb_correction_topup -> hmc_sdc_ecc_peb_correction_outputnode;
subgraph cluster_hmc_sdc_ecc_peb_correction_Shiftmap2Warping {
label="Shiftmap2Warping";
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_Fix_hdr[label="Fix_hdr (utility)"];
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_ScaleField[label="ScaleField (fsl)"];
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_vsm2dfm[label="vsm2dfm (fsl)"];
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_inputnode -> hmc_sdc_ecc_peb_correction_Shiftmap2Warping_vsm2dfm;
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_inputnode -> hmc_sdc_ecc_peb_correction_Shiftmap2Warping_vsm2dfm;
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_inputnode -> hmc_sdc_ecc_peb_correction_Shiftmap2Warping_Fix_hdr;
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_inputnode -> hmc_sdc_ecc_peb_correction_Shiftmap2Warping_Fix_hdr;
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_inputnode -> hmc_sdc_ecc_peb_correction_Shiftmap2Warping_ScaleField;
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_Fix_hdr -> hmc_sdc_ecc_peb_correction_Shiftmap2Warping_ScaleField;
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_ScaleField -> hmc_sdc_ecc_peb_correction_Shiftmap2Warping_vsm2dfm;
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_vsm2dfm -> hmc_sdc_ecc_peb_correction_Shiftmap2Warping_outputnode;
}
hmc_sdc_ecc_peb_correction_unwarp -> hmc_sdc_ecc_peb_correction_outputnode;
hmc_sdc_ecc_peb_correction_Shiftmap2Warping_outputnode -> hmc_sdc_ecc_peb_correction_outputnode;
hmc_sdc_ecc_peb_correction_topup -> hmc_sdc_ecc_peb_correction_Shiftmap2Warping_inputnode;
hmc_sdc_ecc_peb_correction_b0_ref -> hmc_sdc_ecc_peb_correction_Shiftmap2Warping_inputnode;
}
subgraph cluster_hmc_sdc_ecc_UnwarpArtifacts {
label="UnwarpArtifacts";
hmc_sdc_ecc_UnwarpArtifacts_inputnode[label="inputnode (utility)"];
hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp[label="ConvertWarp (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_SplitDWIs[label="SplitDWIs (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_Reference[label="Reference (utility)"];
hmc_sdc_ecc_UnwarpArtifacts_CoeffComp[label="CoeffComp (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_UnwarpDWIs[label="UnwarpDWIs (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_JacobianComp[label="JacobianComp (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_ModulateDWIs[label="ModulateDWIs (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_RemoveNegative[label="RemoveNegative (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_MergeDWIs[label="MergeDWIs (fsl)"];
hmc_sdc_ecc_UnwarpArtifacts_outputnode[label="outputnode (utility)"];
hmc_sdc_ecc_UnwarpArtifacts_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp;
hmc_sdc_ecc_UnwarpArtifacts_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp;
hmc_sdc_ecc_UnwarpArtifacts_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp;
hmc_sdc_ecc_UnwarpArtifacts_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp;
hmc_sdc_ecc_UnwarpArtifacts_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_SplitDWIs;
hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp -> hmc_sdc_ecc_UnwarpArtifacts_CoeffComp;
hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp -> hmc_sdc_ecc_UnwarpArtifacts_UnwarpDWIs;
hmc_sdc_ecc_UnwarpArtifacts_ConvertWarp -> hmc_sdc_ecc_UnwarpArtifacts_outputnode;
hmc_sdc_ecc_UnwarpArtifacts_SplitDWIs -> hmc_sdc_ecc_UnwarpArtifacts_Reference;
hmc_sdc_ecc_UnwarpArtifacts_SplitDWIs -> hmc_sdc_ecc_UnwarpArtifacts_UnwarpDWIs;
hmc_sdc_ecc_UnwarpArtifacts_Reference -> hmc_sdc_ecc_UnwarpArtifacts_CoeffComp;
hmc_sdc_ecc_UnwarpArtifacts_Reference -> hmc_sdc_ecc_UnwarpArtifacts_UnwarpDWIs;
hmc_sdc_ecc_UnwarpArtifacts_Reference -> hmc_sdc_ecc_UnwarpArtifacts_JacobianComp;
hmc_sdc_ecc_UnwarpArtifacts_CoeffComp -> hmc_sdc_ecc_UnwarpArtifacts_outputnode;
hmc_sdc_ecc_UnwarpArtifacts_CoeffComp -> hmc_sdc_ecc_UnwarpArtifacts_JacobianComp;
hmc_sdc_ecc_UnwarpArtifacts_UnwarpDWIs -> hmc_sdc_ecc_UnwarpArtifacts_ModulateDWIs;
hmc_sdc_ecc_UnwarpArtifacts_JacobianComp -> hmc_sdc_ecc_UnwarpArtifacts_outputnode;
hmc_sdc_ecc_UnwarpArtifacts_JacobianComp -> hmc_sdc_ecc_UnwarpArtifacts_ModulateDWIs;
hmc_sdc_ecc_UnwarpArtifacts_ModulateDWIs -> hmc_sdc_ecc_UnwarpArtifacts_RemoveNegative;
hmc_sdc_ecc_UnwarpArtifacts_RemoveNegative -> hmc_sdc_ecc_UnwarpArtifacts_MergeDWIs;
hmc_sdc_ecc_UnwarpArtifacts_MergeDWIs -> hmc_sdc_ecc_UnwarpArtifacts_outputnode;
}
hmc_sdc_ecc_b0_avg_post -> hmc_sdc_ecc_bet_dwi_post;
hmc_sdc_ecc_bet_dwi_post -> hmc_sdc_ecc_outputnode;
hmc_sdc_ecc_UnwarpArtifacts_outputnode -> hmc_sdc_ecc_outputnode;
hmc_sdc_ecc_bet_dwi_pre -> hmc_sdc_ecc_eddy_correct_inputnode;
hmc_sdc_ecc_bet_dwi_pre -> hmc_sdc_ecc_motion_correct_inputnode;
hmc_sdc_ecc_bet_dwi_pre -> hmc_sdc_ecc_peb_correction_inputnode;
hmc_sdc_ecc_motion_correct_outputnode -> hmc_sdc_ecc_UnwarpArtifacts_inputnode;
hmc_sdc_ecc_motion_correct_outputnode -> hmc_sdc_ecc_outputnode;
hmc_sdc_ecc_motion_correct_outputnode -> hmc_sdc_ecc_peb_correction_inputnode;
hmc_sdc_ecc_motion_correct_outputnode -> hmc_sdc_ecc_eddy_correct_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_UnwarpArtifacts_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_motion_correct_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_motion_correct_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_motion_correct_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_eddy_correct_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_eddy_correct_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_peb_correction_inputnode;
hmc_sdc_ecc_inputnode -> hmc_sdc_ecc_peb_correction_inputnode;
hmc_sdc_ecc_eddy_correct_outputnode -> hmc_sdc_ecc_b0_avg_post;
hmc_sdc_ecc_eddy_correct_outputnode -> hmc_sdc_ecc_UnwarpArtifacts_inputnode;
hmc_sdc_ecc_peb_correction_outputnode -> hmc_sdc_ecc_UnwarpArtifacts_inputnode;
}](../../_images/graphviz-4bd6a87340f7915e256b506f6bbf59c18d37ce57.png)
ecc_pipeline()
¶
ECC stands for Eddy currents correction.
Creates a pipeline that corrects for artifacts induced by Eddy currents in dMRI sequences. It takes a series of diffusion weighted images and linearly co-registers them to one reference image (the average of all b0s in the dataset).
DWIs are also modulated by the determinant of the Jacobian as indicated by [Jones10] and [Rohde04].
A list of rigid transformation matrices can be provided, sourcing from a
hmc_pipeline()
workflow, to initialize registrations in a motion
free framework.
A list of affine transformation matrices is available as output, so that transforms can be chained (discussion here).
References
[Jones10] | (1, 2) Jones DK, The signal intensity must be modulated by the determinant of the Jacobian when correcting for eddy currents in diffusion MRI, Proc. ISMRM 18th Annual Meeting, (2010). |
[Rohde04] | Rohde et al., Comprehensive Approach for Correction of Motion and Distortion in Diffusion-Weighted MRI, MRM 51:103-114 (2004). |
Example¶
>>> from nipype.workflows.dmri.fsl.artifacts import ecc_pipeline
>>> ecc = ecc_pipeline()
>>> ecc.inputs.inputnode.in_file = 'diffusion.nii'
>>> ecc.inputs.inputnode.in_bval = 'diffusion.bval'
>>> ecc.inputs.inputnode.in_mask = 'mask.nii'
>>> ecc.run()
Inputs:
inputnode.in_file - input dwi file
inputnode.in_mask - weights mask of reference image (a file with data range sin [0.0, 1.0], indicating the weight of each voxel when computing the metric.
inputnode.in_bval - b-values table
inputnode.in_xfms - list of matrices to initialize registration (from head-motion correction)
Outputs:
outputnode.out_file - corrected dwi file
outputnode.out_xfms - list of transformation matrices
Graph¶
![digraph eddy_correct{
label="eddy_correct";
eddy_correct_inputnode[label="inputnode (utility)"];
eddy_correct_ExtractDWI[label="ExtractDWI (utility)"];
eddy_correct_b0_avg[label="b0_avg (utility)"];
eddy_correct_SplitDWIs[label="SplitDWIs (fsl)"];
eddy_correct_GatherMatrices[label="GatherMatrices (utility)"];
eddy_correct_ModulateDWIs[label="ModulateDWIs (fsl)"];
eddy_correct_RemoveNegative[label="RemoveNegative (fsl)"];
eddy_correct_MergeDWIs[label="MergeDWIs (utility)"];
eddy_correct_outputnode[label="outputnode (utility)"];
eddy_correct_inputnode -> eddy_correct_GatherMatrices;
eddy_correct_inputnode -> eddy_correct_ExtractDWI;
eddy_correct_inputnode -> eddy_correct_ExtractDWI;
eddy_correct_inputnode -> eddy_correct_b0_avg;
eddy_correct_inputnode -> eddy_correct_b0_avg;
eddy_correct_inputnode -> eddy_correct_MergeDWIs;
eddy_correct_inputnode -> eddy_correct_MergeDWIs;
subgraph cluster_eddy_correct_DWICoregistration {
label="DWICoregistration";
eddy_correct_DWICoregistration_inputnode[label="inputnode (utility)"];
eddy_correct_DWICoregistration_SplitDWIs[label="SplitDWIs (fsl)"];
eddy_correct_DWICoregistration_Bias[label="Bias (ants)"];
eddy_correct_DWICoregistration_MskDilate[label="MskDilate (fsl)"];
eddy_correct_DWICoregistration_InitXforms[label="InitXforms (utility)"];
eddy_correct_DWICoregistration_B0Equalize[label="B0Equalize (utility)"];
eddy_correct_DWICoregistration_DWEqualize[label="DWEqualize (utility)"];
eddy_correct_DWICoregistration_CoRegistration[label="CoRegistration (fsl)"];
eddy_correct_DWICoregistration_RemoveNegative[label="RemoveNegative (fsl)"];
eddy_correct_DWICoregistration_MergeDWIs[label="MergeDWIs (fsl)"];
eddy_correct_DWICoregistration_outputnode[label="outputnode (utility)"];
eddy_correct_DWICoregistration_inputnode -> eddy_correct_DWICoregistration_SplitDWIs;
eddy_correct_DWICoregistration_inputnode -> eddy_correct_DWICoregistration_Bias;
eddy_correct_DWICoregistration_inputnode -> eddy_correct_DWICoregistration_Bias;
eddy_correct_DWICoregistration_inputnode -> eddy_correct_DWICoregistration_MskDilate;
eddy_correct_DWICoregistration_inputnode -> eddy_correct_DWICoregistration_InitXforms;
eddy_correct_DWICoregistration_inputnode -> eddy_correct_DWICoregistration_InitXforms;
eddy_correct_DWICoregistration_inputnode -> eddy_correct_DWICoregistration_B0Equalize;
eddy_correct_DWICoregistration_SplitDWIs -> eddy_correct_DWICoregistration_DWEqualize;
eddy_correct_DWICoregistration_Bias -> eddy_correct_DWICoregistration_B0Equalize;
eddy_correct_DWICoregistration_MskDilate -> eddy_correct_DWICoregistration_CoRegistration;
eddy_correct_DWICoregistration_MskDilate -> eddy_correct_DWICoregistration_CoRegistration;
eddy_correct_DWICoregistration_MskDilate -> eddy_correct_DWICoregistration_DWEqualize;
eddy_correct_DWICoregistration_InitXforms -> eddy_correct_DWICoregistration_CoRegistration;
eddy_correct_DWICoregistration_B0Equalize -> eddy_correct_DWICoregistration_CoRegistration;
eddy_correct_DWICoregistration_DWEqualize -> eddy_correct_DWICoregistration_CoRegistration;
eddy_correct_DWICoregistration_CoRegistration -> eddy_correct_DWICoregistration_RemoveNegative;
eddy_correct_DWICoregistration_CoRegistration -> eddy_correct_DWICoregistration_outputnode;
eddy_correct_DWICoregistration_RemoveNegative -> eddy_correct_DWICoregistration_MergeDWIs;
eddy_correct_DWICoregistration_MergeDWIs -> eddy_correct_DWICoregistration_outputnode;
}
eddy_correct_SplitDWIs -> eddy_correct_ModulateDWIs;
eddy_correct_GatherMatrices -> eddy_correct_outputnode;
eddy_correct_ModulateDWIs -> eddy_correct_RemoveNegative;
eddy_correct_RemoveNegative -> eddy_correct_MergeDWIs;
eddy_correct_MergeDWIs -> eddy_correct_outputnode;
eddy_correct_b0_avg -> eddy_correct_DWICoregistration_inputnode;
eddy_correct_DWICoregistration_outputnode -> eddy_correct_SplitDWIs;
eddy_correct_DWICoregistration_outputnode -> eddy_correct_GatherMatrices;
eddy_correct_DWICoregistration_outputnode -> eddy_correct_ModulateDWIs;
eddy_correct_inputnode -> eddy_correct_DWICoregistration_inputnode;
eddy_correct_inputnode -> eddy_correct_DWICoregistration_inputnode;
eddy_correct_inputnode -> eddy_correct_DWICoregistration_inputnode;
eddy_correct_ExtractDWI -> eddy_correct_DWICoregistration_inputnode;
}](../../_images/graphviz-f8907bfc06f95b16303d900645ac17778490a235.png)
hmc_pipeline()
¶
HMC stands for head-motion correction.
Creates a pipeline that corrects for head motion artifacts in dMRI sequences. It takes a series of diffusion weighted images and rigidly co-registers them to one reference image. Finally, the b-matrix is rotated accordingly [Leemans09] making use of the rotation matrix obtained by FLIRT.
Search angles have been limited to 4 degrees, based on results in [Yendiki13].
A list of rigid transformation matrices is provided, so that transforms can be chained. This is useful to correct for artifacts with only one interpolation process (as previously discussed here), and also to compute nuisance regressors as proposed by [Yendiki13].
Warning
This workflow rotates the b-vectors, so please be advised that not all the dicom converters ensure the consistency between the resulting nifti orientation and the gradients table (e.g. dcm2nii checks it).
References
[Leemans09] | (1, 2, 3, 4) Leemans A, and Jones DK, The B-matrix must be rotated when correcting for subject motion in DTI data, Magn Reson Med. 61(6):1336-49. 2009. doi: 10.1002/mrm.21890. |
[Yendiki13] | (1, 2) Yendiki A et al., Spurious group differences due to head motion in a diffusion MRI study. Neuroimage. 21(88C):79-90. 2013. doi: 10.1016/j.neuroimage.2013.11.027 |
Example¶
>>> from nipype.workflows.dmri.fsl.artifacts import hmc_pipeline
>>> hmc = hmc_pipeline()
>>> hmc.inputs.inputnode.in_file = 'diffusion.nii'
>>> hmc.inputs.inputnode.in_bvec = 'diffusion.bvec'
>>> hmc.inputs.inputnode.in_bval = 'diffusion.bval'
>>> hmc.inputs.inputnode.in_mask = 'mask.nii'
>>> hmc.run()
Inputs:
inputnode.in_file - input dwi file
inputnode.in_mask - weights mask of reference image (a file with data range in [0.0, 1.0], indicating the weight of each voxel when computing the metric.
inputnode.in_bvec - gradients file (b-vectors)
inputnode.ref_num (optional, default=0) index of the b0 volume that should be taken as reference
Outputs:
outputnode.out_file - corrected dwi file
outputnode.out_bvec - rotated gradient vectors table
outputnode.out_xfms - list of transformation matrices
Graph¶
![digraph motion_correct{
label="motion_correct";
motion_correct_inputnode[label="inputnode (utility)"];
motion_correct_SplitDWI[label="SplitDWI (utility)"];
motion_correct_InsertRefmat[label="InsertRefmat (utility)"];
motion_correct_Rotate_Bvec[label="Rotate_Bvec (utility)"];
motion_correct_outputnode[label="outputnode (utility)"];
motion_correct_inputnode -> motion_correct_SplitDWI;
motion_correct_inputnode -> motion_correct_SplitDWI;
motion_correct_inputnode -> motion_correct_SplitDWI;
motion_correct_inputnode -> motion_correct_Rotate_Bvec;
motion_correct_SplitDWI -> motion_correct_InsertRefmat;
subgraph cluster_motion_correct_DWICoregistration {
label="DWICoregistration";
motion_correct_DWICoregistration_inputnode[label="inputnode (utility)"];
motion_correct_DWICoregistration_Bias[label="Bias (ants)"];
motion_correct_DWICoregistration_B0Equalize[label="B0Equalize (utility)"];
motion_correct_DWICoregistration_InitXforms[label="InitXforms (utility)"];
motion_correct_DWICoregistration_MskDilate[label="MskDilate (fsl)"];
motion_correct_DWICoregistration_SplitDWIs[label="SplitDWIs (fsl)"];
motion_correct_DWICoregistration_DWEqualize[label="DWEqualize (utility)"];
motion_correct_DWICoregistration_CoRegistration[label="CoRegistration (fsl)"];
motion_correct_DWICoregistration_RemoveNegative[label="RemoveNegative (fsl)"];
motion_correct_DWICoregistration_MergeDWIs[label="MergeDWIs (fsl)"];
motion_correct_DWICoregistration_outputnode[label="outputnode (utility)"];
motion_correct_DWICoregistration_inputnode -> motion_correct_DWICoregistration_InitXforms;
motion_correct_DWICoregistration_inputnode -> motion_correct_DWICoregistration_InitXforms;
motion_correct_DWICoregistration_inputnode -> motion_correct_DWICoregistration_SplitDWIs;
motion_correct_DWICoregistration_inputnode -> motion_correct_DWICoregistration_Bias;
motion_correct_DWICoregistration_inputnode -> motion_correct_DWICoregistration_Bias;
motion_correct_DWICoregistration_inputnode -> motion_correct_DWICoregistration_MskDilate;
motion_correct_DWICoregistration_inputnode -> motion_correct_DWICoregistration_B0Equalize;
motion_correct_DWICoregistration_Bias -> motion_correct_DWICoregistration_B0Equalize;
motion_correct_DWICoregistration_B0Equalize -> motion_correct_DWICoregistration_CoRegistration;
motion_correct_DWICoregistration_InitXforms -> motion_correct_DWICoregistration_CoRegistration;
motion_correct_DWICoregistration_MskDilate -> motion_correct_DWICoregistration_CoRegistration;
motion_correct_DWICoregistration_MskDilate -> motion_correct_DWICoregistration_CoRegistration;
motion_correct_DWICoregistration_MskDilate -> motion_correct_DWICoregistration_DWEqualize;
motion_correct_DWICoregistration_SplitDWIs -> motion_correct_DWICoregistration_DWEqualize;
motion_correct_DWICoregistration_DWEqualize -> motion_correct_DWICoregistration_CoRegistration;
motion_correct_DWICoregistration_CoRegistration -> motion_correct_DWICoregistration_outputnode;
motion_correct_DWICoregistration_CoRegistration -> motion_correct_DWICoregistration_RemoveNegative;
motion_correct_DWICoregistration_RemoveNegative -> motion_correct_DWICoregistration_MergeDWIs;
motion_correct_DWICoregistration_MergeDWIs -> motion_correct_DWICoregistration_outputnode;
}
motion_correct_InsertRefmat -> motion_correct_Rotate_Bvec;
motion_correct_InsertRefmat -> motion_correct_outputnode;
motion_correct_Rotate_Bvec -> motion_correct_outputnode;
motion_correct_DWICoregistration_outputnode -> motion_correct_InsertRefmat;
motion_correct_DWICoregistration_outputnode -> motion_correct_outputnode;
motion_correct_inputnode -> motion_correct_DWICoregistration_inputnode;
motion_correct_SplitDWI -> motion_correct_DWICoregistration_inputnode;
motion_correct_SplitDWI -> motion_correct_DWICoregistration_inputnode;
motion_correct_SplitDWI -> motion_correct_DWICoregistration_inputnode;
}](../../_images/graphviz-d50b08806e6fbc5ae6e753e5cc4afb7c9342419f.png)
remove_bias()
¶
This workflow estimates a single multiplicative bias field from the averaged b0 image, as suggested in [Jeurissen2014].
References
[Jeurissen2014] | Jeurissen B. et al., Multi-tissue constrained spherical deconvolution for improved analysis of multi-shell diffusion MRI data. NeuroImage (2014). doi: 10.1016/j.neuroimage.2014.07.061 |
Example¶
>>> from nipype.workflows.dmri.fsl.artifacts import remove_bias
>>> bias = remove_bias()
>>> bias.inputs.inputnode.in_file = 'epi.nii'
>>> bias.inputs.inputnode.in_bval = 'diffusion.bval'
>>> bias.inputs.inputnode.in_mask = 'mask.nii'
>>> bias.run()
Graph¶
![digraph bias_correct{
label="bias_correct";
bias_correct_inputnode[label="inputnode (utility)"];
bias_correct_SplitDWIs[label="SplitDWIs (fsl)"];
bias_correct_b0_avg[label="b0_avg (utility)"];
bias_correct_Bias_b0[label="Bias_b0 (ants)"];
bias_correct_RemoveBiasOfDWIs[label="RemoveBiasOfDWIs (fsl)"];
bias_correct_RemoveNegative[label="RemoveNegative (fsl)"];
bias_correct_MergeDWIs[label="MergeDWIs (fsl)"];
bias_correct_outputnode[label="outputnode (utility)"];
bias_correct_inputnode -> bias_correct_Bias_b0;
bias_correct_inputnode -> bias_correct_b0_avg;
bias_correct_inputnode -> bias_correct_b0_avg;
bias_correct_inputnode -> bias_correct_SplitDWIs;
bias_correct_SplitDWIs -> bias_correct_RemoveBiasOfDWIs;
bias_correct_b0_avg -> bias_correct_Bias_b0;
bias_correct_Bias_b0 -> bias_correct_RemoveBiasOfDWIs;
bias_correct_RemoveBiasOfDWIs -> bias_correct_RemoveNegative;
bias_correct_RemoveNegative -> bias_correct_MergeDWIs;
bias_correct_MergeDWIs -> bias_correct_outputnode;
}](../../_images/graphviz-8f9f54bcb7826335874de09396e70b6b9fa4e019.png)
sdc_fmb()
¶
SDC stands for susceptibility distortion correction. FMB stands for fieldmap-based.
The fieldmap based (FMB) method implements SDC by using a mapping of the B0 field as proposed by [Jezzard95]. This workflow uses the implementation of FSL (FUGUE). Phase unwrapping is performed using PRELUDE [Jenkinson03]. Preparation of the fieldmap is performed reproducing the script in FSL fsl_prepare_fieldmap.
Example¶
>>> from nipype.workflows.dmri.fsl.artifacts import sdc_fmb
>>> fmb = sdc_fmb()
>>> fmb.inputs.inputnode.in_file = 'diffusion.nii'
>>> fmb.inputs.inputnode.in_ref = list(range(0, 30, 6))
>>> fmb.inputs.inputnode.in_mask = 'mask.nii'
>>> fmb.inputs.inputnode.bmap_mag = 'magnitude.nii'
>>> fmb.inputs.inputnode.bmap_pha = 'phase.nii'
>>> fmb.inputs.inputnode.settings = 'epi_param.txt'
>>> fmb.run()
Warning
Only SIEMENS format fieldmaps are supported.
References
[Jezzard95] | Jezzard P, and Balaban RS, Correction for geometric distortion in echo planar images from B0 field variations, MRM 34(1):65-73. (1995). doi: 10.1002/mrm.1910340111. |
[Jenkinson03] | Jenkinson M., Fast, automated, N-dimensional phase-unwrapping algorithm, MRM 49(1):193-197, 2003, doi: 10.1002/mrm.10354. |
Graph¶
![digraph fmb_correction{
label="fmb_correction";
fmb_correction_inputnode[label="inputnode (utility)"];
fmb_correction_PreparePhase[label="PreparePhase (utility)"];
fmb_correction_SplitDWIs[label="SplitDWIs (fsl)"];
fmb_correction_GetFirst[label="GetFirst (fsl)"];
fmb_correction_Bias[label="Bias (ants)"];
fmb_correction_BrainExtraction[label="BrainExtraction (fsl)"];
fmb_correction_MskDilate[label="MskDilate (fsl)"];
fmb_correction_PhaseUnwrap[label="PhaseUnwrap (fsl)"];
fmb_correction_Baseline[label="Baseline (utility)"];
fmb_correction_FMm_to_B0[label="FMm_to_B0 (ants)"];
fmb_correction_SettingsGrabber[label="SettingsGrabber (io)"];
fmb_correction_EffEcho[label="EffEcho (utility)"];
fmb_correction_ToRadSec[label="ToRadSec (utility)"];
fmb_correction_FMp_to_B0[label="FMp_to_B0 (ants)"];
fmb_correction_PreliminaryFugue[label="PreliminaryFugue (fsl)"];
fmb_correction_DemeanFmap[label="DemeanFmap (utility)"];
fmb_correction_AddEmptyVol[label="AddEmptyVol (utility)"];
fmb_correction_ComputeVSM[label="ComputeVSM (fsl)"];
fmb_correction_UnwarpDWIs[label="UnwarpDWIs (fsl)"];
fmb_correction_RemoveNegative[label="RemoveNegative (fsl)"];
fmb_correction_MergeDWIs[label="MergeDWIs (fsl)"];
fmb_correction_outputnode[label="outputnode (utility)"];
fmb_correction_inputnode -> fmb_correction_PreparePhase;
fmb_correction_inputnode -> fmb_correction_SplitDWIs;
fmb_correction_inputnode -> fmb_correction_PreliminaryFugue;
fmb_correction_inputnode -> fmb_correction_FMm_to_B0;
fmb_correction_inputnode -> fmb_correction_ComputeVSM;
fmb_correction_inputnode -> fmb_correction_DemeanFmap;
fmb_correction_inputnode -> fmb_correction_GetFirst;
fmb_correction_inputnode -> fmb_correction_Baseline;
fmb_correction_inputnode -> fmb_correction_Baseline;
fmb_correction_inputnode -> fmb_correction_SettingsGrabber;
fmb_correction_PreparePhase -> fmb_correction_PhaseUnwrap;
fmb_correction_SplitDWIs -> fmb_correction_UnwarpDWIs;
fmb_correction_GetFirst -> fmb_correction_Bias;
fmb_correction_Bias -> fmb_correction_BrainExtraction;
fmb_correction_Bias -> fmb_correction_FMm_to_B0;
fmb_correction_Bias -> fmb_correction_PhaseUnwrap;
fmb_correction_BrainExtraction -> fmb_correction_MskDilate;
fmb_correction_MskDilate -> fmb_correction_PhaseUnwrap;
fmb_correction_MskDilate -> fmb_correction_FMm_to_B0;
fmb_correction_PhaseUnwrap -> fmb_correction_ToRadSec;
fmb_correction_Baseline -> fmb_correction_FMm_to_B0;
fmb_correction_Baseline -> fmb_correction_FMp_to_B0;
fmb_correction_FMm_to_B0 -> fmb_correction_FMp_to_B0;
fmb_correction_FMm_to_B0 -> fmb_correction_FMp_to_B0;
fmb_correction_SettingsGrabber -> fmb_correction_ComputeVSM;
fmb_correction_SettingsGrabber -> fmb_correction_UnwarpDWIs;
fmb_correction_SettingsGrabber -> fmb_correction_EffEcho;
fmb_correction_SettingsGrabber -> fmb_correction_EffEcho;
fmb_correction_SettingsGrabber -> fmb_correction_ToRadSec;
fmb_correction_EffEcho -> fmb_correction_ComputeVSM;
fmb_correction_ToRadSec -> fmb_correction_FMp_to_B0;
fmb_correction_FMp_to_B0 -> fmb_correction_PreliminaryFugue;
fmb_correction_PreliminaryFugue -> fmb_correction_DemeanFmap;
subgraph cluster_fmb_correction_Cleanup {
label="Cleanup";
fmb_correction_Cleanup_inputnode[label="inputnode (utility)"];
fmb_correction_Cleanup_Despike[label="Despike (fsl)"];
fmb_correction_Cleanup_MskErode[label="MskErode (fsl)"];
fmb_correction_Cleanup_NewMask[label="NewMask (fsl)"];
fmb_correction_Cleanup_ApplyMask[label="ApplyMask (fsl)"];
fmb_correction_Cleanup_Merge[label="Merge (utility)"];
fmb_correction_Cleanup_AddEdge[label="AddEdge (fsl)"];
fmb_correction_Cleanup_outputnode[label="outputnode (utility)"];
fmb_correction_Cleanup_inputnode -> fmb_correction_Cleanup_Despike;
fmb_correction_Cleanup_inputnode -> fmb_correction_Cleanup_Despike;
fmb_correction_Cleanup_inputnode -> fmb_correction_Cleanup_AddEdge;
fmb_correction_Cleanup_inputnode -> fmb_correction_Cleanup_MskErode;
fmb_correction_Cleanup_inputnode -> fmb_correction_Cleanup_NewMask;
fmb_correction_Cleanup_Despike -> fmb_correction_Cleanup_ApplyMask;
fmb_correction_Cleanup_MskErode -> fmb_correction_Cleanup_NewMask;
fmb_correction_Cleanup_MskErode -> fmb_correction_Cleanup_Merge;
fmb_correction_Cleanup_NewMask -> fmb_correction_Cleanup_ApplyMask;
fmb_correction_Cleanup_ApplyMask -> fmb_correction_Cleanup_Merge;
fmb_correction_Cleanup_Merge -> fmb_correction_Cleanup_AddEdge;
fmb_correction_Cleanup_AddEdge -> fmb_correction_Cleanup_outputnode;
}
fmb_correction_AddEmptyVol -> fmb_correction_ComputeVSM;
fmb_correction_ComputeVSM -> fmb_correction_UnwarpDWIs;
fmb_correction_ComputeVSM -> fmb_correction_outputnode;
fmb_correction_UnwarpDWIs -> fmb_correction_RemoveNegative;
fmb_correction_RemoveNegative -> fmb_correction_MergeDWIs;
fmb_correction_MergeDWIs -> fmb_correction_outputnode;
subgraph cluster_fmb_correction_Shiftmap2Warping {
label="Shiftmap2Warping";
fmb_correction_Shiftmap2Warping_inputnode[label="inputnode (utility)"];
fmb_correction_Shiftmap2Warping_Fix_hdr[label="Fix_hdr (utility)"];
fmb_correction_Shiftmap2Warping_ScaleField[label="ScaleField (fsl)"];
fmb_correction_Shiftmap2Warping_vsm2dfm[label="vsm2dfm (fsl)"];
fmb_correction_Shiftmap2Warping_outputnode[label="outputnode (utility)"];
fmb_correction_Shiftmap2Warping_inputnode -> fmb_correction_Shiftmap2Warping_vsm2dfm;
fmb_correction_Shiftmap2Warping_inputnode -> fmb_correction_Shiftmap2Warping_vsm2dfm;
fmb_correction_Shiftmap2Warping_inputnode -> fmb_correction_Shiftmap2Warping_Fix_hdr;
fmb_correction_Shiftmap2Warping_inputnode -> fmb_correction_Shiftmap2Warping_Fix_hdr;
fmb_correction_Shiftmap2Warping_inputnode -> fmb_correction_Shiftmap2Warping_ScaleField;
fmb_correction_Shiftmap2Warping_Fix_hdr -> fmb_correction_Shiftmap2Warping_ScaleField;
fmb_correction_Shiftmap2Warping_ScaleField -> fmb_correction_Shiftmap2Warping_vsm2dfm;
fmb_correction_Shiftmap2Warping_vsm2dfm -> fmb_correction_Shiftmap2Warping_outputnode;
}
fmb_correction_inputnode -> fmb_correction_Cleanup_inputnode;
fmb_correction_MergeDWIs -> fmb_correction_Shiftmap2Warping_inputnode;
fmb_correction_SettingsGrabber -> fmb_correction_Shiftmap2Warping_inputnode;
fmb_correction_Shiftmap2Warping_outputnode -> fmb_correction_outputnode;
fmb_correction_Cleanup_outputnode -> fmb_correction_AddEmptyVol;
fmb_correction_DemeanFmap -> fmb_correction_Cleanup_inputnode;
fmb_correction_ComputeVSM -> fmb_correction_Shiftmap2Warping_inputnode;
}](../../_images/graphviz-e00b909f322f35f70c2759bcc2105f29ccf908b3.png)
sdc_peb()
¶
SDC stands for susceptibility distortion correction. PEB stands for phase-encoding-based.
The phase-encoding-based (PEB) method implements SDC by acquiring diffusion images with two different enconding directions [Andersson2003]. The most typical case is acquiring with opposed phase-gradient blips (e.g. A>>>P and P>>>A, or equivalently, -y and y) as in [Chiou2000], but it is also possible to use orthogonal configurations [Cordes2000] (e.g. A>>>P and L>>>R, or equivalently -y and x). This workflow uses the implementation of FSL (TOPUP).
Example¶
>>> from nipype.workflows.dmri.fsl.artifacts import sdc_peb
>>> peb = sdc_peb()
>>> peb.inputs.inputnode.in_file = 'epi.nii'
>>> peb.inputs.inputnode.alt_file = 'epi_rev.nii'
>>> peb.inputs.inputnode.in_bval = 'diffusion.bval'
>>> peb.inputs.inputnode.in_mask = 'mask.nii'
>>> peb.run()
References
[Andersson2003] | Andersson JL et al., How to correct susceptibility distortions in spin-echo echo-planar images: application to diffusion tensor imaging. Neuroimage. 2003 Oct;20(2):870-88. doi: 10.1016/S1053-8119(03)00336-7 |
[Cordes2000] | Cordes D et al., Geometric distortion correction in EPI using two images with orthogonal phase-encoding directions, in Proc. ISMRM (8), p.1712, Denver, US, 2000. |
[Chiou2000] | Chiou JY, and Nalcioglu O, A simple method to correct off-resonance related distortion in echo planar imaging, in Proc. ISMRM (8), p.1712, Denver, US, 2000. |
Graph¶
![digraph peb_correction{
label="peb_correction";
peb_correction_inputnode[label="inputnode (utility)"];
peb_correction_b0_ref[label="b0_ref (fsl)"];
peb_correction_b0_alt[label="b0_alt (fsl)"];
peb_correction_b0_list[label="b0_list (utility)"];
peb_correction_b0_merged[label="b0_merged (fsl)"];
peb_correction_topup[label="topup (fsl)"];
peb_correction_unwarp[label="unwarp (fsl)"];
peb_correction_outputnode[label="outputnode (utility)"];
peb_correction_inputnode -> peb_correction_b0_ref;
peb_correction_inputnode -> peb_correction_b0_ref;
peb_correction_inputnode -> peb_correction_unwarp;
peb_correction_inputnode -> peb_correction_b0_alt;
peb_correction_inputnode -> peb_correction_b0_alt;
peb_correction_b0_ref -> peb_correction_b0_list;
peb_correction_b0_alt -> peb_correction_b0_list;
peb_correction_b0_list -> peb_correction_b0_merged;
peb_correction_b0_merged -> peb_correction_topup;
peb_correction_topup -> peb_correction_outputnode;
peb_correction_topup -> peb_correction_unwarp;
peb_correction_topup -> peb_correction_unwarp;
peb_correction_topup -> peb_correction_unwarp;
peb_correction_unwarp -> peb_correction_outputnode;
subgraph cluster_peb_correction_Shiftmap2Warping {
label="Shiftmap2Warping";
peb_correction_Shiftmap2Warping_inputnode[label="inputnode (utility)"];
peb_correction_Shiftmap2Warping_Fix_hdr[label="Fix_hdr (utility)"];
peb_correction_Shiftmap2Warping_ScaleField[label="ScaleField (fsl)"];
peb_correction_Shiftmap2Warping_vsm2dfm[label="vsm2dfm (fsl)"];
peb_correction_Shiftmap2Warping_outputnode[label="outputnode (utility)"];
peb_correction_Shiftmap2Warping_inputnode -> peb_correction_Shiftmap2Warping_Fix_hdr;
peb_correction_Shiftmap2Warping_inputnode -> peb_correction_Shiftmap2Warping_Fix_hdr;
peb_correction_Shiftmap2Warping_inputnode -> peb_correction_Shiftmap2Warping_vsm2dfm;
peb_correction_Shiftmap2Warping_inputnode -> peb_correction_Shiftmap2Warping_vsm2dfm;
peb_correction_Shiftmap2Warping_inputnode -> peb_correction_Shiftmap2Warping_ScaleField;
peb_correction_Shiftmap2Warping_Fix_hdr -> peb_correction_Shiftmap2Warping_ScaleField;
peb_correction_Shiftmap2Warping_ScaleField -> peb_correction_Shiftmap2Warping_vsm2dfm;
peb_correction_Shiftmap2Warping_vsm2dfm -> peb_correction_Shiftmap2Warping_outputnode;
}
peb_correction_Shiftmap2Warping_outputnode -> peb_correction_outputnode;
peb_correction_b0_ref -> peb_correction_Shiftmap2Warping_inputnode;
peb_correction_topup -> peb_correction_Shiftmap2Warping_inputnode;
}](../../_images/graphviz-3e7d3679efeb990890e143bc4803837b63a7bc6d.png)