finesse_40m.factory.base module

class finesse_40m.factory.base.FortyMeterFactory(*args, **kwargs)[source]

Bases: DRFPMIFactory

SOS_ZPK_dof(optic, param, direction)[source]

Generate a Zero-Pole-Gain (ZPK) tuple for a suspension degree of freedom (DOF) for a specific optic.

This method computes the ZPK model for a suspension system in a specific degree of freedom by reading configuration parameters and determining necessary values such as quality factor, resonance frequency, and mass or moment of inertia. Warnings are issued if required parameters are missing, and reasonable defaults are assumed in such cases.

Parameters
opticobject

The optical element for which the suspension ZPK is computed. This object is expected to have a name attribute for identification in warning messages.

paramdict

Dictionary containing the suspension configuration parameters. Expected keys include values like ‘sus_Q_{direction}’, ‘sus_f0_{direction}’, ‘mass’, ‘MOI_{pitch, yaw}’, ‘thickness’, and ‘radius’.

directionstr

The suspension degree of freedom for which to compute the ZPK. Accepted values are ‘pos’ (position), ‘pitch’, and ‘yaw’, each specifying a different DOF of the optic.

Returns
tuple of lists

A tuple containing:

  • zlist

    List of zeros for the ZPK model (empty in this case).

  • plist

    List of poles derived from the suspension system parameters based on the DOF.

  • kfloat

    Gain factor computed from the mass or moment of inertia, depending on the DOF.

Notes

The function assumes default values for missing parameters and logs a warning. For instance, if ‘MOI_pitch’ or ‘MOI_yaw’ are missing, the moment of inertia is estimated using standard formulas based on thickness, radius, and mass.

Examples

>>> from finesse.components import Mirror
>>> from finesse_40m.factory import FortyMeterFactory
>>> M = Mirror('name', R=1, L=0)
>>> param = {'sus_Q_pos': 5, 'sus_f0_pos': 0.99, 'mass': 0.2642}
>>> factory = FortyMeterFactory()
>>> z, p, k = factory.SOS_ZPK_dof(M, param, 'pos')
SOS_plant_ZPK(model, optic, param)[source]
__init__(*args, **kwargs)[source]
add_ADs()[source]
add_AS_table(model)[source]

Overwrite this method.

This is included simply because finesse by default connects detectors to face the space (the input), and so we can’t connect to AR sides of things easily

add_AS_telescopes(model, ASpars)[source]
add_BS(model, params)[source]
add_LO_path(model, BHparams)[source]
add_LSC_AC_loops(model)[source]

Do not use.

This function exists in finesse_ligo, however, it is not implemented in finesse_40m as we have too many locking confiurations.

See finesse_40m.locks and add the locks you want.

add_LSC_DC_locks(model)[source]

Do not use.

This function exists in finesse_ligo, however, it is not implemented in finesse_40m as we have too many locking confiurations.

See finesse_40m.locks and add the locks you want.

add_LSC_readouts(model)[source]
add_MICH(model, which, params, BS_port, ITM_AR_fr_port)[source]
add_PDs()[source]
add_POP_telescopes(model, POPpars)[source]
add_PRC(model, params, BS_port, options)[source]
add_SRC(model, params, BS_port, options)[source]
add_arm_cavity(model, which, params, options)[source]
add_cavities(model)[source]
add_detectors(model)[source]
add_input_path(model, INPUT, PRM_AR_port)[source]

Setup the input path, starting from the laser and going to the PRM.

add_modulators(model, INPUT, f1, f2, f3)[source]

Add the modulators to the model.

This function is called by finesse_40m.factory.base.FortyMeterFactory.add_input_path() and should return a list of modulators. It takes INPUT as a parameter which should contain the INPUT section of the parameters file.

It does not link these modulators to the model

add_output_path(model, ASpars, SRM_AR_fr)[source]
add_pop_table(model)[source]

Overwrite this method.

This is included simply because finesse by default connects detectors to face the space, and so we can’t connect to AR sides of things easily

add_suspensions(model, params)[source]

This function adds the suspensions.

Overwite this function to change the ZPK model for a particular optic

make()[source]
pre_make(model, params)[source]
reset()[source]

Resets factory to all default options, drives, and LSC/ASC settings.

set_default_LSC(LSC_params=None)[source]

Resets factory to all default LSC settings.

Parameters
LSC_paramsMunchDict | str | None

Munch dict of parameters, or a filename and path. If set to None, then self.params.CONTROL will be used.

set_default_drives(L_force=True, P_torque=True, Y_torque=True)[source]

Resets factory to all default drives.

Parameters
L_forcebool

Whether the length drive should be a force (True) or a displacement (False). Default: False.

P_torquebool

Whether the pitch drive should be a torque (True) or an angle (False). Default: True.

Y_torquebool

Whether the yaw drive should be a torque (True) or an angle (False). Default: True.

set_default_options()[source]

Resets factory to all default options.

This function defines the following options:

self.options.BS_type: “thick”, “thin”, “fake” self.options.add_11MHz: bool self.options.add_33MHz: bool self.options.add_55MHz: bool self.options.add_165MHz: bool self.options.modulation_order: int

self.options.wedges: bool self.options.ETMAR: bool self.options.PR2_PR3_substrates: bool

self.options.suspensions.test_masses: bool self.options.suspensions.core_optics: bool self.options.suspensions.auxillary_optics: bool

self.options.INPUT.add_IMC_and_IM1: bool self.options.INPUT.set_IMC_mode: bool

self.options.OUTPUT.readout: “AS”, “HD”, “BHD” (HD & BHD are not implemented)

self.options.LSC.add_DOFs: bool self.options.LSC.add_readouts: bool self.options.LSC.add_output_detectors: bool self.options.LSC.close_AC_loops = bool

The following options are defined in finesse-ligo but are not yet implemented in finesse-40 and must remain False.

self.options.LSC.add_locks = bool self.options.LSC.add_AC_loops = bool

Additionally the following options differ in function to finesse-ligo

self.options.add_detectors: bool, power, amplitude self.options.materials.test_mass_substrate: finesse.materials.Material

You can inspect the current values by printing the options dictionary.

set_max_reality()[source]
Max reality models the following things:
  • Suspensions using ZPK

  • Optics under the paraxial approximation, up to specified maxtem

  • 11, 33, 165 MHz sidebands up to order 3

  • AR coatings on all transmissive optics

  • AR coatings on the ETMs

  • “Thick” beamsplitter

The following things are not yet modelled (and can be enabled / added, but are not tested)
  • Wedges

  • Control loops

You still need to set an appropriate maxtem!

update_parameters(parameters)[source]

Update the parameters.

Parameters
parametersMunchDict | str

Munch dict of parameters, or a filename and path