@@ -985,3 +985,107 @@ def _gen_filename(self, name):
985
985
if name == 'out_file' :
986
986
return self ._gen_outfilename ()
987
987
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
0 commit comments