fix(star): split pipetting operations by channel spacing - #1164
Conversation
|
@HaamsRee, Is the standards The interim-solution for your 4-channel STAR is expected to probe all containers first and then perform the actions: Your idea of splitting aspirate is actually why we created the channel batching algorithm and have been trialing it in production via the |
…to the legacy backend path On main, STAR_backend.py and STAR_tests.py now live under pylabrobot/legacy/liquid_handling/backends/hamilton/, and the old module path is a deprecation shim. This merge relocates the branch's two changes onto the new paths so the branch stops conflicting. The aspirate body needed a real resolution: main added a tip-capacity check at the same anchor where this branch replaced the inline aspirate_pip call with aspirate_kwargs and aspirate_batch. Both are kept, main's check first. The branch's own lines are unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
If I remember correctly, sending a single C0AS with the old x_positions, y_positions from: x_positions, y_positions, channels_involved = self._ops_to_fw_positions(ops, use_channels)With 18mm channel spacing the single C0AS does not position the channels in the correct places. I think they get offset to make space and the A1 channel gets pushed off the plate as a result.
Yes a physical crash on the instrument caused by this line, I think: z_position_at_end_of_command=100,The tips just slam into the plate. Why was this there in the first place? Setting z=100 every time will certainly cause crashes. |
Summary
Fixes STAR backend pipetting behavior when the configured minimum channel spacing is wider than the target spacing. Addresses #822.
Previously,
STARBackend.aspirate()andSTARBackend.dispense()sent all requested operations in a singleC0ASorC0DScommand. For adjacent wells in a 96-well plate, this could request 9 mm channel spacing from a STAR configured for a minimum of 18 mm.This PR changes aspirate and dispense to:
It also removes the explicit 100 mm end position and minimum traverse height from the liquid-height probing path, allowing the normal STAR channel traversal height to be used.
The single-batch behavior is unchanged when all requested channel positions are valid simultaneously.
Motivation
On a STAR with four 1 mL channels spaced at 18 mm, adjacent 96-well targets cannot be reached by those channels simultaneously. Sending them in one command requested a mechanically impossible arrangement instead of splitting the work into legal sequential movements.
During testing with
probe_liquid_height=True, the hard-coded 100 mm Z end and traverse height also caused the probing workflow to crash on the physical instrument. Removing those overrides restores the backend's normal safe traversal behavior between batches.Tests
Added STAR backend tests for:
Ran:
Result:
ruff checkandruff format --checkalso pass for both changed files.