From 2f242555e53b6c788c0e2b2fcc5f6fb746b7482b Mon Sep 17 00:00:00 2001 From: Andreas Freise <adf@star.bham.ac.uk> Date: Wed, 11 May 2016 18:07:26 +0100 Subject: [PATCH] removing not-needed function from gaussian beam, chaning HG beam plot to not use pylab --- pykat/optics/gaussian_beams.py | 82 +++++++++------------------------- 1 file changed, 21 insertions(+), 61 deletions(-) diff --git a/pykat/optics/gaussian_beams.py b/pykat/optics/gaussian_beams.py index 390cd52..8be799f 100644 --- a/pykat/optics/gaussian_beams.py +++ b/pykat/optics/gaussian_beams.py @@ -1,3 +1,8 @@ +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + import pykat.exceptions as pkex import numpy as np import math @@ -7,59 +12,6 @@ import cmath from scipy.special import hermite from pykat.SIfloat import SIfloat -def fit_beam_size(z_data, w_data, w0guess, z0guess, lam=1064e-9, show_plot=True, - plotpts=100, title='Beam scan fit', w2zero=True, filename=None): - """ - Function to fit a beam size (w0 and z) to a 2D intensity array. Plotting can - be switched on or off. - - Returns best fit of (w0, z) - - Contributed by Paul Fulda on 15/01/16 - """ - - import scipy.optimize - - def zw0z02w(z, w0, z0, lam): - z_R = pl.pi*w0**2/lam - w = w0*pl.sqrt(1+((z-z0)/z_R)**2) - return w - - popt,pcov = scipy.optimize.curve_fit(lambda z_data, w0, z0: zw0z02w(z_data, w0, z0, lam), z_data, w_data, p0=[w0guess,z0guess]) - w0out=popt[0] - z0out=popt[1] - - z_fit = pl.linspace(min(z_data),max(z_data),plotpts) - w_fit = zw0z02w(z_fit, w0out, z0out, lam) - - - if show_plot or filename is not None: - import pylab as pl - - um=1e6 - - pl.figure() - pl.plot(z_data,w_data*um,'bo', label = 'Data') - pl.plot(z_fit,w_fit*um,'b', label = 'Fit') - pl.tight_layout - pl.grid() - pl.xlabel('Position [m]') - pl.ylabel('Beam size [$\mu$m]') - pl.xlim((min(z_data),max(z_data))) - - if w2zero: - pl.ylim((0,max(w_data)*um)) - - pl.legend(loc=0) - pl.title(title) - - if filename is not None: - pl.savefig(filename) - - return w0out, z0out - - - class gauss_param(object): """ Use beam_param instead, will be the future name of this object. @@ -316,9 +268,15 @@ class gauss_param(object): class beam_param(gauss_param): pass - + +# Should be renamed to HG_mode? class HG_beam(object): - + """ Hermite-Gauss beam profile. Example usage: + import pykat.optics.gaussian_beams as gb + qx=gb.beam_param(w0=1e-3,z=0) + beam=gb.HG_beam(qx,n=2,m=0) + beam.plot() + """ def __init__(self, qx, qy=None, n=0, m=0): self._qx = copy.deepcopy(qx) self._2pi_qrt = math.pow(2.0/math.pi, 0.25) @@ -427,7 +385,9 @@ class HG_beam(object): return np.outer(_un, _um) def plot(self, ndx=100, ndy=100, xscale=4, yscale=4): - import pylab + """ Make a simple plot the HG_beam """ + import pykat.plotting + import matplotlib.pyplot as plt xrange = xscale * np.linspace(-self._qx.w, self._qx.w, ndx) yrange = yscale * np.linspace(-self._qy.w, self._qy.w, ndy) @@ -437,11 +397,11 @@ class HG_beam(object): data = self.Unm(xrange,yrange) - fig = pylab.figure() - axes = pylab.imshow(np.abs(data), aspect=dx/dy, extent=[min(xrange),max(xrange),min(yrange),max(yrange)]) - pylab.xlabel('x [m]') - pylab.ylabel('y [m]') + fig = pykat.plotting.figure() + axes = plt.imshow(np.abs(data.T), aspect=dx/dy, extent=[min(xrange),max(xrange),min(yrange),max(yrange)]) + plt.xlabel('x [m]') + plt.ylabel('y [m]') cbar = fig.colorbar(axes) - pylab.show() + plt.show() -- GitLab