We are exploring the idea of specifying experiment-protocols-as-files. These files can be edited, shared, and uploaded to your UI. The files contain all the information needed to start and run an experiment. Think of them as an initial “script”, but you can always edit the experiment as it’s progressing. We are calling them Pioreactor experiment profiles.
Users can upload profiles in the UI (for example):
Below are some examples of profiles. We are using yaml
syntax, as yaml is user-friendly and precise.
In this example, two pioreactors (woker1 and worker2) are set up to perform stirring. Both pioreactors start stirring with different initial target_rpm
values (200 and 300, respectively). After 2 hours, the target_rpm
for both pioreactors is updated (to 250 and 350, respectively), and stirring stops after 4 hours.
# multi_pioreactor_stirring.yaml
experiment_name: multi_pioreactor_stirring
metadata:
author: John Doe
description: Stirring in multiple pioreactors with target_rpm change midway
aliases:
worker1: BR-001
worker2: BR-002
pioreactors:
BR-001:
jobs:
stirring:
actions:
- type: start
duration: 0.0
parameters:
target_rpm: 200.0
- type: update
duration: 2.0
parameters:
target_rpm: 250.0
- type: stop
duration: 4.0
worker2:
jobs:
stirring:
actions:
- type: start
duration: 0.0
parameters:
target_rpm: 300.0
- type: update
duration: 2.0
parameters:
target_rpm: 350.0
- type: stop
duration: 4.0
Here’s a YAML file for a single pioreactor that starts OD reading, stirring, and later runs a chemostat that doses 1ml every 30 minutes:
# single_bioreactor_chemostat.yaml
experiment_name: single_bioreactor_chemostat
metadata:
author: Jane Doe
description: OD reading, stirring, and chemostat in a single bioreactor
pioreactors:
worker1:
jobs:
od_reading:
actions:
- type: start
duration: 0.0
- type: stop
duration: 5.0
stirring:
actions:
- type: start
duration: 0.0
parameters:
target_rpm: 200.0
- type: stop
duration: 5.0
dosing_control:
actions:
- type: start
duration: 1.0
parameters:
automation_name: chemostat
volume: 1.0
duration: 30
- type: stop
duration: 5.0
You can specify plugins required, too, example:
plugins:
- name: dosing_plugin
version: ">=1.2.0"
To control all Pioreactors, there’s a global_jobs
field:
global_jobs:
od_reading:
actions:
- type: start
duration: 0.0
stirring:
actions:
- type: start
duration: 0.0
parameters:
target_rpm: 200.0
but this is overwritten by Pioreactor-specific jobs.
I’m looking for feedback! What’s missing? What do you find confusing? How else do you want to use Pioreactor experiment profiles?