3S
  • Portfolio Top
  • Categories
  • Tags
  • Archives

シミュレーション実習 Day2

シミュレーション実習¶

Day.2: 蛍光プローブと化学反応シミュレーション

  • 担当:黒田研究室
  • 実習のwiki:Slides and programs
In [1]:
import numpy as np
import matplotlib.pyplot as plt

概要¶

  1. 蛍光プローブ(カルシウム指示薬):化学的指示薬と遺伝子工学的指示薬
  2. プローブの反応速度:反応速度が応答波形に与える影響
  3. プローブの解離定数:解離定数が応答感度に与える影響
  4. プローブの緩衝作用:競合阻害の可能性
  5. まとめ & 発展課題

1. 蛍光プローブ

  • Probeとは、"探査する道具" のこと。例:宇宙探査機(Space probe)
  • 蛍光プローブ(fluorescent probe) は、「生物を調べること」が目的。様々な分子を可視化することができる。
  • 細胞内/細胞/組織/器官/個体など、様々なスケールで使われる。
  • 例としては、カルシウム($\mathrm{Ca}^{2+}$)指示薬が挙げられる。$\mathrm{Ca}^{2+}$ は炎症・代謝・筋収縮・記憶・免疫など、非常に多くの生命現象に関わるので重要!最近では、カエルの形態形成における細胞骨格変化やマウスの社会性行動におけるニューロン発火などで利用されている。

カルシウム($\mathrm{Ca}^{2+}$)指示薬の分類¶

  • 化学的指示薬(Chemical indicator)
    • キレート剤(EGTA)を改変した小分子
    • in vitro(生体外)でしか使えない
  • 遺伝子工学的指示薬(GECI)
    • 生物由来の蛍光タンパク質を改変した高分子
    • 遺伝子組み換えによって細胞自身に作らせる
    • in vivo(生体内)でも使える

各種 $\mathrm{Ca}^{2+}$ 指示薬¶

名称 励起波長(nm) 蛍光波長(nm) $\mathrm{Ca}$ 錯体解離定数 $\mathrm{K_d}$(nM) 摘要
Quin2 339 492 115
Fura2 340/380 510 224 2波長励起・1波長蛍光
Fluo3 508 527 0.4
Indo1 330 Ca free: 485
Ca bind: 410
250 1波長励起・2波長蛍光
Rhod2 553 576 1000
Fluo4 493 518 345
Cameleon 各波長 各波長 各濃度 遺伝子工学的指示薬、多数の変異体がある。
GCaMP 各波長 各波長 各濃度 遺伝子工学的指示薬、多数の変異体がある。

参考HP:飯野研@東大医

反応の定式化¶

$\mathrm{Ca}^{2+}$ 指示薬は基本的にはキレート剤($\mathrm{Ca}^{2+}$ と複合体を形成する)であり、$\mathrm{Ca}^{2+}$ 指示薬の応答は分子間相互作用として以下のようにモデル化できる。

$$\mathrm{Ca}^{2+}\text{indicator} + \mathrm{Ca}^{2+}\overset{k_{\mathrm{f}}}{\underset{k_{\mathrm{b}}}{\rightleftarrows}}\mathrm{Ca}^{2+}\cdot\mathrm{Ca}^{2+}\text{indicator}$$
  • 順反応速度: $\mathbf{v}_{\mathrm{f}}=\mathrm{k}_{\mathrm{f}} \cdot\left[\mathrm{Ca}^{2+} \text { indicator }\right] \cdot\left[\mathrm{Ca}^{2+}\right]$
  • 逆反応速度: $\mathbf{v}_{\mathrm{b}}=\mathrm{k}_{\mathrm{b}} \cdot\left[\mathrm{Ca}^{2+} \cdot \mathrm{Ca}^{2+} \text { indicator }\right]$

したがって、$\mathrm{k}_{\mathrm{f}}, \mathrm{k}_{\mathrm{b}}$ の値が大きいほどそれぞれの反応速度が大きい。

また、平衡状態では両方向の反応速度が等しいため、以下の式が成り立つ。

$$\begin{aligned} &\mathrm{k}_{\mathrm{f}} \cdot\left[\mathrm{Ca}^{2+} \text { indicator }\right] \cdot\left[\mathrm{Ca}^{2+}\right]=\mathrm{k}_{\mathrm{b}} \cdot\left[\mathrm{Ca}^{2+} \cdot \mathrm{Ca}^{2+} \text { indicator }\right]\\ &\mathrm{K}_{\mathrm{d}}=\frac{\mathrm{k}_{\mathrm{b}}}{\mathrm{k}_{\mathrm{f}}}=\frac{\left[\mathrm{Ca}^{2+}\mathrm{indicator}\right] \cdot\left[\mathrm{Ca}^{2+}\right]}{\left[\mathrm{Ca}^{2+} \cdot \mathrm{Ca}^{2+} \mathrm{indicator}\right]}\end{aligned}$$

この時、$\mathrm{K_d} = \mathrm{k_b/k_f}$ を解離定数と呼び、基質親和性が高いほどこの値が小さくなることがわかる。

さらに、カルシウムと結合しているプローブの割合を $\mathrm{P}$ とおくと、

$$ \begin{aligned} \mathrm{P} &=\frac{\left[\mathrm{Ca}^{2+} \cdot \mathrm{Ca}^{2+} \text { indicator }\right]}{\left[\mathrm{Ca}^{2+} \text { indicator }\right]_{\mathrm{all}}}\\ &=\frac{\left[\mathrm{Ca}^{2+} \cdot \mathrm{Ca}^{2+} \text { indicator }\right]}{\left[\mathrm{Ca}^{2+} \text { indicator }\right] + \left[\mathrm{Ca}^{2+} \cdot \mathrm{Ca}^{2+} \text { indicator }\right]}\\ &= \frac{1}{\frac{\left[\mathrm{Ca}^{2+} \text { indicator }\right]}{\left[\mathrm{Ca}^{2+} \cdot \mathrm{Ca}^{2+} \text { indicator }\right]} + 1}\\ &= \frac{1}{\frac{\mathrm{K_d}}{\left[\mathrm{Ca}^{2+}\right]} + 1}\\ &= \frac{\left[\mathrm{Ca}^{2+}\right]}{\mathrm{K_d} + \left[\mathrm{Ca}^{2+}\right]} \end{aligned} $$

よって、両辺逆数を取ると、

$$\frac{1}{\mathrm{P}} = \mathrm{K_d}\cdot\frac{1}{\left[\mathrm{Ca}^{2+}\right]} + 1$$

となり、$1/\mathrm{P}$ が $1/\left[\mathrm{Ca}^{2+}\right]$ に対する1次関数となることがわかる。

本実習で検証するポイント

  • プローブはカルシウム応答に追従できる?
  • 定量できるカルシウム濃度の限界とは?
  • プローブは生体(生化学反応)に影響を与えない?
  • 2. プローブの反応速度

    課題1:$\mathrm{Ca}^{2+}$ プローブのカルシウム結合¶

    ステップ $\mathrm{Ca}^{2+}$ 刺激($t=20$ において $0\ \mathrm{nM}\Rightarrow100\ \mathrm{nM}$ ) を与えた時の $\mathrm{Ca}^{2+}$ 指示薬(Indo1)の応答をシミュレートしなさい。また、グラフ($19.95-20.05\ \mathrm{sec}$)を拡大して、プローブの応答を詳細に観察しなさい。(発展課題)

    $\mathrm{Ca}$ 指示薬 $\mathrm{K_d\ (nM)}$ $\mathrm{k_f(1/M/sec)}$ $\mathrm{k_b(1/sec)}$
    Indol $191$ $9.4\times10^8$ $180$
    In [2]:
    A  = 0     # カルシウムの濃度 
    B  = 1e-6  # プローブの濃度(1 µM)
    AB = 0     # 複合体の濃度
    
    In [3]:
    kf = 9.4 * 10**8
    kb = 180
    
    In [4]:
    dt = 0.0001 # 0.0001sec 刻み
    
    In [5]:
    time = np.arange(0,40,dt) 
    
    In [6]:
    Ca = np.zeros(len(time))
    Probe = np.zeros(len(time))
    CaComplex = np.zeros(len(time))
    
    In [7]:
    for i,t in enumerate(time):
        dA  = 0 # NOTE: バッファーの仮定(カルシウム濃度は一定に保たれる。)
        dB  = (-kf*A*B + kb*AB) * dt
        dAB = (kf*A*B - kb*AB) * dt
        
        if t==20: dA += 1e-7 # 100 nM
        A+=dA; B+=dB; AB+=dAB
        
        Ca[i]=A; Probe[i]=B; CaComplex[i]=AB   # 記録  
    
    In [8]:
    yticks = [0,0.5,1,1.5,2] # 軸を綺麗に表示するため
    plt.plot(time,Ca,label="$\mathrm{Ca}^{2+}$", color="blue")
    plt.plot(time,Probe, label="$\mathrm{CaProbe}$", color="red")
    plt.plot(time,CaComplex, label="$\mathrm{Complex}$", color="black")
    plt.title("Simulation result [kadai1]")
    plt.xlabel("time (sec)")
    plt.ylabel("conc.(M) ×$10^{-6}$")
    plt.yticks([i*1e-6 for i in yticks],yticks)
    plt.legend()
    plt.show()
    

    発展課題¶

    In [9]:
    yticks = [0,0.5,1,1.5,2] # 軸を綺麗に表示するため
    plt.plot(time,Ca,label="$\mathrm{Ca}^{2+}$", color="blue")
    plt.plot(time,Probe, label="$\mathrm{CaProbe}$", color="red")
    plt.plot(time,CaComplex, label="$\mathrm{Complex}$", color="black")
    plt.title("Simulation result [kadai1+]")
    plt.xlabel("time (sec)")
    plt.ylabel("conc.(M) ×$10^{-6}$")
    plt.yticks([i*1e-6 for i in yticks],yticks)
    plt.xlim(19.95,20.05) # 追加
    plt.legend()
    plt.show()
    

    課題2.1:$\mathrm{Ca}^{2+}$ プローブのカルシウム結合¶

    ~化学的指示薬(反応速度定数が大きいプローブ)~

    先ほどの反応系で、$100\ \mathrm{nM}$ パルス $\mathrm{Ca}^{2+}$ 刺激を与えた時の $\mathrm{Ca}^{2+}$ 指示薬(Indo1)の応答をシミュレートしなさい。

    In [10]:
    A  = 0     # カルシウムの濃度 
    B  = 1e-6  # プローブの濃度(1 µM)
    AB = 0     # 複合体の濃度
    
    In [11]:
    kf = 9.4 * 10**8
    kb = 180
    
    In [12]:
    dt = 0.0001 # 0.0001sec 刻み
    
    In [13]:
    time = np.arange(0,60,dt) 
    
    In [14]:
    Ca = np.zeros(len(time))
    Probe = np.zeros(len(time))
    CaComplex = np.zeros(len(time))
    
    In [15]:
    for i,t in enumerate(time):
        dA  = 0 # NOTE: バッファーの仮定(カルシウム濃度は一定に保たれる。)
        dB  = (-kf*A*B + kb*AB) * dt
        dAB = (kf*A*B - kb*AB) * dt
        
        if t==20: dA += 1e-7 # 100 nM
        if t==40: dA -= 1e-7
        A+=dA; B+=dB; AB+=dAB
        
        Ca[i]=A; Probe[i]=B; CaComplex[i]=AB   # 記録  
    
    In [16]:
    yticks = [0,0.5,1,1.5] # 軸を綺麗に表示するため
    plt.plot(time,Ca,label="$\mathrm{Ca}^{2+}$", color="blue")
    plt.plot(time,Probe, label="$\mathrm{CaProbe}$", color="red")
    plt.plot(time,CaComplex, label="$\mathrm{Complex}$", color="black")
    plt.title("Simulation result [kadai2.1]")
    plt.xlabel("time (sec)")
    plt.ylabel("conc.(M) ×$10^{-6}$")
    plt.yticks([i*1e-6 for i in yticks],yticks)
    plt.legend()
    plt.show()
    

    課題2.2:$\mathrm{Ca}^{2+}$ プローブのカルシウム結合¶

    ~遺伝子工学的指示薬(反応速度定数が大きいプローブ)~

    Cameleon3.6に $100\ \mathrm{nM}$ のパルスカルシウム刺激を与えた時の応答波形をシミュレーションしなさい。

    $\mathrm{Ca}$ 指示薬 $\mathrm{K_d\ (nM)}$ $\mathrm{k_f(1/M/sec)}$ $\mathrm{k_b(1/sec)}$
    Cameleon 3.60 $215$ $1.33\times10^6$ $0.33$
    Cameleon-Nano 15 $15$ $2.36\times10^7$ $0.33$
    Indol $191$ $9.4\times10^8$ $180$
    In [17]:
    A  = 0     # カルシウムの濃度 
    B  = 1e-6  # プローブの濃度(1 µM)
    AB = 0     # 複合体の濃度
    
    In [18]:
    kf = 1.33 * 10**6
    kb = 0.33
    
    In [19]:
    dt = 0.0001 # 0.0001sec 刻み
    
    In [20]:
    time = np.arange(0,60,dt) 
    
    In [21]:
    Ca = np.zeros(len(time))
    Probe = np.zeros(len(time))
    CaComplex = np.zeros(len(time))
    
    In [22]:
    for i,t in enumerate(time):
        dA  = 0 # NOTE: バッファーの仮定(カルシウム濃度は一定に保たれる。)
        dB  = (-kf*A*B + kb*AB) * dt
        dAB = (kf*A*B - kb*AB) * dt
        
        if t==20: dA += 1e-7 # 100 nM
        if t==40: dA -= 1e-7
        A+=dA; B+=dB; AB+=dAB
        
        Ca[i]=A; Probe[i]=B; CaComplex[i]=AB   # 記録  
    
    In [23]:
    yticks = [0,0.5,1,1.5] # 軸を綺麗に表示するため
    plt.plot(time,Ca,label="$\mathrm{Ca}^{2+}$", color="blue")
    plt.plot(time,Probe, label="$\mathrm{CaProbe}$", color="red")
    plt.plot(time,CaComplex, label="$\mathrm{Complex}$", color="black")
    plt.title("Simulation result [kadai2.2]")
    plt.xlabel("time (sec)")
    plt.ylabel("conc.(M) ×$10^{-6}$")
    plt.yticks([i*1e-6 for i in yticks],yticks)
    plt.legend()
    plt.show()
    

    プローブの応答は必ずしもカルシウム波形を正確に反映しているわけではない!!

    →プローブを使う際は、応答速度に注意が必要!!

    課題3:$\mathrm{Ca}^{2+}$ プローブと反応速度定数¶

    ~遺伝子工学的指示薬~

    Cameleon 3.6にパルス幅 $50\ \mathrm{msec},100\ \mathrm{nM}$ のカルシウムインパルス刺激を $10$ 回行った時の応答をシミュレートしなさい。刺激間隔は $0.5, 1, 2$ 秒とする。

    In [24]:
    spans = [0.5,1,2]
    
    In [25]:
    fig = plt.figure(figsize=(16,4))
    
    In [26]:
    for j,span in enumerate(spans):
        ax = fig.add_subplot(1,3,j+1)
        #=== パラメータ ===
        A  = 0     # カルシウムの濃度 
        B  = 1e-6  # プローブの濃度(1 µM)
        AB = 0     # 複合体の濃度
        kf = 1.33 * 10**6
        kb = 0.33
        count = 10 # カルシウムインパルス刺激回数
        duration = 0.05 # 継続時間(50 msec)
        time = np.arange(0,span*count,dt)
        
        #=== 記憶場所 ===
        Ca = np.zeros(len(time))
        Probe = np.zeros(len(time))
        CaComplex = np.zeros(len(time))
        
        #=== シミュレーション ===
        for i,t in enumerate(time):
            dA  = 0 # NOTE: バッファーの仮定(カルシウム濃度は一定に保たれる。)
            dB  = (-kf*A*B + kb*AB) * dt
            dAB = (kf*A*B - kb*AB) * dt
    
            if np.isclose(t%span, 0): dA += 1e-7 # 100 nM
            if np.isclose(t%span, duration): dA -= 1e-7
            A+=dA; B+=dB; AB+=dAB
    
            Ca[i]=A; Probe[i]=B; CaComplex[i]=AB   # 記録  
        
        #=== プロット ===
        yticks = [0,0.5,1,1.5,2] # 軸を綺麗に表示するため
        ax.scatter(time,Ca,label="$\mathrm{Ca}^{2+}$", color="blue", s=3)
        ax.plot(time,Probe, label="$\mathrm{CaProbe}$", color="red")
        ax.plot(time,CaComplex, label="$\mathrm{Complex}$", color="black")
        ax.set_title("Simulation result [kadai3] span={}[s]".format(span))
        ax.set_xlabel("time (sec)")
        ax.set_ylabel("conc.(M) ×$10^{-7}$")
        ax.set_yticks([i*1e-7 for i in yticks], yticks)
        ax.set_ylim(0,2*1e-7)
        ax.legend()
        
    
    plt.tight_layout()
    plt.show()
    

    ※ $y$ 軸の目盛りに注目すればわかるが、カルシウム $\mathrm{Ca^{2+}}$ 濃度が見えないのは、目盛り内に収まっていないから。

    3. プローブの解離定数

    課題4:$\mathrm{Ca}^{2+}$ イメージングの応答感受性について¶

    ~検出限界の問題~

    以下のそれぞれのプローブにステップカルシウム刺激を与えた際の応答波形とドーズレスポンスを調べなさい。

    $\mathrm{Ca}$ 指示薬 $\mathrm{K_d\ (nM)}$ $\mathrm{k_f(1/M/sec)}$ $\mathrm{k_b(1/sec)}$
    Cameleon 3.60 $215$ $1.33\times10^6$ $0.33$
    Cameleon-Nano 15 $15$ $2.36\times10^7$ $0.33$

    ドーズレスポンス(用量反応曲線)

    ドーズレスポンス(用量反応曲線)とは、生物に対して化学物質や物理的作用を与えたときに、その作用強度と生物が示す反応の関係性を表す曲線のこと。

    In [27]:
    params = {
        "Cameleon3.6":
        {
            "kf": 1.33*10**6,
            "kb": 0.33,
        },
        "Cameleon-Nano15":
        {
            "kf": 2.36*10**7,
            "kb": 0.33,
        }
    }
    
    In [28]:
    names = ["Cameleon3.6", "Cameleon-Nano15"]
    
    In [29]:
    dt = 0.0001 # 0.1 msec 刻み
    
    In [30]:
    time = np.arange(0,40,dt) 
    
    In [31]:
    Ca = np.zeros(len(time))
    Probe = np.zeros(len(time))
    CaComplex = np.zeros(len(time))
    
    In [32]:
    dCas = [1e-7*i for i in range(21)]
    
    In [33]:
    ticks_cons = [0,0.5,1,1.5,2]
    ticks_dose_cameleon3_6 = [i for i in range(10)]
    ticks_dose_cameleonNano = [0,0.2,0.4,0.6,0.8,1]
    
    In [34]:
    fig = plt.figure(figsize=(18,10))
    
    In [35]:
    for c,name in enumerate(names):
        kb = params[name]["kb"]
        kf = params[name]["kf"]
        Complex_max = []
        l_A ="$\mathrm{Ca}^{2+}$"
        l_B ="$\mathrm{CaProbe}$"
        l_AB="$\mathrm{Complex}$"
        ax = fig.add_subplot(2,2,c+1)
        for dca in dCas:
            A=0; B=1e-6; AB=0 # 濃度の初期化
            for i,t in enumerate(time):
                dA  = 0 # NOTE: バッファーの仮定(カルシウム濃度は一定に保たれる。)
                dB  = (-kf*A*B + kb*AB) * dt
                dAB = (kf*A*B - kb*AB) * dt
    
                if t==20: dA += dca # NOTE: ここを調節する。
                A+=dA; B+=dB; AB+=dAB
    
                Ca[i]=A; Probe[i]=B; CaComplex[i]=AB
    
            Complex_max.append(AB)
            ax.plot(time,Ca, color="blue", alpha=0.5, label=l_A)
            ax.plot(time,Probe, color="red", alpha=0.5, label=l_B)
            ax.plot(time,CaComplex,color="black", alpha=0.5, label=l_AB)
            l_A=None; l_B=None; l_AB=None
        ax.set_title("Simulation result {}".format(name))
        ax.set_xlabel("time (sec)")
        ax.set_ylabel("conc.(M) ×$10^{-6}$")
        ax.set_yticks([i*1e-6 for i in ticks_cons])
        ax.set_yticklabels(ticks_cons)
        ax.legend()
        
        #=== Dose response ===
        ax = fig.add_subplot(2,2,2+(c+1))
        ax.plot(dCas,Complex_max)
        ax.set_title("Dose response {}".format(name))
        ax.set_xlabel("$\mathrm{Ca}^{2+}$ conc.(M) ×$10^{-6}$")
        ax.set_xticks([i*1e-6 for i in ticks_cons])
        ax.set_xticklabels(ticks_cons)
        if name == "Cameleon3.6":
            ax.set_yticks([i*1e-7 for i in ticks_dose_cameleon3_6])
            ax.set_yticklabels(ticks_dose_cameleon3_6)
            ax.set_ylabel("$\mathrm{Ca-probe}$ complex cons.(M) × $10^{-7}$")
        else:
            ax.set_yticks([i*1e-6 for i in ticks_dose_cameleonNano])
            ax.set_yticklabels(ticks_dose_cameleonNano)
            ax.set_ylabel("$\mathrm{Ca-probe}$ complex cons.(M) × $10^{-6}$")        
    
    plt.tight_layout()
    plt.show()
    

    Cameleon-Nano15の方は感度が高く、定量性が失われていることがわかる。

    課題5:$\mathrm{Ca}^{2+}$ イメージングの応答感受性について¶

    ~検出限界の問題~

    以下のそれぞれのプローブに $100\mathrm{nM}$ および $5\mathrm{nM}$ の繰り返し矩形波刺激を与えた時にどの様な応答波形になるかシミュレートしなさい。

    $\mathrm{Ca}$ 指示薬 $\mathrm{K_d\ (nM)}$ $\mathrm{k_f(1/M/sec)}$ $\mathrm{k_b(1/sec)}$
    Cameleon 3.60 $215$ $1.33\times10^6$ $0.33$
    Cameleon-Nano 15 $15$ $2.36\times10^7$ $0.33$
    In [36]:
    params = {
        "Cameleon3.6":
        {
            "kf": 1.33*10**6,
            "kb": 0.33,
        },
        "Cameleon-Nano15":
        {
            "kf": 2.36*10**7,
            "kb": 0.33,
        }
    }
    
    In [37]:
    names = ["Cameleon3.6", "Cameleon-Nano15"]
    
    In [38]:
    dt = 0.0001 # 0.1 msec 刻み
    
    In [39]:
    time = np.arange(0,400,dt) 
    
    In [40]:
    Ca = np.zeros(len(time))
    Probe = np.zeros(len(time))
    CaComplex = np.zeros(len(time))
    
    In [41]:
    span=20 # 20 secごとに刺激のスイッチをひねる。
    
    In [42]:
    dCas = [100*1e-9, 5*1e-9]
    
    In [43]:
    fig = plt.figure(figsize=(18,10))
    
    In [44]:
    for c,name in enumerate(names):
        kb = params[name]["kb"]
        kf = params[name]["kf"]
        for r,dca in enumerate(dCas):
            ax = fig.add_subplot(2,2,r*2+c+1)
            flag = 1
            A=0; B=1e-6; AB=0
            for i,t in enumerate(time):
                dA  = 0 # NOTE: バッファーの仮定(カルシウム濃度は一定に保たれる。)
                dB  = (-kf*A*B + kb*AB) * dt
                dAB = (kf*A*B - kb*AB) * dt
    
                if i%int(span/dt) == 0: 
                    dA += dca*flag
                    flag*=-1
                A+=dA; B+=dB; AB+=dAB
    
                Ca[i]=A; Probe[i]=B; CaComplex[i]=AB
    
            ax.scatter(time,Ca, color="blue", label="$\mathrm{Ca}^{2+}$", s=3)
            ax.plot(time,Probe, color="red", label="$\mathrm{CaProbe}$")
            ax.plot(time,CaComplex,color="black", label="$\mathrm{Complex}$")
            ax.set_title("Simulation result input={}nM".format(int(dca * 1e9)))
            ax.set_xlabel("time (sec)")
            ax.set_ylabel("conc.(M) ×$10^{-6}$")
            ax.set_yticks([i*1e-7 for i in range(1,11)])
            ax.set_yticklabels([round(i*0.1,1) for i in range(1,11)])
            ax.set_ylim(0,1e-6)
            ax.legend()
    plt.tight_layout()
    plt.show()
    

    Cameleon 3.60の方は感度が低く、定量性が失われていることがわかる。

    4. プローブの緩衝作用

    In [45]:
    kf0 = 1.33*1e6
    kb0 = 0.33
    kf1 = 1.5*1e8
    kb1 = 23
    
    In [46]:
    dt = 0.00001
    
    In [47]:
    time = np.arange(0,5,dt) 
    
    In [48]:
    Ca = np.zeros(len(time))
    Probe = np.zeros(len(time))
    Protein = np.zeros(len(time))
    ABcomplex = np.zeros(len(time))
    AZcomplex = np.zeros(len(time))
    
    In [49]:
    As = [0.2 * 1e-4 * i for i in range(21)]
    Bs = [1e-4, 0] # + Probe / - Probe
    
    In [50]:
    fig = plt.figure(figsize=(18,10))
    
    In [51]:
    yticks = [0,0.2,0.4,0.6,0.8,1,1.2]
    
    In [52]:
    for r,b in enumerate(Bs):
        CaProteinComplexMax = []
        ax = fig.add_subplot(2,2,r*2+1)
        l_Ca  = "$\mathrm{Ca}$"
        l_Probe  = "$\mathrm{Probe}$"
        l_Protein = "$\mathrm{Protein}$"
        l_AB = "$\mathrm{CaProbeComplex}$"
        l_AZ = "$\mathrm{CaProteinComplex}$"
        for a in As:
            A=a; B=b; Z=1e-4; AB=0; AZ=0
            for i,t in enumerate(time):
                dA  = (-kf1*A*B - kf0*A*Z + kb0*AZ + kb1*AB) * dt
                dB  = (-kf1*A*B + kb1*AB) * dt
                dZ  = (-kf0*A*Z + kb0*AZ) * dt
                dAB = (kf1*A*B - kb1*AB) * dt
                dAZ = (kf0*A*Z - kb0*AZ) * dt
    
                A+=dA; B+=dB; Z+=dZ; AB+=dAB; AZ+=dAZ
    
                Ca[i]=A; Probe[i]=B; Protein[i]=Z; ABcomplex[i]=AB; AZcomplex[i]=AZ
            
            CaProteinComplexMax.append(AZ)
    
            ax.plot(time,Ca, label=l_Ca, color="blue", alpha=0.5)
            ax.plot(time,Probe, label=l_Probe, color="red", alpha=0.5)
            ax.plot(time,Protein, label=l_Protein, color="cyan", alpha=0.5)
            ax.plot(time,ABcomplex, label=l_AB, color="black", alpha=0.5)
            ax.plot(time,AZcomplex, label=l_AZ, color="green", alpha=0.5)
            l_Ca=None; l_Probe=None; l_Protein=None; l_AB=None; l_AZ=None;
        # plt.yticks([1e-5*i for i in range(1,13,2)],[round(0.1*i,1) for i in range(1,13,2)])
        ax.set_xlabel("time (sec)")
        ax.set_ylabel("conc.(M) ×$10^{-4}$")
        ax.set_ylim(0,1e-4)
        ax.set_title("Simulation result initial Probe={}".format(b))
        ax.set_yticks([i*1e-4 for i in yticks])
        ax.set_yticklabels(yticks)
        ax.legend()
        
        ax = fig.add_subplot(2,2,r*2+2)
        ax.plot(As, CaProteinComplexMax, label="CaProteinComplex")
        ax.set_xlabel("input CaConc. ×$10^{-4}$")
        ax.set_ylabel("CaProbeComplex")
        ax.set_yticks([i*1e-4 for i in yticks])
        ax.set_yticklabels(yticks)
        ax.legend()
        
    plt.tight_layout()
    plt.show()
    

    $\mathrm{Ca}^{2+}$ プローブは内在性のたんぱく質と $\mathrm{Ca}^{2+}$ に競合的に結合するため、同じ量のカルシウムが存在しても形成される複合体の量が異なることがわかる。

    課題7:プローブと細胞内の応答の関係¶

    カルシウム振動する細胞にプローブを加えて振動がどの様に変調されるか観察しなさい。加えるプローブ量は $2,20,200\ \mathrm{\mu M}$ とする

    参考:Model of Intercellular Calcium Oscillations in Hepatocytes: Synchronization of Heterogeneous Cells

    In [53]:
    K3=0.12
    K4=0.12
    rou=0.02
    new0=0.2
    newc=4
    new3=9
    new4=3.6
    K0=2.5
    P=2
    alpha=2
    beta=0.1
    d1=0.3
    d2=0.4
    d3=0.2
    dp=0.2
    da=0.4
    k1=40
    k2=0.02
    gamma=0
    kon=9.4*1e2
    koff=180
    
    In [54]:
    dt = 0.0001
    
    In [55]:
    time = np.arange(0,500,dt) 
    
    In [56]:
    PlasmaCa = np.zeros(len(time))
    ERCa = np.zeros(len(time))
    Probe = np.zeros(len(time))
    ProbeComplex = np.zeros(len(time))
    
    In [57]:
    Probe_cons = [200,20,2]
    
    In [58]:
    fig = plt.figure(figsize=(16,4))
    
    In [59]:
    for j,y_init in enumerate(Probe_cons):
        x = 0    # PlasmaCa
        y=y_init # Probe
        z = 2.2  # ERCa
        w = 0    # ProbeComplex
        ax = fig.add_subplot(1,3,j+1)
        for i,t in enumerate(time):
            Jin    = new0+newc*P/(K0+P) # Ca influx from Plasma membrane
            Jout   = new4*(x**2)/(K4**2+x**2) # Ca efflux from Plasma membrane
            Jrel   = (k1* ((d2*P*x*(d1+P)/(d3+P))**3) / ((dp+P)**3 * (da+x)**3 * (d2*(d1+P)/(d3+P)+x)**3 )+k2)*(z-(1+beta)*x)/beta # Ca release from ER
            Jserca = new3* x**2 / (K3**2+x**2) # Ca uptake to ER
            Jprobe = -kon*x*y+koff*w; # Complex net reduction rate
    
            v1 = rou*(Jin-Jout+Jprobe)   # d(Ca)/dt from plasma
            v2 = rou*alpha*(Jrel-Jserca) # d(Ca)/dt from ER
    
            dx = (v1+v2) * dt
            dy = Jprobe * dt
            dz = v1 * dt
            dw = -Jprobe * dt
    
            x+=dx; y+=dy; z+=dz; w+=dw;
            PlasmaCa[i]=x; ERCa[i]=z; Probe[i]=y; ProbeComplex[i]=w
            
        ax.plot(time, PlasmaCa, label="PlasmaCa")
        ax.plot(time, ERCa, label="ERCa")
        ax.plot(time, Probe, label="Probe")
        ax.plot(time, ProbeComplex, label="ProbeComplex")
        ax.set_title("simulation result initial Probe={}µL".format(y_init))
        ax.set_xlabel("time (sec)")
        ax.set_ylabel("conc.(µM)")
        ax.legend()
        
    plt.tight_layout()
    plt.show()
    
    • プローブ濃度が高すぎる($200\ \mathrm{\mu M}$)場合→細胞内応答が阻害される。
    • プローブ濃度が適正な($20\ \mathrm{\mu M}$)場合→細胞内カルシウムの変動が見える。
    • プローブ濃度が低い($200\ \mathrm{\mu M}$)場合→プローブの応答が小さい。

    まとめ

  • 機能性プローブにより細胞内の反応を可視化できる。
  • プローブの応答速度や基質親和性によっては画像から受ける印象が実際の応答とは大きく異なる
  • プローブは添加量によっては細胞内応答を阻害しうる
  • 発展課題(割愛)

    In [ ]:
     
    

    • « 細胞分子生物学Ⅰ 第12回
    • 分子進化学 第10回 »
    hidden
    Table of Contents
    Published
    Jul 10, 2019
    Last Updated
    Jul 10, 2019
    Category
    生命科学基礎実験
    Tags
    • 3S 95
    • 生命科学基礎実験 14
    Contact
    Other contents
    • Home
    • Blog
    • Front-End
    • Kerasy
    • Python-Charmers
    • Translation-Gummy
      • 3S - Shuto's Notes
      • MIT
      • Powered by Pelican. Theme: Elegant