Quantum noise source breakdown

The quantum noise that limits the sensitivity of a detector can have multiple sources. The main contributor is usually the vacuum noise that enters into the interferometer from the dark or also known as the AS (Anti-Symmetric) port.

More generally, vacuum noise will leak into the detector wherever there is an optical loss – which is essentially everywhere! You will see these breakdowns in recent papers such as https://arxiv.org/abs/1807.11734.

There are many, many sources of loss in any given Finesse model, whether that’s some simple loss at a mirror, or some higher order mode loss due to scattering from a surface defect. Finesse uses a multiple-input-single-output modelling method where it introduces vacuum noise at all possible loss points and projects this to a qnoise detector.

It does this multiple noise injection by default, to make your life easier and ensure you as a simulator do not miss a loss source. However, you can also break loss sources down easily using the vacuum command. This plot uses the basic LIGO model from http://www.gwoptics.org/finesse/examples/aligo_sensitivity.php. Below is some code that uses this command to select components separately to inject vacuum noise at to make this breakdown.

The above assumes a very high level of SRC loss! 10% in fact. This is added to the SRM loss parameter. I have also moved all the loss values from the ITMs to the ETMs, otherwise the ITM contributes towards both the ARM and the SRC loss terms.

The `vacuum` command accepts a list of component names. Any loss or open port at that component will then be included in the quantum noise calculations – `vaccum all` is the default setting.

import pykat
import matplotlib.pyplot as plt
pykat.init_pykat_plotting()

kat = pykat.finesse.kat()
kat.verbose = False
kat.parse("""
l l1 $Pin 0 nin
s s1 0 nin nprc1
# Power recycling mirror
m1 prm $prmT 0 90 nprc1 nprc2
s prc $lprc nprc2 nbsin
# Central beamsplitter
bs bs1 .5 .5 0 45 nbsin n0y n0x nbsout

# X-arm
s ichx $lmichx n0x n1x
m1 itmx $itmT 0 90 n1x n2x
s armx $Larm n2x n3x
m1 etmx 0 80u 89.999875 n3x n4x
attr itmx mass $Mtm zmech sus1
attr etmx mass $Mtm zmech sus1

# Y-arm
s ichy $lmichy n0y n1y
m1 itmy $itmT 0 $michy_phi n1y n2y
s army $Larm n2y n3y
m1 etmy 0 80u 0.000125 n3y n4y
attr itmy mass $Mtm zmech sus1
attr etmy mass $Mtm zmech sus1

# Signal recycling mirror
s src $lsrc nbsout nsrc1
m1 srm $srmT 0.1 $srm_phi nsrc1 nsrc2
s sas 0 nsrc2 nAS

# Force-to-position transfer function for longitudinal
# motions of test masses
tf sus1 1 0 p $mech_fres $mech_Q
const mech_fres 1 # 9 sus-thermal spike
const mech_Q 1M # Guess for suspension Q factor
# DC readout: 100mW = michy_phi 0.07 _or_ darm_phi .00025
const michy_phi 0
const darm_phi .00025

const Larm 3995
const itmT 0.014
const srmT 0.2
const prmT 0.03
const Pin 125
const Mtm 40
const srm_phi -90
const lmichx 4.5
const lmichy 4.45
const lprc 53
const lsrc 50.525

# Differentially modulate the arm lengths
fsig darm armx 1 0
fsig darm2 army 1 180

qnoisedS NSR 1 $fs nsrc2

xaxis darm f log 5 5k 1000
yaxis log abs
""")

_kat = kat.deepcopy()
_kat.parse("vacuum sas")
out = _kat.run()
plt.loglog(out.x, out['NSR'], label='AS')

_kat = kat.deepcopy()
_kat.parse("vacuum itmx itmy etmx etmy")
out = _kat.run()
plt.loglog(out.x, out['NSR'], label='Arm losses')

_kat = kat.deepcopy()
_kat.parse("vacuum srm")
out = _kat.run()
plt.loglog(out.x, out['NSR'], label='SRC losses')

out = kat.run()
plt.loglog(out.x, out['NSR'], label='Total', c='orange', ls='--', lw=2)
plt.legend()

Leave a Reply