finesse.components.rigid_body module
Rigid body holding multiple elements sharing the same mechanical DOFs.
- class finesse.components.rigid_body.RigidBody(*args, **kwargs)[source]
Bases:
ConnectorGroups elements into a rigid body so they share one set of mechanical nodes.
A drive on any member’s
mechports moves all of them, and the forces they each generate sum into one equation. The elements added withadd_rigid_component()are collected by name inrigid_components.All components share one sign convention, i.e. the sign of
z,pitch, andyawis the same for all components. Any subsequent optical connections should thus be made between the front of one component and the back of another.The body has its own static state,
phi,xbetaandybeta.add_rigid_component()makes a component’sphi,xbetaandybetarelative to the body’s, keeping the value the component had as its offset from the body. For example, a mirror created withphi=5ends up atbody.phi.ref + 5. It also locks them, so the body is moved through its own parameters anddofs, never through a component’s.Note that this is a building block for future composite components that is currently only accessible via the Python API.
Parameters
- namestr
Name of the rigid body.
- phifloat, optional
Tuning of the body (in degrees); defaults to 0.0.
- xbeta, ybetafloat, optional
Misalignment of the body in yaw and pitch in units of radians; default to 0.0.
Examples
Components must be added to the body before they are added to the model. The rigid body itself may already be in a model:
body = model.add(fc.RigidBody("ITM")) hr = body.add_rigid_component(fc.Mirror("ITM_hr", T=0.014, L=0, Rc=1938)) ar = body.add_rigid_component(fc.Mirror("ITM_ar", T=1 - 10e-6, L=10e-6)) model.add(hr) model.add(ar) # if an optical connection should be made, do it front to back model.connect(ar.p1, hr.p2) model.add(fc.FreeMass("ITM_sus", body.mech, mass=40))Then, for example, a frequency response calculated like:
F_Hz = np.geomspace(1, 1e3, 100) sol = model.run(fa.FrequencyResponse(F_Hz, [body.mech.F_z], [body.mech.z]))
returns a transfer function moving both the HR and AR surfaces together and where forces on either produces forces on the entire rigid body and thus on the other. A microscopic tuning is set by
model.ITM.phiwhich moves bothmodel.ITM_hr.phiandmodel.ITM_ar.phitogether and not by setting either the HR or AR surfaces directly.- add_rigid_component(element: Connector) Connector[source]
Make
elementpart of this rigid body by having itsmechport use the nodes ofmech, and add it torigid_components.The static state behind
element’sdofs, e.g. a mirror’sphi,xbetaandybeta, becomes relative to the body’s, keeping its current value as its offset from the body unless it already refers to the body’s. It is then locked, soelementonly moves with the body.Must be called before
elementis added to a model.Parameters
- elementConnector
Element to add to this rigid body.
Returns
- Connector
element, so that the call can be passed straight tomodel.add.
Raises
- FinesseException
If
elementis not aConnector, if this rigid body already has a rigid component withelement’s name, ifelement’s static state is locked, or if its nodes cannot be shared, seeConnector._use_signal_nodes_from().
- property phi
phi : float, optional Tuning of the body (in degrees); defaults to 0.0.
- property xbeta
Yaw misalignment
- property ybeta
Pitch misalignment