From 99cfd7935d74ace8b19ed27a6ab6efcf6b26ed19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cramifarawi=E2=80=9D?= <“rami.farawi@opentrons.com”> Date: Mon, 13 Nov 2023 13:52:15 -0500 Subject: [PATCH] fix --- data/data/fields.csv | 8 +- protoBuilds/cerillo/README.json | 30 + protoBuilds/cerillo/cerillo.ot2.apiv2.py.json | 1256 +++++++++++++++++ protoBuilds/cerillo/metadata.json | 20 + protocols/cerillo/README.md | 61 + protocols/cerillo/cerillo.ot2.apiv2.py | 26 +- protocols/cerillo/fields.json | 26 +- 7 files changed, 1398 insertions(+), 29 deletions(-) create mode 100644 protoBuilds/cerillo/README.json create mode 100644 protoBuilds/cerillo/cerillo.ot2.apiv2.py.json create mode 100644 protoBuilds/cerillo/metadata.json create mode 100644 protocols/cerillo/README.md diff --git a/data/data/fields.csv b/data/data/fields.csv index 4cea30f18..07c63a3c7 100644 --- a/data/data/fields.csv +++ b/data/data/fields.csv @@ -265,6 +265,7 @@ csv3_buff,1 csv3_samp,1 csv3_urea,1 csv_aq,1 +csv_buff,1 csv_factors,1 csv_file,2 csv_file_1,1 @@ -276,6 +277,7 @@ csv_samp1,1 csv_samp2,1 csv_samp3,1 csv_sample,2 +csv_stock,1 ctrl_csv,1 ctrl_transfer_vol,1 custom_labware_lname,1 @@ -338,6 +340,7 @@ diluent_buff_col,1 diluent_csv,1 diluent_scheme,1 diluent_vol,1 +dilute_stock,1 dilution_factor,2 dilution_plate,1 dilvol,1 @@ -723,7 +726,7 @@ lysis_vol,1 m10_mount,2 m1k,1 m20_mount,79 -m300_mount,106 +m300_mount,107 m300_type,2 m_mount,1 mag_bead_mix_resuspend_reps,1 @@ -1000,7 +1003,7 @@ p2num,1 p300_gen,1 p300_mixing_height,1 p300_mnt,3 -p300_mount,154 +p300_mount,155 p300_mount_1,1 p300_multi_mount,7 p300_rate,1 @@ -1342,6 +1345,7 @@ slow_asp_rate,1 slow_speed_down,1 slow_speed_up,1 small_pip,1 +sol_vol,1 source,1 source_asp_flow_rate_mmx,1 source_asp_flow_rate_plate,1 diff --git a/protoBuilds/cerillo/README.json b/protoBuilds/cerillo/README.json new file mode 100644 index 000000000..24a0d1d78 --- /dev/null +++ b/protoBuilds/cerillo/README.json @@ -0,0 +1,30 @@ +{ + "author": "Opentrons", + "categories": { + "Sample Prep": [ + "Plate Filling" + ] + }, + "deck-setup": "", + "description": "This protocol preps a 96 200ul Armadillo plate to be used directly on the Cerillo Stratus. For detailed protocol steps, please see below.\nFor an example csv, please see here.\nNote: keep the x in the top left corner. If you would not like to put a volume in a well (ie skipping a well), then replace any number with an \"x\".", + "internal": "cerillo", + "labware": "\nCerillo Stratus Armadillo Flat Bottom Plate 96well 200uL\nNEST 96 Deepwell Plate 2mL #503001\nNEST 12 Well Reservoir 15 mL #360102\nOpentrons 96 Filter Tip Rack 200 \u00b5L\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/cerillo/deck.png)\n\n\n", + "description": "This protocol preps a 96 200ul Armadillo plate to be used directly on the Cerillo Stratus. For detailed protocol steps, please see below.\n\n[For an example csv, please see here.](https://opentrons-protocol-library-website.s3.amazonaws.com/custom-README-images/cerillo+csv.xlsx)\n\nNote: keep the x in the top left corner. If you would not like to put a volume in a well (ie skipping a well), then replace any number with an \"x\".\n\n\n", + "internal": "cerillo\n", + "labware": "* Cerillo Stratus Armadillo Flat Bottom Plate 96well 200uL\n* [NEST 96 Deepwell Plate 2mL #503001](http://www.cell-nest.com/page94?product_id=101&_l=en)\n* [NEST 12 Well Reservoir 15 mL #360102](http://www.cell-nest.com/page94?_l=en&product_id=102)\n* Opentrons 96 Filter Tip Rack 200 \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 P300 Single Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/single-channel-electronic-pipette-p20/)\n* [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. If user decides, buffer is added to deepwell plate according to buffer csv (single-channel).\n2. If user decides, stock is added to deepwell plate according to stock csv (single-channel).\n3. Stock and buffer are mixed with multi-channel pipette, then transferred to reader.\n4. Cells premixed with mulit-channel.\n5. 180ul of cells are transferred to reader, mixing 3 times when mixed in diluted stock. \n\n\n\n", + "title": "Cerillo Plate Reader Protocol" + }, + "notes": "If you have any questions about this protocol, please contact the Protocol Development Team by filling out the Troubleshooting Survey.", + "pipettes": "\nOpentrons P300 Single Channel Electronic Pipette (GEN2)\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": "\nIf user decides, buffer is added to deepwell plate according to buffer csv (single-channel).\nIf user decides, stock is added to deepwell plate according to stock csv (single-channel).\nStock and buffer are mixed with multi-channel pipette, then transferred to reader.\nCells premixed with mulit-channel.\n180ul of cells are transferred to reader, mixing 3 times when mixed in diluted stock. \n", + "title": "Cerillo Plate Reader Protocol" +} \ No newline at end of file diff --git a/protoBuilds/cerillo/cerillo.ot2.apiv2.py.json b/protoBuilds/cerillo/cerillo.ot2.apiv2.py.json new file mode 100644 index 000000000..02ed7eb48 --- /dev/null +++ b/protoBuilds/cerillo/cerillo.ot2.apiv2.py.json @@ -0,0 +1,1256 @@ +{ + "content": "metadata = {\n 'protocolName': 'Cerillo Plate Reader Protocol',\n 'author': 'Rami Farawi ',\n 'source': 'Custom Protocol Request',\n 'apiLevel': '2.13'\n}\n\n\ndef run(ctx):\n\n [csv_stock, csv_buff, dilute_stock, sol_vol,\n p300_mount, m300_mount] = get_values( # noqa: F821\n \"csv_stock\", \"csv_buff\", \"dilute_stock\", \"sol_vol\",\n \"p300_mount\", \"m300_mount\")\n\n# csv_stock = \"\"\"\n# x,1,2,3,4,5,6,7,8,9,10,11,12\n# A,x,20,20,20,20,20,20,20,20,20,20,20\n# B,X,40,40,40,40,40,40,40,40,40,40,40\n# C,x,29,29,29,29,29,29,29,29,29,29,29\n# D,40,40,40,40,40,40,40,40,40,40,40,40\n# E,29,29,29,29,29,29,29,29,29,29,29,29\n# F,40,40,40,40,40,40,40,40,40,40,40,40\n# G,29,29,29,29,29,29,29,29,29,29,29,29\n# H,40,40,40,40,40,40,40,40,40,40,40,40\n# \"\"\"\n#\n# csv_buff = \"\"\"\n# x,1,2,3,4,5,6,7,8,9,10,11,12\n# A,20,40,34,20,22,44,89,90,92,29,84,29\n# B,74,29,49,72,49,32,89,29,88,44,22,40\n# C,20,40,34,20,22,44,89,90,92,29,84,29\n# D,74,29,49,72,49,32,89,29,88,44,22,40\n# E,20,40,34,20,22,44,89,90,92,29,84,29\n# F,74,29,49,72,49,32,89,29,88,44,22,40\n# G,20,40,34,20,22,44,89,90,92,29,84,29\n# H,74,29,49,72,49,32,89,29,88,44,22,40\n# \"\"\"\n\n # labware\n reservoir = ctx.load_labware('nest_12_reservoir_15ml', 5)\n plate_reader = ctx.load_labware('cerillo_stratus_armadillo_flatbottom_200ul', 1)\n deepwell = ctx.load_labware('nest_96_wellplate_2ml_deep', 3)\n tips = [ctx.load_labware('opentrons_96_filtertiprack_200ul', slot)\n for slot in [7, 8, 9]]\n\n # pipettes\n m300 = ctx.load_instrument('p300_multi_gen2', m300_mount, tip_racks=tips)\n p300 = ctx.load_instrument('p300_single_gen2', p300_mount, tip_racks=tips)\n\n csv_lines_stock = [[val.strip() for val in line.split(',')][1:]\n for line in csv_stock.splitlines()\n if line.split(',')[0].strip()][1:]\n\n csv_lines_buff = [[val.strip() for val in line.split(',')][1:]\n for line in csv_buff.splitlines()\n if line.split(',')[0].strip()][1:]\n\n # mapping\n stock_solution = reservoir.wells()[0]\n buffer = reservoir.wells()[1]\n cells = reservoir.wells()[-1]\n\n if dilute_stock:\n\n # protocol\n ctx.comment('\\n---------------ADDING BUFFER TO PLATE--------------\\n\\n')\n p300.pick_up_tip()\n for line, row in zip(csv_lines_buff, deepwell.rows()):\n for well_vol, well_name in zip(line, row):\n if well_vol.lower() == 'x':\n continue\n well_vol = int(well_vol)\n dest_well = well_name\n p300.aspirate(well_vol, buffer)\n p300.dispense(well_vol, dest_well)\n p300.drop_tip()\n\n ctx.comment('\\n---------------ADDING STOCK TO PLATE--------------\\n\\n')\n p300.pick_up_tip()\n for line, row in zip(csv_lines_stock, deepwell.rows()):\n for well_vol, well_name in zip(line, row):\n if well_vol.lower() == 'x':\n continue\n well_vol = int(well_vol)\n dest_well = well_name\n p300.aspirate(well_vol, stock_solution)\n p300.dispense(well_vol, dest_well.top())\n p300.drop_tip()\n\n ctx.comment('\\n-------------Mixing solution and stock------------\\n\\n')\n for s, d in zip(deepwell.rows()[0], plate_reader.rows()[0]):\n m300.pick_up_tip()\n m300.mix(5, 50, s)\n m300.aspirate(sol_vol, s)\n m300.dispense(sol_vol, d)\n m300.drop_tip()\n\n else:\n ctx.comment('\\n-----------Transferring solution to reader-------\\n\\n')\n for s, d in zip(deepwell.rows()[0], plate_reader.rows()[0]):\n m300.pick_up_tip()\n m300.aspirate(sol_vol, s)\n m300.dispense(sol_vol, d)\n m300.drop_tip()\n\n ctx.comment('\\n-------------Transferring cells to reader-------------\\n\\n')\n m300.pick_up_tip()\n m300.mix(20, 200, cells)\n for col in plate_reader.rows()[0]:\n m300.aspirate(180, cells)\n m300.dispense(180, col)\n m300.mix(3, 150, col)\n m300.drop_tip()\n", + "custom_labware_defs": [ + { + "brand": { + "brand": "Custom", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.56, + "yDimension": 85.36, + "zDimension": 54 + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "flat" + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "Cerillo Stratus Armadillo Flat Bottom Plate 96well 200uL", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "namespace": "custom_beta", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "cerillo_stratus_armadillo_flatbottom_200ul", + "quirks": [] + }, + "schemaVersion": 2, + "version": 1, + "wells": { + "A1": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 73.18, + "z": 39 + }, + "A10": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 73.18, + "z": 39 + }, + "A11": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 73.18, + "z": 39 + }, + "A12": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 73.18, + "z": 39 + }, + "A2": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 73.18, + "z": 39 + }, + "A3": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 73.18, + "z": 39 + }, + "A4": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 73.18, + "z": 39 + }, + "A5": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 73.18, + "z": 39 + }, + "A6": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 73.18, + "z": 39 + }, + "A7": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 73.18, + "z": 39 + }, + "A8": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 73.18, + "z": 39 + }, + "A9": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 73.18, + "z": 39 + }, + "B1": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 64.18, + "z": 39 + }, + "B10": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 64.18, + "z": 39 + }, + "B11": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 64.18, + "z": 39 + }, + "B12": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 64.18, + "z": 39 + }, + "B2": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 64.18, + "z": 39 + }, + "B3": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 64.18, + "z": 39 + }, + "B4": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 64.18, + "z": 39 + }, + "B5": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 64.18, + "z": 39 + }, + "B6": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 64.18, + "z": 39 + }, + "B7": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 64.18, + "z": 39 + }, + "B8": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 64.18, + "z": 39 + }, + "B9": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 64.18, + "z": 39 + }, + "C1": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 55.18, + "z": 39 + }, + "C10": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 55.18, + "z": 39 + }, + "C11": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 55.18, + "z": 39 + }, + "C12": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 55.18, + "z": 39 + }, + "C2": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 55.18, + "z": 39 + }, + "C3": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 55.18, + "z": 39 + }, + "C4": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 55.18, + "z": 39 + }, + "C5": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 55.18, + "z": 39 + }, + "C6": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 55.18, + "z": 39 + }, + "C7": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 55.18, + "z": 39 + }, + "C8": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 55.18, + "z": 39 + }, + "C9": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 55.18, + "z": 39 + }, + "D1": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 46.18, + "z": 39 + }, + "D10": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 46.18, + "z": 39 + }, + "D11": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 46.18, + "z": 39 + }, + "D12": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 46.18, + "z": 39 + }, + "D2": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 46.18, + "z": 39 + }, + "D3": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 46.18, + "z": 39 + }, + "D4": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 46.18, + "z": 39 + }, + "D5": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 46.18, + "z": 39 + }, + "D6": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 46.18, + "z": 39 + }, + "D7": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 46.18, + "z": 39 + }, + "D8": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 46.18, + "z": 39 + }, + "D9": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 46.18, + "z": 39 + }, + "E1": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 37.18, + "z": 39 + }, + "E10": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 37.18, + "z": 39 + }, + "E11": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 37.18, + "z": 39 + }, + "E12": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 37.18, + "z": 39 + }, + "E2": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 37.18, + "z": 39 + }, + "E3": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 37.18, + "z": 39 + }, + "E4": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 37.18, + "z": 39 + }, + "E5": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 37.18, + "z": 39 + }, + "E6": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 37.18, + "z": 39 + }, + "E7": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 37.18, + "z": 39 + }, + "E8": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 37.18, + "z": 39 + }, + "E9": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 37.18, + "z": 39 + }, + "F1": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 28.18, + "z": 39 + }, + "F10": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 28.18, + "z": 39 + }, + "F11": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 28.18, + "z": 39 + }, + "F12": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 28.18, + "z": 39 + }, + "F2": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 28.18, + "z": 39 + }, + "F3": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 28.18, + "z": 39 + }, + "F4": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 28.18, + "z": 39 + }, + "F5": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 28.18, + "z": 39 + }, + "F6": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 28.18, + "z": 39 + }, + "F7": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 28.18, + "z": 39 + }, + "F8": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 28.18, + "z": 39 + }, + "F9": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 28.18, + "z": 39 + }, + "G1": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 19.18, + "z": 39 + }, + "G10": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 19.18, + "z": 39 + }, + "G11": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 19.18, + "z": 39 + }, + "G12": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 19.18, + "z": 39 + }, + "G2": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 19.18, + "z": 39 + }, + "G3": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 19.18, + "z": 39 + }, + "G4": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 19.18, + "z": 39 + }, + "G5": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 19.18, + "z": 39 + }, + "G6": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 19.18, + "z": 39 + }, + "G7": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 19.18, + "z": 39 + }, + "G8": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 19.18, + "z": 39 + }, + "G9": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 19.18, + "z": 39 + }, + "H1": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 10.18, + "z": 39 + }, + "H10": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 10.18, + "z": 39 + }, + "H11": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 10.18, + "z": 39 + }, + "H12": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 10.18, + "z": 39 + }, + "H2": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 10.18, + "z": 39 + }, + "H3": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 10.18, + "z": 39 + }, + "H4": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 10.18, + "z": 39 + }, + "H5": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 10.18, + "z": 39 + }, + "H6": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 10.18, + "z": 39 + }, + "H7": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 10.18, + "z": 39 + }, + "H8": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 10.18, + "z": 39 + }, + "H9": { + "depth": 15, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 10.18, + "z": 39 + } + } + } + ], + "fields": [ + { + "default": "x,1,2,3,4,5,6,7,8,9,10,11,12,A,x,20,20,20,20,20,20,20,20,20,20,20", + "label": "Stock Solution CSV", + "name": "csv_stock", + "type": "textFile" + }, + { + "default": "x,1,2,3,4,5,6,7,8,9,10,11,12,A,x,20,20,20,20,20,20,20,20,20,20,20", + "label": "Buffer Solution CSV", + "name": "csv_buff", + "type": "textFile" + }, + { + "label": "Dilute stock solution? before adding cells?", + "name": "dilute_stock", + "options": [ + { + "label": "Yes, dilute stock solution with csvs", + "value": true + }, + { + "label": "No, just transfers cells and solution to plate reader", + "value": false + } + ], + "type": "dropDown" + }, + { + "default": 20, + "label": "Transfer volume of diluted stock to plate reader (ul)", + "name": "sol_vol", + "type": "int" + }, + { + "label": "P300 Multi-Channel Mount", + "name": "p300_mount", + "options": [ + { + "label": "Left", + "value": "left" + }, + { + "label": "Right", + "value": "right" + } + ], + "type": "dropDown" + }, + { + "label": "P300 Multi-Channel Mount", + "name": "m300_mount", + "options": [ + { + "label": "Right", + "value": "right" + }, + { + "label": "Left", + "value": "left" + } + ], + "type": "dropDown" + } + ], + "instruments": [ + { + "mount": "left", + "name": "p300_single_gen2" + }, + { + "mount": "right", + "name": "p300_multi_gen2" + } + ], + "labware": [ + { + "name": "Cerillo Stratus Armadillo Flat Bottom Plate 96well 200uL on 1", + "share": false, + "slot": "1", + "type": "cerillo_stratus_armadillo_flatbottom_200ul" + }, + { + "name": "NEST 96 Deepwell Plate 2mL on 3", + "share": false, + "slot": "3", + "type": "nest_96_wellplate_2ml_deep" + }, + { + "name": "NEST 12 Well Reservoir 15 mL on 5", + "share": false, + "slot": "5", + "type": "nest_12_reservoir_15ml" + }, + { + "name": "Opentrons 96 Filter Tip Rack 200 \u00b5L on 7", + "share": false, + "slot": "7", + "type": "opentrons_96_filtertiprack_200ul" + }, + { + "name": "Opentrons 96 Filter Tip Rack 200 \u00b5L on 8", + "share": false, + "slot": "8", + "type": "opentrons_96_filtertiprack_200ul" + }, + { + "name": "Opentrons 96 Filter Tip Rack 200 \u00b5L on 9", + "share": false, + "slot": "9", + "type": "opentrons_96_filtertiprack_200ul" + }, + { + "name": "Opentrons Fixed Trash on 12", + "share": false, + "slot": "12", + "type": "opentrons_1_trash_1100ml_fixed" + } + ], + "metadata": { + "apiLevel": "2.13", + "author": "Rami Farawi ", + "protocolName": "Cerillo Plate Reader Protocol", + "source": "Custom Protocol Request" + }, + "modules": [] +} \ No newline at end of file diff --git a/protoBuilds/cerillo/metadata.json b/protoBuilds/cerillo/metadata.json new file mode 100644 index 000000000..4336dd7a7 --- /dev/null +++ b/protoBuilds/cerillo/metadata.json @@ -0,0 +1,20 @@ +{ + "files": { + "OT 1 protocol": [], + "OT 2 protocol": [ + "cerillo.ot2.apiv2.py" + ], + "description": [ + "README.md" + ] + }, + "flags": { + "embedded-app": false, + "feature": false, + "hide-from-search": false, + "skip-tests": false + }, + "path": "protocols/cerillo", + "slug": "cerillo", + "status": "ok" +} \ No newline at end of file diff --git a/protocols/cerillo/README.md b/protocols/cerillo/README.md new file mode 100644 index 000000000..0850f33be --- /dev/null +++ b/protocols/cerillo/README.md @@ -0,0 +1,61 @@ +# Cerillo Plate Reader Protocol + + +### Author +[Opentrons](https://opentrons.com/) + + +## Categories +* Sample Prep + * Plate Filling + + +## Description +This protocol preps a 96 200ul Armadillo plate to be used directly on the Cerillo Stratus. For detailed protocol steps, please see below. + +[For an example csv, please see here.](https://opentrons-protocol-library-website.s3.amazonaws.com/custom-README-images/cerillo+csv.xlsx) + +Note: keep the x in the top left corner. If you would not like to put a volume in a well (ie skipping a well), then replace any number with an "x". + + +### Labware +* Cerillo Stratus Armadillo Flat Bottom Plate 96well 200uL +* [NEST 96 Deepwell Plate 2mL #503001](http://www.cell-nest.com/page94?product_id=101&_l=en) +* [NEST 12 Well Reservoir 15 mL #360102](http://www.cell-nest.com/page94?_l=en&product_id=102) +* Opentrons 96 Filter Tip Rack 200 µL + + +### Pipettes +* [Opentrons P300 Single Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/single-channel-electronic-pipette-p20/) +* [Opentrons P300 8 Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/8-channel-electronic-pipette/) + + +### Deck Setup +![deck](https://opentrons-protocol-library-website.s3.amazonaws.com/custom-README-images/cerillo/deck.png) + + +### Protocol Steps +1. If user decides, buffer is added to deepwell plate according to buffer csv (single-channel). +2. If user decides, stock is added to deepwell plate according to stock csv (single-channel). +3. Stock and buffer are mixed with multi-channel pipette, then transferred to reader. +4. Cells premixed with mulit-channel. +5. 180ul of cells are transferred to reader, mixing 3 times when mixed in diluted stock. + + + +### Process +1. Input your protocol parameters above. +2. Download your protocol and unzip if needed. +3. 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. +4. Upload your protocol file (.py extension) to the [OT App](https://opentrons.com/ot-app) in the `Protocol` tab. +5. Set up your deck according to the deck map. +6. 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). +7. Hit "Run". + + +### Additional 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/). + + +###### Internal +cerillo diff --git a/protocols/cerillo/cerillo.ot2.apiv2.py b/protocols/cerillo/cerillo.ot2.apiv2.py index 64d9866af..e66e7edd1 100644 --- a/protocols/cerillo/cerillo.ot2.apiv2.py +++ b/protocols/cerillo/cerillo.ot2.apiv2.py @@ -89,24 +89,26 @@ def run(ctx): p300.drop_tip() ctx.comment('\n-------------Mixing solution and stock------------\n\n') - for col in deepwell.rows()[0]: + for s, d in zip(deepwell.rows()[0], plate_reader.rows()[0]): m300.pick_up_tip() - m300.mix(5, 50, col) + m300.mix(5, 50, s) + m300.aspirate(sol_vol, s) + m300.dispense(sol_vol, d) m300.drop_tip() - m300.pick_up_tip() - m300.mix(20, 200, cells) + else: + ctx.comment('\n-----------Transferring solution to reader-------\n\n') + for s, d in zip(deepwell.rows()[0], plate_reader.rows()[0]): + m300.pick_up_tip() + m300.aspirate(sol_vol, s) + m300.dispense(sol_vol, d) + m300.drop_tip() ctx.comment('\n-------------Transferring cells to reader-------------\n\n') + m300.pick_up_tip() + m300.mix(20, 200, cells) for col in plate_reader.rows()[0]: m300.aspirate(180, cells) m300.dispense(180, col) + m300.mix(3, 150, col) m300.drop_tip() - - ctx.comment('\n-------------Transferring cells to reader-------------\n\n') - for s, d in zip(deepwell.rows()[0], plate_reader.rows()[0]): - m300.pick_up_tip() - m300.aspirate(sol_vol, s) - m300.dispense(sol_vol, d) - m300.mix(3, 150, d) - m300.drop_tip() diff --git a/protocols/cerillo/fields.json b/protocols/cerillo/fields.json index 4d7462a48..565f1ddf6 100644 --- a/protocols/cerillo/fields.json +++ b/protocols/cerillo/fields.json @@ -14,7 +14,7 @@ { "type": "dropDown", "label": "Dilute stock solution? before adding cells?", - "name": "pre_mix", + "name": "dilute_stock", "options": [ {"label": "Yes, dilute stock solution with csvs", "value": true}, {"label": "No, just transfers cells and solution to plate reader", "value": false} @@ -26,27 +26,23 @@ "name": "sol_vol", "default": 20 }, - { - "type": "int", - "label": "Pre-mix repetitions", - "name": "premix_reps", - "default": 3 - }, - - { - "type": "float", - "label": "Pre-mix Rate", - "name": "mix_rate", - "default": 1 + "type": "dropDown", + "label": "P300 Multi-Channel Mount", + "name": "p300_mount", + "options": [ + {"label": "Left", "value": "left"}, + {"label": "Right", "value": "right"} + ] }, { "type": "dropDown", "label": "P300 Multi-Channel Mount", "name": "m300_mount", "options": [ - {"label": "Left", "value": "left"}, - {"label": "Right", "value": "right"} + + {"label": "Right", "value": "right"}, + {"label": "Left", "value": "left"} ] } ]