CIRpyについて
アメリカ国立衛生研究所(NIH)が提供している化学情報検索サービスChemical Identifer Resolver (CIR)を利用すると、化合物の情報(SMILESやIUPAC名など)を検索キーワードとして、その化合物の情報を取得できる。
このサービス、webURLがAPIのように利用できるため、コードを書くことでプログラム的に情報を取得することが可能。
(web URLの利用に関しては、以下の記事参照)
更に、CIRpyという本サービスのPythonモジュールがあり、これを使うのが一番簡単な方法みたい。
同様の化合物情報取得モジュールであるpubchempyに比べると情報の取得率が低いらしいが、pubchempyでは取得できないCAS番が取得できるため、割と使える場面は多いかもしれない。
(pubchemについての記事はこちら)
インストール
pip install cirpy
コード
基本的な使い方
第1パラメータは入力文字列で、第2パラメータに希望する出力表現を記載する。
第2パラメーターの主な出力表現は以下
(cas
と name
は、リスト形式で結果が返ってくる)
- stdinchi
- stdinchikey
- inchi
- smiles
- ficts
- ficus
- uuuuu
- hashisy
- sdf
- names
- iupac_name
- cas
- formula
import cirpy
name = "Ethanol"
cas_list = cirpy.resolve(name, "cas")
name_list = cirpy.resolve(name, "names")
iupac_name_list = cirpy.resolve(name, "iupac_name")
smiles = cirpy.resolve(name, "smiles")
print(cas_list)
print(name_list[:10])
print(iupac_name_list)
print(smiles)
結果
['121182-78-3', '64-17-5', '8024-45-1', '8000-16-6', '68475-56-9', '71076-86-3', '71329-38-9']
['ethanol', '121182-78-3', '64-17-5', '8024-45-1', '8000-16-6', '68475-56-9', '71076-86-3', '71329-38-9', 'Ethyl alcohol & water, 50%', 'Ethyl alcohol & water, 60%']
ethanol
CCO
casに関しては、古いCAS?も含まれるみたいなので注意が必要かも。(参考|ethanolのcas)
(pubchempyの検索で引っかかるかどうかを確認することで古いCASは除外できそう)
化合物名(name)もcasが含まれていたりだいぶ雑な感じになっている。
pubchempyを活用したcasの選別
import pandas as pd
import pubchempy as pcp
properties = ['MolecularFormula','CanonicalSMILES', 'IUPACName']
df = pd.DataFrame()
for cas in cas_list:
try:
temp = pcp.get_properties(properties, cas, 'name',as_dataframe=True)
#as_dataframe=True とすることでpandas dataframe として情報を取得可能
temp['CAS'] = cas
df = pd.concat([df,temp],axis=0,join='outer',sort=True)
except:
pass
display(df)
結果
CAS | CanonicalSMILES | IUPACName | MolecularFormula | |
---|---|---|---|---|
CID | ||||
702 | 64-17-5 | CCO | ethanol | C2H6O |
702 | 68475-56-9 | CCO | ethanol | C2H6O |
ファイルの取得
さまざまなファイル形式で出力を返すこともできる
- alc # Alchemy format
- cdxml # CambridgeSoft ChemDraw XML format
- cerius # MSI Cerius II format
- charmm # Chemistry at HARvard Macromolecular Mechanics file format
- cif # Crystallographic Information File
- cml # Chemical Markup Language
- ctx # Gasteiger Clear Text format
- gjf # Gaussian input data file
- gromacs # GROMACS file format
- hyperchem # HyperChem file format
- jme # Java Molecule Editor format
- maestro # Schroedinger MacroModel structure file format
- mol # Symyx molecule file
- mol2 # Tripos Sybyl MOL2 format
- mrv # ChemAxon MRV format
- pdb # Protein Data Bank
- sdf3000 # Symyx Structure Data Format 3000
- sln # SYBYL Line Notation
- xyz # xyz file format
name = "Ethanol"
cif = cirpy.resolve(name, "cif")
print(cif)
結果
data_C2H6O
#
_chem_comp.id 'C2H6O'
#
loop_
_chem_comp_atom.comp_id
_chem_comp_atom.atom_id
_chem_comp_atom.type_symbol
_chem_comp_atom.charge
_chem_comp_atom.model_Cartn_x
_chem_comp_atom.model_Cartn_y
_chem_comp_atom.model_Cartn_z
C2H6O A1 C 0 0.0072 -0.5687 -0.0000
C2H6O A2 C 0 -1.2854 0.2499 -0.0000
C2H6O A3 O 0 1.1304 0.3147 0.0000
C2H6O A4 H 0 0.0392 -1.1972 0.8900
C2H6O A5 H 0 0.0392 -1.1972 -0.8900
C2H6O A6 H 0 -1.3175 0.8784 0.8900
C2H6O A7 H 0 -1.3175 0.8784 -0.8900
C2H6O A8 H 0 -2.1422 -0.4239 -0.0000
C2H6O A9 H 0 1.9857 -0.1365 -0.0000
#
loop_
_chem_comp_bond.comp_id
_chem_comp_bond.atom_id_1
_chem_comp_bond.atom_id_2
_chem_comp_bond.value_order
C2H6O A1 A2 SING
C2H6O A1 A3 SING
C2H6O A1 A4 SING
C2H6O A1 A5 SING
C2H6O A2 A6 SING
C2H6O A2 A7 SING
C2H6O A2 A8 SING
C2H6O A3 A9 SING
#
物性情報の取得
構造ベースから計算できる以下の情報も取得可能
- mw # (Molecular weight)
- h_bond_donor_count
- h_bond_acceptor_count
- h_bond_center_count
- rule_of_5_violation_count
- rotor_count
- effective_rotor_count
- ring_count
- ringsys_count
h_bond_acceptor_count = cirpy.resolve('coumarin 343', 'h_bond_acceptor_count')
print(h_bond_acceptor_count)
結果
5
Moleculeクラスを使う
moleculeオブジェクトを作って、後から色々な情報を取り出す方法もある
from cirpy import Molecule
mol = Molecule('N[C@@H](C)C(=O)O')
print(mol.mw)
print(mol.iupac_name)
print(mol.cas)
結果
89.0938
(2S)-2-aminopropanoic acid
['115967-49-2', '170805-71-7', '130380-93-7', '77160-91-9', '25191-17-7', '18875-37-1']
参考URL
- 公式ドキュメント
- NIHのChemical identifer resolverでcas番号、SMILES、InChiKey、IUPAC名を取得しよう
- CAS番号もしくは化合物名からSMILESを取得する
- CIRpyを使ってみた。
- 化合物名→SMILESの変換にはCIRpy|qiita
関連書籍
リンク
リンク
リンク