Other data for exam project¶

In [1]:
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
In [2]:
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

FITCH¶

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]}")

In [3]:
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}
  • $\tau$: us
  • D: cm2 /s
In [4]:
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	

FITCH + CATALYSE¶

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]}")

In [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

DYE FASANO¶

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]}")

In [6]:
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

DYE FASANO + HSA¶

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]}")

In [7]:
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
In [8]:
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