Skip to content

Commit f2b1f2e

Browse files
committed
Merge branch 'release/1.10'
2 parents 73b7f4e + 61c10ef commit f2b1f2e

File tree

68 files changed

+3265
-53
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+3265
-53
lines changed

CHANGELOG

+16
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
## Version 1.10
2+
3+
New features:
4+
- New labware configuration: Biotix tips for 300 and 1000 configured in all protocols.
5+
- New labware configuration: axygen pcr plate configured in required protocols.
6+
7+
Protocol modifications:
8+
- Waste disposal height modified, now the liquid waste is dispensed above the reservoir.
9+
- Aspiration in washes is modified from 220 to 210 ul to avoid the liquid touching the tip filters.
10+
- Change magnet height to 23 mm when using vwr deep well plates.
11+
- Removed reuse tips for elution steps in extraction protocol.
12+
- Now remove trash pause is prompted before the incubation pause.
13+
14+
Documentation:
15+
- Added calibration docs. Protocol, multichannel pipette and magdeck calibration.
16+
117
## Version 1.9
218

319
New features:

calibration_check/stationA_protocol1_buffer_S3_calibration.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
BUFFER_LABWARE = 'opentrons plastic 30ml tubes'
2424
DESTINATION_LABWARE = 'opentrons plastic 2ml tubes'
2525
DEST_TUBE = '2ml tubes'
26+
TIPS1000 = 'biotix'
2627
VOLUME_BUFFER = 300
2728
LANGUAGE = 'esp'
2829
RESET_TIPCOUNT = False
@@ -43,6 +44,10 @@
4344
"""
4445
NUM_SAMPLES is the number of samples, must be an integer number
4546
47+
TIPS 1000
48+
biotix
49+
opentrons
50+
4651
BUFFER_LABWARE must be one of the following:
4752
opentrons plastic 50ml tubes
4853
opentrons plastic 30ml tubes
@@ -56,6 +61,10 @@
5661

5762

5863
# Constants
64+
TIPS1000_LW_DICT = {
65+
'biotix': 'biotix_96_tiprack_1000ul',
66+
'opentrons': 'opentrons_96_tiprack_1000ul'
67+
}
5968
BUFFER_LW_DICT = {
6069
'opentrons plastic 50ml tubes': 'opentrons_6_tuberack_falcon_50ml_conical',
6170
'opentrons plastic 30ml tubes': 'opentrons_6_tuberack_generic_30ml_conical'
@@ -221,8 +230,11 @@ def run(ctx: protocol_api.ProtocolContext):
221230
reset_tipcount()
222231

223232
# define tips
224-
tips1000 = [robot.load_labware('opentrons_96_filtertiprack_1000ul',
225-
3, '1000µl tiprack')]
233+
tips1000 = [
234+
robot.load_labware(TIPS1000_LW_DICT[TIPS1000], slot,
235+
'1000µl filter tiprack')
236+
for slot in ['3']
237+
]
226238

227239
# define pipettes
228240
p1000 = robot.load_instrument('p1000_single_gen2', 'left', tip_racks=tips1000)

calibration_check/stationA_protocol2_beads_S3_calibration.py

+15-2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
BEADS_LABWARE = 'opentrons plastic 30ml tubes'
2323
PLATE_LABWARE = 'nest deep generic well plate'
2424
VOLUME_BEADS = 410
25+
TIPS1000 = 'biotix'
2526
DILUTE_BEADS = True
2627
LANGUAGE = 'esp'
2728
RESET_TIPCOUNT = False
@@ -42,6 +43,10 @@
4243
"""
4344
NUM_SAMPLES is the number of samples, must be an integer number
4445
46+
TIPS 1000
47+
biotix
48+
opentrons
49+
4550
BEADS_LABWARE must be one of the following:
4651
opentrons plastic 50 ml tubes
4752
opentrons plastic 30ml tubes
@@ -52,6 +57,11 @@
5257
vwr deep generic well plate
5358
"""
5459

60+
TIPS1000_LW_DICT = {
61+
'biotix': 'biotix_96_tiprack_1000ul',
62+
'opentrons': 'opentrons_96_tiprack_1000ul'
63+
}
64+
5565
BD_LW_DICT = {
5666
'opentrons plastic 50 ml tubes': 'opentrons_6_tuberack_falcon_50ml_conical',
5767
'opentrons plastic 30ml tubes': 'opentrons_6_tuberack_generic_30ml_conical'
@@ -241,8 +251,11 @@ def run(ctx: protocol_api.ProtocolContext):
241251
reset_tipcount()
242252

243253
# load tips
244-
tips1000 = [robot.load_labware('opentrons_96_filtertiprack_1000ul',
245-
3, '1000µl tiprack')]
254+
tips1000 = [
255+
robot.load_labware(TIPS1000_LW_DICT[TIPS1000], slot,
256+
'1000µl filter tiprack')
257+
for slot in ['3']
258+
]
246259

247260
# load pipette
248261
p1000 = robot.load_instrument(

calibration_check/stationA_protocol3_lysates_S3_calibration.py

+15-2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
NUM_SAMPLES = 96
2424
LYSATE_LABWARE = 'opentrons plastic 2ml tubes'
2525
PLATE_LABWARE = 'nest deep generic well plate'
26+
TIPS1000 = 'biotix'
2627
VOLUME_LYSATE = 400
2728
BEADS = False
2829
LANGUAGE = 'esp'
@@ -47,6 +48,10 @@
4748
"""
4849
NUM_SAMPLES is the number of samples, must be an integer number
4950
51+
TIPS 1000
52+
biotix
53+
opentrons
54+
5055
LYSATE_LABWARE must be one of the following:
5156
opentrons plastic 2ml tubes
5257
@@ -56,6 +61,11 @@
5661
vwr deep generic well plate
5762
"""
5863

64+
TIPS1000_LW_DICT = {
65+
'biotix': 'biotix_96_tiprack_1000ul',
66+
'opentrons': 'opentrons_96_tiprack_1000ul'
67+
}
68+
5969
LY_LW_DICT = {
6070
'opentrons plastic 2ml tubes': 'opentrons_24_tuberack_generic_2ml_screwcap'
6171
}
@@ -224,8 +234,11 @@ def run(ctx: protocol_api.ProtocolContext):
224234
reset_tipcount()
225235

226236
# load tips
227-
tips1000 = [robot.load_labware('opentrons_96_filtertiprack_1000ul',
228-
3, '1000µl tiprack')]
237+
tips1000 = [
238+
robot.load_labware(TIPS1000_LW_DICT[TIPS1000], slot,
239+
'1000µl filter tiprack')
240+
for slot in ['3']
241+
]
229242

230243
# load pipette
231244
p1000 = robot.load_instrument(

calibration_check/stationB_protocol1_extraction_S3_calibration.py

+62-18
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,13 @@
3838
REAGENT_LABWARE = 'nest 12 reservoir plate'
3939
MAGPLATE_LABWARE = 'nest deep generic well plate'
4040
WASTE_LABWARE = 'nest 1 reservoir plate'
41+
TIPS300 = 'opentrons'
42+
TIPS1000 = 'opentrons'
4143
ELUTION_LABWARE = 'opentrons aluminum nest plate'
44+
REUSE_TIPS = "False"
4245
DISPENSE_BEADS = False
4346
LANGUAGE = 'esp'
44-
RESET_TIPCOUNT = False
47+
RESET_TIPCOUNT = True
4548

4649
# End Parameters to adapt the protocol
4750

@@ -59,6 +62,14 @@
5962
"""
6063
NUM_SAMPLES is the number of samples, must be an integer number
6164
65+
TIPS 300
66+
biotix
67+
opentrons
68+
69+
TIPS 1000
70+
biotix
71+
opentrons
72+
6273
REAGENT_LABWARE must be one of the following:
6374
nest 12 reservoir plate
6475
@@ -82,18 +93,31 @@
8293
# Calculated variables
8394
if MAGPLATE_LABWARE == 'nest deep generic well plate':
8495
MAGNET_HEIGHT = 22
96+
ASPIRATE_HEIGHT= 1.5
8597
elif MAGPLATE_LABWARE == 'vwr deep generic well plate':
86-
MAGNET_HEIGHT = 22
98+
MAGNET_HEIGHT = 23
99+
ASPIRATE_HEIGHT= 1.5
87100
elif MAGPLATE_LABWARE == 'ecogen deep generic well plate':
88101
MAGNET_HEIGHT = 21
102+
ASPIRATE_HEIGHT= 1.5
89103
else:
90104
MAGNET_HEIGHT = 22
105+
ASPIRATE_HEIGHT= 1.5
91106

92107
# End Parameters to adapt the protocol
93108
ACTION = "StationB-protocol1-extraction"
94109
PROTOCOL_ID = "0000-AA"
95110

96111
# Constants
112+
TIPS300_LW_DICT = {
113+
'biotix': 'biotix_96_tiprack_300ul_flat',
114+
'opentrons': 'opentrons_96_tiprack_300ul'
115+
}
116+
117+
TIPS1000_LW_DICT = {
118+
'biotix': 'biotix_96_tiprack_1000ul',
119+
'opentrons': 'opentrons_96_tiprack_1000ul'
120+
}
97121
REAGENT_LW_DICT = {
98122
'nest 12 reservoir plate': 'nest_12_reservoir_15ml'
99123
}
@@ -379,7 +403,7 @@ def run(ctx: protocol_api.ProtocolContext):
379403
following:\nnest 1 reservoir plate')
380404

381405
waste = robot.load_labware(
382-
WASTE_LW_DICT[WASTE_LABWARE], '11', 'waste reservoir').wells()[0].top(-10)
406+
WASTE_LW_DICT[WASTE_LABWARE], '11', 'waste reservoir').wells()[0].top(1)
383407

384408
## REAGENT RESERVOIR
385409
if REAGENT_LABWARE not in REAGENT_LW_DICT:
@@ -392,16 +416,33 @@ def run(ctx: protocol_api.ProtocolContext):
392416
## TIPS
393417
# using standard tip definition despite actually using filter tips
394418
# so that the tips can accommodate ~220µl per transfer for efficiency
395-
tips300 = [
419+
if REUSE_TIPS == True:
420+
tips300 = [
421+
robot.load_labware(
422+
TIPS300_LW_DICT[TIPS300], slot, '300µl filter tiprack')
423+
for slot in ['8', '6', '2', '3']
424+
]
425+
tipsreuse = [
426+
robot.load_labware(
427+
'opentrons_96_tiprack_300ul', slot, '200µl filter tiprack')
428+
for slot in ['7']
429+
]
430+
tips1000 = [
431+
robot.load_labware(TIPS1000_LW_DICT[TIPS1000], slot,
432+
'1000µl filter tiprack')
433+
for slot in ['5']
434+
]
435+
else:
436+
tips300 = [
396437
robot.load_labware(
397-
'opentrons_96_tiprack_300ul', slot, '200µl filter tiprack')
398-
for slot in ['2', '3', '5', '6', '9','4']
399-
]
400-
tips1000 = [
401-
robot.load_labware('opentrons_96_filtertiprack_1000ul', slot,
402-
'1000µl filter tiprack')
403-
for slot in ['8']
404-
]
438+
TIPS300_LW_DICT[TIPS300], slot, '300µl filter tiprack')
439+
for slot in ['2', '3', '5', '6', '9','4']
440+
]
441+
tips1000 = [
442+
robot.load_labware(TIPS1000_LW_DICT[TIPS1000], slot,
443+
'1000µl filter tiprack')
444+
for slot in ['8']
445+
]
405446

406447
# reagents and samples
407448
num_cols = math.ceil(NUM_SAMPLES/8)
@@ -436,10 +477,10 @@ def run(ctx: protocol_api.ProtocolContext):
436477
for position in [mag_samples_s[0], mag_samples_s[-1]]:
437478
p1000.move_to(position.top())
438479
robot.pause(f"Is it at the top of the well?")
439-
p1000.aspirate(800, position.bottom(1))
480+
p1000.aspirate(850, position.bottom(ASPIRATE_HEIGHT))
440481
p1000.move_to(position.top())
441482
robot.pause(f"Did it aspirate correctly?")
442-
p1000.dispense(800, waste)
483+
p1000.dispense(850, waste)
443484
p1000.move_to(waste)
444485
robot.pause(f"Did it dispense all the liquid?")
445486
drop(p1000)
@@ -458,19 +499,22 @@ def run(ctx: protocol_api.ProtocolContext):
458499
m300.dispense(200, mag_samples_m[0].bottom(5))
459500
m300.move_to(mag_samples_m[0].top())
460501
robot.pause(f"Did it dispense all the liquid?")
461-
m300.aspirate(200, mag_samples_m[0].bottom(1))
502+
magdeck.engage(height_from_base=MAGNET_HEIGHT)
503+
m300.aspirate(210, mag_samples_m[0].bottom(ASPIRATE_HEIGHT))
462504
m300.move_to(mag_samples_m[0].top())
463505
robot.pause(f"Did it aspirate correctly?")
464506
m300.move_to(mag_samples_m[-1].top())
465507
robot.pause(f"Is it at the top of the well?")
466-
m300.dispense(200, mag_samples_m[-1].bottom(5))
508+
magdeck.disengage()
509+
m300.dispense(210, mag_samples_m[-1].bottom(5))
467510
m300.move_to(mag_samples_m[-1].top())
511+
magdeck.engage(height_from_base=MAGNET_HEIGHT)
468512
robot.pause(f"Did it dispense all the liquid?")
469-
m300.aspirate(200, mag_samples_m[-1].bottom(1))
513+
m300.aspirate(210, mag_samples_m[-1].bottom(ASPIRATE_HEIGHT))
470514
m300.move_to(mag_samples_m[-1].top())
471515
robot.pause(f"Did it aspirate correctly?")
472516
# waste
473-
m300.dispense(200, waste)
517+
m300.dispense(210, waste)
474518
m300.move_to(waste)
475519
robot.pause(f"Did it dispense all the liquid?")
476520
drop(m300)

calibration_check/stationC_protocol1_pcr_S3_calibration.py

+15-2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
PCR_LABWARE = 'opentrons aluminum nest plate'
2626
ELUTION_LABWARE = 'opentrons aluminum nest plate'
2727
PREPARE_MASTERMIX = True
28+
TIPS300 = 'biotix'
2829
MM_TYPE = 'MM1'
2930
VOLUME_ELUTION = 7
3031
TRANSFER_MASTERMIX = True
@@ -48,6 +49,10 @@
4849
"""
4950
NUM_SAMPLES is the number of samples, must be an integer number
5051
52+
TIPS 300
53+
biotix
54+
opentrons
55+
5156
MM_LABWARE must be one of the following:
5257
opentrons plastic block
5358
pentrons aluminum block
@@ -97,6 +102,11 @@
97102
VOLUME_MMIX = 20
98103

99104
# Constants
105+
TIPS300_LW_DICT = {
106+
'biotix': 'biotix_96_tiprack_300ul_flat',
107+
'opentrons': 'opentrons_96_tiprack_300ul'
108+
}
109+
100110
MM_LW_DICT = {
101111
'opentrons plastic block': 'opentrons_24_tuberack_generic_2ml_screwcap',
102112
'opentrons aluminum block': 'opentrons_24_aluminumblock_generic_2ml_screwcap',
@@ -433,8 +443,11 @@ def run(ctx: protocol_api.ProtocolContext):
433443
robot.load_labware('opentrons_96_filtertiprack_20ul', slot)
434444
for slot in ['6', '9', '8', '7']
435445
]
436-
tips300 = [robot.load_labware('opentrons_96_filtertiprack_200ul', '3')]
437-
446+
tips300 = [
447+
robot.load_labware(
448+
TIPS300_LW_DICT[TIPS300], slot, '300µl filter tiprack')
449+
for slot in ['3']
450+
]
438451
# define pipettes
439452
p20 = robot.load_instrument('p20_single_gen2', 'right', tip_racks=tips20)
440453
p300 = robot.load_instrument('p300_single_gen2', 'left', tip_racks=tips300)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# OT-2 Magnetic Module V1 (magdeck) calibration and modifications
2+
3+
Magdecks V1 may have all their magnets in an unbalanced surface, making the magnets to be an uneven distance from the wells when engaging.
4+
5+
![magdeck_unbalanced.jpg](https://github.com/BU-ISCIII/opentrons_covid19/blob/develop/img/magdeck_unbalanced.jpg?raw=true)
6+
7+
You must make sure that all magnets are at the same high across its surface by using a level and following the next steps.
8+
9+
## Steps
10+
11+
1) Use a levelling tool to check where your magdeck suffers this issue or not.
12+
13+
2) The magdeck can be completely disassembled using only a screw driver, but you will probably not need to go so far in most cases. Here is a n example of all the pieces in the magedck, in case you want to tinker with it or you need to fix something inside.
14+
15+
![magdeck_to_pieces.jpg](https://github.com/BU-ISCIII/opentrons_covid19/blob/develop/img/magdeck_to_pieces.jpg?raw=true)
16+
17+
3) Usually you will only need to level this platform, on top of which is located the surface with the magnets.
18+
19+
![magdeck_calibration_platform.jpg](https://github.com/BU-ISCIII/opentrons_covid19/blob/develop/img/magdeck_calibration_platform.jpg?raw=true)
20+
21+
4) In order to find the right position of the platform, you do not even need to dismantle the magdeck. Just find these four screws on the side and loose them a little until the platform gets loose. Put it in a levelled position and carefully screw them back in position trying to keep the balance. You may need to leave one or two a little loose to achieve a decent calibration.
22+
23+
![magdeck_calibration_screws.jpg](https://github.com/BU-ISCIII/opentrons_covid19/blob/develop/img/magdeck_calibration_screws.jpg?raw=true)

0 commit comments

Comments
 (0)