def METHOD_NAME(self, event):
    import numpy as np
    #import pylab
    from PYME.Analysis.PSFGen import fourierHNA
    from PYME.IO.image import ImageStack
    from PYME.DSView import ViewIm3D
    self.configure_traits(kind='modal')
    z_ = np.arange(self.sizeZ)*float(self.zSpacing)
    z_ -= z_.mean()        
    #if self.vectorial:
    #    ps = fourierHNA.PsfFromPupilVect(self.image.data[:,:], z_, self.image.mdh['voxelsize.x']*1e3, self.wavelength, apodization=self.apodization, NA=self.NA)#, shape = [self.sizeX, self.sizeX])
    #    #ps = abs(ps*np.conj(ps))
    #else:
    #    ps = fourierHNA.PsfFromPupil(self.image.data[:,:], z_, self.image.mdh['voxelsize.x']*1e3, self.wavelength, apodization=self.apodization, NA=self.NA)#, shape = [self.sizeX, self.sizeX])
    ps = fourierHNA.GenZernikeDPSF(z_, dx = self.image.voxelsize_nm.x,
                                   zernikeCoeffs = self.dsviewer.zernModes, lamb=self.wavelength, 
                                   n=1.51, NA = self.NA, ns=1.51, beadsize=0, 
                                   vect=self.vectorial, apodization=self.apodization)
    #ps = ps/ps[:,:,self.sizeZ/2].sum()
    ps = ps/ps.max()
    im = ImageStack(ps, titleStub = 'Generated PSF')
    im.mdh.copyEntriesFrom(self.image.mdh)
    im.mdh['Parent'] = self.image.filename
    #im.mdh['Processing.CropROI'] = roi
    mode = 'psf'
    dv = ViewIm3D(im, mode=mode, glCanvas=self.dsviewer.glCanvas, parent=wx.GetTopLevelParent(self.dsviewer))     