分子モデリングライブラリ libuilcule
libuilcule は,本サイトで開発している分子モデリング用のライブラリです.Builcule の非 GUI 部分を切り貼りして開発を始めました.
独立した分子化学ライブラリとして利用可能なレベルをめざしています.
現バージョンは試作段階であり,「Builcule 10 が動くだけ」というレベルです.
バージョン 3 に向けてコードを整理している段階です.
libbuilcule や,このディレクトリで公開している CLI ソフトウェアは,C++ 開発環境があれば他の OS でも動作するはずです.
開発を再開しました.今回のバージョンアップには数か月程度かかると見ています.その間,α,β-版の公開とサイトの更新を進めます.(2025 年 12 月 30 日)
目次(ページ内リンク)
libbuilcule について
ビルドとインストール
libbuilcule を利用したソフトウェア
次期バージョン libbuilcule3 の進捗状況
libbuilcule について
データ構造とアルゴリズム
以前書いたコンテンツを寄せ集めて,紹介ページに再編したものです.
アルゴリズムの開発に係る実験
以下は,ライブラリ開発のための基礎研究です.[基礎研究]ディレクトリに置いています.
ヘッダファイル
大体の雰囲気は掴んでいただけると思います.
次期バージョンではクラスを紹介するページを作成する予定です.
| ファイル名 | 説明 |
|---|---|
| adjacent_atom.h | 隣接原子の数え上げ |
| adjust_base.h | 構造調整機能の基底クラス |
| adjust_mol.h | 分子単位で構造を調整 |
| align_3d.h | 三次元アライメント |
| amino_acid.h | アミノ酸の表現 |
| atom.h | 原子の表現 |
| atom_dist.h | 中心や半径を計算 |
| babel_mechanics.h | OpenBabel の分子力学機能を利用 |
| builcule_unit.h | 操作対象の系 |
| config_file.h | 設定ファイルの処理 |
| copy_base.h | コピー機能の基底クラス |
| copy_mol.h | 分子単位でコピー |
| copy_pept.h | ペプチド単位でコピー.ホモロジーモデリング用 |
| copy_region.h | 分子の一部分をコピー |
| create_bone.h | アルカン骨格を作成 |
| create_pept_bone.h | ペプチド骨格を作成 |
| create_side.h | アミノ酸側鎖を作成 |
| detect_mol.h | 原子間の距離から分子を検知 |
| dynamic.h | 動的計画法によるローカルアライメント |
| elongation.h | 分子に 1 原子を追加 |
| export_pdb.h | PDB 形式でファイル出力 |
| file_io.h | ファイル入出力 |
| global.h | グローバル変数等をまとめたファイル |
| mol_mol_dist.h | 分子間の距離を調整 |
| mol_mol_inter.h | 分子間の相互作用をシミュレート |
| molecule.h | 分子の表現 |
| region.h | 分子の一部の表現 |
| rotate_point.h | 1 原子を回転 |
| serial_num.h | シリアル番号を発生するシングルトン |
| set_angle.h | 結合角を設定 |
| shared_data.h | クラス間で共有しているデータ |
| substituent.h | 置換基を生成 |
| sup_3d.h | 三次元での重ね合わせ |
| unit.h | Builcule_Unit の基底クラス |
ビルドとインストール
開発環境
ビルドには C++ コンパイラ + GNU Autotools + Eigen + LibOpenBabelが必要です.
下の表は,私がインストールしている開発環境に係るパッケージです.いくつかのパッケージは,依存関係により,同時にインストールされるかもしれません.
プログラミングに,開発環境の練習記録があります.
| パッケージ名(バージョン) | 注 |
| g++ (12.2.0) | GNU C++ コンパイラ |
| make (4.3) | コンパイルを制御するユーティリティ |
| automake (1.16.6) | GNU標準準拠のMakefile生成ツール |
| autoconf (2.71) | configure スクリプト自動作成プログラム |
| libtool (2.4.7) | 汎用ライブラリサポートスクリプト |
| libeigen3-dev (3.4.0) | 線形代数用のライブラリ.分子の三次元座標の処理 |
| libopenbabel-dev (3.1.1) | ライブラリ版 Open Babel |
ソースファイル
libbuilcule のビルドとインストール
常法どおりです.
~$ tar -xzvf libbuilcule-2.3.4.tar.gz
~$ cd libbuilcule-2.3.4
~/libbuilcule-2.3.4$ ./configure
~/libbuilcule-2.3.4$ make
~/libbuilcule-2.3.4$ sudo make install
- ライブラリは,/usr/local/lib/builcule/ 以下にインストールされます
- ヘッダファイルは,/usr/local/include/builcule/lb2/ 以下にインストールされます
バージョン 2.2.1 でパラメータを変更しました
ホームディレクトリ ~/.builcule/b10/adjust.prm の 5 行め(VdwFact と書いてある行)の数値を変更しています.
2.2.1 より旧いバージョンから 2.2.1 以上のバージョンに変更する際に削除してください.Builcule などのプログラムで,構造調整機能使用時に新規作成します.
~/libbuilcule-2.3.4$ rm ~/.builcule/b10/adjust.prm
共有ライブラリのパスを設定
このライブラリを利用するプログラムががこのライブラリをロードできるように,パスを設定しておく必要があります.
~/libbuilcule-2.3.4$ sudo ldconfig
libbuilcule のアンインストール
アンインストールは,ビルド & インストールした後の状態なら(./configure で Makefile を作成した状態),
~/libbuilcule-2.3.4$ sudo make uninstall
とします.
バージョンアップでファイルの増減や名前の変更をする場合があるので,ディレクトリと一部のファイルが残ったままになるかもしれません.
そのような場合は,
~$ sudo rm /usr/local/lib/liblb2*
~$ sudo rm -rf /usr/local/include/builcule/lb2 あるいは sudo rm -rf /usr/local/include/builcule
とすれば削除できます.
また,ホームディレクイトリに ".builcule/b10" という隠しディレクトリを作成し,その中に設定ファイルや一時ファイルを格納します.
テキストファイルしか入っていませんが,削除する場合は手動で作業してください.例えば,
~$ rm -rf ~/.builcule
不具合
アライメント済みあるいは同一座標のタンパク質をアライメントしようとすると異常終了する場合があります.
ダウンロード等で入手した PDB ファイルでは,数値の記述位置がずれていることがあり,libbuilcule でファイルが開けない場合があります.
ただし,OpenBabel で他の形式に変換するなどの対策を取れば開けることがあります.
libbuilcule の課題と位置づけておきます.
リリース履歴
- 2024 年 1 月 2 日 :2.3.4 リリース.結合を切断した後の分子の検知にあったバグを修正しました
- 2023 年 12 月 2 日 :2.3.3 リリース.元素を変更した際に,結合長を変更しないように仕様変更しました
- 2023 年 11 月 27 日 :2.3.2 リリース.分子やアミノ酸の近傍を検知する際には,自分自身を除外するように仕様変更しました
- 2023 年 11 月 25 日 :2.3.1 リリース.アミノ酸の原子のアノテーションに甘い部分を見つけたので修正しました
- 2023 年 11 月 24 日 :2.3.0 リリース.近傍の原子を選択する際に,それらが属するアミノ酸も選択するように仕様変更しました
- 2023 年 11 月 20 日 :2.2.5 リリース.領域をカットしたときに,残った分子が移動しないように仕様変更しました
- 2023 年 11 月 18 日 :2.2.4 リリース.ファイルを開く際にアミノ酸の β 炭素に結合する水素を二重に取得してしまうバグを訂正しました
- 2023 年 11 月 16 日 :2.2.3 リリース.アミノ酸配列の扱いが甘くて異常終了する場合があったので訂正しました
- 2023 年 11 月 7 日:2.2.2 リリース.構造調整機能を利用する際の,ヒドロキシ基に対する部分電荷の設定を修正しました
- 2023 年 11 月 4 日:2.2.1 リリース.構造調整機能および分子間相互作用機能を改変しました
- 2023 年 11 月 2 日:2.2.0 リリース.構造調整機能を改変しました
- 2023 年 10 月 25 日:2.1.2 リリース.分子間相互作用の計算で,座標が異常値となるバグを修正しました.ライブラリ名とインストール先を変更しました
- 2023 年 10 月 20 日:2.1.1 リリース.Pro への変異でのバグを修正しました
- 2023 年 10 月 19 日:2.1.0 リリース.BCMD シリーズの BMutate の開発に伴い変更を加えました
- 2023 年 10 月 1 日:Makefile 作成ツールを qmake から GNU Autotools に変更し,リリースバージョンを 2.0.0 としました.本体に変更はありません
- 2023 年 9 月 4 日 : 20230831 リリース.分子間で結合を生成した際に異常終了する場合があるバグを修正しました
- (略)
- 2023 年 3 月 26 日 : α-1 リリース
仕様上の課題
アミノ酸の変異に伴う側鎖の立体障害
ポイントミューテーションやホモロジーモデリングに伴い,内部でアミノ酸側鎖を接続しています.
接続された側鎖は,タンパク質分子の他の部分と重なり合ってしまう場合があります.
側鎖の重なり合いを少なくするためには,エネルギ極小化または構造調整が必要です.
現在のところ,重なり合いを完全に解消できません.
ダウンロードしたタンパク質の編集
PDB ファイルなど,ダウンロードしたタンパク質の編集中に異常終了する場合があります(バグと紛らわしい).
バグでない原因を挙げると,ダウンロードしたファイルには実験結果を説明するために必要な,しかし化学構造上ありえない情報が記述されている場合があることです.
[編集(_E)]-[クリーンアップ(_A)] は,それに対処するために作成した機能です.極端に接近した原子(おそらく 1 つの原子を複数の座標で記述している)を削除します.
これですべて解決というものではありませんが,異常終了する場合にはとりあえず使用して,反応を見てください.
検知されたアミノ酸コードとファイルに記述されているアミノ酸コードとの不一致
実験的に側鎖の三次元座標が決定できなかった場合などが該当します.
例えば,PDB ファイルにコードが LYS と記してあって側鎖が β 炭素までしか記述されていないような場合です.Builcule では Ala と検知されます.
アミノ酸残基の欠失操作での原子の残存
アミノ酸残基の欠失操作では,C-末が修飾(非解離型の水素も)されている場合の修飾基や,異常アミノ酸の側鎖が削除されません.
削除する方がいいのか,残しておく方がいいのか,ケースバイケースだとと考えるからです.
libbuilcule を利用したソフトウェア
libbuilcule は分子モデリングソフト:Builculeのライブラリとして開発していますが,CLI 版分子モデリングソフト用のライブラリとしても利用可能です.
これを示すために,BCMD シリーズと銘打っていくつかのソフトウェアを試作しました.
現在のラインナップは,ペプチドの生成,変異,分子ファイルのマージ,ペプチドの変異,ペプチドの生成,性質の出力です.
さらに利用例を紹介しうるページも作成しました.
BMerge
2 個のファイルに記された分子を一つのファイルにまとめます.
分子どうしが重なり合わないように分子の位置を調整したあとで出力します.
BInter
分子ごとに構造を調整しつつ,分子間相互作用モデルを作成します.
相互作用の計算には 2 種類あります.
「相互作用過程のステップ」では,分子間で静電的相互作用とファンデルワールス反発を発生させることにより,分子間相互作用モデルを作成します.
「凝集過程のステップ」ではこれに加え,系の中心に向かって分子を引き寄せる力を発生させて計算します.
両方のステップを設定した場合は,まず「凝集過程のステップ」をおこない,ついで「相互作用過程のステップ」を実行します.
BMutate
PDB 形式等のファイルに記されたペプチドに,変異を 1 回導入します.
配列上の位置とアミノ酸を指定,乱数を発生させて位置とアミノ酸を設定,乱数に BLOSUM62 で重み付けをして位置とアミノ酸を設定するというオプションがあります.
変異したペプチドは(複数のペプチドが含まれる場合は変異したペプチドのみ),libopenbabel でエネルギー極小化してから出力します.
BPeptGen
配列を直接指定,Fasta ファイルを指定,あるいは設定ファイルを指定することにより PDB 形式のペプチドを生成します.
生成したペプチドは OpenBabel でエネルギー極小化して PDB 形式として出力します.
Builcule と比べて,生成するペプチドの性質を細かく設定できます.
BProperty
BProperty は,分子の性質を出力するソフトウェアです.
分子の性質は,Builcule と Detrial で開発したものです.
ファイルを指定,あるいはディレクトリを指定することにより分子構造ファイルから情報を読み取り,標準エラー出力します.
対応しているファイル形式は PDB,XYZ,および 本サイトの独自形式である BCL の各形式です.
モデリングと開発とを相互参照しながら進めたら,そのうち有用なものができるのではないか,という希望を持って進めています.
画像は,ペプチドとマグネシウムイオンの相互作用モデルです.
ペプチドの in silico コンフォメーション実験
ペプチドの作成と情報の取得は自作ソフトウェアを,コンフォメーション探索は OpenBabel ライブラリを利用する自作ソフトウェアを使った.
シミュレーション実験で,コンフォメーションに電荷が大きく影響しているであろうことが確認できた.
マグネシウムイオンとペプチドとの相互作用モデル
自作ソフトウェアを使い,Mg2+ とペプチドとの複合体がどこまでモデリングできるか in silico 実験している.
Mg2+ が 2 個のカルボキシル基とイオン結合するモデルが構築できた.
次期バージョン libbuilcule3 の進捗状況
libbuilcule2 を再編して libbuilcule3 を作成しています.下に作成中のクラス,構造体,列挙体を紹介します.
進捗度を示す目安にはなろうかと思います.
次期バージョンでは,buic という名前空間を使います.
クラス
- buic::AA_Side_stock:アミノ酸の側鎖の構造を保管するクラスです.変異に利用します
- buic::Affine_Base:Affine_Unit と Affine_Mol の基底クラスです
- buic::Align_3D:ペプチドのアライメントをおこなうクラスです.配列アライメントに加え構造アライメントも作成してみました
- buic::Amino_Acid:アミノ酸 1 個を表現するクラスです.ただし,ペプチド主鎖の検知は,Amino_Acid_Main でおこないます
- buic::Atom:原子 1 個を表現するクラスです,元素,座標,結合相手などを保持しています.これらは,必要に応じて変更可能です
- buic::Atom_Seed:原子 1 個を表現するクラスのひとつです.原子や原子団のコピー&ペースト等で利用します
- buic::Atom_To_Seed:std::vector<std::shared_ptr<Atom>> を std::vector<Atom_Seed> に変換するクラスです.分子や領域のコピー等に使います
- buic::Bone_Create:アルカンやペプチド骨格(ポリグリシン)を 1 個作成します
- buic::Buil_Data:原子半径や共有結合距離といった,基本的な化学定数を格納しています.ヘッダでシングルトンとして buic::BuilData を生成しています
- buic::Dyn_Prog:動的計画法をおこなうクラスです.ペプチドのアライメントに利用します
- buic::Elong_Atom:新たに Atom を 1 個作成して指定した Atom に結合するクラスです
- buic::Elong_Seed:新たに Atom_Seed を 1 個作成して指定した Atom_Seed に結合するクラスです
- buic::File_Open_BCL:独自形式である BCL 形式のファイルを開くためのクラスです.共有結合が記述されています
- buic::File_Open_Base:ファイルを開くための基底クラスです
- buic::File_Open_CIF:CIF 形式のファイルを開くためのクラスです
- buic::File_Open_PDB:PDB 形式のファイルを開くためのクラスです
- buic::File_Open_PDH:OpenBabel で出力された PDB 形式のファイルを開くためのクラスです.ペプチド部分の共有結合が記述されています
- buic::File_Open_XYZ:XYZ 形式のファイルを開くためのクラスです
- buic::File_Save:ファイルを保存するためのクラスです.XYZ 形式,独自形式の BCL 形式を保存します
- buic::Mol_Affine:Molecule に含まれる分子を X 軸,Y 軸に対して回転,あるいは平行移動します
- buic::Mol_Atom_Dist:Molecule に含まれる原子の分布を計算するクラスです.分子を描画するには,りあえず中心と半径を求める必要があります
- buic::Mol_Copied:Molecule のコピーを保持するクラスです.分子のコピー,カット,ペーストで利用します
- buic::Mol_Detect:分子の検知に関わる機能を集約しました.原子を削除する際や,共有結合を切断,生成する際に利用します
- buic::Molecule:分子 1 個を表現するクラスです
- buic::Path_Config:ファイルパスの管理をおこないます.ファイル履歴や前回利用したディレクトリなどを保持します.ヘッダでシングルトンとして buic::PathConfig を生成しています
- buic::Peptide:ペプチドを表現するクラスです
- buic::Region_2:2 原子を指定して領域を選択するクラスです.結合長の変更や,領域のコピーとカットに利用します
- buic::Region_3:3 原子を指定して領域を選択するクラスです.結合角変更に利用します
- buic::Region_4:4 原子を指定して領域を選択するクラスです.二面角変更に利用します
- buic::Region_Base:分子の一部分(領域)を選択するクラスです.Region_Affine_2 や Region_Rotate の基底クラスです
- buic::Region_Rotate:分子の領域を回転するためのクラスです.Region_Affine_3 や Region_Affine_4 の基底クラスです
- buic::Region_Seed:分子の領域を格納するクラスです.領域のコピー,カット,ペーストで利用します
- buic::Seed_To_Atom:分子単位で std::vector<Atom_Seed> を std::vector<std::shared_ptr<Atom>> に変換するクラスです.分子のペースト等に使います
- buic::Serial_Gen:Atom 連番作成用クラスです.原子に与える通し番号を作成します.ヘッダでシングルトンとして buic::SerialGen を生成しています
- buic::Substitute:置換基を接続するクラスです.置換基には,コピーされた領域,それから作成された置換基,変異用のアミノ酸側鎖があります
- buic::Sup_Point_2:2 原子を指定して分子を重ね合わせるためのクラスです
- buic::Sup_Point_3:3 原子を指定して分子を重ね合わせるためのクラスです
- buic::Sup_3D:最小二乗法で分子を重ね合わせるためのクラスです.構造アライメントにも利用します
- buic::Unit:ひとつの系を表現するクラスです,複数の分子を含めることができます
- buic::Unit_Affine:Unit を X 軸,Y 軸に対して回転します
- buic::Unit_Atom_Dist:Unit に含まれる原子の分布を計算するクラスです.例えば分子を描画するには,中心や半径を設定する必要があります
構造体
- buic::AA_Main_Search:アミノ酸主鎖検知用のメモ
- buic::Adjacent_Atom:隣接原子計数用のメモ
- buic::AA_Memo:アミノ酸配列などの授受用メモ
列挙体
- buic::AAAnnot:アミノ酸を構成する原子のアノテーション
- buic::AACode:アミノ酸コード
- buic::AtomFlag:削除や領域などのフラグ
- buic::AtomOrbital:伸長・分岐用のフラグ
- buic::RegionErr:領域検知エラー