예제 #1
0
def katFP(par):
    """Make a Finesse Fabry Perot cavity

    Inputs:
      par: parameter dictionary

    Returns:
      kat: the model
    """
    fmod = par['Mod']['fmod']
    gmod = par['Mod']['gmod']

    kat = pykat.finesse.kat()
    kat.lambda0 = par['lambda0']  # set the laser wavelength

    # Make the cavity
    # In this case it's very simple, but in more complicated models you can
    # easily loop through all of the optics if you've defined the parameters
    # in a dictionary
    mirrors = ['EX', 'IX']
    for mirror in mirrors:
        # add the mirror and set the optic properties
        fin.addMirror(kat, mirror, **par[mirror]['opt'])

        # set the mechanical response
        pmech = par[mirror]['mech']
        poles = np.array(
            resRoots(2 * np.pi * pmech['f0'], pmech['Q'], Hz=False))
        fin.setMechTF(kat, mirror, [], poles, 1 / pmech['mass'])

    fin.addSpace(kat, 'IX_fr', 'EX_fr', par['Lcav'])
    fin.setCavityBasis(kat, 'IX_fr', 'EX_fr')

    # add input
    fin.addLaser(kat, 'Laser', par['Pin'])
    fin.addModulator(kat, 'Mod', fmod, gmod, 1, 'pm')
    fin.addSpace(kat, 'Laser_out', 'Mod_in', 0)
    fin.addSpace(kat, 'Mod_out', 'IX_bk', 0)

    # add DC and RF photodiodes
    fin.addReadout(kat, 'REFL', 'IX_bk', fmod, 0)

    return kat
예제 #2
0
def katFP():
    kat = pykat.finesse.kat()

    fin.addMirror(kat, 'EX', Thr=0)
    fin.addMirror(kat, 'IX', Thr=Ti)
    fin.addSpace(kat, 'IX_fr', 'EX_fr', Lcav)

    for optic in ['EX', 'IX']:
        fin.setMechTF(kat, optic, [], [0, 0], 1)

    fin.addLaser(kat, 'Laser', Pin)
    fin.addModulator(kat, 'Mod', fmod, gmod, 5, 'pm')
    fin.addSpace(kat, 'Laser_out', 'Mod_in', 0)
    fin.addSpace(kat, 'Mod_out', 'IX_bk', 0)

    fin.addReadout(kat, 'REFL', 'IX_bk', fmod, 0)
    fin.monitorAllQuantumNoise(kat)
    fin.monitorMotion(kat, 'EX')

    kat.phase = 2

    return kat
예제 #3
0
def homodyne_po(kat, phi):
    fin.addHomodyneReadout(kat, 'AS', qe=0.9, LOpower=0)
    fin.addSpace(kat, 'AS_PO_frR', 'AS_BS_frI', 0)
    fin.addSpace(kat, 'LO_PO_frR', 'AS_LOphase_frI', 0)
    kat.AS_LOphase.phi = phi / 2
    fin.monitorAllQuantumNoise(kat)
예제 #4
0
def homodyne_lo(kat, phi):
    fin.addHomodyneReadout(kat, 'AS', phi, qe=0.9)
    fin.addSpace(kat, 'AS_PO_frR', 'AS_BS_frI', 0)
    fin.monitorAllQuantumNoise(kat)
예제 #5
0
def katFPMI(sqAng, sqdB, rf=True):
    kat = pykat.finesse.kat()

    fin.addMirror(kat, 'EX')
    fin.addMirror(kat, 'EY')
    fin.addMirror(kat, 'IX', Thr=Ti)
    fin.addMirror(kat, 'IY', Thr=Ti)
    fin.addBeamSplitter(kat, 'BS')

    kat.BS.phi = np.sqrt(2) * 45

    Tpo = 1 - 1 / Pin
    fin.addBeamSplitter(kat, 'LO_PO', Thr=Tpo, aoi=45, comp=True)

    for optic in ['EX', 'EY', 'IX', 'IY']:
        fin.setMechTF(kat, optic, [], poles, 1 / M)

    fin.addLaser(kat, 'Laser', Pin)
    if rf:
        fin.addModulator(kat, 'Mod', fmod, gmod, 1, 'pm')
        fin.addSpace(kat, 'Laser_out', 'Mod_in', 0)
        fin.addSpace(kat, 'Mod_out', 'LO_PO_frI', 0)
    else:
        fin.addSpace(kat, 'Laser_out', 'LO_PO_frI', 0)

    fin.addSpace(kat, 'LO_PO_bkT', 'BS_frI', 0)

    fin.addSpace(kat, 'BS_bkT', 'IX_bk', lx)
    fin.addSpace(kat, 'IX_fr', 'EX_fr', Larm)

    fin.addSpace(kat, 'BS_frR', 'IY_bk', ly)
    fin.addSpace(kat, 'IY_fr', 'EY_fr', Larm)

    fin.addFaradayIsolator(kat, 'FI')
    fin.addSpace(kat, 'BS_bkO', 'FI_fr_in', 0)

    fin.addBeamSplitter(kat, 'AS_PO', aoi=45, Thr=0.5)
    fin.addSpace(kat, 'FI_fr_out', 'AS_PO_frI', 0)

    if rf:
        fin.addReadout(kat, 'AS', 'AS_PO_bkT', fmod, 0)

    fin.addSqueezer(kat, 'Sqz', sqAng, sqdB)
    fin.addSpace(kat, 'Sqz_out', 'FI_bk_in', 0)

    return kat
예제 #6
0
def katFPMI(par):
    """Make a Finesse Fabry FPMI

    Inputs:
      par: parameter dictionary

    Returns:
      kat: the model
    """
    fmod = par['Mod']['fmod']
    gmod = par['Mod']['gmod']

    kat = pykat.finesse.kat()
    kat.lambda0 = par['lambda0']  # set the laser wavelength

    # Add optics and set mechanical plants
    mirrors = ['EX', 'IX', 'EY', 'IY']
    splitters = ['BS']

    for mirror in mirrors:
        fin.addMirror(kat, mirror, **par[mirror]['opt'])

    for splitter in splitters:
        fin.addBeamSplitter(kat, splitter, **par[splitter]['opt'])

    for optic in mirrors + splitters:
        pmech = par[optic]['mech']
        fin.setMechTF(kat, optic, pmech['zs'], pmech['ps'], pmech['k'])

    # need to microscopically tune the BS to make the AS port dark due to
    # the Finesse convention that transmission gets a 90 deg phase shift
    # Setting, for example, kat.EX.phi = 90, kat.IX.phi = 90, and kat.BS.phi = 0
    # would also work
    kat.BS.phi = np.sqrt(2) * 45

    # Add input
    fin.addLaser(kat, 'Laser', par['Pin'])
    fin.addModulator(kat, 'Mod', fmod, gmod, 1, 'pm')
    fin.addSpace(kat, 'Laser_out', 'Mod_in', 0)

    # Add Faraday isolator
    fin.addFaradayIsolator(kat, 'FI')
    fin.addSpace(kat, 'Mod_out', 'FI_fr_in', 0)
    fin.addSpace(kat, 'FI_fr_out', 'BS_frI', 1)

    # Add links
    plen = par['Length']

    # X arm
    fin.addSpace(kat, 'BS_bkT', 'IX_bk', plen['lx'])
    fin.addSpace(kat, 'IX_fr', 'EX_fr', plen['Lx'])

    # Y arm
    fin.addSpace(kat, 'BS_frR', 'IY_bk', plen['ly'])
    fin.addSpace(kat, 'IY_fr', 'EY_fr', plen['Ly'])

    # Add output probes
    fin.addSpace(kat, 'FI_bk_out', 'REFL_in', 1, new_comp='REFL')
    fin.addSpace(kat, 'BS_bkO', 'AS_in', 1, new_comp='AS')
    # demod phases chosen to maximize CARM in REFL_I and DARM in AS_Q
    fin.addReadout(kat, 'REFL', 'REFL_in', fmod, 125)
    fin.addReadout(kat, 'AS', 'AS_in', fmod, 11)

    # add probes to monitor the motion of the test masses and beamsplitter
    fin.monitorMotion(kat, 'EX')
    fin.monitorMotion(kat, 'EY')
    fin.monitorMotion(kat, 'BS')

    # add probes to compute the shotnoise of all probes in the model
    fin.monitorAllQuantumNoise(kat)

    return kat
예제 #7
0
gi = 1 - Lcav / Ri
ge = 1 - Lcav / Re
r = 2 / ((gi - ge) + np.sqrt((gi - ge)**2 + 4))

I = 25
f0 = 1
Q = 100
poles = np.array(ctrl.resRoots(2 * np.pi * f0, Q, Hz=False))

kat = pykat.finesse.kat()

# make the cavity
fin.addMirror(kat, 'EX', Chr=1 / Re)
fin.addMirror(kat, 'IX', Thr=Ti, Chr=1 / Ri)
fin.addSpace(kat, 'IX_fr', 'EX_fr', Lcav)
fin.setCavityBasis(kat, 'IX_fr', 'EX_fr')

# set the pitch response
fin.setMechTF(kat, 'EX', [], poles, 1 / I, doftype='pitch')
fin.setMechTF(kat, 'IX', [], poles, 1 / I, doftype='pitch')

# add input
fin.addLaser(kat, 'Laser', Pin)
fin.addModulator(kat, 'Mod', fmod, gmod, 1, 'pm')
fin.addSpace(kat, 'Laser_out', 'Mod_in', 0)
fin.addSpace(kat, 'Mod_out', 'IX_bk', 0)

# add DC and RF photodiodes
fin.addReadout(kat, 'REFL', 'IX_bk', fmod, 0, doftype='pitch')
예제 #8
0
def katMI(dpx, dpb, aoib):
    kat = pykat.finesse.kat()

    fin.addMirror(kat, 'EX', Thr=0, phi=dpx, Chr=1 / Re)
    fin.addMirror(kat, 'EY', Thr=0, Chr=1 / Re)
    fin.addMirror(kat, 'IX', Thr=Ti, phi=dpx, Chr=1 / Ri)
    fin.addMirror(kat, 'IY', Thr=Ti, Chr=1 / Ri)
    fin.addBeamSplitter(kat, 'BS', aoi=aoib, phi=dpb)

    fin.addLaser(kat, 'Laser', Pin)
    fin.addModulator(kat, 'Mod', fmod, gmod, 5, 'pm')
    fin.addSpace(kat, 'Laser_out', 'Mod_in', 0)
    fin.addSpace(kat, 'Mod_out', 'BS_frI', 1)

    fin.addSpace(kat, 'BS_bkT', 'IX_bk', lx)
    fin.addSpace(kat, 'IX_fr', 'EX_fr', Lcav)
    fin.setCavityBasis(kat, 'IX_fr', 'EX_fr')

    fin.addSpace(kat, 'BS_frR', 'IY_bk', ly)
    fin.addSpace(kat, 'IY_fr', 'EY_fr', Lcav)
    fin.setCavityBasis(kat, 'IY_fr', 'EY_fr')

    fin.addSpace(kat, 'BS_bkO', 'AS_in', 1, new_comp='AS')

    kat.phase = 2

    return kat