unwrapはcpptraj専用、pytrajではできない

最近MDシミュレーションをはじめて、はえー結構ちゃんと整備されてるのねぇーとか思いつつ。

amberのツールを使って、MDの結果を解析しようと思ったところ、pytrajというpython notebook形式でMDの結果を解析できるツールを発見したものの、cpptrajでいうunwrapの操作ができない。。。

MDシミュレーションでは(事実上)無限に広がる空間を再現するために、1つのboxを定義して、そのboxが縦横奥行きに無限に繰り返されていることを仮定する「周期境界条件」(PBC)というのがありまして、 その都合でboxの左端と右端に1つの分子の構造が分離しちゃうことがあります。これを回避する(どちらかの場所にまとめる)のがcpptrajのunwrapというコマンドなのですが、これがpytrajにない。

しかも、ググってもなかなか出てこない。コマンド名が変わってしまっているのかな?と調べていた所、以下のgithub issueを発見。

Periodic boundary conditions · Issue #956 · mdtraj/mdtraj · GitHub

これによると、「unwrapはpythonで効率的に実装にするのがかなり難しい」そうで、だから用意されていないっぽいですね。たぶん「効率的に実装」というのはnumpyの関数1つとかで処理できるものではなくて、原子ごとにpythonのloopを回さなきゃいけないとかそんな感じなんだと思います。

一応、pytrajからcpptrajを呼び出す関数はあるので、それを使って疑似的に作業することはできますが、結局一度はunwrapしたデータをディスクに書き出す必要があるということで。

そんなわけで、cpptrajを使ってunwrapとか、大まかな操作をしてからpytrajを使ってグラフを出したりすると良いのではないでしょうか。という話でした。