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

fix(spotsee): add pipette option #5026

Merged
merged 2 commits into from
Feb 12, 2024
Merged
Show file tree
Hide file tree
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
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()
Loading