Course: Learn Laser Interferometry with Finesse


3. Gaussian Beams > 3. Mirror maps

Applying Phase Maps

Author: Daniel Töyrä

Introduction

Here we show how to apply a phase map to a mirror used in a Finesse simulation.

Recommended notebooks before you start:

We recommend that you have looked through the notebooks that you find in the folder 03_Gaussian_beams>06_Mirror_maps. The link above only works if you started IPython/Jupyter Notebook in the top directory of this course.

Reading material and references:

[1] C. Bond, D. Brown, A. Freise and K. Strain, "Interferometer Techniques for Gravitational-Wave Detection", Living Reviews in Relativity 19, 3 (2010). - Living review article (more like a book) on laser interferometry in the frequency domain for detecting gravitational waves, and FINESSE.

[2] A. Freise, D. Brown, and C. Bond, "Finesse, Frequency domain INterferomEter Simulation SoftwarE". - FINESSE-manual

[3] FINESSE syntax reference - Useful online syntax reference for FINESSE. Also available in the Finesse manual [2], but this online version is updated more often.

After this session you will be able to...

  • Make a mirror map ready for being used in FINESSE

We start by loading PyKat and other Python packages that we need:

In [1]:
import numpy as np                         # Importing numpy
import matplotlib                          # For plotting
import matplotlib.pyplot as plt                   
from pykat import finesse                  # Importing the pykat.finesse package
from pykat.commands import *               # Importing all packages in pykat.commands.
from pykat.optics.maps import *            # Importing maps package
from IPython.display import display, HTML  # Allows us to display HTML.

# Telling the notebook to make plots inline.
%matplotlib inline      
# Initialises the PyKat plotting tool. Change dpi value 
# to change figure sizes on your screen.
pykat.init_pykat_plotting(dpi=90)          
                                              ..-
    PyKat 1.1.349         _                  '(
                          \`.|\.__...-""""-_." )
       ..+-----.._        /  ' `            .-'
   . '            `:      7/* _/._\    \   (
  (        '::;;+;;:      `-"' =" /,`"" `) /
  L.        \`:::a:f            c_/     n_'
  ..`--...___`.  .    ,
   `^-....____:   +.      www.gwoptics.org/pykat

Loading and preparing the map

A quick map preparation, for more details see the notebook on pre-processing of mirror maps.

Since the spot radius at the ETM in LIGO is 6.2 cm, we use a Gaussian weighting function with radius 6.2 cm to make the area mainly seen by the beam as smooth as possible.

In [2]:
smap = read_map('ETM08_S1_-power160.dat', mapFormat='metroPro')
# Showing unprocessed map
fig1 = smap.plot()
# Cropping
smap.crop(0.154)
# Showing cropped map
fig2 = smap.plot()
# Processing with gaussian weights (also creates the aperture map amap)
amap = smap.preparePhaseMap(w=0.062, verbose=True)
# Showing precessed map
fig3 = smap.plot()
/Users/adf/work/git/pykat/pykat/optics/maps.py:476: MatplotlibDeprecationWarning: 
The set_clim function was deprecated in Matplotlib 3.1 and will be removed in 3.3. Use ScalarMappable.set_clim instead.
  cbar.set_clim(zmin, zmax)
--------------------------------------------------
Preparing phase map for Finesse...
--------------------------------------------------
 Gaussian weights used with radius: 6.20 cm
 (rms, avg) = (2.364e+01, 1.754e-02) nm
--------------------------------------------------
 Centering...
  New center (x0, y0) = (388.45, 388.39)
 Cropping map...
  Size (rows, cols): (777, 777) ---> (777, 777)
  New center (x0, y0) = (388.45, 388.40)
  (rms, avg) = (2.364e+01, 1.754e-02) nm
 Removing curvatures...
  Warning: Maximum number of function evaluations has been exceeded (nfev=2002).
  Removed Rc = -2223631.19 m
  Equivalent Z(n=2,m=0) amplitude A20 = -2.56 nm
  (rms, avg) = (4.453e+00, 2.322e-03) nm
 Removing offset...
  Removed z-offset (A00) = 0.407 nm
  (rms, avg) = (4.434e+00, 0.000e+00) nm
 Removing tilts...
  Tilted surface removed:
   xbeta    = -6.15e-08 rad
   ybeta    = 1.26e-07 rad
   z-offset = -4.93e-01 nm
  Equivalent Zernike amplitudes:
   A(1,-1) = 19.35 nm
   A(1, 1) = -9.47 nm
  (rms, avg) = (1.153e+00, 2.556e-03) nm
 Equivalent Z00 amplitude from accumulated z-offsets, A00 = 20.50
 Creating aperture map...
  Aperture map created.
 Writing maps to file...
  Phase map written to file ETM08_S1_-power160_finesse.txt
  Aperture map written to file ETM08_S1_-power160_aperture.txt
 Writing result information to file...
  Result written to file ETM08_S1_-power160_finesse_info.txt
--------------------------------------------------
Phase map prepared!
Name: ETM08_S1_-power160
Type: phase both
--------------------------------------------------
Weights:   r     = 6.20 cm
Radius:    R     = 15.40 cm
Offset:    A00   = 20.50 nm
Tilt:      A1-1  = 19.35 nm
           A11   = -9.47 nm,  or
           xbeta = -6.15e-08 rad
           ybeta = 1.26e-07 rad
Curvature: A20   = -2.56 nm,  or
           Rc    = -2223631.19 m
xy-offset: x0    = 0.00 mm
           y0    = 0.00 mm
Stats:     rms   = 1.153e+00 nm
           avg   = 2.556e-03 nm
--------------------------------------------------

Using the map

We study a setup with a laser and a cavity, and we measure the amplitude of individual spatial modes inside the cavity while sweeping the tuning of the end mirror. We do this both with and without the surface map and look at the difference.

In [4]:
kat = pykat.finesse.kat()
kat.verbose = False
code = """
l laser 1 0 0 n0
s s0 1 n0 n1

m ITM 0.95 0.05 0 n1 n2
s sCav 10 n2 n3
m ETM 1 0 0 n3 n4

cav cavity ITM n2 ETM n3
attr ITM Rc -6
attr ETM Rc 6

ad tem00 0 0 0 n2
ad tem20 2 0 0 n2
ad tem02 0 2 0 n2
ad tem11 1 1 0 n2
ad tem01 0 1 0 n2
ad tem10 1 0 0 n2

phase 2
xaxis ETM phi lin -20 80 201
yaxis log abs
maxtem 2
"""
kat.parse(code)
out1 = kat.run()
fig1 = out1.plot(title='$\mathrm{Without\ surface\ map}$', ylabel='Amplitude $[\sqrt{\mathrm{W}}]$')
#fig1.gca().set_title('hej')
#fig1.show()


# Appyling the map
kat.parse("""
# Appyling the map
map ETM ETM08_S1_-power160_finesse.txt
""")
out2 = kat.run()
fig2 = out2.plot(title='With surface map', ylabel='Amplitude $[\sqrt{\mathrm{W}}]$')

We see that with the surface map, higher order modes are created in the cavity.