Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

0ff0c3 update #4886

Open
wants to merge 7 commits into
base: develop
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 90 additions & 39 deletions protocols/0ff0c3/0ff0c3.ot2.apiv2.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,18 @@ def pick_up(pip):
pip.reset_tipracks()
pip.pick_up_tip()

def extra_slow_tip_withdrawal(current_pipette, well_location, to_center=False):
if current_pipette.mount == 'right':
axis = 'A'
else:
axis = 'Z'
ctx.max_speeds[axis] = 3
if to_center is False:
current_pipette.move_to(well_location.top())
else:
current_pipette.move_to(well_location.center())
ctx.max_speeds[axis] = None

def slow_tip_withdrawal(current_pipette, well_location, to_center=False):
if current_pipette.mount == 'right':
axis = 'A'
Expand Down Expand Up @@ -77,73 +89,107 @@ def slow_tip_withdrawal(current_pipette, well_location, to_center=False):

for i in range(num_mix):
m300.aspirate(mix_vol, col.bottom(5))
m300.dispense(mix_vol, col.bottom(10))
m300.dispense(mix_vol, col.bottom(25))

slow_tip_withdrawal(m300, col)
#lowering tip into bottom of well, then slow withdrawal to remove drops
m300.aspirate(mix_vol, col.bottom(25))
m300.dispense(mix_vol, col.bottom(5), rate=0.1)
extra_slow_tip_withdrawal(m300, col)
m300.drop_tip()

ctx.comment('\n-------------INCUBATION ON MAGNET---------------\n\n')
mag_mod.engage(height_from_base=4.0)
ctx.delay(minutes=10)
mag_mod.engage(height_from_base=3.5)
ctx.delay(minutes=5)

#Turning on magnet, then mixing to allow beads in top of sample to separate out of solution
ctx.comment('\n----------Mixing Sample + Bind on Magnet-----------\n\n')
mix_vol = 200
num_mix = 5
for col in samples:
pick_up(m300)

for i in range(num_mix):
m300.aspirate(mix_vol, col.bottom(25))
m300.dispense(mix_vol, col.bottom(7), rate=1)

m300.aspirate(mix_vol, col.bottom(25))
m300.dispense(mix_vol, col.bottom(5), rate=0.1)
extra_slow_tip_withdrawal(m300, col)
m300.drop_tip()
#ctx.delay(minutes=10)
#10 minutes of delay to allow last bit of beads to come out of suspension. reduce this number by 1 minute per column

ctx.comment('\n----------------REMOVING SUPER------------------\n\n')
sup_vol = 1820 # as per Parker during onsite
# sup_vol = 1820 # as per customer during onsite
for col in samples:
pick_up(m300)

tip_ref_vol = m300.tip_racks[0].wells()[0].max_volume
num_transfers = math.ceil(sup_vol/tip_ref_vol)
transfer_vol = sup_vol/num_transfers
# tip_ref_vol = m300.tip_racks[0].wells()[0].max_volume
# num_transfers = math.ceil(sup_vol/tip_ref_vol)
# transfer_vol = sup_vol/num_transfers

for i in range(num_transfers):
m300.aspirate(transfer_vol, col.bottom(0.4), rate=0.1)
# m300.aspirate(20, col.bottom(0.4), rate=0.1)
slow_tip_withdrawal(m300, col)
m300.dispense(transfer_vol, trash)
m300.blow_out()
for i in range(10):
m300.aspirate(180, col.bottom(0.2), rate=0.2)
extra_slow_tip_withdrawal(m300, col)
m300.dispense(200, trash, rate=0.5)
m300.aspirate(20)
#m300.blow_out()

m300.aspirate(100, col.bottom(0.1), rate=0.1)
m300.dispense(120, trash, rate=0.1)
m300.drop_tip()

mag_mod.disengage()

ctx.pause("Empty liquid waste Reservoir")
ctx.pause("Empty waste reservoir, add elution and wash buffers, and place a skirted PCR plate in slot 3 for final elution")
#this pause is not necessary if extracting 40 or fewer samples

ctx.comment('\n---------------WASH STEP----------------\n\n')

wash_vol = 500
num_buff_transfers = math.ceil(wash_vol/tip_ref_vol)
buff_transfer_vol = wash_vol/num_buff_transfers

for i in range(3):
#adding wash and mixing
for col in samples:
pick_up(m300)

for i in range(num_buff_transfers):
m300.aspirate(buff_transfer_vol, wash_buff)
m300.dispense(buff_transfer_vol, col.top())
m300.blow_out()

m300.mix(5, 200, col)
m300.drop_tip()

mag_mod.engage(height_from_base=4.0)
for i in range(3):
m300.aspirate(166.7, wash_buff)
m300.dispense(166.7, col.bottom(15))#dispensing within deepwell
m300.blow_out(col.bottom(15))

for i in range(15):
m300.aspirate(200, col.bottom(2), rate=2)
m300.dispense(200, col.bottom(7), rate=3)

m300.aspirate(200, col.bottom(2), rate=1)
m300.dispense(200, col.bottom(2), rate=0.2)
extra_slow_tip_withdrawal(m300, col)
m300.drop_tip()

#Standard mix:
#m300.mix(5, 200, col)
#m300.drop_tip()

mag_mod.engage(height_from_base=3.5)
ctx.delay(minutes=5)

#Removing wash
for col in samples:
pick_up(m300)

for i in range(num_buff_transfers):
m300.aspirate(buff_transfer_vol, col.bottom(0.4), rate=0.1)
for i in range(2):
m300.aspirate(180, col.bottom(0.2), rate=0.5)
slow_tip_withdrawal(m300, col)
m300.dispense(buff_transfer_vol, trash)
m300.blow_out()
m300.dispense(200, trash, rate=0.5)
m300.aspirate(20)

m300.aspirate(180, col.bottom(0.1), rate=0.1)
m300.dispense(200, trash, rate=0.5)
m300.drop_tip()

mag_mod.disengage()

ctx.comment('\n----------------AIR DRY BEADS------------------\n\n')
ctx.delay(minutes=5)
#ctx.delay(minutes=5)
#this can be removed if purifying several columns of samples

ctx.comment('\n----------------ELUTION STEP------------------\n\n')

Expand All @@ -152,15 +198,20 @@ def slow_tip_withdrawal(current_pipette, well_location, to_center=False):
pick_up(m300)
m300.aspirate(50, elution_buff)
m300.dispense(50, col)
m300.mix(15, 50, col)

for i in range(20):
m300.aspirate(50, col.bottom(0.2), rate=2)
m300.dispense(50, col.bottom(2), rate=2)

#m300.mix(15, 50, col)
m300.drop_tip()

mag_mod.engage(height_from_base=4.0)
ctx.delay(minutes=5)
#May need to replace this with a for loop for the mixing
mag_mod.engage(height_from_base=3.5)
#ctx.delay(minutes=5)

for s, d in zip(samples, destination):
pick_up(m300)
m300.aspirate(50, s.bottom(0.4), rate=0.1)
m300.aspirate(50, s.bottom(0.1), rate=0.1)
m300.dispense(50, d)
m300.drop_tip()

Expand Down