3.5.1. .

3.5.1.1. 対話型プログラムの実行

jupyter-notebook ではCUI(Command User Interface)での対話的なプログラムの実行には向いていない。 ATSAS のいくつかのプログラム、例えば先程あげた crysol などにはコマンドの引数として 与えることができないパラメータなどが対話モードで設定できる。

表 3.1 crysol のコマンドラインにおけるオプション [3]
オプション オプションの説明 default値
-lm 球面調和関数の最大次数。散乱体の分解能を定義する。 15
-fb 散乱体の表面を記述するフィボナッチ数を定義するもの。 17
-sm 散乱ベクトルの最大値 0.5
-dns 溶媒の電子密度 0.334(e/\(\mathrm{A}^3\)
-dro 水和層のコントラスト 0.03(e/\(\mathrm{A}^3\))
-cst buffer差分補正。定数差分による補正を行う。 -0.5から+0.5

以下に主要なパラメータの説明を行う。

Dro::水和層のコントラスト。前述の \(\Delta\rho_b\) に相当する。デフォルト値は0.03 \((e/A^3)\)
Ra::原子団の半径。この場合は水和層の厚みに相当する。デフォルト値は \(1.62(A)\)
ExVol::排除体積。crysolによって計算されたタンパク質の体積に相当する。デフォルト値はBSAの場合は82810 \((A^3)\)
dns::溶媒の電子密度 \(\rho_{solvent}\) 。デフォルト値は0.334 \((e/A^3)\)
../../_images/paramDro.png

図 3.1 crysol の計算パラメータの説明

実験データと結晶構造との理論値を比較する際、一般にデフォルトの crysol のパラメータでは、溶媒等が水でないので 直接比較できない。そこで、実験データを与えると、理論曲線のパラメータ(特に Dro , Ra , ExVol )を微調してできるだけ実際の実験データをうまく説明するような理論曲線を計算し、それでもうまくフィットできないときには実際の構造が違うと判断する。

高圧セルなどの特殊なセルを使用する時は、これらの計算パラメータを細かく制御する必要がでてくる。

3.5.1.1.1. crysol の対話モードでの実行例

ここでは、 水和水の密度コントラスト Dro だけ対話モードで微調設定することを考える。

実際に crysol を実行させた例を見てみよう。 例えば、リゾチウムというタンパク質の溶液散乱の実験値 lyzexp.dat と結晶構造のA鎖 6lyz.pdb との比較を行うとする。

  1. crysolの実行すると以下の様に表示される。
***  ------------------------------------------------  ***
***    C R Y S O L  Wintel/UNIX/Linux version 2.8.3    ***
***  Please reference: D.Svergun, C.Barberato          ***
***   & M.H.J.Koch (1995) J. Appl.Cryst., 28, 768-773  ***
***   Version (LMAX=50) for small and wide angles      ***
***        Last revised  ---  12/08/15 14:00           ***
***   Copyright (c) ATSAS Team                         ***
***   EMBL, Hamburg Outstation, 1995 - 2015            ***
***  ------------------------------------------------  ***
  1. 各オプションとpdbファイルの入力

    各オプションとPDBファイルを入力する。

    ------------------------------------------------
                Program options :
    0 - evaluate scattering amplitudes and envelope
    1 - evaluate only envelope and Flms
    2 - read CRYSOL information from a .sav file
    Type crysol -help for batch mode use
    ------------------------------------------------
    
    Enter your option ...................... <            0 >:
    Brookhaven file name ................... <         .pdb >: 6lyz
    ------------------------------------------------
    
    ------------------------------------------------
            Following file names will be used:
    6lyz00.log -- CRYSOL log-file          (ASCII)
    6lyz00.sav -- save CRYSOL information  (binary)
    6lyz00.flm -- multipole coefficients   (ASCII)
    6lyz00.int -- scattering intensities   (ASCII)
    6lyz00.fit -- fit to experimental data (ASCII)
    6lyz00.alm -- net partial amplitudes   (binary)
    ------------------------------------------------
    
    ------------------------------------------------
    Maximum order of  harmonics ........... <           15 >:
    Order of Fibonacci grid ............... <           17 >:
    ----------  Reciprocal space grid  -------------
    ( in s = 4*pi*sin(theta)/lambda [1/angstrom] )
    Maximum s value ........................ <        .5000 >:
    Number of points ....................... <           51 >: 201
    Account for explicit hydrogens? [ Y / N ] <           No >:
    Read atoms and evaluate geometrical center ...
    Number of atoms read .................................. : 1001
    Number of discarded waters ............................ : 101
    Percent processed      10  20  30  40  50  60  70  80  90 100
    Processing atoms   :>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    Center of the excess electron density:  0.452 -0.004  0.276
    Processing envelope:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    Processing envelope:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    Coefficients   saved to file 6lyz00.flm
    CRYSOL data    saved to file 6lyz00.sav
    
  2. 計算された各値が表示される。

    --- Structural parameters (sizes in angstroms) ---
    Electron   rg   :  13.99       Envelope   Rg      :  14.08
    Shape      Rg   :  13.97       Envelope  volume   : 0.1806E+05
    Shell    volume : 0.1129E+05   Envelope  surface  :  3150.
    Shell      Rg   :  18.98       Envelope  radius   :  25.49
    Shell    width  :  3.000       Envelope  diameter :  49.04
    Molecular weight: 0.1432E+05   Dry volume         : 0.1736E+05
    Displaced volume: 0.1741E+05   Average atomic rad.:  1.607
    Number of residuals :   129
    

1-3 は常に共通である。

  1. 実験データをフィットさせる選択を行う。また、実験データファイルを入力する。

    Fit the experimental curve [ Y / N ] .. <          Yes >:
    Enter data file ........................ <         .dat >: lyzexp.dat
    
  2. buffer差分補正を実行するかの選択。今回は実行しないので N とする。

    Subtract constant ...................... <           no >:
    Maximum angle in the data file ........................ : 0.4984
    Number of experimental points ......................... : 197
    Angular units in the input file:
    4*pi*sin(theta)/lambda [1/angstrom] (1)
    4*pi*sin(theta)/lambda [1/nm]       (2)
    2 *  sin(theta)/lambda [1/angstrom] (3)
    2 *  sin(theta)/lambda [1/nm]  (4) ..... <            1 >:
    Angular units multiplied by ........................... : 1.000
    
  3. 溶媒の電子密度値の入力

    Electron density of the solvent, e/A**3  <       0.3340 >:
    Number of experimental points used .................... : 197
    
  4. 計算パラメータの仮最適化された値が出力される。

    ここでは、 Dro , Ra , ExVol の3つのパラメータが同時に最適化されている。

    ------  Fitting the experimental data ...    ---
    6lyz.pdb  Dro:0.010  Ra:1.460  Vol: 17762.  Chi^2: 0.202
    Plot the fit [ Y / N ] ................. <          Yes >: N
    
  5. 更なる設定を行うかの確認。今回は行うので Y とする。

    Another set of parameters [ Y / N ] .... <           No >: Y
    Minimize again with new limits [ Y / N ] <           No >: Y
    
  6. 計算パラメータの入力

    Average atomic radius is ............................... : 1.607
    Minimum radius of atomic group ......... <        1.400 >: 1.607
    Maximum radius of atomic group ......... <        1.800 >: 1.607
    Smax in the fitting range .............. <       0.4984 >:
    Solvent density is ..................................... : 1.000E-02
    Minimum contrast in the shell .......... <        0.000 >:
    Maximum contrast in the shell .......... <  7.5000E-002 >:
    Van der Waals volume is ................................ : 1.7762E+04
    Minimum excluded volume ................ <  1.6108E+004 >: 1.7762E4
    Maximum excluded volume ................ <  1.8720E+004 >: 1.7762E4
    Subtract constant ...................... <           no >:
    Number of experimental points used .................... : 197
    

    探索の上限下限に同一の計算パラメータを指定すれば、計算パラメータの最適化はされず、各計算パラメータは指定値で計算され、 実験データに対してスケーリングのみした散乱曲線が得られる。

    ここでは、

    • Average atomic radius is として表示された 1.607 の値を読み込み、 Minimum , Maximum にその値を代入する。
    • Van der Waaks volume is として表示された 1.7762E+04 の値を読み込み、 Minimum , Maximum にその値を代入する。

    の2点の処理を行えば、 Dro だけ最適化されて実験データにフィットするような動作となる。

    デフォルトの Ra , ExVol の計算パラメータ値で Dro だけ最適化されて理論散乱曲線を生成し、実験データとのスケールだけを行う。

  7. スケーリング結果の出力

------  Fitting the experimental data ...    ---
6lyz.pdb  Dro:0.013  Ra:1.607  Vol: 17762.  Chi^2: 0.203
Plot the fit [ Y / N ] ................. <          Yes >: N
Another set of parameters [ Y / N ] .... <           No >:
Rg from the slope of net intensity ..................... : 14.89
Average electron density ............................... : 0.4298
Data fit       saved to file 6lyz00.fit
Intensities    saved to file 6lyz00.int
I_abs(s)[cm^-1]/c[mg/ml] saved to file 6lyz00.abs
Net amplitudes saved to file 6lyz00.alm

これらの入力しないといけないステップをまとめると

表 3.2 crysol の対話モードにおける入力リスト
2-1. Enter your option ...................... < 0 >:  
2-2. Brookhaven file name ................... < .pdb >: 6lyz
2-3. Maximum order of harmonics ........... < 15 >:  
2-4. Order of Fibonacci grid ............... < 17 >:  
2-5. Maximum s value ........................ < .5000 >:  
2-6. Number of points ....................... < 51 >: 201
2-7. Account for explicit hydrogens? [ Y / N ] < No >:  
4-1. Fit the experimental curve [ Y / N ] .. < Yes >:  
4-2. Enter data file ........................ < .dat >: lyzexp.dat
5-1. Subtract constant ...................... < no >: N
5-2. 2 * sin(theta)/lambda [1/nm] (4) ..... < 1 >:  
6 Electron density of the solvent e/A**3 < .3340 >:  
7 Plot the fit [ Y / N ] ................. < Yes >: N
8-1. Another set of parameters [ Y / N ] .... < No >: Y
8-2. Minimize again with new limits [ Y / N ] < No >: Y
9-1. Minimum radius of atomic group ......... < 1.400 >: 1.607
9-2. Maximum radius of atomic group ......... < 1.800 >: 1.607
9-3. Smax in the fitting range .............. < 0.4984 >:  
9-4. Minimum contrast in the shell .......... < .000 >:  
9-5. Maximum contrast in the shell .......... < 7.5000E-002 >:  
9-6. Minimum excluded volume ................ < 1.6108E+004 >: 17800
9-7. Maximum excluded volume ................ < 1.8720E+004 >: 17800
9-8. Subtract constant ...................... < no >:  
10-1. Plot the fit [ Y / N ] ................. < Yes >: N
10-2. Another set of parameters [ Y / N ] .... < No >:  

例えば、 ExVol の値を9-5.の後に表示された値、 1.7762E+04 を代入しようとすると、

プログラムの出力を読み取って、それに基づいて別の入力を行う

ことが要求される。これは単純に入力テキストを入れたファイルを準備して実行するというわけにはいかない。

このようなプログラムの自動応答のpythonモジュールに pexpect がある。

https://pexpect.readthedocs.io/en/stable/

3.5.1.1.2. pexpect の使い方

  • crysol の起動の仕方

    p = pexpect.spawn("crysol")

  • crysol への入力の仕方

    ATSAS は入力を促す際に必ず

    >:

    で質問文が終わるので、

    p.expect(r">:")

    でプログラムの出力で >: の部分を待つ。それが来たら

    p.send($str)

    で文字列 $str をプログラムに入力すれば良い。

  • crysol からの出力の受け方

    例えば数字の出力の次の行の先頭が Minimum で始まるとしたら

    p.expect(r"Minimum")

    ret=str(p.before)

    Minimum の前の文字列 p.before を文字列型にして ret に入れる。

    ATSAS のプログラムではプログラムの表示は : で始まるのでそこで分ける。

    m=ret.split(':')

    m の中には ''\'' などが入っているのでそこで区切る。

    Ra=float(m[-1].split("\\")[0])

この実行例中の auto_crysol() を参考にして自分の使いたい ATSAS のプログラム用に書き換えると良いであろう。