finesse.analysis.actions.pseudolock.PseudoLockCavity

Overview

class finesse.analysis.actions.pseudolock.PseudoLockCavity(cavity, *, mode=None, lowest_loss=False, feedback=None, name='pseudo_lock_cavity')[source]

Bases: Action

An action that locks a cavity defined by a Cavity element to a specific mode without using any radio-frequency sensing scheme. This will only work on simple cavities that are not coupled in any way. You can specify whether to try and lock to a particular HG mode with the mode=[n,m] keyword argument, or just pick the lowest loss mode, lowest_loss=True.

Parameters
cavityCavity

Cavity element describing some Fabry-Perot like optical cavity

mode(n, m), optional

HG mode to try and lock to, default is [0,0]

lowest_lossbool, optional

Select the eigenmode which has the lowest loss, most likely the fundamental mode of the cavity. Using lowest loss will override the mode selection.

feedbackParameter optional

If None the required cavity tuning to lock to the calculated mode will be determined from the cavity objects source node element, and the relevant phi parameter will be used. Alternatively you can specify which tuning parameter is used instead. Which should be a phi of some mirror in the cavity or a DegreeOfFreedom which controls the cavity length.

namestr, optional

Name of the solution generated by this action

Examples

A Fabry-Perot based on aLIGO cavities:

>>> import finesse
>>> model = finesse.Model()
>>> model.parse('''
... l l1 P=1
... m ITM T=0.014 L=0 Rc=-1945
... s sARM ITM.p2 ETM.p1 L=3994
... m ETM R=1 L=0 Rc=2145
... link(l1, ITM)
... cav arm ETM.p1.o
... modes(maxtem=1)
... ''')

The cavity source node is on the ETM so the pseudo-lock will use that node and component phi parameter to feedback to. In this case the ETM.phi will be corrected to match the ITM.phi which will make the HG00 resonant.

>>> model.ITM.phi = 0
>>> model.ETM.phi = 10
>>> model.run("pseudo_lock_cavity(arm)")
>>> print(model.ITM.phi, model.ETM.phi)
0.0 degrees 0.0 degrees
>>> model.ITM.phi = 10
>>> model.ETM.phi = 0
>>> model.run("pseudo_lock_cavity(arm)")
>>> print(model.ITM.phi, model.ETM.phi)
10.0 degrees 10.0 degrees

This lock will also handle any misalignments, mismatches, or maps applied to the cavity.

>>> model.ITM.xbeta = 5e-8
>>> model.ITM.phi = 11
>>> model.ETM.phi = 0
>>> model.run("pseudo_lock_cavity(arm)")
>>> print(model.ITM.phi, model.ETM.phi)
11.0 degrees 10.984168676865762 degrees

We can also lock to other HG modes:

>>> sol = model.run("series(pseudo_lock_cavity(arm, mode=[1,0]), noxaxis())")
>>> print(model.ITM.phi, model.ETM.phi)
>>> print(model.homs)
>>> print(sol['noxaxis']['Ecirc'])
11.0 degrees 28.663091273523214 degrees
[[0 0]
[1 0]
[0 1]]
[-0.16465261-0.11468501j  0.41262682-0.27112167j  0.        +0.j        ]