示例#1
0
def labware_setup(hardware):
    from opentrons import containers, instruments

    tip_racks = \
        [containers.load('opentrons-tiprack-300ul', slot, slot)
         for slot in ['1', '4']]
    plates = \
        [containers.load('96-flat', slot, slot) for slot in ['2', '5']]

    p50 = instruments.P50_Multi(
        mount='right', tip_racks=tip_racks)

    p1000 = instruments.P1000_Single(
        mount='left', tip_racks=tip_racks)

    commands = [
        {
            'location': plates[0][0],
            'instrument': p50
        },
        {
            'location': plates[1]
        },
        {
            'locations': [plates[0][0], plates[1]],
            'instrument': p1000
        }
    ]

    return (p50, p1000), tip_racks, plates, commands
示例#2
0
def run_custom_protocol(
    well_volume: float = 1.0,
    pipette_type: StringSelection('p300-Single', 'p50-Single', 'p10-Single',
                                  'p300-Multi', 'p50-Multi',
                                  'p10-Multi') = 'p300-Single'):
    pip_name = pipette_type.split('-')  # Check which pipette type

    if pipette_type == 'p300-Single':
        pipette = instruments.P300_Single(mount='left', tip_racks=[tiprack])
    elif pipette_type == 'p50-Single':
        pipette = instruments.P50_Single(mount='left', tip_racks=[tiprack])
    elif pipette_type == 'p10-Single':
        pipette = instruments.P10_Single(mount='left', tip_racks=[tiprack])
    elif pipette_type == 'p300-Multi':
        pipette = instruments.P300_Multi(mount='left', tip_racks=[tiprack])
    elif pipette_type == 'p50-Multi':
        pipette = instruments.P50_Multi(mount='left', tip_racks=[tiprack])
    elif pipette_type == 'p10-Multi':
        pipette = instruments.P10_Multi(mount='left', tip_racks=[tiprack])

    alternating_wells = []
    for column in plate.cols():
        if pip_name[1] == 'Multi':
            alternating_wells.append(column.wells('A'))
            alternating_wells.append(column.wells('B'))
        else:
            alternating_wells.append(column.wells('A', length=8, step=2))
            alternating_wells.append(column.wells('B', length=8, step=2))

    pipette.distribute(well_volume, trough.wells('A1'), alternating_wells)
示例#3
0
 def mount_pipette(pipette_type, mount, tiprack_slot):
     if pipette_type == 'p10-multi':
         tip_rack = [
             labware.load('tiprack-10ul', slot) for slot in tiprack_slot
         ]
         pipette = instruments.P10_Multi(mount=mount, tip_racks=tip_rack)
     elif pipette_type == 'p50-multi':
         tip_rack = [
             labware.load('opentrons-tiprack-300ul', slot)
             for slot in tiprack_slot
         ]
         pipette = instruments.P50_Multi(mount=mount, tip_racks=tip_rack)
     else:
         tip_rack = [
             labware.load('opentrons-tiprack-300ul', slot)
             for slot in tiprack_slot
         ]
         pipette = instruments.P300_Multi(mount=mount, tip_racks=tip_rack)
     return pipette
示例#4
0
#pipetting dead volumes 
small_aspiration_extra = 10 #ul
large_aspiration_extra = 50 #ul

#temporary variable to hold the current reaction volume
#reaction_volume
reaction_volume = sample_volume

#reagent IDs
end_mix = enzrack.wells('A1').bottom()
lig_mix = enzrack.wells('A2').bottom()

#pipettor(s)
p50 = instruments.P50_Multi(
	mount='right',
	tip_racks=[p200rack, p200rack2],
	aspirate_flow_rate=60,
	dispense_flow_rate=60)

p300 = instruments.P300_Multi(
	mount='left',
	tip_racks=[p200rack3, p200rack4],
	aspirate_flow_rate=60,
    dispense_flow_rate=60)

#TEMPORARY DEF: fix robot gantry speed reset after home() (pending fix from Opentrons)
def homehead():
	robot.home()
	robot.head_speed(x=70, y=70, z=70, a=70, b=50, c=50)
	
#magnetic block selection protocol 
示例#5
0
def run_custom_protocol(pipette_type: StringSelection(
    'p300_Multi', 'p50_Multi', 'p10_Multi', 'p1000_Single', 'p300_Single',
    'p50_Single', 'p10_Single') = 'p300_Multi',
                        pipette_mount: StringSelection('left',
                                                       'right') = 'left',
                        sample_number: int = 16,
                        PCR_volume: float = 20,
                        bead_ratio: float = 1.8,
                        elution_buffer_volume: float = 20):

    incubation_time = 300
    settling_time = 50
    drying_time = 5
    total_tips = sample_number * 8
    tiprack_num = total_tips // 96 + (1 if total_tips % 96 > 0 else 0)
    slots = ['3', '5', '6', '8', '9', '10', '11'][:tiprack_num]

    if pipette_type == 'p1000_Single':
        tipracks = [labware.load('tiprack-1000ul', slot) for slot in slots]
        pipette = instruments.P1000_Single(mount=pipette_mount,
                                           tip_racks=tipracks)

    elif pipette_type == 'p300_Single':
        tipracks = [labware.load('tiprack-200ul', slot) for slot in slots]
        pipette = instruments.P300_Single(mount=pipette_mount,
                                          tip_racks=tipracks)

    elif pipette_type == 'p50_Single':
        tipracks = [labware.load('tiprack-200ul', slot) for slot in slots]
        pipette = instruments.P50_Single(mount=pipette_mount,
                                         tip_racks=tipracks)

    elif pipette_type == 'p10_Single':
        tipracks = [labware.load('tiprack-10ul', slot) for slot in slots]
        pipette = instruments.P10_Single(mount=pipette_mount,
                                         tip_racks=tipracks)

    elif pipette_type == 'p10_Multi':
        tipracks = [labware.load('tiprack-10ul', slot) for slot in slots]
        pipette = instruments.P10_Multi(mount=pipette_mount,
                                        tip_racks=tipracks)

    elif pipette_type == 'p50_Multi':
        tipracks = [labware.load('tiprack-200ul', slot) for slot in slots]
        pipette = instruments.P50_Multi(mount=pipette_mount,
                                        tip_racks=tipracks)

    elif pipette_type == 'p300_Multi':
        tipracks = [labware.load('tiprack-200ul', slot) for slot in slots]
        pipette = instruments.P300_Multi(mount=pipette_mount,
                                         tip_racks=tipracks)

    mode = pipette_type.split('_')[1]
    if mode == 'Single':
        if sample_number <= 5:
            reagent_container = labware.load('opentrons-tuberack-2ml-screwcap',
                                             '7')
            liquid_waste = labware.load('trough-12row', '5').wells('A12')

        else:
            reagent_container = labware.load('trough-12row', '7')
            liquid_waste = reagent_container.wells('A12')
        samples = [well for well in mag_plate.wells()[:sample_number]]
        samples_top = [well.top() for well in samples]
        output = [well for well in output_plate.wells()[:sample_number]]

    else:
        reagent_container = labware.load('trough-12row', '7')
        liquid_waste = reagent_container.wells('A12')
        col_num = sample_number // 8 + (1 if sample_number % 8 > 0 else 0)
        samples = [col for col in mag_plate.cols()[:col_num]]
        samples_top = [well.top() for well in mag_plate.rows(0)[:col_num]]
        output = [col for col in output_plate.cols()[:col_num]]

    # Define reagents and liquid waste
    beads = reagent_container.wells(0)
    ethanol = reagent_container.wells(1)
    elution_buffer = reagent_container.wells(2)

    # Define bead and mix volume to resuspend beads
    bead_volume = PCR_volume * bead_ratio
    if mode == 'Single':
        if bead_volume * sample_number > pipette.max_volume:
            mix_vol = pipette.max_volume
        else:
            mix_vol = bead_volume * sample_number
    else:
        if bead_volume * col_num > pipette.max_volume:
            mix_vol = pipette.max_volume
        else:
            mix_vol = bead_volume * col_num
    total_vol = bead_volume + PCR_volume + 15
    mix_voltarget = PCR_volume + 10

    # Disengage MagDeck
    mag_deck.disengage()

    # Mix Speed
    pipette.set_flow_rate(aspirate=180, dispense=180)

    # Mix beads and PCR samples
    for target in samples:
        pipette.set_flow_rate(aspirate=180, dispense=180)
        pipette.pick_up_tip()
        # Slow down head speed 0.5X for bead handling
        pipette.mix(25, mix_vol, beads)
        max_speed_per_axis = {
            'x': (50),
            'y': (50),
            'z': (50),
            'a': (10),
            'b': (10),
            'c': (10)
        }
        robot.head_speed(combined_speed=max(max_speed_per_axis.values()),
                         **max_speed_per_axis)

        pipette.set_flow_rate(aspirate=10, dispense=10)
        pipette.transfer(bead_volume,
                         beads,
                         target,
                         air_gap=0,
                         new_tip='never')
        pipette.set_flow_rate(aspirate=50, dispense=50)
        pipette.mix(40, mix_voltarget, target)
        pipette.blow_out()
        max_speed_per_axis = {
            'x': (600),
            'y': (400),
            'z': (100),
            'a': (100),
            'b': (40),
            'c': (40)
        }
        robot.head_speed(combined_speed=max(max_speed_per_axis.values()),
                         **max_speed_per_axis)

        pipette.drop_tip()

        # Return robot head speed to the defaults for all axes
        max_speed_per_axis = {
            'x': (600),
            'y': (400),
            'z': (100),
            'a': (100),
            'b': (40),
            'c': (40)
        }
        robot.head_speed(combined_speed=max(max_speed_per_axis.values()),
                         **max_speed_per_axis)

    # Incubate beads and PCR product at RT for 5 minutes
    robot.comment("Incubating the beads and PCR products at room temperature \
for 5 minutes. Protocol will resume automatically.")
    pipette.delay(seconds=incubation_time)

    # Engage MagDeck and Magnetize
    robot._driver.run_flag.wait()
    mag_deck.engage()
    robot.comment("Delaying for " + str(settling_time) +
                  " seconds for beads to \
settle.")
    pipette.delay(seconds=settling_time)

    # Remove supernatant from magnetic beads
    pipette.set_flow_rate(aspirate=25, dispense=120)
    for target in samples:
        pipette.transfer(total_vol,
                         target.bottom(0.7),
                         liquid_waste.top(),
                         blow_out=True)

    # Wash beads twice with 70% ethanol

    air_vol = pipette.max_volume * 0.1

    for cycle in range(2):
        pipette.pick_up_tip()
        for target in samples_top:
            pipette.transfer(185,
                             ethanol,
                             target,
                             air_gap=air_vol,
                             new_tip='never')
        robot.comment("Delaying for 17 seconds.")
        pipette.delay(seconds=17)
        for target in samples:
            if not pipette.tip_attached:
                pipette.pick_up_tip()
            pipette.transfer(195,
                             target.bottom(0.7),
                             liquid_waste.top(),
                             air_gap=air_vol,
                             new_tip='never')
            pipette.drop_tip()

    # Dry at RT
    robot.comment("Drying the beads for " + str(drying_time) +
                  " minutes. Protocol \
will resume automatically.")
    pipette.delay(minutes=drying_time)

    # Disengage MagDeck
    robot._driver.run_flag.wait()
    mag_deck.disengage()

    # Mix beads with elution buffer
    if elution_buffer_volume / 2 > pipette.max_volume:
        mix_vol = pipette.max_volume
    else:
        mix_vol = elution_buffer_volume / 2
    for target in samples:
        pipette.pick_up_tip()
        pipette.transfer(elution_buffer_volume,
                         elution_buffer,
                         target,
                         new_tip='never')
        pipette.mix(45, mix_vol, target)
        pipette.drop_tip()

    # Incubate at RT for 3 minutes
    robot.comment(
        "Incubating at room temperature for 3 minutes. Protocol will \
resume automatically.")
    pipette.delay(minutes=3)

    # Engage MagDeck for 1 minute and remain engaged for DNA elution
    robot._driver.run_flag.wait()
    mag_deck.engage()
    robot.comment("Delaying for " + str(settling_time) +
                  " seconds for beads to \
settle.")
    pipette.delay(seconds=settling_time)

    # Transfer clean PCR product to a new well
    for target, dest in zip(samples, output):
        pipette.transfer(elution_buffer_volume,
                         target.bottom(1),
                         dest.top(),
                         blow_out=True)

    # Disengage MagDeck
    mag_deck.disengage()
示例#6
0
plate_2 = labware.load('96-flat', '2')
plate_3 = labware.load('96-flat', '4')
plate_4 = labware.load('96-flat', '5')
plate_5 = labware.load('96-flat', '7')
plate_6 = labware.load('96-flat', '8')
"""
All four pipettes are loaded into the program, however the app will only
see pipettes that are currently being used.
"""

if pipette_type == 'p300_multi':
    pip = instruments.P300_Multi(mount=mount, tip_racks=[tiprack1, tiprack2])
elif pipette_type == 'p10_multi':
    pip = instruments.P10_Multi(mount=mount, tip_racks=[tiprack1, tiprack2])
elif pipette_type == 'p50_multi':
    pip = instruments.P50_Multi(mount=mount, tip_racks=[tiprack1, tiprack2])
else:
    raise ValueError("Incorrect pipette type.")

plates = [plate_1, plate_2, plate_3, plate_4, plate_5, plate_6]

volumes = [
    VOLUME_ONE, VOLUME_TWO, VOLUME_THREE, VOLUME_FOUR, VOLUME_FIVE, VOLUME_SIX
]
"""
Helper functions
"""


def pre_wet(vol, well):
    pip.aspirate(vol, well)
示例#7
0
        depth=10.35,  # Depth (mm) of each well on the plate
        volume=650)  # Volume of well as per specs (not 'working volume')
    print('Wells in 96WP Whatman:')
    for well in custom_plate.wells():
        print(well)

dst_plates = [labware.load(destination_type, dst_slot) for dst_slot in\
              destination_slots]

#%% PIPETTES

# Multi-channel pipette + tip rack
if multi_pipette_type == 'p50-Multi':
    tipracks_multi = [labware.load(tiprack_type_multi, tiprack_slot)\
                      for tiprack_slot in tiprack_slots_multi]
    pipette_multi = instruments.P50_Multi(mount=multi_pipette_mount,
                                          tip_racks=tipracks_multi)

# pipette_multi.start_at_tip(tipracks_multi[0].well(tip_start_from_multi))
# LF: I changed the syntax here as it was completely ignoring the command (I guess difefrence between single and multichannel?)
pipette_multi.start_at_tip(tipracks_multi[0][tip_start_from_multi])
pipette_multi.plunger_positions['drop_tip'] = -6

#%% COMMANDS

# Safety command - gives warning when no tip is attached
pipette_multi.drop_tip()

count_used_tips()  # Should be 0 to begin with

# Each column in source plate is replicated (12 times) into separate destination plates
for src_column, dst_plate in zip(source_active_columns, dst_plates):
示例#8
0
def run_custom_protocol(
        well_volume: float = 50.0,
        reagent_well: StringSelection('A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7',
                                      'A8', 'A9', 'A10', 'A11', 'A12') = 'A1',
        plate_starting_column: str = '1',
        number_of_columns_to_fill: int = 24,
        pipette_type: StringSelection('p300-Single', 'p50-Single',
                                      'p10-Single', 'p300-Multi', 'p50-Multi',
                                      'p10-Multi') = 'p50-Multi',
        mix_reagent_before_transfer: StringSelection('True',
                                                     'False') = 'True'):

    if int(plate_starting_column) <= 0 or int(plate_starting_column) > 24:
        raise Exception("Plate starting column number must be 1-24.")
    if (int(plate_starting_column) + number_of_columns_to_fill) > 25:
        raise Exception("Number of columns to fill exceeds plate's limit.")

    if mix_reagent_before_transfer == 'False':
        mix_times = 0
    else:
        mix_times = 5

    pip_name = pipette_type.split('-')  # Check which pipette type

    if pip_name[0] == 'p10':
        tiprack = labware.load('tiprack-10ul', '1', 'p10rack')
    else:
        tiprack = labware.load('opentrons-tiprack-300ul', '1', 'p300rack')

    if pip_name[0] != 'p10' and well_volume < 5:
        raise Exception("Cannot transfer volume this small without p10.")
    if pip_name[0] == 'p30' and well_volume < 30:
        raise Exception("Cannot transfer volume this small with p300.")

    if pipette_type == 'p300-Single':
        pipette = instruments.P300_Single(mount='left', tip_racks=[tiprack])
    elif pipette_type == 'p50-Single':
        pipette = instruments.P50_Single(mount='left', tip_racks=[tiprack])
    elif pipette_type == 'p10-Single':
        pipette = instruments.P10_Single(mount='left', tip_racks=[tiprack])
    elif pipette_type == 'p300-Multi':
        pipette = instruments.P300_Multi(mount='left', tip_racks=[tiprack])
    elif pipette_type == 'p50-Multi':
        pipette = instruments.P50_Multi(mount='left', tip_racks=[tiprack])
    elif pipette_type == 'p10-Multi':
        pipette = instruments.P10_Multi(mount='left', tip_racks=[tiprack])

    if pip_name[1] == 'Multi':
        alternating_wells = []
        for column in plate.cols(plate_starting_column, to='24'):
            alternating_wells.append(column.wells('A'))
            alternating_wells.append(column.wells('B'))
        dests = alternating_wells[:number_of_columns_to_fill * 2]
    else:
        dests = plate.cols(plate_starting_column,
                           length=number_of_columns_to_fill)

    pipette.distribute(well_volume,
                       trough.wells(reagent_well),
                       dests,
                       mix_before=(mix_times, pipette.max_volume))
示例#9
0
    'y': 40,
    'z': 125,
    'a': 125,
    'b': 50,
    'c': 50
}

robot.head_speed(combined_speed=max(max_speed_per_axis.values()), **max_speed_per_axis)

# Labware
tiprack = labware.load('opentrons_96_tiprack_300ul', slot='10')
reservoir = labware.load('usascientific_12_reservoir_22ml', slot='11')
plate = labware.load('corning_96_wellplate_360ul_flat', slot='8')

# Pipette
pipette = instruments.P50_Multi(mount='right', tip_racks=[tiprack])

# 1st print: Letter 'S'
pipette.pick_up_tip(tiprack.wells('A1'))
pipette.aspirate(50, reservoir.cols('1'))
pipette.dispense(5, plate.wells('A1'))

CALIBRATION_CROSS_COORDS = [161.37, 141.0, -2.0]
pipette.move_to((robot.deck, CALIBRATION_CROSS_COORDS))

CALIBRATION_CROSS_COORDS = [159.37, 145.0, -2.0]
pipette.move_to((robot.deck, CALIBRATION_CROSS_COORDS))

CALIBRATION_CROSS_COORDS = [154.37, 147.0, -2.0]
pipette.move_to((robot.deck, CALIBRATION_CROSS_COORDS))
示例#10
0
                             diameter=9,
                             depth=40,
                             volume=200000)

Storage = labware.load(storage_name, slot=5)
plate_samples = labware.load('96-flat', slot=2)
plate_buffers = labware.load('96-flat', slot=3)
trash_liquid = labware.load('corning_384_wellplate_112ul_flat', slot=4)
Eppendorf = labware.load('Eppendorf_Samples', slot=10)
tiprack_l = labware.load('opentrons-tiprack-300ul', slot=9)
tiprack_r = labware.load('opentrons-tiprack-10ul', slot=6)

# [2] Pipettes

pipette_l = instruments.P300_Single(mount='left', tip_racks=[tiprack_l])
pipette_r = instruments.P50_Multi(mount='right')

flow_rate = {'a_l': 300, 'd_l': 10, 'a_r': 50, 'd_r': 50}

multi_tip_loc = ['E', 1]


def pick_up_multi():

    global multi_tip_loc

    pipette_r.pick_up_tip(
        location=tiprack_r.wells(''.join(map(str, multi_tip_loc))))

    if multi_tip_loc[1] == 12:
        if multi_tip_loc[0] == 'A':
示例#11
0
    'author': 'Opentrons <*****@*****.**>',
    'source': 'Protocol Library'
    }

tiprack = labware.load('tiprack-200ul', '7')
tiprack2 = labware.load('tiprack-200ul', '11')

trash = robot.fixed_trash

trough = labware.load('trough-12row', '8')
plate = labware.load('96-PCR-flat', '9')
tuberack = labware.load('tube-rack-2ml', '10')

# Needs to have individual constructor
m50 = instruments.P50_Multi(
    tip_racks=[tiprack, tiprack2],
    mount="left")

p200 = instruments.P300_Single(
    tip_racks=[tiprack],
    mount="right"
)

# dispense 6 standards from tube racks (A1, B1, C1, D1, A2, B2)
# to first two rows of 96 well plate (duplicates, A1/A2, B1/B2 etc.)
for i in range(6):
    p200.distribute(
        25, tuberack.wells(i), plate.rows(i)[0:2])

# dispense 4 samples from tube rack (C2, D2, A3, B3)
# to row 3 of 96 well plate (duplicates, A3/B3, C3/D3, E3/F3, G3/H3)
示例#12
0
        diameter = 2,                         # Diameter (mm) of each well on the plate
        depth    = 10,                        # Depth (mm) of each well on the plate
        volume   = 50)

plate_samples    =   labware.load('96-flat',      slot ='11')                       # Samples TODO Eppendorf 1.5
tiprack          =   labware.load('tiprack-10ul', slot ='6')                        # Tipracks
magnetic         =   modules.load('magdeck',      slot ='4')                        # Magnetic Deck
plate_magnet     =   labware.load('96-flat',      slot ='4', share = True)          # Magnetic Deck plate
thermocycler     =   NinjaPCR(slot='10', simulating = robot.is_simulating())        # Ninja-PCR
thermic_module   =   labware.load(thermic_name,   slot ='1')                        # Auxiliar thermic module
trash            =   labware.load('trash-box',    slot = '12', share = True)        # Trash

# [2] Pipettes

pipette_l   = instruments.P300_Single(mount = 'left', tip_racks=[tiprack], trash_container = trash)
pipette_r   = instruments.P50_Multi(mount = 'right', tip_racks=[tiprack], trash_container = trash)
pipette_l.set_flow_rate(aspirate = 50, dispense = 100)
pipette_r.set_flow_rate(aspirate = 50, dispense = 100)

# [3] Commands

def execute_move(function, args):

        # For the simulation
        if robot.is_simulating():
                function(*args)
                return

        # When the robot starts moving light goes on and
        # button turns red
        robot._driver.turn_on_rail_lights()
def run_custom_protocol(number_of_mixing: int = 10, mix_rate: int = 1):
    # LABWARE
    # Define Pipettes
    p300_single = instruments.P300_Single(mount='right', tip_racks=[tiprack1])
    p50_multi = instruments.P50_Multi(mount='left', tip_racks=[tiprack2])

    # Define master mix reagents
    formamide = tube_rack_2ml.wells('A1')
    dntp = small_reagent_plate.wells('A1')
    sybr = small_reagent_plate.wells('B1')
    taq = small_reagent_plate.wells('C1')
    primers = [
        well.bottom() for well in small_reagent_plate.wells(
            'A3', 'A4', 'A5', 'C3', 'C4', 'C5', 'E3', 'E4', 'E5')
    ]

    # cDNA
    standards = small_reagent_plate.columns('12')
    samples = small_reagent_plate.columns('10')

    # Initial buffer mix in tube (1413.8 uL)
    buffer_mix_tube = tube_rack_15ml.wells(
        'A1')  # Water, Trehalose, qPCR Buffer
    high_vol_buffer_mix_tube = (buffer_mix_tube,
                                buffer_mix_tube.from_center(x=0, y=0, z=-0.5))

    # Separate master mix tubes for each primer
    master_mix_tubes = [
        well.bottom() for well in tube_rack_2ml.wells(
            'A3', 'A4', 'A5', 'B3', 'B4', 'B5', 'C3', 'C4', 'C5')
    ]

    sample_columns = ['1', '2', '3', '5', '6', '7', '9', '10', '11']
    standard_columns = ['4', '8', '12']

    ######################## PROTOCOL ##################################################################################
    # Make master mix
    p300_single.distribute(FORMAMIDE_VOL,
                           formamide,
                           high_vol_buffer_mix_tube,
                           disposal_vol=0,
                           blow_out=True)
    p300_single.distribute(DNTP_VOL,
                           dntp,
                           high_vol_buffer_mix_tube,
                           disposal_vol=0,
                           blow_out=True)
    p300_single.distribute(SYBR_VOL,
                           sybr,
                           high_vol_buffer_mix_tube,
                           disposal_vol=0,
                           blow_out=True)

    # Add taq last and mix
    p300_single.pick_up_tip()
    p300_single.transfer(TAQ_VOL,
                         taq,
                         high_vol_buffer_mix_tube,
                         disposal_vol=0,
                         blow_out=True,
                         new_tip='never')
    p300_single.mix(15, 300, rate=mix_rate, location=high_vol_buffer_mix_tube)
    p300_single.drop_tip()

    # Distribute master mix to separate master mix tubes
    p300_single.distribute(MASTER_MIX_TUBE_VOL,
                           buffer_mix_tube,
                           master_mix_tubes,
                           disposal_vol=0,
                           blow_out=True)

    # Add primers to master mix tubes
    for primer, mm_tube in zip(primers, master_mix_tubes):
        p50_multi.pick_up_tip(location=tiprack2_tracker.next_tip(), presses=1)
        p50_multi.transfer(PRIMER_VOL,
                           primer,
                           mm_tube,
                           disposal_vol=0,
                           blow_out=True,
                           new_tip='never')
        p50_multi.mix(number_of_mixing, 50, rate=mix_rate)
        p50_multi.drop_tip()

    def multiwell_location_offset(plates,
                                  x=0.0,
                                  y=0.0,
                                  z=0.0,
                                  start_column=None,
                                  end_column=None,
                                  columns=None):
        from opentrons.legacy_api.containers.placeable import Container
        if isinstance(plates, Container):
            plates = list(plates)
        if columns is not None:
            return [(col[0], col[0].from_center(x=x, y=y, z=z))
                    for plate in plates for col in plate.columns(columns)]
        elif start_column and end_column:
            return [(col[0], col[0].from_center(x=x, y=y, z=z))
                    for plate in plates
                    for col in plate.columns(start_column, to=end_column)]

    # Mix cDNA samples then distribute to 96-well plates
    p50_multi.pick_up_tip(location=tiprack2_tracker.next_tip(n=8))
    p50_multi.mix(number_of_mixing, 50, samples, rate=mix_rate)
    p50_multi.distribute(CDNA_VOL,
                         samples,
                         multiwell_location_offset(x=0,
                                                   y=0.03,
                                                   z=-1.5,
                                                   plates=plates,
                                                   columns=sample_columns),
                         disposal_vol=3,
                         new_tips='never')

    # Mix Standards then distribute to 96-well plates
    p50_multi.pick_up_tip(location=tiprack2_tracker.next_tip(n=8))
    p50_multi.mix(number_of_mixing, 50, standards, rate=mix_rate)
    p50_multi.distribute(CDNA_VOL,
                         standards,
                         multiwell_location_offset(x=0,
                                                   y=0.03,
                                                   z=-1.5,
                                                   plates=plates,
                                                   columns=standard_columns),
                         disposal_vol=3,
                         new_tips='never')

    plates = []
    plates.extend([pcr_plate1] * 3)
    plates.extend([pcr_plate2] * 3)
    plates.extend([pcr_plate3] * 3)
    for master_mix, column in zip(master_mix_tubes,
                                  list(range(1, 12 + 1, 4)) * 3):
        first_column = str(column)
        last_column = str(column + 3)
        p50_multi.pick_up_tip(location=tiprack2_tracker.next_tip(), presses=1)
        p50_multi.distribute(MASTER_MIX_VOL,
                             master_mix,
                             multiwell_location_offset(
                                 x=0,
                                 y=0.1,
                                 z=0.5,
                                 plates=plates,
                                 start_column=first_column,
                                 end_column=last_column),
                             disposal_vol=0,
                             blow_out=True)
示例#14
0
magdeck          = modules.load('MagDeck',           slot=4)
md_lab           = labware.load(magdeck_plate,       slot=4, share=True)
tiprack          = labware.load('opentrons-tiprack-300ul', slot=6)
tiprack2         = labware.load('opentrons-tiprack-300ul', slot=11)
tiprack3         = labware.load('opentrons-tiprack-300ul', slot=9)
tiprack_m        = labware.load('opentrons-tiprack-10ul', slot=8)
trash_liquid     = labware.load('corning_384_wellplate_112ul_flat', slot = 3)
samples          = labware.load('Eppendorf_Samples', slot=7)
samples2         = labware.load('96-flat', slot=5)
tempdeck         = NinjaTempDeck(slot=1, simulating = True)
td_lab           = tempdeck.labware

# Pipette
pipette          = instruments.P300_Single(mount='left', tip_racks=[tiprack, tiprack2, tiprack3])
pipette_multi    = instruments.P50_Multi(mount='right', tip_racks=[tiprack_m])

modules.magdeck.LABWARE_ENGAGE_HEIGHT[magdeck_plate] = 30


# START RUN ························································································

pipette.set_flow_rate(aspirate=15,dispense=15)
robot._driver.turn_on_rail_lights()
#tempdeck.set_temp(temp=4)

# (-1) Move 100ul from A3 to each of the magdeck
rates={'mix_asp_rate':300, 'mix_dis_rate':300, 'tr_asp_rate':300, 'tr_dis_rate':300}
pipette.pick_up_tip()
custom_pick(100, td_lab.wells('A1'), md_lab.wells('A1'), blow_out=True, reuse_tip=True, mix_before=True, **rates)
custom_pick(100, td_lab.wells('A1'), md_lab.wells('A2'), blow_out=True, reuse_tip=True, mix_before=True, **rates)
def run_custom_protocol(
    pipette_type: StringSelection('p300-Single', 'p300-Multi', 'p50-Single',
                                  'p50-Multi') = 'p300-Multi',
    dilution_factor: float = 1.5,
    num_of_dilutions: int = 10,
    total_mixing_volume: float = 200.0,
    tip_use_strategy: StringSelection('use one tip',
                                      'new tip each time') = 'use one tip'):

    pip_name = pipette_type.split('-')[1]

    if pipette_type == 'p300-Single':
        pipette = instruments.P300_Single(mount='left', tip_racks=tiprack)
    elif pipette_type == 'p50-Single':
        pipette = instruments.P50_Single(mount='left', tip_racks=tiprack)
    elif pipette_type == 'p300-Multi':
        pipette = instruments.P300_Multi(mount='left', tip_racks=tiprack)
    elif pipette_type == 'p50-Multi':
        pipette = instruments.P50_Multi(mount='left', tip_racks=tiprack)

    new_tip = 'never' if tip_use_strategy == 'use one tip' else 'always'

    transfer_volume = total_mixing_volume / dilution_factor
    diluent_volume = total_mixing_volume - transfer_volume

    if pip_name == 'Multi':

        # Distribute diluent across the plate to the the number of samples
        # And add diluent to one column after the number of samples for a blank
        pipette.distribute(diluent_volume, trough['A1'],
                           plate.cols('2', length=(num_of_dilutions)))

        # Dilution of samples across the 96-well flat bottom plate
        pipette.pick_up_tip(presses=3, increment=1)

        pipette.transfer(transfer_volume,
                         plate.columns('1', to=(num_of_dilutions - 1)),
                         plate.columns('2', to=num_of_dilutions),
                         mix_after=(3, total_mixing_volume / 2),
                         new_tip=new_tip)

        # Remove transfer volume from the last column of the dilution
        pipette.transfer(transfer_volume,
                         plate.columns(num_of_dilutions),
                         liquid_trash,
                         new_tip=new_tip)

        if new_tip == 'never':
            pipette.drop_tip()

    else:
        # Distribute diluent across the plate to the the number of samples
        # And add diluent to one column after the number of samples for a blank
        for col in plate.cols('2', length=(num_of_dilutions)):
            pipette.distribute(diluent_volume, trough['A1'], col)

        for row in plate.rows():
            if new_tip == 'never':
                pipette.pick_up_tip()

            pipette.transfer(transfer_volume,
                             row.wells('1', to=(num_of_dilutions - 1)),
                             row.wells('2', to=(num_of_dilutions)),
                             mix_after=(3, total_mixing_volume / 2),
                             new_tip=new_tip)

            pipette.transfer(transfer_volume,
                             row.wells(num_of_dilutions),
                             liquid_trash,
                             new_tip=new_tip)

            if new_tip == 'never':
                pipette.drop_tip()
def run_custom_protocol(number_of_mixing: int = 5, mix_rate: int = 6):
    # LABWARE
    # Define Pipettes
    p300_single = instruments.P300_Single(mount='right', tip_racks=[tiprack1])
    p50_multi = instruments.P50_Multi(mount='left', tip_racks=[tiprack2])

    # Define master mix reagents
    formamide = tube_rack_2ml.wells('A1')
    dntp = small_reagent_plate.wells('A1')
    sybr = small_reagent_plate.wells('B1')
    taq = small_reagent_plate.wells('C1')
    primers = [
        well.bottom() for well in small_reagent_plate.wells(
            'A3', 'A4', 'A5', 'A6', 'A7', 'A8')
    ]

    # cDNA
    samples = small_reagent_plate.columns('12')

    # Initial buffer mix in tube (1413.8 uL)
    buffer_mix_tube = tube_rack_2ml.wells(
        'A2')  # Water, Trehalose, qPCR Buffer
    high_vol_buffer_mix_tube = (buffer_mix_tube,
                                buffer_mix_tube.from_center(x=0, y=0, z=0))

    # Separate master mix tubes for each primer
    master_mix_tubes = [
        well.bottom()
        for well in tube_rack_2ml.wells('D1', 'D2', 'D3', 'D4', 'D5', 'C5')
    ]

    # PROTOCOL
    # Set temp of tempdeck first
    tempdeck.set_temperature(4)

    # Make master mix
    p300_single.distribute(FORMAMIDE_VOL,
                           formamide,
                           high_vol_buffer_mix_tube,
                           disposal_vol=0,
                           blow_out=True)
    p300_single.distribute(DNTP_VOL,
                           dntp,
                           high_vol_buffer_mix_tube,
                           disposal_vol=0,
                           blow_out=True)
    p300_single.distribute(SYBR_VOL,
                           sybr,
                           high_vol_buffer_mix_tube,
                           disposal_vol=0,
                           blow_out=True)

    # Add taq last and mix
    p300_single.pick_up_tip()
    p300_single.transfer(TAQ_VOL,
                         taq,
                         high_vol_buffer_mix_tube,
                         disposal_vol=0,
                         blow_out=True,
                         new_tip='never')
    p300_single.mix(15, 300, rate=mix_rate)
    p300_single.drop_tip()

    # Distribute master mix to separate master mix tubes
    p300_single.distribute(MASTER_MIX_TUBE_VOL,
                           buffer_mix_tube,
                           master_mix_tubes,
                           disposal_vol=0,
                           blow_out=True)

    # Add primers to master mix tubes
    for primer, mm_tube in zip(primers, master_mix_tubes):
        p50_multi.pick_up_tip(location=tiprack2_tracker.next_tip())
        p50_multi.transfer(PRIMER_VOL,
                           primer,
                           mm_tube,
                           disposal_vol=0,
                           blow_out=True,
                           new_tip='never')
        p50_multi.mix(number_of_mixing, 50, rate=mix_rate)
        p50_multi.drop_tip()

    def cdna_dispense_location(plate, start_column, end_column):
        return [(col[0], col[0].from_center(x=0, y=0.03, z=-1.5))
                for col in plate.columns(start_column, to=end_column)]

    # Mix cDNA samples then distribute to 96-well plate
    p50_multi.pick_up_tip(location=tiprack2_tracker.next_tip(n=8))
    p50_multi.mix(number_of_mixing, 50, samples, rate=mix_rate)
    p50_multi.distribute(CDNA_VOL,
                         samples,
                         cdna_dispense_location(pcr_plate1, '1', '12'),
                         disposal_vol=3,
                         blow_out=True)

    def master_mix_dispense_location(plate, begin_col, end_col):
        return [(well, well.from_center(x=0, y=0.1, z=0.5))
                for col in plate.columns(begin_col, to=end_col)
                for well in col]

    for master_mix, column in zip(master_mix_tubes, list(range(1, 12 + 1, 2))):
        first_column = str(column)
        second_column = str(column + 1)
        p50_multi.pick_up_tip(location=tiprack2_tracker.next_tip())
        p50_multi.distribute(MASTER_MIX_VOL,
                             master_mix,
                             master_mix_dispense_location(
                                 pcr_plate1, first_column, second_column),
                             disposal_vol=0,
                             blow_out=True)
示例#17
0
    'author': 'Opentrons <*****@*****.**>',
    'source': 'Protocol Library'
}

source_slot = '6'

dest_slots = ['1', '2', '3', '4', '5', '7', '8', '9']

# TODO: optimize so that you only use 1 tiprack and can use an extra container,
# when you have 96 well source + dest (384 needs 2x tipracks, 96 needs just 1x)
tip_slots = ['10', '11']

tip_racks = [labware.load('tiprack-200ul', slot) for slot in tip_slots]

# TODO: customizable pipette vol
p50multi = instruments.P50_Multi(mount='right', tip_racks=tip_racks)

container_choices = ['96-flat', '96-PCR-tall', '96-deep-well', '384-plate']


def alternating_wells(plate, row_num):
    """
    Returns list of 2 WellSeries for the 2 possible positions of an
    8-channel pipette for a row in a 384 well plate.
    """
    return [
        plate.cols(row_num).wells(start_well, length=8, step=2)
        for start_well in ['A', 'B']
    ]

        volume=10000)

PG = labware.load('epMotion_10mL', '11', 'PG')
plate_384 = labware.load('corning_384_wellplate_112ul_flat', '2', 'plate')
sample_1 = labware.load('biorad_96_wellplate_200ul_pcr', '3')
sample_2 = labware.load('biorad_96_wellplate_200ul_pcr', '6')

tiprack_200 = labware.load('tiprack-200ul', '1', 'p200rack')

tiprack_10_1 = labware.load('opentrons_96_tiprack_10ul', '4')
tiprack_10_2 = labware.load('opentrons_96_tiprack_10ul', '7')

P10_8 = instruments.P10_Multi(mount='left',
                              tip_racks=[tiprack_10_1, tiprack_10_2])

P50_8 = instruments.P50_Multi(mount='right', tip_racks=[tiprack_200])

alternating_wells = []
for column in plate_384.cols():
    alternating_wells.append(column.wells('A'))
    alternating_wells.append(column.wells('B'))

##Transfer the Picogreen
while assay_start < (assay_end - 6):
    P50_8.pick_up_tip()
    P50_8.transfer(19,
                   PG.wells('A1'),
                   alternating_wells[assay_start:assay_start + 6],
                   new_tip='never')
    P50_8.drop_tip()
    assay_start = assay_start + 6
def run_custom_protocol(
        number_of_destination_plates: int = 5,
        volume_of_mineral_oil_in_ul: float = 15,
        distance_from_oil_surface_to_opening_of_trough_in_mm: float = 10):

    # check for labware space
    if number_of_destination_plates > 5:
        raise Exception('Please specify 5 or fewer destination plates.')

    # remaining labware
    dest_plates = [
        labware.load(plate_name, str(slot))
        for slot in range(4, 4 + number_of_destination_plates)
    ]
    tips50 = labware.load(tips50_name, str(4 + number_of_destination_plates))
    tips10 = [
        labware.load(tips10_name, str(slot))
        for slot in range(5 + number_of_destination_plates, 12)
    ]

    # pipettes
    m10 = instruments.P10_Multi(mount='right', tip_racks=tips10)
    m50 = instruments.P50_Multi(mount='left', tip_racks=[tips50])

    all_dests = [well for plate in dest_plates for well in plate.rows('A')]

    # variables for mineral oil height track
    h_oil = -(distance_from_oil_surface_to_opening_of_trough_in_mm + 5)
    ### length of the trough to work out total volume
    length = 71.4
    width = dest_plates[0].wells(0).properties['diameter']

    def oil_height_track():
        nonlocal h_oil
        dh = volume_of_mineral_oil_in_ul / (
            length * width
        )  # should this be 8*volume_of_mineral_oil_in_ul for a trough?
        h_oil -= dh

    # transfer mineral oil
    m50.set_flow_rate(aspirate=5, dispense=10)
    t_count = 0
    m50.pick_up_tip()
    for d in all_dests:
        # prevent oil buildup in the same tip (replace after each plate fill)
        if t_count == 12:
            m50.drop_tip()
            m50.pick_up_tip()
            t_count = 1

        oil_height_track()
        m50.aspirate(volume_of_mineral_oil_in_ul, mineral_oil.top(h_oil))
        m50.delay(seconds=5)
        m50.dispense(d.bottom(5))
        t_count += 1
        m50.blow_out()
    m50.drop_tip()

    # distribute PCR master mix
    m50.set_flow_rate(aspirate=25, dispense=50)
    m50.pick_up_tip()
    for d in all_dests:
        m50.transfer(18, master_mix, d.top(), blow_out=True, new_tip='never')
    m50.drop_tip()

    # forward primer distribution
    for ind, primer in enumerate(forward_primer.rows('A')):
        dests = [plate.rows('A')[ind] for plate in dest_plates]
        m10.distribute(1, primer, dests)

    # reverse primer distribution
    for ind, primer in enumerate(reverse_primer.rows('A')):
        dests = [plate.rows('A')[ind] for plate in dest_plates]
        m10.distribute(1, primer, dests)
示例#20
0
def run_custom_protocol(pipette_type: StringSelection(
    'p300_Multi', 'p50_Single', 'p300_Single', 'p1000_Single', 'p10_Multi',
    'p50_Multi', 'p10_Single') = 'p300_Multi',
                        pipette_mount: StringSelection('left',
                                                       'right') = 'left',
                        sample_number: int = 24,
                        sample_volume: float = 20,
                        bead_ratio: float = 1.8,
                        elution_buffer_volume: float = 200,
                        incubation_time: float = 1,
                        settling_time: float = 1,
                        drying_time: float = 5):

    total_tips = sample_number * 8
    tiprack_num = total_tips // 96 + (1 if total_tips % 96 > 0 else 0)
    slots = ['3', '5', '6', '7', '8', '9', '10', '11'][:tiprack_num]
    if pipette_type == 'p1000_Single':
        tipracks = [labware.load('tiprack-1000ul', slot) for slot in slots]
        pipette = instruments.P1000_Single(mount=pipette_mount,
                                           tip_racks=tipracks)
    elif pipette_type == 'p300_Single':
        tipracks = [labware.load('tiprack-200ul', slot) for slot in slots]
        pipette = instruments.P300_Single(mount=pipette_mount,
                                          tip_racks=tipracks)
    elif pipette_type == 'p50_Single':
        tipracks = [labware.load('tiprack-200ul', slot) for slot in slots]
        pipette = instruments.P50_Single(mount=pipette_mount,
                                         tip_racks=tipracks)
    elif pipette_type == 'p10_Single':
        tipracks = [labware.load('tiprack-10ul', slot) for slot in slots]
        pipette = instruments.P10_Single(mount=pipette_mount,
                                         tip_racks=tipracks)
    elif pipette_type == 'p10_Multi':
        tipracks = [labware.load('tiprack-10ul', slot) for slot in slots]
        pipette = instruments.P10_Multi(mount=pipette_mount,
                                        tip_racks=tipracks)
    elif pipette_type == 'p50_Multi':
        tipracks = [labware.load('tiprack-200ul', slot) for slot in slots]
        pipette = instruments.P50_Multi(mount=pipette_mount,
                                        tip_racks=tipracks)
    elif pipette_type == 'p300_Multi':
        tipracks = [labware.load('tiprack-200ul', slot) for slot in slots]
        pipette = instruments.P300_Multi(mount=pipette_mount,
                                         tip_racks=tipracks)

    mode = pipette_type.split('_')[1]

    if mode == 'Single':
        if sample_number <= 5:
            reagent_container = labware.load('tube-rack-2ml', '4')
            liquid_waste = labware.load('trough-12row', '5').wells('A12')
        else:
            reagent_container = labware.load('trough-12row', '4')
            liquid_waste = reagent_container.wells('A12')
        samples = [well for well in mag_plate.wells()[:sample_number]]
        output = [well for well in output_plate.wells()[:sample_number]]
    else:
        reagent_container = labware.load('trough-12row', '4')
        liquid_waste = reagent_container.wells('A12')
        col_num = sample_number // 8 + (1 if sample_number % 8 > 0 else 0)
        samples = [col for col in mag_plate.cols()[:col_num]]
        output = [col for col in output_plate.cols()[:col_num]]

    # Define reagents and liquid waste
    beads = reagent_container.wells(0)
    ethanol = reagent_container.wells(1)
    elution_buffer = reagent_container.wells(2)

    # Define bead and mix volume
    bead_volume = sample_volume * bead_ratio
    if bead_volume / 2 > pipette.max_volume:
        mix_vol = pipette.max_volume
    else:
        mix_vol = bead_volume / 2
    total_vol = bead_volume + sample_volume + 5

    # Mix beads and PCR samples
    for target in samples:
        pipette.pick_up_tip()
        pipette.mix(5, mix_vol, beads)
        pipette.transfer(bead_volume, beads, target, new_tip='never')
        pipette.mix(10, mix_vol, target)
        pipette.blow_out()
        pipette.drop_tip()

    # Incubate beads and PCR product at RT for 5 minutes
    pipette.delay(minutes=incubation_time)

    # Engagae MagDeck and incubate
    mag_deck.engage()
    pipette.delay(minutes=settling_time)

    # Remove supernatant from magnetic beads
    pipette.set_flow_rate(aspirate=25, dispense=150)
    for target in samples:
        pipette.transfer(total_vol, target, liquid_waste, blow_out=True)

    # Wash beads twice with 70% ethanol
    air_vol = pipette.max_volume * 0.1
    for cycle in range(2):
        for target in samples:
            pipette.transfer(200,
                             ethanol,
                             target,
                             air_gap=air_vol,
                             new_tip='once')
        pipette.delay(minutes=1)
        for target in samples:
            pipette.transfer(200, target, liquid_waste, air_gap=air_vol)

    # Dry at RT
    pipette.delay(minutes=drying_time)

    # Disengage MagDeck
    mag_deck.disengage()

    # Mix beads with elution buffer
    if elution_buffer_volume / 2 > pipette.max_volume:
        mix_vol = pipette.max_volume
    else:
        mix_vol = elution_buffer_volume / 2
    for target in samples:
        pipette.pick_up_tip()
        pipette.transfer(elution_buffer_volume,
                         elution_buffer,
                         target,
                         new_tip='never')
        pipette.mix(20, mix_vol, target)
        pipette.drop_tip()

    # Incubate at RT for 3 minutes
    pipette.delay(minutes=5)

    # Engagae MagDeck for 1 minute and remain engaged for DNA elution
    mag_deck.engage()
    pipette.delay(minutes=settling_time)

    # Transfer clean PCR product to a new well
    for target, dest in zip(samples, output):
        pipette.transfer(elution_buffer_volume, target, dest, blow_out=True)
示例#21
0
def run_custom_protocol(number_of_mixing: int = 10, mix_rate: int = 1):
    # LABWARE
    tempdeck = modules.load('tempdeck', 10)
    tube_rack_2ml = labware.load('opentrons-aluminum-block-2ml-eppendorf', '7')
    tube_rack_15ml = labware.load('opentrons-tuberack-15_50ml', '3')
    small_reagent_plate = labware.load('PCR-strip-tall', '8')
    pcr_plate1 = labware.load('96-flat', '4')
    pcr_plate2 = labware.load('96-flat', '5')
    pcr_plate3 = labware.load('opentrons-aluminum-block-96-PCR-plate',
                              '10',
                              share=True)
    plates = [pcr_plate1, pcr_plate2, pcr_plate3]
    tiprack1 = labware.load('opentrons-tiprack-300ul', '11')
    tiprack2 = labware.load('opentrons-tiprack-300ul', '9')

    tiprack2_tracker = TipTracker(tiprack=tiprack2)

    WELLS = 370
    TOTAL_VOL = 20.0
    CDNA_VOL = 5.0

    WATER_PER_WELL = 12.115 - CDNA_VOL
    assert WATER_PER_WELL >= 0, "Water per well is less than 0"
    TREH_PER_WELL = 4.0
    BUFFER_PER_WELL = 2
    FORM_PER_WELL = 0.5
    DNTP_PER_WELL = 0.16
    SYBR_PER_WELL = 0.1
    TAQ_PER_WELL = 0.125
    PRIMER_MIX_PER_WELL = 1.0

    FORMAMIDE_VOL = FORM_PER_WELL * WELLS
    DNTP_VOL = DNTP_PER_WELL * WELLS
    SYBR_VOL = SYBR_PER_WELL * WELLS
    TAQ_VOL = TAQ_PER_WELL * WELLS
    MASTER_MIX_TUBE_WELLS = 38.0
    MASTER_MIX_TUBE_VOL = (WATER_PER_WELL + TREH_PER_WELL + BUFFER_PER_WELL +
                           FORM_PER_WELL + DNTP_PER_WELL + SYBR_PER_WELL +
                           TAQ_PER_WELL) * MASTER_MIX_TUBE_WELLS
    PRIMER_VOL = PRIMER_MIX_PER_WELL * MASTER_MIX_TUBE_WELLS

    MASTER_MIX_VOL = TOTAL_VOL - CDNA_VOL
    # Define Pipettes
    p300_single = instruments.P300_Single(mount='right', tip_racks=[tiprack1])
    p50_multi = instruments.P50_Multi(mount='left', tip_racks=[tiprack2])

    # Define master mix reagents
    formamide = tube_rack_2ml.wells('A1')
    dntp = small_reagent_plate.wells('A1')
    sybr = small_reagent_plate.wells('B1')
    taq = small_reagent_plate.wells('C1')
    primers = [
        well.bottom() for well in small_reagent_plate.wells(
            'A3', 'A4', 'A5', 'C3', 'C4', 'C5', 'E3', 'E4', 'E5')
    ]

    # cDNA
    standards = small_reagent_plate.columns('12')
    samples = small_reagent_plate.columns('10')

    # Initial buffer mix in tube (1413.8 uL)
    buffer_mix_tube = tube_rack_15ml.wells(
        'A1')  # Water, Trehalose, qPCR Buffer
    high_vol_buffer_mix_tube = (buffer_mix_tube,
                                buffer_mix_tube.from_center(x=0, y=0, z=-0.5))

    # Separate master mix tubes for each primer
    master_mix_tubes = [
        well.bottom() for well in tube_rack_2ml.wells(
            'A3', 'A4', 'A5', 'B3', 'B4', 'B5', 'C3', 'C4', 'C5')
    ]

    sample_columns = ['1', '2', '3', '5', '6', '7', '9', '10', '11']
    standard_columns = ['4', '8', '12']

    ######################## PROTOCOL ##################################################################################
    tempdeck.set_temperature(4)

    # Make master mix
    p300_single.distribute(FORMAMIDE_VOL,
                           formamide,
                           high_vol_buffer_mix_tube,
                           disposal_vol=0,
                           blow_out=True)
    p300_single.distribute(DNTP_VOL,
                           dntp,
                           high_vol_buffer_mix_tube,
                           disposal_vol=0,
                           blow_out=True)
    p300_single.distribute(SYBR_VOL,
                           sybr,
                           high_vol_buffer_mix_tube,
                           disposal_vol=0,
                           blow_out=True)

    # Add taq last and mix
    p300_single.pick_up_tip()
    p300_single.transfer(TAQ_VOL,
                         taq,
                         high_vol_buffer_mix_tube,
                         disposal_vol=0,
                         blow_out=True,
                         new_tip='never')
    p300_single.mix(15, 300, rate=mix_rate, location=high_vol_buffer_mix_tube)
    p300_single.drop_tip()

    # Distribute master mix to separate master mix tubes
    p300_single.distribute(MASTER_MIX_TUBE_VOL,
                           buffer_mix_tube,
                           master_mix_tubes,
                           disposal_vol=0,
                           blow_out=True)

    # Add primers to master mix tubes
    for primer, mm_tube in zip(primers, master_mix_tubes):
        p50_multi.pick_up_tip(location=tiprack2_tracker.next_tip(), presses=1)
        p50_multi.transfer(PRIMER_VOL,
                           primer,
                           mm_tube,
                           disposal_vol=0,
                           blow_out=True,
                           new_tip='never')
        p50_multi.mix(number_of_mixing, 50, rate=mix_rate)
        p50_multi.drop_tip()

    def multiwell_location_offset(plates,
                                  x=0.0,
                                  y=0.0,
                                  z=0.0,
                                  start_column=None,
                                  end_column=None,
                                  columns=None):
        from opentrons.legacy_api.containers.placeable import Container
        if isinstance(plates, Container):
            plates = list(plates)
        if columns is not None:
            return [(col[0], col[0].from_center(x=x, y=y, z=z))
                    for plate in plates for col in plate.columns(columns)]
        elif start_column and end_column:
            return [(col[0], col[0].from_center(x=x, y=y, z=z))
                    for plate in plates
                    for col in plate.columns(start_column, to=end_column)]

    # Mix cDNA samples then distribute to 96-well plates
    p50_multi.pick_up_tip(location=tiprack2_tracker.next_tip(n=8))
    p50_multi.mix(number_of_mixing, 50, samples, rate=mix_rate)
    p50_multi.distribute(CDNA_VOL,
                         samples,
                         multiwell_location_offset(x=0,
                                                   y=0.03,
                                                   z=-1.5,
                                                   plates=plates,
                                                   columns=sample_columns),
                         disposal_vol=3,
                         new_tips='never')

    # Mix Standards then distribute to 96-well plates
    p50_multi.pick_up_tip(location=tiprack2_tracker.next_tip(n=8))
    p50_multi.mix(number_of_mixing, 50, standards, rate=mix_rate)
    p50_multi.distribute(CDNA_VOL,
                         standards,
                         multiwell_location_offset(x=0,
                                                   y=0.03,
                                                   z=-1.5,
                                                   plates=plates,
                                                   columns=standard_columns),
                         disposal_vol=3,
                         new_tips='never')

    plates = []
    plates.extend([pcr_plate1] * 3)
    plates.extend([pcr_plate2] * 3)
    plates.extend([pcr_plate3] * 3)
    for master_mix, column in zip(master_mix_tubes,
                                  list(range(1, 12 + 1, 4)) * 3):
        first_column = str(column)
        last_column = str(column + 3)
        p50_multi.pick_up_tip(location=tiprack2_tracker.next_tip(), presses=1)
        p50_multi.distribute(MASTER_MIX_VOL,
                             master_mix,
                             multiwell_location_offset(
                                 x=0,
                                 y=0.1,
                                 z=0.5,
                                 plates=plates,
                                 start_column=first_column,
                                 end_column=last_column),
                             disposal_vol=0,
                             blow_out=True)
# imports
from opentrons import labware, instruments

# labware
tiprack_type = 'tiprack-200ul-VWR'
rxn_plate = labware.load('384-corning-3702BC', '8')
tiprack_p300m = [labware.load(tiprack_type, slot_p300m)
               for slot_p300m in ['9']]
tiprack_p50m = [labware.load(tiprack_type, slot_p50m)
               for slot_p50m in ['10','7','4','1']]
reagent_trough = labware.load('trough-12row','11')

# instruments
p50m = instruments.P50_Multi(
    mount="right",
    tip_racks=tiprack_p50m)
if tiprack_type == 'tiprack-200ul-VWR':
    p300m = instruments.P300_Multi(
        mount="left",
        tip_racks=tiprack_p300m,
        min_volume=10,
        max_volume=200)
elif tiprack_type == 'opentrons-tiprack-300ul':
    p300m = instruments.P300_Multi(
        mount="left",
        tip_racks=tiprack_p300m,
        min_volume=30,
        max_volume=300)

def run_custom_protocol(
        transfer_volume_nitrilase: float=10,
示例#23
0
plate_buffers = labware.load('96-flat', slot=6)
td_lab = labware.load(ninja_name, slot=1)
Eppendorf = labware.load('Eppendorf_Samples', slot=4)
tiprack_l = labware.load('opentrons-tiprack-300ul', slot=9)
tiprack_r = labware.load('opentrons-tiprack-300ul', slot=5)
# Note: tiprack_r is actually an 'opentrons-tiprack-300ul', but its name must be
# different than tiprack_l's to prevent calibration issues

# Use the regular trash as trash_liquid, but displace the pipette to avoid collisions
trash = robot.fixed_trash().top()
trash_liquid = trash

# [2] Pipettes
pipette_l = instruments.P300_Single(mount='left', tip_racks=[tiprack_l])
pipette_r = instruments.P50_Multi(
    mount='right',
    tip_racks=[tiprack_r])  #, tiprack_r2,tiprack_r3, tiprack_r4])

# Pipette flow rates: left and right, aspirate and dispense
flow_rate = {'a_l': 300, 'd_l': 300, 'a_r': 100, 'd_r': 100}

max_speed_per_axis = {'x': 600, 'y': 400, 'z': 125, 'a': 125, 'b': 40, 'c': 40}
robot.head_speed(**max_speed_per_axis)


def robot_wait_tiprack():

    if not robot.is_simulating():
        robot.comment("Waiting...")
        set_button_light(blue=True, red=True, green=True)
        while not robot._driver.read_button():