diff --git a/data/data/fields.csv b/data/data/fields.csv index 4e8bb3be5..afb947879 100644 --- a/data/data/fields.csv +++ b/data/data/fields.csv @@ -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 diff --git a/protoBuilds/spotsee/README.json b/protoBuilds/spotsee/README.json index d74044a63..e9b1dda32 100644 --- a/protoBuilds/spotsee/README.json +++ b/protoBuilds/spotsee/README.json @@ -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" } \ No newline at end of file diff --git a/protoBuilds/spotsee/spotsee.ot2.apiv2.py.json b/protoBuilds/spotsee/spotsee.ot2.apiv2.py.json index e86b45f04..3db06e5b1 100644 --- a/protoBuilds/spotsee/spotsee.ot2.apiv2.py.json +++ b/protoBuilds/spotsee/spotsee.ot2.apiv2.py.json @@ -1,5 +1,5 @@ { - "content": "metadata = {\n 'protocolName': 'Spotsee Well Distribution Protocol',\n 'author': 'Rami Farawi ',\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 ',\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": { @@ -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": [ diff --git a/protocols/spotsee/README.md b/protocols/spotsee/README.md index 3d73020fa..8150f7957 100644 --- a/protocols/spotsee/README.md +++ b/protocols/spotsee/README.md @@ -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 diff --git a/protocols/spotsee/fields.json b/protocols/spotsee/fields.json index 6ae1ad7cf..10b49c65d 100644 --- a/protocols/spotsee/fields.json +++ b/protocols/spotsee/fields.json @@ -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"} + ] } ] diff --git a/protocols/spotsee/spotsee.ot2.apiv2.py b/protocols/spotsee/spotsee.ot2.apiv2.py index cfac97ef9..7c0d48502 100644 --- a/protocols/spotsee/spotsee.ot2.apiv2.py +++ b/protocols/spotsee/spotsee.ot2.apiv2.py @@ -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 = [ @@ -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()