Information submitted through the support site is private but is not hosted within your secure CDD Vault. Please do not include sensitive intellectual property in your support requests.

Calculations across multiple protocols

Calculations performed between numeric protocol readouts, chemical properties, and constants can be defined in CDD Vault when the CDD Visualization extension is enabled. Contact support to find out how to become a CDD Visualization subscriber.

In this article, we focus on calculations between readouts from multiple protocols. For a general review of calculations, please start with this article.

This type of calculation is useful, for example, when looking for the selectivity index which compares potency to cytotoxicity.


Basic guide to calculations

Reference Variables from multiple protocols

Aggregation and Scope of variables
Calculations with conditions

Example Calculations


Calculations are based on existing assay data (raw and calculated) within your CDD Vault protocols, as well as chemical properties of the registered compounds, and numeric constants. You can build dynamic mathematical functions that use protocol readouts as variables, and which are automatically updated when new raw data is imported into the Vault.

Calculations are defined as new calculated readouts, based on previously defined readouts from multiple protocols. Such calculations may be added to an existing protocol combining current protocol data with readouts that originate in other protocols.

We assume here that you are familiar with defining protocols and readouts already, and if you are new to protocol creation, please start here. We also assume that you are familiar with basic formula definition for new calculations which you can find here.


Reference Variables from multiple protocols

Calculations performed on referenced variables are dynamic: when the underlying variables change, the calculation is updated automatically.

Calculations are performed for a specific molecule or batch, so that all referenced readouts are related to the same molecule/batch. It's not currently possible to reference data from a different molecule, or to reference a control value in a custom CDD calculation, but it may be possible using a normalization calculation.

You can reference any readout definition from the current protocol and/or from other protocols. A partial list of available readouts is available for selection via a drop-down:

  • Available protocols include all the protocols from all the projects where you are a member.
  • Available readout definitions include all numeric readouts including raw data, normalized data, Dose-Response intercept and fit parameters, and other custom calculations. Aggregated readouts except for Standard Deviation and number n are also available.
  • Readout Definitions from your current protocol appear first, followed by all other protocols in alphabetical order. The list is restricted to 100 readout definitions. Keep typing the name of the readout or the name of the protocol to filter down the list for more relevant results.



Type in an open square bracket [ , then click a readout name in the drop-down list: the matching bracket will be inserted automatically.

raw data, or end-point data:

[Protocol name -> readout definition name (units)]
e.g. [Primary Screen -> Raw Fluorescence (RFU)]
CDD calculated readouts:

[Protocol name -> readout definition name (units) (CDD)]
e.g. [Primary Screen -> Inhibition (%)(CDD)]
Condition values:

[Protocol name -> readout definition name (units) (CDD)<[Condition name 1]="value">,[Condition name 2]="value">]
e.g. [Primary Screen -> Inhibition (%)(CDD)<[Cells]="HeLa", [Target]="AbC">]


Aggregation and Scope of variables

Readout definitions from other protocols must be aggregated at the protocol level in order to be used. This means that only molecule/protocol or batch/protocol averages (or medians, or sums) are allowed, while batch/run results are not. Since CDD will automatically wrap an appropriate aggregation function around such a readout definition once it's selected, so you do not need to explicitly enter the aggregation function. You will have the ability to change the aggregation type (for example, replace "average" with "median"), and scope (for example change from batch/protocol to molecule/protocol).


Arithmetic average aggregation is automatically inserted for most readouts.

average([3D7 IC50 -> % inhibition (%) (CDD)])
Aggregate by batch and protocol


Geometric mean (average) is used for CDD-calculated dose-response intercepts.

geomean([3D7 IC50 -> IC50 (uM) (CDD)])
Aggregate by molecule and protocol


Multiple readout definitions in a single calculation.

geomean([3D7 IC50 -> IC50 (uM) (CDD)]) / geomean([HeLa IC50 -> IC50 (uM) (CDD)])
Aggregate BOTH readouts by molecule and protocol


Here are the rules on aggregation in calculations referencing external protocols:

  • Readout definitions from an outside protocol must be aggregated with a protocol level scope (molecule/protocol or batch/protocol)
  • Average aggregation will be automatically inserted by CDD for all applicable readout definitions.
  • Geomean aggregation will be automatically inserted by CDD for all CDD-calculated EC50s. Since the distribution of EC50s is usually not symmetrical, the mean of the EC50s is not a good way to pool the data.
  • The same aggregation scope will be applied to ALL aggregation functions in a single calculation, unless an aggregation was already applied to the calculated readout in the parent protocol.
  • If either of your protocols contains "conditions" readout definitions, make sure to explicitly call out the condition value in your formula.


Calculations with conditions

Setting up calculation for protocols with conditions is an advanced topic. These calculations will follow all the same rules as other calculations with external protocols, plus a few additional rules. If you need assistance with these formulas, please don't hesitate to contact support.

  • If the protocol hosting the calculation has a condition, at least one condition must be present in each of the other/external protocols.
  • If the protocol hosting the calculation does not contain a condition, the other/external protocols with conditions may be referenced.
  • If an external protocol with conditions is referenced, the condition value must be explicitly specified in the calculation. Thus each condition set will require a separate calculation defined. For instance, if a calculation needs to be performed for two targets, there will be one specific calculation for each target:
geomean([IC50 Assay -> IC50 (uM) (CDD)]) / geomean([Cytotox Assay -> IC50 (uM) (CDD)]<[Cells]="HeLa">)
geomean([IC50 Assay -> IC50 (uM) (CDD)]) / geomean([Cytotox Assay -> IC50 (uM) (CDD)]<[Cells]="3D7">)


Example calculations

Selectivity without conditions

geomean([3D7 IC50 -> IC50 (uM) (CDD)]) / geomean([HeLa IC50 -> IC50 (uM) (CDD)])

Selectivity with conditions

geomean([IC50 Assay -> IC50 (uM) (CDD)]) / geomean([Cytotox Assay -> IC50 (uM) (CDD)]<[Cells]="HeLa">)
geomean([IC50 Assay -> IC50 (uM) (CDD)]) / geomean([Cytotox Assay -> IC50 (uM) (CDD)]<[Cells]="HeLa">)

Exception: If you are calculating only within a single protocol without cross-referencing, you don't necessarily have to specify the condition in the calculations. This can be useful as to simplify the formula, especially during testing when you might add or remove the condition in retrospect. Furthermore, you only require one calculated readout (instead of two, one for each condition):

For example: The above "Cytotox Assay" having two conditions (Hela, 3D7) using this formula:

geomean([Cytotox Assay -> IC50 (uM) (CDD)])

will result in two columns for the mean IC50, one for each condition,  just as if you had defined the two following calculations:

geomean([Cytotox Assay -> IC50 (uM) (CDD)]<[Cells]="HeLa">)
geomean([Cytotox Assay -> IC50 (uM) (CDD)]<[Cells]="HeLa">)