|
27 | 27 | from ..interfaces.base import (traits, TraitedSpec, BaseInterface, |
28 | 28 | BaseInterfaceInputSpec, File, isdefined, |
29 | 29 | InputMultiPath) |
30 | | -from nipype.utils import NUMPY_MMAP |
| 30 | +from ..utils import NUMPY_MMAP |
| 31 | +from ..utils.misc import normalize_mc_params |
31 | 32 |
|
32 | 33 | IFLOG = logging.getLogger('interface') |
33 | 34 |
|
@@ -195,8 +196,8 @@ def _list_outputs(self): |
195 | 196 |
|
196 | 197 |
|
197 | 198 | class FramewiseDisplacementInputSpec(BaseInterfaceInputSpec): |
198 | | - in_file = File(exists=True, mandatory=True, desc='motion parameters as written by FSL MCFLIRT or AFNI 3dvolreg') |
199 | | - parameter_source = traits.Enum("FSL", "AFNI", |
| 199 | + in_file = File(exists=True, mandatory=True, desc='motion parameters') |
| 200 | + parameter_source = traits.Enum("FSL", "AFNI", "SPM", "FSFAST", |
200 | 201 | desc="Source of movement parameters", |
201 | 202 | mandatory=True) |
202 | 203 | radius = traits.Float(50, usedefault=True, |
@@ -253,10 +254,11 @@ class FramewiseDisplacement(BaseInterface): |
253 | 254 |
|
254 | 255 | def _run_interface(self, runtime): |
255 | 256 | mpars = np.loadtxt(self.inputs.in_file) # mpars is N_t x 6 |
256 | | - diff = mpars[:-1, :] - mpars[1:, :] |
257 | | - diff[:, :3] *= self.inputs.radius |
258 | | - if self.inputs.parameter_source == "AFNI": |
259 | | - diff[:, :3] *= (np.pi / 180) |
| 257 | + mpars = np.apply_along_axis(func1d=normalize_mc_params, |
| 258 | + axis=1, arr=mpars, |
| 259 | + source=self.inputs.parameter_source) |
| 260 | + diff = mpars[:-1, :6] - mpars[1:, :6] |
| 261 | + diff[:, 3:6] *= self.inputs.radius |
260 | 262 | fd_res = np.abs(diff).sum(axis=1) |
261 | 263 |
|
262 | 264 | self._results = { |
|
0 commit comments