pylabrobot.opentrons.flex.flex_head.FlexHead8#

class pylabrobot.opentrons.flex.flex_head.FlexHead8(flex: Flex, mount: str, pipette_id: str, channels: int, pipette_model: str, max_volume: float)#

Bases: _FlexHead

8-channel pipette head, column-addressed (anchor-well fan-out).

Liquid operations use PLR coordinates anchored at the rearmost well the nozzle row covers (on a 96-format plate, column 2 uses A3). The Flex hardware fans the in-place plunger command out to all 8 physical nozzles. Tip/volume trackers are committed only for the channels/wells actually actuated, skipping None (inactive) channels (None-skip) – and only after the wire command succeeds.

column indexes the sets of 8 rows the nozzles can cover, which on a 96-format plate is just the physical columns (0-11). A denser layout has more than one such set per physical column, since the nozzles skip rows to hold their 9 mm pitch: a 384 plate takes column 0-47, where 0 covers A1/C1/E1/../O1 and 1 covers B1/D1/../P1. See _column_anchor_and_items.

Single-tip cherry-pick (pick_up_single_tip/aspirate_single/ dispense_single/drop_single_tip) switches the pipette to SINGLE nozzle mode first via configureNozzleLayout; column ops reset back to ALL mode if a prior single-tip op left the layout otherwise (_ensure_all_mode).

Coordinate motion, position reads, priming, tip handling and plate air transfers have been exercised on the p1000 multi-channel Flex. Air tests establish command sequencing and motion, not liquid-volume accuracy. Tip-presence sensing can report absent for a physically seated single tip.

Methods

__init__(flex, mount, pipette_id, channels, ...)

air_gap_in_place(volume[, flow_rate])

Draw a volume uL air gap where the head already is -- one airGapInPlace command.

aspirate(target, volume, *[, column, ...])

Aspirate volume uL from target using PLR coordinates and in-place aspiration.

aspirate_container(container, volume[, ...])

Aspirate volume uL per channel from one single-cavity container.

aspirate_in_place(volume[, flow_rate])

Aspirate volume uL where the head already is -- one aspirateInPlace command.

aspirate_single(plate, well, volume[, flow_rate])

Aspirate a single well with the currently mounted single tip.

blow_out([flow_rate])

Blow out at the current position -- one blowOutInPlace command.

configure_for_volume(volume)

Put the pipette in the volume mode that suits volume uL.

default_flow_rates()

The robot's own defaults for this pipette and the tip currently on it.

discard_tips(trash)

Discard the mounted column of tips into the trash.

dispense(target, volume, *[, column, ...])

Dispense volume uL into target using PLR coordinates and in-place dispensing.

dispense_container(container, volume[, ...])

Dispense volume uL per channel into one single-cavity container.

dispense_in_place(volume[, flow_rate, push_out])

Dispense volume uL where the head already is -- one dispenseInPlace command.

dispense_single(plate, well, volume[, flow_rate])

Dispense to a single well with the currently mounted single tip.

drop_single_tip(trash)

Drop the single mounted tip to trash and restore ALL nozzle mode.

drop_tips(target[, column])

Drop a full column of tips -- one wire command, fanned to 8 channels.

get_mounted_tips()

Per-channel tip state (Case-2: no private-attribute peeking by consumers).

get_tip_presence()

Read this head's tip sensor: "present", "absent" or "unknown".

has_tip_on_hardware()

Query the Flex's hardware tip-presence sensor for THIS head's pipette.

liquid_probe(plate, column)

Probe for liquid in a column -- one liquidProbe command anchored at its rearmost well; return the found liquid z (mm).

move_relative(axis, distance)

Jog one axis by distance mm from wherever the head is now.

move_to([x, y, z, speed, minimum_z_height])

Move the head to an absolute deck-frame position, holding any axis left unspecified -- ONE moveToCoordinates command.

move_to_addressable_area(addressable_area_name)

Move to a named fixture on the deck rather than to labware.

move_to_well(target[, offset, origin, ...])

Move to a well, named rather than measured -- ONE moveToWell command.

pick_up_single_tip(tip_rack[, well, offset, ...])

Pick up one tip in SINGLE nozzle mode, anchored on primary_nozzle.

pick_up_tips(target, *[, column, ...])

Pick up tip(s), choosing the nozzle layout for this call.

position()

The head's current deck-frame position -- one savePosition query.

prepare_to_aspirate()

Move the plunger to where an aspirate starts from ("priming").

reachable_single_nozzles(labware, well)

The anchor nozzles that can address well where the labware currently sits.

touch_tip(plate, column[, radius, offset])

Touch the mounted tips to their well walls -- one touchTip command anchored at the column's rearmost well.

try_liquid_probe(plate, column)

Like liquid_probe but return None instead of raising when no liquid is found.

unsafe_blow_out_in_place(flow_rate)

Blow out where the head is, skipping the engine's own checks.

unsafe_drop_tip_in_place()

Drop the mounted tip where the head is, skipping the engine's own checks.

verify_tip_presence(expected_state)

Have the robot fail the command unless its tip sensor reads expected_state.

Parameters: