diff --git a/protoBuilds/052d03/tc.ot2.apiv2.py.json b/protoBuilds/052d03/tc.ot2.apiv2.py.json index 870fd22fa..8233b413f 100644 --- a/protoBuilds/052d03/tc.ot2.apiv2.py.json +++ b/protoBuilds/052d03/tc.ot2.apiv2.py.json @@ -1,1260 +1,1150 @@ { - "content": "import math\nfrom opentrons import protocol_api\nfrom opentrons.types import Point\n\nmetadata = {\n 'apiLevel': '2.14',\n 'protocolName': 'Custom Dilution and PCR',\n 'author': 'Nick Diehl '\n}\n\nDO_THERMOCYCLER = True\n\n\ndef run(ctx):\n\n [num_samples, cp_list, type_molecule,\n type_sample_rack] = get_values( # noqa: F821\n 'num_samples', 'cp_list', 'type_molecule', 'type_sample_rack')\n\n # [num_samples, cp_list, type_molecule] = [24, cp_list_ex, 'pDNA']\n\n # parse\n data = [\n [val.strip().upper() for val in line.split(',')]\n for line in cp_list.splitlines()\n if line and line.split(',')[0].strip()]\n\n num_cols = math.ceil((num_samples)/8)\n try:\n tc = ctx.load_module('thermocyclerModuleV2')\n except: # noqa\n tc = ctx.load_module('thermocycler')\n tc.open_lid()\n tc_plate = tc.load_labware('biorad_96_wellplate_200ul_pcr')\n tipracks300 = [\n ctx.load_labware('opentrons_96_tiprack_300ul', slot)\n for slot in ['3']]\n tipracks20 = [\n ctx.load_labware('opentrons_96_tiprack_20ul', slot)\n for slot in ['6', '9']]\n dil_plate = ctx.load_labware('biorad_96_wellplate_200ul_pcr',\n '5', 'dilution plate')\n res = ctx.load_labware('nest_12_reservoir_15ml', '2')\n tuberack = ctx.load_labware(type_sample_rack, '4')\n mm_plate = ctx.load_labware('biorad_96_aluminumblock_250ul', '1',\n 'mastermix plate')\n\n m300 = ctx.load_instrument(\n 'p300_multi_gen2', 'left', tip_racks=tipracks300)\n p20 = ctx.load_instrument(\n 'p20_single_gen2', 'right', tip_racks=tipracks20)\n\n samples = tuberack.wells()[:num_samples]\n pc = tuberack.wells()[num_samples]\n rxn_mix_1 = res.wells()[0]\n rxn_mix_2 = res.wells()[1]\n diluent = res.wells()[2:6]\n mm = res.wells()[5]\n\n if type_molecule == '401':\n vol_rxn_mix_2 = 50.0\n elif type_molecule == 'pDNA':\n vol_rxn_mix_2 = 90.0\n\n # define liquids\n try:\n rxn_mix_1_liq = ctx.define_liquid(\n name='DNAse',\n description='DNAse',\n display_color='#00FF00',\n )\n rxn_mix_2_liq = ctx.define_liquid(\n name='PK',\n description='PK',\n display_color='#0000FF',\n )\n diluent_liq = ctx.define_liquid(\n name='dilution buffer',\n description='dilution buffer',\n display_color='#FF0000',\n )\n mastermix_liq = ctx.define_liquid(\n name='mastermix',\n description='mastermix',\n display_color='#FBFF00',\n )\n sample_liq = ctx.define_liquid(\n name='sample',\n description='sample, NTC, and DAC',\n display_color='#F300FF',\n )\n pc_liq = ctx.define_liquid(\n name='positive control',\n description='diluted 1:100',\n display_color='#050F5D',\n )\n\n # load liquids\n [s.load_liquid(sample_liq, volume=200/num_samples) for s in samples]\n pc.load_liquid(pc_liq, volume=200)\n if not type_molecule == 'pDNA':\n rxn_mix_1.load_liquid(rxn_mix_1_liq, volume=30*num_cols*8*1.1+2000)\n if not type_molecule == '101':\n rxn_mix_2.load_liquid(\n rxn_mix_2_liq, volume=vol_rxn_mix_2*num_cols*8*1.1+2000)\n mm.load_liquid(mastermix_liq, volume=16.5*len(data)*4*1.1+2000)\n [d.load_liquid(diluent_liq, volume=1200)\n for d in diluent[:math.ceil(num_cols*4/3)]]\n\n except: # noqa\n pass\n\n def pick_up(pip):\n try:\n pip.pick_up_tip()\n except protocol_api.labware.OutOfTipsError:\n ctx.pause('Replace the tips')\n pip.reset_tipracks()\n pip.pick_up_tip()\n\n vol_max_dil = 0.8*diluent[0].max_volume\n vol_current = 0\n dil_tracker = iter(diluent)\n dil_current = next(dil_tracker)\n\n def track_dilution(vol):\n nonlocal vol_current\n nonlocal dil_current\n vol_actual = vol*8 # multi-channel pipette\n if vol_actual + vol_current > vol_max_dil:\n vol_current = 0\n dil_current = next(dil_tracker)\n vol_current += vol_actual\n return dil_current\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.7, z=3)))\n\n def slow_withdraw(pip, well, delay=2.0):\n pip.default_speed /= 16\n ctx.delay(seconds=delay)\n pip.move_to(well.top())\n pip.default_speed *= 16\n\n rxn_mix_1_dests = [tc_plate.rows()[0][i*4+1] for i in range(num_cols)]\n if not type_molecule == 'pDNA':\n # first dilution\n first_dil_dests_m = [tc_plate.rows()[0][i*4] for i in range(num_cols)]\n pick_up(m300)\n vol_dil = 180\n for d in first_dil_dests_m:\n source = track_dilution(vol_dil)\n m300.aspirate(vol_dil, source)\n slow_withdraw(m300, source)\n m300.dispense(vol_dil, d.bottom(5))\n slow_withdraw(m300, d)\n m300.drop_tip()\n\n pick_up(m300)\n for d in rxn_mix_1_dests:\n m300.aspirate(30, rxn_mix_1)\n slow_withdraw(m300, rxn_mix_1)\n m300.dispense(30, d.bottom(2))\n slow_withdraw(m300, d)\n m300.drop_tip()\n\n # transfer sample\n first_dil_cols = [tc_plate.columns()[i*4] for i in range(num_cols)]\n first_dil_dests_s = [\n well for col in first_dil_cols for well in col][:num_samples]\n for i, (s, d) in enumerate(zip(samples, first_dil_dests_s)):\n pick_up(p20)\n p20.aspirate(20, s.bottom(0.5))\n slow_withdraw(p20, s)\n p20.dispense(20, d.bottom(d.depth/2))\n # p20.mix(5, 20, d.bottom(d.depth/2))\n slow_withdraw(p20, d)\n if i % 8 == 0: # row A\n p20.move_to(d.top(2))\n p20.move_to(d.top().move(Point(y=-5, z=2)))\n p20.drop_tip()\n\n # add to mix\n for s, d in zip(first_dil_dests_m, rxn_mix_1_dests):\n pick_up(m300)\n m300.mix(5, 100, s.bottom(s.depth/2))\n m300.aspirate(20, s.bottom(5))\n slow_withdraw(m300, s)\n m300.dispense(20, d.bottom(2))\n m300.mix(5, 20, d.bottom(2))\n slow_withdraw(m300, d)\n m300.drop_tip()\n\n tc.close_lid()\n if DO_THERMOCYCLER:\n tc.set_lid_temperature(105)\n tc.set_block_temperature(37, hold_time_minutes=30)\n tc.open_lid()\n\n else:\n # rxn mix 2\n for d in rxn_mix_1_dests:\n\n pick_up(m300)\n m300.aspirate(vol_rxn_mix_2, rxn_mix_2)\n slow_withdraw(m300, rxn_mix_2)\n m300.dispense(vol_rxn_mix_2, d.bottom(2))\n # m300.mix(5, 20, d.bottom(d.depth/2))\n slow_withdraw(m300, d)\n m300.drop_tip()\n rxn_mix_1_columns = [\n tc_plate.columns()[tc_plate.rows()[0].index(col)]\n for col in rxn_mix_1_dests]\n rxn_mix_1_s = [\n well for col in rxn_mix_1_columns for well in col][:num_samples]\n for s, d in zip(samples, rxn_mix_1_s):\n pick_up(p20)\n p20.aspirate(10, s.bottom(0.5))\n slow_withdraw(p20, s)\n p20.dispense(10, d.top(-5))\n p20.mix(5, 20, d.bottom(d.depth/2))\n slow_withdraw(p20, d)\n p20.drop_tip()\n\n if not type_molecule == '101':\n if type_molecule == '401': # rxn mix 2\n for d in rxn_mix_1_dests:\n pick_up(m300)\n m300.aspirate(50, rxn_mix_2)\n slow_withdraw(m300, rxn_mix_2)\n m300.dispense(50, d.bottom(2))\n m300.mix(5, 20, d.bottom(2), rate=0.5)\n slow_withdraw(m300, d)\n m300.drop_tip()\n\n tc.close_lid()\n if DO_THERMOCYCLER:\n tc.set_block_temperature(55, hold_time_minutes=30)\n tc.set_block_temperature(95, hold_time_minutes=15)\n tc.set_block_temperature(4)\n tc.open_lid()\n tc.deactivate_lid()\n\n dil_sets_tc = [\n tc_plate.rows()[0][i*4+2:i*4+4] for i in range(num_cols)\n ]\n dil_sets_dil = [\n dil_plate.rows()[0][i*4:i*4+4] for i in range(num_cols)\n ]\n dil_sets_all = []\n for set_t, set_d in zip(dil_sets_tc, dil_sets_dil):\n dil_set = set_t + set_d\n dil_sets_all.append(dil_set)\n\n # add diluent to all\n pick_up(m300)\n vol_dil = 180\n for d_set in dil_sets_all:\n for d in d_set:\n source = track_dilution(vol_dil)\n m300.aspirate(vol_dil, source)\n slow_withdraw(m300, source)\n m300.dispense(vol_dil, d.bottom(5))\n slow_withdraw(m300, d)\n\n def mix_high_low(reps, vol, well, h_low, h_high):\n for _ in range(reps):\n m300.aspirate(vol, well.bottom(h_low))\n m300.dispense(vol, well.bottom(h_high))\n\n # perform dilutions\n for i, dil_set in enumerate(dil_sets_all):\n sources = [rxn_mix_1_dests[i]] + dil_set[:len(dil_sets_all[0])-1]\n dests = dil_set\n for s, d in zip(sources, dests):\n if not m300.has_tip:\n pick_up(m300)\n m300.mix(1, 20, s.bottom(5))\n m300.aspirate(20, s.bottom(5))\n slow_withdraw(m300, s)\n m300.dispense(20, d.bottom(d.depth/2))\n mix_high_low(8, 50, d, d.depth/2-2, d.depth/2+3)\n m300.mix(8, 50, d.bottom(d.depth/2))\n slow_withdraw(m300, d)\n m300.drop_tip()\n\n # mm\n mm_dest_sets = [\n mm_plate.rows()[i % 8][(i//8)*4:(i//8 + 1)*4]\n for i in range(len(data)+1)]\n pick_up(p20)\n for d_set in mm_dest_sets:\n for d in d_set:\n p20.aspirate(2, mm.top()) # pre-airgap\n p20.aspirate(16.5, mm)\n slow_withdraw(p20, mm)\n p20.dispense(p20.current_volume, d.bottom(1))\n slow_withdraw(p20, d)\n p20.drop_tip()\n\n # add diluted positive control\n pc_mm_dest_set = mm_dest_sets.pop(2)\n pick_up(p20)\n for d in pc_mm_dest_set:\n if not p20.has_tip:\n pick_up(p20)\n p20.aspirate(2, pc.bottom(0.5)) # pre-airgap\n p20.aspirate(5.5, pc.bottom(0.5))\n slow_withdraw(p20, pc)\n p20.dispense(5.5, d.bottom(2))\n slow_withdraw(p20, d)\n p20.drop_tip()\n\n # cherrypick\n cp_lw_map = {\n 'T': tc_plate,\n 'D': dil_plate\n }\n cp_sources = [\n cp_lw_map[line[1][0]].wells_by_name()[line[0]]\n for line in data]\n for s, d_set in zip(cp_sources, mm_dest_sets):\n for d in d_set:\n pick_up(p20)\n p20.aspirate(2, s.bottom(5)) # pre-airgap\n p20.aspirate(5.5, s.bottom(5))\n slow_withdraw(p20, s)\n p20.dispense(5.5, d.bottom(2))\n slow_withdraw(p20, d)\n p20.drop_tip()\n\n # fill remaining columns if necessary\n num_mm_dest_sets = len(data) + 1 # including PC\n if num_mm_dest_sets % 8 == 0:\n remaining_rows = 0\n else:\n remaining_rows = 8 - num_mm_dest_sets % 8\n mm_dest_sets_blank = [\n mm_plate.rows()[i % 8][(i//8)*4:(i//8 + 1)*4]\n for i in range(num_mm_dest_sets, num_mm_dest_sets+remaining_rows)]\n vol_blank = 22.0\n tip_ref_vol = p20.tip_racks[0].wells()[0].max_volume - 2.0 # vol preairgap\n num_trans = math.ceil(vol_blank/tip_ref_vol)\n vol_per_trans = round(vol_blank/num_trans, 2)\n pick_up(p20)\n for dest_set in mm_dest_sets_blank:\n for d in dest_set:\n for _ in range(num_trans):\n source = track_dilution(vol_per_trans)\n p20.aspirate(2, source.top()) # pre-airgap\n p20.aspirate(vol_per_trans, source)\n slow_withdraw(p20, source)\n p20.dispense(p20.current_volume, d.bottom(2))\n slow_withdraw(p20, d)\n p20.drop_tip()\n\n tc.deactivate_block()\n", - "custom_labware_defs": [ + "content": "import math\nfrom opentrons import protocol_api\nfrom opentrons.types import Point\n\nmetadata = {\n 'apiLevel': '2.14',\n 'protocolName': 'Custom Dilution and PCR',\n 'author': 'Nick Diehl '\n}\n\nDO_THERMOCYCLER = True\n\n\ndef run(ctx):\n\n [num_samples, cp_list, type_molecule,\n type_sample_rack] = get_values( # noqa: F821\n 'num_samples', 'cp_list', 'type_molecule', 'type_sample_rack')\n\n # [num_samples, cp_list, type_molecule] = [24, cp_list_ex, 'pDNA']\n\n # parse\n data = [\n [val.strip().upper() for val in line.split(',')]\n for line in cp_list.splitlines()\n if line and line.split(',')[0].strip()]\n\n num_cols = math.ceil((num_samples)/8)\n try:\n tc = ctx.load_module('thermocyclerModuleV2')\n except: # noqa\n tc = ctx.load_module('thermocycler')\n tc.open_lid()\n tc_plate = tc.load_labware('biorad_96_wellplate_200ul_pcr')\n tipracks300 = [\n ctx.load_labware('opentrons_96_tiprack_300ul', slot)\n for slot in ['3']]\n tipracks20 = [\n ctx.load_labware('opentrons_96_tiprack_20ul', slot)\n for slot in ['6', '9']]\n dil_plate = ctx.load_labware('biorad_96_wellplate_200ul_pcr',\n '5', 'dilution plate')\n res = ctx.load_labware('nest_12_reservoir_15ml', '2')\n tuberack = ctx.load_labware(type_sample_rack, '4')\n mm_plate = ctx.load_labware('biorad_96_aluminumblock_250ul', '1',\n 'mastermix plate')\n\n m300 = ctx.load_instrument(\n 'p300_multi_gen2', 'left', tip_racks=tipracks300)\n p20 = ctx.load_instrument(\n 'p20_single_gen2', 'right', tip_racks=tipracks20)\n\n samples = tuberack.wells()[:num_samples]\n rxn_mix_1 = res.wells()[0]\n rxn_mix_2 = res.wells()[1]\n diluent = res.wells()[2:6]\n mm = res.wells()[5]\n\n if type_molecule == '401':\n vol_rxn_mix_2 = 50.0\n elif type_molecule == 'pDNA':\n vol_rxn_mix_2 = 90.0\n\n # define liquids\n try:\n rxn_mix_1_liq = ctx.define_liquid(\n name='DNAse',\n description='DNAse',\n display_color='#00FF00',\n )\n rxn_mix_2_liq = ctx.define_liquid(\n name='PK',\n description='PK',\n display_color='#0000FF',\n )\n diluent_liq = ctx.define_liquid(\n name='dilution buffer',\n description='dilution buffer',\n display_color='#FF0000',\n )\n mastermix_liq = ctx.define_liquid(\n name='mastermix',\n description='mastermix',\n display_color='#FBFF00',\n )\n sample_liq = ctx.define_liquid(\n name='sample',\n description='sample, NTC, and DAC',\n display_color='#F300FF',\n )\n\n # load liquids\n [s.load_liquid(sample_liq, volume=200/num_samples) for s in samples]\n if not type_molecule == 'pDNA':\n rxn_mix_1.load_liquid(rxn_mix_1_liq, volume=30*num_cols*8*1.1+2000)\n if not type_molecule == '101':\n rxn_mix_2.load_liquid(\n rxn_mix_2_liq, volume=vol_rxn_mix_2*num_cols*8*1.1+2000)\n mm.load_liquid(mastermix_liq, volume=16.5*len(data)*4*1.1+2000)\n [d.load_liquid(diluent_liq, volume=1200)\n for d in diluent[:math.ceil(num_cols*4/3)]]\n\n except: # noqa\n pass\n\n def pick_up(pip):\n try:\n pip.pick_up_tip()\n except protocol_api.labware.OutOfTipsError:\n ctx.pause('Replace the tips')\n pip.reset_tipracks()\n pip.pick_up_tip()\n\n vol_max_dil = 10500\n vol_current = 0\n dil_tracker = iter(diluent)\n dil_current = next(dil_tracker)\n\n def track_dilution(vol):\n nonlocal vol_current\n nonlocal dil_current\n vol_actual = vol*8 # multi-channel pipette\n if vol_actual + vol_current > vol_max_dil:\n vol_current = 0\n dil_current = next(dil_tracker)\n vol_current += vol_actual\n return dil_current\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.7, z=3)))\n\n def slow_withdraw(pip, well, delay=2.0):\n pip.default_speed /= 16\n ctx.delay(seconds=delay)\n pip.move_to(well.top())\n pip.default_speed *= 16\n\n rxn_mix_1_dests = [tc_plate.rows()[0][i*4+1] for i in range(num_cols)]\n if not type_molecule == 'pDNA':\n # first dilution\n first_dil_dests_m = [tc_plate.rows()[0][i*4] for i in range(num_cols)]\n pick_up(m300)\n vol_dil = 180\n for d in first_dil_dests_m:\n source = track_dilution(vol_dil)\n m300.aspirate(vol_dil, source)\n slow_withdraw(m300, source)\n m300.dispense(vol_dil, d.bottom(5))\n slow_withdraw(m300, d)\n m300.drop_tip()\n\n pick_up(m300)\n for d in rxn_mix_1_dests:\n m300.aspirate(30, rxn_mix_1)\n slow_withdraw(m300, rxn_mix_1)\n m300.dispense(30, d.bottom(2))\n slow_withdraw(m300, d)\n m300.drop_tip()\n\n # transfer sample\n first_dil_cols = [tc_plate.columns()[i*4] for i in range(num_cols)]\n first_dil_dests_s = [\n well for col in first_dil_cols for well in col][:num_samples]\n for i, (s, d) in enumerate(zip(samples, first_dil_dests_s)):\n pick_up(p20)\n p20.aspirate(20, s.bottom(0.5))\n slow_withdraw(p20, s)\n p20.dispense(20, d.bottom(d.depth/2))\n # p20.mix(5, 20, d.bottom(d.depth/2))\n slow_withdraw(p20, d)\n if i % 8 == 0: # row A\n p20.move_to(d.top(2))\n p20.move_to(d.top().move(Point(y=-5, z=2)))\n p20.drop_tip()\n\n # add to mix\n for s, d in zip(first_dil_dests_m, rxn_mix_1_dests):\n pick_up(m300)\n m300.mix(5, 100, s.bottom(s.depth/2))\n m300.aspirate(20, s.bottom(5))\n slow_withdraw(m300, s)\n m300.dispense(20, d.bottom(2))\n m300.mix(5, 20, d.bottom(2))\n slow_withdraw(m300, d)\n m300.drop_tip()\n\n tc.close_lid()\n if DO_THERMOCYCLER:\n tc.set_lid_temperature(105)\n tc.set_block_temperature(37, hold_time_minutes=30)\n tc.open_lid()\n\n else:\n # rxn mix 2\n for d in rxn_mix_1_dests:\n\n pick_up(m300)\n m300.aspirate(vol_rxn_mix_2, rxn_mix_2)\n slow_withdraw(m300, rxn_mix_2)\n m300.dispense(vol_rxn_mix_2, d.bottom(2))\n # m300.mix(5, 20, d.bottom(d.depth/2))\n slow_withdraw(m300, d)\n m300.drop_tip()\n rxn_mix_1_columns = [\n tc_plate.columns()[tc_plate.rows()[0].index(col)]\n for col in rxn_mix_1_dests]\n rxn_mix_1_s = [\n well for col in rxn_mix_1_columns for well in col][:num_samples]\n for s, d in zip(samples, rxn_mix_1_s):\n pick_up(p20)\n p20.aspirate(10, s.bottom(0.5))\n slow_withdraw(p20, s)\n p20.dispense(10, d.top(-5))\n p20.mix(5, 20, d.bottom(d.depth/2))\n slow_withdraw(p20, d)\n p20.drop_tip()\n\n if not type_molecule == '101':\n if type_molecule == '401': # rxn mix 2\n for d in rxn_mix_1_dests:\n pick_up(m300)\n m300.aspirate(50, rxn_mix_2)\n slow_withdraw(m300, rxn_mix_2)\n m300.dispense(50, d.bottom(2))\n m300.mix(5, 20, d.bottom(2), rate=0.5)\n slow_withdraw(m300, d)\n m300.drop_tip()\n\n tc.close_lid()\n if DO_THERMOCYCLER:\n tc.set_block_temperature(55, hold_time_minutes=30)\n tc.set_block_temperature(95, hold_time_minutes=15)\n tc.set_block_temperature(4)\n tc.open_lid()\n tc.deactivate_lid()\n\n dil_sets_tc = [\n tc_plate.rows()[0][i*4+2:i*4+4] for i in range(num_cols)\n ]\n dil_sets_dil = [\n dil_plate.rows()[0][i*4:i*4+4] for i in range(num_cols)\n ]\n dil_sets_all = []\n for set_t, set_d in zip(dil_sets_tc, dil_sets_dil):\n dil_set = set_t + set_d\n dil_sets_all.append(dil_set)\n\n # add diluent to all\n pick_up(m300)\n vol_dil = 180\n for d_set in dil_sets_all:\n for d in d_set:\n source = track_dilution(vol_dil)\n m300.aspirate(vol_dil, source)\n slow_withdraw(m300, source)\n m300.dispense(vol_dil, d.bottom(5))\n slow_withdraw(m300, d)\n\n def mix_high_low(reps, vol, well, h_low, h_high):\n for _ in range(reps):\n m300.aspirate(vol, well.bottom(h_low))\n m300.dispense(vol, well.bottom(h_high))\n\n # perform dilutions\n for i, dil_set in enumerate(dil_sets_all):\n sources = [rxn_mix_1_dests[i]] + dil_set[:len(dil_sets_all[0])-1]\n dests = dil_set\n for s, d in zip(sources, dests):\n if not m300.has_tip:\n pick_up(m300)\n m300.mix(1, 20, s.bottom(5))\n m300.aspirate(20, s.bottom(5))\n slow_withdraw(m300, s)\n m300.dispense(20, d.bottom(d.depth/2))\n mix_high_low(8, 50, d, d.depth/2-2, d.depth/2+3)\n m300.mix(8, 50, d.bottom(d.depth/2))\n slow_withdraw(m300, d)\n m300.drop_tip()\n\n # mm\n mm_dest_sets = [\n mm_plate.rows()[i % 8][(i//8)*4:(i//8 + 1)*4]\n for i in range(len(data))]\n pick_up(p20)\n for d_set in mm_dest_sets:\n for d in d_set:\n p20.aspirate(2, mm.top()) # pre-airgap\n p20.aspirate(16.5, mm)\n slow_withdraw(p20, mm)\n p20.dispense(p20.current_volume, d.bottom(1))\n slow_withdraw(p20, d)\n p20.drop_tip()\n\n # # add diluted positive control\n # pc_mm_dest_set = mm_dest_sets.pop(2)\n # pick_up(p20)\n # for d in pc_mm_dest_set:\n # if not p20.has_tip:\n # pick_up(p20)\n # p20.aspirate(2, pc.bottom(0.5)) # pre-airgap\n # p20.aspirate(5.5, pc.bottom(0.5))\n # slow_withdraw(p20, pc)\n # p20.dispense(5.5, d.bottom(2))\n # slow_withdraw(p20, d)\n # p20.drop_tip()\n\n # cherrypick\n cp_lw_map = {\n 'T': tc_plate,\n 'D': dil_plate\n }\n cp_sources = [\n cp_lw_map[line[1][0]].wells_by_name()[line[0]]\n for line in data]\n for s, d_set in zip(cp_sources, mm_dest_sets):\n for d in d_set:\n pick_up(p20)\n p20.aspirate(2, s.bottom(5)) # pre-airgap\n p20.aspirate(5.5, s.bottom(5))\n slow_withdraw(p20, s)\n p20.dispense(5.5, d.bottom(2))\n slow_withdraw(p20, d)\n p20.drop_tip()\n\n # fill remaining columns if necessary\n num_mm_dest_sets = len(data) # including PC\n if num_mm_dest_sets % 8 == 0:\n remaining_rows = 0\n else:\n remaining_rows = 8 - num_mm_dest_sets % 8\n mm_dest_sets_blank = [\n mm_plate.rows()[i % 8][(i//8)*4:(i//8 + 1)*4]\n for i in range(num_mm_dest_sets, num_mm_dest_sets+remaining_rows)]\n vol_blank = 22.0\n tip_ref_vol = p20.tip_racks[0].wells()[0].max_volume - 2.0 # vol preairgap\n num_trans = math.ceil(vol_blank/tip_ref_vol)\n vol_per_trans = round(vol_blank/num_trans, 2)\n pick_up(p20)\n for dest_set in mm_dest_sets_blank:\n for d in dest_set:\n for _ in range(num_trans):\n source = track_dilution(vol_per_trans)\n p20.aspirate(2, source.top()) # pre-airgap\n p20.aspirate(vol_per_trans, source)\n slow_withdraw(p20, source)\n p20.dispense(p20.current_volume, d.bottom(2))\n slow_withdraw(p20, d)\n p20.drop_tip()\n\n tc.deactivate_block()\n", + "custom_labware_defs": [ + { + "brand": { + "brand": "Bio-Rad", + "brandId": ["12001925"] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 26.47 + }, + "groups": [ { - "brand": { - "brand": "Bio-Rad", - "brandId": [ - "12001925" - ] - }, - "cornerOffsetFromSlot": { - "x": 0, - "y": 0, - "z": 0 - }, - "dimensions": { - "xDimension": 127.75, - "yDimension": 85.5, - "zDimension": 26.47 - }, - "groups": [ - { - "metadata": { - "displayCategory": "wellPlate", - "wellBottomShape": "v" - }, - "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": "aluminumBlock", - "displayName": "Bio-Rad 96 Aluminum Block 250 \u00b5L", - "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": "biorad_96_aluminumblock_250ul", - "quirks": [] - }, - "schemaVersion": 2, - "version": 1, - "wells": { - "A1": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 14.38, - "y": 74.25, - "z": 7.08 - }, - "A10": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 95.38, - "y": 74.25, - "z": 7.08 - }, - "A11": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 104.38, - "y": 74.25, - "z": 7.08 - }, - "A12": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 113.38, - "y": 74.25, - "z": 7.08 - }, - "A2": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 23.38, - "y": 74.25, - "z": 7.08 - }, - "A3": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 32.38, - "y": 74.25, - "z": 7.08 - }, - "A4": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 41.38, - "y": 74.25, - "z": 7.08 - }, - "A5": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 50.38, - "y": 74.25, - "z": 7.08 - }, - "A6": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 59.38, - "y": 74.25, - "z": 7.08 - }, - "A7": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 68.38, - "y": 74.25, - "z": 7.08 - }, - "A8": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 77.38, - "y": 74.25, - "z": 7.08 - }, - "A9": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 86.38, - "y": 74.25, - "z": 7.08 - }, - "B1": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 14.38, - "y": 65.25, - "z": 7.08 - }, - "B10": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 95.38, - "y": 65.25, - "z": 7.08 - }, - "B11": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 104.38, - "y": 65.25, - "z": 7.08 - }, - "B12": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 113.38, - "y": 65.25, - "z": 7.08 - }, - "B2": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 23.38, - "y": 65.25, - "z": 7.08 - }, - "B3": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 32.38, - "y": 65.25, - "z": 7.08 - }, - "B4": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 41.38, - "y": 65.25, - "z": 7.08 - }, - "B5": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 50.38, - "y": 65.25, - "z": 7.08 - }, - "B6": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 59.38, - "y": 65.25, - "z": 7.08 - }, - "B7": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 68.38, - "y": 65.25, - "z": 7.08 - }, - "B8": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 77.38, - "y": 65.25, - "z": 7.08 - }, - "B9": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 86.38, - "y": 65.25, - "z": 7.08 - }, - "C1": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 14.38, - "y": 56.25, - "z": 7.08 - }, - "C10": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 95.38, - "y": 56.25, - "z": 7.08 - }, - "C11": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 104.38, - "y": 56.25, - "z": 7.08 - }, - "C12": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 113.38, - "y": 56.25, - "z": 7.08 - }, - "C2": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 23.38, - "y": 56.25, - "z": 7.08 - }, - "C3": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 32.38, - "y": 56.25, - "z": 7.08 - }, - "C4": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 41.38, - "y": 56.25, - "z": 7.08 - }, - "C5": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 50.38, - "y": 56.25, - "z": 7.08 - }, - "C6": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 59.38, - "y": 56.25, - "z": 7.08 - }, - "C7": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 68.38, - "y": 56.25, - "z": 7.08 - }, - "C8": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 77.38, - "y": 56.25, - "z": 7.08 - }, - "C9": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 86.38, - "y": 56.25, - "z": 7.08 - }, - "D1": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 14.38, - "y": 47.25, - "z": 7.08 - }, - "D10": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 95.38, - "y": 47.25, - "z": 7.08 - }, - "D11": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 104.38, - "y": 47.25, - "z": 7.08 - }, - "D12": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 113.38, - "y": 47.25, - "z": 7.08 - }, - "D2": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 23.38, - "y": 47.25, - "z": 7.08 - }, - "D3": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 32.38, - "y": 47.25, - "z": 7.08 - }, - "D4": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 41.38, - "y": 47.25, - "z": 7.08 - }, - "D5": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 50.38, - "y": 47.25, - "z": 7.08 - }, - "D6": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 59.38, - "y": 47.25, - "z": 7.08 - }, - "D7": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 68.38, - "y": 47.25, - "z": 7.08 - }, - "D8": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 77.38, - "y": 47.25, - "z": 7.08 - }, - "D9": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 86.38, - "y": 47.25, - "z": 7.08 - }, - "E1": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 14.38, - "y": 38.25, - "z": 7.08 - }, - "E10": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 95.38, - "y": 38.25, - "z": 7.08 - }, - "E11": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 104.38, - "y": 38.25, - "z": 7.08 - }, - "E12": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 113.38, - "y": 38.25, - "z": 7.08 - }, - "E2": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 23.38, - "y": 38.25, - "z": 7.08 - }, - "E3": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 32.38, - "y": 38.25, - "z": 7.08 - }, - "E4": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 41.38, - "y": 38.25, - "z": 7.08 - }, - "E5": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 50.38, - "y": 38.25, - "z": 7.08 - }, - "E6": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 59.38, - "y": 38.25, - "z": 7.08 - }, - "E7": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 68.38, - "y": 38.25, - "z": 7.08 - }, - "E8": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 77.38, - "y": 38.25, - "z": 7.08 - }, - "E9": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 86.38, - "y": 38.25, - "z": 7.08 - }, - "F1": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 14.38, - "y": 29.25, - "z": 7.08 - }, - "F10": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 95.38, - "y": 29.25, - "z": 7.08 - }, - "F11": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 104.38, - "y": 29.25, - "z": 7.08 - }, - "F12": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 113.38, - "y": 29.25, - "z": 7.08 - }, - "F2": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 23.38, - "y": 29.25, - "z": 7.08 - }, - "F3": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 32.38, - "y": 29.25, - "z": 7.08 - }, - "F4": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 41.38, - "y": 29.25, - "z": 7.08 - }, - "F5": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 50.38, - "y": 29.25, - "z": 7.08 - }, - "F6": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 59.38, - "y": 29.25, - "z": 7.08 - }, - "F7": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 68.38, - "y": 29.25, - "z": 7.08 - }, - "F8": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 77.38, - "y": 29.25, - "z": 7.08 - }, - "F9": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 86.38, - "y": 29.25, - "z": 7.08 - }, - "G1": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 14.38, - "y": 20.25, - "z": 7.08 - }, - "G10": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 95.38, - "y": 20.25, - "z": 7.08 - }, - "G11": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 104.38, - "y": 20.25, - "z": 7.08 - }, - "G12": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 113.38, - "y": 20.25, - "z": 7.08 - }, - "G2": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 23.38, - "y": 20.25, - "z": 7.08 - }, - "G3": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 32.38, - "y": 20.25, - "z": 7.08 - }, - "G4": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 41.38, - "y": 20.25, - "z": 7.08 - }, - "G5": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 50.38, - "y": 20.25, - "z": 7.08 - }, - "G6": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 59.38, - "y": 20.25, - "z": 7.08 - }, - "G7": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 68.38, - "y": 20.25, - "z": 7.08 - }, - "G8": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 77.38, - "y": 20.25, - "z": 7.08 - }, - "G9": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 86.38, - "y": 20.25, - "z": 7.08 - }, - "H1": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 14.38, - "y": 11.25, - "z": 7.08 - }, - "H10": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 95.38, - "y": 11.25, - "z": 7.08 - }, - "H11": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 104.38, - "y": 11.25, - "z": 7.08 - }, - "H12": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 113.38, - "y": 11.25, - "z": 7.08 - }, - "H2": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 23.38, - "y": 11.25, - "z": 7.08 - }, - "H3": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 32.38, - "y": 11.25, - "z": 7.08 - }, - "H4": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 41.38, - "y": 11.25, - "z": 7.08 - }, - "H5": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 50.38, - "y": 11.25, - "z": 7.08 - }, - "H6": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 59.38, - "y": 11.25, - "z": 7.08 - }, - "H7": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 68.38, - "y": 11.25, - "z": 7.08 - }, - "H8": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 77.38, - "y": 11.25, - "z": 7.08 - }, - "H9": { - "depth": 19.39, - "diameter": 5.6, - "shape": "circular", - "totalLiquidVolume": 250, - "x": 86.38, - "y": 11.25, - "z": 7.08 - } - } + "metadata": { + "displayCategory": "wellPlate", + "wellBottomShape": "v" + }, + "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" + ] } - ], - "fields": [ - { - "default": 4, - "label": "number of samples (1-23, excluding PC)", - "name": "num_samples", - "type": "int" + ], + "metadata": { + "displayCategory": "aluminumBlock", + "displayName": "Bio-Rad 96 Aluminum Block 250 \u00b5L", + "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": "biorad_96_aluminumblock_250ul", + "quirks": [] + }, + "schemaVersion": 2, + "version": 1, + "wells": { + "A1": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 14.38, + "y": 74.25, + "z": 7.08 }, - { - "default": "A4,tc\nB4,tc\nC1,dil\nD1,dil\nB1,dil\n", - "label": "cherrypicking input list", - "name": "cp_list", - "type": "textFile" + "A10": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 95.38, + "y": 74.25, + "z": 7.08 }, - { - "label": "molecule type", - "name": "type_molecule", - "options": [ - { - "label": "401", - "value": "401" - }, - { - "label": "101", - "value": "101" - }, - { - "label": "pDNA", - "value": "pDNA" - } - ], - "type": "dropDown" + "A11": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 104.38, + "y": 74.25, + "z": 7.08 }, - { - "label": "sample rack type", - "name": "type_sample_rack", - "options": [ - { - "label": "Opentrons 24 Well Aluminum Block with NEST 1.5 mL Snapcap", - "value": "opentrons_24_aluminumblock_nest_1.5ml_snapcap" - }, - { - "label": "Opentrons 24 Tube Rack with Eppendorf 1.5 mL Safe-Lock Snapcap", - "value": "opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap" - } - ], - "type": "dropDown" - } - ], - "instruments": [ - { - "mount": "left", - "name": "p300_multi_gen2" + "A12": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 113.38, + "y": 74.25, + "z": 7.08 }, - { - "mount": "right", - "name": "p20_single_gen2" - } - ], - "labware": [ - { - "name": "mastermix plate on 1", - "share": false, - "slot": "1", - "type": "biorad_96_aluminumblock_250ul" + "A2": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 23.38, + "y": 74.25, + "z": 7.08 }, - { - "name": "NEST 12 Well Reservoir 15 mL on 2", - "share": false, - "slot": "2", - "type": "nest_12_reservoir_15ml" + "A3": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 32.38, + "y": 74.25, + "z": 7.08 }, - { - "name": "Opentrons 96 Tip Rack 300 \u00b5L on 3", - "share": false, - "slot": "3", - "type": "opentrons_96_tiprack_300ul" + "A4": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 41.38, + "y": 74.25, + "z": 7.08 }, - { - "name": "Opentrons 24 Well Aluminum Block with NEST 1.5 mL Snapcap on 4", - "share": false, - "slot": "4", - "type": "opentrons_24_aluminumblock_nest_1.5ml_snapcap" + "A5": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 50.38, + "y": 74.25, + "z": 7.08 }, - { - "name": "dilution plate on 5", - "share": false, - "slot": "5", - "type": "biorad_96_wellplate_200ul_pcr" + "A6": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 59.38, + "y": 74.25, + "z": 7.08 }, - { - "name": "Opentrons 96 Tip Rack 20 \u00b5L on 6", - "share": false, - "slot": "6", - "type": "opentrons_96_tiprack_20ul" + "A7": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 68.38, + "y": 74.25, + "z": 7.08 + }, + "A8": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 77.38, + "y": 74.25, + "z": 7.08 + }, + "A9": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 86.38, + "y": 74.25, + "z": 7.08 + }, + "B1": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 14.38, + "y": 65.25, + "z": 7.08 + }, + "B10": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 95.38, + "y": 65.25, + "z": 7.08 + }, + "B11": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 104.38, + "y": 65.25, + "z": 7.08 + }, + "B12": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 113.38, + "y": 65.25, + "z": 7.08 + }, + "B2": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 23.38, + "y": 65.25, + "z": 7.08 + }, + "B3": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 32.38, + "y": 65.25, + "z": 7.08 + }, + "B4": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 41.38, + "y": 65.25, + "z": 7.08 + }, + "B5": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 50.38, + "y": 65.25, + "z": 7.08 + }, + "B6": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 59.38, + "y": 65.25, + "z": 7.08 + }, + "B7": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 68.38, + "y": 65.25, + "z": 7.08 + }, + "B8": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 77.38, + "y": 65.25, + "z": 7.08 + }, + "B9": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 86.38, + "y": 65.25, + "z": 7.08 + }, + "C1": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 14.38, + "y": 56.25, + "z": 7.08 + }, + "C10": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 95.38, + "y": 56.25, + "z": 7.08 + }, + "C11": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 104.38, + "y": 56.25, + "z": 7.08 + }, + "C12": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 113.38, + "y": 56.25, + "z": 7.08 + }, + "C2": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 23.38, + "y": 56.25, + "z": 7.08 + }, + "C3": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 32.38, + "y": 56.25, + "z": 7.08 + }, + "C4": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 41.38, + "y": 56.25, + "z": 7.08 + }, + "C5": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 50.38, + "y": 56.25, + "z": 7.08 + }, + "C6": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 59.38, + "y": 56.25, + "z": 7.08 + }, + "C7": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 68.38, + "y": 56.25, + "z": 7.08 + }, + "C8": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 77.38, + "y": 56.25, + "z": 7.08 + }, + "C9": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 86.38, + "y": 56.25, + "z": 7.08 + }, + "D1": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 14.38, + "y": 47.25, + "z": 7.08 + }, + "D10": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 95.38, + "y": 47.25, + "z": 7.08 + }, + "D11": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 104.38, + "y": 47.25, + "z": 7.08 + }, + "D12": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 113.38, + "y": 47.25, + "z": 7.08 + }, + "D2": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 23.38, + "y": 47.25, + "z": 7.08 + }, + "D3": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 32.38, + "y": 47.25, + "z": 7.08 + }, + "D4": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 41.38, + "y": 47.25, + "z": 7.08 + }, + "D5": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 50.38, + "y": 47.25, + "z": 7.08 + }, + "D6": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 59.38, + "y": 47.25, + "z": 7.08 + }, + "D7": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 68.38, + "y": 47.25, + "z": 7.08 + }, + "D8": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 77.38, + "y": 47.25, + "z": 7.08 + }, + "D9": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 86.38, + "y": 47.25, + "z": 7.08 + }, + "E1": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 14.38, + "y": 38.25, + "z": 7.08 + }, + "E10": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 95.38, + "y": 38.25, + "z": 7.08 + }, + "E11": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 104.38, + "y": 38.25, + "z": 7.08 + }, + "E12": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 113.38, + "y": 38.25, + "z": 7.08 + }, + "E2": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 23.38, + "y": 38.25, + "z": 7.08 }, + "E3": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 32.38, + "y": 38.25, + "z": 7.08 + }, + "E4": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 41.38, + "y": 38.25, + "z": 7.08 + }, + "E5": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 50.38, + "y": 38.25, + "z": 7.08 + }, + "E6": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 59.38, + "y": 38.25, + "z": 7.08 + }, + "E7": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 68.38, + "y": 38.25, + "z": 7.08 + }, + "E8": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 77.38, + "y": 38.25, + "z": 7.08 + }, + "E9": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 86.38, + "y": 38.25, + "z": 7.08 + }, + "F1": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 14.38, + "y": 29.25, + "z": 7.08 + }, + "F10": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 95.38, + "y": 29.25, + "z": 7.08 + }, + "F11": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 104.38, + "y": 29.25, + "z": 7.08 + }, + "F12": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 113.38, + "y": 29.25, + "z": 7.08 + }, + "F2": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 23.38, + "y": 29.25, + "z": 7.08 + }, + "F3": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 32.38, + "y": 29.25, + "z": 7.08 + }, + "F4": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 41.38, + "y": 29.25, + "z": 7.08 + }, + "F5": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 50.38, + "y": 29.25, + "z": 7.08 + }, + "F6": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 59.38, + "y": 29.25, + "z": 7.08 + }, + "F7": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 68.38, + "y": 29.25, + "z": 7.08 + }, + "F8": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 77.38, + "y": 29.25, + "z": 7.08 + }, + "F9": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 86.38, + "y": 29.25, + "z": 7.08 + }, + "G1": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 14.38, + "y": 20.25, + "z": 7.08 + }, + "G10": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 95.38, + "y": 20.25, + "z": 7.08 + }, + "G11": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 104.38, + "y": 20.25, + "z": 7.08 + }, + "G12": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 113.38, + "y": 20.25, + "z": 7.08 + }, + "G2": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 23.38, + "y": 20.25, + "z": 7.08 + }, + "G3": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 32.38, + "y": 20.25, + "z": 7.08 + }, + "G4": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 41.38, + "y": 20.25, + "z": 7.08 + }, + "G5": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 50.38, + "y": 20.25, + "z": 7.08 + }, + "G6": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 59.38, + "y": 20.25, + "z": 7.08 + }, + "G7": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 68.38, + "y": 20.25, + "z": 7.08 + }, + "G8": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 77.38, + "y": 20.25, + "z": 7.08 + }, + "G9": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 86.38, + "y": 20.25, + "z": 7.08 + }, + "H1": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 14.38, + "y": 11.25, + "z": 7.08 + }, + "H10": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 95.38, + "y": 11.25, + "z": 7.08 + }, + "H11": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 104.38, + "y": 11.25, + "z": 7.08 + }, + "H12": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 113.38, + "y": 11.25, + "z": 7.08 + }, + "H2": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 23.38, + "y": 11.25, + "z": 7.08 + }, + "H3": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 32.38, + "y": 11.25, + "z": 7.08 + }, + "H4": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 41.38, + "y": 11.25, + "z": 7.08 + }, + "H5": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 50.38, + "y": 11.25, + "z": 7.08 + }, + "H6": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 59.38, + "y": 11.25, + "z": 7.08 + }, + "H7": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 68.38, + "y": 11.25, + "z": 7.08 + }, + "H8": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 77.38, + "y": 11.25, + "z": 7.08 + }, + "H9": { + "depth": 19.39, + "diameter": 5.6, + "shape": "circular", + "totalLiquidVolume": 250, + "x": 86.38, + "y": 11.25, + "z": 7.08 + } + } + } + ], + "fields": [ + { + "default": 4, + "label": "number of samples (1-24, including all controls)", + "name": "num_samples", + "type": "int" + }, + { + "default": "A4,tc\nB4,tc\nC1,dil\nD1,dil\nB1,dil\n", + "label": "cherrypicking input list", + "name": "cp_list", + "type": "textFile" + }, + { + "label": "molecule type", + "name": "type_molecule", + "options": [ { - "name": "Bio-Rad 96 Well Plate 200 \u00b5L PCR on Thermocycler Module on 7", - "share": false, - "slot": "7", - "type": "biorad_96_wellplate_200ul_pcr" + "label": "401", + "value": "401" }, { - "name": "Opentrons 96 Tip Rack 20 \u00b5L on 9", - "share": false, - "slot": "9", - "type": "opentrons_96_tiprack_20ul" + "label": "101", + "value": "101" }, { - "name": "Opentrons Fixed Trash on 12", - "share": false, - "slot": "12", - "type": "opentrons_1_trash_1100ml_fixed" + "label": "pDNA", + "value": "pDNA" } - ], - "metadata": { - "apiLevel": "2.14", - "author": "Nick Diehl ", - "protocolName": "Custom Dilution and PCR" + ], + "type": "dropDown" }, - "modules": [ + { + "label": "sample rack type", + "name": "type_sample_rack", + "options": [ { - "name": "ThermocyclerContext at Thermocycler Module on 7 lw Bio-Rad 96 Well Plate 200 \u00b5L PCR on Thermocycler Module on 7", - "share": false, - "slot": "7", - "type": "thermocycler" + "label": "Opentrons 24 Well Aluminum Block with NEST 1.5 mL Snapcap", + "value": "opentrons_24_aluminumblock_nest_1.5ml_snapcap" + }, + { + "label": "Opentrons 24 Tube Rack with Eppendorf 1.5 mL Safe-Lock Snapcap", + "value": "opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap" } - ] -} \ No newline at end of file + ], + "type": "dropDown" + } + ], + "instruments": [ + { + "mount": "left", + "name": "p300_multi_gen2" + }, + { + "mount": "right", + "name": "p20_single_gen2" + } + ], + "labware": [ + { + "name": "mastermix plate on 1", + "share": false, + "slot": "1", + "type": "biorad_96_aluminumblock_250ul" + }, + { + "name": "NEST 12 Well Reservoir 15 mL on 2", + "share": false, + "slot": "2", + "type": "nest_12_reservoir_15ml" + }, + { + "name": "Opentrons 96 Tip Rack 300 \u00b5L on 3", + "share": false, + "slot": "3", + "type": "opentrons_96_tiprack_300ul" + }, + { + "name": "Opentrons 24 Well Aluminum Block with NEST 1.5 mL Snapcap on 4", + "share": false, + "slot": "4", + "type": "opentrons_24_aluminumblock_nest_1.5ml_snapcap" + }, + { + "name": "dilution plate on 5", + "share": false, + "slot": "5", + "type": "biorad_96_wellplate_200ul_pcr" + }, + { + "name": "Opentrons 96 Tip Rack 20 \u00b5L on 6", + "share": false, + "slot": "6", + "type": "opentrons_96_tiprack_20ul" + }, + { + "name": "Bio-Rad 96 Well Plate 200 \u00b5L PCR on Thermocycler Module on 7", + "share": false, + "slot": "7", + "type": "biorad_96_wellplate_200ul_pcr" + }, + { + "name": "Opentrons 96 Tip Rack 20 \u00b5L on 9", + "share": false, + "slot": "9", + "type": "opentrons_96_tiprack_20ul" + }, + { + "name": "Opentrons Fixed Trash on 12", + "share": false, + "slot": "12", + "type": "opentrons_1_trash_1100ml_fixed" + } + ], + "metadata": { + "apiLevel": "2.14", + "author": "Nick Diehl ", + "protocolName": "Custom Dilution and PCR" + }, + "modules": [ + { + "name": "ThermocyclerContext at Thermocycler Module on 7 lw Bio-Rad 96 Well Plate 200 \u00b5L PCR on Thermocycler Module on 7", + "share": false, + "slot": "7", + "type": "thermocycler" + } + ] +} diff --git a/protocols/052d03/fields.json b/protocols/052d03/fields.json index 7b4d0a55e..44c7b93a0 100644 --- a/protocols/052d03/fields.json +++ b/protocols/052d03/fields.json @@ -1,33 +1,39 @@ [ - { - "type": "int", - "label": "number of samples (1-23, excluding PC)", - "name": "num_samples", - "default": 4 - }, - { - "type": "textFile", - "label": "cherrypicking input list", - "name": "cp_list", - "default": "A4,tc\nB4,tc\nC1,dil\nD1,dil\nB1,dil\n" - }, - { - "type": "dropDown", - "label": "molecule type", - "name": "type_molecule", - "options": [ - { "label": "401", "value": "401"}, - { "label": "101", "value": "101"}, - { "label": "pDNA", "value": "pDNA"} - ] - }, - { - "type": "dropDown", - "label": "sample rack type", - "name": "type_sample_rack", - "options": [ - { "label": "Opentrons 24 Well Aluminum Block with NEST 1.5 mL Snapcap", "value": "opentrons_24_aluminumblock_nest_1.5ml_snapcap"}, - { "label": "Opentrons 24 Tube Rack with Eppendorf 1.5 mL Safe-Lock Snapcap", "value": "opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap"} - ] - } -] \ No newline at end of file + { + "type": "int", + "label": "number of samples (1-24, including all controls)", + "name": "num_samples", + "default": 4 + }, + { + "type": "textFile", + "label": "cherrypicking input list", + "name": "cp_list", + "default": "A4,tc\nB4,tc\nC1,dil\nD1,dil\nB1,dil\n" + }, + { + "type": "dropDown", + "label": "molecule type", + "name": "type_molecule", + "options": [ + { "label": "401", "value": "401" }, + { "label": "101", "value": "101" }, + { "label": "pDNA", "value": "pDNA" } + ] + }, + { + "type": "dropDown", + "label": "sample rack type", + "name": "type_sample_rack", + "options": [ + { + "label": "Opentrons 24 Well Aluminum Block with NEST 1.5 mL Snapcap", + "value": "opentrons_24_aluminumblock_nest_1.5ml_snapcap" + }, + { + "label": "Opentrons 24 Tube Rack with Eppendorf 1.5 mL Safe-Lock Snapcap", + "value": "opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap" + } + ] + } +] diff --git a/protocols/052d03/tc.ot2.apiv2.py b/protocols/052d03/tc.ot2.apiv2.py index c2318a6d9..e5870f376 100644 --- a/protocols/052d03/tc.ot2.apiv2.py +++ b/protocols/052d03/tc.ot2.apiv2.py @@ -51,7 +51,6 @@ def run(ctx): 'p20_single_gen2', 'right', tip_racks=tipracks20) samples = tuberack.wells()[:num_samples] - pc = tuberack.wells()[num_samples] rxn_mix_1 = res.wells()[0] rxn_mix_2 = res.wells()[1] diluent = res.wells()[2:6] @@ -89,15 +88,9 @@ def run(ctx): description='sample, NTC, and DAC', display_color='#F300FF', ) - pc_liq = ctx.define_liquid( - name='positive control', - description='diluted 1:100', - display_color='#050F5D', - ) # load liquids [s.load_liquid(sample_liq, volume=200/num_samples) for s in samples] - pc.load_liquid(pc_liq, volume=200) if not type_molecule == 'pDNA': rxn_mix_1.load_liquid(rxn_mix_1_liq, volume=30*num_cols*8*1.1+2000) if not type_molecule == '101': @@ -291,7 +284,7 @@ def mix_high_low(reps, vol, well, h_low, h_high): # mm mm_dest_sets = [ mm_plate.rows()[i % 8][(i//8)*4:(i//8 + 1)*4] - for i in range(len(data)+1)] + for i in range(len(data))] pick_up(p20) for d_set in mm_dest_sets: for d in d_set: @@ -302,18 +295,18 @@ def mix_high_low(reps, vol, well, h_low, h_high): slow_withdraw(p20, d) p20.drop_tip() - # add diluted positive control - pc_mm_dest_set = mm_dest_sets.pop(2) - pick_up(p20) - for d in pc_mm_dest_set: - if not p20.has_tip: - pick_up(p20) - p20.aspirate(2, pc.bottom(0.5)) # pre-airgap - p20.aspirate(5.5, pc.bottom(0.5)) - slow_withdraw(p20, pc) - p20.dispense(5.5, d.bottom(2)) - slow_withdraw(p20, d) - p20.drop_tip() + # # add diluted positive control + # pc_mm_dest_set = mm_dest_sets.pop(2) + # pick_up(p20) + # for d in pc_mm_dest_set: + # if not p20.has_tip: + # pick_up(p20) + # p20.aspirate(2, pc.bottom(0.5)) # pre-airgap + # p20.aspirate(5.5, pc.bottom(0.5)) + # slow_withdraw(p20, pc) + # p20.dispense(5.5, d.bottom(2)) + # slow_withdraw(p20, d) + # p20.drop_tip() # cherrypick cp_lw_map = { @@ -334,7 +327,7 @@ def mix_high_low(reps, vol, well, h_low, h_high): p20.drop_tip() # fill remaining columns if necessary - num_mm_dest_sets = len(data) + 1 # including PC + num_mm_dest_sets = len(data) # including PC if num_mm_dest_sets % 8 == 0: remaining_rows = 0 else: