プログラミング -自作ソフトウェアと環境-

このディレクトリでは,勉強・研究用に開発している分子モデリングソフトウェア 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

Builcule は,低分子有機化合物からタンパク質までの分子モデルをシームレスに作成できることを目指して開発しているオープンソースの分子モデリングソフトです.
モデリングの出発分子として,ファイルの読み取り以外に,メインウィンドウで n-アルカンやペプチドの新規作成や追加が可能です.
共有結合と分子,アミノ酸残基とアミノ酸配列,といった種々の情報を検知し,検知した分子構造に対して,回転・移動,元素や共有結合の編集,官能基の付加,配列アラインメント,重ね合わせ,ホモロジーモデリングといった処理が施せます.

このディレクトリでは,機能の紹介とマニュアル,分子モデルの作成例,仕様,ビルドとインストール法などを紹介ています.

[Builcule] に移動


BCMD シリーズ:CLI 版分子モデリングソフト

当サイトで開発している分子モデリングソフト Builcule の編集機能を利用して CLI で分子を作成するソフトウェアを開発しています.
以下のソフトウェアを公開しています.

[BCMD シリーズ] に移動


Detrial:分子表示ソフト

Detrial の実行イメージ

Detrial は,タンパク質を中心とする分子構造の解析ツールを企図して試験的に開発しています.
タンパク質の構造解析ソフトを中心とした検知アルゴリズムの勉強と実装を志向しています.
いくつかの機能をピックアップすると,

画像は,ヘモグロビンのヘム近傍拡大イメージです.
ヘムは,空間充填モデルで CPK 様式に着色しています.
ペプチド部分は,棒球モデルとリボンモデルとを重ね書きしたモデルです.棒球モデルはアミノ酸の性質によって色分けしており,リボンモデルは二次構造によって色分け(α-ヘリックスは赤色,β-シートは黄色)しています.
ヘム鉄近傍のヒスチジンを選択した結果,画面右側にあるアミノ酸リストのヒスチジンが 1 個反転表示されています.

[Detrial] に移動


C++ プログラミングの練習

開発環境の概略

当サイトでは,研究手段の一つとしてプログラミングを利用しています.
プログラミング環境(開発環境)は,プラットフォーム OS の Debian GNU/Linux 安定版にパッケージ化されたソフトウェアのみを利用しています.
Debian のメジャーバージョンアップを機会と捉えて,関連セクションを改定しています(だいたい 2 年ごと).
そのために維持すべき能力として,下の目標を定めています.

現在,このサイトで利用している開発環境の概略を示します.

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 の実行画面

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」本カテゴリーで検索してみました.