Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
“ramifarawi” committed Oct 30, 2023
1 parent 917da50 commit b735de7
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 27 deletions.
6 changes: 3 additions & 3 deletions protoBuilds/1464-2/ELISA_protocol_part2.ot2.apiv2.py.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"content": "import math\n\nmetadata = {\n 'protocolName': 'ELISA',\n 'author': 'Alise <[email protected]>',\n 'source': 'Custom Protocol Request',\n 'apiLevel': '2.13'\n}\n\n\ndef run(ctx):\n [number_of_standards, concentration_csv] = get_values( # noqa: F821\n 'number_of_standards', 'concentration_csv')\n\n # labware setup\n tuberack_4 = ctx.load_labware(\n 'opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap', '4')\n deep_plates = [ctx.load_labware('nest_96_wellplate_2ml_deep', slot)\n for slot in ['5', '6']]\n trough = ctx.load_labware('nest_12_reservoir_15ml', '8')\n plate = ctx.load_labware(\n 'corning_96_wellplate_360ul_flat', '9')\n\n tipracks_300 = [ctx.load_labware('opentrons_96_tiprack_300ul', slot)\n for slot in ['3', '10']]\n tiprack_m300 = ctx.load_labware('opentrons_96_tiprack_300ul', '7')\n\n # instrument setup\n m300 = ctx.load_instrument(\n 'p300_multi_gen2',\n mount='left',\n tip_racks=[tiprack_m300])\n p300 = ctx.load_instrument(\n 'p300_single',\n mount='right',\n tip_racks=tipracks_300)\n\n # reagent setup\n tubes = [well for row in tuberack_4.rows() for well in row]\n water = tubes[0]\n diluent = tubes[1]\n standards = tubes[2:2 + number_of_standards]\n samples = tubes[2 + number_of_standards:]\n antibody = trough.wells('A1')\n\n # define elution pool\n dil_dests = [row for deep_plate in deep_plates\n for row in deep_plate.rows()]\n conc_lists = [[int(cell) for cell in line.split(',') if cell]\n for line in concentration_csv.splitlines() if line]\n concs = [5, 10, 25, 50, 100, 500, 1000, 5000, 10000, 25000, 50000, 100000]\n\n samples = [\n row[concs.index(conc)]\n for concentrations, row in zip(conc_lists, dil_dests)\n for conc in concentrations\n ]\n\n dests = [\n [plate.columns()[index][num], plate.columns()[index+1][num]]\n for index in range(0, 12, 2) for num in range(8)\n ]\n\n \"\"\"\n Adding Enzyme Conjugate Reagent\n \"\"\"\n num_cols = math.ceil((2 + number_of_standards + len(samples)) / 8) * 2\n m300.distribute(100, antibody,\n plate.columns()[:num_cols], blow_out=antibody)\n\n \"\"\"\n Adding Water\n \"\"\"\n p300.distribute(50, water, dests[0])\n dests.pop(0)\n\n \"\"\"\n Adding Dilution Buffer\n \"\"\"\n p300.distribute(50, diluent, dests[0])\n dests.pop(0)\n\n \"\"\"\n Adding HCP Standards\n \"\"\"\n for standard in standards:\n p300.distribute(50, standard, dests[0])\n dests.pop(0)\n\n \"\"\"\n Adding Samples\n \"\"\"\n for sample in samples:\n p300.pick_up_tip()\n p300.aspirate(130, sample)\n for dest in dests[0]:\n p300.dispense(50, dest)\n p300.drop_tip()\n dests.pop(0)\n",
"content": "import math\n\nmetadata = {\n 'protocolName': 'Antibody Addition',\n 'author': 'Alise <[email protected]>',\n 'source': 'Custom Protocol Request',\n 'apiLevel': '2.14'\n}\n\n\ndef run(ctx):\n [number_of_standards, concentration_csv] = get_values( # noqa: F821\n 'number_of_standards', 'concentration_csv')\n\n # labware setup\n tuberack_4 = ctx.load_labware(\n 'opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap', '4')\n deep_plates = [ctx.load_labware('nest_96_wellplate_2ml_deep', slot)\n for slot in ['5', '6']]\n trough = ctx.load_labware('nest_12_reservoir_15ml', '8')\n plate = ctx.load_labware(\n 'corning_96_wellplate_360ul_flat', '9')\n\n tipracks_300 = [ctx.load_labware('opentrons_96_tiprack_300ul', slot)\n for slot in ['3', '10']]\n tiprack_m300 = ctx.load_labware('opentrons_96_tiprack_300ul', '7')\n\n # instrument setup\n m300 = ctx.load_instrument(\n 'p300_multi_gen2',\n mount='left',\n tip_racks=[tiprack_m300])\n p300 = ctx.load_instrument(\n 'p300_single',\n mount='right',\n tip_racks=tipracks_300)\n\n # reagent setup\n tubes = [well for row in tuberack_4.rows() for well in row]\n water = tubes[0]\n diluent = tubes[1]\n standards = tubes[2:2 + number_of_standards]\n samples = tubes[2 + number_of_standards:]\n antibody = trough.wells('A1')\n\n # define elution pool\n dil_dests = [row for deep_plate in deep_plates\n for row in deep_plate.rows()]\n conc_lists = [[int(cell) for cell in line.split(',') if cell]\n for line in concentration_csv.splitlines() if line]\n concs = [5, 10, 25, 50, 100, 500, 1000, 5000, 10000, 25000, 50000, 100000]\n\n samples = [\n row[concs.index(conc)]\n for concentrations, row in zip(conc_lists, dil_dests)\n for conc in concentrations\n ]\n\n dests = [\n [plate.columns()[index][num], plate.columns()[index+1][num]]\n for index in range(0, 12, 2) for num in range(8)\n ]\n\n \"\"\"\n Adding Enzyme Conjugate Reagent\n \"\"\"\n num_cols = math.ceil((2 + number_of_standards + len(samples)) / 8) * 2\n m300.distribute(100, antibody,\n plate.columns()[:num_cols], blow_out=antibody)\n\n \"\"\"\n Adding Water\n \"\"\"\n p300.distribute(50, water, dests[0])\n dests.pop(0)\n\n \"\"\"\n Adding Dilution Buffer\n \"\"\"\n p300.distribute(50, diluent, dests[0])\n dests.pop(0)\n\n \"\"\"\n Adding HCP Standards\n \"\"\"\n ctx.comment('hcp')\n for standard in standards:\n p300.distribute(50, standard, dests[0])\n dests.pop(0)\n\n \"\"\"\n Adding Samples\n \"\"\"\n for sample, chunk in zip(samples, dests):\n p300.pick_up_tip()\n p300.aspirate(130, sample)\n for well in chunk:\n p300.dispense(50, well)\n p300.drop_tip()\n # dests.pop(0)\n",
"custom_labware_defs": [],
"fields": [
{
Expand Down Expand Up @@ -82,9 +82,9 @@
}
],
"metadata": {
"apiLevel": "2.13",
"apiLevel": "2.14",
"author": "Alise <[email protected]>",
"protocolName": "ELISA",
"protocolName": "Antibody Addition",
"source": "Custom Protocol Request"
},
"modules": []
Expand Down
4 changes: 2 additions & 2 deletions protoBuilds/1464/README.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
"ELISA"
]
},
"description": "Links:\n Part 1: Dilution\n Part 2-1: Antibody Addition\n* Part 2-2: Substrate and Stop Solution Addition\nThis is the first part of a ELISA protocol: Dilution Procedure. The robot will perform serial dilutions samples located in the Opentrons 2 mL Eppendorf tube rack in the 1.2 mL tube plates. User will need to upload a CSV specifying the desired concentrations of each sample to be transferred to a separate 96-well plate in part 2 of the protocol. See more information on the CSV requirement in Additional Notes below.\nDownload full protocol details here.\n\nYou will need:\n P1000 Single-channel Pipette\n P300 Single-channel Pipette\n Opentrons Tube Racks (2 mL Eppendorf)\n Opentrons Tube Rack (15 + 50 mL)\n 2 mL 96-deep well Plate\n 96-well Plate\n 12-row Trough\n 1000 uL Tip Rack\n* 300 uL Tip Rack",
"description": "Links:\n Part 1: Dilution\n Part 2-1: Antibody Addition\n* Part 2-2: Substrate and Stop Solution Addition\nThis is the first part of a ELISA protocol: Dilution Procedure. The robot will perform serial dilutions samples located in the Opentrons 2 mL Eppendorf tube rack in the 1.2 mL tube plates. User will need to upload a CSV specifying the desired concentrations of each sample to be transferred to a separate 96-well plate in part 2 of the protocol. See more information on the CSV requirement in Additional Notes below.\nDownload full protocol details here.\n\nYou will need:\n P1000 Single-channel Pipette\n P300 Single-channel Pipette\n Opentrons Tube Racks (2 mL Eppendorf)\n Opentrons Tube Rack (15 + 50 mL)\n NEST 2 mL 96-deep well Plate\n 96-well Plate\n 12-row Trough\n 1000 uL Tip Rack\n* 300 uL Tip Rack",
"internal": "1464",
"markdown": {
"author": "[Opentrons](http://www.opentrons.com/)\n\n",
"categories": "* Proteins & Proteomics\n * ELISA\n\n",
"description": "Links:\n* [Part 1: Dilution](./1464)\n* [Part 2-1: Antibody Addition](./1464-2)\n* [Part 2-2: Substrate and Stop Solution Addition](1464-3)\n\nThis is the first part of a ELISA protocol: Dilution Procedure. The robot will perform serial dilutions samples located in the Opentrons 2 mL Eppendorf tube rack in the 1.2 mL tube plates. User will need to upload a CSV specifying the desired concentrations of each sample to be transferred to a separate 96-well plate in part 2 of the protocol. See more information on the CSV requirement in Additional Notes below.\n\n\nDownload full protocol details [here](https://s3.amazonaws.com/opentrons-protocol-library-website/custom-README-images/1464-natrix-separations-inc-milliporesigma/NEW_ELISA_protocol.xlsx).\n\n---\n\nYou will need:\n* P1000 Single-channel Pipette\n* P300 Single-channel Pipette\n* [Opentrons Tube Racks (2 mL Eppendorf)](https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1)\n* [Opentrons Tube Rack (15 + 50 mL)](https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1)\n* [2 mL 96-deep well Plate](https://www.usascientific.com/2ml-deep96-well-plateone-bulk.aspx)\n* 96-well Plate\n* 12-row Trough\n* 1000 uL Tip Rack\n* 300 uL Tip Rack\n\n",
"description": "Links:\n* [Part 1: Dilution](./1464)\n* [Part 2-1: Antibody Addition](./1464-2)\n* [Part 2-2: Substrate and Stop Solution Addition](1464-3)\n\nThis is the first part of a ELISA protocol: Dilution Procedure. The robot will perform serial dilutions samples located in the Opentrons 2 mL Eppendorf tube rack in the 1.2 mL tube plates. User will need to upload a CSV specifying the desired concentrations of each sample to be transferred to a separate 96-well plate in part 2 of the protocol. See more information on the CSV requirement in Additional Notes below.\n\n\nDownload full protocol details [here](https://s3.amazonaws.com/opentrons-protocol-library-website/custom-README-images/1464-natrix-separations-inc-milliporesigma/NEW_ELISA_protocol.xlsx).\n\n---\n\nYou will need:\n* P1000 Single-channel Pipette\n* P300 Single-channel Pipette\n* [Opentrons Tube Racks (2 mL Eppendorf)](https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1)\n* [Opentrons Tube Rack (15 + 50 mL)](https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1)\n* NEST 2 mL 96-deep well Plate\n* 96-well Plate\n* 12-row Trough\n* 1000 uL Tip Rack\n* 300 uL Tip Rack\n\n",
"internal": "1464\n",
"notes": "Tube Rack setup: (slot 4)\n* DI Water: A1\n* Diluent: A2\n* HCP Standards: A3-B2 if number of standards is 6, A3-B4 if 8\n* Samples: B3-(D6) if number of standards is 6, B5-(D6) if 8\nYou will need to shift the locations of the samples based on the number of standards you have each run. This configuration must be consistent of that of part 2.\n\n---\n\nCSV Layout:\n\n![csv](https://s3.amazonaws.com/opentrons-protocol-library-website/custom-README-images/1464-natrix-separations-inc-milliporesigma/csv_layout.png)\n\n* No headers\n* Each row represents each sample\n* Each column represents the dilution factor of that sample to be transferred to the output plate in part 2 of the protocol\n* Robot will determine the dilution scheme of each sample based on the concentrations in the CSV\n\n---\n\nIf you have any questions about this protocol, please contact [email protected].\n\n",
"process": "1. Download your protocol.\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 article](https://support.opentrons.com/ot-2/getting-started-software-setup/deck-calibration).\n5. Hit \"Run\".\n\n\n",
Expand Down
13 changes: 7 additions & 6 deletions protocols/1464-2/ELISA_protocol_part2.ot2.apiv2.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import math

metadata = {
'protocolName': 'ELISA',
'protocolName': 'Antibody Addition',
'author': 'Alise <[email protected]>',
'source': 'Custom Protocol Request',
'apiLevel': '2.13'
'apiLevel': '2.14'
}


Expand Down Expand Up @@ -83,17 +83,18 @@ def run(ctx):
"""
Adding HCP Standards
"""
ctx.comment('hcp')
for standard in standards:
p300.distribute(50, standard, dests[0])
dests.pop(0)

"""
Adding Samples
"""
for sample in samples:
for sample, chunk in zip(samples, dests):
p300.pick_up_tip()
p300.aspirate(130, sample)
for dest in dests[0]:
p300.dispense(50, dest)
for well in chunk:
p300.dispense(50, well)
p300.drop_tip()
dests.pop(0)
# dests.pop(0)
16 changes: 9 additions & 7 deletions protocols/1464-3/ELISA_protocol_part3.ot2.apiv2.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
metadata = {
'protocolName': 'ELISA',
'protocolName': 'Substrate and Stop Solution Addition',
'author': 'Alise <[email protected]>',
'source': 'Custom Protocol Request',
'apiLevel': '2.13'
'apiLevel': '2.14'
}


Expand All @@ -29,18 +29,20 @@ def run(ctx):
tip_racks=tiprack_m300)

# reagent setup
TMB_substrate = trough.wells_by_name()['A6']
stop_solution = trough.wells_by_name()['A12']
TMB_substrate = trough.wells_by_name()['A6'].bottom(z=0)
stop_solution = trough.wells_by_name()['A12'].bottom(z=0)

"""
Adding TMB substrate
"""
m300.pick_up_tip()
m300.distribute(
100,
TMB_substrate.bottom(),
TMB_substrate,
[col[0].top() for col in plate.columns()[:number_of_columns]],
blow_out=TMB_substrate,
blow_out=False,
disposal_volume=0.05,

new_tip='never')
m300.aspirate(20, plate.columns()[number_of_columns-1][0].top())
m300.drop_tip()
Expand All @@ -52,5 +54,5 @@ def run(ctx):
"""
for col in plate.columns()[:number_of_columns]:
m300.pick_up_tip()
m300.transfer(100, stop_solution.bottom(), col, new_tip='never')
m300.transfer(100, stop_solution, col, new_tip='never')
m300.drop_tip()
26 changes: 18 additions & 8 deletions protocols/1464/ELISA_protocol_part1.ot2.apiv2.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
cimport math
def get_values(*names):
import json
_all_values = json.loads("""{"starting_buffer_volume":50,"number_of_standards":6,"concentration_csv":"50,500,5000\\n10,10000,100000\\n100,,\\n5,,"}""")
return [_all_values[n] for n in names]


import math

metadata = {
'protocolName': 'ELISA: Dilution',
'author': 'Alise <[email protected]>',
'source': 'Custom Protocol Request',
'apiLevel': '2.13'
'apiLevel': '2.14'
}


Expand All @@ -19,7 +25,7 @@ def run(ctx):
'opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical', '1')
tuberack_4 = ctx.load_labware(
'opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap', '4')
deep_plates = [ctx.load_labware('plateone_96_wellplate_2000ul', slot)
deep_plates = [ctx.load_labware('nest_96_wellplate_2ml_deep', slot)
for slot in ['5', '6']]

tiprack_1000 = ctx.load_labware('opentrons_96_tiprack_1000ul', '2')
Expand Down Expand Up @@ -47,9 +53,12 @@ def run(ctx):
conc_lists = [[int(cell) for cell in line.split(',') if cell]
for line in concentration_csv.splitlines() if line]

concs = [5, 10, 25, 50, 100, 500, 1000, 2500, 5000, 10000, 50000, 100000]
diluent_vols = [320, 450, 180, 320, 450, 320, 450, 180, 320, 450, 180, 450]
sample_vols = [80, 50, 120, 80, 50, 80, 50, 120, 80, 50, 80, 50]
concs = [5, 10, 25, 50, 100, 500, 1000, 5000, 10000, 25000, 50000, 100000]

diluent_vols = [320, 450, 180, 320, 450, 320, 450, 320, 450, 180, 320, 450]

sample_vols = [80, 50, 120, 80, 50, 80, 50, 80, 50, 120, 80, 50]

concs_init = [1, 1, 10, 10, 10, 100, 100, 1000, 1000, 1000, 10000, 10000]
dil_formulae = {
conc: {'diluent_vol': diluent_vol,
Expand Down Expand Up @@ -82,14 +91,15 @@ def run(ctx):
dilution_concs.append(new_concs)

# transfer dilution buffer
p1000.pick_up_tip()

for sample_index, (row, concs) in enumerate(
zip(dil_dests, dilution_concs)):
volumes = [dil_formulae[conc]['diluent_vol']
for c_list in concs for conc in c_list]
dests = [row[dil_formulae[conc]['col_index']]
for c_list in concs for conc in c_list]
for volume, dest in zip(volumes, dests):
p1000.pick_up_tip()
buffer_height += volume / (math.pi * (13.5 ** 2))
if buffer_height > 75:
source = dilution_buffer.bottom(3)
Expand All @@ -101,7 +111,7 @@ def run(ctx):
dest.top(-20),
new_tip='never')
p1000.blow_out(dest.top())
p1000.drop_tip()
p1000.drop_tip()

# transfer samples
for sample_index, (row, concs) in enumerate(
Expand Down
2 changes: 1 addition & 1 deletion protocols/1464/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ You will need:
* P300 Single-channel Pipette
* [Opentrons Tube Racks (2 mL Eppendorf)](https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1)
* [Opentrons Tube Rack (15 + 50 mL)](https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1)
* [2 mL 96-deep well Plate](https://www.usascientific.com/2ml-deep96-well-plateone-bulk.aspx)
* NEST 2 mL 96-deep well Plate
* 96-well Plate
* 12-row Trough
* 1000 uL Tip Rack
Expand Down

0 comments on commit b735de7

Please sign in to comment.