Skip to main content
Version: 1.0.0 (legacy)

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​