Skill Tracer
Skills › Scientific Agent Skills › lab-hardware-cad › labware-adapters.md

labware-adapters.md

204 lines · skills/lab-hardware-cad/references/labware-adapters.md at 5f2bc03

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# Labware adapters, holders, and racks
2
3Parts that receive standard consumables: microplates, cuvettes, tubes, slides, dishes.
4
5The governing principle: **where a published standard exists, design to the standard; where it
6does not, require a measurement.** Microplate footprints are standardised. Well geometry, skirt
7profiles, tube dimensions, and lid fits are not.
8
9Verified dimensions live in `assets/standards.json`. Query them rather than copying numbers:
11```bash
12python scripts/check.py standards --show slas-microplate-footprint
13```

Labware adapters, holders, and racks

Parts that receive standard consumables: microplates, cuvettes, tubes, slides, dishes.

The governing principle: where a published standard exists, design to the standard; where it does not, require a measurement. Microplate footprints are standardised. Well geometry, skirt profiles, tube dimensions, and lid fits are not.

Verified dimensions live in assets/standards.json. Query them rather than copying numbers:

python scripts/check.py standards --show slas-microplate-footprint
Raw lines 1 to 14
Runs code python scripts/check.py :12
15## Microplates (ANSI/SLAS 1-4)
17The four dimensions references below are the R2012 PDFs currently linked by SLAS.
18They are subsets of the specification; read the relevant section and drawing for datum rules.
20| Document | Governs | Key numbers |
21| --- | --- | --- |
22| ANSI/SLAS 1-2004 | Footprint | 127.76 x 85.48 mm ±0.50 overall, ±0.25 near corners; corner radius 3.18 ±1.6 mm |
23| ANSI/SLAS 2-2004 | Height | 14.35 ±0.25 mm at perimeter wells; ±0.76 mm overall |
24| ANSI/SLAS 3-2004 | Bottom outside flange | Short 2.41, medium 6.10, tall 7.62 mm, each ±0.38 |
25| ANSI/SLAS 4-2004 | Well positions | 96-well: 9.0 mm pitch, A1 at 14.38 mm from left, 11.24 mm from top |

Microplates (ANSI/SLAS 1-4)

The four dimensions references below are the R2012 PDFs currently linked by SLAS. They are subsets of the specification; read the relevant section and drawing for datum rules.

DocumentGovernsKey numbers
ANSI/SLAS 1-2004Footprint127.76 x 85.48 mm ±0.50 overall, ±0.25 near corners; corner radius 3.18 ±1.6 mm
ANSI/SLAS 2-2004Height14.35 ±0.25 mm at perimeter wells; ±0.76 mm overall
ANSI/SLAS 3-2004Bottom outside flangeShort 2.41, medium 6.10, tall 7.62 mm, each ±0.38
ANSI/SLAS 4-2004Well positions96-well: 9.0 mm pitch, A1 at 14.38 mm from left, 11.24 mm from top
Raw lines 15 to 26
27### Designing a plate pocket
29Three traps, in the order people fall into them.
31**1. Use the tolerance for the full interface.** The ±0.25 mm band applies only
32within 12.7 mm of the corners. A continuous pocket needs the ±0.50 mm overall band.
33The standard covers the base footprint; obtain the vendor body/draft envelope for a deep pocket.
34Size to the maximum envelope, then add clearance and your process allowance. A plate at the top of tolerance is
35127.76 + 0.50 = 128.26 mm. A pocket cut at 127.76 + clearance can bind on conforming plates. Compute:
37```python
38plate_l_mm = 127.76 # ANSI/SLAS 1-2004 nominal
39plate_tol_mm = 0.50 # ANSI/SLAS 1-2004
40fit_clearance_mm = 0.40 # per side; FDM, see fabrication-limits.md
41pocket_l_mm = plate_l_mm + plate_tol_mm + 2 * fit_clearance_mm # 129.06
42```
44**2. The corner radius tolerance is enormous — and it bounds the pocket radius from above,
45not below.** 3.18 ±1.6 mm means a real plate corner is anywhere from 1.58 to 4.78 mm. Get the
46direction right: a plate corner is **convex**, a pocket fillet is **concave material bulging
47inward**, so a *sharp* internal pocket corner always clears a rounded plate — the unused corner is
48empty space. It is a pocket fillet *larger* than the plate's corner radius that binds: the bulge
49occupies space the plate needs. Sizing the fillet to the plate's maximum corner radius is
50therefore exactly backwards — it binds every plate except those at the top of the corner
51tolerance.
53The safe options, best first:
55- **Corner relief** (a small slot or bore cut past each corner) — always clears, prints and mills
56 cleanly, and is the standard fix.
57- **Fillet no larger than the plate's minimum corner radius** (1.58 mm for SLAS plates) — clears
58 every conforming plate in every position.
59- A larger fillet only if `R ≤ r_min + ~3.4 × per-side clearance` — the geometry only recovers the
60 intrusion when the plate stays roughly centred, so treat this as a last resort and say so.
62```python
63with BuildPart() as pocket:
64 # ... pocket geometry ...
65 # relief bores just outside each pocket corner: clears any conforming corner radius
66 with Locations(*corner_relief_centres()):
67 Hole(radius=2.0)
68```
70**3. Height depends on the flange, not just the plate.** ANSI/SLAS 3 includes three uniform flange
71heights, plus interrupted short flanges and dual-height variants. A carrier that grips the flange must be told which one. Ask; do not assume medium.

Designing a plate pocket

Three traps, in the order people fall into them.

1. Use the tolerance for the full interface. The ±0.25 mm band applies only within 12.7 mm of the corners. A continuous pocket needs the ±0.50 mm overall band. The standard covers the base footprint; obtain the vendor body/draft envelope for a deep pocket. Size to the maximum envelope, then add clearance and your process allowance. A plate at the top of tolerance is 127.76 + 0.50 = 128.26 mm. A pocket cut at 127.76 + clearance can bind on conforming plates. Compute:

plate_l_mm = 127.76      # ANSI/SLAS 1-2004 nominal
plate_tol_mm = 0.50      # ANSI/SLAS 1-2004
fit_clearance_mm = 0.40  # per side; FDM, see fabrication-limits.md
pocket_l_mm = plate_l_mm + plate_tol_mm + 2 * fit_clearance_mm   # 129.06

2. The corner radius tolerance is enormous — and it bounds the pocket radius from above, not below. 3.18 ±1.6 mm means a real plate corner is anywhere from 1.58 to 4.78 mm. Get the direction right: a plate corner is convex, a pocket fillet is concave material bulging inward, so a sharp internal pocket corner always clears a rounded plate — the unused corner is empty space. It is a pocket fillet larger than the plate's corner radius that binds: the bulge occupies space the plate needs. Sizing the fillet to the plate's maximum corner radius is therefore exactly backwards — it binds every plate except those at the top of the corner tolerance.

The safe options, best first:

  • Corner relief (a small slot or bore cut past each corner) — always clears, prints and mills cleanly, and is the standard fix.
  • Fillet no larger than the plate's minimum corner radius (1.58 mm for SLAS plates) — clears every conforming plate in every position.
  • A larger fillet only if R ≤ r_min + ~3.4 × per-side clearance — the geometry only recovers the intrusion when the plate stays roughly centred, so treat this as a last resort and say so.
with BuildPart() as pocket:
    # ... pocket geometry ...
    # relief bores just outside each pocket corner: clears any conforming corner radius
    with Locations(*corner_relief_centres()):
        Hole(radius=2.0)

3. Height depends on the flange, not just the plate. ANSI/SLAS 3 includes three uniform flange heights, plus interrupted short flanges and dual-height variants. A carrier that grips the flange must be told which one. Ask; do not assume medium.

Raw lines 27 to 72
73### Well grid
75For a part that must reach individual wells — a magnet block, a lid with access holes, a light
76guide — lay out from the plate's outline corner, not from the plate centre:
78```python
79a1_x_mm, a1_y_mm, pitch_mm = 14.38, 11.24, 9.0 # ANSI/SLAS 4-2004, 96-well
80locations = [
81 (a1_x_mm + pitch_mm * col, a1_y_mm + pitch_mm * row)
82 for row in range(8) for col in range(12)
84```
86The standard's positional tolerance is a **0.70 mm diameter zone** around each nominal centre, not
87a ±0.70 mm band. A feature that must clear every well needs at least 0.35 mm of radial margin on
88top of your own process tolerance.
90Directly verified in ANSI/SLAS 4 sections 4.2 and 4.3: 384-well pitch is 4.5 mm,
91A1 offsets (12.13, 8.99) mm, position zone diameter 0.70 mm; 1536-well pitch is
922.25 mm, A1 offsets (11.005, 7.865) mm, position zone diameter 0.50 mm. Datum edges
93are the near-corner zones, not a bowed side midpoint. These basic coordinates do
94not imply zero manufacturing tolerance.

Well grid

For a part that must reach individual wells — a magnet block, a lid with access holes, a light guide — lay out from the plate's outline corner, not from the plate centre:

a1_x_mm, a1_y_mm, pitch_mm = 14.38, 11.24, 9.0   # ANSI/SLAS 4-2004, 96-well
locations = [
    (a1_x_mm + pitch_mm * col, a1_y_mm + pitch_mm * row)
    for row in range(8) for col in range(12)
]

The standard's positional tolerance is a 0.70 mm diameter zone around each nominal centre, not a ±0.70 mm band. A feature that must clear every well needs at least 0.35 mm of radial margin on top of your own process tolerance.

Directly verified in ANSI/SLAS 4 sections 4.2 and 4.3: 384-well pitch is 4.5 mm, A1 offsets (12.13, 8.99) mm, position zone diameter 0.70 mm; 1536-well pitch is 2.25 mm, A1 offsets (11.005, 7.865) mm, position zone diameter 0.50 mm. Datum edges are the near-corner zones, not a bowed side midpoint. These basic coordinates do not imply zero manufacturing tolerance.

Raw lines 73 to 95
96### What the standards do not fix
98Well diameter, well depth, well bottom shape (flat, round, conical), skirt height, lid geometry,
99optical bottom thickness, and deep-well plate height. All vary by manufacturer and product line.
100If the part touches any of these, get the vendor drawing or measure it.

What the standards do not fix

Well diameter, well depth, well bottom shape (flat, round, conical), skirt height, lid geometry, optical bottom thickness, and deep-well plate height. All vary by manufacturer and product line. If the part touches any of these, get the vendor drawing or measure it.

Raw lines 96 to 101
102## Cuvettes
104A common 10 mm path-length rectangular cuvette has a **12.5 x 12.5 mm external
105footprint and 45 mm body height**, as illustrated by Hellma's catalogue. This is not
106a universal standard. No shared ±0.1 mm envelope tolerance or uniform wall thickness
107is established here; the database marks those nominal dimensions unverified for fit.
109Design notes:
111- Holders should be generous or compliant. Because no document fixes the tolerance, a 0.1 mm
112 interference fit designed against nominal will fail on some suppliers' cuvettes.
113- Semi-micro and micro cuvettes keep the 12.5 mm external footprint but change internal geometry
114 and often height. Confirm the exact external envelope, cap and optical-window height; a common
115 footprint alone does not establish interchangeability.
116- Cuvettes are usually held with a spring or leaf on one face so the two optical faces register
117 against fixed datums. Copy that: locate on two adjacent faces, preload from the opposite corner.
118 A four-sided pocket with clearance lets the cuvette rotate and shifts the path length.
119- **Never print the optical path.** Printed surfaces scatter. The cuvette provides the optical
120 faces; the holder provides position only, and must not obstruct the beam window.

Cuvettes

A common 10 mm path-length rectangular cuvette has a 12.5 x 12.5 mm external footprint and 45 mm body height, as illustrated by Hellma's catalogue. This is not a universal standard. No shared ±0.1 mm envelope tolerance or uniform wall thickness is established here; the database marks those nominal dimensions unverified for fit.

Design notes:

  • Holders should be generous or compliant. Because no document fixes the tolerance, a 0.1 mm interference fit designed against nominal will fail on some suppliers' cuvettes.
  • Semi-micro and micro cuvettes keep the 12.5 mm external footprint but change internal geometry and often height. Confirm the exact external envelope, cap and optical-window height; a common footprint alone does not establish interchangeability.
  • Cuvettes are usually held with a spring or leaf on one face so the two optical faces register against fixed datums. Copy that: locate on two adjacent faces, preload from the opposite corner. A four-sided pocket with clearance lets the cuvette rotate and shifts the path length.
  • Never print the optical path. Printed surfaces scatter. The cuvette provides the optical faces; the holder provides position only, and must not obstruct the beam window.
Raw lines 102 to 121
122## Tubes
124Tube dimensions are **not standardised** and differ measurably between suppliers, and often
125between product lines from the same supplier. Approximate outside diameters near the tube rim:
127| Tube | Approximate OD | Note |
128| --- | --- | --- |
129| 0.2 mL PCR | 6 mm | Often supplied in strips or as a 96-format plate |
130| 1.5 mL microcentrifuge | 11 mm | Rim is wider than the body; the body tapers |
131| 2.0 mL microcentrifuge | 11 mm | Same rim as 1.5 mL, taller body |
132| 15 mL conical | 17 mm | Cap is wider than the tube |
133| 50 mL conical | 30 mm | Cap is wider than the tube |
135**Treat every number in this table as a starting point for a first article, not a design input.**
136Ask the user for the supplier and catalogue number, or ask them to measure with calipers. Then
137design a rack that holds the tube by the **rim or the cap**, which is dimensionally stable, rather
138than by the tapered body, which is not.
140For a rack, the useful pattern is a through-hole sized to the body plus clearance and a counterbore
141that catches the rim, so the tube hangs rather than bottoms out.

Tubes

Tube dimensions are not standardised and differ measurably between suppliers, and often between product lines from the same supplier. Approximate outside diameters near the tube rim:

TubeApproximate ODNote
0.2 mL PCR6 mmOften supplied in strips or as a 96-format plate
1.5 mL microcentrifuge11 mmRim is wider than the body; the body tapers
2.0 mL microcentrifuge11 mmSame rim as 1.5 mL, taller body
15 mL conical17 mmCap is wider than the tube
50 mL conical30 mmCap is wider than the tube

Treat every number in this table as a starting point for a first article, not a design input. Ask the user for the supplier and catalogue number, or ask them to measure with calipers. Then design a rack that holds the tube by the rim or the cap, which is dimensionally stable, rather than by the tapered body, which is not.

For a rack, the useful pattern is a through-hole sized to the body plus clearance and a counterbore that catches the rim, so the tube hangs rather than bottoms out.

Raw lines 122 to 142
Involves a person Ask the user :136
143## Microscope slides and coverslips
145Slide sizes include approximately **75 x 25 mm and 76 x 26 mm**, with thickness
146near 1 mm. ISO 8037-1:1986 is the slide dimensions reference; do not equate the two
147commercial sizes. For example, BRAND labels its ISO 8037-1 slides approximately
14876 x 26 mm. Use the actual product drawing. Coverslips also need both lateral size
149and thickness: common #1 and #1.5 ranges are about 0.13-0.17 and 0.16-0.19 mm,
150but use the manufacturer's specified range and the objective's correction setting.
152Objective working distance is unforgiving. A holder that adds even 0.2 mm under the slide can put
153the sample outside a high-NA objective's working distance. Design slide holders so the slide
154registers directly against the stage datum, with the holder clamping from above.

Microscope slides and coverslips

Slide sizes include approximately 75 x 25 mm and 76 x 26 mm, with thickness near 1 mm. ISO 8037-1:1986 is the slide dimensions reference; do not equate the two commercial sizes. For example, BRAND labels its ISO 8037-1 slides approximately 76 x 26 mm. Use the actual product drawing. Coverslips also need both lateral size and thickness: common #1 and #1.5 ranges are about 0.13-0.17 and 0.16-0.19 mm, but use the manufacturer's specified range and the objective's correction setting.

Objective working distance is unforgiving. A holder that adds even 0.2 mm under the slide can put the sample outside a high-NA objective's working distance. Design slide holders so the slide registers directly against the stage datum, with the holder clamping from above.

Raw lines 143 to 155
156## Petri dishes and stage inserts
158Standard dish outside diameters are approximately 35, 60, 90, and 100 mm, but the flange profile
159and lid fit vary. Dishes are also slightly out of round. Locate on three points rather than a
160continuous circular pocket: a three-point nest is insensitive to ovality, a close-fitting bore is
161not.
163For stage inserts, the interface that matters is the **microscope stage opening**, which is
164instrument-specific and must be measured. Many stages accept a standard SLAS-footprint insert;
165confirm before assuming it.

Petri dishes and stage inserts

Standard dish outside diameters are approximately 35, 60, 90, and 100 mm, but the flange profile and lid fit vary. Dishes are also slightly out of round. Locate on three points rather than a continuous circular pocket: a three-point nest is insensitive to ovality, a close-fitting bore is not.

For stage inserts, the interface that matters is the microscope stage opening, which is instrument-specific and must be measured. Many stages accept a standard SLAS-footprint insert; confirm before assuming it.

Raw lines 156 to 166
167## Checks to run
169Declare the pocket in the model's `interfaces()` and let the check read it:
171```bash
172python scripts/gen.py carrier_model.py --outdir out/
173python scripts/check.py interfaces out/carrier.manifest.json
174```
176**Do not point `check.py fit` at the carrier's STEP.** `fit` measures the outer bounding box, which
177for a carrier is the outside of its walls — 6 mm larger than the pocket here — so it fails against
178the plate footprint no matter how correct the pocket is. The dimension that matters is internal, so
179it has to be declared, not measured from the envelope.
181To check the number by hand instead:
183```bash
184python scripts/check.py fit --standard slas-microplate-footprint \
185 --intent envelope --clearance 0.8 --value footprint_length=129.06
186```
188`--intent envelope` checks one-sided against maximum material condition, and `--clearance` is the
189total intended clearance: 0.40 mm per side is 0.80 mm. Passing means the pocket is the size you
190intended, not that the plate fits — only a test print shows that.
192Then always run `snapshot.py` and confirm the pocket is on the face you meant.

Checks to run

Declare the pocket in the model's interfaces() and let the check read it:

python scripts/gen.py carrier_model.py --outdir out/
python scripts/check.py interfaces out/carrier.manifest.json

**Do not point check.py fit at the carrier's STEP.** fit measures the outer bounding box, which for a carrier is the outside of its walls — 6 mm larger than the pocket here — so it fails against the plate footprint no matter how correct the pocket is. The dimension that matters is internal, so it has to be declared, not measured from the envelope.

To check the number by hand instead:

python scripts/check.py fit --standard slas-microplate-footprint \
  --intent envelope --clearance 0.8 --value footprint_length=129.06

--intent envelope checks one-sided against maximum material condition, and --clearance is the total intended clearance: 0.40 mm per side is 0.80 mm. Passing means the pocket is the size you intended, not that the plate fits — only a test print shows that.

Then always run snapshot.py and confirm the pocket is on the face you meant.

Raw lines 167 to 193
Runs code python scripts/gen.py :172
Runs code python scripts/check.py :173
194## Sources
196- ANSI/SLAS 1-2004 (R2012) Footprint Dimensions — <https://www.slas.org/SLAS/assets/File/public/standards/ANSI_SLAS_1-2004_FootprintDimensions.pdf>
197- ANSI/SLAS 2-2004 (R2012) Height Dimensions — <https://www.slas.org/SLAS/assets/File/public/standards/ANSI_SLAS_2-2004_HeightDimensions.pdf>
198- ANSI/SLAS 3-2004 (R2012) Bottom Outside Flange Dimensions — <https://www.slas.org/SLAS/assets/File/public/standards/ANSI_SLAS_3-2004_BottomOutsideFlangeDimensions.pdf>
199- ANSI/SLAS 4-2004 (R2012) Well Positions — <https://www.slas.org/SLAS/assets/File/public/standards/ANSI_SLAS_4-2004_WellPositions.pdf>
200- SLAS microplate standards overview — <https://www.slas.org/education/ansi-slas-microplate-standards/>
202- Hellma 2025 cuvette catalogue — <https://www.hellma.com/fileadmin/fos/Website/Broschueren_Flyer_Handhabung/Hellma_Analytics/Englisch/Hellma_Kuevettenkatalog_EN_2025_gross.pdf>
203- BRAND slide dimensions — <https://shop.brand.de/en/microscope-slides-white-height-1-mm-p162.html>
204- ISO 8037-1:1986 catalogue — <https://www.iso.org/standard/15048.html>

Sources

  • ANSI/SLAS 1-2004 (R2012) Footprint Dimensions — <https://www.slas.org/SLAS/assets/File/public/standards/ANSI_SLAS_1-2004_FootprintDimensions.pdf>
  • ANSI/SLAS 2-2004 (R2012) Height Dimensions — <https://www.slas.org/SLAS/assets/File/public/standards/ANSI_SLAS_2-2004_HeightDimensions.pdf>
  • ANSI/SLAS 3-2004 (R2012) Bottom Outside Flange Dimensions — <https://www.slas.org/SLAS/assets/File/public/standards/ANSI_SLAS_3-2004_BottomOutsideFlangeDimensions.pdf>
  • ANSI/SLAS 4-2004 (R2012) Well Positions — <https://www.slas.org/SLAS/assets/File/public/standards/ANSI_SLAS_4-2004_WellPositions.pdf>
  • SLAS microplate standards overview — <https://www.slas.org/education/ansi-slas-microplate-standards/>
  • Hellma 2025 cuvette catalogue — <https://www.hellma.com/fileadmin/fos/Website/Broschueren_Flyer_Handhabung/Hellma_Analytics/Englisch/Hellma_Kuevettenkatalog_EN_2025_gross.pdf>
  • BRAND slide dimensions — <https://shop.brand.de/en/microscope-slides-white-height-1-mm-p162.html>
  • ISO 8037-1:1986 catalogue — <https://www.iso.org/standard/15048.html>
Raw lines 194 to 204