Skip to content

Commit 4748184

Browse files
committed
add noise, add test
1 parent dcd0f15 commit 4748184

File tree

2 files changed

+62
-3
lines changed

2 files changed

+62
-3
lines changed

nipype/interfaces/dipy/simulate.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
have_dipy = False
3030
else:
3131
import numpy as np
32-
from dipy.sims.voxel import (multi_tensor,
32+
from dipy.sims.voxel import (multi_tensor, add_noise,
3333
all_tensor_evecs)
3434
from dipy.core.gradients import gradient_table
3535

@@ -60,6 +60,7 @@ class SimulateMultiTensorInputSpec(BaseInterfaceInputSpec):
6060
desc='file with the mask simulated')
6161
out_bvec = File('bvec.sim', usedefault=True, desc='simulated b vectors')
6262
out_bval = File('bval.sim', usedefault=True, desc='simulated b values')
63+
snr = traits.Int(30, usedefault=True, desc='signal-to-noise ratio (dB)')
6364

6465

6566
class SimulateMultiTensorOutputSpec(TraitedSpec):
@@ -143,7 +144,8 @@ def _run_interface(self, runtime):
143144
np.savetxt(op.abspath(self.inputs.out_bvec), gtab.bvecs.T)
144145
np.savetxt(op.abspath(self.inputs.out_bval), gtab.bvals.T)
145146

146-
args = [tuple(np.hstack((r, gtab))) for r in args]
147+
snr = self.inputs.snr
148+
args = [tuple(np.hstack((r, gtab, snr))) for r in args]
147149

148150
n_proc = self.inputs.n_proc
149151
if n_proc == 0:
@@ -154,7 +156,8 @@ def _run_interface(self, runtime):
154156
except TypeError:
155157
pool = Pool(processes=n_proc)
156158

157-
iflogger.info('Starting simulation of %d voxels' % len(args))
159+
iflogger.info(('Starting simulation of %d voxels, %d diffusion'
160+
' directions.') % (len(args), len(gtab.bvals)))
158161
result = pool.map(_compute_voxel, args)
159162
ndirs = np.shape(result)[1]
160163

@@ -229,6 +232,9 @@ def _compute_voxel(args):
229232
except IndexError:
230233
pass
231234

235+
if snr is not None and snr >= 0:
236+
signal[1:] = add_noise(signal[1:], snr, 1)
237+
232238
return signal * S0
233239

234240

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT
2+
from nipype.testing import assert_equal
3+
from nipype.interfaces.dipy.simulate import SimulateMultiTensor
4+
5+
def test_SimulateMultiTensor_inputs():
6+
input_map = dict(baseline=dict(mandatory=True,
7+
),
8+
bval=dict(),
9+
bvalues=dict(usedefault=True,
10+
),
11+
bvec=dict(),
12+
gradients=dict(),
13+
ignore_exception=dict(nohash=True,
14+
usedefault=True,
15+
),
16+
in_dirs=dict(mandatory=True,
17+
),
18+
in_frac=dict(mandatory=True,
19+
),
20+
in_mask=dict(),
21+
in_vfms=dict(mandatory=True,
22+
),
23+
n_proc=dict(usedefault=True,
24+
),
25+
num_dirs=dict(usedefault=True,
26+
),
27+
out_bval=dict(usedefault=True,
28+
),
29+
out_bvec=dict(usedefault=True,
30+
),
31+
out_file=dict(usedefault=True,
32+
),
33+
out_mask=dict(usedefault=True,
34+
),
35+
)
36+
inputs = SimulateMultiTensor.input_spec()
37+
38+
for key, metadata in input_map.items():
39+
for metakey, value in metadata.items():
40+
yield assert_equal, getattr(inputs.traits()[key], metakey), value
41+
42+
def test_SimulateMultiTensor_outputs():
43+
output_map = dict(out_bval=dict(),
44+
out_bvec=dict(),
45+
out_file=dict(),
46+
out_mask=dict(),
47+
)
48+
outputs = SimulateMultiTensor.output_spec()
49+
50+
for key, metadata in output_map.items():
51+
for metakey, value in metadata.items():
52+
yield assert_equal, getattr(outputs.traits()[key], metakey), value
53+

0 commit comments

Comments
 (0)