3. データ解析の実際

3.1. 結晶構造より理論散乱曲線の計算

結晶構造より理論散乱曲線を計算するのに使用されるプログラムとして crysol がある [3] 。このソフトはターミナルからコマンドを打つことにより実行されるが、 jupyter-notebook のセルからシェル・コマンドを実行させるには、 記号を先頭につけてコマンドを打てば良い。 !! としているところはシェル・コマンドの出力結果を配列化しているだけである。

このように crysol の実行結果を次の作業工程にのせようとすると一手間が必要となる。

3.2. 理論散乱曲線から動径分布関数の計算

動径分布関数 \(P(r)\) は2点間距離分布関数とも呼ばれ、タンパク質内の原子の2点間距離のヒストグラムを表す関数である。 これは、散乱曲線 \(I(q)\)\(q=4\pi\sin\theta/\lambda\) , \(2\theta\) :散乱角、 \(\lambda\) :波長)から

\(P(r)=\dfrac{1}{2\pi^2}\displaystyle\int_{0}^{\infty}qrI(q)\sin(qr)dq\)

の式で得ることができる。しかし、直接上式を計算すると窓関数がエイリアシングにより \(P(r)\) 関数に乗ってしまうので、実務では間接フーリエ変換を用いる。

間接フーリエ変換では、 \(P(r)\) 関数を基底関数系 \(\varphi_i(r)\) を用いて以下のように近似する。

\(P_{fit}(r)=\displaystyle\sum_{i=1}^n c_i \varphi_i(r)\)

\(I_{fit}(q)\)\(P_{fit}(r)\) をフーリエ変換したものだから、

\(\mathcal{F}[\varphi_i(r)]=\psi_i(q)\) とすると、フーリエ変換の線形性により、

\(I_{fit}(q)=\displaystyle\sum_{i=1}^n c_i \psi_i(q)\)

となる。間接フーリエ変換とは \(I(q)\) に対し \(I_{fit}(q)\) による最小二乗回帰で \(c_i\) を求め間接的に \(P_{fit}(r)\) を求める。

小角散乱データ処理用の間接フーリエ変換プログラムの代表的なものに gnom [5] がある。このプログラムの出力も取り扱いにくい。

gnom のヘルプを見てみると、

3.4. ビーズモデルの統計処理

タンパク質溶液散乱のビーズモデル計算はそれが \(I(q)\) に対してであれ、 \(P(r)\) に対してであれ、確率論的なアルゴリズムを用いるので若干の形の変動が ある。そこで、ビーズモデルの検証として以下の操作を行う。 [6]

  1. 試行回数分生成されたビーズモデルを平均化し、代表モデルの算出
  2. 代表モデルから計算された散乱曲線、動径分布関数の検証
  3. 結晶構造との比較

以上、データ解析の実際を見てきた。 jupyter-notebook の活用の注意点を私なりにあげてみると、

重要

jupyter-notbook の注意点

  • jupyter-notebook はプログラムを開発するのには不向きで、基本的に確立したプログラムを実行する環境と捉えるべき。
  • notebookで使われる変数は全てのセルに共通のグローバル変数なので、pythonコードを呼び出す前に戻り値の変数を準備しておく。
  • notebookを再実行する際はそのたび毎にkernelのresetをして再実行したほうが良い。
  • CUI(Command User Interface)での対話的なコードは実行できない。入力値はセルに書き込んで記録に残すようにすると良い。 ただし、ファイル名の入出力に関しては本稿のようにGUIを使う方が楽である。