Read microtiter plate data exported from Molecular Devices SoftMax Pro into R. At the moment, only XML data are supported, which requires SoftMax Pro version 5.4 or greater.
Please let me know if the package works for you or if you run into problems.
| | SoftMax Pro 5* | SoftMax Pro 6 | SoftMax Pro 7** | |----------------------|:---------------:|:-------------:|:-----------------:| | Multiple Experiments | x | N/A*** | | | Multiple Plates | x | x | | | Cuvettes | | | | | Endpoint Reads | x | x | | | Kinetic Reads | x | x | | | Absorbance | x | x | | | Fluorescence | | | | | Luminescence | | | | | Plate Templates | x | x | | | Notes | x | N/A*** | |
* Big thanks to Bryon Drown for sending sample files from version 5.4!
** Sample files from SoftMax Pro 7 needed
*** SoftMax Pro 6 exports all plates, etc. into one experiment. Notes cannot exported.
Help! I only have access to data produced by one machine and one version of SoftMax Pro (6.4), so any sample data or feedback is really apprecaited. I do not have access to SoftMax Pro 7, so this version may not be supported. Similarly, I do not work with cuvettes, so I could also use sample data for them.
softermax is not quite ready to be available on CRAN, but you can use devtools to install the current development version:
if(!require("devtools")) install.packages("devtools") devtools::install_github("briandconnelly/softermax", build_vignettes = TRUE)
To start working with your plate data in R, we'll first export the data as an XML file from SoftMax Pro.
See the Exporting SoftMax Pro Data as XML vignette.
read_softmax_xml function can read XML files exported by SoftMax Pro. Just supply the name of the file that you saved. For this example, I'll use an included sample file named
library(softermax) cvfile <- system.file("extdata", "crystal_violet_dilutions.xml", package = "softermax") cvdata <- read_softmax_xml(file = cvfile)
d is an object that contains information about your experiment(s). Most importantly, each experiment has a list of
plates with read data. For this example data, there is only one experiment, with one plate, which was read at one wavelength. First, we can convert it to a data frame and look at the first ten rows:
cvdata_df <- as.data.frame(cvdata) head(cvdata_df, n = 10)
| Experiment | Plate | ReadMode | Temperature| Wavelength| Well | Time| Value| |:-----------|:-------|:-----------|------------:|-----------:|:-----|-----:|-------:| | unknown | Plate1 | Absorbance | 37| 595| A1 | NA| 4.0000| | unknown | Plate1 | Absorbance | 37| 595| A2 | NA| 4.0000| | unknown | Plate1 | Absorbance | 37| 595| A3 | NA| 4.0000| | unknown | Plate1 | Absorbance | 37| 595| A4 | NA| 4.0000| | unknown | Plate1 | Absorbance | 37| 595| A5 | NA| 4.0000| | unknown | Plate1 | Absorbance | 37| 595| A6 | NA| 4.0000| | unknown | Plate1 | Absorbance | 37| 595| A7 | NA| 4.0000| | unknown | Plate1 | Absorbance | 37| 595| A8 | NA| 2.7609| | unknown | Plate1 | Absorbance | 37| 595| A9 | NA| 1.5331| | unknown | Plate1 | Absorbance | 37| 595| A10 | NA| 0.8534|
Importantly, XML files created by SoftMax Pro version 6 do not differentiate among different experiments, and they do not include the experiment name, so the
Experiment column will contain "unknown". This means that when multiple experiments contain plates with the same name, SoftMax Pro 6 XML files will attribute multiple plates with the same name to the same (single) experiment. When coerced to a data frame, you will not be able to differentiate among them! Be careful.
At this point, you can also save the plate data to a file. For example, we could save the first plate's data as a csv, which is easy to load in many other environments like Python or Excel.
# Option 1: Base R write.csv(cvdata_df, file = "cv_dilutions-plate1.csv") # Option 2: Using the readr package readr::write_csv(cvdata_df, path = "cv_dilutions-plate1.csv")
You could also write the data to Google Sheets with googlesheets.
Since this was a static (or endpoint) read, we can quickly make a plot of the readings for each well. First, we can add Row and Column values for each well using functions from microtiterr.
library(dplyr) library(microtiterr) platedata <- cvdata_df %>% mutate(Row = well_row(Well), Column = well_column(Well))
Here, we'll use ggplot2 to plot the data with
theme_bdc_microtiter from the ggplot2bdc package to make the output look like a 96-well microtiter plate.
library(ggplot2) library(ggplot2bdc) ggplot(data = platedata, aes(x = Column, y = Row, color = Value)) + geom_point(data = expand.grid(Column = seq(1,12), Row = seq(1,8)), color = "grey90", fill = "white", shape = 21, size = 10) + geom_point(size = 12) + coord_fixed(ratio = (13/12)/(9/8), xlim = c(0.5, 12.5), ylim = c(0.6, 8.4)) + scale_y_reverse(breaks = seq(1, 8), labels = LETTERS[1:8]) + scale_x_continuous(breaks = seq(1, 12), position = "top") + scale_color_continuous(name = "OD595") + labs(title = "Crystal Violet Dilution Series (2x)", subtitle = "5 April 2017") + theme_bdc_microtiter()
theme_bdc_microtiterfor making plots look like microtiter plates.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms
This project and its author are not affiliated with Molecular Devices, LLC.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.