. == 対話型プログラムの実行 ----------------------- :program:`jupyter-notebook` ではCUI(Command User Interface)での対話的なプログラムの実行には向いていない。 :program:`ATSAS` のいくつかのプログラム、例えば先程あげた :program:`crysol` などにはコマンドの引数として 与えることができないパラメータなどが対話モードで設定できる。 .. csv-table:: :program:`crysol` のコマンドラインにおけるオプション [3]_ :file: crysolparam.csv 以下に主要なパラメータの説明を行う。 :``Dro``: :水和層のコントラスト。前述の :math:`\Delta\rho_b` に相当する。デフォルト値は0.03 :math:`(e/A^3)` :``Ra``: :原子団の半径。この場合は水和層の厚みに相当する。デフォルト値は :math:`1.62(A)` :``ExVol``: :排除体積。crysolによって計算されたタンパク質の体積に相当する。デフォルト値はBSAの場合は82810 :math:`(A^3)` :``dns``: :溶媒の電子密度 :math:`\rho_{solvent}` 。デフォルト値は0.334 :math:`(e/A^3)` .. figure:: paramDro.png :width: 200 :program:`crysol` の計算パラメータの説明 実験データと結晶構造との理論値を比較する際、一般にデフォルトの :program:`crysol` のパラメータでは、溶媒等が水でないので 直接比較できない。そこで、実験データを与えると、理論曲線のパラメータ(特に ``Dro`` , ``Ra`` , ``ExVol`` )を微調してできるだけ実際の実験データをうまく説明するような理論曲線を計算し、それでもうまくフィットできないときには実際の構造が違うと判断する。 高圧セルなどの特殊なセルを使用する時は、これらの計算パラメータを細かく制御する必要がでてくる。 :program:`crysol` の対話モードでの実行例 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ここでは、 水和水の密度コントラスト ``Dro`` だけ対話モードで微調設定することを考える。 実際に :program:`crysol` を実行させた例を見てみよう。 例えば、リゾチウムというタンパク質の溶液散乱の実験値 :file:`lyzexp.dat` と結晶構造のA鎖 :file:`6lyz.pdb` との比較を行うとする。 1. crysolの実行すると以下の様に表示される。 .. code-block:: bash *** ------------------------------------------------ *** *** 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 *** *** ------------------------------------------------ *** 2. 各オプションと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 3. 計算された各値が表示される。 :: --- 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 は常に共通である。 4. 実験データをフィットさせる選択を行う。また、実験データファイルを入力する。 :: Fit the experimental curve [ Y / N ] .. < Yes >: Enter data file ........................ < .dat >: lyzexp.dat 5. 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 6. 溶媒の電子密度値の入力 :: Electron density of the solvent, e/A**3 < 0.3340 >: Number of experimental points used .................... : 197 7. 計算パラメータの仮最適化された値が出力される。 ここでは、 ``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 8. 更なる設定を行うかの確認。今回は行うので ``Y`` とする。 :: Another set of parameters [ Y / N ] .... < No >: Y Minimize again with new limits [ Y / N ] < No >: Y 9. 計算パラメータの入力 :: 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`` だけ最適化されて理論散乱曲線を生成し、実験データとのスケールだけを行う。 10. スケーリング結果の出力 :: ------ 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 これらの入力しないといけないステップをまとめると .. csv-table:: :program:`crysol` の対話モードにおける入力リスト :file: crysolrespond.csv 例えば、 ``ExVol`` の値を9-5.の後に表示された値、 ``1.7762E+04`` を代入しようとすると、 **プログラムの出力を読み取って、それに基づいて別の入力を行う** ことが要求される。これは単純に入力テキストを入れたファイルを準備して実行するというわけにはいかない。 このようなプログラムの自動応答のpythonモジュールに :py:class:`pexpect` がある。 https://pexpect.readthedocs.io/en/stable/ :py:class:`pexpect` の使い方 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :program:`crysol` の起動の仕方 ``p = pexpect.spawn("crysol")`` - :program:`crysol` への入力の仕方 :program:`ATSAS` は入力を促す際に必ず ``>:`` で質問文が終わるので、 ``p.expect(r">:")`` でプログラムの出力で ``>:`` の部分を待つ。それが来たら ``p.send($str)`` で文字列 ``$str`` をプログラムに入力すれば良い。 - :program:`crysol` からの出力の受け方 例えば数字の出力の次の行の先頭が ``Minimum`` で始まるとしたら ``p.expect(r"Minimum")`` ``ret=str(p.before)`` ``Minimum`` の前の文字列 ``p.before`` を文字列型にして ``ret`` に入れる。 :program:`ATSAS` のプログラムではプログラムの表示は ``:`` で始まるのでそこで分ける。 ``m=ret.split(':')`` ``m`` の中には ''\\'' などが入っているのでそこで区切る。 ``Ra=float(m[-1].split("\\")[0])`` .. toctree:: :numbered: :maxdepth: 2 auto_crysol この実行例中の :py:func:`auto_crysol` を参考にして自分の使いたい :program:`ATSAS` のプログラム用に書き換えると良いであろう。