From 3d7af22137806e86fb8e7235ca82ffea4ecbcec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cramifarawi=E2=80=9D?= <“rami.farawi@opentrons.com”> Date: Mon, 4 Mar 2024 11:35:06 -0500 Subject: [PATCH] fix --- data/data/fields.csv | 6 +- protoBuilds/07ad5f/07ad5f.ot2.apiv2.py.json | 218 ++++++++++++++++++++ protoBuilds/07ad5f/README.json | 30 +++ protoBuilds/07ad5f/metadata.json | 20 ++ protocols/07ad5f/07ad5f.ot2.apiv2.py | 142 +++++++++++++ protocols/07ad5f/README.md | 61 ++++++ protocols/07ad5f/fields.json | 50 +++++ 7 files changed, 524 insertions(+), 3 deletions(-) create mode 100644 protoBuilds/07ad5f/07ad5f.ot2.apiv2.py.json create mode 100644 protoBuilds/07ad5f/README.json create mode 100644 protoBuilds/07ad5f/metadata.json create mode 100644 protocols/07ad5f/07ad5f.ot2.apiv2.py create mode 100644 protocols/07ad5f/README.md create mode 100644 protocols/07ad5f/fields.json diff --git a/data/data/fields.csv b/data/data/fields.csv index aafb0d04f..3c397a264 100644 --- a/data/data/fields.csv +++ b/data/data/fields.csv @@ -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 @@ -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 diff --git a/protoBuilds/07ad5f/07ad5f.ot2.apiv2.py.json b/protoBuilds/07ad5f/07ad5f.ot2.apiv2.py.json new file mode 100644 index 000000000..242015b10 --- /dev/null +++ b/protoBuilds/07ad5f/07ad5f.ot2.apiv2.py.json @@ -0,0 +1,218 @@ +{ + "content": "import math\nfrom opentrons import protocol_api\n\nmetadata = {\n 'protocolName': 'DNeasy Plant DNA Purification',\n 'author': 'Rami Farawi ',\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 ", + "protocolName": "DNeasy Plant DNA Purification", + "source": "Custom Protocol Request" + }, + "modules": [] +} \ No newline at end of file diff --git a/protoBuilds/07ad5f/README.json b/protoBuilds/07ad5f/README.json new file mode 100644 index 000000000..e21064694 --- /dev/null +++ b/protoBuilds/07ad5f/README.json @@ -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" +} \ No newline at end of file diff --git a/protoBuilds/07ad5f/metadata.json b/protoBuilds/07ad5f/metadata.json new file mode 100644 index 000000000..77ce1f765 --- /dev/null +++ b/protoBuilds/07ad5f/metadata.json @@ -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" +} \ No newline at end of file diff --git a/protocols/07ad5f/07ad5f.ot2.apiv2.py b/protocols/07ad5f/07ad5f.ot2.apiv2.py new file mode 100644 index 000000000..035fb1838 --- /dev/null +++ b/protocols/07ad5f/07ad5f.ot2.apiv2.py @@ -0,0 +1,142 @@ +import math +from opentrons import protocol_api + +metadata = { + 'protocolName': 'DNeasy Plant DNA Purification', + 'author': 'Rami Farawi ', + 'source': 'Custom Protocol Request', + 'apiLevel': '2.15' +} + + +def run(ctx): + + [num_samp_plate1, num_samp_plate2, + m300_mount] = get_values( # noqa: F821 + "num_samp_plate1", "num_samp_plate2", "m300_mount") + + # num_samp_plate1 = 48 + # num_samp_plate2 = 96 + + num_col_plate1 = math.ceil(num_samp_plate1/8) + num_col_plate2 = math.ceil(num_samp_plate2/8) + # m300_mount = 'left' + + # labware + reservoir_12 = ctx.load_labware('nest_12_reservoir_15ml', 11) + reservoir_1_well = [ctx.load_labware('nest_1_reservoir_195ml', slot) + for slot in [3, 6, 9]] + deep_plates = [ctx.load_labware('nest_96_wellplate_2ml_deep', slot) + for slot in [1, 4, 2, 5]] + tips = [ctx.load_labware('opentrons_96_tiprack_300ul', slot) + for slot in [7, 8, 10]] + + # pipettes + m300 = ctx.load_instrument('p300_multi_gen2', m300_mount, tip_racks=tips) + + def pick_up(): + try: + m300.pick_up_tip() + except protocol_api.labware.OutOfTipsError: + ctx.pause(f"Replace empty tip rack for {m300}") + m300.reset_tipracks() + m300.pick_up_tip() + + # mapping + lysis = reservoir_1_well[0]['A1'] + aw1 = reservoir_1_well[1]['A1'] + aw2 = reservoir_1_well[2]['A1'] + + p3 = reservoir_12.wells()[:2]*1000 + ae_buffer = reservoir_12.wells()[2:4]*1000 + + all_sample_cols = [ + col for plate, num_cols in zip( + deep_plates[:2], + [num_col_plate1, + num_col_plate2] + ) + for col in plate.rows()[0][:num_cols] + ] + all_sample_cols_right_side = [ + col for plate, num_cols in zip( + deep_plates[2:], + [num_col_plate1, + num_col_plate2] + ) + for col in plate.rows()[0][:num_cols] + ] + + # protocol + ctx.comment('\n---------------ADDING BUFFER TO PLATES----------------\n\n') + pick_up() + for col in all_sample_cols: + for _ in range(2): + m300.aspirate(200, lysis) + m300.dispense(200, col.top()) + m300.drop_tip() + + ctx.pause('Please take deepwell plate off deck and grind and centrifuge') + + ctx.comment('\n---------------ADDING P3----------------\n\n') + pick_up() + for source, col in zip(p3, all_sample_cols): + m300.aspirate(130, source) + m300.dispense(130, col.top()) + m300.drop_tip() + + ctx.pause("""Take samples and incubate for 10 minutes at -20C. + After, put sample plates back on slots 1 and 4.""") + + ctx.comment('\n---------------TRANSFERRING SAMPLE----------------\n\n') + for source_plate, dest_plate, num_col in zip(deep_plates[:2], + deep_plates[2:], + [num_col_plate1, + num_col_plate2]): + for s, d in zip(source_plate.rows()[0][:num_col], + dest_plate.rows()[0]): + pick_up() + for _ in range(2): + m300.aspirate(200, s, rate=0.2) + m300.dispense(200, d) + m300.drop_tip() + + ctx.pause('Replace sample plates with fresh plates on slots 1 & 4.') + + ctx.comment('\n-------------ADDING A1 BUFFER TO PLATES-------------\n\n') + pick_up() + for col in all_sample_cols_right_side: + for _ in range(3): + m300.aspirate(200, aw1) + m300.dispense(200, col.top()) + m300.drop_tip() + + ctx.comment('\n---------------TRANSFERRING SAMPLE----------------\n\n') + for source_plate, dest_plate, num_col in zip(deep_plates[2:], + deep_plates[:2], + [num_col_plate1, + num_col_plate2]): + for s, d in zip(source_plate.rows()[0][:num_col], + dest_plate.rows()[0]): + pick_up() + for _ in range(5): + m300.aspirate(200, s, rate=0.2) + m300.dispense(200, d) + m300.drop_tip() + + ctx.pause('Centrifuge and filter samples') + + ctx.comment('\n---------------ADDING AW2 BUFFER TO PLATES------------\n\n') + pick_up() + for col in all_sample_cols: + for _ in range(4): + m300.aspirate(200, aw2) + m300.dispense(200, col.top()) + m300.drop_tip() + + ctx.comment('\n---------------ADDING AE BUFFER----------------\n\n') + pick_up() + for source, col in zip(ae_buffer, all_sample_cols): + m300.aspirate(100, source) + m300.dispense(100, col.top()) + m300.drop_tip() diff --git a/protocols/07ad5f/README.md b/protocols/07ad5f/README.md new file mode 100644 index 000000000..966bbbdb8 --- /dev/null +++ b/protocols/07ad5f/README.md @@ -0,0 +1,61 @@ +# DNeasy Plant DNA Purification + + +### Author +[Opentrons](https://opentrons.com/) + + +## Categories +* Sample Prep + * Plate Filling + + +## 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. + + +### Labware +* [NEST 96 Deepwell Plate 2mL #503001](http://www.cell-nest.com/page94?product_id=101&_l=en) +* [NEST 1 Well Reservoir 195 mL #360103](http://www.cell-nest.com/page94?_l=en&product_id=102) +* [Opentrons 96 Tip Rack 300 µL](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips) +* [NEST 12 Well Reservoir 15 mL #360102](http://www.cell-nest.com/page94?_l=en&product_id=102) + + +### Pipettes +* [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/07ad5f/deck.png) + + + +### Protocol Steps +1. Adding buffer to plates +2. Add P3 +3. Pause - take samples to incubate +4. Transfer sample to plate 2, 5 +5. Add A1 buffer to second set of plates +6. Transfer sample back to plate 1, 4 +7. Add AW2 buffer to samples +8. Add AE buffer + + + + +### 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 +07ad5f diff --git a/protocols/07ad5f/fields.json b/protocols/07ad5f/fields.json new file mode 100644 index 000000000..8c9383b5b --- /dev/null +++ b/protocols/07ad5f/fields.json @@ -0,0 +1,50 @@ +[ + + { + "type": "dropDown", + "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"} + ] + } +]