Skip to content

Commit

Permalink
Merge pull request #5014 from Opentrons/019968
Browse files Browse the repository at this point in the history
019968
  • Loading branch information
ramifarawi authored Feb 2, 2024
2 parents 7730306 + 11d58f5 commit ec4e7ac
Show file tree
Hide file tree
Showing 8 changed files with 1,749 additions and 4 deletions.
11 changes: 7 additions & 4 deletions data/data/fields.csv
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ include_mastermix_step,1
include_moving_fresh_plate,1
include_multi,1
include_ntc,2
include_pause,1
include_pause,2
include_sample_step,1
include_standards_only,1
include_wash1,1
Expand Down Expand Up @@ -580,7 +580,9 @@ init_vol_buff1,1
init_vol_buff2,1
init_vol_buff3,1
init_vol_dil,2
init_vol_meth,1
init_vol_sds,2
init_vol_standard,1
init_vols_csv,1
initial_denaturation_cycles,1
initial_vol,1
Expand Down Expand Up @@ -910,7 +912,7 @@ num_rounds,1
num_row,1
num_rows_a,1
num_rows_b,1
num_samp,73
num_samp,74
num_samp_p1,1
num_samp_p2,1
num_samp_plate1,1
Expand Down Expand Up @@ -967,7 +969,7 @@ output_labware,1
overage_percent,12
p1000_flow_rate_asp,2
p1000_flow_rate_disp,2
p1000_mount,36
p1000_mount,37
p1000_rate,1
p1000_sample_height,1
p1000_single_mount,1
Expand Down Expand Up @@ -1003,7 +1005,7 @@ p2num,1
p300_gen,1
p300_mixing_height,1
p300_mnt,3
p300_mount,156
p300_mount,157
p300_mount_1,1
p300_multi_mount,7
p300_rate,1
Expand Down Expand Up @@ -1329,6 +1331,7 @@ shake_well,1
side_x_radius,1
single_channel_mount,1
single_channel_type,1
single_dilution,1
single_pip_info,1
size,1
size_select,1
Expand Down
768 changes: 768 additions & 0 deletions protoBuilds/019968/019968.ot2.apiv2.py.json

Large diffs are not rendered by default.

32 changes: 32 additions & 0 deletions protoBuilds/019968/README.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"author": "Opentrons",
"categories": {
"Broad Category": [
"Specific Category"
]
},
"deck-setup": "",
"description": "This protocol does stuff!",
"internal": "019968",
"labware": "\nWaters 48 Tube Rack with ThermoFisher 0.3 mL #700011047\nOpentrons 24 Well Aluminum Block with Generic 2 mL Screwcap\nOpentrons 96 Tip Rack 300 \u00b5L\nOpentrons 96 Tip Rack 1000 \u00b5L\nOpentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical\n",
"markdown": {
"author": "[Opentrons](https://opentrons.com/)\n\n\n",
"categories": "* Broad Category\n\t* Specific Category\n\n\n",
"deck-setup": "![deck](https://opentrons-protocol-library-website.s3.amazonaws.com/custom-README-images/019968/deck.png)\n\n\n",
"description": "This protocol does stuff!\n\n\n",
"internal": "019968\n",
"labware": "* Waters 48 Tube Rack with ThermoFisher 0.3 mL #700011047\n* [Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap](https://shop.opentrons.com/collections/hardware-modules/products/aluminum-block-set)\n* [Opentrons 96 Tip Rack 300 \u00b5L](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips)\n* [Opentrons 96 Tip Rack 1000 \u00b5L](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips)\n* [Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical](https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1)\n\n\n",
"notes": "If you have any questions about this protocol, please contact the Protocol Development Team by filling out the [Troubleshooting Survey](https://protocol-troubleshooting.paperform.co/).\n\n\n",
"pipettes": "* [Opentrons P300 Single Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/single-channel-electronic-pipette-p20/)\n* [Opentrons P1000 Single Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/single-channel-electronic-pipette-p20/)\n\n\n",
"process": "1. Input your protocol parameters above.\n2. Download your protocol and unzip if needed.\n3. Upload your custom labware to the [OT App](https://opentrons.com/ot-app) by navigating to `More` > `Custom Labware` > `Add Labware`, and selecting your labware files (.json extensions) if needed.\n4. Upload your protocol file (.py extension) to the [OT App](https://opentrons.com/ot-app) in the `Protocol` tab.\n5. Set up your deck according to the deck map.\n6. Calibrate your labware, tiprack and pipette using the OT App. For calibration tips, check out our [support articles](https://support.opentrons.com/en/collections/1559720-guide-for-getting-started-with-the-ot-2).\n7. Hit \"Run\".\n\n\n",
"protocol-steps": "1. Step 1...\n\n\n",
"reagent-setup": "![reagents](https://opentrons-protocol-library-website.s3.amazonaws.com/custom-README-images/019968/reagents.png)\n\n\n",
"title": "Methanol Dilution for LCMS Analysis"
},
"notes": "If you have any questions about this protocol, please contact the Protocol Development Team by filling out the Troubleshooting Survey.",
"pipettes": "\nOpentrons P300 Single Channel Electronic Pipette (GEN2)\nOpentrons P1000 Single Channel Electronic Pipette (GEN2)\n",
"process": "\nInput your protocol parameters above.\nDownload your protocol and unzip if needed.\nUpload your custom labware to the OT App by navigating to More > Custom Labware > Add Labware, and selecting your labware files (.json extensions) if needed.\nUpload your protocol file (.py extension) to the OT App in the Protocol tab.\nSet up your deck according to the deck map.\nCalibrate your labware, tiprack and pipette using the OT App. For calibration tips, check out our support articles.\nHit \"Run\".\n",
"protocol-steps": "\nStep 1...\n",
"reagent-setup": "",
"title": "Methanol Dilution for LCMS Analysis"
}
20 changes: 20 additions & 0 deletions protoBuilds/019968/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"files": {
"OT 1 protocol": [],
"OT 2 protocol": [
"019968.ot2.apiv2.py"
],
"description": [
"README.md"
]
},
"flags": {
"embedded-app": false,
"feature": false,
"hide-from-search": false,
"skip-tests": false
},
"path": "protocols/019968",
"slug": "019968",
"status": "ok"
}
216 changes: 216 additions & 0 deletions protocols/019968/019968.ot2.apiv2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
# flake8: noqa

import math

metadata = {
'protocolName': 'Methanol Dilution for LCMS Analysis',
'author': 'Rami Farawi <[email protected]>',
'source': 'Custom Protocol Request',
'apiLevel': '2.13'
}


def run(ctx):

[num_samp, include_pause, single_dilution,
init_vol_meth, init_vol_standard,
p300_mount, p1000_mount] = get_values( # noqa: F821
"num_samp", "include_pause", "single_dilution",
"init_vol_meth", "init_vol_standard", "p300_mount", "p1000_mount")

# num_samp = 30
# p300_mount = 'left'
# p1000_mount = 'right'
# init_vol_standard = 13
# init_vol_meth = 45
# include_pause = True
# single_dilution = False

# labware
if single_dilution:
waters_racks = [
ctx.load_labware('waters_48_tuberack_300ul', # change this
slot) for slot in [1, 2]]

aluminum_racks = [
ctx.load_labware('opentrons_24_aluminumblock_generic_2ml_screwcap',
slot) for slot in [4, 5, 7, 8]]

tuberack = ctx.load_labware('opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical', 11)

tip300 = [ctx.load_labware('opentrons_96_tiprack_300ul', slot)
for slot in [3, 6]]
tip1000 = [ctx.load_labware('opentrons_96_tiprack_1000ul', slot)
for slot in [9]]

else:
waters_racks = [
ctx.load_labware('opentrons_24_aluminumblock_generic_2ml_screwcap',
slot) for slot in [1, 2]]

aluminum_racks = [
ctx.load_labware('opentrons_24_aluminumblock_generic_2ml_screwcap',
slot) for slot in [4, 5, 7, 8]]

tuberack = ctx.load_labware('opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical', 11)

tip300 = [ctx.load_labware('opentrons_96_tiprack_300ul', slot)
for slot in [3, 6]]
tip1000 = [ctx.load_labware('opentrons_96_tiprack_1000ul', slot)
for slot in [9]]

# pipettes
p300 = ctx.load_instrument('p300_single_gen2', p300_mount,
tip_racks=tip300)
p1000 = ctx.load_instrument('p1000_single_gen2', p1000_mount,
tip_racks=tip1000)

# liquid height tracking
v_naught_standard = init_vol_standard*1000
v_naught_meth = init_vol_meth*1000

radius_standard = tuberack.rows()[0][0].diameter/2
radius_meth = tuberack.rows()[0][2].diameter/2

h_naught_standard = 0.85*v_naught_standard/(math.pi*radius_standard**2)
h_naught_meth = 0.85*v_naught_meth/(math.pi*radius_meth**2)

h_standard = h_naught_standard
h_meth = h_naught_meth

def adjust_height(vol, standard_or_meth):
nonlocal h_standard
nonlocal h_meth

if standard_or_meth == 'standard':
radius = radius_standard
elif standard_or_meth == 'meth':
radius = radius_meth

dh = (vol/(math.pi*radius**2))*1.33
if standard_or_meth == 'standard':
h_standard -= dh
elif standard_or_meth == 'meth':
h_meth -= dh

if h_standard < 12:
h_standard = 1
if h_meth < 12:
h_meth = 1

# mapping
methanol = tuberack['A3']
standard = tuberack['A1']
empty_sample_tubes = [tube
for rack in aluminum_racks[:2]
for row in rack.rows() for tube in row][:num_samp]
sample_tubes = [tube
for rack in aluminum_racks[2:]
for row in rack.rows() for tube in row][:num_samp]

final_tubes = [tube
for rack in waters_racks
for row in rack.rows() for tube in row][:num_samp]

# protocol
if single_dilution:
ctx.comment('\n---------------ADDING METHANOL----------------\n\n')
p1000.pick_up_tip()
p1000.mix(1, 900, methanol.bottom(z=h_meth-5))
for tube in empty_sample_tubes:
p1000.aspirate(750, methanol.bottom(z=h_meth))
p1000.dispense(750, tube.bottom(z=10))
p1000.move_to(tube.top(z=-3))
ctx.delay(seconds=2.5)
p1000.blow_out()
adjust_height(750, 'meth')
p1000.drop_tip()
ctx.comment('\n\n')

ctx.comment('\n---------------ADDING STANDARD----------------\n\n')
p300.pick_up_tip()
p300.mix(1, 250, standard.bottom(z=h_standard-5))
for tube in empty_sample_tubes:
p300.aspirate(150, standard.bottom(z=h_standard))
p300.dispense(150, tube.top())
ctx.delay(seconds=2.5)
p300.blow_out()
adjust_height(150, 'standard')
p300.drop_tip()
ctx.comment('\n\n')

ctx.comment('\n---------------ADDING SAMPLE----------------\n\n')
for s, d in zip(sample_tubes, empty_sample_tubes):
p300.pick_up_tip()
p300.aspirate(100, s)
p300.dispense(100, d)
p300.drop_tip()

if include_pause:
ctx.pause("Please cap tubes, then select Resume in the app.")

ctx.comment('\n---------------ADDING SAMPLE----------------\n\n')
for s, d in zip(empty_sample_tubes, final_tubes):
p300.pick_up_tip()
p300.mix(2, 250, s)
p300.aspirate(200, s)
p300.dispense(200, d)
p300.drop_tip()

else:
ctx.comment('\n---------------ADDING METHANOL----------------\n\n')
p1000.pick_up_tip()
p1000.mix(1, 900, methanol.bottom(z=h_meth-5))
for tube in empty_sample_tubes:
p1000.aspirate(900, methanol.bottom(z=h_meth))
p1000.dispense(900, tube.bottom(z=10))
p1000.move_to(tube.top(z=-3))
ctx.delay(seconds=2.5)
p1000.blow_out()
adjust_height(900, 'meth')
p1000.drop_tip()
ctx.comment('\n\n')

ctx.comment('\n---------------ADDING SAMPLE----------------\n\n')
for s, d in zip(sample_tubes, empty_sample_tubes):
p300.pick_up_tip()
p300.aspirate(100, s)
p300.dispense(100, d)
p300.mix(3, 200, d)
p300.drop_tip()

if include_pause:
ctx.pause("Please cap tubes, then select Resume in the app.")

ctx.comment('\n---------------ADDING METHANOL----------------\n\n')
p1000.pick_up_tip()
p1000.mix(1, 900, methanol.bottom(z=h_meth-5))
for tube in final_tubes:
p1000.aspirate(750, methanol.bottom(z=h_meth))
p1000.dispense(750, tube.bottom(z=10))
p1000.move_to(tube.top(z=-3))
ctx.delay(seconds=2.5)
p1000.blow_out()
adjust_height(750, 'meth')
p1000.drop_tip()
ctx.comment('\n\n')

ctx.comment('\n---------------ADDING STANDARD----------------\n\n')
p300.pick_up_tip()
p300.mix(1, 250, standard.bottom(z=h_standard-5))
for tube in final_tubes:
p300.aspirate(150, standard.bottom(z=h_standard))
p300.dispense(150, tube.top())
ctx.delay(seconds=2.5)
p300.blow_out()
adjust_height(150, 'standard')
p300.drop_tip()
ctx.comment('\n\n')

ctx.comment('\n---------------ADDING SAMPLE----------------\n\n')
for s, d in zip(empty_sample_tubes, final_tubes):
p300.pick_up_tip()
p300.mix(2, 250, s)
p300.aspirate(100, s)
p300.dispense(100, d)
p300.drop_tip()
52 changes: 52 additions & 0 deletions protocols/019968/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Methanol Dilution for LCMS Analysis


### Author
[Opentrons](https://opentrons.com/)


## Categories
* Sample Prep
* Plate Filling


## Description
This protocol either perfors single, or double dilution of sample with methanol and standard for LCMS analysis. For more details, please see below.


### Labware
* Waters 48 Tube Rack with ThermoFisher 0.3 mL #700011047
* [Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap](https://shop.opentrons.com/collections/hardware-modules/products/aluminum-block-set)
* [Opentrons 96 Tip Rack 300 µL](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips)
* [Opentrons 96 Tip Rack 1000 µL](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips)
* [Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical](https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1)


### Pipettes
* [Opentrons P300 Single Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/single-channel-electronic-pipette-p20/)
* [Opentrons P1000 Single Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/single-channel-electronic-pipette-p20/)


### Deck Setup

* This is the single dilution deck setup. For the double dilution workflow, replace the waters 48 racks on slots 1 and 2 with Opentrons 24 tuberack aluminum as seen in slots 4 and 5.
![deck](https://opentrons-protocol-library-website.s3.amazonaws.com/custom-README-images/019968/deck.png)



### Process
1. Input your protocol parameters above.
2. Download your protocol and unzip if needed.
3. Upload your custom labware to the [OT App](https://opentrons.com/ot-app) by navigating to `More` > `Custom Labware` > `Add Labware`, and selecting your labware files (.json extensions) if needed.
4. Upload your protocol file (.py extension) to the [OT App](https://opentrons.com/ot-app) in the `Protocol` tab.
5. Set up your deck according to the deck map.
6. Calibrate your labware, tiprack and pipette using the OT App. For calibration tips, check out our [support articles](https://support.opentrons.com/en/collections/1559720-guide-for-getting-started-with-the-ot-2).
7. Hit "Run".


### Additional Notes
If you have any questions about this protocol, please contact the Protocol Development Team by filling out the [Troubleshooting Survey](https://protocol-troubleshooting.paperform.co/).


###### Internal
019968
Loading

0 comments on commit ec4e7ac

Please sign in to comment.