Skip to content

Commit

Permalink
Merge pull request #5026 from Opentrons/spotsee-fix
Browse files Browse the repository at this point in the history
fix(spotsee): add pipette option
  • Loading branch information
ramifarawi authored Feb 12, 2024
2 parents a486359 + 7a6c783 commit 9561438
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 25 deletions.
2 changes: 1 addition & 1 deletion data/data/fields.csv
Original file line number Diff line number Diff line change
Expand Up @@ -1005,7 +1005,7 @@ p2num,1
p300_gen,1
p300_mixing_height,1
p300_mnt,3
p300_mount,157
p300_mount,158
p300_mount_1,1
p300_multi_mount,7
p300_rate,1
Expand Down
20 changes: 8 additions & 12 deletions protoBuilds/spotsee/README.json
Original file line number Diff line number Diff line change
@@ -1,32 +1,28 @@
{
"author": "Opentrons",
"categories": {
"Broad Category": [
"Specific Category"
"Sample Prep": [
"Plate Filling"
]
},
"deck-setup": "",
"description": "This protocol does stuff!",
"description": "This protocol will add a specified amount of liquid to determined wells in a custom 80 well plate. If the volume is less than 20, the pipette selected will be a P20 single-channel pipette, otherwise, if the volume is greater than 20ul, then the pipette selected will be a P300 single-channel pipette. Please match the correct pipette with the tips loaded. ",
"internal": "spotsee",
"labware": "\n80 Well Plate\nNEST 1 Well Reservoir 195 mL #360103\nOpentrons 96 Filter Tip Rack 20 \u00b5L\n",
"labware": "\nCustom 80 Well Plate\nNEST 1 Well Reservoir 195 mL #360103\nOpentrons 96 Filter Tip Rack 20 \u00b5L\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/spotsee/deck.png)\n\n\n",
"description": "This protocol does stuff!\n\n\n",
"categories": "* Sample Prep\n\t* Plate Filling\n\n\n",
"deck-setup": "![deck](https://opentrons-protocol-library-website.s3.amazonaws.com/custom-README-images/spotsee/Screen+Shot+2024-02-09+at+1.06.24+PM.png)\n\n\n\n",
"description": "This protocol will add a specified amount of liquid to determined wells in a custom 80 well plate. If the volume is less than 20, the pipette selected will be a P20 single-channel pipette, otherwise, if the volume is greater than 20ul, then the pipette selected will be a P300 single-channel pipette. Please match the correct pipette with the tips loaded. \n\n\n",
"internal": "spotsee\n",
"labware": "* 80 Well Plate\n* [NEST 1 Well Reservoir 195 mL #360103](http://www.cell-nest.com/page94?_l=en&product_id=102)\n* Opentrons 96 Filter Tip Rack 20 \u00b5L\n\n\n",
"labware": "* Custom 80 Well Plate\n* [NEST 1 Well Reservoir 195 mL #360103](http://www.cell-nest.com/page94?_l=en&product_id=102)\n* Opentrons 96 Filter Tip Rack 20 \u00b5L\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 P20 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/spotsee/reagents.png)\n\n\n",
"title": "Spotsee Well Distribution Protocol"
},
"notes": "If you have any questions about this protocol, please contact the Protocol Development Team by filling out the Troubleshooting Survey.",
"pipettes": "\nOpentrons P20 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": "Spotsee Well Distribution Protocol"
}
21 changes: 20 additions & 1 deletion protoBuilds/spotsee/spotsee.ot2.apiv2.py.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"content": "metadata = {\n 'protocolName': 'Spotsee Well Distribution Protocol',\n 'author': 'Rami Farawi <[email protected]>',\n 'source': 'Custom Protocol Request',\n 'apiLevel': '2.13'\n}\n\n\ndef run(ctx):\n\n [vol, p20_mount] = get_values( # noqa: F821\n \"vol\", \"p20_mount\")\n\n # p20_mount = 'left'\n # vol = 15\n\n # labware\n reservoir = ctx.load_labware('nest_1_reservoir_195ml', 10)\n plate = ctx.load_labware('80_well_plate', 1)\n tips = [ctx.load_labware('opentrons_96_filtertiprack_20ul', slot)\n for slot in [11]]\n\n red_wells = [\n 'J1', 'I1', 'H1', 'G1', 'F1', 'E1', 'D1', 'C1', 'B1', 'A1',\n 'A2', 'B2', 'C2', 'D2', 'E2', 'F2', 'G2', 'H2', 'I2', 'J2',\n 'J3', 'I3', 'H3', 'G3', 'F3', 'E3', 'D3', 'C3', 'B3', 'A3',\n 'A4', 'B4', 'C4', 'D4', 'E4', 'F4', 'G4', 'H4', 'I4', 'J4',\n 'J5', 'I5', 'H5', 'G5', 'F5', 'E5', 'D5', 'C5', 'B5', 'A5',\n 'A6', 'B6', 'C6', 'D6', 'E6', 'F6', 'G6', 'H6', 'I6', 'J6',\n 'J7', 'I7', 'H7', 'G7', 'F7', 'E7', 'D7', 'C7', 'B7', 'A7',\n 'A8', 'B8', 'C8', 'D8', 'E8', 'F8', 'G8', 'H8', 'I8', 'J8'\n ]\n\n # pipettes\n p20 = ctx.load_instrument('p20_single_gen2', p20_mount, tip_racks=tips)\n\n # mapping\n buffer = reservoir.wells()[0]\n\n # protocol\n ctx.comment('\\n---------------ADDING BUFFER TO PLATE----------------\\n\\n')\n\n p20.pick_up_tip()\n for well in red_wells:\n p20.aspirate(vol, buffer)\n p20.dispense(vol, plate.wells_by_name()[well])\n p20.drop_tip()\n",
"content": "metadata = {\n 'protocolName': 'Spotsee Well Distribution Protocol',\n 'author': 'Rami Farawi <[email protected]>',\n 'source': 'Custom Protocol Request',\n 'apiLevel': '2.13'\n}\n\n\ndef run(ctx):\n\n [vol, p20_mount, p300_mount] = get_values( # noqa: F821\n \"vol\", \"p20_mount\", \"p300_mount\")\n\n # p20_mount = 'left'\n # vol = 25\n # p300_mount = 'right'\n\n # labware\n\n reservoir = ctx.load_labware('nest_1_reservoir_195ml', 10)\n plate = ctx.load_labware('80_well_plate', 1)\n tips = [ctx.load_labware('opentrons_96_filtertiprack_20ul' if vol < 20 else 'opentrons_96_tiprack_300ul', slot) # noqa: E501\n for slot in [11]]\n\n red_wells = [\n 'J1', 'I1', 'H1', 'G1', 'F1', 'E1', 'D1', 'C1', 'B1', 'A1',\n 'A2', 'B2', 'C2', 'D2', 'E2', 'F2', 'G2', 'H2', 'I2', 'J2',\n 'J3', 'I3', 'H3', 'G3', 'F3', 'E3', 'D3', 'C3', 'B3', 'A3',\n 'A4', 'B4', 'C4', 'D4', 'E4', 'F4', 'G4', 'H4', 'I4', 'J4',\n 'J5', 'I5', 'H5', 'G5', 'F5', 'E5', 'D5', 'C5', 'B5', 'A5',\n 'A6', 'B6', 'C6', 'D6', 'E6', 'F6', 'G6', 'H6', 'I6', 'J6',\n 'J7', 'I7', 'H7', 'G7', 'F7', 'E7', 'D7', 'C7', 'B7', 'A7',\n 'A8', 'B8', 'C8', 'D8', 'E8', 'F8', 'G8', 'H8', 'I8', 'J8'\n ]\n\n # pipettes\n p20 = ctx.load_instrument('p20_single_gen2', p20_mount, tip_racks=tips)\n p300 = ctx.load_instrument('p300_single_gen2', p300_mount, tip_racks=tips)\n pip = p20 if vol < 20 else p300\n\n # mapping\n buffer = reservoir.wells()[0]\n\n # protocol\n ctx.comment('\\n---------------ADDING BUFFER TO PLATE----------------\\n\\n')\n num_asp = pip.max_volume // vol\n chunks = [red_wells[i:i+num_asp] for i in range(0, len(red_wells),\n num_asp)]\n\n pip.pick_up_tip()\n for chunk in chunks:\n pip.aspirate(num_asp*vol, buffer)\n for well in chunk:\n pip.dispense(vol, plate.wells_by_name()[well])\n pip.drop_tip()\n",
"custom_labware_defs": [
{
"brand": {
Expand Down Expand Up @@ -1057,12 +1057,31 @@
}
],
"type": "dropDown"
},
{
"label": "P300 Single-Channel Mount",
"name": "p300_mount",
"options": [
{
"label": "Right",
"value": "right"
},
{
"label": "Left",
"value": "left"
}
],
"type": "dropDown"
}
],
"instruments": [
{
"mount": "left",
"name": "p20_single_gen2"
},
{
"mount": "right",
"name": "p300_single_gen2"
}
],
"labware": [
Expand Down
2 changes: 1 addition & 1 deletion protocols/spotsee/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@


## Description
This protocol will add a specified amount of liquid to determined wells in a custom 80 well plate.
This protocol will add a specified amount of liquid to determined wells in a custom 80 well plate. If the volume is less than 20, the pipette selected will be a P20 single-channel pipette, otherwise, if the volume is greater than 20ul, then the pipette selected will be a P300 single-channel pipette. Please match the correct pipette with the tips loaded.


### Labware
Expand Down
9 changes: 9 additions & 0 deletions protocols/spotsee/fields.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,14 @@
{"label": "Left", "value": "left"},
{"label": "Right", "value": "right"}
]
},
{
"type": "dropDown",
"label": "P300 Single-Channel Mount",
"name": "p300_mount",
"options": [
{"label": "Right", "value": "right"},
{"label": "Left", "value": "left"}
]
}
]
28 changes: 18 additions & 10 deletions protocols/spotsee/spotsee.ot2.apiv2.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,18 @@

def run(ctx):

[vol, p20_mount] = get_values( # noqa: F821
"vol", "p20_mount")
[vol, p20_mount, p300_mount] = get_values( # noqa: F821
"vol", "p20_mount", "p300_mount")

# p20_mount = 'left'
# vol = 15
# vol = 25
# p300_mount = 'right'

# labware

reservoir = ctx.load_labware('nest_1_reservoir_195ml', 10)
plate = ctx.load_labware('80_well_plate', 1)
tips = [ctx.load_labware('opentrons_96_filtertiprack_20ul', slot)
tips = [ctx.load_labware('opentrons_96_filtertiprack_20ul' if vol < 20 else 'opentrons_96_tiprack_300ul', slot) # noqa: E501
for slot in [11]]

red_wells = [
Expand All @@ -33,15 +35,21 @@ def run(ctx):

# pipettes
p20 = ctx.load_instrument('p20_single_gen2', p20_mount, tip_racks=tips)
p300 = ctx.load_instrument('p300_single_gen2', p300_mount, tip_racks=tips)
pip = p20 if vol < 20 else p300

# mapping
buffer = reservoir.wells()[0]

# protocol
ctx.comment('\n---------------ADDING BUFFER TO PLATE----------------\n\n')

p20.pick_up_tip()
for well in red_wells:
p20.aspirate(vol, buffer)
p20.dispense(vol, plate.wells_by_name()[well])
p20.drop_tip()
num_asp = pip.max_volume // vol
chunks = [red_wells[i:i+num_asp] for i in range(0, len(red_wells),
num_asp)]

pip.pick_up_tip()
for chunk in chunks:
pip.aspirate(num_asp*vol, buffer)
for well in chunk:
pip.dispense(vol, plate.wells_by_name()[well])
pip.drop_tip()

0 comments on commit 9561438

Please sign in to comment.