diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_COLUMN_HappyPath.py b/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_COLUMN_HappyPath.py new file mode 100644 index 00000000000..6fec53ee5b3 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_COLUMN_HappyPath.py @@ -0,0 +1,121 @@ +from opentrons.protocol_api import COLUMN + +metadata = { + "protocolName": "96Channel COLUMN Happy Path", + "description": "96 channel pipette and a COLUMN partial tip configuration.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="B2", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + # Which nozzle to use on the pipette + # Think of the nozzles from above like you are looking down on a 96-well plate + # start="A1" Means the West most nozzle column will pickup from the East most column of the tip rack + # start="A12" Means the East most nozzle column will pickup from the West most column of the tip rack + pipette.configure_nozzle_layout( + style=COLUMN, + start="A1", + tip_racks=[partial_tip_rack], + ) + + source_labware = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Source Labware", + location="C2", + ) + + destination_labware = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Destination Labware", + location="C3", + ) + + volume = 10 # Default volume for actions that require it + + ############################# + # Pipette do work + + # consolidate does not work with the COLUMN configuration + # consolidate only has a single well as a destination + + # transfer the row + pipette.transfer(volume, source_labware["A1"], destination_labware["A1"]) + + # distribute does not work with the COLUMN configuration + # distribute only has a single well as a source + + pipette.pick_up_tip() + pipette.touch_tip(source_labware["A2"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware["A3"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() + + ############################# + # Change the pipette configuration + + pipette.configure_nozzle_layout( + style=COLUMN, + start="A12", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + ############################# + # Pipette do work + + # consolidate does not work with the COLUMN configuration + # consolidate only has a single well as a destination + + # transfer the row + pipette.transfer(volume, source_labware["A5"], destination_labware["A5"]) + + # distribute does not work with the COLUMN configuration + # distribute only has a single well as a source + + pipette.pick_up_tip() + pipette.touch_tip(source_labware["A6"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware["A7"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_PARTIAL_COLUMN_HappyPath.py b/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_PARTIAL_COLUMN_HappyPath.py new file mode 100644 index 00000000000..ac05509875b --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_PARTIAL_COLUMN_HappyPath.py @@ -0,0 +1,125 @@ +from opentrons.protocol_api import PARTIAL_COLUMN + +metadata = { + "protocolName": "96Channel PARTIAL_COLUMN Happy Path", + "description": "96 channel pipette and a PARTIAL_COLUMN partial tip configuration.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="D2", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + # Which nozzle to use on the pipette + # Think of the nozzles from above like you are looking down on a 96-well plate + # Picking up partial columns with the backmost nozzles is currently not supported. Setting + # ``style=PARTIAL_COLUMN`` and either ``start="A1"`` or ``start="A12"`` will raise an error. + # H1 means pipette overhang NE + # H12 means pipette overhang NW + pipette.configure_nozzle_layout( + style=PARTIAL_COLUMN, + start="H1", + end="D1", # pick up the first 5 + tip_racks=[partial_tip_rack], + ) + + source_labware = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Source Labware", + location="C2", + ) + + destination_labware = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Destination Labware", + location="C3", + ) + + volume = 10 # Default volume for actions that require it + + ############################# + # Pipette do work + + # consolidate does not work with the PARTIAL_COLUMN configuration + # consolidate only has a single well as a destination + + # transfer the row + pipette.transfer(volume, source_labware["D1"], destination_labware["D1"]) + + # distribute does not work with the PARTIAL_COLUMN configuration + # distribute only has a single well as a source + + pipette.pick_up_tip() + pipette.touch_tip(source_labware["D2"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware["D3"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() + + ############################# + # Change the pipette configuration + + pipette.configure_nozzle_layout( + style=PARTIAL_COLUMN, + start="H1", # Which nozzle to start with + end="G1", # 2 - the remaining 2 in the column + tip_racks=[partial_tip_rack], + ) + + ############################# + # Pipette do work + + # consolidate does not work with the PARTIAL_COLUMN configuration + # consolidate only has a single well as a destination + + # transfer the row + pipette.transfer(volume, source_labware["B5"], destination_labware["B5"]) + + # distribute does not work with the PARTIAL_COLUMN configuration + # distribute only has a single well as a source + + pipette.pick_up_tip() + pipette.touch_tip(source_labware["B6"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware["B7"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_ROW_HappyPath.py b/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_ROW_HappyPath.py new file mode 100644 index 00000000000..cf253f04bfe --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_ROW_HappyPath.py @@ -0,0 +1,121 @@ +from opentrons.protocol_api import ROW + +metadata = { + "protocolName": "96Channel ROW Happy Path", + "description": "96 channel pipette and a ROW partial tip configuration.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="B1", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + # Which nozzle to use on the pipette + # Think of the nozzles from above like you are looking down on a 96-well plate + # start="A1" Means the North most nozzle row will pickup from the South most row of the tip rack + # start="H1" Means the South most nozzle row will pickup from the North most row of the tip rack + pipette.configure_nozzle_layout( + style=ROW, + start="A1", + tip_racks=[partial_tip_rack], + ) + + source_labware = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Source Labware", + location="C2", + ) + + destination_labware = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Destination Labware", + location="C3", + ) + + volume = 10 # Default volume for actions that require it + + ############################# + # Pipette do work + + # consolidate is does not work with the ROW configuration + # consolidate only has a single well as a destination + + # transfer the row + pipette.transfer(volume, source_labware["A1"], destination_labware["A1"]) + + # distribute does not work with the ROW configuration + # distribute only has a single well as a source + + pipette.pick_up_tip() + pipette.touch_tip(source_labware["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() + + ############################# + # Change the pipette configuration + + pipette.configure_nozzle_layout( + style=ROW, + start="H1", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + ############################# + # Pipette do work + + # consolidate is does not work with the ROW configuration + # consolidate only has a single well as a destination + + # transfer the row + pipette.transfer(volume, source_labware["E1"], destination_labware["E1"]) + + # distribute does not work with the ROW configuration + # distribute only has a single well as a source + + pipette.pick_up_tip() + pipette.touch_tip(source_labware["F1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware["G1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_SINGLE_HappyPathNorthSide.py b/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_SINGLE_HappyPathNorthSide.py new file mode 100644 index 00000000000..ba26d34802d --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_SINGLE_HappyPathNorthSide.py @@ -0,0 +1,143 @@ +from opentrons.protocol_api import SINGLE + +metadata = { + "protocolName": "96Channel SINGLE Happy Path H1 or H12", + "description": "Tip Rack North Clearance for the 96 channel pipette and a SINGLE partial tip configuration.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="D2", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + # Which nozzle to use on the pipette + # Think of the nozzles from above like you are looking down on a 96-well plate + # start="A1" Means the NW nozzle will pickup from the SE corner of the tip rack + # start="A12" Means the SW nozzle will pickup from the NE corner of the tip rack + # start="H1" Means the NE nozzle will pickup from the SW corner of the tip rack + # start="H12" Means the SE nozzle will pickup from the NW corner of the tip rack + pipette.configure_nozzle_layout( + style=SINGLE, + start="H1", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + source_labware_C1 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Source Labware", + location="C1", + ) + + destination_labware_C2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="Liquid Transfer - Destination Labware", + location="C2", + ) + + volume = 10 # Default volume for actions that require it + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_C1["A3"], source_labware_C1["A4"]], + destination_labware_C2["A3"], + ) + + pipette.transfer(volume, source_labware_C1["A6"], source_labware_C1["A6"]) + + pipette.distribute( + 5, + source_labware_C1["A7"], + [destination_labware_C2["A7"], destination_labware_C2["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_C1["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_C1["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() + + ############################# + # Change the pipette configuration + + pipette.configure_nozzle_layout( + style=SINGLE, + start="H12", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + source_labware_C3 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="C3 Source Labware", + location="C3", + ) + + destination_labware_B2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="B2 Destination Labware", + location="B2", + ) + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_C3["A3"], source_labware_C3["A4"]], + destination_labware_B2["A3"], + ) + + pipette.transfer(volume, source_labware_C3["A6"], destination_labware_B2["A6"]) + + pipette.distribute( + 5, + source_labware_C3["A7"], + [destination_labware_B2["A7"], destination_labware_B2["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_C3["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_C3["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_SINGLE_HappyPathSouthSide.py b/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_SINGLE_HappyPathSouthSide.py new file mode 100644 index 00000000000..df49f510afe --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_2_20_96_None_SINGLE_HappyPathSouthSide.py @@ -0,0 +1,143 @@ +from opentrons.protocol_api import SINGLE + +metadata = { + "protocolName": "96Channel SINGLE Happy Path A1 or A12", + "description": "Tip Rack South Clearance for the 96 channel pipette and a SINGLE partial tip configuration.", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.20", +} + + +def run(protocol): + + trash = protocol.load_trash_bin("A3") # must load trash bin + + partial_tip_rack = protocol.load_labware( + load_name="opentrons_flex_96_tiprack_1000ul", + label="Partial Tip Rack", + location="A2", + ) + + pipette = protocol.load_instrument(instrument_name="flex_96channel_1000") + + # Which nozzle to use on the pipette + # Think of the nozzles from above like you are looking down on a 96-well plate + # start="A1" Means the NW nozzle will pickup from the SE corner of the tip rack + # start="A12" Means the SW nozzle will pickup from the NE corner of the tip rack + # start="H1" Means the NE nozzle will pickup from the SW corner of the tip rack + # start="H12" Means the SE nozzle will pickup from the NW corner of the tip rack + pipette.configure_nozzle_layout( + style=SINGLE, + start="A1", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + source_labware_C1 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="C1 Source Labware", + location="C1", + ) + + destination_labware_C2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="C2 Destination Labware", + location="C2", + ) + + volume = 10 # Default volume for actions that require it + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_C1["A3"], source_labware_C1["A4"]], + destination_labware_C2["A3"], + ) + + pipette.transfer(volume, source_labware_C1["A6"], destination_labware_C2["A6"]) + + pipette.distribute( + 5, + source_labware_C1["A7"], + [destination_labware_C2["A7"], destination_labware_C2["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_C1["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_C1["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip() + + ############################# + # Change the pipette configuration + + pipette.configure_nozzle_layout( + style=SINGLE, + start="A12", # Which nozzle to start with + tip_racks=[partial_tip_rack], + ) + + source_labware_B2 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="B2 Source Labware", + location="B2", + ) + + destination_labware_C3 = protocol.load_labware( + load_name="nest_96_wellplate_100ul_pcr_full_skirt", + label="C3 Destination Labware", + location="C3", + ) + + ############################# + # Pipette do work + pipette.consolidate( + [volume, volume], + [source_labware_B2["A3"], source_labware_B2["A4"]], + destination_labware_C3["A3"], + ) + + pipette.transfer(volume, source_labware_B2["A6"], destination_labware_C3["A6"]) + + pipette.distribute( + 5, + source_labware_B2["A7"], + [destination_labware_C3["A7"], destination_labware_C3["A8"]], + ) + + pipette.pick_up_tip() + pipette.touch_tip(source_labware_B2["B1"]) + pipette.drop_tip() + pipette.pick_up_tip() + pipette.home() + pipette.drop_tip() + + pipette.pick_up_tip() + well = source_labware_B2["D1"] + # directly from docs http://sandbox.docs.opentrons.com/edge/v2/new_protocol_api.html#opentrons.protocol_api.InstrumentContext.prepare_to_aspirate + pipette.move_to(well.bottom(z=2)) + pipette.mix(10, 10) + pipette.move_to(well.top(z=5)) + pipette.blow_out() + pipette.prepare_to_aspirate() + pipette.move_to(well.bottom(z=2)) + pipette.aspirate(10, well.bottom(z=2)) + pipette.dispense(10) + pipette.drop_tip()