プログラミング -自作ソフトウェアと環境-
このディレクトリでは,勉強・研究用に開発している分子モデリングソフトウェア Builcule や その派生ソフト Detrial(分子表示),BPept シリーズ(ペプチドの生成・編集)をフリーソフトウェア(オープンソースソフトウェア)として公開しています.
また,ライブラリやツールの利用法を中心に,プログラミングの練習記録を整理して公開しています.
現在の作業プラットフォーム OS は,Debian GNU/Linux バージョン 12 "bookworm" です.
開発言語は C++ および Python で,開発ライブラリやツール類は,Debian にパッケージ化されたものを利用しています.
目次(ページ内リンク)
libbuilcule:自作の共有ライブラリです.Builcule,BCMD シリーズ,および Detrial で使います
Builcule:自作 GUI 版分子モデリングソフトです.少数の分子を試行錯誤しながら構築することを意図して開発しています
BCMD シリーズ:自作 CLI 版分子モデリングソフトです.大量の分子を処理することを意図して開発しています
Detrial:自作分子表示ソフトです.Builcule とは相性の悪い計算結果を表示することを意図して開発しています
C++ プログラミングの練習:"Hello world" から,Qt を使った単純な GUI ソフトウェアの作成までをピックアップして紹介しています
Python プログラミングの練習:仮想環境の構築,Rdkit,NumPy,Pandas のイントロです
開発環境:このサイトで利用している開発環境の概略を示します
libuilcule
libuilcule は,当サイトで開発している分子モデリング用のライブラリです.
このライブラリは,Builcule から GUI に関わらないコードを独立させて,ライブラリ化したものが基になっています.
現在は,Builcule,BCMD シリーズ,および Detiral のライブラリとして開発できるように,開発手順の確立をめざしています.
[libbuilcule] に移動
Builcule:GUI 版分子モデリングソフト
Builcule は,低分子有機化合物からタンパク質までの分子モデルをシームレスに作成できることを目指して開発しているオープンソースの分子モデリングソフトです.
モデリングの出発分子として,ファイルの読み取り以外に,メインウィンドウで n-アルカンやペプチドの新規作成や追加が可能です.
共有結合と分子,アミノ酸残基とアミノ酸配列,といった種々の情報を検知し,検知した分子構造に対して,回転・移動,元素や共有結合の編集,官能基の付加,配列アラインメント,重ね合わせ,ホモロジーモデリングといった処理が施せます.
- 元素とその座標に基づいて,結合,アミノ酸残基,アミノ酸配列,分子など分子構造を検知します
- 原子,共有結合,官能基やアミノ酸を含む部分構造,あるいは分子単位での編集が可能です
- 分子の系を格納するレイヤが 3 個あり,複数の系を関連させつつ同時に編集できます
- 配列アラインメント,重ね合わせ,ホモロジーモデリングといったタンパク質の編集機能を有します
- libopenbabel によるファイル入出力,エネルギー極小化,コンフォメーション探索が可能です
このディレクトリでは,機能の紹介とマニュアル,分子モデルの作成例,仕様,ビルドとインストール法などを紹介ています.
[Builcule] に移動
BCMD シリーズ:CLI 版分子モデリングソフト
当サイトで開発している分子モデリングソフト Builcule の編集機能を利用して CLI で分子を作成するソフトウェアを開発しています.
以下のソフトウェアを公開しています.
- BMerge:2 個のファイルに記された分子を 1 個のファイルにまとめます
- BInter:分子間相互作用モデルを作成します
- BMutate:ペプチドに変異を導入します
- BPeptgen:ペプチドを生成します
- BProperty:ファイルに記された分子の性質を出力します
[BCMD シリーズ] に移動
Detrial:分子表示ソフト
Detrial は,タンパク質を中心とする分子構造の解析ツールを企図して試験的に開発しています.
タンパク質の構造解析ソフトを中心とした検知アルゴリズムの勉強と実装を志向しています.
いくつかの機能をピックアップすると,
- 分子,タンパク質(アミノ酸配列)の認識
- 2 個の描画領域を有しており,それぞれから選択したペプチドの配列アラインメント,構造アラインメント
- アミノ酸/非アミノ酸,選択分子/非選択分子,選択アミノ酸/その他を区別した描き分け
- 中心からの距離による色分け,特定のアミノ酸の表示
- 近傍の原子,接触している原子の検知
- 水素結合や電荷の検知
- k-平均法によるクラスター検知(ドメイン検知)が可能です
- 原子の座標の固有ベクトル計算(分子の概形)
画像は,ヘモグロビンのヘム近傍拡大イメージです.
ヘムは,空間充填モデルで CPK 様式に着色しています.
ペプチド部分は,棒球モデルとリボンモデルとを重ね書きしたモデルです.棒球モデルはアミノ酸の性質によって色分けしており,リボンモデルは二次構造によって色分け(α-ヘリックスは赤色,β-シートは黄色)しています.
ヘム鉄近傍のヒスチジンを選択した結果,画面右側にあるアミノ酸リストのヒスチジンが 1 個反転表示されています.
[Detrial] に移動
C++ プログラミングの練習
開発環境の概略
当サイトでは,研究手段の一つとしてプログラミングを利用しています.
プログラミング環境(開発環境)は,プラットフォーム OS の Debian GNU/Linux 安定版にパッケージ化されたソフトウェアのみを利用しています.
Debian のメジャーバージョンアップを機会と捉えて,関連セクションを改定しています(だいたい 2 年ごと).
そのために維持すべき能力として,下の目標を定めています.
- プログラミング言語とそのツールを利用できること
- 科学ライブラリを利用できること
- GUI ライブラリを利用できること
- サンプルコードを作成しておいて,Debian のバージョンアップのたびに改定できること
- 本家ドキュメントを読解して,サンプルコードを作成できること
現在,このサイトで利用している開発環境の概略を示します.
- 主たる開発言語は:C++.コンパイラは,GNU C++(g++>)
- 数値計算ライブラリ:Eigen,GNU Scientific Library
- 自作ソフトウェアの GUI 部分:Qt と QtOpenGL
- Makefile 作成ツール:qmake と automake
Hello World
基本的なプログラミングツール類の練習記録を出発点として,少しずつ改定しています.
改定時期は,OS をアップデートした直後です.
素材は,端末に「Hello World.」と出力する定番のプログラムです.
C++ による共有ライブラリの作成
C++ による動的ライブラリの作成
Automake を使った実行ファイルの作成
Autotools を使った共有ライブラリの作成
qmake を使った実行ファイルの作成
qmake を使った共有ライブラリの作成
qmake を使った動的ライブラリの作成
このサイトで公開している分子モデリングソフト Builcule や分子表示ソフト Detrial は GUI に Qt を利用していることもあり,qmake を使ってビルドしています.
科学系ライブラリの導入
上の "Hello World." パラグラフと同じく,練習記録を出発点として,少しずつ改定しています.
改定時期は,上の "Hello World." セクションの次です.
Eigen 練習ノート:ポピュラーな線形代数ライブラリ.当サイトでは,三次元座標の処理などに利用しています
C++ による GNU Scientific Library 入門:高校数学に近いレベルのトピックスをいくつか採りあげ,プログラムを走らせています
Open Babel ライブラリ練習ノート:ファイル形式の変換以外に,水素付加やエネルギー極小化を試しています
C++ による RDKit 入門:SMILES 形式や MDL MOL 形式から RDKit::ROMol クラスや RDKit::RWMol クラスのインスタンスを作成します
Qt/C++ による GUI ソフトウェア作成の練習
当サイトでは分子モデルの処理を目的とする GUI ソフトウェアをいくつか開発しています.
OS のメジャーバージョンアップに伴い開発環境もバージョンアップされます.
そこで,
サンプルコードを作成しておいて,バージョンアップのたびに動作確認しつつ開発能力を維持しよう,
そういう目論見のパラグラフです.
右の画像は,このセクションで作成するサンプルソフトウェアです.
1. メインウィンドウ
2. メニューバー
3. レイアウト
4. イベントの取得
5. Qt3D による描画
6. ピッキング
7. 国際化
今メジャーバージョンでは,Qt5 から Qt6 へ移行に伴い,OpenGL による描画で私には解決できない問題が発生しました.
そこで今バージョンでは,公開している GUI ソフトウェアは Qt5 で開発することにしておいて,
次期バージョンのための描画方法として,Qt3D の練習をすることにしました.
問題がなければ,次期バージョンでは Qt3D で開発を進めることにします.
Qidoirep
Qidoirep は,単純な周期表ソフトウェアです.
Builcule の元素選択ダイアログボックスを改変したもので,開発環境がバージョンアップしたときの練習用という位置づけです.
行数は 250 行程度.そのうち,元素記号などのデータが 60 行弱と小さいソースコードなので,Qt 開発環境をインストールし,ウィジェットのレイアウトやシグナル/スロットを学んだ時点で,コードが読めると思います.
[Qidoirep] に移動
Python
RDKit や量子化学ソフトウェアは Python 環境で利用することが多そうなので勉強しています.
Python アプリケーションのインストール:venv と pipx の利用:OS のパッケージに入っていないアプリケーションは,pipx や venv 用の仮想環境を利用します
NumPy 練習ノート:要素が数値である N 次元配列ライブラリ.NumPy ドキュメントの "Getting Started" を勉強したときのノートです
Pandas 練習ノート:NumPy を利用したデータフレームライブラリ.Getting started の "Intro to pandas" および UserGuide の "the absolute basics for beginners" を勉強したときのノートです
Python による RDKit 練習ノート:ケモインフォマティクスライブラリ.RDKitドキュメンテーション非公式日本語版の最初の部分を,Python API Reference を参照しつつ作成しました
開発環境
Python 関連のコンテンツをいくつか,[モデリング] ディレクトリの メソッドの導入に作成しています.
これらは,量子ソフトウェアや RDKit の Python 環境での利用を想定し,「開発」というより「アプリケーションを使うためのスクリプト」という位置づけのコンテンツです.
プログラミング言語やライブラリのパッケージ
このサイトで開発に使用している主な Debian パッケージを紹介します.
パッケージ間の依存性により自動的にインストールされるパッケージあるので,網羅できているとは限りません.
パッケージ名(バージョン) | 注 |
g++ (12.2.0) | GNU C++ コンパイラ |
make (4.3) | コンパイルを制御するユーティリティ |
automake (1.16.6) | GNU標準準拠のMakefile生成ツール |
autoconf (2.71) | configure スクリプト自動作成プログラム |
libtool (2.4.7) | 汎用ライブラリサポートスクリプト |
qtbase5-dev(5.15.8) | Qt 5 用の開発ツール |
qt6-base-dev(6.4.2) | Qt 6 用の開発ツール |
libglu1-mesa-dev(9.0.2) | Mesa OpenGL ユーティリティライブラリの開発ファイル.ライブラリ libglu1-mesa も同時にインストールされました |
libeigen3-dev (3.4.0) | 線形代数用の C++テンプレートライブラリ |
libgsl-dev (2.7.1) | GNU 科学ライブラリ(数値解析用ルーチン集)の開発ファイル |
libopenbabel-dev (3.1.1) | これは,ライブラリ版 Open Babel のヘッダファイルと静的ライブラリのパッケージです |
librdkit-dev (202209.3) | RDKit の C++ 用 ヘッダファイル |
python3-rdkit (202209.3) | RDKit の Python 用 API |
ipython3 (8.5.0) | Python シェルの拡張 |
パッケージ化されたドキュメント類
Debian パッケージに入っているドキュメントを一覧表にまとめました.
インストール先として HTML 形式のドキュメントを記しているのは,ローカルで Apache を使って HTTP アクセスしているからです.
パッケージ名(バージョン) | 注 | インストール先 |
autoconf-doc (2.71) | automatic configure script builder | /usr/share/doc/autoconf/autoconf.html |
libeigen3-doc (3.4.0) | eigen3 の API ドキュメント | /usr/share/doc/libeigen3-dev/html/ |
libopenbabel-doc (3.1.1) | ライブラリ版 Open Babel の API ドキュメント | /usr/share/doc/libopenbabel-dev/html/ |
rdkit-doc (202209.3) | RDKit の API ドキュメント | /usr/share/doc/rdkit/html/ |
python-ipython-doc (8.5.0) | IPython のドキュメント | /usr/share/doc/python-ipython-doc/html/ |
Web 上のリソース
本家のドキュメント類を読めるようになる,というのも筆者の目標の一つなのでリンク集を作成しました.
C++
g++:GNU C++.主たる開発言語
Program Library HOWTO:C 言語を使った,ライブラリ作成法
C++ dlopen mini HOWTO:上記 "Program Library HOWTO" からリンクされている,C++ 言語で動的ライブラリを作成する方法
Automake - GNU Project - Free Software Foundation:C 言語を使った,Automake の解説
Autotools FAQ
GNU Autoconf - Creating Automatic Configuration Scripts - GNU Project - Free Software Foundation
GNU Libtool - Portable Dynamic Shared Object Management - GNU Project - Free Software Foundation
Category:Developer - Open Babel:Open Babel に関する開発者向け情報
Eigen:数値計算ライブラリ
GNU Scientific Library:数値計算ライブラリ
Qt:の,[Qt を学ぶ]→[Qt ドキュメンテーション]
Python
Python 3.12.1 ドキュメント, Python 標準ライブラリ, Python 言語リファレンスNumPy documentation:要素が数値である N 次元配列ライブラリ
Pandas documentation:NumPy を利用したデータフレームライブラリ
Matplotlib documentation:NumPy のグラフ描画
RDKit:ケモインフォマティクスライブラリ
RDKit ドキュメンテーション非公式日本語版サイト — RDKit_unofficial_translation_JP 2019.03.1 ドキュメント
参考書の検索
このディレクトリでは,C++ や Python プログラミングを使って,種々のデータを処理しています.
関連する参考書を,Amazon の「コンピュータ・IT」本カテゴリーで検索してみました.