Actions
Actions define what happens to your labware when it arrives at a device. Each action type corresponds to a specific operation - shaking, spinning, sealing, etc.
Important: Each action waits for all its inputs to arrive before executing. This is how Orca synchronizes multi-plate operations - when an action requires multiple plates, it won't start until every input is present at the device.
All actions are imported from orca.sdk.actions:
from orca.sdk.actions import Shake, Spin, Seal, Read, Delid, RunProtocol, ExecuteCommand, PythonMethod
Available Actions
| Action | What It Does |
|---|---|
Shake | Shake/mix the plate on a shaker |
Spin | Centrifuge the plate |
Seal | Heat-seal the plate |
Read | Read plate on a plate reader |
Delid | Remove lid from plate |
RunProtocol | Run a protocol file (Venus methods, etc.) |
ExecuteCommand | Send a command string to a device |
PythonMethod | Run custom Python code |
Action Reference
Shake
Shake a plate at a specified speed for a duration.
shake_action = Shake(
resource=shaker, # Device or ResourcePool
duration=60, # Seconds
speed=500, # RPM
inputs=[my_plate],
outputs=[my_plate]
)
Spin
Centrifuge a plate.
spin_action = Spin(
resource=centrifuge,
speed=3000, # RPM
duration=120, # Seconds
inputs=[my_plate],
outputs=[my_plate]
)
Seal
Heat-seal a plate.
seal_action = Seal(
resource=sealer,
temperature=170, # Degrees Celsius
duration=2.0, # Seconds
inputs=[my_plate],
outputs=[my_plate]
)
Read
Read a plate using a protocol file. Output goes to a data file.
read_action = Read(
resource=reader,
protocol_filepath="protocols/absorbance_450nm.prt",
output_filepath="data/plate_001_results.csv",
inputs=[my_plate],
outputs=[my_plate]
)
Delid
Remove lid from a plate.
delid_action = Delid(
resource=delidder,
inputs=[my_plate],
outputs=[my_plate]
)
RunProtocol
Run a protocol file on a device. Commonly used with Venus liquid handlers.
run_action = RunProtocol(
resource=liquid_handler,
protocol_filepath="protocols/add_reagent.hsl",
parameters={"volume": 50, "wells": "A1:H12"},
inputs=[source_plate, dest_plate],
outputs=[source_plate, dest_plate]
)
ExecuteCommand
Send a command string to a device that supports generic commands.
cmd_action = ExecuteCommand(
resource=device,
command="START_CYCLE",
inputs=[my_plate],
outputs=[my_plate]
)
PythonMethod
Execute a custom Python function when labware arrives.
async def my_custom_logic(resource, inputs, outputs, options):
# Your custom code here
pass
python_action = PythonMethod(
resource=device,
method=my_custom_logic,
inputs=[my_plate],
outputs=[my_plate],
options={"custom_param": "value"}
)
Common Parameters
All actions share these parameters:
| Parameter | Description |
|---|---|
resource | The device or ResourcePool where the action runs |
inputs | List of labware templates that must arrive before action executes |
outputs | List of labware templates present after execution (defaults to same as inputs) |
options | Optional dictionary for additional parameters |
Multi-Plate Actions
Actions can work with multiple plates. The system ensures all input plates arrive before the action runs:
transfer_action = RunProtocol(
resource=liquid_handler,
protocol_filepath="protocols/transfer.hsl",
parameters={"volume": 100},
inputs=[source_plate, dest_plate], # Both must arrive
outputs=[source_plate, dest_plate]
)
Using Resource Pools
Actions can target a ResourcePool instead of a specific device. The system automatically selects an available resource:
from orca.sdk.devices import ResourcePool
shaker_pool = ResourcePool("shakers", [shaker_1, shaker_2, shaker_3])
shake_action = Shake(
resource=shaker_pool, # Any available shaker
duration=60,
speed=500,
inputs=[my_plate],
outputs=[my_plate]
)
Next Steps
- Methods - Group actions into methods
- Threads - Define labware journeys
- Custom Code - Deep dive into PythonMethod