:param p: Parameters (amplitude, x,y center position, width, offset) :param xi: x positions :param yi: y positions :return: The Gaussian 2D peak. """ arg = -(np.square(xi - p[1]) + np.square(yi - p[2])) / (2 * p[3] * p[3]) y = p[0] * np.exp(arg) + p[4] return y if __name__ == '__main__': if not gf.cuda_available(): raise RuntimeError(gf.get_last_error()) # number of fits and fit points number_fits = 10000 size_x = 12 number_points = size_x * size_x number_parameters = 5 # set input arguments # true parameters true_parameters = np.array((10, 5.5, 5.5, 3, 10), dtype=np.float32) # initialize random number generator np.random.seed(0)
y = np.zeros((n_fits, x.shape[0], x.shape[1]), dtype=np.float32) # loop over each fit for i in range(n_fits): pi = p[i, :] arg = -(np.square(xi - pi[1]) + np.square(yi - pi[2])) / (2 * pi[3] * pi[3]) y[i, :, :] = pi[0] * np.exp(arg) + pi[4] return y if __name__ == '__main__': # cuda available checks print('CUDA available: {}'.format(gf.cuda_available())) if not gf.cuda_available(): raise RuntimeError(gf.get_last_error()) print( 'CUDA versions runtime: {}, driver: {}'.format(*gf.get_cuda_version())) # number of fit points size_x = 5 number_points = size_x * size_x # set input arguments # true parameters mean_true_parameters = np.array((100, 2, 2, 1, 10), dtype=np.float32) # average noise level
import numba import numpy as np import warnings warnings.filterwarnings("ignore") import picasso.io as io import picasso.localize as localize import picasso.gausslq as gausslq import picasso.postprocess as postprocess import picasso_addon ### Test if GPU fitting can be used try: from pygpufit import gpufit as gf gpufit_available = True gpufit_available = gf.cuda_available() except ImportError: gpufit_available = False #%% @numba.jit(nopython=True, nogil=True, cache=False) def gradient_at(frame, y, x, i): gy = frame[y + 1, x] - frame[y - 1, x] gx = frame[y, x + 1] - frame[y, x - 1] return gy, gx #%% @numba.jit(nopython=True, nogil=True, cache=False) def boxvals_in_frame(frame, y, x, box):