Protocols, Features and Formulas
In terms of data calculation, the feature is the central concept that Phaedra uses. Features are grouped into protocols which can be executed on plates to produce result data.
When a protocol is executed on a plate (a process called plate calculation in Phaedra), a result dataset will be generated yielding one numerical value per well per feature. So if a plate contains 384 wells and a protocol with 5 features is executed on it, you will end up with a resultset containing 384 x 5 = 1920 feature values.
The calculation formula is the most important setting of a feature. This formula may reference one or more columns from the plate measurement on which the calculation will take place. Alternatively, a feature formula may also reference the output of another feature, effectively creating a chain of calculations. For example, a formula named “ratio A/B” might reference two columns A and B from the measurement, and calculate the ratio between them.
Protocols are versioned, and any change to the protocol (or one of its features) will cause the version number to increase. This allows you to see a precise trail for any resultset, showing you which version of which protocol was used on which plate measurement to obtain the data you see in the resultset.
While it is perfectly possible to manually import measurements, link them to plates, execute protocols and generate reports by hand, this can be a very time-consuming process, especially when working on large projects and dealing with large volumes of plates.
Instead, you can set up pipelines which represent sequences of actions that will be performed automatically on any plate that comes along. All pipeline executions are tracked, so you can see if any plate failed to process due to missing or malformed data, for example.
Pipelines are defined by a sequence of steps, usually starting with a DataCapture step. Steps can be refined with triggers, specifying the conditions that must be met before the pipeline step will be executed.
For example, suppose that you have two projects, A and B. You want each project to have its own pipeline, so that they can each perform project-specific steps; perhaps in project A you’ll want to generate a QC report for each finished experiment and in the other you don’t. Therefore, you define two pipelines: pipelineWithReport and pipelineWithoutReport. In pipelineWithReport, you configure the first step with a pattern so that it only processes measurements that have “projectA” in their name. Accordingly, you configure a pattern in pipelineWithoutReport to match all measurements with “projectB” in their name.