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