化合物が流れる動画 (2)

あけましておめでとうございます。
本年もよろしくお願いいたします。

今年こそは、新しいことに挑戦しようと思います。


さて、化合物の動画について、まとめてみます。
まずは、単純な平行移動から。
Openbabel(ver2.3.0)を使います。Translateメソッドで移動できます。
下の例では、ベクトル(1,1,1)の方向に移動しつつ、20コマ分の座標を保存します。


#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <openbabel/mol.h>
#include <openbabel/obconversion.h>
#include <openbabel/math/vector3.h>

using namespace std;
using namespace OpenBabel;

int main(int argc,char *argv[]){
ifstream comp_in( argv[1] );
ofstream comp_out( argv[2] );

OBConversion conv;
conv.SetInFormat("SDF");
conv.SetOutFormat("SDF");

OBMol comp;
conv.Read(&comp, &comp_in);

for(int i=1; i<=20; i++){
comp.Translate(VX + VY + VZ);
conv.Write(&comp, &comp_out);
}
}

  • VX ... (x,y,z) = (1,0,0)
  • VY ... (x,y,z) = (0,1,0)
  • VZ ... (x,y,z) = (0,0,1)


次に、このSDFをPyMOL(ver.1.1r1)で読み込み、Movieとして保存します。
連番のPNG形式ファイルが出力されます。


最後に、PNG→GIFアニメ変換を行います。
ImageMagickのconvertコマンドが使いやすいです。

convert -delay 10 *.png moving.gif