Initial commit
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Serial Dilution Protocol Template
|
||||
|
||||
This template demonstrates how to perform a serial dilution across a plate row.
|
||||
Useful for creating concentration gradients for assays.
|
||||
"""
|
||||
|
||||
from opentrons import protocol_api
|
||||
|
||||
metadata = {
|
||||
'protocolName': 'Serial Dilution Template',
|
||||
'author': 'Opentrons',
|
||||
'description': 'Serial dilution protocol for creating concentration gradients',
|
||||
'apiLevel': '2.19'
|
||||
}
|
||||
|
||||
requirements = {
|
||||
'robotType': 'Flex',
|
||||
'apiLevel': '2.19'
|
||||
}
|
||||
|
||||
def run(protocol: protocol_api.ProtocolContext):
|
||||
"""
|
||||
Performs a serial dilution across plate rows.
|
||||
|
||||
Protocol performs:
|
||||
1. Adds diluent to all wells except the first column
|
||||
2. Transfers stock solution to first column
|
||||
3. Performs serial dilutions across rows
|
||||
"""
|
||||
|
||||
# Load labware
|
||||
tips = protocol.load_labware('opentrons_flex_96_tiprack_200ul', 'D1')
|
||||
reservoir = protocol.load_labware('nest_12_reservoir_15ml', 'D2', label='Reservoir')
|
||||
plate = protocol.load_labware('corning_96_wellplate_360ul_flat', 'D3', label='Dilution Plate')
|
||||
|
||||
# Load pipette
|
||||
p300 = protocol.load_instrument('p300_single_flex', 'left', tip_racks=[tips])
|
||||
|
||||
# Define liquids (optional, for visualization)
|
||||
diluent = protocol.define_liquid(
|
||||
name='Diluent',
|
||||
description='Buffer or growth media',
|
||||
display_color='#B0E0E6'
|
||||
)
|
||||
|
||||
stock = protocol.define_liquid(
|
||||
name='Stock Solution',
|
||||
description='Concentrated stock',
|
||||
display_color='#FF6347'
|
||||
)
|
||||
|
||||
# Load liquids into wells
|
||||
reservoir['A1'].load_liquid(liquid=diluent, volume=15000)
|
||||
reservoir['A2'].load_liquid(liquid=stock, volume=5000)
|
||||
|
||||
# Protocol parameters
|
||||
dilution_factor = 2 # 1:2 dilution
|
||||
transfer_volume = 100 # µL
|
||||
num_dilutions = 11 # Number of dilution steps
|
||||
|
||||
protocol.comment('Starting serial dilution protocol')
|
||||
|
||||
# Step 1: Add diluent to all wells except first column
|
||||
protocol.comment('Adding diluent to wells...')
|
||||
for row in plate.rows()[:8]: # For each row (A-H)
|
||||
p300.transfer(
|
||||
transfer_volume,
|
||||
reservoir['A1'], # Diluent source
|
||||
row[1:], # All wells except first (columns 2-12)
|
||||
new_tip='once'
|
||||
)
|
||||
|
||||
# Step 2: Add stock solution to first column
|
||||
protocol.comment('Adding stock solution to first column...')
|
||||
p300.transfer(
|
||||
transfer_volume * 2, # Double volume for first well
|
||||
reservoir['A2'], # Stock source
|
||||
[row[0] for row in plate.rows()[:8]], # First column (wells A1-H1)
|
||||
new_tip='always'
|
||||
)
|
||||
|
||||
# Step 3: Perform serial dilution
|
||||
protocol.comment('Performing serial dilutions...')
|
||||
for row in plate.rows()[:8]: # For each row
|
||||
p300.transfer(
|
||||
transfer_volume,
|
||||
row[:num_dilutions], # Source wells (1-11)
|
||||
row[1:num_dilutions + 1], # Destination wells (2-12)
|
||||
mix_after=(3, 50), # Mix 3x with 50µL after each transfer
|
||||
new_tip='always'
|
||||
)
|
||||
|
||||
protocol.comment('Serial dilution complete!')
|
||||
protocol.comment(f'Created {num_dilutions} dilutions with {dilution_factor}x dilution factor')
|
||||
Reference in New Issue
Block a user