大量のsmilesを処理しなければならなくなり、RDKitやpybelで処理できないsmilesをあらかじめ省く作業をしていた。
RDKitの場合
from rdkit import Chem
mol = Chem.MolFromSmiles("C(=C)(=C)C") #やばすぎ構造
[14:00:21] Explicit valence for atom # 0 C, 5, is greater than permitted
ってでてきた。うんうん。そうだね。
Pybel (OpenBabel) の場合
import pybel
mol = pybel.readstring("smi", "C(=C)(=C)C")
print mol.write("can")
C[C](=C)=C
と出力できてしまった。まじですかこれ。
ということで、構造が正しそうかどうかはRDKitを使い、とりあえずなんでもcanonical smiles出したければpybelを使いましょう。