Transformation efficiency calculations are not designed for high throughput, nor automated setups. This is how I handle transformation efficiency in my own lab.
The classic transformation efficiency formula is:
TE = Colonies/ug/Dilution. For example, lets say I transform 100pg of pUC19 into 10uL of cells, and outgrow with 50uL of media. Then, 30uL (or half) is plated, and 100 colonies are counted. The formula works out like this:
colonies = 100 dna = 0.0001ug (100pg) dilution = 0.5 TE = 100 / 0.0001 / 0.5 = 2x10^6
While this works for simple manual protocols, more information is needed in order to optimize transformation protocols robotically. I have 3 numbers I calculate for every protocol:
Let's use data from a real experiment that I just ran with a very unoptimized protocol:
import statistics
from typing import List
def te(colonies: int, fmol: float, dilution: float) -> float:
return colonies/fmol/dilution
def adjust_colonies(colonies: List[int], fmol: float, dilution: List[float]) -> List[float]:
l = []
for idx, count in enumerate(colonies):
l.append(te(count, fmol, dilution[idx]))
return l
def tte(colonies: List[int], fmol: float, dilution: List[float]) -> float:
return statistics.mean(adjust_colonies(colonies, fmol, dilution))
def intra_deviation(colonies: List[int], fmol: float, dilution: List[float]) -> float:
return statistics.stdev(adjust_colonies(colonies, fmol, dilution))
def inter_deviation(ttes: List[float]) -> float:
return statistics.stdev(ttes)
# Real data
# Dilutions: I plate 5uL, but dilute by 7.5uL for an initial 20uL
dilutions = [0.25, 0.25*0.625, 0.25*0.625*0.625, 0.25*0.625*0.625*0.625]
fmol = 1
a5_a8_colonies = [9,14,0,1]
a9_a12_colonies = [5,5,1,1]
# tte
print("TTE")
print("{:.2f}".format(tte(a5_a8_colonies, fmol, dilutions)))
print("{:.2f}".format(tte(a9_a12_colonies, fmol, dilutions)))
# intra
print("Intra-deviation")
print("{:.2f}".format(intra_deviation(a5_a8_colonies, fmol, dilutions)))
print("{:.2f}".format(intra_deviation(a9_a12_colonies, fmol, dilutions)))
# inter
print("Inter-deviation")
print("{:.2f}".format(inter_deviation([tte(a5_a8_colonies, fmol, dilutions), tte(a9_a12_colonies, fmol, dilutions)])))
And the results:
TTE 35.50 19.66 Intra-deviation 38.96 9.16 Inter-deviation 11.20
That there is some deviation! Visually, this is very apparent, but it is good to put numbers to it. I'll be updating this page as I get more real data and experience.