Skip to main content

Standard curves for OD600 readings

Calibrating your OD600 readings

Depending on the purposes of your research, you may want to calibrate your Pioreactor against known samples and OD600 values. We've given you the option to do this through the command line, similar to how pump calibrations currently work. Calibrations using the UI are coming soon!

OD600 calibrations are straightforward, and only require one vial, your sample of interest, and an accurate way to measure liquids. We recommend a micropipette of volume range 100 to 1000 uL.

The calibration works by reading a dilution series. You will start with 10mL of your sample of interest cultivated in your media, at the highest density you expect to observe. During the calibration, you will specify and add an amount of your media to dilute your sample. To avoid overflowing, the program will prompt you to reduce the volume in your vial to 10mL at set intervals.

Calibrations should be specific to your experiment setup. Any changes to your media, culture, or optical setup (i.e. changing IR intensity, replacing pieces, or changing the angle) will require a new calibration. If everything remains consistent, then we recommend running calibrations every 6 months, or whatever suits your purposes.

Running the calibration

Connect to your Pioreactor by typing ssh pioreactor@<insert unit name>.local. For example, to calibrate on our Pioreactor named worker3, we typed ssh pioreactor@worker3.local. The default password is raspberry. To begin calibrations, type pio run od_calibration.

Start off by inputting some metadata of your calibration. Provide a descriptive and unique name to make it easier to find your calibration again, if needed. Follow the rest of the questions.


One of your photodiodes will be located in the 45°, 90°, or 135° pocket on the vial holder. You will be prompted to confirm the angle of your PD cable. If this is incorrect, go to the Configuration tab on the Pioreactor UI and under od_config.photodiode_channel, change to your angle of choice, then restart your OD calibration. Change the angle through the UI configuration tab.

Following the questions, stirring and optical density reading will begin. A graph is generated as you calibrate so you can see your progress.

Graph generated as you measure.

Depending on your number of measurements, you may be prompted to reduce your vial volume to 10 mL. OPTIONAL: At this point, you may take the OD600 reading of your vial on a different instrument and input this OD600 value for the current measurement.

Input an external OD600 value.

Once you complete all your measurements, a calibration curve will appear over your graph. If you are satisfied with this, save your calibration.


By default, we fit the calibration curve with a polynomial. You can choose the degree of the polynomial if you wish, but we found that degree 4 works well for wide OD600 calibrations, and degree 1 (a linear model) works will for narrow calibrations near 0.

Final data points on OD calibration.

Final data points with generated curve.

Using calibrations in your experiments

Calibrations are applied automatically. That is, after performing a calibration, your future experiments that use optical density readings will use the post-calibration values and be displayed in the UI and saved to the database.

If you wish to stop using calibrations, you can switch if off in the config.ini by setting adding use_calibations=0 under the [od_config] section.

Viewing your previous calibrations

On the command line, you can display your current calibrations using pio run od_calibration display_current). This will display the calibration graphs and metadata for each angle (45°, 90°, and 135°). Setting a new calibration would replace the information shown here, and be applied to new experiments that use the given angle.

To see a full list of all previous calibrations, use pio run od_calibration list.

Changing a calibration

If you wish to change your calibration to a previous version, use pio run od_calibrations change_current <name> where <name> is some previous calibration you've run (i.e from pio run od_calibration list).