Skip to content

Commit bc203b9

Browse files
committed
Merge pull request #344 from akeshavan/epidewarp
Enh: added epidewarp.fsl wrapper
2 parents 4baee04 + 55fdbee commit bc203b9

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed

nipype/interfaces/fsl/utils.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -985,3 +985,107 @@ def _gen_filename(self, name):
985985
if name == 'out_file':
986986
return self._gen_outfilename()
987987
return None
988+
989+
class EPIDeWarpInputSpec(FSLCommandInputSpec):
990+
991+
mag_file = File(exists=True,
992+
desc='Magnitude file',
993+
argstr='--mag %s', position=0, mandatory=True)
994+
dph_file = File(exists=True,
995+
desc='Phase file assumed to be scaled from 0 to 4095',
996+
argstr='--dph %s', mandatory=True)
997+
exf_file = File(exists=True,
998+
desc='example func volume (or use epi)',
999+
argstr='--exf %s', mandatory=False)
1000+
epi_file = File(exists=True,
1001+
desc='EPI volume to unwarp',
1002+
argstr='--epi %s', mandatory=False)
1003+
tediff = traits.Float(2.46, usedefault=True,
1004+
desc='difference in B0 field map TEs',
1005+
argstr='--tediff %s')
1006+
esp = traits.Float(0.58, desc='EPI echo spacing',
1007+
argstr='--esp %s', usedefault=True)
1008+
sigma = traits.Int(2, usedefault=True, argstr='--sigma %s',
1009+
desc="2D spatial gaussing smoothing \
1010+
stdev (default = 2mm)")
1011+
vsm = traits.String(genfile=True, desc='voxel shift map',
1012+
argstr='--vsm %s')
1013+
exfdw = traits.String(desc='dewarped example func volume', genfile=True,
1014+
argstr='--exfdw %s')
1015+
epidw = traits.String(desc='dewarped epi volume', genfile=False,
1016+
argstr='--epidw %s')
1017+
tmpdir = traits.String(genfile=True, desc='tmpdir',
1018+
argstr='--tmpdir %s')
1019+
nocleanup = traits.Bool(True, usedefault=True, desc='no cleanup',
1020+
argstr='--nocleanup')
1021+
cleanup = traits.Bool(desc='cleanup',
1022+
argstr='--cleanup')
1023+
1024+
1025+
class EPIDeWarpOutputSpec(TraitedSpec):
1026+
unwarped_file = File(desc="unwarped epi file")
1027+
vsm_file = File(desc="voxel shift map")
1028+
exfdw = File(desc="dewarped functional volume example")
1029+
exf_mask = File(desc="Mask from example functional volume")
1030+
1031+
1032+
class EPIDeWarp(FSLCommand):
1033+
"""Wraps fieldmap unwarping script from Freesurfer's epidewarp.fsl_
1034+
1035+
Examples
1036+
--------
1037+
>>> dewarp = EPIDeWarp()
1038+
>>> dewarp.inputs.epi_file = "functional.nii"
1039+
>>> dewarp.inputs.mag_file = "magnitude.nii"
1040+
>>> dewarp.inputs.dph_file = "phase.nii"
1041+
>>> res = dewarp.run() # doctest: +SKIP
1042+
1043+
References
1044+
----------
1045+
_epidewarp.fsl: http://surfer.nmr.mgh.harvard.edu/fswiki/epidewarp.fsl
1046+
1047+
"""
1048+
1049+
_cmd = 'epidewarp.fsl'
1050+
input_spec = EPIDeWarpInputSpec
1051+
output_spec = EPIDeWarpOutputSpec
1052+
1053+
def _gen_filename(self, name):
1054+
if name == 'exfdw':
1055+
if isdefined(self.inputs.exf_file):
1056+
return self._gen_fname(self.inputs.exf_file,
1057+
suffix="_exfdw")
1058+
else:
1059+
return self._gen_fname("exfdw")
1060+
if name == 'epidw':
1061+
if isdefined(self.inputs.epi_file):
1062+
return self._gen_fname(self.inputs.epi_file,
1063+
suffix="_epidw")
1064+
if name == 'vsm':
1065+
return self._gen_fname('vsm')
1066+
if name == 'tmpdir':
1067+
return os.path.join(os.getcwd(), 'temp')
1068+
return None
1069+
1070+
def _list_outputs(self):
1071+
outputs = self.output_spec().get()
1072+
if not isdefined(self.inputs.exfdw):
1073+
outputs['exfdw'] = self._gen_filename('exfdw')
1074+
else:
1075+
outputs['exfdw'] = self.inputs.exfdw
1076+
if isdefined(self.inputs.epi_file):
1077+
if isdefined(self.inputs.epidw):
1078+
outputs['unwarped_file'] = self.inputs.epidw
1079+
else:
1080+
outputs['unwarped_file'] = self._gen_filename('epidw')
1081+
if not isdefined(self.inputs.vsm):
1082+
outputs['vsm_file'] = self._gen_filename('vsm')
1083+
else:
1084+
outputs['vsm_file'] = self._gen_fname(self.inputs.vsm)
1085+
if not isdefined(self.inputs.tmpdir):
1086+
outputs['exf_mask'] = self._gen_fname(cwd=self._gen_filename('tmpdir'),
1087+
basename='maskexf')
1088+
else:
1089+
outputs['exf_mask'] = self._gen_fname(cwd=self.inputs.tmpdir,
1090+
basename='maskexf')
1091+
return outputs

nipype/testing/data/magnitude.nii

Whitespace-only changes.

nipype/testing/data/phase.nii

Whitespace-only changes.

0 commit comments

Comments
 (0)