Skip to content

Commit 318f60c

Browse files
Fix liquid tracking in aspirate96, dispense96 (#565)
Co-authored-by: Rick Wierenga <rick_wierenga@icloud.com>
1 parent b42e4d6 commit 318f60c

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

pylabrobot/liquid_handling/liquid_handler.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1621,6 +1621,7 @@ async def aspirate96(
16211621
liquids = [(None, volume)]
16221622
all_liquids.append(liquids)
16231623
else:
1624+
# tracker is enabled: update tracker liquid history
16241625
liquids = well.tracker.remove_liquid(volume=volume) # type: ignore
16251626
all_liquids.append(liquids)
16261627

@@ -1760,15 +1761,16 @@ async def dispense96(
17601761
if not len(containers) == 96:
17611762
raise ValueError(f"dispense96 expects 96 wells, got {len(containers)}")
17621763

1763-
for channel, well in zip(self.head96.values(), containers):
1764+
for well, channel in zip(containers, self.head96.values()):
17641765
# even if the volume tracker is disabled, a liquid (None, volume) is added to the list
17651766
# during the aspiration command
17661767
liquids = channel.get_tip().tracker.remove_liquid(volume=volume)
17671768
reversed_liquids = list(reversed(liquids))
17681769
all_liquids.append(reversed_liquids)
17691770

1770-
for liquid, vol in reversed_liquids:
1771-
well.tracker.add_liquid(liquid=liquid, volume=vol)
1771+
if not well.tracker.is_disabled and does_volume_tracking():
1772+
for liquid, vol in reversed_liquids:
1773+
well.tracker.add_liquid(liquid=liquid, volume=vol)
17721774

17731775
dispense = MultiHeadDispensePlate(
17741776
wells=cast(List[Well], containers),

pylabrobot/liquid_handling/liquid_handler_tests.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,6 +1091,19 @@ async def error_func(*args, **kwargs):
10911091
# test volume doens't change on failed dispense
10921092
assert self.lh.head[0].get_tip().tracker.get_used_volume() == 200
10931093

1094+
async def test_96_head_volume_tracking(self):
1095+
for item in self.plate.get_all_items():
1096+
item.tracker.set_liquids([(Liquid.WATER, 10)])
1097+
await self.lh.pick_up_tips96(self.tip_rack)
1098+
await self.lh.aspirate96(self.plate, volume=10)
1099+
for i in range(96):
1100+
self.assertEqual(self.lh.head96[i].get_tip().tracker.get_used_volume(), 10)
1101+
self.plate.get_item(i).tracker.get_used_volume() == 0
1102+
await self.lh.dispense96(self.plate, volume=10)
1103+
for i in range(96):
1104+
self.assertEqual(self.lh.head96[i].get_tip().tracker.get_used_volume(), 0)
1105+
self.plate.get_item(i).tracker.get_used_volume() == 10
1106+
10941107

10951108
class TestLiquidHandlerCrossContaminationTracking(unittest.IsolatedAsyncioTestCase):
10961109
async def asyncSetUp(self):

0 commit comments

Comments
 (0)