UniteLabs

Tip Handling

Pick up, return, and discard tips on Hamilton and Agilent Bravo liquid handlers.

See Tips and Tip Tracking for the conceptual model (state machine, channel vs. 96-head, inventory tracking). This guide covers the procedural API for picking up, returning, and discarding tips across both supported liquid handlers.

For vendor-specific details, see the Hamilton and Bravo guides.

Prerequisites

  • A running liquid handler with a connector linked to the UniteLabs platform
  • A tip rack loaded with tips

Connect to the Device

from unitelabs.liquid_handling.hamilton import MicrolabSTAR


hamilton = MicrolabSTAR(name="Microlab STAR")
await hamilton.initialize()

Arrange the Deck

Hamilton uses a track-based deck. Add carriers at specific tracks, then place tip racks in the carriers.

from unitelabs.labware.hamilton import TIP_CAR_480_A00, HamiltonTip_300, HamiltonTipRack_300

tip_carrier = TIP_CAR_480_A00()
tip_rack = HamiltonTipRack_300(filled_with=HamiltonTip_300)

tip_carrier[0] = tip_rack
hamilton.deck.add(tip_carrier, track=7)
print(hamilton.deck.summary())

Pick Up Tips

Call pick_up_tips_from to take the next available tips from a tip rack. Pass zero-indexed pipetting channel numbers.

await hamilton.pipettes.pick_up_tips_from(channels=range(4), rack=tip_rack)
The method raises MissingError: No next tip available. The tip rack is empty. when the rack doesn't have enough tips.

Alternatively, you can specify the exact tip spots to use, for example when reusing tips. To do this, call pick_up_tips with the spots parameter.

spots = tip_rack["B2":"C2"]
await hamilton.pipettes.pick_up_tips(channels=[1, 2], spots=spots)
tip_rack["A1"] and tip_rack[0] select the same spot. Use tip_rack[pos].get() to check whether a spot has a tip.

For automatic tip management, pass the tip class used to fill the rack as tip_type to pick_up_tips. Predefined tip classes, such as HamiltonTip_300 and HamiltonTip_1000_Filter, are exported from unitelabs.labware.hamilton. The method picks up the next available tips of that type from any matching rack on the deck.

await hamilton.pipettes.pick_up_tips(
    channels=range(4),
    tip_type=HamiltonTip_300,
)

The method checks racks from lower to higher X, then higher to lower Y. It can take tips from more than one rack.

Tips follow each rack's defined spot order and pair with channels in the order you supply them. The method raises MissingError when the deck has fewer matching tips than requested tip pickup needs.

Pick Up a Partial Set of Tips

Set well_offset=(row, col) to align the head's A1 nozzle with another part of the rack. Only nozzles over filled rack spots pick up tips.

# Pick up column 12 only (head A1-H1 aligns with rack A12-H12)
await bravo.pipette_head.pick_up_tips_from(
    rack=tip_rack,
    well_offset=(0, 11),
    press_depth=5.8,
)

# Pick up a single tip from H12 (head A1 aligns with rack H12)
await bravo.pipette_head.pick_up_tips_from(
    rack=tip_rack,
    well_offset=(7, 11),
    press_depth=5.8,
)

Put Down Tips

Return tips to the rack they were picked up from.

Use await hamilton.pipettes.return_tips() to return tips to the exact location they were picked up from.

await hamilton.pipettes.return_tips()

You can also put tips in the first empty spots of a specific rack or in named spots.

# Return tips to the first empty spots in one rack
await hamilton.pipettes.put_down_tips_to(rack=tip_rack, channels=range(4))

# Return tips to specific spots
spots = tip_rack["A1":"E1"]
await hamilton.pipettes.put_down_tips(channels=[0, 1, 2, 3], spots=spots)

Pass the same tip class used for pickup as tip_type to put down tips in the next compatible empty spots. The SDK uses the same deck order as pickup and can select spots from more than one rack.

await hamilton.pipettes.put_down_tips(
    channels=range(4),
    tip_type=HamiltonTip_300,
)

Discard Tips

The tip waste location is stored in the device configuration and varies between models of Hamilton robots. discard_tips() discards all tips to the configured waste location. The command can also be used to discard tips from specific channels.

# Discard all present tips
await hamilton.pipettes.discard_tips()

# Discard tips from specific channels
await hamilton.pipettes.discard_tips(channels=[0, 1])
For Hamilton STAR waste details, see Waste block.

Last updated