2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MDの計算結果を解析できるPythonライブラリ:MDAnalysisのQuick Start Quideを日本語化する

Last updated at Posted at 2024-11-08

原著の翻訳です

クイックスタートガイド

MDAnalysis バージョン: ≥ 0.18.0

このガイドは、MDAnalysisを使用してデータを読み込み、分析を行うための基本的な紹介を目的としています。より複雑なタスクについては、ノートを参照してください。このページでは、以下のことを説明します:

  • 分子動力学の構造または軌道を読み込む
  • MDAnalysisの中心データ構造であるAtomGroupsを操作する
  • 軌道を操作する
  • 座標を出力する
  • MDAnalysisの分析アルゴリズムを使用する
  • MDAnalysisおよびアルゴリズムの正確で自動的な引用
import MDAnalysis as mda
from MDAnalysis.tests.datafiles import PSF, DCD, GRO, XTC

import warnings
# PSFファイルに関するMDAnalysisの警告を抑制
warnings.filterwarnings('ignore')

from matplotlib import pyplot as plt

print(mda.Universe(PSF, DCD))
print("Using MDAnalysis version", mda.__version__)

%matplotlib inline


Using MDAnalysis version 2.6.0-dev0

このチュートリアルでは、すでにMDAnalysisがインストールされていることを前提としています。上記のセルを実行すると、次のような出力が得られるはずです:

output
<Universe with 3341 atoms>  
2.6.0

エラーメッセージが表示された場合は、MDAnalysisをインストールする必要があります。バージョンが0.18.0未満の場合は、MDAnalysisをアップグレードする必要があります。手順については、こちらに説明があります。

概要

MDAnalysisは、分子動力学の軌道データにアクセスし、分析するためのツールを提供するPythonパッケージです。MDAnalysisの基盤となるいくつかの重要なデータ構造があります。

  • 分子系は粒子で構成されています。粒子はAtomオブジェクトとして表されます(粗粒化ビーズであっても)。
  • AtomはAtomGroupsにグループ化されます。AtomGroupはMDAnalysisで最も重要なクラスであり、ほとんどすべての操作はこれを通じて行われます。
  • Universeは、分子系内のすべての粒子をAtomGroupとして保持し、.trajectoryで軌道と組み合わせます。

MDAnalysisの基本的な概念は、常に1つの時間フレームの軌道のみがアクセスされることです。Universetrajectory属性は通常、ファイルリーダーです。軌道は、フレームインデックスtの関数\(X(t)\)として考えることができ、この特定のフレームのデータのみが利用可能です。この構造は、MDAnalysisがコンピュータのメモリに収まらないほど大きな軌道ファイルで作業できるようにするために重要です。

MDAnalysisは、内部単位を使用して軌道を保存します:Å(オングストローム)で長さps(ピコ秒)で時間、元のMDデータ形式に関係なく。

構造または軌道の読み込み

MDAnalysisを使用する際は、通常、データをUniverseに読み込むことから始まります。ユーザーガイドには、Universeを作成し操作する方法が完全に説明されています。

Universeを作成するための最初の引数は、トポロジーおよび軌道ファイルです。

  • トポロジーファイルは、データをUniverseに読み込むために常に必要です。トポロジーファイルは、原子、残基、およびそれらの接続をリストします。MDAnalysisはPSF、PDB、CRD、GRO形式を受け入れます。
  • トポロジーファイルの後に任意の数の軌道ファイルを続けることができます。軌道ファイルは、トポロジーで定義された順序で座標のリストを含みます。軌道ファイルが指定されていない場合、構造のみが読み込まれます。複数の軌道ファイルが指定されている場合、軌道は指定された順序で連結されます。MDAnalysisは、単一フレーム(例:PDB、CRD、GRO)および時系列データ(例:DCD、XTC、TRR、XYZ)を受け入れます。
psf = mda.Universe(PSF)
print(psf)
print(hasattr(psf, 'trajectory'))
output
<Universe with 3341 atoms>  
False

PSFファイルには座標情報が含まれておらず、軌道ファイルが読み込まれていないため、psfユニバースには軌道が含まれていません。トポロジーファイルに座標情報が含まれている場合、1フレームの軌道が作成されます。

gro = mda.Universe(GRO)
print(gro)
print(len(gro.trajectory))
output
<Universe with 47681 atoms>  
1

このガイドの残りの部分では、以下で作成されたユニバースuを使用します。これは、酵素アデニル酸キナーゼが閉じた構造から開いた構造への遷移をサンプリングするシミュレーションです(Beckstein et al., 2009)。

u = mda.Universe(PSF, DCD)
print(u)
print(len(u.trajectory))
output
<Universe with 3341 atoms>  
98

注意

MDAnalysisのテストスイートには、ファイル形式にちなんで名付けられた多数のテストファイルと軌道がパッケージされています。このガイドでは、便宜上これらのファイルを使用しています。独自のファイルを分析するには、上記のPSFおよびDCDを自分のファイルへのパスに置き換えるだけです。例えば:

structure_only = mda.Universe("my_pdb_file.pdb")

原子のグループでの作業

ほとんどの分析には、AtomGroupを作成し操作することが必要です。便利なことに、Atomsの化学的に意味のあるグループ(例えば、ResidueSegment)で作業することもできます。これらはAtomGroupに類似したコンテナを持ちます:ResidueGroupおよびSegmentGroup。例えば、Universe.residues属性はResidueGroupを返します。

print(u.residues)
output
<ResidueGroup [<Residue MET, 1>, <Residue ARG, 2>, <Residue ILE, 3>, ..., <Residue ILE, 212>, <Residue LEU, 213>, <Residue GLY, 214>]>

原子の選択

Universeの粒子にアクセスする最も簡単な方法は、atoms属性を使用することです:

u.atoms
output
<AtomGroup with 3341 atoms>

これにより、Atomオブジェクトのリストとして考えられるAtomGroupが返されます。ほとんどの分析は、AtomGroup内の原子のグループで作業します。AtomGroupは、別のAtomGroupをスライスすることで簡単に作成できます。例えば、以下のスライスは最後の5つの原子を返します。

last_five = u.atoms[-5:]
print(last_five)
output
<AtomGroup [<Atom 3337: HA1 of type 6 of resname GLY, resid 214 and segid 4AKE>, <Atom 3338: HA2 of type 6 of resname GLY, resid 214 and segid 4AKE>, <Atom 3339: C of type 32 of resname GLY, resid 214 and segid 4AKE>, <Atom 3340: OT1 of type 72 of resname GLY, resid 214 and segid 4AKE>, <Atom 3341: OT2 of type 72 of resname GLY, resid 214 and segid 4AKE>]>

MDAnalysisはファンシーインデクシングをサポートしており、インデックスの配列またはリストを渡すことで、古いAtomGroup内のそのインデックスにある原子を持つ新しいAtomGroupを取得できます。

print(last_five[[0, 3, -1, 1, 3, 0]])
output
<AtomGroup [<Atom 3337: HA1 of type 6 of resname GLY, resid 214 and segid 4AKE>, <Atom 3340: OT1 of type 72 of resname GLY, resid 214 and segid 4AKE>, <Atom 3341: OT2 of type 72 of resname GLY, resid 214 and segid 4AKE>, <Atom 3338: HA2 of type 6 of resname GLY, resid 214 and segid 4AKE>, <Atom 3340: OT1 of type 72 of resname GLY, resid 214 and segid 4AKE>, <Atom 3337: HA1 of type 6 of resname GLY, resid 214 and segid 4AKE>]>

MDAnalysisは、VMD、PyMol、その他のパッケージで使用される既存の言語に似た強力な原子選択言語も実装しています。これは、AtomGroupまたはUniverseインスタンスの.select_atoms()関数で利用できます:

print(u.select_atoms('resname ASP or resname GLU'))
output
<AtomGroup [<Atom 318: N of type 54 of resname GLU, resid 22 and segid 4AKE>, <Atom 319: HN of type 1 of resname GLU, resid 22 and segid 4AKE>, <Atom 320: CA of type 22 of resname GLU, resid 22 and segid 4AKE>, ..., <Atom 3271: OE2 of type 72 of resname GLU, resid 210 and segid 4AKE>, <Atom 3272: C of type 20 of resname GLU, resid 210 and segid 4AKE>, <Atom 3273: O of type 70 of resname GLU, resid 210 and segid 4AKE>]>

数値範囲はfirst-lastまたはfirst:lastとして書くことができ、範囲は含まれます。スライスでは、lastインデックスは含まれません。

print(u.select_atoms('resid 50-100').n_residues)
print(u.residues[50:100].n_residues)
output
51  
50

選択はブール演算子で組み合わせることができ、ワイルドカードも使用できます。

例えば、以下のコマンドは、タンパク質の最初の100残基内のグルタミン酸とヒスチジンの\(C_{\alpha}\)原子を選択します。グルタミン酸は通常「GLU」と名付けられますが、ヒスチジンはそのプロトン化状態や使用される力場に応じて「HIS」、「HSD」、または「HSE」と名付けられることがあります。

u.select_atoms("(resname GLU or resname HS*) and name CA and (resid 1:100)")
output
<AtomGroup with 6 atoms>

注意

選択から作成されたAtomGroupはソートされ、重複要素は削除されます。これはスライスによって生成されたAtomGroupには当てはまりません。したがって、原子の順序が重要な場合はスライスを使用できます。

ユーザーガイドには、インデクシング、選択言語、およびセットメソッドを通じてAtomGroupを作成する方法が完全に説明されています。

AtomGroupsからの原子情報の取得

AtomGroupは、その内部の原子に関する情報を便利な属性で提供します。

print(u.atoms[:20].names)
output
['N' 'HT1' 'HT2' 'HT3' 'CA' 'HA' 'CB' 'HB1' 'HB2' 'CG' 'HG1' 'HG2' 'SD' 'CE' 'HE1' 'HE2' 'HE3' 'C' 'O' 'N']
print(u.atoms[50:70].masses)
output
[ 1.008  1.008  1.008 12.011  1.008  1.008 12.011  1.008  1.008  1.008 12.011 15.999 14.007  1.008 12.011  1.008 12.011  1.008 12.011  1.008]

また、原子が属する残基やセグメントも知っています。.residuesおよび.segmentsはそれぞれResidueGroupおよびSegmentGroupを返します。

print(u.atoms[:20].residues)
print(u.atoms[-20:].segments)
output
<ResidueGroup [<Residue MET, 1>, <Residue ARG, 2>]>
<SegmentGroup [<Segment 4AKE>]>

上記のResidueGroupおよびSegmentGroupには重複はありません。原子ごとの残基属性を取得するには、AtomGroupを介して直接アクセスできます。

print(u.atoms[:20].resnames)
output
['MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'MET' 'ARG']

トポロジー属性によって原子をグループ化することができます。

例えば、同じ残基名と原子名を持つ原子をグループ化するには:

near_met = u.select_atoms('not resname MET and (around 2 resname MET)')
sorted(near_met.groupby(['resnames', 'names']))
output
[('ALA', 'C'), ('ALA', 'HN'), ('ARG', 'N'), ('ASN', 'O'), ('ASP', 'C'), ('ASP', 'N'), ('GLN', 'C'), ('GLU', 'N'), ('ILE', 'C'), ('LEU', 'N'), ('LYS', 'N'), ('THR', 'N')]

トポロジー属性の完全なリストはユーザーガイドにあります。

AtomGroupの位置とメソッド

.positions属性は、AtomGroupから取得できる最も重要な情報かもしれません:座標のnumpy.ndarrayで、形状は(n_atoms, 3)です。

ca = u.select_atoms('resid 1-5 and name CA')
print(ca.positions)
print(ca.positions.shape)
output
[[11.664622    8.393473   -8.983231  ]  
 [11.414839    5.4344215  -6.5134845 ]  
 [ 8.959755    5.612923   -3.6132305 ]  
 [ 8.290068    3.075991   -0.79665166]  
 [ 5.011126    3.7638984   1.130355  ]]  
(5, 3)

AtomGroupには、以下のような他の量も定義されています:

  • .center_of_mass()
  • .center_of_geometry()
  • .total_mass()
  • .total_charge()
  • .radius_of_gyration()
  • .bsphere()(選択の境界球)

AtomGroupメソッドの完全なリストと説明については、ユーザーガイドを参照してください。

print(ca.center_of_mass())
output
[ 9.06808195  5.25614133 -3.75524844]

注意

.center_of_mass()関数は、MDAnalysisの多くの分析モジュールと同様に、正確な質量特性が利用可能であることに依存しています。粒子の質量は常に利用可能または正確であるとは限りません!

現在、MDAnalysisは、粒子名から推測される元素または「原子タイプ」に基づいて粒子に質量を割り当てます。MDAnalysisが誤って推測した場合(例えば、CAと呼ばれるカルシウム原子が\(C_{\alpha}\)として扱われる場合)、その原子の質量は不正確になります。MDAnalysisが粒子が何であるか全く分からない場合(例えば、粗粒化ビーズ)、警告を発し、その粒子に質量0を割り当てます。

MDAnalysisが正しい質量を使用していることを確認するには、手動で設定できます。

MDAnalysisは、AtomGroupから結合、角度、二面角、不適切な角度などのトポロジー幾何学を作成することもできます。このAtomGroupには特別な要件があります:幾何学に関与する原子のみがグループに含まれている必要があります。例えば、結合を作成するために使用されるAtomGroupには2つの原子のみが含まれる必要があります。二面角や不適切な角度を作成するために使用されるAtomGroupには4つの原子が必要です。

nhh = u.atoms[:3]
print(nhh.names)
output
['N' 'HT1' 'HT2']

トポロジーオブジェクト(例えば、角度)が作成されると、原子の位置に基づいて角度の値(度単位)を計算できます。

angle_nhh = nhh.angle
print(f"N-H-H angle: {angle_nhh.value():.2f}")
output
N-H-H angle: 37.99

原子、二面角、不適切な角度の順序は重要です。角度の値は、最初と3番目の原子の間の角度であり、頂点は2番目の原子にあります。ファンシーインデクシングは、順序付きのAtomGroupを取得する方法の1つです。

   3
  /
 /
2------1
hnh = u.atoms[[1, 0, 2]]
print(hnh.names)
output
['HT1' 'N' 'HT2']
angle_hnh = hnh.angle
print(f"N-H-H angle: {angle_hnh.value():.2f}")
output
N-H-H angle: 106.20

軌道での作業

Universeの軌道には、変化する座標情報が含まれています。軌道のフレーム数はその長さです:

print(len(u.trajectory))
output
98

軌道内の各フレームの情報を評価する標準的な方法は、それを反復処理することです。タイムステップが変わると、ユニバースにはそのタイムステップに関連する情報のみが含まれます。

for ts in u.trajectory[:20]:
    time = u.trajectory.time
    rgyr = u.atoms.radius_of_gyration()
    print(f"Frame: {ts.frame:3d}, Time: {time:4.0f} ps, Rgyr: {rgyr:.4f} A")
output
Frame:   0, Time:    1 ps, Rgyr: 16.6690 A  
Frame:   1, Time:    2 ps, Rgyr: 16.6732 A  
Frame:   2, Time:    3 ps, Rgyr: 16.7315 A  
Frame:   3, Time:    4 ps, Rgyr: 16.7223 A  
Frame:   4, Time:    5 ps, Rgyr: 16.7440 A  
Frame:   5, Time:    6 ps, Rgyr: 16.7185 A  
Frame:   6, Time:    7 ps, Rgyr: 16.7741 A  
Frame:   7, Time:    8 ps, Rgyr: 16.7764 A  
Frame:   8, Time:    9 ps, Rgyr: 16.7894 A  
Frame:   9, Time:   10 ps, Rgyr: 16.8289 A  
Frame:  10, Time:   11 ps, Rgyr: 16.8521 A  
Frame:  11, Time:   12 ps, Rgyr: 16.8549 A  
Frame:  12, Time:   13 ps, Rgyr: 16.8723 A  
Frame:  13, Time:   14 ps, Rgyr: 16.9108 A  
Frame:  14, Time:   15 ps, Rgyr: 16.9494 A  
Frame:  15, Time:   16 ps, Rgyr: 16.9810 A  
Frame:  16, Time:   17 ps, Rgyr: 17.0033 A  
Frame:  17, Time:   18 ps, Rgyr: 17.0196 A  
Frame:  18, Time:   19 ps, Rgyr: 17.0784 A  
Frame:  19, Time:   20 ps, Rgyr: 17.1265 A  

反復処理の後、軌道は最初のフレームに「リセット」されます。詳細についてはユーザーガイドを参照してください。

print(u.trajectory.frame)
output
0

フレームインデックスを使用して軌道のタイムステップを設定できます:

print(u.trajectory[10].frame)
output
10

これは次のタイムステップが変更されるまで持続します。

frame = u.trajectory.frame
time = u.trajectory.time
rgyr = u.atoms.radius_of_gyration()
print("Frame: {:3d}, Time: {:4.0f} ps, Rgyr: {:.4f} A".format(frame, time, rgyr))
output
Frame:  10, Time:   11 ps, Rgyr: 16.8521 A

一般的に、軌道分析はフレームごとのデータをリストに収集します。

rgyr = []
time = []
protein = u.select_atoms("protein")
for ts in u.trajectory:
    time.append(u.trajectory.time)
    rgyr.append(protein.radius_of_gyration())

これをnumpy配列やpandas DataFrameなどの他のデータ構造に変換できます。以下のようにプロットしたり、さらなる分析に使用したりできます。

次のセクションでは、pandasパッケージ(インストール:conda install pandasまたはpip install pandas)とmatplotlib(インストール:conda install matplotlibまたはpip install matplotlib)が必要です。

import pandas as pd
rgyr_df = pd.DataFrame(rgyr, columns=['Radius of gyration (A)'], index=time)
rgyr_df.index.name = 'Time (ps)'

rgyr_df.head()
output
| Radius of gyration (A) |           |
| ---------------------- | --------- |
| Time (ps)              |           |
| 1.0                    | 16.669018 |
| 2.0                    | 16.673217 |
| 3.0                    | 16.731454 |
| 4.0                    | 16.722283 |
| 5.0                    | 16.743961 |
rgyr_df.plot(title='Radius of gyration')
plt.show()

image

動的選択

上記のように、軌道を反復処理する際に座標が変化します。したがって、座標から計算されたプロパティ(例えば、半径の回転)も変化します。

選択は、軌道を移動する際に変化しない静的プロパティに基づいて定義されることが多いです。上記では、静的選択はタンパク質内のすべての原子です。選択を一度定義し、軌道の各フレームに対して関心のあるプロパティを再計算できます。

ただし、一部の選択には距離依存のクエリ(aroundpointなど)が含まれます。この場合、キーワードupdating=Trueを設定して、各タイムステップごとに選択を更新する必要があります。このコマンドは、静的AtomGroupではなくUpdatingAtomGroupを提供します。

dynamic = u.select_atoms('around 2 resname ALA', updating=True)
print(type(dynamic))
dynamic
output
<class 'MDAnalysis.core.groups.UpdatingAtomGroup'>

<AtomGroup with 54 atoms, with selection 'around 2 resname ALA' on the entire Universe.>
static = u.select_atoms('around 2 resname ALA')
print(type(static))
static
output
<class 'MDAnalysis.core.groups.AtomGroup'>

<AtomGroup with 54 atoms>

ユニバースの次のフレームを呼び出すと、動的選択の原子が更新されますが、静的選択の原子はそのままです。

u.trajectory.next()
dynamic
output
<AtomGroup with 56 atoms, with selection 'around 2 resname ALA' on the entire Universe.>
static
output
<AtomGroup with 54 atoms>

座標の出力

MDAnalysisは、単一フレーム形式(例:PDB、GRO)や軌道ライター(例:XTC、DCD、マルチフレームPDBファイル)を含むさまざまなファイル形式へのデータの書き出しをサポートしています。(選択を他のプログラムに書き出すこともできます。例えば、VMDマクロなど。)ユーザーガイドには、各形式の完全なリストがあり、それぞれのリファレンスページがあります。

単一フレーム

単一フレームしか保持できないファイルに書き込む最も簡単な方法は、任意のAtomGroupwrite()メソッドを使用することです。MDAnalysisはファイル拡張子を使用して出力ファイル形式を決定します。例えば、\(C_{\alpha}\)原子をGRO形式のファイルに書き出すには:

ca = u.select_atoms('name CA')
ca.write('calphas.gro')

軌道

軌道を書き出す標準的な方法は次のとおりです:

  1. 軌道Writerを開き、フレームに含まれる原子の数を指定します。
  2. 軌道を反復処理し、Writer.write()で座標をフレームごとに書き出します。
  3. 以下のコンテキストマネージャとwithステートメントを使用しない場合は、.close()で軌道を閉じる必要があります。

例えば、\(C_{\alpha}\)原子をXTC形式の軌道に書き出すには:

ca = u.select_atoms('name CA')
with mda.Writer('calphas.xtc', ca.n_atoms) as w:
    for ts in u.trajectory:
        w.write(ca)

image

分析

MDAnalysisには、多様な分析モジュールと独自の実装のためのビルディングブロックが含まれています。(ユーザーガイドには分析チュートリアルのリストがあります。)

これらの大部分は共通のインターフェースに従います:

  1. Universeおよび他の必要なパラメータで分析を初期化します。
  2. .run()で分析を実行します。オプションの引数には、startフレームインデックス、stopフレームインデックス、stepサイズ、verboseの切り替えがあります。デフォルトは、全軌道に対して分析を実行することです。
  3. 結果はクラス内に保存されます。
  4. 多くの場合、単一フレームに対して操作するための関数が利用可能です。

ただし、すべての分析がこのモデルを使用するわけではありません。各分析のドキュメントを確認することが重要です。 例は、例ギャラリーで見ることができます。

以下に、単純なRMSD分析を示します。rmsモジュールは上記のインターフェースに従います。

RMSD

MDAnalysisのすべてのサブモジュールがimport MDAnalysisでインポートされるわけではありません。ほとんどの分析モジュールは明示的にインポートする必要があります。

from MDAnalysis.analysis import rms

MDAnalysisは、2つの座標のnumpy配列間のRMSDを計算するためのrmsd()関数を提供します。

bb = u.select_atoms('backbone')

u.trajectory[0] # 最初のフレーム
first = bb.positions

u.trajectory[-1] # 最後のフレーム
last = bb.positions

rms.rmsd(first, last)
output
6.852774844656239

RMSDクラスも、軌道に対して操作するために提供されています。

以下に、RMSDクラスを作成します。

  • 最初の引数は、RMSDを計算するためのAtomGroupまたはUniverseです。
  • 参照AtomGroupまたはUniverseが第2引数として与えられない場合、デフォルトは最初の引数の最初のフレームに整列します。ここでは最初のフレームに設定されています。
  • 軌道を背骨原子に対して整列させ、その後、RMSDを背骨原子(select)およびすべてのタンパク質原子(protein)に対して計算します。

RMSDは.run()を呼び出すと計算されます。

u.trajectory[0] # 最初のフレームに設定
rmsd_analysis = rms.RMSD(u, select='backbone', groupselections=['name CA', 'protein'])
rmsd_analysis.run()
output
<MDAnalysis.analysis.rms.RMSD at 0x140451fd0>

結果はresults.rmsd属性に保存されます。これは、形状が(n_frames, 2 + n_selections)の配列です。

print(rmsd_analysis.results.rmsd.shape)
output
(98, 5)

これは、98行と5列の配列として解釈できます。各行は、軌道内のフレームに関連するRMSDです。列は次のとおりです:

  1. フレーム番号
  2. 時間(ps)
  3. RMSD(背骨)
  4. RMSD(C-α)
  5. RMSD(タンパク質)

これをpandasのDataFrameに変換し、結果をプロットできます。

import pandas as pd

rmsd_df = pd.DataFrame(rmsd_analysis.results.rmsd[:, 2:],
                       columns=['Backbone', 'C-alphas', 'Protein'],
                       index=rmsd_analysis.results.rmsd[:, 1])
rmsd_df.index.name = 'Time (ps)'
rmsd_df.head()
output
| Backbone  | C-alphas     | Protein      |              |
| --------- | ------------ | ------------ | ------------ |
| Time (ps) |              |              |              |
| 1.0       | 5.834344e-07 | 4.263638e-08 | 5.443850e-08 |
| 2.0       | 4.636592e-01 | 4.235205e-01 | 6.934167e-01 |
| 3.0       | 6.419340e-01 | 5.939111e-01 | 8.748416e-01 |
| 4.0       | 7.743983e-01 | 7.371346e-01 | 1.052780e+00 |
| 5.0       | 8.588600e-01 | 8.279498e-01 | 1.154986e+00 |
rmsd_df.plot(title='RMSD')

参考文献

MDAnalysisを使用して出版された作品では、以下の論文を引用してください:

  1. Michaud-Agrawal, E. J. Denning, T. B. Woolf, and O. Beckstein. MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations. J. Comput. Chem. 32 (2011), 2319–2327. doi:10.1002/jcc.21787
  2. R. J. Gowers, M. Linke, J. Barnoud, T. J. E. Reddy, M. N. Melo, S. L. Seyler, D. L. Dotson, J. Domanski, S. Buchoux, I. M. Kenney, and O. Beckstein. MDAnalysis: A Python package for the rapid analysis of molecular dynamics simulations. In S. Benthall and S. Rostrup, editors, Proceedings of the 15th Python in Science Conference, pages 98-105, Austin, TX, 2016. SciPy. doi:10.25080/Majora-629e541a-00e

MDAnalysisには、多くのアルゴリズムやモジュールが含まれており、それぞれも個別に引用する必要があります。例えば、MDAnalysis.analysis.rmsMDAnalysis.analysis.alignモジュールを使用する場合は、以下を引用してください:

  • Douglas L. Theobald. Rapid calculation of RMSD using a quaternion-based characteristic polynomial. Acta Crystallographica A 61 (2005), 478-480.
  • Pu Liu, Dmitris K. Agrafiotis, and Douglas L. Theobald. Fast determination of the optimal rotational matrix for macromolecular superpositions. J. Comput. Chem. 31 (2010), 1561–1563.

各モジュールの主要な情報源は、そのドキュメントに記載されています。

自動引用によるduecredit

MDAnalysisを使用する際の引用を自動的に生成することもできます。完全なインストールおよび使用手順はユーザーガイドに記載されていますが、Pythonスクリプトmy_script.pyの引用リストを生成するのは簡単です。

$ python -m duecredit my_script.py

これにより、隠しファイルに引用が抽出され、さまざまな形式にエクスポートできます。例えば、BibTeX形式で表示するには、次のコマンドを使用します。

$ duecredit summary --format=bibtex
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?