diff --git a/protoBuilds/15dc4c/elisa.ot2.apiv2.py.json b/protoBuilds/15dc4c/elisa.ot2.apiv2.py.json index 04bb5f5e0..1a223d964 100644 --- a/protoBuilds/15dc4c/elisa.ot2.apiv2.py.json +++ b/protoBuilds/15dc4c/elisa.ot2.apiv2.py.json @@ -1,5 +1,5 @@ { - "content": "import math\nfrom opentrons import protocol_api\nfrom opentrons.types import Point\n\nmetadata = {\n 'protocolName': 'SMC IL-17A High Sensitivity Immunoassay Kit',\n 'author': 'Nick Diehl ',\n 'source': 'Custom Protocol Request',\n 'apiLevel': '2.13'\n}\n\nDO_MIX = True\nDO_INCUBATIONS = True\nDROP = True\nZ_OFFSET_RESERVOIR = 1.0\nVOL_SAMPLE = 100.0\nELUTION_TYPE = 'SMCxPRO' # Errena / SMCxPRO\n\n\ndef run(ctx):\n\n ctx.max_speeds['X'] = 200\n ctx.max_speeds['Y'] = 200\n ctx.max_speeds['Z'] = 200\n ctx.max_speeds['A'] = 200\n\n # [num_samples, mount_m300, m20] = get_values( # noqa: F821\n # 'num_samples', 'mount_m300', 'mount_m20')\n num_samples, mount_m300, mount_m20 = 60, 'left', 'right'\n\n elution_plate = ctx.load_labware('aurora_384_wellplate_100ul', '1',\n 'elution plate')\n sample_plate = ctx.load_labware('axygen_96_wellplate_500ul', '2',\n 'sample preparation plate')\n standard_plate = ctx.load_labware('axygen_96_wellplate_2000ul', '4',\n 'standards plate')\n assay_plate = ctx.load_labware('axygen_96_wellplate_500ul', '5',\n 'assay plate')\n assay_plate_on_magnet = ctx.load_labware(\n 'axygenspheremag_96_wellplate_500ul', '7', 'sphere mag plate')\n reservoir = ctx.load_labware('nest_12_reservoir_15ml', '8',\n 'reagents')\n tipracks200 = [\n ctx.load_labware('opentrons_96_filtertiprack_200ul', slot)\n for slot in ['10', '11']]\n tipracks20 = [\n ctx.load_labware('opentrons_96_filtertiprack_20ul', slot)\n for slot in ['3', '6', '9']]\n\n # pipettes\n m300 = ctx.load_instrument('p300_multi_gen2', mount_m300,\n tip_racks=tipracks200)\n m20 = ctx.load_instrument('p20_multi_gen2', mount_m20,\n tip_racks=tipracks20)\n\n def pick_up(pip):\n try:\n pip.pick_up_tip()\n except protocol_api.labware.OutOfTipsError:\n ctx.pause(\n f'Replace P{pip.max_volume} pipette tips before resuming.')\n pip.reset_tipracks()\n pip.pick_up_tip()\n\n def wick(pip, well, side=1):\n if well.diameter:\n radius = well.diameter/2\n else:\n radius = well.width/2\n pip.move_to(well.bottom().move(Point(x=side*radius*0.8, z=3)))\n\n def slow_withdraw(pip, well, delay_seconds=1):\n ctx.delay(seconds=delay_seconds)\n ctx.max_speeds['A'] = 25\n ctx.max_speeds['Z'] = 25\n pip.move_to(well.top())\n del ctx.max_speeds['A']\n del ctx.max_speeds['Z']\n\n # reagents\n num_cols = math.ceil(num_samples/5)\n\n standard_diluent = reservoir.rows()[0][0]\n sample_diluent = reservoir.rows()[0][1]\n coated_beads = reservoir.rows()[0][2]\n detection_antibody = reservoir.rows()[0][3]\n # elution_buffer_b = reservoir.rows()[0][4]\n buffer_d = reservoir.rows()[0][5]\n samples = sample_plate.rows()[0][:num_cols]\n\n \"\"\"\n Create and plate standards\n \"\"\"\n # single tip with P300\n default_current = 0.8\n current_modifier = 1/8\n current = default_current*current_modifier\n ctx._hw_manager.hardware._attached_instruments[\n m300._implementation.get_mount()\n ].update_config_item('pick_up_current', current)\n\n tips_standard_dilution = m300.tip_racks[-1].rows()[-1]\n standard_dest_sets = [col[:3] for col in assay_plate.columns()]\n standard_dil_vols = [1000]*3 + [500]*8\n\n # pre-add diluent\n m300.pick_up_tip(tips_standard_dilution[0])\n for vol, d in zip(standard_dil_vols, standard_plate.rows()[0][1:]):\n num_trans = math.ceil(vol/tips_standard_dilution[0].max_volume)\n vol_per_trans = round(vol/num_trans, 1)\n for _ in range(num_trans):\n m300.aspirate(vol_per_trans,\n standard_diluent.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m300, standard_diluent)\n m300.dispense(vol, d.bottom(2))\n slow_withdraw(m300, d)\n\n # perform dilution\n for tip, s, d in zip(tips_standard_dilution,\n standard_plate.rows()[0][:10],\n standard_plate.rows()[0][1:11]):\n num_trans = math.ceil(500/tip.max_volume)\n vol_per_trans = round(vol/num_trans, 1)\n if not m300.has_tip:\n m300.pick_up_tip(tip)\n for n in range(num_trans):\n m300.aspirate(vol_per_trans, s.bottom(2))\n slow_withdraw(m300, s)\n m300.dispense(vol_per_trans, d.bottom(2))\n if n == num_trans - 1 and DO_MIX:\n m300.mix(5, 100, d.bottom(2))\n slow_withdraw(m300, d)\n if DROP:\n m300.drop_tip()\n else:\n m300.return_tip()\n\n if DROP:\n tips_standard_transfer = m300.tip_racks[-1].rows()[-2]\n else:\n tips_standard_transfer = m300.tip_racks[-1].rows()[-1]\n\n # transfer to assay plate\n for tip, s, dest_set in zip(tips_standard_transfer,\n standard_plate.rows()[0],\n standard_dest_sets):\n m300.pick_up_tip(tip)\n num_asp = math.ceil(len(dest_set)*100/tip.max_volume)\n distribution_sets = [\n dest_set[i*2:(i+1)*2]\n if i < num_asp - 1\n else dest_set[i*2:]\n for i in range(num_asp)\n ]\n for d_set in distribution_sets:\n m300.aspirate(100*len(d_set), s.bottom(2))\n for d in d_set:\n m300.dispense(100, d.bottom(1))\n slow_withdraw(m300, d)\n\n # for d in dest_set:\n # m300.aspirate(100, s.bottom(2))\n # slow_withdraw(m300, s)\n # m300.dispense(100, d.bottom(1))\n # slow_withdraw(m300, d)\n if DROP:\n m300.drop_tip()\n else:\n m300.return_tip()\n\n \"\"\"\n Dilute and transfer samples to assay plate\n \"\"\"\n current_modifier = 5/8\n current = default_current*current_modifier\n ctx._hw_manager.hardware._attached_instruments[\n m300._implementation.get_mount()\n ].update_config_item('pick_up_current', current)\n\n if DROP:\n tips_sample_transfer = m300.tip_racks[-1].rows()[1]\n else:\n tips_sample_transfer = m300.tip_racks[-1].rows()[3]\n\n sample_dests = assay_plate.rows()[3][:num_cols]\n num_trans = math.ceil(VOL_SAMPLE/tips_sample_transfer[0].max_volume)\n vol_per_trans = round(VOL_SAMPLE/num_trans, 1)\n for tip, s, d in zip(tips_sample_transfer, samples, sample_dests):\n m300.pick_up_tip(tip)\n for _ in range(num_trans):\n m300.aspirate(vol_per_trans,\n sample_diluent.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m300, sample_diluent)\n m300.dispense(vol_per_trans, s.top(-1))\n if DO_MIX:\n m300.mix(5, 100, s.bottom(2))\n m300.aspirate(100, s.bottom(2))\n slow_withdraw(m300, s)\n m300.dispense(100, d.bottom(2))\n slow_withdraw(m300, d)\n if DROP:\n m300.drop_tip()\n else:\n m300.return_tip()\n\n \"\"\"\n Add coated beads\n \"\"\"\n ctx.pause('Add coated beads to reservoir channel 3.')\n standards_and_samples = assay_plate.rows()[0]\n pick_up(m300)\n for i, d in enumerate(standards_and_samples):\n # pre-air_gap\n m300.aspirate(40, coated_beads.top())\n if i == 0 and DO_MIX:\n for _ in range(5):\n m300.aspirate(100, coated_beads.bottom(2))\n m300.dispense(100, coated_beads.bottom(15))\n ctx.delay(seconds=1)\n m300.aspirate(100, coated_beads.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m300, coated_beads)\n m300.flow_rate.dispense *= 2\n m300.dispense(m300.current_volume, d.top(-1))\n m300.move_to(d.top().move(Point(x=d.diameter/2, z=-1)))\n m300.flow_rate.dispense /= 2\n ctx.delay(seconds=1)\n if DROP:\n m300.drop_tip()\n else:\n m300.return_tip()\n\n ctx.pause('Proceed with Target Capture incubation and Post-Capture Wash.')\n\n \"\"\"\n Detection\n \"\"\"\n standards_and_samples = assay_plate_on_magnet.rows()[0]\n vol_max = m300.tip_racks[0].wells()[0].max_volume - 20 # extra\n num_asp_sets = math.ceil(len(standards_and_samples)*20/vol_max)\n num_dests_per_asp = math.ceil(len(standards_and_samples)/num_asp_sets)\n detection_antibody_sets = [\n standards_and_samples[i*num_dests_per_asp:(i+1)*num_dests_per_asp]\n if i < num_asp_sets - 1\n else standards_and_samples[i*num_dests_per_asp:]\n for i in range(num_asp_sets)\n ]\n pick_up(m300)\n for d_set in detection_antibody_sets:\n # void excess if necessary\n if m300.current_volume > 0:\n m300.dispense(m300.current_volume, detection_antibody.top(-1))\n m300.aspirate(20*len(d_set) + 20,\n detection_antibody.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m20, detection_antibody)\n for d in d_set:\n m300.dispense(20, d.top(-1))\n ctx.delay(seconds=2)\n if DROP:\n m300.drop_tip()\n else:\n m300.return_tip()\n\n ctx.pause('Proceed with Detection incubation and Post-Detection Wash \\\nand Shake.')\n\n \"\"\"\n Elution\n \"\"\"\n # for d in standards_and_samples:\n # pick_up(m20)\n # # reverse pipetting\n # m20.aspirate(15, elution_buffer_b.bottom(Z_OFFSET_RESERVOIR))\n # slow_withdraw(m20, elution_buffer_b)\n # m20.dispense(10, d.bottom(0.5))\n # slow_withdraw(m20, d)\n # if DROP:\n # m20.drop_tip()\n # else:\n # m20.return_tip()\n\n if ELUTION_TYPE == 'Erenna':\n ctx.pause('Proceed with Elution incubation')\n\n # add buffer D to elution plate\n elution_dests = elution_plate.rows()[0][::2]\n pick_up(m20)\n m20.aspirate(5, buffer_d)\n for d in elution_dests:\n # reverse pipetting\n m20.aspirate(10, buffer_d.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m20, buffer_d)\n m20.dispense(10, d.bottom(0.5))\n wick(m20, d)\n slow_withdraw(m20, d)\n\n # void extra volume\n m20.dispense(m20.current_volume, buffer_d)\n slow_withdraw(m20, buffer_d)\n\n m20.flow_rate.aspirate /= 10\n for s, d in zip(standards_and_samples, elution_dests):\n if not m20.has_tip:\n pick_up(m20)\n m20.aspirate(20, s.bottom(0.5))\n slow_withdraw(m20, s)\n m20.dispense(20, d.bottom(0.5))\n slow_withdraw(m20, d)\n if DROP:\n m20.drop_tip()\n else:\n m20.return_tip()\n\n m20.flow_rate.aspirate *= 10\n\n elif ELUTION_TYPE == 'SMCxPRO':\n\n ctx.pause('Proceed with Elution incubation. Place clean assay plate \\\nin slot 5')\n\n # add buffer D to mag plate and transfer elution to 384-plate\n elution_dests_2 = elution_plate.rows()[0][::2]\n for s, d in zip(standards_and_samples, elution_dests_2):\n pick_up(m20)\n\n m20.aspirate(10, buffer_d.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m20, buffer_d)\n m20.dispense(10, s.bottom(0.5))\n if DO_MIX:\n m20.mix(5, 10, s.bottom(0.5))\n m20.flow_rate.aspirate /= 5\n m20.aspirate(20, s.bottom(0.2))\n m20.flow_rate.aspirate *= 5\n slow_withdraw(m20, s)\n m20.dispense(20, d.bottom(0.5))\n slow_withdraw(m20, d)\n if DROP:\n m20.drop_tip()\n else:\n m20.return_tip()\n\n ctx.comment('Proceed with plate reading.')\n", + "content": "import math\nfrom opentrons import protocol_api\nfrom opentrons.types import Point\n\nmetadata = {\n 'protocolName': 'SMC IL-17A High Sensitivity Immunoassay Kit',\n 'author': 'Nick Diehl ',\n 'source': 'Custom Protocol Request',\n 'apiLevel': '2.13'\n}\n\nDO_MIX = True\nDO_INCUBATIONS = True\nDROP = True\nZ_OFFSET_RESERVOIR = 1.0\nVOL_SAMPLE = 100.0\nELUTION_TYPE = 'SMCxPRO' # Errena / SMCxPRO\n\n\ndef run(ctx):\n\n ctx.max_speeds['X'] = 200\n ctx.max_speeds['Y'] = 200\n ctx.max_speeds['Z'] = 200\n ctx.max_speeds['A'] = 200\n\n # [num_samples, mount_m300, m20] = get_values( # noqa: F821\n # 'num_samples', 'mount_m300', 'mount_m20')\n num_samples, mount_m300, mount_m20 = 60, 'left', 'right'\n\n elution_plate = ctx.load_labware('aurora_384_wellplate_100ul', '1',\n 'elution plate')\n sample_plate = ctx.load_labware('axygen_96_wellplate_500ul', '2',\n 'sample preparation plate')\n standard_plate = ctx.load_labware('axygen_96_wellplate_2000ul', '4',\n 'standards plate')\n assay_plate = ctx.load_labware('axygen_96_wellplate_500ul', '5',\n 'assay plate')\n assay_plate_on_magnet = ctx.load_labware(\n 'axygenspheremag_96_wellplate_500ul', '7', 'sphere mag plate')\n reservoir = ctx.load_labware('nest_12_reservoir_15ml', '8',\n 'reagents')\n tipracks200 = [\n ctx.load_labware('opentrons_96_filtertiprack_200ul', slot)\n for slot in ['10', '11']]\n tipracks20 = [\n ctx.load_labware('opentrons_96_filtertiprack_20ul', slot)\n for slot in ['3', '6', '9']]\n\n # pipettes\n m300 = ctx.load_instrument('p300_multi_gen2', mount_m300,\n tip_racks=tipracks200)\n m20 = ctx.load_instrument('p20_multi_gen2', mount_m20,\n tip_racks=tipracks20)\n\n def pick_up(pip):\n try:\n pip.pick_up_tip()\n except protocol_api.labware.OutOfTipsError:\n ctx.pause(\n f'Replace P{pip.max_volume} pipette tips before resuming.')\n pip.reset_tipracks()\n pip.pick_up_tip()\n\n def wick(pip, well, side=1):\n if well.diameter:\n radius = well.diameter/2\n else:\n radius = well.width/2\n pip.move_to(well.bottom().move(Point(x=side*radius*0.8, z=3)))\n\n def slow_withdraw(pip, well, delay_seconds=1):\n ctx.delay(seconds=delay_seconds)\n ctx.max_speeds['A'] = 25\n ctx.max_speeds['Z'] = 25\n pip.move_to(well.top())\n del ctx.max_speeds['A']\n del ctx.max_speeds['Z']\n\n # reagents\n num_cols = math.ceil(num_samples/5)\n\n standard_diluent = reservoir.rows()[0][0]\n sample_diluent = reservoir.rows()[0][1]\n coated_beads = reservoir.rows()[0][2]\n detection_antibody = reservoir.rows()[0][3]\n # elution_buffer_b = reservoir.rows()[0][4]\n buffer_d = reservoir.rows()[0][5]\n samples = sample_plate.rows()[0][:num_cols]\n\n \"\"\"\n Create and plate standards\n \"\"\"\n # single tip with P300\n tips_standard_dilution = m300.tip_racks[-1].rows()[-1]\n standard_dest_sets = [col[:3] for col in assay_plate.columns()]\n standard_dil_vols = [1000]*3 + [500]*8\n\n # pre-add diluent\n m300.pick_up_tip(tips_standard_dilution[0])\n for vol, d in zip(standard_dil_vols, standard_plate.rows()[0][1:]):\n num_trans = math.ceil(vol/tips_standard_dilution[0].max_volume)\n vol_per_trans = round(vol/num_trans, 1)\n for _ in range(num_trans):\n m300.aspirate(vol_per_trans,\n standard_diluent.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m300, standard_diluent)\n m300.dispense(vol, d.bottom(2))\n slow_withdraw(m300, d)\n\n # perform dilution\n for tip, s, d in zip(tips_standard_dilution,\n standard_plate.rows()[0][:10],\n standard_plate.rows()[0][1:11]):\n num_trans = math.ceil(500/tip.max_volume)\n vol_per_trans = round(vol/num_trans, 1)\n if not m300.has_tip:\n m300.pick_up_tip(tip)\n for n in range(num_trans):\n m300.aspirate(vol_per_trans, s.bottom(2))\n slow_withdraw(m300, s)\n m300.dispense(vol_per_trans, d.bottom(2))\n if n == num_trans - 1 and DO_MIX:\n m300.mix(5, 100, d.bottom(2))\n slow_withdraw(m300, d)\n if DROP:\n m300.drop_tip()\n else:\n m300.return_tip()\n\n if DROP:\n tips_standard_transfer = m300.tip_racks[-1].rows()[-2]\n else:\n tips_standard_transfer = m300.tip_racks[-1].rows()[-1]\n\n # transfer to assay plate\n for tip, s, dest_set in zip(tips_standard_transfer,\n standard_plate.rows()[0],\n standard_dest_sets):\n m300.pick_up_tip(tip)\n num_asp = math.ceil(len(dest_set)*100/tip.max_volume)\n distribution_sets = [\n dest_set[i*2:(i+1)*2]\n if i < num_asp - 1\n else dest_set[i*2:]\n for i in range(num_asp)\n ]\n for d_set in distribution_sets:\n m300.aspirate(100*len(d_set), s.bottom(2))\n for d in d_set:\n m300.dispense(100, d.bottom(1))\n slow_withdraw(m300, d)\n\n # for d in dest_set:\n # m300.aspirate(100, s.bottom(2))\n # slow_withdraw(m300, s)\n # m300.dispense(100, d.bottom(1))\n # slow_withdraw(m300, d)\n if DROP:\n m300.drop_tip()\n else:\n m300.return_tip()\n\n \"\"\"\n Dilute and transfer samples to assay plate\n \"\"\"\n\n if DROP:\n tips_sample_transfer = m300.tip_racks[-1].rows()[1]\n else:\n tips_sample_transfer = m300.tip_racks[-1].rows()[3]\n\n sample_dests = assay_plate.rows()[3][:num_cols]\n num_trans = math.ceil(VOL_SAMPLE/tips_sample_transfer[0].max_volume)\n vol_per_trans = round(VOL_SAMPLE/num_trans, 1)\n for tip, s, d in zip(tips_sample_transfer, samples, sample_dests):\n m300.pick_up_tip(tip)\n for _ in range(num_trans):\n m300.aspirate(vol_per_trans,\n sample_diluent.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m300, sample_diluent)\n m300.dispense(vol_per_trans, s.top(-1))\n if DO_MIX:\n m300.mix(5, 100, s.bottom(2))\n m300.aspirate(100, s.bottom(2))\n slow_withdraw(m300, s)\n m300.dispense(100, d.bottom(2))\n slow_withdraw(m300, d)\n if DROP:\n m300.drop_tip()\n else:\n m300.return_tip()\n\n \"\"\"\n Add coated beads\n \"\"\"\n ctx.pause('Add coated beads to reservoir channel 3.')\n standards_and_samples = assay_plate.rows()[0]\n pick_up(m300)\n for i, d in enumerate(standards_and_samples):\n # pre-air_gap\n m300.aspirate(40, coated_beads.top())\n if i == 0 and DO_MIX:\n for _ in range(5):\n m300.aspirate(100, coated_beads.bottom(2))\n m300.dispense(100, coated_beads.bottom(15))\n ctx.delay(seconds=1)\n m300.aspirate(100, coated_beads.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m300, coated_beads)\n m300.flow_rate.dispense *= 2\n m300.dispense(m300.current_volume, d.top(-1))\n m300.move_to(d.top().move(Point(x=d.diameter/2, z=-1)))\n m300.flow_rate.dispense /= 2\n ctx.delay(seconds=1)\n if DROP:\n m300.drop_tip()\n else:\n m300.return_tip()\n\n ctx.pause('Proceed with Target Capture incubation and Post-Capture Wash.')\n\n \"\"\"\n Detection\n \"\"\"\n standards_and_samples = assay_plate_on_magnet.rows()[0]\n vol_max = m300.tip_racks[0].wells()[0].max_volume - 20 # extra\n num_asp_sets = math.ceil(len(standards_and_samples)*20/vol_max)\n num_dests_per_asp = math.ceil(len(standards_and_samples)/num_asp_sets)\n detection_antibody_sets = [\n standards_and_samples[i*num_dests_per_asp:(i+1)*num_dests_per_asp]\n if i < num_asp_sets - 1\n else standards_and_samples[i*num_dests_per_asp:]\n for i in range(num_asp_sets)\n ]\n pick_up(m300)\n for d_set in detection_antibody_sets:\n # void excess if necessary\n if m300.current_volume > 0:\n m300.dispense(m300.current_volume, detection_antibody.top(-1))\n m300.aspirate(20*len(d_set) + 20,\n detection_antibody.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m20, detection_antibody)\n for d in d_set:\n m300.dispense(20, d.top(-1))\n ctx.delay(seconds=2)\n if DROP:\n m300.drop_tip()\n else:\n m300.return_tip()\n\n ctx.pause('Proceed with Detection incubation and Post-Detection Wash \\\nand Shake.')\n\n \"\"\"\n Elution\n \"\"\"\n # for d in standards_and_samples:\n # pick_up(m20)\n # # reverse pipetting\n # m20.aspirate(15, elution_buffer_b.bottom(Z_OFFSET_RESERVOIR))\n # slow_withdraw(m20, elution_buffer_b)\n # m20.dispense(10, d.bottom(0.5))\n # slow_withdraw(m20, d)\n # if DROP:\n # m20.drop_tip()\n # else:\n # m20.return_tip()\n\n if ELUTION_TYPE == 'Erenna':\n ctx.pause('Proceed with Elution incubation')\n\n # add buffer D to elution plate\n elution_dests = elution_plate.rows()[0][::2]\n pick_up(m20)\n m20.aspirate(5, buffer_d)\n for d in elution_dests:\n # reverse pipetting\n m20.aspirate(10, buffer_d.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m20, buffer_d)\n m20.dispense(10, d.bottom(0.5))\n wick(m20, d)\n slow_withdraw(m20, d)\n\n # void extra volume\n m20.dispense(m20.current_volume, buffer_d)\n slow_withdraw(m20, buffer_d)\n\n m20.flow_rate.aspirate /= 10\n for s, d in zip(standards_and_samples, elution_dests):\n if not m20.has_tip:\n pick_up(m20)\n m20.aspirate(20, s.bottom(0.5))\n slow_withdraw(m20, s)\n m20.dispense(20, d.bottom(0.5))\n slow_withdraw(m20, d)\n if DROP:\n m20.drop_tip()\n else:\n m20.return_tip()\n\n m20.flow_rate.aspirate *= 10\n\n elif ELUTION_TYPE == 'SMCxPRO':\n\n ctx.pause('Proceed with Elution incubation. Place clean assay plate \\\nin slot 5')\n\n # add buffer D to mag plate and transfer elution to 384-plate\n elution_dests_2 = elution_plate.rows()[0][::2]\n for s, d in zip(standards_and_samples, elution_dests_2):\n pick_up(m20)\n\n m20.aspirate(10, buffer_d.bottom(Z_OFFSET_RESERVOIR))\n slow_withdraw(m20, buffer_d)\n m20.dispense(10, s.bottom(0.5))\n if DO_MIX:\n m20.mix(5, 10, s.bottom(0.5))\n m20.flow_rate.aspirate /= 5\n m20.aspirate(20, s.bottom(0.2))\n m20.flow_rate.aspirate *= 5\n slow_withdraw(m20, s)\n m20.dispense(20, d.bottom(0.5))\n slow_withdraw(m20, d)\n if DROP:\n m20.drop_tip()\n else:\n m20.return_tip()\n\n ctx.comment('Proceed with plate reading.')\n", "custom_labware_defs": [ { "brand": { diff --git a/protocols/15dc4c/elisa.ot2.apiv2.py b/protocols/15dc4c/elisa.ot2.apiv2.py index 572c7a55b..fcbfe1e3d 100644 --- a/protocols/15dc4c/elisa.ot2.apiv2.py +++ b/protocols/15dc4c/elisa.ot2.apiv2.py @@ -92,13 +92,6 @@ def slow_withdraw(pip, well, delay_seconds=1): Create and plate standards """ # single tip with P300 - default_current = 0.8 - current_modifier = 1/8 - current = default_current*current_modifier - ctx._hw_manager.hardware._attached_instruments[ - m300._implementation.get_mount() - ].update_config_item('pick_up_current', current) - tips_standard_dilution = m300.tip_racks[-1].rows()[-1] standard_dest_sets = [col[:3] for col in assay_plate.columns()] standard_dil_vols = [1000]*3 + [500]*8 @@ -171,11 +164,6 @@ def slow_withdraw(pip, well, delay_seconds=1): """ Dilute and transfer samples to assay plate """ - current_modifier = 5/8 - current = default_current*current_modifier - ctx._hw_manager.hardware._attached_instruments[ - m300._implementation.get_mount() - ].update_config_item('pick_up_current', current) if DROP: tips_sample_transfer = m300.tip_racks[-1].rows()[1]