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
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
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)
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)
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
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
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')
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