Daemon inventory#
How the inventory was derived#
Two things shape it.
The instrument is four assemblies. The front-end, the imager, the VIS spectrograph, and the NIR spectrograph are separately supported, separately alignable, and separately removable for servicing. The ICS follows that division, so that a subsystem can be worked on, tested, and brought up on the bench without the rest of the instrument.
Daemons are drawn at hardware ownership boundaries: one daemon per controller or fieldbus, owning every mechanism attached to it. Mechanisms sharing an EtherCAT bus or a Lakeshore chassis cannot be owned by separate processes without a bus arbiter, which is a daemon by another name and one that separates safety logic from hardware access. Recorded as ADR-0001 in Architectural decisions.
The instrument has 33 controlled motion axes and 11 detector systems. Grouping by ownership gives 18 daemons.
Naming#
Peer identity is <group>_<scope>; keyword address is
<group>.<scope>.<name>; source lives in daemons/<group>/<scope>/.
Group |
Domain |
|---|---|
|
Front-end: beam routing and calibration sources |
|
Imager mechanisms |
|
VIS spectrograph mechanisms |
|
NIR spectrograph mechanisms |
|
Detector readout services |
|
Housekeeping and infrastructure |
|
Gateways to WMKO domains |
|
Sequencing and coordination |
Front-end#
Peer |
Owns |
Mechanisms |
Driver |
|---|---|---|---|
|
Front-end selector bus |
Mirror selector mechanisms: full field to the imager, apertured fold-flat passing the central 30” to the spectrographs, and 60 degree routing to platform neighbours |
|
|
Calibration sources |
Integrating sphere, emission-line lamps, continuum sources, and any mechanism that deploys them |
|
The front-end decides what light goes where, which makes zsfe_selector
the most operationally significant mechanism daemon in the instrument. Its
state determines whether the spectrographs are receiving light at all, so the
sequencer and both GUIs gate on it and every calibration interlock is
conditioned on it.
Calibration belongs to the front-end rather than to a separate assembly because the integrating sphere feeds the same beam path the selector controls. That adjacency is what lets the imager and the spectrographs be co-calibrated against one common source.
Imager#
Peer |
Owns |
Mechanisms |
Driver |
|---|---|---|---|
|
Imager motion bus |
Common refractive ADC, selectable filter in the middle channel, three rotating detector assemblies |
|
The u and z channels carry fixed broadband filters and have no filter
mechanism. Only the middle channel is selectable.
The three detector rotators are separate axes but are commanded together: the channels are co-aligned, and a differential rotation between them is a fault rather than a configuration.
Spectrographs#
The two spectrographs are optically and mechanically parallel. Each has the same five mechanism types in its pre-optics, and the arms downstream are fixed-format with no moving parts at all.
Peer |
Owns |
Mechanisms |
Driver |
|---|---|---|---|
|
VIS pre-optics bus |
Slit, tip/tilt, focus, ADC, K-mirror |
|
|
NIR pre-optics bus |
Slit, tip/tilt, focus, ADC, K-mirror, all cryogenic |
|
These should share one daemon implementation parameterised by configuration.
Mechanism |
Notes |
|---|---|
Slit |
10” long, discrete selectable widths spanning roughly 0.3” to 1.0”. Discrete rather than continuous, so it is a selector with named positions rather than a positioner with a range. |
Tip/tilt |
Slit-plane alignment. Two axes. |
Focus |
Pre-optics focus. |
ADC |
A pair of counter-rotating Amici prisms. Two axes driven as a
coordinated pair from a dispersion solution rather than positioned
independently. Needs airmass and parallactic angle from
|
K-mirror |
Field de-rotation, counter-rotating the diurnal sky motion to hold the
target fixed on the slit. Needs telescope state from |
The K-mirror and the ADC are the only mechanisms that track during an observation. Everything else is positioned during configuration and then held.
Detectors#
Peer |
Owns |
Detectors |
Notes |
|---|---|---|---|
|
VIS Archon controller |
B, G, R qCCDs, 4096x2048, 15 micron |
Read out through an Archon, so it uses |
|
NIR readout electronics |
YJ, H, K HgCdTe LmAPD, 2048x2048 |
Nondestructive readout, 16 parallel channels, up-the-ramp sampling. |
|
Imager cameras |
Three Hamamatsu ORCA-Quest 2 qCMOS, 4096x2304, 4.6 micron |
Millisecond frame times, full-frame and sub-array modes. The three must be synchronised. |
zscam_img is grouped for a different reason: simultaneous tri-band
millisecond imaging is the imager’s whole purpose, and synchronising three
cameras across three processes would make the one thing it exists to do the
hardest thing to guarantee.
The frame store on the qCCDs changes the exposure model. Because near-zero read noise makes subdivision free, a long integration is normally taken as a series of shorter ones and the observer watches signal-to-noise accumulate. The detector daemon therefore manages a series rather than a single exposure, and publishes progress across it.
Housekeeping#
Peer |
Owns |
Responsibilities |
Driver |
|---|---|---|---|
|
Cryocoolers |
NIR cryostat and detector dewar cooling: state, power, fault reporting |
|
|
Lakeshore chassis |
Detector and bench temperature control loops, heaters, and the structure temperatures that feed flexure and focus models |
|
|
Gauges and pumps |
NIR cryostat and detector dewar pressures, ion pump state |
|
|
Facility cooling interface |
Glycol supply and return temperatures, flow, leak detection |
TBC |
|
PDUs and UPS |
Outlet control, power state, UPS status and battery |
|
|
1-Wire bus |
Ambient temperature, humidity, dew point, pressure |
|
|
The host service manager |
Daemon liveness supervision and systemd control |
systemd |
On the keyword side it subscribes to every daemon’s heartbeat and status,
detects silence, and publishes offline on behalf of daemons that cannot
report it themselves. A dead daemon cannot announce that it is dead, so
something else has to.
On the system side it owns the host service manager. Starting, stopping, and restarting a daemon are systemd operations, and the watchdog exposes them as keywords like any other capability:
zshouse.watchdog.daemonstates compound: all daemons, state + heartbeat age
zshouse.watchdog.restart trigger, takes a peer id
zshouse.watchdog.stop trigger, takes a peer id
zshouse.watchdog.start trigger, takes a peer id
zshouse.watchdog.servicestate systemd unit state for one peer
This makes daemon lifecycle reachable from the hard hat GUI and the CLI
without anyone opening an ssh session to run systemctl. Restarting a
faulted daemon becomes an ordinary keyword write, logged like every other
command. Restart policy is configuration, per daemon, and is described in
Deployment; the watchdog applies it and does not invent it.
Because it must keep working when the rest of the system does not, it has the fewest dependencies of any daemon: no instrument drivers, and no configuration beyond the daemon list and the restart policy.
Coordination and gateway daemons#
Peer |
Responsibilities |
|---|---|
|
The observation sequencer. Executes instrument workflows, aggregates daemon state into instrument state, and manages the target list. Owns no hardware. |
|
Gateway to the Keck 1 telescope control system, which WMKO owns and which lives in an EPICS domain. Republishes telescope pointing, rotator angle, airmass, parallactic angle, and hour angle; forwards permitted offsets. |
|
Gateway to WMKO acquisition and guiding. Republishes acquisition and guide state so the sequencer and the GUIs can gate on it. Scope pending the split below. |
zskeck_tcs feeds the ADC dispersion solution and the K-mirror
de-rotation. Both track continuously during an exposure, so this gateway is
not a configuration-time convenience: an interruption to telescope state is
an interruption to two live control loops, and the daemons consuming it must
treat stale telescope state as a fault rather than coast on the last value.
Note
TBC: K1DM3
ZShooter is fed by the deployable tertiary K1DM3, and whether the
instrument receives light at all depends on its position. The ICS needs to
know that state, and possibly to request it, since staying online for
target-of-opportunity response is a design driver. Whether that arrives
through zskeck_tcs or warrants its own gateway depends on how WMKO
exposes it.
Acquisition and guiding#
Telescope acquisition and guiding is owned by Keck, not by ZShooter. No daemon in this inventory performs astrometric acquisition, offset computation, or guiding.
Two things complicate the interface, and both need resolving with WMKO.
Which Keck system. MAGIQ is the current Keck acquisition and guiding system. The design manuscript instead shows the STRATA K1AO wavefront sensing and guider concept upstream of the ZShooter front-end, picking off part of the beam through a Na D dichroic.
ZShooter’s own imager sees the field. The imager provides acquisition support and photometric anchoring over a 2’ field, and the front-end can pass the central 30” to the spectrographs while the remainder continues to the imager. The instrument can therefore watch the field around the slit during an observation.
Note
TBC: acquisition functional split
To be mapped explicitly and agreed with WMKO:
Which acquisition steps does the Keck system perform, and which does the instrument initiate?
What acquisition and guide state is published, in what domain, and how does ZShooter subscribe to it?
Does ZShooter’s imager contribute to acquisition or guiding, and if so what is expected of it and at what cadence?
Can the instrument request an offset, and within what limits?
What does the Keck system provide that must reach the FITS headers?
What happens to a running exposure when guiding is lost?
Until this is mapped, the acquisition workflow in Operational workflows is a shape rather than a specification.
Summary#
Class |
Count |
Peers |
|---|---|---|
Front-end |
2 |
|
Mechanism |
3 |
|
Detector |
3 |
|
Housekeeping |
7 |
|
Coordination |
1 |
|
Gateway |
2 |
|
Total |
18 |
Distinct daemon implementations are fewer still. The two spectrograph
motion daemons share one, and zscam_vis and zscam_nir may share one
depending on how far the qCCD and LmAPD readout models diverge. Roughly a
dozen implementations cover eighteen deployed daemons.
Being fixed-format is what keeps this number down. An instrument that exchanged gratings, cross-dispersers, or cameras during observing would carry a mechanism, a daemon, and a calibration dependency for each.