Written by N. Henkenhaf together with Gudrun Gygli.
Contact gudrun.gygli@kit.edu in case of questions.
Made available without any warranty under a CC-By license.
from classes.MMKinetics import MMKinetics
----------------------------------------------------- Michaelis-Menten-Kinetics module succesfully loaded -----------------------------------------------------
This notebook is a template for calculating the parameters $K_\text{M}$ and $V_\text{max}$ of the Michaelis-Menten equation
$$v = \frac{V_\text{max} [c]}{K_\text{M} + [c]} ,$$with $v \left( [c] \right)$ beeing the rate of the product and $[c]$ the concentration of the observed substrate.
The procedure will be as followed:
1. Import data
- Import your data as exported from the measurement. Several parameters will
be asked to get the best result.
2. Plot data and fit initial rates
- In this step, the rates for each replicas concentration will be calculated.
The function will return data for further analysis.
3. Clean data
4. Michaelis-Menten-Fit
Please fill in the list of parameters:
Title:
This will be the title of your data analysis shown in every plot.
Fill in below.
title = '25nM Gre2p NDK NADPH absorbance 340nm'
Filename:
The name of the data file. The file must be in the 'data' directory and it has to be a .csv file. Replace 'FILENAME' with the name of the data file. Do not forget to write the name in quotations marks.
Make sure your data is tidy (https://towardsdatascience.com/what-is-tidy-data-d58bb9ad2458).
Fill in below.
filename = 'data/MM_25nM_Gre2p_NDK_NADPH_absorbance_340nm_cleaned.csv'
Replica names:
Enter the name of the replicas below. Therefore change the text in the brackets and make sure to write them between quotation marks.
The order of the replica names in the list must be the same order as on plate!
Extend or shorten the list seperated by commas.
Fill in below.
replicaNames = ['Replica_1', 'Replica_2', 'Replica_3', 'Replica_4']
Spectrophotometrically active molecule:
e.g. NADPH.
Fill in below.
absName = 'NADPH'
Replica concentrations:
Enter the replica concentrations as shown below. Therefore change the numbers in the brackets and make sure to set decimals via point, not comma.
If you have a control group without any replica, insert '0.0' into the list.
The order of the replica concentrations and the control groups in the list must be the same order as on plate!
Extend or shorten the list seperated by commas.
Fill in below.
replicaConcentrations = [0, 0, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10, 25, 50]
Unit:
Enter the unit of replica concentrations. Options = ( 'mM', 'µM', 'nM' )
Fill in below.
replicaUnit = 'mM'
Molar extinction-coefficient:
Give the molar extinction-coefficient in the same units as your replica concentration ($m M^{-1} cm^{-1}$, $\mu M^{-1} cm^{-1}$, $n M^{-1} cm^{-1}$)
Fill in below.
molarExtinctionCoefficient = 6.22
Enzyme concentration in the assay:
Give the enzyme concentration you used in the same units as your replica concentration ($mM$, $\mu M$, $nM$)
Fill in below.
enzymeConcentration = 0.000025
Cut:
Enter a range (in seconds) to specify the data which should be used to fit the initial rates.
Fill in below.
cut = [428, 748]
Control:
If there is a control to be substracted, enter it below. If there is none, enter 'None' without quotation marks.
Fill in below.
control = "C2"
evaluation = MMKinetics(filename, replicaNames, replicaConcentrations, replicaUnit, title, molarExtinctionCoefficient, enzymeConcentration, control)
evaluation.importData()
--------------- Data imported ---------------
Now that we got our data imported, it is time to calculate the initial rates of the reaction in every well on the plate.
Please fill in the list of parameters:
Show fit:
Set 'False' if the fit curves should not be displayed in plots.
Fill in below.
show_fit = True
Labels:
Set 'False' if the labels of each well should not be displayed in plots.
Fill in below.
labels = True
Run code below, to save the basic settings
evaluation.initRateFit(cut, absName)
evaluation.calculateRates(show_fit, labels)
If you want to change individual fit ranges, you can run the code below.
# evaluation.cutRates()
# evaluation.calculateRates(show_fit, labels, cutSpan = False)
You can check the data by running the code below and enter the replica you want to check.
$\left[ \text{c} \right]$: concentration of replica
v: rate of the product
std: standard error of v
r-squared: goodness of fit
y-intercept: y-axis intercept of fit
# evaluation.showDataDict()
If you want to remove individual data, you can run the code below.
evaluation.dropRates()
Enter data to be dropped. Type 'break' to quit. Replica names: ['Replica_1', 'Replica_2', 'Replica_3', 'Replica_4'] Enter replica name: Replica_2 enter concentration of correspondenting rate to be dropped: 0.5 Replica_2 0.5mM dropped. Enter replica name: Replica_3 enter concentration of correspondenting rate to be dropped: 0.1 Replica_3 0.1mM dropped. Enter replica name: Replica_4 enter concentration of correspondenting rate to be dropped: 1.0 Replica_4 1.0mM dropped. Enter replica name: break
We will now perform the Michaelis-Menten-Fit, plot the data and calculate $K_\text{m}$ and $V_\text{max}$.
x-axis label:
Enter the label of the x-axis of the Michaelis-Menten-Plot.
Fill in below.
xAxisLabel = 'NDK'
This will create a summary plot of the averaged initial rates for your data.
Initial rates (v) are printed below for each concentration with a standard deviation and other statistic values.
Then, the Michaelis-Menten plot is shown, which is of course using the data from the summary plot.
The legend (bottom right) also includes the kinetic parameters calculated by the script.
evaluation.calculateMM(xAxisLabel = xAxisLabel, inhibition=False, rate_std= True)
calculated values for fit: [c] r-squared v [1/s] v [mM/s] vStd [1/s] vStd [mM/s] \ 0 0.00 0.142726 -0.000457 7.650300e-07 0.011066 2.766466e-07 1 0.00 0.568219 -0.042020 -2.740443e-07 0.080001 2.000024e-06 2 0.05 0.885756 -0.287288 -6.405751e-06 0.069752 1.743810e-06 3 0.10 0.899987 -0.328851 -7.444831e-06 0.051046 1.276143e-06 4 0.25 0.921186 -0.343467 -7.810221e-06 0.063419 1.585477e-06 5 0.50 0.980503 -0.489014 -1.144890e-05 0.068103 1.702570e-06 6 1.00 0.984445 -0.595586 -1.411320e-05 0.010335 2.583708e-07 7 2.50 0.987467 -0.776911 -1.864632e-05 0.062256 1.556389e-06 8 5.00 0.996331 -1.132710 -2.754129e-05 0.119424 2.985612e-06 9 10.00 0.999171 -1.557019 -3.814903e-05 0.004725 1.181132e-07 10 25.00 0.997720 -1.721901 -4.227109e-05 0.133739 3.343480e-06 11 50.00 0.998880 -1.692670 -4.154031e-05 0.098845 2.471137e-06 y-intercept y-interceptStd 0 0.037437 0.000136 1 0.343562 0.000451 2 0.322661 0.000462 3 0.309667 0.000549 4 0.325441 0.000465 5 0.324118 0.000344 6 0.322630 0.000368 7 0.325294 0.000408 8 0.311963 0.000327 9 0.328994 0.000219 10 0.340213 0.000361 11 0.346466 0.000281
Km: 2.3 ± 0.1 Vmax: 4.69880361485232e-05 ± 3.660218455976478e-07 kcat: 1.9 ± 0.0
print('Results as published by Ott et al. (https://pubs.acs.org/doi/10.1021/acscatal.1c02076):')
print('Km: 2.4 ' u'\u00b1' ' 0.6')
print('kcat: 1.8 ' u'\u00b1' ' 0.1')
Results as published by Ott et al. (https://pubs.acs.org/doi/10.1021/acscatal.1c02076): Km: 2.4 ± 0.6 kcat: 1.8 ± 0.1