pcdsdevices.lodcm.XCSLODCM
- class pcdsdevices.lodcm.XCSLODCM(prefix, *, name, main_line='MAIN', mono_line='MONO', **kwargs)
The XCS implementation of a LODCM. Currently (as of 09/28/2022), the XCS has 3 operating modes:
the 1st crystal of the lodcm is OUT then the beam goes to CXI.
- The diamond crystal is IN then the pink beam goes to CXI while
a monochromatic beam can go to XCS at the same time.
- The Silicon crystal is IN in which case monochromatic beam
only goes to XCS.
Large Offset Dual Crystal Monochromator.
This is the device that allows XPP and XCS to multiplex with downstream hutches. It contains two crystals that steer/split the beam and a number of diagnostic devices between them. Beam can continue onto the main line, onto the mono line, onto both, or onto neither.
Tower 1 has the Si and C crystals with 2 angles and 5 linear motions. Tower 2 has the second Si and C crystals and a diode behind the crystals.
- Parameters:
Attribute
Class
Suffix
Docs
Kind
Notes
lightpath_summary
omitted
Inherited from
LODCM
yag
:DV
omitted
Inherited from
LODCM
dectris
:DH
omitted
Inherited from
LODCM
diode
:DIODE
omitted
Inherited from
LODCM
foil
:FOIL
omitted
Inherited from
LODCM
tower1 (FCpt)
{self._prefix}
normal
Inherited from
LODCM
tower2 (FCpt)
{self._prefix}
normal
Inherited from
LODCM
diag_tower (FCpt)
{self._prefix}
normal
Inherited from
LODCM
energy_si (FCpt)
{self._prefix}
normal
Inherited from
LODCM
energy_c (FCpt)
{self._prefix}
normal
Inherited from
LODCM
energy_c1 (FCpt)
{self._prefix}
normal
Inherited from
LODCM
Methods
- calc_geometry(energy, material=None, reflection=None)
Calculate the lom geometry.
- calc_lightpath_state(tower1_h1n_state_state: int | str) LightpathState
Calculates lightpath state for XCS LODCM. This LODCM has 3 operating modes (as of 9/28/2022)
the 1st crystal of the lodcm is OUT then the beam goes to CXI.
The diamond crystal is IN then the pink beam goes to CXI while a monochromatic beam can go to XCS at the same time.
The Silicon crystal is IN in which case monochromatic beam only goes to XCS.
- configure(d: Dict[str, Any]) Tuple[Dict[str, Any], Dict[str, Any]]
Configure the device for something during a run
This default implementation allows the user to change any of the
configuration_attrs
. Subclasses might override this to perform additional input validation, cleanup, etc.- Parameters:
d (dict) – The configuration dictionary. To specify the order that the changes should be made, use an OrderedDict.
- Returns:
(old, new) tuple of dictionaries
Where old and new are pre- and post-configure configuration states.
- describe() OrderedDictType[str, Dict[str, Any]]
Provide schema and meta-data for
read()
.This keys in the
OrderedDict
this method returns must match the keys in theOrderedDict
return byread()
.This provides schema related information, (ex shape, dtype), the source (ex PV name), and if available, units, limits, precision etc.
- Returns:
data_keys (OrderedDict) – The keys must be strings and the values must be dict-like with the
event_model.event_descriptor.data_key
schema.
- get(**kwargs)
Get the value of all components in the device
Keyword arguments are passed onto each signal.get(). Components beginning with an underscore will not be included.
- get_energy(material=None, reflection=None)
Get photon energy from first tower in keV.
Energy is determined by the first crystal (Theta motor).
- get_lightpath_state(use_cache: bool = True) LightpathState
Return the current LightpathState
- Returns:
LightpathState – a dataclass containing the Lightpath state
- get_material()
Get the current crystals material.
- Parameters:
check (bool) – Indicates if an exception should occure in case it could not determine the material for a tower.
- Returns:
m_1 (str) – Crystals material.
- get_reflection()
Get the crystal reflection.
Check both towers, and compare the if they match. If they do not match an error will be raised.
- Returns:
ref_1 (tuple) – Reflection of the two Crystal Towers.
- Raises:
ValueError – When the reflection of first tower does not match the one of second tower.
- post_elog_status()
Post device status to the primary elog, if possible.
- read() OrderedDictType[str, Dict[str, Any]]
Read data from the device.
This method is expected to be as instantaneous as possible, with any substantial acquisition time taken care of in
trigger()
.The
OrderedDict
returned by this method must have identical keys (in the same order) as theOrderedDict
returned bydescribe()
.By convention, the first key in the return is the ‘primary’ key and maybe used by heuristics in
bluesky
.The values in the ordered dictionary must be dict (-likes) with the keys
{'value', 'timestamp'}
. The'value'
may have any type, the timestamp must be a float UNIX epoch timestamp in UTC.- Returns:
data (OrderedDict) – The keys must be strings and the values must be dict-like with the keys
{'value', 'timestamp'}
- read_configuration() OrderedDictType[str, Dict[str, Any]]
Dictionary mapping names to value dicts with keys: value, timestamp
To control which fields are included, change the Component kinds on the device, or modify the
configuration_attrs
list.
- remove(moved_cb=None, timeout=None, wait=False)
Moves the h1n crystal out of the beam.
- remove_dia(moved_cb=None, timeout=None, wait=False)
Remove all diagnostic components.
- Parameters:
moved_cb (callable, optional) – Call this callback when movement is finished. This callback must accept one keyword argument,
obj
, which will be set to this instance.timeout (float, optional) – Maximum time to wait for the motion.
wait (bool, optional) – If
True
, do not continue until the move is complete.
- Returns:
moved_status (
Status
) – Status that will be marked as done when the motion is complete.
- screen()
Open a screen for controlling the device.
Default behavior is the typhos screen, but this method can be overridden for more specialized screens.
- set_energy(energy, material=None, reflection=None)
Set the current positions of th1, th2, z1 and z2 offset motors.
- stage_group_instances() Iterator[OphydObject]
Yields an iterator of subdevices that should be staged.
- stop(*, success=False)
Stop the Device and all (instantiated) subdevices
- summary()
- trigger() StatusBase
Trigger the device and return status object.
This method is responsible for implementing ‘trigger’ or ‘acquire’ functionality of this device.
If there is an appreciable time between triggering the device and it being able to be read (via the
read()
method) then this method is also responsible for arranging that theStatusBase
object returned by this method is notified when the device is ready to be read.If there is no delay between triggering and being readable, then this method must return a
StatusBase
object which is already completed.- Returns:
status (StatusBase) –
StatusBase
object which will be marked as complete when the device is ready to be read.
- tweakXC(x, wait=False)
- tweak_parallel(p_value, material=None, wait=False)
Tweak the
x2
andz2
motors.
- tweak_x(x_value, material=None, wait=False)
Tweak some motors to center the beam on YAG2 horizontally based on the calibrated s4 position.
- wait_energy(timeout=None)
Block all these motors untill some action completes.
- Parameters:
timeout (number, optional) – If None, wait indefinitely until the status finishes. Defaults to None.
Attributes
- E
- branches
Returns possible destinations as a list of strings.
- configuration_attrs
- connected
- destination
Which beamline the light is reaching.
Indeterminate states will show as blocked.
- Returns:
destination (list of str) –
.main_line
if the light continues on the main line..mono_line
if the light continues on the mono line.
- energy
- hints
- kind
- lightpath_cpts = ['tower1.h1n_state.state']
- md
- needs_parent: list[type[OphydObject]] = [<class 'ophyd.signal.AttributeSignal'>, <class 'ophyd.signal.DerivedSignal'>, <class 'ophyd.areadetector.plugins.PluginBase'>, <class 'ophyd.pseudopos.PseudoSingle'>, <class 'pcdsdevices.signal.PVStateSignal'>, <class 'pcdsdevices.signal.AggregateSignal'>]
- transmission
Returns h1n’s transmission value.