def METHOD_NAME(self, x, y, z=None, roiHalfSize=7, axialHalfSize=15):
    X, Y, Z, data, background, sigma, xslice, yslice, zslice = self.get3DROIAtPoint(x, y, z, roiHalfSize, axialHalfSize)
    dataMean = data - background
    #estimate some start parameters...
    A = dataMean.max() - dataMean.min() #amplitude
    vx, vy, vz = self.metadata.voxelsize_nm
    x0 = vx*x
    y0 = vy*y
    if (z is None): # use position of maximum intensity
        z = self.data[x,y,:].argmax()
    z0 = vz*z
    bgm = np.mean(background)
    jitter_mag = 70  # TODO: Don't hardcode this?
    sxy = 250/2.35   # Guess for lateral sigma
    rand_x = jitter_mag*np.random.randn()
    rand_y = jitter_mag*np.random.randn()
    rand_z = jitter_mag*np.random.randn()
    startParameters = [3*A,             # A
                       x0+rand_x,       # x0
                       y0+rand_y,       # y0
                       z0+rand_z,       # z0
                       x0-rand_x,       # x1
                       y0-rand_y,       # y1
                       z0-rand_z,       # z1
                       sxy,             # wxy
                       2.5*sxy,         # wz
                       dataMean.min()]  # background
    # do the fit
    (res, cov_x, infodict, mesg, resCode) = self.solver(self.fitfcn, startParameters, dataMean, sigma, X, Y, Z)
    #try to estimate errors based on the covariance matrix
    fitErrors=None
    try:       
        fitErrors = np.sqrt(np.diag(cov_x)*(infodict['fvec']*infodict['fvec']).sum()/(len(dataMean.ravel())- len(res)))
    except Exception:
        pass
    # euclidean distance between final fits
    length = np.sqrt((res[1] - res[4])**2 + (res[2] - res[5])**2 + (res[3] - res[6])**2)
    #package results
    return Dumbell3DFitResultR(res, self.metadata, (xslice, yslice, zslice), resCode, fitErrors, bgm, length)