-
Notifications
You must be signed in to change notification settings - Fork 0
5.1 Optidose Competition Assay (96‐well)
Ryan David Ward edited this page Feb 13, 2024
·
3 revisions
-
Stock Culture:
- Concentration:
2 x 10^10 cells/mL
.
- Concentration:
-
Dilution Steps:
- Took
1 µL
of stock and diluted into999 µL
of LB. - Resulting Dilution:
1000-fold
. - Resulting Concentration:
2 x 10^7 cells/mL
.
- Took
- Mixed
6 µL
of imipenem stock (concentration:2000 µg/mL
) with1494 µL
of LB to achieve a starting concentration of8 µg/mL
. - Serial dilutions were made to create the 4x target concentrations:
8, 4, 2, 1, 0.5 µg/mL
.
-
Took
750 µL
of each 4x concentration and mixed with750 µL
of fresh LB to halve the concentrations, creating the 2x target concentrations:4, 2, 1, 0.5, 0.25 µg/mL
. -
Additionally, there's a control with
0 µg/mL
imipenem.
-
Volume from Diluted Culture (with or without 1mM IPTG):
-
100 µL
added to each well (contains2 x 10^6
cells).
-
-
Volume from Imipenem 2x Diluted Solution:
-
100 µL
added to each well. When mixed in equal volume with the solution, the final concentrations in the well become:2, 1, 0.5, 0.25, 0.125 µg/mL
.
-
-
Saturation Density for (Aim for 0.01 - 0.02 OD600):
-
1.5 x 10^9 cells/mL
in LB.
-
-
Carrying Capacity for 200 µL:
-
3.0 x 10^8
cells.
-
-
Doubling Potential:
- Culture can double approximately
7 times
before reaching saturation.
- Culture can double approximately
-
Strains in Library:
-
20,000 strains
.
-
-
Coverage:
- Each strain is represented approximately
100 times
in each well.
- Each strain is represented approximately
- Wells differ based on:
- Presence/Absence of 1mM IPTG.
- Different drug concentrations.
- Some pseudocode provided below to guide layout and plotting decisions
# Generalized variables
organism <- "OrganismName"
antibiotic <- "AntibioticName"
# Load necessary libraries
library("tidyverse")
library("data.table")
# Read and reshape data
data <- fread("Path/To/<organism>_Data.tsv") %>%
melt(id.vars = c("Seconds", "Temp"), variable.name = "Well", value.name = "OD600")
# Split Well into Row and Column
data[, c("Row", "Column") := tstrsplit(Well, "(?<=^[A-Z])", perl = TRUE)]
# Convert Column to numeric
data[, Column := as.numeric(Column)]
# Define induction status
data[Row %in% c("NonInducedRows"), Induced := FALSE]
data[Row %in% c("InducedRows"), Induced := TRUE]
# Setup plate layout message
message(paste("Plate layout for", organism, "induction"))
# Display unique plate layout for induction
data %>%
select(Row, Column, Induced) %>%
unique() %>%
dcast(Row ~ Column, value.var = "Induced") %>%
print()
# Function to set the dilution series for the antibiotic
column_dilution_series <- function(data, min_dose, max_dose, min_col, max_col, zero_col) {
direction <- ifelse(max_col > min_col, -1, 1)
cols <- seq(from = 1, to = abs(max_col - min_col) + 1)
cols <- max_col + direction * (cols - 1)
lapply(cols, function(col) {
data[Column == col, (antibiotic) := max_dose / 2^(abs(max_col - col))]
})
data[Column == zero_col, (antibiotic) := 0]
return(data)
}
# Apply the dilution series to the data
data <- column_dilution_series(data, min_dose = 0.125, max_dose = 32, min_col = 3, max_col = 11, zero_col = 2)
# Display unique plate layout for antibiotic dilution
message(paste("Plate layout for", antibiotic, "dilution"))
data %>%
select(Row, Column, antibiotic) %>%
unique() %>%
dcast(Row ~ Column, value.var = antibiotic) %>%
print()
# Preprocess and filter data
data[, Seconds := as.numeric(gsub("s", "", Seconds))]
data <- data[!Column %in% c(1,12)]
data <- data[!is.na(get(antibiotic)) & !is.na(Induced)]
# Growth curve analysis
growth_curve_plot <- ggplot(data, aes(x = Seconds, y = OD600, group = interaction(Induced, get(antibiotic)))) +
geom_line(aes(color = factor(get(antibiotic)), linetype = factor(Induced))) +
scale_y_log10() +
labs(title = paste(organism, "library growth"), x = "Time (s)", y = "Growth (log OD600)", color = antibiotic, linetype = "Induced") +
theme_minimal()
print(growth_curve_plot)