-
Notifications
You must be signed in to change notification settings - Fork 54
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
“ramifarawi”
committed
Nov 29, 2023
1 parent
51248ca
commit 275f630
Showing
6 changed files
with
252 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
{ | ||
"author": "Opentrons", | ||
"categories": { | ||
"Sample Prep": [ | ||
"Mass Spec" | ||
] | ||
}, | ||
"description": "This protocol performs mass spec sample prep per this SP3 Proteomics manual (Appendix Protocol B). The following steps are performed throughout the protocol with the use of the Opentrons OT-2, Thermocycler Module, and Magnetic Module (GEN2):\n\nReduction and Alkylation\nProtein Binding\nEthanol Wash\nAcetonitrile Wash\nOn-Bead Digestion\n\nDue to limited deck space, the user is prompted to change tipracks on the deck when needed, and to move labware when needed.\n\n\nTo purchase tips, reagents, or pipettes, please visit our online store or contact our sales team at [email protected]\n\nOpentrons OT-2\nOpentrons OT-2 Run App (Version 4.0 or later)\nOpentrons P20 GEN2 Single-Channel Pipette\nOpentrons 20\u00b5L Tips\nOpentrons P300 GEN2 Single-Channel Pipette\nOpentrons 300\u00b5L Tips\nNEST 96-Well Plates or comparable PCR plates\n\n\n\nReagent plate (slot 5):\n column 1: DTT\n column 2: CAA\n column 3: magnetic bead stock\n columns 4-5: ABC\n* column 6: trypsin\nEthanol plate (slot 2)\nAcetonitrile plate (slot 3)", | ||
"internal": "5c7384", | ||
"markdown": { | ||
"author": "[Opentrons](https://opentrons.com/)\n\n", | ||
"categories": "* Sample Prep\n\t* Mass Spec\n\n\n", | ||
"description": "This protocol performs mass spec sample prep per this [SP3 Proteomics manual (Appendix Protocol B)](https://www.embopress.org/action/downloadSupplement?doi=10.15252%2Fmsb.20199111&file=msb199111-sup-0001-Appendix.pdf). The following steps are performed throughout the protocol with the use of the Opentrons OT-2, Thermocycler Module, and Magnetic Module (GEN2):\n\n* Reduction and Alkylation\n* Protein Binding\n* Ethanol Wash\n* Acetonitrile Wash\n* On-Bead Digestion\n\nDue to limited deck space, the user is prompted to change tipracks on the deck when needed, and to move labware when needed.\n\n---\n\n\nTo purchase tips, reagents, or pipettes, please visit our [online store](https://shop.opentrons.com/) or contact our sales team at [[email protected]](mailto:[email protected])\n\n* [Opentrons OT-2](https://shop.opentrons.com/collections/ot-2-robot/products/ot-2)\n* [Opentrons OT-2 Run App (Version 4.0 or later)](https://opentrons.com/ot-app/)\n* [Opentrons P20 GEN2 Single-Channel Pipette](https://shop.opentrons.com/collections/ot-2-pipettes)\n* [Opentrons 20\u00b5L Tips](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-10ul-tips)\n* [Opentrons P300 GEN2 Single-Channel Pipette](https://shop.opentrons.com/collections/ot-2-pipettes)\n* [Opentrons 300\u00b5L Tips](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-30ul-tips)\n* [NEST 96-Well Plates](https://shop.opentrons.com/collections/verified-labware/products/nest-0-1-ml-96-well-pcr-plate-full-skirt) or comparable PCR plates\n\n\n---\n\n\nReagent plate (slot 5):\n* column 1: DTT\n* column 2: CAA\n* column 3: magnetic bead stock\n* columns 4-5: ABC\n* column 6: trypsin\n\nEthanol plate (slot 2)\n\nAcetonitrile plate (slot 3)\n\n", | ||
"internal": "5c7384\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", | ||
"process": "\n1. Download your protocol. For help, please see [this article](https://support.opentrons.com/en/articles/3136506-using-labware-in-your-protocols).\n2. Upload your protocol into the [OT App](https://opentrons.com/ot-app).\n3. Set up your deck according to the deck map.\n4. 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).\n5. Hit \"Run\".\n\n", | ||
"robot": "* [OT-2](https://opentrons.com/ot-2)\n\n", | ||
"title": "SP3 Proteomics Mass Spec Sample Prep" | ||
}, | ||
"notes": "If you have any questions about this protocol, please contact the Protocol Development Team by filling out the Troubleshooting Survey.", | ||
"process": "\nDownload your protocol. For help, please see this article.\nUpload your protocol into the OT App.\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", | ||
"robot": [ | ||
"OT-2" | ||
], | ||
"title": "SP3 Proteomics Mass Spec Sample Prep" | ||
} |
195 changes: 195 additions & 0 deletions
195
protoBuilds/5c7384-hhu/mass_spec_sample_prep_hhu.ot2.apiv2.py.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,195 @@ | ||
{ | ||
"content": "import math\nfrom opentrons import protocol_api\n\nmetadata = {\n 'protocolName': 'Mass Spec Sample Prep',\n 'author': 'Nick <[email protected]',\n 'source': 'Custom Protocol Request',\n 'apiLevel': '2.9'\n}\n\n\ndef run(ctx):\n\n [num_samples, p20_type, p300_type, p20_mount, p300_mount, plate_def,\n module_type] = get_values( # noqa: F821\n 'num_samples', 'p20_type', 'p300_type', 'p20_mount', 'p300_mount',\n 'plate_def', 'module_type')\n\n waste = ctx.load_labware('nest_1_reservoir_195ml', '1',\n 'waste container (load empty)').wells()[0].top()\n tips20 = [\n ctx.load_labware('opentrons_96_tiprack_20ul', slot)\n for slot in ['6']]\n tips300 = [\n ctx.load_labware('opentrons_96_tiprack_300ul', slot)\n for slot in ['9']]\n magdeck = ctx.load_module('magnetic module gen2', '4')\n mag_plate = magdeck.load_labware(plate_def)\n reagent_plate = ctx.load_labware(plate_def, '5', 'reagent plate')\n etoh_plate = ctx.load_labware(plate_def, '2', 'ethanol plate')\n acetonitrile_plate = ctx.load_labware(\n plate_def, '3', 'acetonitrile plate')\n if module_type == 'thermocycler':\n temp_module = ctx.load_module('thermocycler')\n heat_func = temp_module.set_block_temperature\n else:\n tips20.insert(-1, ctx.load_labware('opentrons_96_tiprack_20ul', '8'))\n tips300.insert(\n -1, ctx.load_labware('opentrons_96_tiprack_300ul', '11'))\n temp_module = ctx.load_module('temperature module gen2', '7')\n heat_func = temp_module.set_temperature\n\n sample_plate = temp_module.load_labware(plate_def, 'sample plate')\n num_cols = math.ceil(num_samples/8)\n samples_s = sample_plate.wells()[:num_samples]\n samples_m = sample_plate.rows()[0][:num_cols]\n mag_samples_s = mag_plate.wells()[:num_samples]\n mag_samples_m = mag_plate.rows()[0][:num_cols]\n\n p20 = ctx.load_instrument(p20_type, p20_mount, tip_racks=tips20)\n p300 = ctx.load_instrument(p300_type, p300_mount,\n tip_racks=tips300)\n\n if p20.channels == 1:\n dtt = reagent_plate.columns()[0]\n caa = reagent_plate.columns()[1]\n mag_bead_stock = reagent_plate.columns()[2]\n acetonitrile = acetonitrile_plate.wells()[:num_samples]\n else:\n dtt = reagent_plate.rows()[0][0]\n caa = reagent_plate.rows()[0][1]\n mag_bead_stock = reagent_plate.rows()[0][2]\n acetonitrile = acetonitrile_plate.rows()[0][:num_cols]\n\n if p300.channels == 1:\n etoh = etoh_plate.wells()[:num_samples]\n abc = reagent_plate.columns()[3:5]\n trypsin = reagent_plate.columns()[5]\n else:\n etoh = etoh_plate.rows()[0][:num_cols]\n abc = reagent_plate.rows()[0][3:5]\n trypsin = reagent_plate.rows()[0][5]\n\n heat_func(60)\n\n tip_log = {}\n if p20.channels == 1:\n tip_list20 = [tip for rack in tips20 for tip in rack.wells()]\n else:\n tip_list20 = [tip for rack in tips20 for tip in rack.rows()[0]]\n if p300.channels == 1:\n tip_list300 = [tip for rack in tips300 for tip in rack.wells()]\n else:\n tip_list300 = [tip for rack in tips300 for tip in rack.rows()[0]]\n\n tip_log['tips'] = {\n p20: tip_list20,\n p300: tip_list300}\n tip_log['max'] = {\n p20: len(tip_log['tips'][p20]),\n p300: len(tip_log['tips'][p300])}\n tip_log['count'] = {p20: 0, p300: 0}\n\n def _pick_up(pip):\n try:\n pip.pick_up_tip()\n except protocol_api.labware.OutOfTipsError:\n ctx.pause(f\"Replace empty tip rack for {pip}\")\n pip.reset_tipracks()\n pip.pick_up_tip()\n\n \"\"\" Reduction and Alkylation \"\"\"\n samples = samples_s if p20.channels == 1 else samples_m\n for i, s in enumerate(samples):\n _pick_up(p20)\n p20.transfer(5, dtt, s, mix_after=(2, 5), new_tip='never')\n p20.drop_tip()\n\n ctx.delay(minutes=30, msg='Incubating 30 minutes at 60C for reduction.')\n\n for i, s in enumerate(samples):\n _pick_up(p20)\n p20.transfer(5, caa, s, mix_after=(2, 5), new_tip='never')\n p20.drop_tip()\n\n heat_func(25)\n ctx.delay(minutes=30, msg='Incubating 30 minutes at RT (25C) for \\\nalkylation.')\n\n \"\"\" Protein Binding \"\"\"\n for i, s in enumerate(samples):\n _pick_up(p20)\n p20.transfer(5, mag_bead_stock, s, mix_after=(2, 5),\n new_tip='never')\n p20.drop_tip()\n\n for i, (s, a) in enumerate(zip(samples, acetonitrile)):\n _pick_up(p20)\n p20.transfer(15, a, s, mix_after=(2, 20),\n new_tip='never')\n p20.drop_tip()\n\n ctx.pause('Please move plate from thermocycler to magnetic module. Resume \\\nwhen the plate has been moved.')\n\n magdeck.engage()\n ctx.delay(minutes=5, msg='Incubating on magnet for 5 minutes.')\n\n mag_samples = mag_samples_s if p20.channels == 1 else mag_samples_m\n for i, m in enumerate(mag_samples):\n _pick_up(p20)\n p20.transfer(43, m.bottom(1), waste, new_tip='never')\n p20.drop_tip()\n\n \"\"\" Ethanol Wash \"\"\"\n mag_samples = mag_samples_s if p300.channels == 1 else mag_samples_m\n for wash in range(2):\n magdeck.disengage()\n for i, (m, e) in enumerate(zip(mag_samples, etoh)):\n _pick_up(p300)\n p300.transfer(200, e, m, mix_after=(10, 50), new_tip='never')\n p300.drop_tip()\n\n magdeck.engage()\n ctx.delay(minutes=5, msg='Incubating on magnet for 5 minutes.')\n\n for i, m in enumerate(mag_samples):\n _pick_up(p300)\n p300.transfer(230, m.bottom(1), waste, new_tip='never')\n p300.drop_tip()\n\n ctx.pause('Please replace the ethanol plate (slot 6) with a fresh \\\nplate of ethanol before resuming.')\n\n \"\"\" Acetonitrile Wash \"\"\"\n magdeck.disengage()\n for i, (m, a) in enumerate(zip(mag_samples, acetonitrile)):\n _pick_up(p300)\n p300.transfer(171.5, a, m, mix_after=(10, 50), new_tip='never')\n p300.drop_tip()\n\n magdeck.engage()\n ctx.delay(minutes=5, msg='Incubating on magnet for 5 minutes')\n\n for i, m in enumerate(mag_samples):\n _pick_up(p300)\n p300.transfer(230, m.bottom(1), waste, new_tip='never')\n p300.drop_tip()\n\n ctx.pause('Place plate in thermocycler')\n\n \"\"\" On-Bead Digestion \"\"\"\n if p300.channels == 1:\n samples = samples_s\n for i, s in enumerate(samples):\n _pick_up(p300)\n p300.transfer(35, abc[i//48][(i % 48) % 8], s, new_tip='never')\n p300.drop_tip()\n else:\n samples = samples_m\n for i, s in enumerate(samples):\n _pick_up(p300)\n p300.transfer(35, abc[i//6], s, new_tip='never')\n p300.drop_tip()\n\n if p20.channels == 1:\n samples = samples_s\n for i, s in enumerate(samples):\n _pick_up(p20)\n p20.transfer(5, trypsin[i % 8], s, mix_after=(2, 5),\n new_tip='never')\n p20.drop_tip()\n else:\n samples = samples_m\n for i, s in enumerate(samples):\n _pick_up(p20)\n p20.transfer(5, trypsin, s, mix_after=(2, 5), new_tip='never')\n p20.drop_tip()\n\n heat_func(37)\n ctx.comment('Protocol complete. Please shake the plate from the magnetic \\\nmodule to resuspend the beads, and replace on the thermocycler now set at \\\n37C.')\n", | ||
"custom_labware_defs": [], | ||
"fields": [ | ||
{ | ||
"default": 96, | ||
"label": "number of samples", | ||
"name": "num_samples", | ||
"type": "int" | ||
}, | ||
{ | ||
"label": "P20 pipette type", | ||
"name": "p20_type", | ||
"options": [ | ||
{ | ||
"label": "single (GEN2)", | ||
"value": "p20_single_gen2" | ||
}, | ||
{ | ||
"label": "multi (GEN2)", | ||
"value": "p20_multi_gen2" | ||
} | ||
], | ||
"type": "dropDown" | ||
}, | ||
{ | ||
"label": "P300 pipette type", | ||
"name": "p300_type", | ||
"options": [ | ||
{ | ||
"label": "single (GEN2)", | ||
"value": "p300_single_gen2" | ||
}, | ||
{ | ||
"label": "multi (GEN2)", | ||
"value": "p300_multi_gen2" | ||
}, | ||
{ | ||
"label": "multi (GEN1)", | ||
"value": "p300_multi" | ||
} | ||
], | ||
"type": "dropDown" | ||
}, | ||
{ | ||
"label": "P20 channel pipette mount", | ||
"name": "p20_mount", | ||
"options": [ | ||
{ | ||
"label": "left", | ||
"value": "left" | ||
}, | ||
{ | ||
"label": "right", | ||
"value": "right" | ||
} | ||
], | ||
"type": "dropDown" | ||
}, | ||
{ | ||
"label": "P300 channel pipette mount", | ||
"name": "p300_mount", | ||
"options": [ | ||
{ | ||
"label": "right", | ||
"value": "right" | ||
}, | ||
{ | ||
"label": "left", | ||
"value": "left" | ||
} | ||
], | ||
"type": "dropDown" | ||
}, | ||
{ | ||
"default": "nest_96_wellplate_100ul_pcr_full_skirt", | ||
"label": "plate defintion", | ||
"name": "plate_def", | ||
"type": "str" | ||
}, | ||
{ | ||
"label": "heating moudle type", | ||
"name": "module_type", | ||
"options": [ | ||
{ | ||
"label": "temperature module (GEN2)", | ||
"value": "temperature module gen2" | ||
}, | ||
{ | ||
"label": "thermocycler", | ||
"value": "thermocycler" | ||
} | ||
], | ||
"type": "dropDown" | ||
} | ||
], | ||
"instruments": [ | ||
{ | ||
"mount": "left", | ||
"name": "p20_single_gen2" | ||
}, | ||
{ | ||
"mount": "right", | ||
"name": "p300_single_gen2" | ||
} | ||
], | ||
"labware": [ | ||
{ | ||
"name": "waste container (load empty) on 1", | ||
"share": false, | ||
"slot": "1", | ||
"type": "nest_1_reservoir_195ml" | ||
}, | ||
{ | ||
"name": "ethanol plate on 2", | ||
"share": false, | ||
"slot": "2", | ||
"type": "nest_96_wellplate_100ul_pcr_full_skirt" | ||
}, | ||
{ | ||
"name": "acetonitrile plate on 3", | ||
"share": false, | ||
"slot": "3", | ||
"type": "nest_96_wellplate_100ul_pcr_full_skirt" | ||
}, | ||
{ | ||
"name": "NEST 96 Well Plate 100 \u00b5L PCR Full Skirt on Magnetic Module GEN2 on 4", | ||
"share": false, | ||
"slot": "4", | ||
"type": "nest_96_wellplate_100ul_pcr_full_skirt" | ||
}, | ||
{ | ||
"name": "reagent plate on 5", | ||
"share": false, | ||
"slot": "5", | ||
"type": "nest_96_wellplate_100ul_pcr_full_skirt" | ||
}, | ||
{ | ||
"name": "Opentrons 96 Tip Rack 20 \u00b5L on 6", | ||
"share": false, | ||
"slot": "6", | ||
"type": "opentrons_96_tiprack_20ul" | ||
}, | ||
{ | ||
"name": "sample plate on Temperature Module GEN2 on 7", | ||
"share": false, | ||
"slot": "7", | ||
"type": "nest_96_wellplate_100ul_pcr_full_skirt" | ||
}, | ||
{ | ||
"name": "Opentrons 96 Tip Rack 20 \u00b5L on 8", | ||
"share": false, | ||
"slot": "8", | ||
"type": "opentrons_96_tiprack_20ul" | ||
}, | ||
{ | ||
"name": "Opentrons 96 Tip Rack 300 \u00b5L on 9", | ||
"share": false, | ||
"slot": "9", | ||
"type": "opentrons_96_tiprack_300ul" | ||
}, | ||
{ | ||
"name": "Opentrons 96 Tip Rack 300 \u00b5L on 11", | ||
"share": false, | ||
"slot": "11", | ||
"type": "opentrons_96_tiprack_300ul" | ||
}, | ||
{ | ||
"name": "Opentrons Fixed Trash on 12", | ||
"share": false, | ||
"slot": "12", | ||
"type": "opentrons_1_trash_1100ml_fixed" | ||
} | ||
], | ||
"metadata": { | ||
"apiLevel": "2.9", | ||
"author": "Nick <[email protected]", | ||
"protocolName": "Mass Spec Sample Prep", | ||
"source": "Custom Protocol Request" | ||
}, | ||
"modules": [ | ||
{ | ||
"name": "MagneticModuleContext at Magnetic Module GEN2 on 4 lw NEST 96 Well Plate 100 \u00b5L PCR Full Skirt on Magnetic Module GEN2 on 4", | ||
"share": false, | ||
"slot": "4", | ||
"type": "magdeck" | ||
}, | ||
{ | ||
"name": "TemperatureModuleContext at Temperature Module GEN2 on 7 lw sample plate on Temperature Module GEN2 on 7", | ||
"share": false, | ||
"slot": "7", | ||
"type": "tempdeck" | ||
} | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
{ | ||
"files": { | ||
"OT 1 protocol": [], | ||
"OT 2 protocol": [ | ||
"mass_spec_sample_prep_hhu.ot2.apiv2.py" | ||
], | ||
"description": [ | ||
"README.md" | ||
] | ||
}, | ||
"flags": { | ||
"embedded-app": false, | ||
"feature": false, | ||
"hide-from-search": false, | ||
"skip-tests": false | ||
}, | ||
"path": "protocols/5c7384-hhu", | ||
"slug": "5c7384-hhu", | ||
"status": "ok" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.