Vous êtes sur la page 1sur 12

synapse_td1

November 7, 2019

1 Tp liberation vésiculaire
In [1]: # chargement des librairies nécessaires

import numpy as np
import numpy.random as nprnd
import matplotlib.pyplot as plt
import statistics as st

1.1 on crée une variable de bernoulli qui effectue un tirage equiprobable entre 0 et 1
In [2]: nprnd.choice ((0,1))

Out[2]: 1

1.2 on effectue ce tirage 20 fois


In [3]: nprnd.choice ((0,1), size=20)

Out[3]: array([1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1])

In [4]: ## on effectue ce tirage 20 fois avec une probabilité de 0.8 pour "1" et 0.2 pour "0"

In [5]: nprnd.choice ((0,1), size=20, replace=True, p=(0.2, 0.8))

Out[5]: array([1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

1.3 On remplit un vecteur "moy" avec la moyenne du tirage (n=1000) et un vecteur


"var" avec la variance pour 10 valeurs de p (0, 0.1, 0.2 , 0.3, 0.4, ...1)
In [6]: moy=[] # on crée un vecteur vide
var1=[]
p1=[]

for i in range(0,11) : # boucle de 0 à 11 par pas de 1

p=i*0.1 #soit p de 0 à 1 par pas de 0.1


q=1-p # q probalilité de non p

1
moy.append(np.mean(nprnd.choice ((0,1), size=1000, replace=True, p=(1-p, p))))
# append rempli le vecteur au fur et à mesure de l'avancement de la boucle

var1.append(np.var(nprnd.choice ((0,1), size=1000, replace=True, p=(1-p, p))))

p1.append(p)

#print(moy)
#print(var1)
#print(p1)

plt.plot(p1, moy)
plt.show()
plt.plot(p1,var1)
plt.show()

# la moyenne augmente avec p car moy=p et la variance est parabolique var=p(1-p).


# Voir cours.

2
1.4 lisez le prgm suivant et interprétez le.
In [7]: def ppse_single(n, p, mq, sdq): # on crée une fonction
"""
Potentiel post-synaptique simple.

n: nombre de sites de libération


p: probabilité de libération
mq: courant quantique moyen cad le courant provoqué par le contenu en
transmetteur d'une seule vésicule
sdsq: écart-type du courant.
On prend en compte que les courant minis ont une certaine
variabilité due au contenu vésiculaire en transmetteur qui est variable.
"""
q = np.random.normal(size=n, loc=mq, scale=sdq)
# création d'un vecteur contenant
#n valeurs tirées d'une loi normale
# moy=loc= mq et sd = scale= sdq.
# Ce vecteur représentent l'amplitude des courants miniatures
# de moyenne mq et d'écart-type sdq.

lib = np.random.choice([0,1], size=n, replace=True, p=(1-p, p))

#création d'un vecteur contenant n valeurs tirées d'une loi binomiale pour mimer
#la libération.

3
#on tire aléatoirement 0 ou 1 avec des probabilités respectives de 1-p et p.
return np.sum(q * lib)
# La fonction retourne un vecteur contenant n fois le produit de q*lib.
# C'est le courant synaptique total

In [8]: # Si on simule une réponse à la stimulation de 10 sites avec p = 0.5, mq= 11 pA


# et sdq = 1 pA

ppse = ppse_single(10,0.5, 11, 1)

print(ppse)

# deuxième essai

ppse = ppse_single(10,0.5, 11, 1)

print(ppse)

# troisième essai

ppse = ppse_single(10,0.5, 11, 1)

print(ppse)

# La variabilité est due à la nature discrete de la libération.


# Ici le nombre de vésicules libérées (5 en moyenne= n*p)
# varie à chaque simulation.

33.42061817132991
34.17657383032615
101.13815570665837

1.5 Analyse de la distribution des réponses synaptiques


In [9]: # simulation répétée: on va faire le travail précédent (5000 fois) et construire
# l'histogramme des réponses avec différents paramêtres

reponse1=[] # premiers parametres


n1=10
p1=0.7
mq1=11
sdq1=1

for i in range(5000) :

4
reponse1.append(ppse_single(n1,p1,mq1,sdq1))

plt.hist(reponse1)

plt.show()

plt.hist(reponse1, bins=70)

plt.show()

"""
Observez la différence entre les histogrammes. Le premier est construit avec des
classes (bin) trop larges qui masquent la nature binomiale.
Si on prend un nombre de classes égal à la racine du nombre de valeur c'est mieux.
Chaque pic correspond à une classe pour laquelle on a 0, 1, 2 .. 10 vésicules libérées.
En tout état de cause, lhistogramme étant un outil visuel, il est possible
de faire varier le nombre de classes. Ceci permet de voir lhistogramme avec un nombre
différent de classes et ainsi de trouver le meilleur compromis.
"""

5
In [10]: # comparaison avec la loi binomiale

rep_bin= nprnd.binomial(n=10, p=0.7, size=5000)


plt.hist(rep_bin, bins=70)
plt.show()

# on retrouve un graphe avec la même forme mais qui exprime simplement


# la distribution de nombre de vésicules libérées
# au cours de 5000 simulations"

6
In [11]: # simulation répétée : modifions certains paramêtres.

# import matplotlib.pyplot as plt # déjà fait

reponse1=[] # second parametres


n1=10
p1=0.1
mq1=11
sdq1=2

for i in range(5000) :
reponse1.append(ppse_single(n1,p1,mq1,sdq1))

plt.hist(reponse1, bins=70)

plt.show()
# ici on a pas mal de valeurs à zéro qui traduisent le nombre elevé
#d'echecs de libération (>1600)

plt.hist(reponse1, bins=70)
plt.ylim(0,500) # on change l'échelle de y pour mieux voir

plt.show()

7
In [12]: # simulation répétée : modifions certains paramêtres: sdq1.

# import matplotlib.pyplot as plt

8
reponse1=[] # second parametres
n1=10
p1=0.1
mq1=11
sdq1=5

for i in range(5000) :
reponse1.append(ppse_single(n1,p1,mq1,sdq1))

plt.hist(reponse1, bins=70)
plt.show()

plt.hist(reponse1, bins=70)
plt.ylim(0,500) # on change l'échelle de y pour mieux voir

plt.show()

# le courant miniature etant plus variable, cela masque les differents pics
# qui se recouvrent.

9
In [13]: # simulation répétée : modifions certains paramêtres.

# import matplotlib.pyplot as plt # déjà fait

reponse1=[] # second parametres


n1=10
p1=0.9
mq1=11
sdq1=2

for i in range(5000) :
reponse1.append(ppse_single(n1,p1,mq1,sdq1))

plt.hist(reponse1, bins=70)
plt.xlim(0,150)

plt.show()
# ici on a aucune valeurs à zéro qui traduisent
#que le nombre elevé d'echecs de libération est quasi nul.
# on observe qu'un pic car p est tres grand.

10
In [14]: # simulation répétée : modifions certains paramêtres; sdq1= 5

# import matplotlib.pyplot as plt # déjà fait

reponse1=[] # second parametres


n1=10
p1=0.9
mq1=11
sdq1=5

for i in range(5000) :
reponse1.append(ppse_single(n1,p1,mq1,sdq1))

plt.hist(reponse1, bins=70)
plt.xlim(0,150)

plt.show()
# ici on a aucune valeurs à zéro qui traduisent que le nombre élevé
#d'echecs de libération est quasi nul.
# on observe qu'un pic car p est tres grand.
# le graphe est plus large car sdq est plus grand

11
12

Vous aimerez peut-être aussi