SOC_PLATE_SLOT = '7' TUBE_RACK_TYPE = 'tube-rack_E1415-1500' TUBE_RACK_SLOT = '11' SPOTTING_WASTE_WELL = 'A1' AGAR_PLATE_TYPE = 'Nunc_Omnitray' AGAR_PLATE_SLOT = '1' # Tiprack slots p10_p300_tiprack_slots = tiprack_slots(spotting_tuples) p10_slots = CANDIDATE_P10_SLOTS[:p10_p300_tiprack_slots[0]] p300_slots = CANDIDATE_P300_SLOTS[:p10_p300_tiprack_slots[1]] # Define labware p10_tipracks = [labware.load(P10_TIPRACK_TYPE, slot) for slot in p10_slots] p300_tipracks = [labware.load(P300_TIPRACK_TYPE, slot) for slot in p300_slots] p10_pipette = instruments.P10_Single(mount=P10_MOUNT, tip_racks=p10_tipracks) p300_pipette = instruments.P300_Multi(mount=P300_MOUNT, tip_racks=p300_tipracks) assembly_plate = labware.load(ASSEMBLY_PLATE_TYPE, ASSEMBLY_PLATE_SLOT) tempdeck = modules.load('tempdeck', TEMPDECK_SLOT) transformation_plate = labware.load(TRANSFORMATION_PLATE_TYPE, TEMPDECK_SLOT, share=True) soc_plate = labware.load(SOC_PLATE_TYPE, SOC_PLATE_SLOT) tube_rack = labware.load(TUBE_RACK_TYPE, TUBE_RACK_SLOT) spotting_waste = tube_rack.wells(SPOTTING_WASTE_WELL) agar_plate = labware.load(AGAR_PLATE_TYPE, AGAR_PLATE_SLOT) # Register agar_plate for calibration p10_pipette.transfer(1,
'96-well-plate-sqfb-whatman', # name of you labware grid=(12, 8), # specify amount of (columns, rows) spacing=(8.99, 8.99), # distances (mm) between each (column, row) diameter=7.57, # diameter (mm) of each well on the plate (here width at bottom) depth=10.35, # depth (mm) of each well on the plate volume=650) # this is the actual volume as per specs, not a "volume of work" for well in custom_plate.wells(): print(well) ############################ define labware # pipette and tiprack if pipette_type == 'p10-Single': tipracks = [labware.load(tiprack_type, tiprack_slot) for tiprack_slot in tiprack_slots] pipette = instruments.P10_Single( mount=pipette_mount, tip_racks=tipracks) pipette.start_at_tip(tipracks[0].well(tip_start_from)) elif pipette_type == 'p10-Multi': tipracks = [labware.load(tiprack_type, tiprack_slot) for tiprack_slot in tiprack_slots] pipette = instruments.P10_Multi( mount=pipette_mount, tip_racks=tipracks) pipette.start_at_tip(tipracks[0].cols(tip_start_from)) pipette.plunger_positions['drop_tip'] = -6 # container for the drugs src_container = labware.load(source_type, source_slot) # where water, op50, and dmso are in the source container src_water = src_container.wells(source_H2O_well) src_water = src_water.bottom(0.5)
print('Wells in 96WP PCR Thermo Fisher:') for well in custom_plate.wells(): print(well) ############################ define labware # i.e. translate user-friendly parameters into opentrons language # pipette and tiprack # multi channel if drugs_pipette_type == 'p10-Single': # this is mostly a check tiprackdrugs = [ labware.load(tiprack_drugs_type, tiprack_slot) for tiprack_slot in tiprack_drugs_slots ] pipette_drugs = instruments.P10_Single(mount=drugs_pipette_mount, tip_racks=tiprackdrugs) pipette_drugs.start_at_tip(tiprackdrugs[0].well(tiprack_drugs_startfrom)) pipette_drugs.plunger_positions['drop_tip'] = -6 # single channel if solvent_pipette_type == 'p50-Single': # this is mostly a type check tipracksolvent = [ labware.load(tiprack_solvent_type, tiprack_slot) for tiprack_slot in tiprack_solvent_slots ] pipette_solvent = instruments.P50_Single(mount=solvent_pipette_mount, tip_racks=tipracksolvent) pipette_solvent.start_at_tip(tipracksolvent[0].well(tiprack_solvent_startfrom)) pipette_solvent.plunger_positions['drop_tip'] = -6 # pdb.set_trace()
'G11', 'H11', 'A12', 'B12', 'C12', 'D12', ] water_rack = labware.load('tube-rack-2ml', '5') gDNA_plate = labware.load('96-flat', '2') dest_plate = labware.load('96-flat', '1') water = water_rack.wells('A1') tiprack_10 = [labware.load('tiprack-10ul', slot) for slot in ['6', '7']] p10 = instruments.P10_Single(mount='right', tip_racks=tiprack_10) p10.pick_up_tip() p10.transfer(Vol, water, dest_plate.wells(dest_well), blow_out=True, new_tip='never') p10.drop_tip() i = 1 tiprack_10_2 = labware.load('tiprack-10ul', '8') p10_8 = instruments.P10_Multi(mount='left', max_volume=10,
'duran_100', '7') # Recovery media, SOB strongly recommended for E. coli DH5a ##################################################################################################################################### ##################################################################################################################################### # LOADED PIPETTES # CAN CHANGE IF NEEDED P300 = instruments.P300_Single(mount='right', aspirate_flow_rate=200, dispense_flow_rate=200, tip_racks=[Tiprack300uL], trash_container=trash) P10 = instruments.P10_Single(mount='left', tip_racks=[Tiprack10uL], trash_container=trash) ##################################################################################################################################### ##################################################################################################################################### # COMPETENT CELL POSITION # This is in a 96 well plate format, each well corresponds to a 100 uL stock of comeptent cells. # To change, simply specify the wells you are using Even_wells = [ 'B2', 'B4', 'B6', 'B8', 'B10', 'B12', 'C1', 'C3', 'C5', 'C7', 'C9', 'C11', 'D2', 'D4', 'D6', 'D8', 'D10', 'D12', 'E1', 'E3', 'E5', 'E7', 'E9', 'E11', 'F2', 'F4', 'F6', 'F8', 'F10', 'F12' ] #####################################################################################################################################
volume=650) # this is the actual volume as per specs, not a "volume of work" print('Wells in 96WP Whatman:') for well in custom_plate.wells(): print(well) ############################ define labware # pipette and tiprack # single channel if single_pipette_type == 'p10-Single': tipracks_single = [labware.load(tiprack_type_single, tiprack_slot) \ for tiprack_slot in tiprack_slots_single] pipette_single = instruments.P10_Single( mount=single_pipette_mount, tip_racks=tipracks_single) pipette_single.start_at_tip(tipracks_single[0].well(tip_start_from_single)) pipette_single.plunger_positions['drop_tip'] = -6 # multi channel if multi_pipette_type == 'p10-Multi': tipracks_multi = [labware.load(tiprack_type_multi, tiprack_slot) \ for tiprack_slot in tiprack_slots_multi] pipette_multi = instruments.P10_Multi( mount=multi_pipette_mount, tip_racks=tipracks_multi) pipette_multi.start_at_tip(tipracks_multi[0].well(tip_start_from_multi)) pipette_multi.plunger_positions['drop_tip'] = -6
#Plates p384plate = labware.load('384-plate', '3') p96plateA = labware.load('96-PCR-tall', '10') p96plateB = labware.load('96-PCR-tall', '7') #p96plateC = labware.load('biorad_96_wellplate_200ul_pcr', '11') #p96plateD = labware.load('biorad_96_wellplate_200ul_pcr', '8') #Samples sample_tubes = labware.load('opentrons-tuberack-2ml-eppendorf', '6') ##Pippetes and tips definition #p50 = instruments.P50_Single(mount='right', tip_racks=[p300rack]) p10 = instruments.P10_Single(mount='left', tip_racks=[p10rack1, p10rack2]) ##Commands def run_custom_protocol(): w96 = p96plateA.wells('A1', to='H12') con = 0 flag = 0 for w in p384plate.wells('A1', to='P6'): if ((flag % 2) == 0): sw = 'A1' else: sw = 'A2' p10.pick_up_tip() p10.transfer(10, sample_tubes.wells('A1'),
################################################################################ # For this protocol, the biorad_96_wellplate_200ul_pcr, is placed on the top of the TempDeck alone without the Opentrons 96 well aluminum block. ################################################################################ # Load in Bio-Rad 96 Well Plate on temp deck for moclos, transformation, and outgrowth. temp_deck = modules.load('tempdeck', '10') reaction_plate = labware.load('biorad_96_wellplate_200ul_pcr', '10', share=True) temp_deck.set_temperature(10) # Load in 1 10ul tiprack and 2 300ul tipracks tr_10 = [labware.load('opentrons_96_tiprack_10ul', '3')] tr_300 = [labware.load('opentrons_96_tiprack_300ul', '6'), labware.load('opentrons_96_tiprack_300ul', '9')] # Load in pipettes p10_single = instruments.P10_Single(mount='right', tip_racks=tr_10) p300_multi = instruments.P300_Multi(mount='left', tip_racks=tr_300) ################################################################################ # This deck slot location is dedicated for the reaction plate after MoClo protocol is completed, so at the beginning of the protocol there isn't an actual plate existing in this slot location. post_moclo_reaction_plate = labware.load('biorad_96_wellplate_200ul_pcr', '7', 'Post-MoClo Reaction Plate') ################################################################################ # Load in water, SOC, and wash trough (USA Scientific 12 Well Reservoir 22ml) trough = labware.load('usascientific_12_reservoir_22ml', '5', 'Reagents trough') water = trough.wells(0) #Well 1 wash_0 = trough.wells(1) #Well 2 wash_1 = trough.wells(2) #Well 3 soc = trough.wells(3) #Well 4 liquid_waste = trough.wells(4) #Well 5
def final_assembly(final_assembly_dict, tiprack_num, tiprack_type="tiprack-10ul"): """Implements final assembly reactions using an opentrons OT-2. Args: final_assembly_dict (dict): Dictionary with keys and values corresponding to destination and associated linker-ligated part wells, respectively. tiprack_num (int): Number of tipracks required during run. """ # Constants CANDIDATE_TIPRACK_SLOTS = ['3', '6', '9', '2', '5', '8', '11'] PIPETTE_MOUNT = 'right' MAG_PLATE_TYPE = '4ti-0960_FrameStar' MAG_PLATE_POSITION = '1' TUBE_RACK_TYPE = 'tube-rack_E1415-1500' TUBE_RACK_POSITION = '7' DESTINATION_PLATE_TYPE = 'aluminium-block_4ti-0960_FrameStar' TEMPDECK_SLOT = '4' TEMP = 20 TOTAL_VOL = 15 PART_VOL = 1.5 MIX_SETTINGS = (1, 3) # Errors sample_number = len(final_assembly_dict.keys()) if sample_number > 96: raise ValueError('Final assembly nummber cannot exceed 96.') # Tips and pipette slots = CANDIDATE_TIPRACK_SLOTS[:tiprack_num] tipracks = [labware.load(tiprack_type, slot) for slot in slots] pipette = instruments.P10_Single(mount=PIPETTE_MOUNT, tip_racks=tipracks) # Define Labware and set temperature magbead_plate = labware.load(MAG_PLATE_TYPE, MAG_PLATE_POSITION) tube_rack = labware.load(TUBE_RACK_TYPE, TUBE_RACK_POSITION) tempdeck = modules.load('tempdeck', TEMPDECK_SLOT) destination_plate = labware.load( DESTINATION_PLATE_TYPE, TEMPDECK_SLOT, share=True) tempdeck.set_temperature(TEMP) tempdeck.wait_for_temp() # Master mix transfers final_assembly_lens = [] for values in final_assembly_dict.values(): final_assembly_lens.append(len(values)) unique_assemblies_lens = list(set(final_assembly_lens)) master_mix_well_letters = ['A', 'B', 'C', 'D'] for x in unique_assemblies_lens: master_mix_well = master_mix_well_letters[(x - 1) // 6] + str(x - 1) destination_inds = [i for i, lens in enumerate( final_assembly_lens) if lens == x] destination_wells = np.array( [key for key, value in list(final_assembly_dict.items())]) destination_wells = list(destination_wells[destination_inds]) pipette.pick_up_tip() pipette.transfer(TOTAL_VOL - x * PART_VOL, tube_rack.wells(master_mix_well), destination_plate.wells(destination_wells), new_tip='never') pipette.drop_tip() # Part transfers for key, values in list(final_assembly_dict.items()): pipette.transfer(PART_VOL, magbead_plate.wells(values), destination_plate.wells(key), mix_after=MIX_SETTINGS, new_tip='always') tempdeck.deactivate()
def run_custom_protocol(pipette_type: StringSelection( 'p10_Single', 'p50_Single', 'p300_Single', 'p1000_Single', 'p10_Multi', 'p50_Multi', 'p300_Multi') = '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 = 200): 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('tube-rack-2ml', '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 bead_volume = PCR_volume * bead_ratio if bead_volume / 2 > pipette.max_volume: mix_vol = 280 else: mix_vol = 280 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 pipette.delay(seconds=incubation_time) # Engage MagDeck and Magnetize mag_deck.engage() 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') 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 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(45, mix_vol, target) pipette.drop_tip() # Incubate at RT for 3 minutes pipette.delay(minutes=3) # Engage MagDeck for 1 minute and remain engaged for DNA elution mag_deck.engage() 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()
} ########################## # Labware fuge_rack = labware.load( 'opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap', '1') pcr_plate = labware.load('biorad_96_wellplate_200ul_pcr', '2') # tips tiprack_300 = labware.load('opentrons_96_tiprack_300ul', '4') tiprack_10 = labware.load('opentrons_96_tiprack_10ul', '5') #has slot adapter ########################## # initialize single channel, 1st gen pipetters p300 = instruments.P300_Single(mount='right', tip_racks=[tiprack_300]) p10 = instruments.P10_Single(mount='left', tip_racks=[tiprack_10]) ########################### # Setup Overview # 1) Pipette PCR MMix from fuge_rack A1 to PCR plate # 2) Distribute primers into wells ########################## F_primer = [ 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_Bam-sfGFP', 'F20_MA_sfGFP1', 'F20_MA_sfGFP1', 'F20_MA_sfGFP1', 'F20_MA_sfGFP1', 'F20_MA_sfGFP1',