Skip to content

Commit

Permalink
Merge branch 'release/1.10'
Browse files Browse the repository at this point in the history
  • Loading branch information
saramonzon committed Jun 18, 2020
2 parents 73b7f4e + 61c10ef commit f2b1f2e
Show file tree
Hide file tree
Showing 68 changed files with 3,265 additions and 53 deletions.
16 changes: 16 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
## Version 1.10

New features:
- New labware configuration: Biotix tips for 300 and 1000 configured in all protocols.
- New labware configuration: axygen pcr plate configured in required protocols.

Protocol modifications:
- Waste disposal height modified, now the liquid waste is dispensed above the reservoir.
- Aspiration in washes is modified from 220 to 210 ul to avoid the liquid touching the tip filters.
- Change magnet height to 23 mm when using vwr deep well plates.
- Removed reuse tips for elution steps in extraction protocol.
- Now remove trash pause is prompted before the incubation pause.

Documentation:
- Added calibration docs. Protocol, multichannel pipette and magdeck calibration.

## Version 1.9

New features:
Expand Down
16 changes: 14 additions & 2 deletions calibration_check/stationA_protocol1_buffer_S3_calibration.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
BUFFER_LABWARE = 'opentrons plastic 30ml tubes'
DESTINATION_LABWARE = 'opentrons plastic 2ml tubes'
DEST_TUBE = '2ml tubes'
TIPS1000 = 'biotix'
VOLUME_BUFFER = 300
LANGUAGE = 'esp'
RESET_TIPCOUNT = False
Expand All @@ -43,6 +44,10 @@
"""
NUM_SAMPLES is the number of samples, must be an integer number
TIPS 1000
biotix
opentrons
BUFFER_LABWARE must be one of the following:
opentrons plastic 50ml tubes
opentrons plastic 30ml tubes
Expand All @@ -56,6 +61,10 @@


# Constants
TIPS1000_LW_DICT = {
'biotix': 'biotix_96_tiprack_1000ul',
'opentrons': 'opentrons_96_tiprack_1000ul'
}
BUFFER_LW_DICT = {
'opentrons plastic 50ml tubes': 'opentrons_6_tuberack_falcon_50ml_conical',
'opentrons plastic 30ml tubes': 'opentrons_6_tuberack_generic_30ml_conical'
Expand Down Expand Up @@ -221,8 +230,11 @@ def run(ctx: protocol_api.ProtocolContext):
reset_tipcount()

# define tips
tips1000 = [robot.load_labware('opentrons_96_filtertiprack_1000ul',
3, '1000µl tiprack')]
tips1000 = [
robot.load_labware(TIPS1000_LW_DICT[TIPS1000], slot,
'1000µl filter tiprack')
for slot in ['3']
]

# define pipettes
p1000 = robot.load_instrument('p1000_single_gen2', 'left', tip_racks=tips1000)
Expand Down
17 changes: 15 additions & 2 deletions calibration_check/stationA_protocol2_beads_S3_calibration.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
BEADS_LABWARE = 'opentrons plastic 30ml tubes'
PLATE_LABWARE = 'nest deep generic well plate'
VOLUME_BEADS = 410
TIPS1000 = 'biotix'
DILUTE_BEADS = True
LANGUAGE = 'esp'
RESET_TIPCOUNT = False
Expand All @@ -42,6 +43,10 @@
"""
NUM_SAMPLES is the number of samples, must be an integer number
TIPS 1000
biotix
opentrons
BEADS_LABWARE must be one of the following:
opentrons plastic 50 ml tubes
opentrons plastic 30ml tubes
Expand All @@ -52,6 +57,11 @@
vwr deep generic well plate
"""

TIPS1000_LW_DICT = {
'biotix': 'biotix_96_tiprack_1000ul',
'opentrons': 'opentrons_96_tiprack_1000ul'
}

BD_LW_DICT = {
'opentrons plastic 50 ml tubes': 'opentrons_6_tuberack_falcon_50ml_conical',
'opentrons plastic 30ml tubes': 'opentrons_6_tuberack_generic_30ml_conical'
Expand Down Expand Up @@ -241,8 +251,11 @@ def run(ctx: protocol_api.ProtocolContext):
reset_tipcount()

# load tips
tips1000 = [robot.load_labware('opentrons_96_filtertiprack_1000ul',
3, '1000µl tiprack')]
tips1000 = [
robot.load_labware(TIPS1000_LW_DICT[TIPS1000], slot,
'1000µl filter tiprack')
for slot in ['3']
]

# load pipette
p1000 = robot.load_instrument(
Expand Down
17 changes: 15 additions & 2 deletions calibration_check/stationA_protocol3_lysates_S3_calibration.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
NUM_SAMPLES = 96
LYSATE_LABWARE = 'opentrons plastic 2ml tubes'
PLATE_LABWARE = 'nest deep generic well plate'
TIPS1000 = 'biotix'
VOLUME_LYSATE = 400
BEADS = False
LANGUAGE = 'esp'
Expand All @@ -47,6 +48,10 @@
"""
NUM_SAMPLES is the number of samples, must be an integer number
TIPS 1000
biotix
opentrons
LYSATE_LABWARE must be one of the following:
opentrons plastic 2ml tubes
Expand All @@ -56,6 +61,11 @@
vwr deep generic well plate
"""

TIPS1000_LW_DICT = {
'biotix': 'biotix_96_tiprack_1000ul',
'opentrons': 'opentrons_96_tiprack_1000ul'
}

LY_LW_DICT = {
'opentrons plastic 2ml tubes': 'opentrons_24_tuberack_generic_2ml_screwcap'
}
Expand Down Expand Up @@ -224,8 +234,11 @@ def run(ctx: protocol_api.ProtocolContext):
reset_tipcount()

# load tips
tips1000 = [robot.load_labware('opentrons_96_filtertiprack_1000ul',
3, '1000µl tiprack')]
tips1000 = [
robot.load_labware(TIPS1000_LW_DICT[TIPS1000], slot,
'1000µl filter tiprack')
for slot in ['3']
]

# load pipette
p1000 = robot.load_instrument(
Expand Down
80 changes: 62 additions & 18 deletions calibration_check/stationB_protocol1_extraction_S3_calibration.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,13 @@
REAGENT_LABWARE = 'nest 12 reservoir plate'
MAGPLATE_LABWARE = 'nest deep generic well plate'
WASTE_LABWARE = 'nest 1 reservoir plate'
TIPS300 = 'opentrons'
TIPS1000 = 'opentrons'
ELUTION_LABWARE = 'opentrons aluminum nest plate'
REUSE_TIPS = "False"
DISPENSE_BEADS = False
LANGUAGE = 'esp'
RESET_TIPCOUNT = False
RESET_TIPCOUNT = True

# End Parameters to adapt the protocol

Expand All @@ -59,6 +62,14 @@
"""
NUM_SAMPLES is the number of samples, must be an integer number
TIPS 300
biotix
opentrons
TIPS 1000
biotix
opentrons
REAGENT_LABWARE must be one of the following:
nest 12 reservoir plate
Expand All @@ -82,18 +93,31 @@
# Calculated variables
if MAGPLATE_LABWARE == 'nest deep generic well plate':
MAGNET_HEIGHT = 22
ASPIRATE_HEIGHT= 1.5
elif MAGPLATE_LABWARE == 'vwr deep generic well plate':
MAGNET_HEIGHT = 22
MAGNET_HEIGHT = 23
ASPIRATE_HEIGHT= 1.5
elif MAGPLATE_LABWARE == 'ecogen deep generic well plate':
MAGNET_HEIGHT = 21
ASPIRATE_HEIGHT= 1.5
else:
MAGNET_HEIGHT = 22
ASPIRATE_HEIGHT= 1.5

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

# Constants
TIPS300_LW_DICT = {
'biotix': 'biotix_96_tiprack_300ul_flat',
'opentrons': 'opentrons_96_tiprack_300ul'
}

TIPS1000_LW_DICT = {
'biotix': 'biotix_96_tiprack_1000ul',
'opentrons': 'opentrons_96_tiprack_1000ul'
}
REAGENT_LW_DICT = {
'nest 12 reservoir plate': 'nest_12_reservoir_15ml'
}
Expand Down Expand Up @@ -379,7 +403,7 @@ def run(ctx: protocol_api.ProtocolContext):
following:\nnest 1 reservoir plate')

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

## REAGENT RESERVOIR
if REAGENT_LABWARE not in REAGENT_LW_DICT:
Expand All @@ -392,16 +416,33 @@ def run(ctx: protocol_api.ProtocolContext):
## TIPS
# using standard tip definition despite actually using filter tips
# so that the tips can accommodate ~220µl per transfer for efficiency
tips300 = [
if REUSE_TIPS == True:
tips300 = [
robot.load_labware(
TIPS300_LW_DICT[TIPS300], slot, '300µl filter tiprack')
for slot in ['8', '6', '2', '3']
]
tipsreuse = [
robot.load_labware(
'opentrons_96_tiprack_300ul', slot, '200µl filter tiprack')
for slot in ['7']
]
tips1000 = [
robot.load_labware(TIPS1000_LW_DICT[TIPS1000], slot,
'1000µl filter tiprack')
for slot in ['5']
]
else:
tips300 = [
robot.load_labware(
'opentrons_96_tiprack_300ul', slot, '200µl filter tiprack')
for slot in ['2', '3', '5', '6', '9','4']
]
tips1000 = [
robot.load_labware('opentrons_96_filtertiprack_1000ul', slot,
'1000µl filter tiprack')
for slot in ['8']
]
TIPS300_LW_DICT[TIPS300], slot, '300µl filter tiprack')
for slot in ['2', '3', '5', '6', '9','4']
]
tips1000 = [
robot.load_labware(TIPS1000_LW_DICT[TIPS1000], slot,
'1000µl filter tiprack')
for slot in ['8']
]

# reagents and samples
num_cols = math.ceil(NUM_SAMPLES/8)
Expand Down Expand Up @@ -436,10 +477,10 @@ def run(ctx: protocol_api.ProtocolContext):
for position in [mag_samples_s[0], mag_samples_s[-1]]:
p1000.move_to(position.top())
robot.pause(f"Is it at the top of the well?")
p1000.aspirate(800, position.bottom(1))
p1000.aspirate(850, position.bottom(ASPIRATE_HEIGHT))
p1000.move_to(position.top())
robot.pause(f"Did it aspirate correctly?")
p1000.dispense(800, waste)
p1000.dispense(850, waste)
p1000.move_to(waste)
robot.pause(f"Did it dispense all the liquid?")
drop(p1000)
Expand All @@ -458,19 +499,22 @@ def run(ctx: protocol_api.ProtocolContext):
m300.dispense(200, mag_samples_m[0].bottom(5))
m300.move_to(mag_samples_m[0].top())
robot.pause(f"Did it dispense all the liquid?")
m300.aspirate(200, mag_samples_m[0].bottom(1))
magdeck.engage(height_from_base=MAGNET_HEIGHT)
m300.aspirate(210, mag_samples_m[0].bottom(ASPIRATE_HEIGHT))
m300.move_to(mag_samples_m[0].top())
robot.pause(f"Did it aspirate correctly?")
m300.move_to(mag_samples_m[-1].top())
robot.pause(f"Is it at the top of the well?")
m300.dispense(200, mag_samples_m[-1].bottom(5))
magdeck.disengage()
m300.dispense(210, mag_samples_m[-1].bottom(5))
m300.move_to(mag_samples_m[-1].top())
magdeck.engage(height_from_base=MAGNET_HEIGHT)
robot.pause(f"Did it dispense all the liquid?")
m300.aspirate(200, mag_samples_m[-1].bottom(1))
m300.aspirate(210, mag_samples_m[-1].bottom(ASPIRATE_HEIGHT))
m300.move_to(mag_samples_m[-1].top())
robot.pause(f"Did it aspirate correctly?")
# waste
m300.dispense(200, waste)
m300.dispense(210, waste)
m300.move_to(waste)
robot.pause(f"Did it dispense all the liquid?")
drop(m300)
Expand Down
17 changes: 15 additions & 2 deletions calibration_check/stationC_protocol1_pcr_S3_calibration.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
PCR_LABWARE = 'opentrons aluminum nest plate'
ELUTION_LABWARE = 'opentrons aluminum nest plate'
PREPARE_MASTERMIX = True
TIPS300 = 'biotix'
MM_TYPE = 'MM1'
VOLUME_ELUTION = 7
TRANSFER_MASTERMIX = True
Expand All @@ -48,6 +49,10 @@
"""
NUM_SAMPLES is the number of samples, must be an integer number
TIPS 300
biotix
opentrons
MM_LABWARE must be one of the following:
opentrons plastic block
pentrons aluminum block
Expand Down Expand Up @@ -97,6 +102,11 @@
VOLUME_MMIX = 20

# Constants
TIPS300_LW_DICT = {
'biotix': 'biotix_96_tiprack_300ul_flat',
'opentrons': 'opentrons_96_tiprack_300ul'
}

MM_LW_DICT = {
'opentrons plastic block': 'opentrons_24_tuberack_generic_2ml_screwcap',
'opentrons aluminum block': 'opentrons_24_aluminumblock_generic_2ml_screwcap',
Expand Down Expand Up @@ -433,8 +443,11 @@ def run(ctx: protocol_api.ProtocolContext):
robot.load_labware('opentrons_96_filtertiprack_20ul', slot)
for slot in ['6', '9', '8', '7']
]
tips300 = [robot.load_labware('opentrons_96_filtertiprack_200ul', '3')]

tips300 = [
robot.load_labware(
TIPS300_LW_DICT[TIPS300], slot, '300µl filter tiprack')
for slot in ['3']
]
# define pipettes
p20 = robot.load_instrument('p20_single_gen2', 'right', tip_racks=tips20)
p300 = robot.load_instrument('p300_single_gen2', 'left', tip_racks=tips300)
Expand Down
23 changes: 23 additions & 0 deletions doc/S3/05_magdeck_v1_calibration_and_modifications.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# OT-2 Magnetic Module V1 (magdeck) calibration and modifications

Magdecks V1 may have all their magnets in an unbalanced surface, making the magnets to be an uneven distance from the wells when engaging.

![magdeck_unbalanced.jpg](https://github.com/BU-ISCIII/opentrons_covid19/blob/develop/img/magdeck_unbalanced.jpg?raw=true)

You must make sure that all magnets are at the same high across its surface by using a level and following the next steps.

## Steps

1) Use a levelling tool to check where your magdeck suffers this issue or not.

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.

![magdeck_to_pieces.jpg](https://github.com/BU-ISCIII/opentrons_covid19/blob/develop/img/magdeck_to_pieces.jpg?raw=true)

3) Usually you will only need to level this platform, on top of which is located the surface with the magnets.

![magdeck_calibration_platform.jpg](https://github.com/BU-ISCIII/opentrons_covid19/blob/develop/img/magdeck_calibration_platform.jpg?raw=true)

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.

![magdeck_calibration_screws.jpg](https://github.com/BU-ISCIII/opentrons_covid19/blob/develop/img/magdeck_calibration_screws.jpg?raw=true)
Loading

0 comments on commit f2b1f2e

Please sign in to comment.