diff --git a/data/data/fields.csv b/data/data/fields.csv index 40bd4f8c1..be55bf1bd 100644 --- a/data/data/fields.csv +++ b/data/data/fields.csv @@ -548,7 +548,7 @@ include_mastermix_step,1 include_moving_fresh_plate,1 include_multi,1 include_ntc,2 -include_pause,1 +include_pause,2 include_sample_step,1 include_standards_only,1 include_wash1,1 @@ -580,7 +580,9 @@ init_vol_buff1,1 init_vol_buff2,1 init_vol_buff3,1 init_vol_dil,2 +init_vol_meth,1 init_vol_sds,2 +init_vol_standard,1 init_vols_csv,1 initial_denaturation_cycles,1 initial_vol,1 @@ -910,7 +912,7 @@ num_rounds,1 num_row,1 num_rows_a,1 num_rows_b,1 -num_samp,73 +num_samp,74 num_samp_p1,1 num_samp_p2,1 num_samp_plate1,1 @@ -967,7 +969,7 @@ output_labware,1 overage_percent,12 p1000_flow_rate_asp,2 p1000_flow_rate_disp,2 -p1000_mount,36 +p1000_mount,37 p1000_rate,1 p1000_sample_height,1 p1000_single_mount,1 @@ -1003,7 +1005,7 @@ p2num,1 p300_gen,1 p300_mixing_height,1 p300_mnt,3 -p300_mount,156 +p300_mount,157 p300_mount_1,1 p300_multi_mount,7 p300_rate,1 @@ -1329,6 +1331,7 @@ shake_well,1 side_x_radius,1 single_channel_mount,1 single_channel_type,1 +single_dilution,1 single_pip_info,1 size,1 size_select,1 diff --git a/protoBuilds/019968/019968.ot2.apiv2.py.json b/protoBuilds/019968/019968.ot2.apiv2.py.json new file mode 100644 index 000000000..c139fd831 --- /dev/null +++ b/protoBuilds/019968/019968.ot2.apiv2.py.json @@ -0,0 +1,768 @@ +{ + "content": "# flake8: noqa\n\nimport math\n\nmetadata = {\n 'protocolName': 'Methanol Dilution for LCMS Analysis',\n 'author': 'Rami Farawi ',\n 'source': 'Custom Protocol Request',\n 'apiLevel': '2.13'\n}\n\n\ndef run(ctx):\n\n [num_samp, include_pause, single_dilution,\n init_vol_meth, init_vol_standard,\n p300_mount, p1000_mount] = get_values( # noqa: F821\n \"num_samp\", \"include_pause\", \"single_dilution\",\n \"init_vol_meth\", \"init_vol_standard\", \"p300_mount\", \"p1000_mount\")\n\n # num_samp = 30\n # p300_mount = 'left'\n # p1000_mount = 'right'\n # init_vol_standard = 13\n # init_vol_meth = 45\n # include_pause = True\n # single_dilution = False\n\n # labware\n if single_dilution:\n waters_racks = [\n ctx.load_labware('opentrons_24_aluminumblock_generic_2ml_screwcap', # change this\n slot) for slot in [1, 2]]\n\n aluminum_racks = [\n ctx.load_labware('opentrons_24_aluminumblock_generic_2ml_screwcap',\n slot) for slot in [4, 5, 7, 8]]\n\n tuberack = ctx.load_labware('opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical', 11)\n\n tip300 = [ctx.load_labware('opentrons_96_tiprack_300ul', slot)\n for slot in [3, 6]]\n tip1000 = [ctx.load_labware('opentrons_96_tiprack_1000ul', slot)\n for slot in [9]]\n\n else:\n waters_racks = [\n ctx.load_labware('opentrons_24_aluminumblock_generic_2ml_screwcap',\n slot) for slot in [1, 2]]\n\n aluminum_racks = [\n ctx.load_labware('opentrons_24_aluminumblock_generic_2ml_screwcap',\n slot) for slot in [4, 5, 7, 8]]\n\n tuberack = ctx.load_labware('opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical', 11)\n\n tip300 = [ctx.load_labware('opentrons_96_tiprack_300ul', slot)\n for slot in [3, 6]]\n tip1000 = [ctx.load_labware('opentrons_96_tiprack_1000ul', slot)\n for slot in [9]]\n\n # pipettes\n p300 = ctx.load_instrument('p300_single_gen2', p300_mount,\n tip_racks=tip300)\n p1000 = ctx.load_instrument('p1000_single_gen2', p1000_mount,\n tip_racks=tip1000)\n\n # liquid height tracking\n v_naught_standard = init_vol_standard*1000\n v_naught_meth = init_vol_meth*1000\n\n radius_standard = tuberack.rows()[0][0].diameter/2\n radius_meth = tuberack.rows()[0][2].diameter/2\n\n h_naught_standard = 0.85*v_naught_standard/(math.pi*radius_standard**2)\n h_naught_meth = 0.85*v_naught_meth/(math.pi*radius_meth**2)\n\n h_standard = h_naught_standard\n h_meth = h_naught_meth\n\n def adjust_height(vol, standard_or_meth):\n nonlocal h_standard\n nonlocal h_meth\n\n if standard_or_meth == 'standard':\n radius = radius_standard\n elif standard_or_meth == 'meth':\n radius = radius_meth\n\n dh = (vol/(math.pi*radius**2))*1.33\n if standard_or_meth == 'standard':\n h_standard -= dh\n elif standard_or_meth == 'meth':\n h_meth -= dh\n\n if h_standard < 12:\n h_standard = 1\n if h_meth < 12:\n h_meth = 1\n\n # mapping\n methanol = tuberack['A3']\n standard = tuberack['A1']\n empty_sample_tubes = [tube\n for rack in aluminum_racks[:2]\n for row in rack.rows() for tube in row][:num_samp]\n sample_tubes = [tube\n for rack in aluminum_racks[2:]\n for row in rack.rows() for tube in row][:num_samp]\n\n final_tubes = [tube\n for rack in waters_racks\n for row in rack.rows() for tube in row][:num_samp]\n\n # protocol\n if single_dilution:\n ctx.comment('\\n---------------ADDING METHANOL----------------\\n\\n')\n p1000.pick_up_tip()\n p1000.mix(1, 900, methanol.bottom(z=h_meth-5))\n for tube in empty_sample_tubes:\n p1000.aspirate(750, methanol.bottom(z=h_meth))\n p1000.dispense(750, tube.bottom(z=10))\n p1000.move_to(tube.top(z=-3))\n ctx.delay(seconds=2.5)\n p1000.blow_out()\n adjust_height(750, 'meth')\n p1000.drop_tip()\n ctx.comment('\\n\\n')\n\n ctx.comment('\\n---------------ADDING STANDARD----------------\\n\\n')\n p300.pick_up_tip()\n p300.mix(1, 250, standard.bottom(z=h_standard-5))\n for tube in empty_sample_tubes:\n p300.aspirate(150, standard.bottom(z=h_standard))\n p300.dispense(150, tube.top())\n ctx.delay(seconds=2.5)\n p300.blow_out()\n adjust_height(150, 'standard')\n p300.drop_tip()\n ctx.comment('\\n\\n')\n\n ctx.comment('\\n---------------ADDING SAMPLE----------------\\n\\n')\n for s, d in zip(sample_tubes, empty_sample_tubes):\n p300.pick_up_tip()\n p300.aspirate(100, s)\n p300.dispense(100, d)\n p300.drop_tip()\n\n if include_pause:\n ctx.pause(\"Please cap tubes, then select Resume in the app.\")\n\n ctx.comment('\\n---------------ADDING SAMPLE----------------\\n\\n')\n for s, d in zip(empty_sample_tubes, final_tubes):\n p300.pick_up_tip()\n p300.mix(2, 250, s)\n p300.aspirate(200, s)\n p300.dispense(200, d)\n p300.drop_tip()\n\n else:\n ctx.comment('\\n---------------ADDING METHANOL----------------\\n\\n')\n p1000.pick_up_tip()\n p1000.mix(1, 900, methanol.bottom(z=h_meth-5))\n for tube in empty_sample_tubes:\n p1000.aspirate(900, methanol.bottom(z=h_meth))\n p1000.dispense(900, tube.bottom(z=10))\n p1000.move_to(tube.top(z=-3))\n ctx.delay(seconds=2.5)\n p1000.blow_out()\n adjust_height(900, 'meth')\n p1000.drop_tip()\n ctx.comment('\\n\\n')\n\n ctx.comment('\\n---------------ADDING SAMPLE----------------\\n\\n')\n for s, d in zip(sample_tubes, empty_sample_tubes):\n p300.pick_up_tip()\n p300.aspirate(100, s)\n p300.dispense(100, d)\n p300.mix(3, 200, d)\n p300.drop_tip()\n\n if include_pause:\n ctx.pause(\"Please cap tubes, then select Resume in the app.\")\n\n ctx.comment('\\n---------------ADDING METHANOL----------------\\n\\n')\n p1000.pick_up_tip()\n p1000.mix(1, 900, methanol.bottom(z=h_meth-5))\n for tube in final_tubes:\n p1000.aspirate(750, methanol.bottom(z=h_meth))\n p1000.dispense(750, tube.bottom(z=10))\n p1000.move_to(tube.top(z=-3))\n ctx.delay(seconds=2.5)\n p1000.blow_out()\n adjust_height(750, 'meth')\n p1000.drop_tip()\n ctx.comment('\\n\\n')\n\n ctx.comment('\\n---------------ADDING STANDARD----------------\\n\\n')\n p300.pick_up_tip()\n p300.mix(1, 250, standard.bottom(z=h_standard-5))\n for tube in final_tubes:\n p300.aspirate(150, standard.bottom(z=h_standard))\n p300.dispense(150, tube.top())\n ctx.delay(seconds=2.5)\n p300.blow_out()\n adjust_height(150, 'standard')\n p300.drop_tip()\n ctx.comment('\\n\\n')\n\n ctx.comment('\\n---------------ADDING SAMPLE----------------\\n\\n')\n for s, d in zip(empty_sample_tubes, final_tubes):\n p300.pick_up_tip()\n p300.mix(2, 250, s)\n p300.aspirate(100, s)\n p300.dispense(100, d)\n p300.drop_tip()\n", + "custom_labware_defs": [ + { + "brand": { + "brand": "Waters", + "brandId": [ + "700011047" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 128, + "yDimension": 85, + "zDimension": 37 + }, + "groups": [ + { + "brand": { + "brand": "ThermoFisher", + "brandId": [ + "SureStart 6ERV11-03PPC" + ] + }, + "metadata": { + "displayCategory": "tubeRack", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8" + ] + } + ], + "metadata": { + "displayCategory": "tubeRack", + "displayName": "Waters 48 Tube Rack with ThermoFisher 0.3 mL", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "namespace": "custom_beta", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "waters_48_tuberack_300ul", + "quirks": [] + }, + "schemaVersion": 2, + "version": 1, + "wells": { + "A1": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 15, + "y": 77, + "z": 4.8 + }, + "A2": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 29.5, + "y": 77, + "z": 4.8 + }, + "A3": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 44, + "y": 77, + "z": 4.8 + }, + "A4": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 58.5, + "y": 77, + "z": 4.8 + }, + "A5": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 73, + "y": 77, + "z": 4.8 + }, + "A6": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 87.5, + "y": 77, + "z": 4.8 + }, + "A7": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 102, + "y": 77, + "z": 4.8 + }, + "A8": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 116.5, + "y": 77, + "z": 4.8 + }, + "B1": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 15, + "y": 62.5, + "z": 4.8 + }, + "B2": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 29.5, + "y": 62.5, + "z": 4.8 + }, + "B3": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 44, + "y": 62.5, + "z": 4.8 + }, + "B4": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 58.5, + "y": 62.5, + "z": 4.8 + }, + "B5": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 73, + "y": 62.5, + "z": 4.8 + }, + "B6": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 87.5, + "y": 62.5, + "z": 4.8 + }, + "B7": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 102, + "y": 62.5, + "z": 4.8 + }, + "B8": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 116.5, + "y": 62.5, + "z": 4.8 + }, + "C1": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 15, + "y": 48, + "z": 4.8 + }, + "C2": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 29.5, + "y": 48, + "z": 4.8 + }, + "C3": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 44, + "y": 48, + "z": 4.8 + }, + "C4": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 58.5, + "y": 48, + "z": 4.8 + }, + "C5": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 73, + "y": 48, + "z": 4.8 + }, + "C6": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 87.5, + "y": 48, + "z": 4.8 + }, + "C7": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 102, + "y": 48, + "z": 4.8 + }, + "C8": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 116.5, + "y": 48, + "z": 4.8 + }, + "D1": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 15, + "y": 33.5, + "z": 4.8 + }, + "D2": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 29.5, + "y": 33.5, + "z": 4.8 + }, + "D3": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 44, + "y": 33.5, + "z": 4.8 + }, + "D4": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 58.5, + "y": 33.5, + "z": 4.8 + }, + "D5": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 73, + "y": 33.5, + "z": 4.8 + }, + "D6": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 87.5, + "y": 33.5, + "z": 4.8 + }, + "D7": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 102, + "y": 33.5, + "z": 4.8 + }, + "D8": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 116.5, + "y": 33.5, + "z": 4.8 + }, + "E1": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 15, + "y": 19, + "z": 4.8 + }, + "E2": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 29.5, + "y": 19, + "z": 4.8 + }, + "E3": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 44, + "y": 19, + "z": 4.8 + }, + "E4": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 58.5, + "y": 19, + "z": 4.8 + }, + "E5": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 73, + "y": 19, + "z": 4.8 + }, + "E6": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 87.5, + "y": 19, + "z": 4.8 + }, + "E7": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 102, + "y": 19, + "z": 4.8 + }, + "E8": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 116.5, + "y": 19, + "z": 4.8 + }, + "F1": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 15, + "y": 4.5, + "z": 4.8 + }, + "F2": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 29.5, + "y": 4.5, + "z": 4.8 + }, + "F3": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 44, + "y": 4.5, + "z": 4.8 + }, + "F4": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 58.5, + "y": 4.5, + "z": 4.8 + }, + "F5": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 73, + "y": 4.5, + "z": 4.8 + }, + "F6": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 87.5, + "y": 4.5, + "z": 4.8 + }, + "F7": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 102, + "y": 4.5, + "z": 4.8 + }, + "F8": { + "depth": 32.2, + "diameter": 6, + "shape": "circular", + "totalLiquidVolume": 300, + "x": 116.5, + "y": 4.5, + "z": 4.8 + } + } + } + ], + "fields": [ + { + "default": 48, + "label": "Number of Samples", + "name": "num_samp", + "type": "int" + }, + { + "label": "Include pause after adding sample for capping?", + "name": "include_pause", + "options": [ + { + "label": "Yes, include pause", + "value": true + }, + { + "label": "No, keep going", + "value": false + } + ], + "type": "dropDown" + }, + { + "label": "Single or double dilution?", + "name": "single_dilution", + "options": [ + { + "label": "Single", + "value": true + }, + { + "label": "Double", + "value": false + } + ], + "type": "dropDown" + }, + { + "default": 40, + "label": "Initial volume of methanol in 50mL tube (in mL)?", + "name": "init_vol_meth", + "type": "int" + }, + { + "default": 40, + "label": "Initial volume of standard in 50mL tube (in mL)?", + "name": "init_vol_standard", + "type": "int" + }, + { + "label": "P300 Single-Channel Mount", + "name": "p300_mount", + "options": [ + { + "label": "Left", + "value": "left" + }, + { + "label": "Right", + "value": "right" + } + ], + "type": "dropDown" + }, + { + "label": "P1000 Single-Channel Mount", + "name": "p1000_mount", + "options": [ + { + "label": "Right", + "value": "right" + }, + { + "label": "Left", + "value": "left" + } + ], + "type": "dropDown" + } + ], + "instruments": [ + { + "mount": "left", + "name": "p300_single_gen2" + }, + { + "mount": "right", + "name": "p1000_single_gen2" + } + ], + "labware": [ + { + "name": "Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap on 1", + "share": false, + "slot": "1", + "type": "opentrons_24_aluminumblock_generic_2ml_screwcap" + }, + { + "name": "Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap on 2", + "share": false, + "slot": "2", + "type": "opentrons_24_aluminumblock_generic_2ml_screwcap" + }, + { + "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 Generic 2 mL Screwcap on 4", + "share": false, + "slot": "4", + "type": "opentrons_24_aluminumblock_generic_2ml_screwcap" + }, + { + "name": "Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap on 5", + "share": false, + "slot": "5", + "type": "opentrons_24_aluminumblock_generic_2ml_screwcap" + }, + { + "name": "Opentrons 96 Tip Rack 300 \u00b5L on 6", + "share": false, + "slot": "6", + "type": "opentrons_96_tiprack_300ul" + }, + { + "name": "Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap on 7", + "share": false, + "slot": "7", + "type": "opentrons_24_aluminumblock_generic_2ml_screwcap" + }, + { + "name": "Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap on 8", + "share": false, + "slot": "8", + "type": "opentrons_24_aluminumblock_generic_2ml_screwcap" + }, + { + "name": "Opentrons 96 Tip Rack 1000 \u00b5L on 9", + "share": false, + "slot": "9", + "type": "opentrons_96_tiprack_1000ul" + }, + { + "name": "Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical on 11", + "share": false, + "slot": "11", + "type": "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical" + }, + { + "name": "Opentrons Fixed Trash on 12", + "share": false, + "slot": "12", + "type": "opentrons_1_trash_1100ml_fixed" + } + ], + "metadata": { + "apiLevel": "2.13", + "author": "Rami Farawi ", + "protocolName": "Methanol Dilution for LCMS Analysis", + "source": "Custom Protocol Request" + }, + "modules": [] +} \ No newline at end of file diff --git a/protoBuilds/019968/README.json b/protoBuilds/019968/README.json new file mode 100644 index 000000000..d3b642513 --- /dev/null +++ b/protoBuilds/019968/README.json @@ -0,0 +1,32 @@ +{ + "author": "Opentrons", + "categories": { + "Broad Category": [ + "Specific Category" + ] + }, + "deck-setup": "", + "description": "This protocol does stuff!", + "internal": "019968", + "labware": "\nWaters 48 Tube Rack with ThermoFisher 0.3 mL #700011047\nOpentrons 24 Well Aluminum Block with Generic 2 mL Screwcap\nOpentrons 96 Tip Rack 300 \u00b5L\nOpentrons 96 Tip Rack 1000 \u00b5L\nOpentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical\n", + "markdown": { + "author": "[Opentrons](https://opentrons.com/)\n\n\n", + "categories": "* Broad Category\n\t* Specific Category\n\n\n", + "deck-setup": "![deck](https://opentrons-protocol-library-website.s3.amazonaws.com/custom-README-images/019968/deck.png)\n\n\n", + "description": "This protocol does stuff!\n\n\n", + "internal": "019968\n", + "labware": "* Waters 48 Tube Rack with ThermoFisher 0.3 mL #700011047\n* [Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap](https://shop.opentrons.com/collections/hardware-modules/products/aluminum-block-set)\n* [Opentrons 96 Tip Rack 300 \u00b5L](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips)\n* [Opentrons 96 Tip Rack 1000 \u00b5L](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips)\n* [Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical](https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1)\n\n\n", + "notes": "If you have any questions about this protocol, please contact the Protocol Development Team by filling out the [Troubleshooting Survey](https://protocol-troubleshooting.paperform.co/).\n\n\n", + "pipettes": "* [Opentrons P300 Single Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/single-channel-electronic-pipette-p20/)\n* [Opentrons P1000 Single Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/single-channel-electronic-pipette-p20/)\n\n\n", + "process": "1. Input your protocol parameters above.\n2. Download your protocol and unzip if needed.\n3. Upload your custom labware to the [OT App](https://opentrons.com/ot-app) by navigating to `More` > `Custom Labware` > `Add Labware`, and selecting your labware files (.json extensions) if needed.\n4. Upload your protocol file (.py extension) to the [OT App](https://opentrons.com/ot-app) in the `Protocol` tab.\n5. Set up your deck according to the deck map.\n6. Calibrate your labware, tiprack and pipette using the OT App. For calibration tips, check out our [support articles](https://support.opentrons.com/en/collections/1559720-guide-for-getting-started-with-the-ot-2).\n7. Hit \"Run\".\n\n\n", + "protocol-steps": "1. Step 1...\n\n\n", + "reagent-setup": "![reagents](https://opentrons-protocol-library-website.s3.amazonaws.com/custom-README-images/019968/reagents.png)\n\n\n", + "title": "Methanol Dilution for LCMS Analysis" + }, + "notes": "If you have any questions about this protocol, please contact the Protocol Development Team by filling out the Troubleshooting Survey.", + "pipettes": "\nOpentrons P300 Single Channel Electronic Pipette (GEN2)\nOpentrons P1000 Single Channel Electronic Pipette (GEN2)\n", + "process": "\nInput your protocol parameters above.\nDownload your protocol and unzip if needed.\nUpload your custom labware to the OT App by navigating to More > Custom Labware > Add Labware, and selecting your labware files (.json extensions) if needed.\nUpload your protocol file (.py extension) to the OT App in the Protocol tab.\nSet up your deck according to the deck map.\nCalibrate your labware, tiprack and pipette using the OT App. For calibration tips, check out our support articles.\nHit \"Run\".\n", + "protocol-steps": "\nStep 1...\n", + "reagent-setup": "", + "title": "Methanol Dilution for LCMS Analysis" +} \ No newline at end of file diff --git a/protoBuilds/019968/metadata.json b/protoBuilds/019968/metadata.json new file mode 100644 index 000000000..1b884372c --- /dev/null +++ b/protoBuilds/019968/metadata.json @@ -0,0 +1,20 @@ +{ + "files": { + "OT 1 protocol": [], + "OT 2 protocol": [ + "019968.ot2.apiv2.py" + ], + "description": [ + "README.md" + ] + }, + "flags": { + "embedded-app": false, + "feature": false, + "hide-from-search": false, + "skip-tests": false + }, + "path": "protocols/019968", + "slug": "019968", + "status": "ok" +} \ No newline at end of file diff --git a/protocols/019968/019968.ot2.apiv2.py b/protocols/019968/019968.ot2.apiv2.py new file mode 100644 index 000000000..28563bfcd --- /dev/null +++ b/protocols/019968/019968.ot2.apiv2.py @@ -0,0 +1,216 @@ +# flake8: noqa + +import math + +metadata = { + 'protocolName': 'Methanol Dilution for LCMS Analysis', + 'author': 'Rami Farawi ', + 'source': 'Custom Protocol Request', + 'apiLevel': '2.13' +} + + +def run(ctx): + + [num_samp, include_pause, single_dilution, + init_vol_meth, init_vol_standard, + p300_mount, p1000_mount] = get_values( # noqa: F821 + "num_samp", "include_pause", "single_dilution", + "init_vol_meth", "init_vol_standard", "p300_mount", "p1000_mount") + + # num_samp = 30 + # p300_mount = 'left' + # p1000_mount = 'right' + # init_vol_standard = 13 + # init_vol_meth = 45 + # include_pause = True + # single_dilution = False + + # labware + if single_dilution: + waters_racks = [ + ctx.load_labware('waters_48_tuberack_300ul', # change this + slot) for slot in [1, 2]] + + aluminum_racks = [ + ctx.load_labware('opentrons_24_aluminumblock_generic_2ml_screwcap', + slot) for slot in [4, 5, 7, 8]] + + tuberack = ctx.load_labware('opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical', 11) + + tip300 = [ctx.load_labware('opentrons_96_tiprack_300ul', slot) + for slot in [3, 6]] + tip1000 = [ctx.load_labware('opentrons_96_tiprack_1000ul', slot) + for slot in [9]] + + else: + waters_racks = [ + ctx.load_labware('opentrons_24_aluminumblock_generic_2ml_screwcap', + slot) for slot in [1, 2]] + + aluminum_racks = [ + ctx.load_labware('opentrons_24_aluminumblock_generic_2ml_screwcap', + slot) for slot in [4, 5, 7, 8]] + + tuberack = ctx.load_labware('opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical', 11) + + tip300 = [ctx.load_labware('opentrons_96_tiprack_300ul', slot) + for slot in [3, 6]] + tip1000 = [ctx.load_labware('opentrons_96_tiprack_1000ul', slot) + for slot in [9]] + + # pipettes + p300 = ctx.load_instrument('p300_single_gen2', p300_mount, + tip_racks=tip300) + p1000 = ctx.load_instrument('p1000_single_gen2', p1000_mount, + tip_racks=tip1000) + + # liquid height tracking + v_naught_standard = init_vol_standard*1000 + v_naught_meth = init_vol_meth*1000 + + radius_standard = tuberack.rows()[0][0].diameter/2 + radius_meth = tuberack.rows()[0][2].diameter/2 + + h_naught_standard = 0.85*v_naught_standard/(math.pi*radius_standard**2) + h_naught_meth = 0.85*v_naught_meth/(math.pi*radius_meth**2) + + h_standard = h_naught_standard + h_meth = h_naught_meth + + def adjust_height(vol, standard_or_meth): + nonlocal h_standard + nonlocal h_meth + + if standard_or_meth == 'standard': + radius = radius_standard + elif standard_or_meth == 'meth': + radius = radius_meth + + dh = (vol/(math.pi*radius**2))*1.33 + if standard_or_meth == 'standard': + h_standard -= dh + elif standard_or_meth == 'meth': + h_meth -= dh + + if h_standard < 12: + h_standard = 1 + if h_meth < 12: + h_meth = 1 + + # mapping + methanol = tuberack['A3'] + standard = tuberack['A1'] + empty_sample_tubes = [tube + for rack in aluminum_racks[:2] + for row in rack.rows() for tube in row][:num_samp] + sample_tubes = [tube + for rack in aluminum_racks[2:] + for row in rack.rows() for tube in row][:num_samp] + + final_tubes = [tube + for rack in waters_racks + for row in rack.rows() for tube in row][:num_samp] + + # protocol + if single_dilution: + ctx.comment('\n---------------ADDING METHANOL----------------\n\n') + p1000.pick_up_tip() + p1000.mix(1, 900, methanol.bottom(z=h_meth-5)) + for tube in empty_sample_tubes: + p1000.aspirate(750, methanol.bottom(z=h_meth)) + p1000.dispense(750, tube.bottom(z=10)) + p1000.move_to(tube.top(z=-3)) + ctx.delay(seconds=2.5) + p1000.blow_out() + adjust_height(750, 'meth') + p1000.drop_tip() + ctx.comment('\n\n') + + ctx.comment('\n---------------ADDING STANDARD----------------\n\n') + p300.pick_up_tip() + p300.mix(1, 250, standard.bottom(z=h_standard-5)) + for tube in empty_sample_tubes: + p300.aspirate(150, standard.bottom(z=h_standard)) + p300.dispense(150, tube.top()) + ctx.delay(seconds=2.5) + p300.blow_out() + adjust_height(150, 'standard') + p300.drop_tip() + ctx.comment('\n\n') + + ctx.comment('\n---------------ADDING SAMPLE----------------\n\n') + for s, d in zip(sample_tubes, empty_sample_tubes): + p300.pick_up_tip() + p300.aspirate(100, s) + p300.dispense(100, d) + p300.drop_tip() + + if include_pause: + ctx.pause("Please cap tubes, then select Resume in the app.") + + ctx.comment('\n---------------ADDING SAMPLE----------------\n\n') + for s, d in zip(empty_sample_tubes, final_tubes): + p300.pick_up_tip() + p300.mix(2, 250, s) + p300.aspirate(200, s) + p300.dispense(200, d) + p300.drop_tip() + + else: + ctx.comment('\n---------------ADDING METHANOL----------------\n\n') + p1000.pick_up_tip() + p1000.mix(1, 900, methanol.bottom(z=h_meth-5)) + for tube in empty_sample_tubes: + p1000.aspirate(900, methanol.bottom(z=h_meth)) + p1000.dispense(900, tube.bottom(z=10)) + p1000.move_to(tube.top(z=-3)) + ctx.delay(seconds=2.5) + p1000.blow_out() + adjust_height(900, 'meth') + p1000.drop_tip() + ctx.comment('\n\n') + + ctx.comment('\n---------------ADDING SAMPLE----------------\n\n') + for s, d in zip(sample_tubes, empty_sample_tubes): + p300.pick_up_tip() + p300.aspirate(100, s) + p300.dispense(100, d) + p300.mix(3, 200, d) + p300.drop_tip() + + if include_pause: + ctx.pause("Please cap tubes, then select Resume in the app.") + + ctx.comment('\n---------------ADDING METHANOL----------------\n\n') + p1000.pick_up_tip() + p1000.mix(1, 900, methanol.bottom(z=h_meth-5)) + for tube in final_tubes: + p1000.aspirate(750, methanol.bottom(z=h_meth)) + p1000.dispense(750, tube.bottom(z=10)) + p1000.move_to(tube.top(z=-3)) + ctx.delay(seconds=2.5) + p1000.blow_out() + adjust_height(750, 'meth') + p1000.drop_tip() + ctx.comment('\n\n') + + ctx.comment('\n---------------ADDING STANDARD----------------\n\n') + p300.pick_up_tip() + p300.mix(1, 250, standard.bottom(z=h_standard-5)) + for tube in final_tubes: + p300.aspirate(150, standard.bottom(z=h_standard)) + p300.dispense(150, tube.top()) + ctx.delay(seconds=2.5) + p300.blow_out() + adjust_height(150, 'standard') + p300.drop_tip() + ctx.comment('\n\n') + + ctx.comment('\n---------------ADDING SAMPLE----------------\n\n') + for s, d in zip(empty_sample_tubes, final_tubes): + p300.pick_up_tip() + p300.mix(2, 250, s) + p300.aspirate(100, s) + p300.dispense(100, d) + p300.drop_tip() diff --git a/protocols/019968/README.md b/protocols/019968/README.md new file mode 100644 index 000000000..4dbf20f47 --- /dev/null +++ b/protocols/019968/README.md @@ -0,0 +1,52 @@ +# Methanol Dilution for LCMS Analysis + + +### Author +[Opentrons](https://opentrons.com/) + + +## Categories +* Sample Prep + * Plate Filling + + +## Description +This protocol either perfors single, or double dilution of sample with methanol and standard for LCMS analysis. For more details, please see below. + + +### Labware +* Waters 48 Tube Rack with ThermoFisher 0.3 mL #700011047 +* [Opentrons 24 Well Aluminum Block with Generic 2 mL Screwcap](https://shop.opentrons.com/collections/hardware-modules/products/aluminum-block-set) +* [Opentrons 96 Tip Rack 300 µL](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-300ul-tips) +* [Opentrons 96 Tip Rack 1000 µL](https://shop.opentrons.com/collections/opentrons-tips/products/opentrons-1000ul-tips) +* [Opentrons 10 Tube Rack with Falcon 4x50 mL, 6x15 mL Conical](https://shop.opentrons.com/collections/opentrons-tips/products/tube-rack-set-1) + + +### Pipettes +* [Opentrons P300 Single Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/single-channel-electronic-pipette-p20/) +* [Opentrons P1000 Single Channel Electronic Pipette (GEN2)](https://shop.opentrons.com/single-channel-electronic-pipette-p20/) + + +### Deck Setup + +* This is the single dilution deck setup. For the double dilution workflow, replace the waters 48 racks on slots 1 and 2 with Opentrons 24 tuberack aluminum as seen in slots 4 and 5. +![deck](https://opentrons-protocol-library-website.s3.amazonaws.com/custom-README-images/019968/deck.png) + + + +### Process +1. Input your protocol parameters above. +2. Download your protocol and unzip if needed. +3. Upload your custom labware to the [OT App](https://opentrons.com/ot-app) by navigating to `More` > `Custom Labware` > `Add Labware`, and selecting your labware files (.json extensions) if needed. +4. Upload your protocol file (.py extension) to the [OT App](https://opentrons.com/ot-app) in the `Protocol` tab. +5. Set up your deck according to the deck map. +6. Calibrate your labware, tiprack and pipette using the OT App. For calibration tips, check out our [support articles](https://support.opentrons.com/en/collections/1559720-guide-for-getting-started-with-the-ot-2). +7. Hit "Run". + + +### Additional Notes +If you have any questions about this protocol, please contact the Protocol Development Team by filling out the [Troubleshooting Survey](https://protocol-troubleshooting.paperform.co/). + + +###### Internal +019968 diff --git a/protocols/019968/fields.json b/protocols/019968/fields.json new file mode 100644 index 000000000..19c831759 --- /dev/null +++ b/protocols/019968/fields.json @@ -0,0 +1,56 @@ +[ + { + "type": "int", + "label": "Number of Samples", + "name": "num_samp", + "default": 48 + }, + { + "type": "dropDown", + "label": "Include pause after adding sample for capping?", + "name": "include_pause", + "options": [ + {"label": "Yes, include pause", "value": true}, + {"label": "No, keep going", "value": false} + ] + }, + { + "type": "dropDown", + "label": "Single or double dilution?", + "name": "single_dilution", + "options": [ + {"label": "Single", "value": true}, + {"label": "Double", "value": false} + ] + }, + { + "type": "int", + "label": "Initial volume of methanol in 50mL tube (in mL)?", + "name": "init_vol_meth", + "default": 40 + }, + { + "type": "int", + "label": "Initial volume of standard in 50mL tube (in mL)?", + "name": "init_vol_standard", + "default": 40 + }, + { + "type": "dropDown", + "label": "P300 Single-Channel Mount", + "name": "p300_mount", + "options": [ + {"label": "Left", "value": "left"}, + {"label": "Right", "value": "right"} + ] + }, + { + "type": "dropDown", + "label": "P1000 Single-Channel Mount", + "name": "p1000_mount", + "options": [ + {"label": "Right", "value": "right"}, + {"label": "Left", "value": "left"} + ] + } +] diff --git a/protocols/019968/labware/waters_48_tuberack_300ul.json b/protocols/019968/labware/waters_48_tuberack_300ul.json new file mode 100644 index 000000000..2cfe47e3a --- /dev/null +++ b/protocols/019968/labware/waters_48_tuberack_300ul.json @@ -0,0 +1,598 @@ +{ + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8" + ] + ], + "brand": { + "brand": "Waters", + "brandId": [ + "700011047" + ] + }, + "metadata": { + "displayName": "Waters 48 Tube Rack with ThermoFisher 0.3 mL", + "displayCategory": "tubeRack", + "displayVolumeUnits": "µL", + "tags": [] + }, + "dimensions": { + "xDimension": 128, + "yDimension": 85, + "zDimension": 37 + }, + "wells": { + "A1": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 15, + "y": 77, + "z": 4.8 + }, + "B1": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 15, + "y": 62.5, + "z": 4.8 + }, + "C1": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 15, + "y": 48, + "z": 4.8 + }, + "D1": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 15, + "y": 33.5, + "z": 4.8 + }, + "E1": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 15, + "y": 19, + "z": 4.8 + }, + "F1": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 15, + "y": 4.5, + "z": 4.8 + }, + "A2": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 29.5, + "y": 77, + "z": 4.8 + }, + "B2": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 29.5, + "y": 62.5, + "z": 4.8 + }, + "C2": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 29.5, + "y": 48, + "z": 4.8 + }, + "D2": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 29.5, + "y": 33.5, + "z": 4.8 + }, + "E2": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 29.5, + "y": 19, + "z": 4.8 + }, + "F2": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 29.5, + "y": 4.5, + "z": 4.8 + }, + "A3": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 44, + "y": 77, + "z": 4.8 + }, + "B3": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 44, + "y": 62.5, + "z": 4.8 + }, + "C3": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 44, + "y": 48, + "z": 4.8 + }, + "D3": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 44, + "y": 33.5, + "z": 4.8 + }, + "E3": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 44, + "y": 19, + "z": 4.8 + }, + "F3": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 44, + "y": 4.5, + "z": 4.8 + }, + "A4": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 58.5, + "y": 77, + "z": 4.8 + }, + "B4": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 58.5, + "y": 62.5, + "z": 4.8 + }, + "C4": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 58.5, + "y": 48, + "z": 4.8 + }, + "D4": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 58.5, + "y": 33.5, + "z": 4.8 + }, + "E4": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 58.5, + "y": 19, + "z": 4.8 + }, + "F4": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 58.5, + "y": 4.5, + "z": 4.8 + }, + "A5": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 73, + "y": 77, + "z": 4.8 + }, + "B5": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 73, + "y": 62.5, + "z": 4.8 + }, + "C5": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 73, + "y": 48, + "z": 4.8 + }, + "D5": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 73, + "y": 33.5, + "z": 4.8 + }, + "E5": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 73, + "y": 19, + "z": 4.8 + }, + "F5": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 73, + "y": 4.5, + "z": 4.8 + }, + "A6": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 87.5, + "y": 77, + "z": 4.8 + }, + "B6": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 87.5, + "y": 62.5, + "z": 4.8 + }, + "C6": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 87.5, + "y": 48, + "z": 4.8 + }, + "D6": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 87.5, + "y": 33.5, + "z": 4.8 + }, + "E6": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 87.5, + "y": 19, + "z": 4.8 + }, + "F6": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 87.5, + "y": 4.5, + "z": 4.8 + }, + "A7": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 102, + "y": 77, + "z": 4.8 + }, + "B7": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 102, + "y": 62.5, + "z": 4.8 + }, + "C7": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 102, + "y": 48, + "z": 4.8 + }, + "D7": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 102, + "y": 33.5, + "z": 4.8 + }, + "E7": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 102, + "y": 19, + "z": 4.8 + }, + "F7": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 102, + "y": 4.5, + "z": 4.8 + }, + "A8": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 116.5, + "y": 77, + "z": 4.8 + }, + "B8": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 116.5, + "y": 62.5, + "z": 4.8 + }, + "C8": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 116.5, + "y": 48, + "z": 4.8 + }, + "D8": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 116.5, + "y": 33.5, + "z": 4.8 + }, + "E8": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 116.5, + "y": 19, + "z": 4.8 + }, + "F8": { + "depth": 32.2, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 6, + "x": 116.5, + "y": 4.5, + "z": 4.8 + } + }, + "groups": [ + { + "brand": { + "brand": "ThermoFisher", + "brandId": [ + "SureStart 6ERV11-03PPC" + ] + }, + "metadata": { + "wellBottomShape": "v", + "displayCategory": "tubeRack" + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8" + ] + } + ], + "parameters": { + "format": "irregular", + "quirks": [], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "waters_48_tuberack_300ul" + }, + "namespace": "custom_beta", + "version": 1, + "schemaVersion": 2, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + } +} \ No newline at end of file