Skip to content

Commit f7c2ff9

Browse files
committed
integrate S0 and snr into dipy routine
1 parent a6338da commit f7c2ff9

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

nipype/interfaces/dipy/simulate.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ def _run_interface(self, runtime):
130130

131131
# Volume fractions of isotropic compartments
132132
nballs = len(self.inputs.in_vfms)
133-
vfs = np.squeeze(nb.concat_images([nb.load(f) for f in self.inputs.in_vfms]).get_data())
133+
vfs = np.squeeze(nb.concat_images(
134+
[nb.load(f) for f in self.inputs.in_vfms]).get_data())
134135
if nballs == 1:
135136
vfs = vfs[..., np.newaxis]
136137
total_vf = np.sum(vfs, axis=3)
@@ -194,19 +195,25 @@ def _run_interface(self, runtime):
194195
else:
195196
dirs = np.hstack((dirs, fd[msk > 0]))
196197

197-
198198
sf_evals = list(self.inputs.diff_sf)
199199
ba_evals = list(self.inputs.diff_iso)
200200

201-
mevals = [sf_evals] * nsticks + [[ba_evals[d]]*3 for d in range(nballs)]
201+
mevals = [sf_evals] * nsticks + \
202+
[[ba_evals[d]] * 3 for d in range(nballs)]
203+
ba_sticks = [(1.0, 0.0, 0.0)] * nballs
204+
b0 = b0_im.get_data()[msk > 0]
205+
202206
args = []
203207
for i in range(nvox):
204208
args.append(
205209
{'fractions': fracs[i, ...].tolist(),
206-
'sticks': [tuple(dirs[i, j:j+3]) for j in range(nsticks)] + [(1.0, 0.0, 0.0)] * nballs,
210+
'sticks': [tuple(dirs[i, j:j + 3])
211+
for j in range(nsticks)] + ba_sticks,
207212
'gradients': gtab,
208-
'mevals': mevals
209-
})
213+
'mevals': mevals,
214+
'S0': b0[i],
215+
'snr': self.inputs.snr
216+
})
210217

211218
n_proc = self.inputs.n_proc
212219
if n_proc == 0:
@@ -219,23 +226,14 @@ def _run_interface(self, runtime):
219226

220227
# Simulate sticks using dipy
221228
iflogger.info(('Starting simulation of %d voxels, %d diffusion'
222-
' directions.') % (len(args), ndirs))
229+
' directions.') % (len(args), ndirs))
223230
result = np.array(pool.map(_compute_voxel, args))
224231
if np.shape(result)[1] != ndirs:
225232
raise RuntimeError(('Computed directions do not match number'
226233
'of b-values.'))
227234

228235
signal = np.zeros((shape[0], shape[1], shape[2], ndirs))
229-
signal[msk > 0] += result
230-
231-
# Add noise
232-
if self.inputs.snr > 0:
233-
signal[msk > 0] = add_noise(signal[msk > 0], self.inputs.snr, 1)
234-
235-
# S0
236-
b0 = b0_im.get_data()
237-
for i in xrange(ndirs):
238-
signal[..., i] *= b0
236+
signal[msk > 0] = result
239237

240238
simhdr = hdr.copy()
241239
simhdr.set_data_dtype(np.float32)
@@ -279,10 +277,12 @@ def _compute_voxel(args):
279277
# Simulate sticks
280278
if sf_vf > 1.0e-3:
281279
ffs = ((np.array(ffs) / sf_vf) * 100)
282-
signal, _ = multi_tensor(gtab, args['mevals'], S0=1.0,
280+
snr = args['snr'] if args['snr'] > 0 else None
281+
signal, _ = multi_tensor(gtab, args['mevals'],
282+
S0=args['S0'],
283283
angles=args['sticks'],
284284
fractions=ffs,
285-
snr=None)
285+
snr=snr)
286286
else:
287287
signal = np.zeros_like(gtab.bvals, dtype=np.float32)
288288

0 commit comments

Comments
 (0)