Skip to content

Commit

Permalink
Merge pull request #5041 from Opentrons/07ad5f
Browse files Browse the repository at this point in the history
07ad5f
  • Loading branch information
ramifarawi authored Mar 4, 2024
2 parents 04b1290 + 691f99e commit 91011ec
Show file tree
Hide file tree
Showing 11 changed files with 535 additions and 20 deletions.
6 changes: 3 additions & 3 deletions data/data/fields.csv
Original file line number Diff line number Diff line change
Expand Up @@ -729,7 +729,7 @@ lysis_vol,1
m10_mount,2
m1k,1
m20_mount,83
m300_mount,112
m300_mount,113
m300_type,2
m_mount,1
mag_bead_mix_resuspend_reps,1
Expand Down Expand Up @@ -918,8 +918,8 @@ num_samp_lysis,1
num_samp_mmx,1
num_samp_p1,1
num_samp_p2,1
num_samp_plate1,1
num_samp_plate2,1
num_samp_plate1,2
num_samp_plate2,2
num_samp_plate3,1
num_samp_plate4,1
num_sample_columns,1
Expand Down
218 changes: 218 additions & 0 deletions protoBuilds/07ad5f/07ad5f.ot2.apiv2.py.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
{
"content": "import math\nfrom opentrons import protocol_api\n\nmetadata = {\n 'protocolName': 'DNeasy Plant DNA Purification',\n 'author': 'Rami Farawi <[email protected]>',\n 'source': 'Custom Protocol Request',\n 'apiLevel': '2.15'\n}\n\n\ndef run(ctx):\n\n [num_samp_plate1, num_samp_plate2,\n m300_mount] = get_values( # noqa: F821\n \"num_samp_plate1\", \"num_samp_plate2\", \"m300_mount\")\n\n # num_samp_plate1 = 48\n # num_samp_plate2 = 96\n\n num_col_plate1 = math.ceil(num_samp_plate1/8)\n num_col_plate2 = math.ceil(num_samp_plate2/8)\n # m300_mount = 'left'\n\n # labware\n reservoir_12 = ctx.load_labware('nest_12_reservoir_15ml', 11)\n reservoir_1_well = [ctx.load_labware('nest_1_reservoir_195ml', slot)\n for slot in [3, 6, 9]]\n deep_plates = [ctx.load_labware('nest_96_wellplate_2ml_deep', slot)\n for slot in [1, 4, 2, 5]]\n tips = [ctx.load_labware('opentrons_96_tiprack_300ul', slot)\n for slot in [7, 8, 10]]\n\n # pipettes\n m300 = ctx.load_instrument('p300_multi_gen2', m300_mount, tip_racks=tips)\n\n def pick_up():\n try:\n m300.pick_up_tip()\n except protocol_api.labware.OutOfTipsError:\n ctx.pause(f\"Replace empty tip rack for {m300}\")\n m300.reset_tipracks()\n m300.pick_up_tip()\n\n # mapping\n lysis = reservoir_1_well[0]['A1']\n aw1 = reservoir_1_well[1]['A1']\n aw2 = reservoir_1_well[2]['A1']\n\n p3 = reservoir_12.wells()[:2]*1000\n ae_buffer = reservoir_12.wells()[2:4]*1000\n\n all_sample_cols = [\n col for plate, num_cols in zip(\n deep_plates[:2],\n [num_col_plate1,\n num_col_plate2]\n )\n for col in plate.rows()[0][:num_cols]\n ]\n all_sample_cols_right_side = [\n col for plate, num_cols in zip(\n deep_plates[2:],\n [num_col_plate1,\n num_col_plate2]\n )\n for col in plate.rows()[0][:num_cols]\n ]\n\n # protocol\n ctx.comment('\\n---------------ADDING BUFFER TO PLATES----------------\\n\\n')\n pick_up()\n for col in all_sample_cols:\n for _ in range(2):\n m300.aspirate(200, lysis)\n m300.dispense(200, col.top())\n m300.drop_tip()\n\n ctx.pause('Please take deepwell plate off deck and grind and centrifuge')\n\n ctx.comment('\\n---------------ADDING P3----------------\\n\\n')\n pick_up()\n for source, col in zip(p3, all_sample_cols):\n m300.aspirate(130, source)\n m300.dispense(130, col.top())\n m300.drop_tip()\n\n ctx.pause(\"\"\"Take samples and incubate for 10 minutes at -20C.\n After, put sample plates back on slots 1 and 4.\"\"\")\n\n ctx.comment('\\n---------------TRANSFERRING SAMPLE----------------\\n\\n')\n for source_plate, dest_plate, num_col in zip(deep_plates[:2],\n deep_plates[2:],\n [num_col_plate1,\n num_col_plate2]):\n for s, d in zip(source_plate.rows()[0][:num_col],\n dest_plate.rows()[0]):\n pick_up()\n for _ in range(2):\n m300.aspirate(200, s, rate=0.2)\n m300.dispense(200, d)\n m300.drop_tip()\n\n ctx.pause('Replace sample plates with fresh plates on slots 1 & 4.')\n\n ctx.comment('\\n-------------ADDING A1 BUFFER TO PLATES-------------\\n\\n')\n pick_up()\n for col in all_sample_cols_right_side:\n for _ in range(3):\n m300.aspirate(200, aw1)\n m300.dispense(200, col.top())\n m300.drop_tip()\n\n ctx.comment('\\n---------------TRANSFERRING SAMPLE----------------\\n\\n')\n for source_plate, dest_plate, num_col in zip(deep_plates[2:],\n deep_plates[:2],\n [num_col_plate1,\n num_col_plate2]):\n for s, d in zip(source_plate.rows()[0][:num_col],\n dest_plate.rows()[0]):\n pick_up()\n for _ in range(5):\n m300.aspirate(200, s, rate=0.2)\n m300.dispense(200, d)\n m300.drop_tip()\n\n ctx.pause('Centrifuge and filter samples')\n\n ctx.comment('\\n---------------ADDING AW2 BUFFER TO PLATES------------\\n\\n')\n pick_up()\n for col in all_sample_cols:\n for _ in range(4):\n m300.aspirate(200, aw2)\n m300.dispense(200, col.top())\n m300.drop_tip()\n\n ctx.comment('\\n---------------ADDING AE BUFFER----------------\\n\\n')\n pick_up()\n for source, col in zip(ae_buffer, all_sample_cols):\n m300.aspirate(100, source)\n m300.dispense(100, col.top())\n m300.drop_tip()\n",
"custom_labware_defs": [],
"fields": [
{
"label": "Number of Samples Plate 1",
"name": "num_samp_plate1",
"options": [
{
"label": "8",
"value": 8
},
{
"label": "16",
"value": 16
},
{
"label": "24",
"value": 24
},
{
"label": "32",
"value": 32
},
{
"label": "40",
"value": 40
},
{
"label": "48",
"value": 48
},
{
"label": "56",
"value": 56
},
{
"label": "64",
"value": 64
},
{
"label": "72",
"value": 72
},
{
"label": "80",
"value": 80
},
{
"label": "88",
"value": 88
},
{
"label": "96",
"value": 96
}
],
"type": "dropDown"
},
{
"label": "Number of Samples Plate 2",
"name": "num_samp_plate2",
"options": [
{
"label": "8",
"value": 8
},
{
"label": "16",
"value": 16
},
{
"label": "24",
"value": 24
},
{
"label": "32",
"value": 32
},
{
"label": "40",
"value": 40
},
{
"label": "48",
"value": 48
},
{
"label": "56",
"value": 56
},
{
"label": "64",
"value": 64
},
{
"label": "72",
"value": 72
},
{
"label": "80",
"value": 80
},
{
"label": "88",
"value": 88
},
{
"label": "96",
"value": 96
}
],
"type": "dropDown"
},
{
"label": "P300 Multi-Channel Mount",
"name": "m300_mount",
"options": [
{
"label": "Left",
"value": "left"
},
{
"label": "Right",
"value": "right"
}
],
"type": "dropDown"
}
],
"instruments": [
{
"mount": "left",
"name": "p300_multi_gen2"
}
],
"labware": [
{
"name": "NEST 96 Deepwell Plate 2mL on 1",
"share": false,
"slot": "1",
"type": "nest_96_wellplate_2ml_deep"
},
{
"name": "NEST 96 Deepwell Plate 2mL on 2",
"share": false,
"slot": "2",
"type": "nest_96_wellplate_2ml_deep"
},
{
"name": "NEST 1 Well Reservoir 195 mL on 3",
"share": false,
"slot": "3",
"type": "nest_1_reservoir_195ml"
},
{
"name": "NEST 96 Deepwell Plate 2mL on 4",
"share": false,
"slot": "4",
"type": "nest_96_wellplate_2ml_deep"
},
{
"name": "NEST 96 Deepwell Plate 2mL on 5",
"share": false,
"slot": "5",
"type": "nest_96_wellplate_2ml_deep"
},
{
"name": "NEST 1 Well Reservoir 195 mL on 6",
"share": false,
"slot": "6",
"type": "nest_1_reservoir_195ml"
},
{
"name": "Opentrons 96 Tip Rack 300 \u00b5L on 7",
"share": false,
"slot": "7",
"type": "opentrons_96_tiprack_300ul"
},
{
"name": "Opentrons 96 Tip Rack 300 \u00b5L on 8",
"share": false,
"slot": "8",
"type": "opentrons_96_tiprack_300ul"
},
{
"name": "NEST 1 Well Reservoir 195 mL on 9",
"share": false,
"slot": "9",
"type": "nest_1_reservoir_195ml"
},
{
"name": "Opentrons 96 Tip Rack 300 \u00b5L on 10",
"share": false,
"slot": "10",
"type": "opentrons_96_tiprack_300ul"
},
{
"name": "NEST 12 Well Reservoir 15 mL on 11",
"share": false,
"slot": "11",
"type": "nest_12_reservoir_15ml"
},
{
"name": "Opentrons Fixed Trash on 12",
"share": false,
"slot": "12",
"type": "opentrons_1_trash_1100ml_fixed"
}
],
"metadata": {
"apiLevel": "2.15",
"author": "Rami Farawi <[email protected]>",
"protocolName": "DNeasy Plant DNA Purification",
"source": "Custom Protocol Request"
},
"modules": []
}
30 changes: 30 additions & 0 deletions protoBuilds/07ad5f/README.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"author": "Opentrons",
"categories": {
"Sample Prep": [
"Plate Filling"
]
},
"deck-setup": "",
"description": "This protocol preps (2) 96 plates with sample and necessary reagent. There is a pause during the protocol to refill tips if necessary, as well as to replace the 96 plates on slots 1 and 4 with fresh plates.",
"internal": "07ad5f",
"labware": "\nNEST 96 Deepwell Plate 2mL #503001\nNEST 1 Well Reservoir 195 mL #360103\nOpentrons 96 Tip Rack 300 \u00b5L\nNEST 12 Well Reservoir 15 mL #360102\n",
"markdown": {
"author": "[Opentrons](https://opentrons.com/)\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/07ad5f/deck.png)\n\n\n\n",
"description": "This protocol preps (2) 96 plates with sample and necessary reagent. There is a pause during the protocol to refill tips if necessary, as well as to replace the 96 plates on slots 1 and 4 with fresh plates.\n\n\n",
"internal": "07ad5f\n",
"labware": "* [NEST 96 Deepwell Plate 2mL #503001](http://www.cell-nest.com/page94?product_id=101&_l=en)\n* [NEST 1 Well Reservoir 195 mL #360103](http://www.cell-nest.com/page94?_l=en&product_id=102)\n* [Opentrons 96 Tip Rack 300 \u00b5L](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips)\n* [NEST 12 Well Reservoir 15 mL #360102](http://www.cell-nest.com/page94?_l=en&product_id=102)\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 8 Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/8-channel-electronic-pipette/)\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. Adding buffer to plates\n2. Add P3\n3. Pause - take samples to incubate\n4. Transfer sample to plate 2, 5\n5. Add A1 buffer to second set of plates\n6. Transfer sample back to plate 1, 4\n7. Add AW2 buffer to samples\n8. Add AE buffer\n\n\n\n\n",
"title": "DNeasy Plant DNA Purification"
},
"notes": "If you have any questions about this protocol, please contact the Protocol Development Team by filling out the Troubleshooting Survey.",
"pipettes": "\nOpentrons P300 8 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": "\nAdding buffer to plates\nAdd P3\nPause - take samples to incubate\nTransfer sample to plate 2, 5\nAdd A1 buffer to second set of plates\nTransfer sample back to plate 1, 4\nAdd AW2 buffer to samples\nAdd AE buffer\n",
"title": "DNeasy Plant DNA Purification"
}
20 changes: 20 additions & 0 deletions protoBuilds/07ad5f/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"files": {
"OT 1 protocol": [],
"OT 2 protocol": [
"07ad5f.ot2.apiv2.py"
],
"description": [
"README.md"
]
},
"flags": {
"embedded-app": false,
"feature": false,
"hide-from-search": false,
"skip-tests": false
},
"path": "protocols/07ad5f",
"slug": "07ad5f",
"status": "ok"
}
Loading

0 comments on commit 91011ec

Please sign in to comment.