def handler(points, mr, gofscale, gof, sigma): from pdf2py import readwrite from meg import density from mri import transform from scipy import ndimage from nifti import NiftiImage from numpy import float32, int16, array report = {} fids = eval(mr.description) lpa = fids[0] rpa = fids[1] nas = fids[2] # self.points = array([[0,0,0],[10,0,0],[0,20,0]])#DEBUG----------------- xyz = transform.meg2mri(lpa, rpa, nas, dipole=points) # readwrite.writedata(xyz, os.path.dirname(mripath)+'/'+'xyz') print "lpa, rpa, nas", lpa, rpa, nas print mr.pixdim # do some scaling of the dips using the GOF as a weight. VoxDim = mr.voxdim[::-1] xyzscaled = (xyz / VoxDim).T print xyzscaled d = density.calc(xyz) gofscale = float32(gofscale) print "gofscale", gofscale s = gof - gofscale sf = (1 / (1 - gofscale)) * s ds = d * sf # apply a 1D gaussian filter z = density.val2img(mr.data, ds, xyzscaled) # sigma = float32(self.sigmaval.GetValue()) print "sigma", sigma # sigma = 3 print "filtering 1st dimension" f = ndimage.gaussian_filter1d(z, sigma * 1 / VoxDim[0], axis=0) print "filtering 2nd dimension" f = ndimage.gaussian_filter1d(f, sigma * 1 / VoxDim[1], axis=1) print "filtering 3rd dimension" f = ndimage.gaussian_filter1d(f, sigma * 1 / VoxDim[2], axis=2) scaledf = int16((z.max() / f.max()) * f * 1000) print "writing nifti output image" overlay = NiftiImage(int16(scaledf)) overlay.setDescription(mr.description) overlay.setFilename(mr.filename + "dd") overlay.setQForm(mr.getQForm()) return overlay
def handler(points,mr,gofscale,gof,sigma): from pdf2py import readwrite from meg import density from mri import transform from scipy import ndimage #from nifti import NiftiImage from mri import img_nibabel as img from numpy import float32, int16, array from pdf2py import readwrite import nibabel,os report = {} filename = mr.nifti.get_filename() #try: xfm = readwrite.readdata(os.path.splitext(filename)[0]+'.pym') #except: print 'Error reading coregistration info' lpa = mr.lpa rpa = mr.rpa nas = mr.nas #fids = eval(mr.description) #lpa = fids[0] #rpa = fids[1] #nas = fids[2] #self.points = array([[0,0,0],[10,0,0],[0,20,0]])#DEBUG----------------- xyz = transform.meg2mri(lpa,rpa,nas, dipole=points) #readwrite.writedata(xyz, os.path.dirname(mripath)+'/'+'xyz') print 'lpa, rpa, nas', lpa, rpa, nas print 'xyz in mri space', xyz print 'pixdim', mr.pixdim #do some scaling of the dips using the GOF as a weight. #VoxDim = mr.voxdim[::-1] VoxDim = mr.pixdim xyzscaled = (xyz/VoxDim).T print xyzscaled d = density.calc(xyz) gofscale = float32(gofscale) print 'gofscale',gofscale s= gof-gofscale sf=(1/(1-gofscale))*s ds = d*sf #apply a 1D gaussian filter z = density.val2img(mr.data, ds, xyzscaled) #sigma = float32(self.sigmaval.GetValue()) print 'sigma',sigma #sigma = 3 print 'filtering 1st dimension' f = ndimage.gaussian_filter1d(z, sigma*1/VoxDim[0], axis=0) print 'filtering 2nd dimension' f = ndimage.gaussian_filter1d(f, sigma*1/VoxDim[1], axis=1) print 'filtering 3rd dimension' f = ndimage.gaussian_filter1d(f, sigma*1/VoxDim[2], axis=2) scaledf = int16((z.max()/f.max())*f*1000) print 'writing nifti output image' #overlay = NiftiImage(int16(scaledf)) overlay = nibabel.Nifti1Image(scaledf,mr.nifti.get_affine(),mr.nifti.get_header()) #overlay = NiftiImage(int16(scaledf)) #overlay.setDescription(mr.description) filename = os.path.splitext(mr.nifti.get_filename())[0] overlay.to_filename(filename+'dd.nii.gz') print 'Density Image Saved', filename+'dd.nii.gz' #overlay.setFilename(mr.filename+'dd') #overlay.setQForm(mr.getQForm()) return overlay