Skip to content

5.1 Optidose Competition Assay (96‐well)

Ryan David Ward edited this page Feb 13, 2024 · 3 revisions

CRISPRi Library 96-Well Experiment Setup

1. Initial E. coli Dilution:

  • Stock Culture:
    • Concentration: 2 x 10^10 cells/mL.
  • Dilution Steps:
    • Took 1 µL of stock and diluted into 999 µL of LB.
    • Resulting Dilution: 1000-fold.
    • Resulting Concentration: 2 x 10^7 cells/mL.

2. Imipenem Serial Dilution:

4x Initial Dilution Target:

  • Mixed 6 µL of imipenem stock (concentration: 2000 µg/mL) with 1494 µL of LB to achieve a starting concentration of 8 µg/mL.
  • Serial dilutions were made to create the 4x target concentrations: 8, 4, 2, 1, 0.5 µg/mL.

2x Intermediate Dilution:

  • Took 750 µL of each 4x concentration and mixed with 750 µ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.

3. Plating:

  • Volume from Diluted Culture (with or without 1mM IPTG):
    • 100 µL added to each well (contains 2 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.

4. Potential Growth:

  • 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.

5. Library Coverage:

  • Strains in Library:
    • 20,000 strains.
  • Coverage:
    • Each strain is represented approximately 100 times in each well.

6. Experimental Conditions:

  • Wells differ based on:
    • Presence/Absence of 1mM IPTG.
    • Different drug concentrations.

7. Viusalize

  • 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)

Optidose results

Optidose: Imipenem E. coli Optidose: Imipenem E. cloacae Optidose: Imipenem K. pneumoniae