.. intro ====== 序論 ====== :program:`jupyter notebook` について ------------------------------------- pythonは科学技術計算の分野では最近注目を浴びている言語で、プログラミング初学者が 習得しやすい言語の一つとして知られている。フリーで windows、mac、linuxなど動作する環境が幅広い。その上、数値計算に必要な信頼性の高いライブラリーがそろっており、特に深層学習や機械学習ではアルゴリズムの実装に良く使われている。 :program:`jupyter notebook` (https://jupyter.org/)は、対話型python環境で、ユーザーがプログラムの断片やデータの一部を入力して、試行錯誤を行い、その結果や振る舞いを眺めながら考える環境を与えることができ、 さらにそれらを共有、追体験できるのである。また、 :program:`jupyter notebook` で生成されるnotebookはネット上に公開し知識を共有するのに適している。 :program:`jupyter notebook` 上での解析工程は一般的な現代データサイエンス解析のワークフローに順じており、その使い方に慣れることは 異分野間でのコミュニケーションだけでなく、学生諸君に対しても教育効果は高いと思われる。 残念ながら巷であふれている :program:`jupyter notebook` の使い方の情報はcsvファイル形式の汎用データベースに関してが主で、 実験データの処理に関して言及されているものは少ない。 本稿ではタンパク質溶液散乱の解析フローを :program:`jupyter-notebook` で実行することにより、タンパク質溶液散乱で良く使われるデータ形式の ファイルを :program:`jupyter-notebook` で取り扱うための概要を紹介する。 実行までの準備 --------------- :program:`jupyter-notebook` を導入するには、 最初にpythonをインストールしてその後に :program:`jupyter-notebook` を使えるようにする。この方法については インターネットを探せば、様々な情報が得られる。筆者のおすすめは最も簡単な方法は、 :program:`Anaconda` と呼ばれるデータサイエンスに特化したpythonの無料ディストリビューションの一部として :program:`jupyter-notebook` をインストールするのが便利である。 :program:`Anaconda` は、以下のサイトから ダウンロードすることができる。 https://www.anaconda.com/download windows、 mac、 linux 向けにインストーラーが 準備されている。 インストールする際にはpythonのバージョンを選択しないといけないが、 サポートが終了した2.7よりは3.xを選択するほうが良いであろう。 元々、 :program:`Anaconda` はデータサイエンスに特化したプラットフォームを提供したいというのが目的なので、 それ用によく使われる一連のpythonパッケージ群が同梱されている。 :program:`jupyter-notebook` を起動するにはターミナルを開きコマンドプロンプトで:: jupyter-notebook と打てば、勝手にブラウザーが立ち上がる。 デフォルトでは、3次元構造の :file:`pdb` フォーマットを取り扱えないので、 :program:`nglview` [1]_ というwidgetをインストールする。 https://github.com/arose/nglview コマンドプロンプトで:: conda install nglview -c conda-forge jupyter-nbextension enable nglview --py --sys-prefix でエラーがでなければ大丈夫である。グラフィックボード環境の違いにより表示されたりされなかったりすることもあるが、 このwidgetを使えば、3次元構造を :program:`jupyter-notebook` 上でぐるぐる回すことができるようになる。 また、本稿ではEMBL Hamburgの小角散乱グループが開発したタンパク質溶液散乱の標準的パッケージ :program:`ATSAS` を使用する [2]_ 。以下のサイトでユーザー登録すると無料でダウンロードできるのであらかじめインストールしておく。 https://www.embl-hamburg.de/biosaxs/download.html 本稿で取り扱うデータ解析の流れ ------------------------------ 本稿では :program:`jupyter-notebook` を用いてタンパク質溶液散乱データの読み方、プロットの仕方などを初心者がつまづきやすい点を中心に紹介していきたい。 タンパク質溶液散乱では、最も一般的な解析は散乱データからタンパク質構造を充填球で近似したいわゆるビーズモデルを計算することである。 :program:`ATSAS` で使用される代表的なフォーマットのファイルを扱うよう、以下のデータ解析を :program:`jupyter-notebook` で処理してみたい。 1. タンパク質結晶構造( :file:`*.pdb` フォーマット)から散乱曲線( :file:`*.dat` フォーマット)を計算しプロットする。 2. 散乱曲線 :math:`I(q)` から動径分布関数 :math:`P(r)` 関数を計算し、出力ファイル( :file:`*.out` フォーマット)から :math:`P(r)` 関数を抽出しプロットする。 3. :math:`P(r)` 関数からビーズモデルを計算する。シミュレーションデータ( :file:`*.fit` フォーマット)と元データを比較する。 4. ビーズモデル( :file:`*.pdb` )と結晶構造( :file:`*.pdb` )の比較 解析フローは :numref:`@2-1` となる。 .. figure:: fig/1.png :height: 400 :name: @2-1 本稿での解析フロー 使用するデータ: - タンパク質結晶構造 :file:`6lyz.pdb` - タンパク質溶液散乱データ :file:`lyzexp.dat` [3]_ 動径分布関数からビーズモデルを計算するプログラム :program:`SHAPES` ------------------------------------------------------------------- 小角散乱データからビーズモデルを計算するのは一般的に :program:`DAMMIN` というプログラムが広く使用されている。これは :math:`I(q)` に対してフィッテイングを行いビーズモデルを再構成計算する。本稿では、2019年に発表された :program:`SHAPES` [4]_ による構造計算を行ってみよう。 :program:`SHAPES` はJohn Badgerによって開発された :math:`P(r)` 関数に対してフィッティングを行い、タンパク質分子構造を再構成するプログラムである。元のpythonコードは以下のサイトからフリーでダウンロードできる。 http://saxs2shapes.com 元々 :program:`SHAPES` は単体でpythonコードを実行することを想定しているが、 :program:`jupyter-notebook` 環境では使いにくいので変更を加えた。具体的には変数はセル上に入力して :program:`SHAPES` をセル上から実行できるように :program:`SHAPES` を本体部 **shapes_main** とモジュール部 **shapes_module** に分割した。 :program:`shapes_module` は小角散乱を取り扱う上で便利なメソッドを含有している。 :program:`SHAPES` 実行以外でも色々活用できる。その詳細を以下に示す。 .. csv-table:: :program:`shapes_module` :header: メソッド名,内容 :widths: 20,40 ``ft_to_intensity``,動径分布関数 :math:`P(r)` 関数から散乱強度 :math:`I(q)` の計算 ``score_Ic``,入力散乱強度 :math:`I(q)` と出力散乱強度 :math:`I_{calc}(q)` のスケーリングと比較 ``write_all_data`` ,入力データと出力データを書き込む ``read_i``, :program:`GNOM` 出力データから散乱強度データを読み取る ``read_pdb``,初期PDBファイルを読み取る ``pr_writer``,計算された :math:`P(r)` データをファイルに書き込む ``pdb_writer``,ビーズの位置情報をPDBファイル形式で書き込む ``set_box``,概念的な格子上のローカルビーズ密度と点密度を評価する ``set_vol``,分子体積の設定 ``disallowed_beads``,許容体積内にないビーズを見つける ``calc_pr``, :math:`P(r)` 関数の計算 ``pr_dif``,入力 :math:`P(r)` とモデル :math:`P(r)` のrms差のスコア ``pr_rfactor``,入力 :math:`P(r)` とモデル :math:`P(r)` の残差の統計 ``vdw_energy``,ビーズ間の相互作用エネルギーを計算する ``random_beads``,最大長 :math:`D_{max}` の格子にビーズをランダムに配置する ``read_pr``, :program:`GNOM` 出力ファイルから :math:`P(r)` 関数を抽出する ``scale_pr``,入力 :math:`P(r)` 関数と出力 :math:`P(r)` をスケーリング ``get_dr``,2つの座標間の0以外の距離を返す ``center_beads``,半径内のビーズの中心を見つける ``get_total_energy``,総 ``vdw`` エネルギーの平均を取得 ``e_min``,エネルギーを最小化する ``make_symm``,対称性に関係するパラメータを設定する ``pr_shift_atom``,ビーズの位置を変更するための :math:`P(r)` のシフトベクトルを設定する ``recenter_pdb``,元のビーズセットを原点に移動 :program:`SHAPES` のアルゴリズムは以下のようである。 .. figure:: fig/4.png :height: 400 :program:`SHAPES` のアルゴリズム このプログラムはビーズ間のポテンシャル関数として変形レナード・ジョーンズポテンシャル を用いて、ビーズの位置の最適化を試みる。 :program:`SHAPES` の入力パラメータ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :program:`SHAPES` で使用されるパラメータとその内容を以下に示す。 .. csv-table:: :program:`SHAPES_main` の入力パラメータ :header: パラメータ名,内容,デフォルト :widths: 20,40,10 ``nbeads_h``,構造内のアミノ酸の総数,なし・入力必須 ``inFile_h``,ATSASパッケージの :program:`GNOM` による出力としての :math:`P(r)` ファイル,なし・入力必須 ``num_sols``,再構成の実行回数,4回 ``num_aa``,計算に使用されるビーズの数を変更するために使用するアミノ酸数のスケール,1.0 ``num_symm``,タンパク質集合体の回転対称性,1 ``bias_z_h``,Z軸に沿ってビーズの初期構成を偏らせる,0.0 ``inflate``,予想される部分比容に関連して、開始体積と最終体積を調整するためのスケール係数,1.0 ``pdbfile_in_h``,入力PDBファイルから読み取られたCα原子を使用して、再構成プロセスを開始する,none ``surface_scale``,再構成手順を安定させ、より連続した体積を持ち互いに類似した再構成をもたらす,0.0 分子体積[ :math:`\mathrm{\mathring{A}^3}` ]は入力されたアミノ酸数から推定される。アミノ酸あたり110Daを想定し、分子量と分子体積の間の変換係数として1.21を使用する。