Skip to main content

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

ActionWhat It Does
ShakeShake/mix the plate on a shaker
SpinCentrifuge the plate
SealHeat-seal the plate
ReadRead plate on a plate reader
DelidRemove lid from plate
RunProtocolRun a protocol file (Venus methods, etc.)
ExecuteCommandSend a command string to a device
PythonMethodRun 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:

ParameterDescription
resourceThe device or ResourcePool where the action runs
inputsList of labware templates that must arrive before action executes
outputsList of labware templates present after execution (defaults to same as inputs)
optionsOptional 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