#!/usr/bin/env python3 """ PCR Setup Protocol Template This template demonstrates how to set up PCR reactions using the Thermocycler module. Includes master mix distribution, sample addition, and PCR cycling. """ from opentrons import protocol_api metadata = { 'protocolName': 'PCR Setup with Thermocycler', 'author': 'Opentrons', 'description': 'Automated PCR setup and cycling protocol', 'apiLevel': '2.19' } requirements = { 'robotType': 'Flex', 'apiLevel': '2.19' } def run(protocol: protocol_api.ProtocolContext): """ Sets up PCR reactions and runs thermocycler. Protocol performs: 1. Distributes master mix to PCR plate 2. Adds DNA samples 3. Runs PCR cycling program """ # Load thermocycler module tc_mod = protocol.load_module('thermocyclerModuleV2') tc_plate = tc_mod.load_labware('nest_96_wellplate_100ul_pcr_full_skirt') # Load tips and reagents tips_20 = protocol.load_labware('opentrons_flex_96_tiprack_50ul', 'C1') tips_200 = protocol.load_labware('opentrons_flex_96_tiprack_200ul', 'C2') reagent_rack = protocol.load_labware( 'opentrons_24_tuberack_nest_1.5ml_snapcap', 'D1', label='Reagents' ) # Load pipettes p20 = protocol.load_instrument('p50_single_flex', 'left', tip_racks=[tips_20]) p300 = protocol.load_instrument('p300_single_flex', 'right', tip_racks=[tips_200]) # Define liquids master_mix = protocol.define_liquid( name='PCR Master Mix', description='2x PCR master mix', display_color='#FFB6C1' ) template_dna = protocol.define_liquid( name='Template DNA', description='DNA samples', display_color='#90EE90' ) # Load liquids reagent_rack['A1'].load_liquid(liquid=master_mix, volume=1000) for i in range(8): # 8 samples reagent_rack.wells()[i + 1].load_liquid(liquid=template_dna, volume=50) # PCR setup parameters num_samples = 8 master_mix_volume = 20 # µL per reaction template_volume = 5 # µL per reaction total_reaction_volume = 25 # µL protocol.comment('Starting PCR setup...') # Open thermocycler lid tc_mod.open_lid() protocol.comment('Thermocycler lid opened') # Step 1: Distribute master mix protocol.comment(f'Distributing {master_mix_volume}µL master mix to {num_samples} wells...') p300.distribute( master_mix_volume, reagent_rack['A1'], tc_plate.wells()[:num_samples], new_tip='once', disposal_volume=10 # Extra volume to prevent shortage ) # Step 2: Add template DNA protocol.comment('Adding template DNA to each well...') for i in range(num_samples): p20.transfer( template_volume, reagent_rack.wells()[i + 1], # Sample tubes tc_plate.wells()[i], # PCR plate wells mix_after=(3, 10), # Mix 3x with 10µL new_tip='always' ) protocol.comment('PCR reactions prepared') # Close lid and start PCR tc_mod.close_lid() protocol.comment('Thermocycler lid closed') # Set lid temperature tc_mod.set_lid_temperature(celsius=105) protocol.comment('Lid heating to 105°C') # Initial denaturation protocol.comment('Initial denaturation...') tc_mod.set_block_temperature( temperature=95, hold_time_seconds=180, block_max_volume=total_reaction_volume ) # PCR cycling profile protocol.comment('Starting PCR cycling...') profile = [ {'temperature': 95, 'hold_time_seconds': 15}, # Denaturation {'temperature': 60, 'hold_time_seconds': 30}, # Annealing {'temperature': 72, 'hold_time_seconds': 30} # Extension ] num_cycles = 35 tc_mod.execute_profile( steps=profile, repetitions=num_cycles, block_max_volume=total_reaction_volume ) # Final extension protocol.comment('Final extension...') tc_mod.set_block_temperature( temperature=72, hold_time_minutes=5, block_max_volume=total_reaction_volume ) # Hold at 4°C protocol.comment('Cooling to 4°C for storage...') tc_mod.set_block_temperature( temperature=4, block_max_volume=total_reaction_volume ) # Deactivate and open tc_mod.deactivate_lid() tc_mod.open_lid() protocol.comment('PCR complete! Plate ready for removal.') protocol.comment(f'Completed {num_cycles} cycles for {num_samples} samples')