From df7077cc3241ec222a878abd42517aaf81ff2b0b Mon Sep 17 00:00:00 2001 From: Doga Gursoy Date: Mon, 22 Jun 2026 11:01:55 +0300 Subject: [PATCH] docs(tomowise): add assembly containment + composition visuals to Sample and Detector Full-alignment follow-up to #305. Add the 2-BM-style "model in one picture": - Detector: a containment tree (gantry -> microscopes -> constituents) and a PLANNED Microscope-assembly composition diagram (slot -> device), marked design-phase since no Fixture is registered yet; camera + propagation_distance shown as the ZeroOrOne decoupled slots, plus a Families note. - Sample: containment trees for both endstation manipulators, with a note that the sample stage is a device group rather than a catalog Assembly (so no composition diagram), unlike 2-BM's SampleTower. Tables retained. No materialized-only sections (vendor part numbers, selector internals, calibrations, exercised model): TomoWISE has no registered fixtures. mkdocs --strict and deployment unit tests pass. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../tomowise/equipment/detector.md | 44 +++++++++++++++++++ docs/deployments/tomowise/equipment/sample.md | 33 ++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/docs/deployments/tomowise/equipment/detector.md b/docs/deployments/tomowise/equipment/detector.md index 41aa68b2ec..f676ad3163 100644 --- a/docs/deployments/tomowise/equipment/detector.md +++ b/docs/deployments/tomowise/equipment/detector.md @@ -4,6 +4,46 @@ TomoWISE has a single detector system on a gantry that travels the experiment hutch on 7 m floor rails, from the microtomography station at 45 m to the hutch wall at 52 m. It serves both endstations, so it is modelled once, in the detection stage of the [descriptor](../inventory.md). +## The model in one picture + +What physically holds what, gantry down to the optics (containment, `Asset.parent_id`): + +``` +TomoWISE (Unit, Asset) +└── DetectorGantry (Component, Family Table; Xd/Yd/Zd on 7 m rails; the shared propagation rail) + ├── MicLFOV (Component, Family Housing; model optique_peter_micrx080) + │ ├── Turret (Device, LinearStage; objective changer) + │ ├── Objective_1x (Device, Objective) + │ ├── Objective_2x (Device, Objective) + │ ├── ObjectiveSelector (Device, PseudoAxis) + │ └── Scintillator (Device, Scintillator) + ├── MicHR (Component, Family Housing; model optique_peter_micrx080) + │ ├── Turret (Device, LinearStage; objective changer) + │ ├── Objective_4x (Device, Objective) + │ ├── Objective_10x (Device, Objective) + │ ├── Objective_20x (Device, Objective) + │ ├── ObjectiveSelector (Device, PseudoAxis) + │ └── Scintillator (Device, Scintillator) + └── CameraI / CameraII / CameraIII / CameraIV (Device, Camera; shared pool, paired per run) +``` + +Each microscope is the cross-facility `Microscope` Assembly (the same blueprint 2-BM uses), composing the reusable `Optics` sub-assembly plus the leaf slots. Unlike 2-BM, no Fixture is registered yet (TomoWISE is design-phase: no scenario binds Assets to slots), so the slot map below is the **planned** composition, not a materialized Fixture: + +``` +Planned composition (no Fixture registered yet) -- per microscope +materializes Assembly = Microscope (presents_as the Detector Role) +├── sub-assembly optics -> Assembly = Optics +│ ├── turret (Exactly1) -> Turret +│ ├── objectives (OneOrMore) -> Objective_1x, Objective_2x (MicLFOV) +│ │ Objective_4x, Objective_10x, Objective_20x (MicHR) +│ ├── objective_selector (Exactly1) -> ObjectiveSelector +│ └── propagation_distance (ZeroOrOne) -> (empty; the shared DetectorGantry rail provides it) +├── leaf slot scintillator (Exactly1) -> Scintillator +└── leaf slot camera (ZeroOrOne) -> (empty; drawn from the shared camera pool per run) +``` + +Two axes, orthogonal: **containment** (`Asset.parent_id`, the tree above) is what holds what; **composition** (Assembly to Fixture, the slot map) is what presents for binding. The `camera` and `propagation_distance` slots are `ZeroOrOne` and left empty here because TomoWISE shares its four cameras and one gantry rail across both microscopes (the catalog assembly was generalized to allow this); the `Housing` binds `optique_peter_micrx080` as the design-target candidate (DET-2). + ## Gantry | Device | Family | Design spec (TDR) | @@ -32,4 +72,8 @@ Four cameras span the throughput-versus-speed-versus-resolution trade, all share | `CameraIII` | `Camera` | ~4 Mpix, > 2,000 fps; streaming | | `CameraIV` | `Camera` | 150 Mpix, 54 x 40 mm sensor, 3.76 um pixel; matches the large-sensor device procured for DanMAX | +## Families + +All reused, none new: `Table` (the gantry), `Housing` (each microscope chassis, binding `optique_peter_micrx080`), `LinearStage` (the objective-changer turret), `Objective` (per-lens identity), `PseudoAxis` (the objective selector), `Scintillator`, and `Camera`. The composition reuses the 2-BM `Microscope` / `Optics` Assembly blueprints unchanged; only the `camera` and `propagation_distance` slot cardinalities were generalized to `ZeroOrOne`. + The camera models, the bound microscope-optics model confirmation (DET-2), and the trigger path are the main detector-side [open questions](../questions.md). See [Inventory](../inventory.md) for the Asset tree. diff --git a/docs/deployments/tomowise/equipment/sample.md b/docs/deployments/tomowise/equipment/sample.md index 30b4e740fd..27d388a7e8 100644 --- a/docs/deployments/tomowise/equipment/sample.md +++ b/docs/deployments/tomowise/equipment/sample.md @@ -4,6 +4,39 @@ The sample stage is two experiment stations in the experiment hutch, sharing one [Detector](detector.md) gantry: a microtomography station (~45 m) and a nanotomography station (~49 m). They are modelled as two sample-stage groups in the [descriptor](../inventory.md), each presenting the specimen to the beam in a different way. Models named "(target)" are the TDR design selections, carried unbound until procurement confirms them. +Unlike the [Detector](detector.md), the sample stage is **not modelled as a catalog Assembly** here: it is a device group, not a composed `Microscope`-style blueprint. (2-BM models its sample positioning as a `SampleTower` Assembly + Fixture; TomoWISE could earn the same once the manipulator firms and a scenario registers it.) So these pages carry the containment trees but no Assembly-to-Fixture composition diagram. + +## The model in one picture + +The kinematic stacks, base to sample (containment, `Asset.parent_id`). The precise sub-order firms with the mechanical design (TDR manipulator tables 9.1 / 9.5); the trees below are the design-layout intent. + +Microtomography (~45 m), mirroring the standard table -> tilt -> rotary -> sample-top order: + +``` +TomoWISE (Unit, Asset) +└── SampleTable (Component, Family Table; base, fixed at 45 m, Xt/Yt/beta) + ├── LaminographyTilt (Device, TiltStage; tilts the rotation axis, alpha) + │ └── Rotary (Device, RotaryStage; wy, master rotation + trigger clock) + │ ├── SamplePositioning (Device, LinearStage; Xs/Zs, co-rotates) + │ └── SlipRing (Device, SlipRing; continuous-rotation feedthrough) + ├── SampleSlit (Device, Slit; sample-side, beam-defining) + └── FastShutter (Device, Shutter; sample-side) +``` + +Nanotomography (~49 m), the granite carrying the KB optics and the coarse-to-fine manipulator: + +``` +TomoWISE (Unit, Asset) +└── NanoGranite (Component, Family Table; granite support, ~49 m) + ├── KB (Device, Mirror; KB focusing pair) + └── NanoCoarseZ (Device, LinearStage; Zt, long-travel into the KB focus) + └── NanoCoarseY (Device, LinearStage; Yt, sample height) + └── NanoCoarseX (Device, LinearStage; Xt, centre-of-rotation) + └── NanoTilt (Device, TiltStage; Tilt X, axis-to-beam) + └── NanoRotary (Device, RotaryStage; Rot y, continuous rotation) + └── NanoSamplePositioning (Device, LinearStage; Xs/Zs, fine centring) +``` + ## Microtomography endstation (~45 m) The workhorse station: a fixed sample table about 45 m from the source carrying the rotation and positioning stack. The `Rotary` stage is also the trigger master clock (see [Controls](controls.md)).