for the many of you of have used (or looked at) experiment profiles, we’re proposing some changes to the specification that aren’t backwards compatible. We’re also adding an exciting new addition: an if directive!
Let’s start with the fun stuff. We are adding an if directive to optionally perform an action. For example, you may want to increase stirring or bubbling if the OD reading is above some target. This example action looks like:
pioreactors:
pio1:
jobs:
stirring:
actions:
- type: start
hours_elapsed: 0.0
options:
target_rpm: 400.0
- update:
hours_elapsed: 10.0
if: pio1:od_reading:od1.od >= 1.5 # here's the if statement!
options:
target_rpm: 600.0
And yes, you can use boolean operators like and, or, brackets, and not to chain boolean expressions. The idea is to be able to reference any published_setting from any job in these expressions. For example: the string pio1:od_reading:od1.od reads: “look at the published setting od1 from job od_reading on pio1 Pioreactor. That’s a json-blob. Look inside at field od and compare it to 1.5”.
I may change how this syntax looks.
Next, we are changing the labels stanza. Previously it was defined like:
labels:
pio1: hot
pio2: cold
Now it’s going to be defined in the pioreactors block:
pioreactors:
pio1:
label: hot
jobs: ...
pio2:
label: cold
jobs: ...
Finally, the common block now requires a jobs field, like the pioreactors block does:
Previously:
common:
stirring:
actions:
- type: start
hours_elapsed: 0.0
options:
target_rpm: 400.0
Now:
common:
jobs: # here is the change
stirring:
actions:
- type: start
hours_elapsed: 0.0
options:
target_rpm: 400.0
This is so we can define other metadata in the common section, and to introduce symmetry between the sections.
Any feedback? Let us know below!