化合物の一覧から特定の部位を持つ構造を選ぶときは、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に残るので、選んだ化合物と検索条件を後から照合できます。

出力CSVの見本と実行記録も用意しました。まずこの5化合物で条件を確認し、手元の一覧に置き換えて試してください。