化合物の一覧から特定の部位を持つ構造を選ぶときは、SMARTSで検索条件を指定できます。ここではC(=O)OHとC(=O)O⁻の部位を別々に調べ、結果を化合物IDと一緒にCSVへ書き出します。
SMILESの一覧から部分構造を調べたいという公開相談を題材に、COOHとCOO⁻を探す検索式を試します。
検索する部位を決める
Daylightの公式SMARTS例をもとに、次の2式を使います。
COOH: [CX3](=O)[OX2H1]
COO⁻: [CX3](=O)[O-]
最初の式は、水素を1つ持つ酸素がカルボニル炭素に結合した部位を探します。次の式は、負電荷を持つ酸素を探します。CSVのacid_matchとanion_matchに、それぞれ一致すれば1、一致しなければ0を記録します。両方の部位を持つ構造では、両方の列が1になります。
ここでの検索対象は、この2式に一致する部分構造です。同じ部位を持つカルバミン酸や炭酸の誘導体も一致するため、研究で使う分類名や周囲の原子の条件に合わせて、結果の構造を確認します。
CSVの各構造を検索する
compounds.csvとcarboxyl_csv.pyを同じフォルダーへ保存してください。入力CSVのsource_idは化合物ID、smilesは検索する構造です。
macOSやLinuxでは、そのフォルダーで次を実行します。
python3 -m venv .venv
.venv/bin/python -m pip install "chematic==1.1.2"
.venv/bin/python carboxyl_csv.py compounds.csv
Pythonを使える環境で実行してください。この例はmacOS arm64とPython 3.13.6で確認しました。Windowsでは、最初の行をpy -m venv .venvに変え、.venv/bin/pythonを.\.venv\Scripts\python.exeに置き換えます。パッケージの取得後、CSVの読み込みと検索は端末内で行います。
スクリプトは元のSMILESをそのまま検索します。塩の除去や電荷の変更を先に行いたい場合は、標準化の手順を決め、その設定を検索結果と一緒に残してください。
一致した行を選ぶ
公開Pythonパッケージv1.1.2で、サンプルの出力を確認しました。
source_id name acid_match anion_match
CMP001 acetic acid 1 0
CMP002 ethanol 0 0
CMP003 aspirin 1 0
CMP004 ethyl acetate 0 0
CMP005 sodium acetate 0 1
酢酸とアスピリンはCOOH側、酢酸ナトリウムはCOO⁻側に一致します。酢酸エチルはエステルなので、どちらも0です。
生成されるcarboxyl-report.csvを表計算ソフトで開き、acid_match=1またはanion_match=1で絞り込みます。status=okを処理済みの目印にできます。検索式、元のSMILES、入力のレコード番号も同じCSVに残るので、選んだ化合物と検索条件を後から照合できます。