Skip to content

Commit 0de90cf

Browse files
committed
preparing new workflow for parallel processing
1 parent dc1a4cd commit 0de90cf

File tree

1 file changed

+33
-12
lines changed
  • nipype/workflows/dmri/fsl

1 file changed

+33
-12
lines changed

nipype/workflows/dmri/fsl/dti.py

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,40 +123,61 @@ def merge_and_mean(name='mm'):
123123
return wf
124124

125125

126-
def gen_chunks(dwi, mask, nchunks=6):
126+
def gen_chunks(dwi, mask, nvoxels=100):
127127
import nibabel as nb
128128
import numpy as np
129+
from math import sqrt, ceil
129130

130131
mask = nb.load(mask).get_data()
131132
mask[mask > 0] = 1
132133
mask[mask < 1] = 0
133-
nzels = np.nonzero(mask)
134-
np.savetxt('nonzeroidx.txt', nzels)
135134

136135
dshape = mask.shape
137136
mask = mask.reshape(-1).astype(np.uint8)
137+
138+
nzels = np.nonzero(mask)
139+
np.savez('nonzeroidx', nzels)
138140
els = np.sum(mask)
139-
chunkels = round(els / nchunks)
140141

141-
data = mask.copy()
142+
chunkside = int(ceil(sqrt(nvoxels)))
143+
chshape = (chunkside, chunkside, 1)
144+
chunkels = chunkside**2
145+
nchunks = int(ceil(els/chunkels))
146+
147+
data = nb.load(dwi).get_data().astype(np.float32)
148+
data = np.squeeze(data.reshape((mask.size, -1)).take(nzels, axis=0))
142149

143150
out_files = []
144151
out_masks = []
145152

146-
for i in xrange(chunkels):
153+
for i in xrange(nchunks):
147154
first = i * chunkels
148-
last = (i+1) * chunkels + 1
155+
last = (i+1) * chunkels
156+
fill = 0
149157

150-
chunk = data[first:last, ...]
158+
if last > els:
159+
fill = last - els
160+
last = els
151161

152-
fname = 'chunk%05d.nii.gz' % i
153-
nb.Nifti1Image(chunk, None, None).to_filename(fname)
154-
out_files.append(fname)
162+
datchunk = data[first:last, ...]
163+
mskchunk = np.ones((last-first), dtype=np.uint8)
164+
165+
if fill > 0:
166+
print 'filling %d elements' % fill
167+
mskchunk = np.hstack((mskchunk, np.zeros((fill,), dtype=np.uint8)))
168+
datchunk = np.vstack((datchunk, np.zeros((fill,
169+
data.shape[-1]), dtype=np.float32)))
155170

156171
mname = 'mask%05d.nii.gz' % i
157-
nb.Nifti1Image(mask[first:last],
172+
nb.Nifti1Image(mskchunk.reshape(chshape),
158173
None, None).to_filename(mname)
159174
out_masks.append(mname)
160175

176+
datashape = [s for s in chshape] + [-1]
177+
fname = 'chunk%05d.nii.gz' % i
178+
nb.Nifti1Image(datchunk.reshape(tuple(datashape)),
179+
None, None).to_filename(fname)
180+
out_files.append(fname)
181+
161182
return out_files, out_masks
162183

0 commit comments

Comments
 (0)