import numpy as np
from matplotlib import pyplot as plt
from scipy.optimize import curve_fit
import os
"from scipy.signal import correlate"
from multipletau import autocorrelate, correlate
lista1 = []
lista2 = []
lista3 = []
nameToIdx = {}
for i, e in enumerate(os.scandir(r"..\Data\SDT")):
print(e.path)
nameToIdx[e.name[:-4]] = i
primoBlocco = False
secondoBlocco = False
terzoBlocco = False
tmpList1 = []
tmpList2 = []
tmpList3 = []
with open(e.path) as f:
for line in f:
if e.name[-4:] != ".asc": continue
if line == "( Time[µs] FCS_value )\n":
primoBlocco = True
continue
if line == "*END\n":
primoBlocco = False
secondoBlocco = False
continue
if line == "*BLOCK 1_1 Fida\n":
secondoBlocco = True
continue
if line == "*BLOCK 1_1 Mcs\n":
terzoBlocco = True
continue
if primoBlocco:
tmpList1.append(line[:-1].split(" "))
if secondoBlocco:
tmpList2.append(line[:-1])
if terzoBlocco:
tmpList3.append(line[:-1])
tmpList1 = np.array(tmpList1).astype(float)
tmpList2 = np.array(tmpList2).astype(float)
tmpList3 = np.array(tmpList3).astype(float)
lista1.append(tmpList1.copy())
lista2.append(tmpList2.copy())
lista3.append(tmpList3.copy())
..\Data\SDT\HSA10uM+Fasano10nM.asc ..\Data\SDT\CatalaseFITC.asc ..\Data\SDT\Dye10nM_5kHz_c1.asc ..\Data\SDT\Fasano10nM.asc ..\Data\SDT\Fitc_STANDARD.asc ..\Data\SDT\allineamento_diodo2_effettivo.asc
NEW
def myExp(x, N, td, s, T, tt, c): return (1/N) (1/(1+ x/td)) (1+ x/(tds2))(-.5) (1 - T + T*np.exp(-x/tt)) / (1-T) + c
dataset = "Fitc_STANDARD" dati = lista1[nameToIdx[dataset]]
xData = dati[:,0] yData = dati[:,1]
cond = xData > 5
xFit = xData[cond] yFit = yData[cond]
p0 = [6.93565896e-01, 1.95028590e-04, 6.99182585e+00, 7.56745114e-02,1, 0.01]
popt, pcov = curve_fit(myExp, xFit, yFit, maxfev = 1000000, p0=p0,)# bounds = ( (0,0,0,0,1,0), (1,1,10,1,10,1)) )
fig, ax = plt.subplots() fig.set_size_inches(12,5)
ax.plot(xData, yData, c = "tab:green", label = dataset) ax.plot(xFit, myExp(xFit, *popt), ls = ":", c = "k")
ax.grid() ax.legend(fontsize = 14) ax.set_xlabel("Time [us]", fontsize = 14) ax.set_ylabel("NACF", fontsize = 14) ax.set_title("Normalized auto correlation function vs time", fontsize = 16)
ax.set_ylim((0.9,10)) ax.set_xscale("log")
plt.show()
print(f"N:\t{popt[0]}") print(f"td:\t{popt[1]}") print(f"s:\t{popt[2]}") print(f"T:\t{popt[3]}") print(f"tt:\t{popt[4]}")
print(f"Offset:\t{popt[5]}")
def myExp(x, N, td, s, c):
return (1/N) * (1/(1+ x/td)) * (1+ x/(td*s**2))**(-.5) + c
dataset = "Fitc_STANDARD"
dati = lista1[nameToIdx[dataset]]
xData = dati[:,0]
yData = dati[:,1]
cond = xData > 10
xFit = xData[cond]
yFit = yData[cond]
p0 = [1, 50, 5, 1]
popt, pcov = curve_fit(myExp, xFit, yFit, maxfev = 1000000,
p0=p0)#, bounds = ( (0,30,4, 0.9), (10,150,6, 1.1)) )
fig, ax = plt.subplots()
fig.set_size_inches(12,5)
ax.plot(xData, yData, c = "tab:green", label = dataset)
ax.plot(xFit, myExp(xFit, *popt), ls = ":", c = "k", label = "Fit curve")
ax.plot(xFit, myExp(xFit, *p0), ls = "--", c = "r", label = "Initialized curve")
ax.grid()
ax.legend(fontsize = 14)
ax.set_xlabel("Time [us]", fontsize = 14)
ax.set_ylabel("NACF", fontsize = 14)
ax.set_title("Normalized auto correlation function vs time", fontsize = 16)
ax.set_ylim((0.9,6))
ax.set_xlim((1,1e4))
ax.set_xscale("log")
plt.show()
print(f"N:\t{popt[0]}")
print(f"td:\t{popt[1]}")
print(f"s:\t{popt[2]}")
print(f"Offset:\t{popt[3]}")
N: 0.4347999676891029 td: 38.89859805785607 s: -5.195051296992854 Offset: 1.0012519336793666
Voglio calcolare $c$ che è la concentrazione vera. $C$ è molare
\begin{equation} G_0 = \frac{1}{C\cdot V} \implies C = \frac{1}{G_0\cdot V} \end{equation}\begin{equation} c = \frac{C}{N_a} = \frac{1}{G_0\cdot V \cdot N_a} = \frac{N}{V \cdot N_a} \end{equation}N = popt[0]
tauD = popt[1] * 1e-6
s = np.abs(popt[2])
# Tabulato
D = 4.25e-6 * 1e-4
# Calcoli
r0 = np.sqrt(4 * D * tauD)
print(f"r0 = {r0*1e9:.2f} nm")
# Formula: s = (r0/z0)^2
z0 = r0 / np.sqrt(s)
z0 = r0 *s
print(f"z0 = {z0*1e9:.2f} nm")
vol = np.pi ** (3/2) * z0 * (r0**2)
print(f"volume confocale = {vol*1e3*1e15:.2f} fL")
# Formula: 1/N = 1/veff*C ==> N = Veff*c
Na = 6.02e23
c = N/(vol*Na)
print(f"Concentrazione: {c*1e9:.2f} nM")
print(f"N: {N}\tvol: {vol}\tNa: {Na}\t")
r0 = 257.15 nm z0 = 1335.92 nm volume confocale = 0.49 fL Concentrazione: 1468.26 nM N: 0.4347999676891029 vol: 4.919137420948151e-19 Na: 6.02e+23
def myExp(x, N, td, s, T, tt, c): return (1/N) (1/(1+ x/td)) (1+ sx/td)**(-.5) (1 - T + T*np.exp(-x/tt)) / (1-T) + c
dataset = "CatalaseFITC" dati = lista1[nameToIdx[dataset]]
xData = dati[:,0] yData = dati[:,1]
cond = xData > 0.1
xFit = xData[cond] yFit = yData[cond]
p0 = [6.93565896e-01, 1.95028590e-04, 6.99182585e+00, 7.56745114e-02,1, 0.01]
popt, pcov = curve_fit(myExp, xFit, yFit, maxfev = 1000000, p0=p0, bounds = ( (0,0,0,0,1,0), (1,1,10,1,10,1)) )
fig, ax = plt.subplots() fig.set_size_inches(12,5)
ax.plot(xData, yData, c = "tab:green", label = dataset) ax.plot(xFit, myExp(xFit, *popt), ls = ":", c = "k")
ax.grid() ax.legend(fontsize = 14) ax.set_xlabel("Time [us]", fontsize = 14) ax.set_ylabel("NACF", fontsize = 14) ax.set_title("Normalized auto correlation function vs time", fontsize = 16)
ax.set_ylim((0.9,1.3)) ax.set_xscale("log")
plt.show()
print(f"N:\t{popt[0]}") print(f"td:\t{popt[1]}") print(f"s:\t{popt[2]}") print(f"T:\t{popt[3]}") print(f"tt:\t{popt[4]}")
print(f"Offset:\t{popt[5]}")
def myExp(x, N, td, s, c):
return (1/N) * (1/(1+ x/td)) * (1+ x/(td*s**2))**(-.5) + c
dataset = "CatalaseFITC"
dati = lista1[nameToIdx[dataset]]
xData = dati[:,0]
yData = dati[:,1]
cond = xData > 5
xFit = xData[cond]
yFit = yData[cond]
p0 = [1, 50, 5, 1]
popt, pcov = curve_fit(myExp, xFit, yFit, maxfev = 1000000,
p0=p0, bounds = ( (0,50,4, .9), (1000,150,6, 1.1)) )
fig, ax = plt.subplots()
fig.set_size_inches(12,5)
ax.plot(xData, yData, c = "tab:green", label = dataset)
ax.plot(xFit, myExp(xFit, *popt), ls = ":", c = "k", label = "Fit curve")
ax.plot(xFit, myExp(xFit, *p0), ls = "--", c = "r", label = "Initialized curve")
ax.grid()
ax.legend(fontsize = 14)
ax.set_xlabel("Time [us]", fontsize = 14)
ax.set_ylabel("NACF", fontsize = 14)
ax.set_title("Normalized auto correlation function vs time", fontsize = 16)
ax.set_ylim((0.975,1.05))
ax.set_xlim((1,1e4))
ax.set_xscale("log")
plt.show()
print(f"N:\t{popt[0]}")
print(f"td:\t{popt[1]}")
print(f"s:\t{popt[2]}")
print(f"Offset:\t{popt[3]}")
N: 110.90885172054918 td: 95.64973648077842 s: 5.9999998765161875 Offset: 1.0005394338576734
def myExp(x, N, td, s, T, tt, c): return (1/N) (1/(1+ x/td)) (1+ sx/td)**(-.5) (1 - T + T*np.exp(-x/tt)) / (1-T) + c
dataset = "Fasano10nM" dati = lista1[nameToIdx[dataset]]
xData = dati[:,0] yData = dati[:,1]
cond = xData > .6
xFit = xData[cond] yFit = yData[cond]
p0 = [6.93565896e-01, 1.95028590e-04, 6.99182585e+00, 7.56745114e-02,1, 0.01]
popt, pcov = curve_fit(myExp, xFit, yFit, maxfev = 1000000, p0=p0, bounds = ( (0,0,0,0,1,0), (1,1,10,1,10,1)) )
fig, ax = plt.subplots() fig.set_size_inches(12,5)
ax.plot(xData, yData, c = "tab:green", label = dataset) ax.plot(xFit, myExp(xFit, *popt), ls = ":", c = "k")
ax.grid() ax.legend(fontsize = 14) ax.set_xlabel("Time [us]", fontsize = 14) ax.set_ylabel("NACF", fontsize = 14) ax.set_title("Normalized auto correlation function vs time", fontsize = 16)
ax.set_ylim((0,5)) ax.set_xscale("log")
plt.show()
print(f"N:\t{popt[0]}") print(f"td:\t{popt[1]}") print(f"s:\t{popt[2]}") print(f"T:\t{popt[3]}") print(f"tt:\t{popt[4]}")
print(f"Offset:\t{popt[5]}")
def myExp(x, N, td, s, c):
return (1/N) * (1/(1+ x/td)) * (1+ x/(td*s**2))**(-.5) + c
dataset = "Fasano10nM"
dati = lista1[nameToIdx[dataset]]
xData = dati[:,0]
yData = dati[:,1]
cond = xData > 6
xFit = xData[cond]
yFit = yData[cond]
p0 = [5, 150, 5, 1]
popt, pcov = curve_fit(myExp, xFit, yFit, maxfev = 1000000,
p0=p0, bounds = ( (0,30,4, 0.9), (10,150,6, 1.1)) )
fig, ax = plt.subplots()
fig.set_size_inches(12,5)
ax.plot(xData, yData, c = "tab:green", label = dataset)
ax.plot(xFit, myExp(xFit, *popt), ls = ":", c = "k", label = "Fit curve")
ax.plot(xFit, myExp(xFit, *p0), ls = "--", c = "r", label = "Initialized curve")
ax.grid()
ax.legend(fontsize = 14)
ax.set_xlabel("Time [us]", fontsize = 14)
ax.set_ylabel("NACF", fontsize = 14)
ax.set_title("Normalized auto correlation function vs time", fontsize = 16)
ax.set_xscale("log")
ax.set_ylim((0.95,2))
ax.set_xlim((1, 1e4))
plt.show()
print(f"N:\t{popt[0]}")
print(f"td:\t{popt[1]}")
print(f"s:\t{popt[2]}")
print(f"Offset:\t{popt[3]}")
N: 1.8684507501700462 td: 34.0067179592556 s: 5.999999999999999 Offset: 1.0041217929192205
def myExp(x, N, td, s, T, tt, c): return (1/N) (1/(1+ x/td)) (1+ sx/td)**(-.5) (1 - T + T*np.exp(-x/tt)) / (1-T) + c
dataset = "HSA10uM+Fasano10nM" dati = lista1[nameToIdx[dataset]]
xData = dati[:,0] yData = dati[:,1]
cond = xData > 5
xFit = xData[cond] yFit = yData[cond]
p0 = [6.93565896e-01, 1.95028590e-04, 6.99182585e+00, 7.56745114e-02,1, 0.01] p0 = [5, 150, 5, 0.3, 3, 1]
popt, pcov = curve_fit(myExp, xFit, yFit, maxfev = 1000000, p0=p0, bounds = ( (0,0,4, 0,1,0), (10,1000,6, 1,10,2)) )
fig, ax = plt.subplots() fig.set_size_inches(12,5)
ax.plot(xData, yData, c = "tab:green", label = dataset) ax.plot(xFit, myExp(xFit, popt), ls = ":", c = "k") ax.plot(xFit, myExp(xFit, p0), ls = "--", c = "r")
ax.grid() ax.legend(fontsize = 14) ax.set_xlabel("Time [us]", fontsize = 14) ax.set_ylabel("NACF", fontsize = 14) ax.set_title("Normalized auto correlation function vs time", fontsize = 16)
ax.set_ylim((0.7,1.6)) ax.set_xlim((1, 1e4)) ax.set_xscale("log")
plt.show()
print(f"N:\t{popt[0]}") print(f"td:\t{popt[1]}") print(f"s:\t{popt[2]}") print(f"T:\t{popt[3]}") print(f"tt:\t{popt[4]}")
print(f"Offset:\t{popt[5]}")
def myExp(x, N, td, s, c):
return (1/N) * (1/(1+ x/td)) * (1+ x/(td*s**2))**(-.5) + c
dataset = "HSA10uM+Fasano10nM"
dati = lista1[nameToIdx[dataset]]
xData = dati[:,0]
yData = dati[:,1]
cond = xData > 10
xFit = xData[cond]
yFit = yData[cond]
p0 = [5, 150, 5, 1]
popt, pcov = curve_fit(myExp, xFit, yFit, maxfev = 1000000,
p0=p0, bounds = ( (0,30,4, 0.9), (10,150,6, 1.1)) )
fig, ax = plt.subplots()
fig.set_size_inches(12,5)
ax.plot(xData, yData, c = "tab:green", label = dataset)
ax.plot(xFit, myExp(xFit, *popt), ls = ":", c = "k", label = "Fit curve")
ax.plot(xFit, myExp(xFit, *p0), ls = "--", c = "r", label = "Initialized curve")
ax.grid()
ax.legend(fontsize = 14)
ax.set_xlabel("Time [us]", fontsize = 14)
ax.set_ylabel("NACF", fontsize = 14)
ax.set_title("Normalized auto correlation function vs time", fontsize = 16)
ax.set_ylim((0.95,1.16))
ax.set_xlim((10, 1e4))
ax.set_xscale("log")
plt.show()
print(f"N:\t{popt[0]}")
print(f"td:\t{popt[1]}")
print(f"s:\t{popt[2]}")
print(f"Offset:\t{popt[3]}")
N: 6.563015555765841 td: 103.76435645879971 s: 5.999999999999996 Offset: 1.005253855495564
N = popt[0]
tauD = popt[1] * 1e-6
s = np.abs(popt[2])
# Tabulato
D = 4.25e-6 * 1e-4
# Calcoli
r0 = np.sqrt(4 * D * tauD)
print(f"r0 = {r0*1e9} nm")
# Formula: s = (r0/z0)^2
z0 = r0 / np.sqrt(s)
print(f"z0 = {z0*1e9} nm")
vol = np.pi ** (3/2) * z0 * (r0**2)
print(f"volume confocale = {vol*1e3} L")
# Formula: 1/N = 1/veff*C ==> N = Veff*c
Na = 6.02e23
c = N/(vol*Na)
print(f"Concentrazione: {c*1e9} nM")
print(f"N: {N}\tvol: {vol}\tNa: {Na}\t")
r0 = 419.9992928326898 nm z0 = 171.4639932949771 nm volume confocale = 1.684204647096305e-16 L Concentrazione: 64730.9649360024 nM N: 6.563015555765841 vol: 1.684204647096305e-19 Na: 6.02e+23