feat(tomowise): reconcile with the TDR; share the Mask Family; compose the Microscope assembly#301
Merged
Merged
Conversation
The design-phase TomoWISE scaffold (#287) carried values that drift from the TomoWISE TDR (the authoritative source). Each correction below was verified directly against the TDR text, not the extraction summary. - nano stage: the TDR specifies the six-axis sample manipulator in full (Table 9.5); it is NOT deferred to procurement. Replace the single NanoSampleStage/NanoPositioner with the real stack (granite, tilt, coarse X/Y/Z, continuous rotary, fine Xs/Zs), reusing the micro endstation Families (Table/TiltStage/LinearStage/RotaryStage) so no nano-specific Family is needed. NANO-1 reframed to model-binding procurement and kept live for the open-questions alignment guard. - drop the fabricated microscope model MICRX080 (absent from the TDR); keep the named vendor Optique Peter. Narrow DET-2 to model-only. - sample table surface is 390 mm BELOW the beam, not above (p54). - 60 urad is the beam-defining mask aperture, not the white-beam slit (p38). - MLM coating candidates are W/SiC or W/B4C per the text; Table 8.3 lists W/Si. - heat absorber: drop the uncorroborated MM1/MM2; note the second SU heat absorber. Metal filter sits at the start of the experiment hutch (p374). Deployment unit tests (62) and mkdocs --strict pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ssembly reuse Mask was already used as a loose (plain-text) family by both 2-BM (the M3-24 front-end exit mask) and TomoWISE (FM1/FM2 plus the MSM safety mask), so it is earned into the catalog as a shared Family. naming-r3 clean: a bare role-noun, sibling of Slit/Aperture/Mirror, with the movable-vs-fixed distinction kept as a per-Asset setting (no FixedMask/MovableMask split). Beam-effect modelling stays deferred to the passive beam-path tier. The 2-BM descriptor test used Mask as its "uncatalogued family renders plain" example; swap it to Beam, the loose bending-magnet source representation that is intentionally never a catalog Family. Also record, on the TomoWISE model page, that the two microscopes bind a loose Microscope family instead of composing the catalog Microscope / Optics Assemblies that 2-BM already uses. Composing them is the clearest catalog-reuse opportunity and would remove the Microscope family/assembly name collision; deferred until the detector optics and camera models firm. Deployment unit tests (62) and mkdocs --strict pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The catalog already carries optique_peter_micrx080 (an Optique Peter model, bound by 2-BM). The TomoWISE TDR names only the vendor "Optique Peter", not a model, so the model stays unbound, but the existing catalog model is the natural first candidate when DET-2 is decided. Note it in the detector page and the DET-2 question as a candidate, not a TDR fact or a binding. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…omoWISE microscopes Make the cross-facility Microscope.camera and Optics.propagation_distance slots ZeroOrOne so a camera-agnostic microscope that shares a detector pool can compose the assembly. TomoWISE's two microscopes share four interchangeable cameras and one gantry propagation rail, so each leaves those slots empty; 2-BM still binds its camera and propagation (re-validated by the microscope scenario). No code-enum change: ZeroOrOne already exists. Compose MicLFOV/MicHR as the cross-facility Microscope Assembly instead of a loose Microscope family (removing the family/assembly name collision): Housing-anchored, with a turret, the objectives, and an objective selector over a scintillator, and the Optique Peter optics model optique_peter_micrx080 bound from the 2-BM catalog candidate (pending confirmation, DET-2). The four cameras stay separate shared Assets; the gantry provides the propagation distance. Pin the new ZeroOrOne-left-unbound behavior with a register_fixture decider test. Docs updated (detector, inventory, model, questions). Known follow-up, not addressed here: the affordance-superset check that should guarantee a Detector-presenting Microscope is imageable is documented as deferred to register_fixture (equipment/aggregates/assembly/state.py) but is not implemented there, and catalog Families carry no affordances yet. Relaxing the camera floor surfaces that pre-existing gap; tracked for a later slice. Deployment + register_fixture unit tests, the 2-BM microscope integration scenario, and mkdocs --strict all pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…onstituents The constituents are children of the MicLFOV / MicHR Housing Assets, so the parent already scopes them (parent_id); prefixing a child with its parent's name was redundant. No global Asset-name uniqueness is enforced (identity is the stream UUID; only an Asset's ports/owners are name-unique within it), and the objectives are already unique by magnification. Plain names (Turret, Objective_1x, ObjectiveSelector, Scintillator) match the 2-BM constituent style; Turret/ObjectiveSelector/Scintillator repeat across the two microscopes, scoped by their parent. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Coverage reportClick to see where and how coverage changed
This report was generated by python-coverage-comment-action |
||||||||||||||||||||||||
This was referenced Jun 22, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reconciles the design-phase TomoWISE (MAX IV) scaffold against the authoritative TomoWISE TDR, and reuses 2-BM catalog structure where it genuinely fits. All facts were verified directly against the TDR text, not an extraction summary.
TDR reconciliation
Catalog sharing
cameraandpropagation_distanceslots ->ZeroOrOne(no enum change) so a camera-agnostic microscope sharing a detector pool can compose. 2-BM still binds both (scenario re-validated).Microscopefamily/assembly name collision. The Optique Peter modeloptique_peter_micrx080is bound on both Housings (the 2-BM candidate, pending DET-2).Known follow-up (not in this PR)
The affordance-superset check that should guarantee a Detector-presenting Microscope is imageable is documented as deferred to
register_fixture(equipment/aggregates/assembly/state.py) but is implemented nowhere, and catalog Families carry no affordances yet. Relaxing the camera floor surfaces this pre-existing gap; tracked for a later slice.Verification
Deployment + register_fixture unit tests, the 2-BM microscope integration scenario, and
mkdocs --strictall pass. Gate-reviewed (17-agent workflow); 5 findings fixed pre-merge.🤖 Generated with Claude Code