化合物情報を扱う際には一般的にRDKitがよく用いられており、そのユーザー数の多さから様々な記事がウェブ上で見つかります。 ChemAxonもマイナーではありますが研究で用いられているにも関わらず、そのAPIの使い方についてまとめているのは公式ドキュメントのみであまり情報としては充実していません。 そこでこれからいくつかの記事に分けて、ChemAxon API の基本的な使い方に関して解説していこうと思います。
注意事項・Notice ChemAxonは基本有償(Academic free license)であり、その出力結果等は著作権に関わるため記載しません。 そのため、APIを用いたソースコードのみ記載します。
This post does NOT contain any outputs using ChemAxon API to prevent copyright infringement. This post only contains Java source codes using ChemAxon API, whose documents are open to the public.
環境 JChem Engines: 20.13.0 Java: 1.8 ChemAxonのインストールが終わってない人は「ChemAxon Academic License取得方法&インストール方法 」を参考にしてください。
分子の読み込み 基本的には MolImporter
Class を使えば良いです。 読み込める形式としては、一般的なフォーマットは大体対応しています (e.g., smi, mol, sdf)。 ここではとりあえず、
smilesの読み込み molファイルからの読み込み sdfファイルからの読み込み それぞれについてまとめておきます。
smilesの読み込み readMoleculeFromSmiles.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import chemaxon.formats.MolFormatException;import chemaxon.formats.MolImporter;import chemaxon.struc.Molecule;public class readMoleculeFromSmiles { public static void main (String[] args) { String smiles = "CC(=O)OC1=CC=CC=C1C(O)=O" ; try { Molecule mol = MolImporter.importMol(smiles); System.out.println(String.format("Atom Count: %s" , mol.getAtomCount())); System.out.println(String.format("Molecular weight: %s" , mol.getMass())); } catch (MolFormatException e) { e.printStackTrace(); } } }
molファイルからの読み込み aspirin.mol をダウンロードして同じディレクトリに配置してください。
readMoleculeFromMolFile.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import chemaxon.formats.MolImporter;import chemaxon.struc.Molecule;import java.io.FileInputStream;import java.io.IOException;public class readMoleculeFromMolFile { public static void main (String[] args) { try (MolImporter mi = new MolImporter (new FileInputStream ("aspirin.mol" ))) { Molecule mol = mi.read(); System.out.println(String.format("Atom Count: %s" , mol.getAtomCount())); System.out.println(String.format("Molecular weight: %s" , mol.getMass())); } catch (IOException e) { e.printStackTrace(); } } }
sdfファイルからの読み込み aspirin_penicilin.sdf をダウンロードして同じディレクトリに配置してください。
readMoleculeFromSdf.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import chemaxon.formats.MolImporter;import chemaxon.struc.Molecule;import java.io.FileInputStream;import java.io.IOException;public class readMoleculeFromSdf { public static void main (String[] args) { Molecule mol; try (MolImporter mi = new MolImporter (new FileInputStream ("aspirin_penicilin.sdf" ))) { while ((mol = mi.read()) != null ) { System.out.println(mol.getName()); System.out.println(String.format("Atom Count: %s" , mol.getAtomCount())); System.out.println(String.format("Molecular weight: %s\n" , mol.getMass())); } } catch (IOException e) { e.printStackTrace(); } } }
分子の書き込み 基本的にはMolExporter
Class を使えば良いです。 ここでは、Molecule instance を
SMARTS string で出力 SDFフォーマットで書き込み 画像ファイルとして書き込み する方法についてまとめておきます。
exportMolecule.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 import chemaxon.formats.MolExporter;import chemaxon.formats.MolFormatException;import chemaxon.formats.MolImporter;import chemaxon.struc.Molecule;import java.io.*;public class exportMolecule { public static void main (String[] args) { String smiles = "CC(=O)OC1=CC=CC=C1C(O)=O" ; Molecule mol = null ; try { mol = MolImporter.importMol(smiles); System.out.println(MolExporter.exportToFormat(mol, "smarts" )); } catch (IOException e) { e.printStackTrace(); } try (MolExporter me = new MolExporter ("aspirin.sdf" , "sdf" )) { me.write(mol); } catch (IOException e) { e.printStackTrace(); } try (BufferedOutputStream bfs = new BufferedOutputStream ( new FileOutputStream (new File ("aspirin.png" )))) { byte [] bPng = (byte []) MolExporter.exportToObject(mol, "png:w250,h200,b32,#ffffff" ); bfs.write(bPng); } catch (IOException e) { e.printStackTrace(); } } }
終わりに この記事ではChemAxon API を用いて簡単な分子の読み書きについてまとめました。 実際はもっと色々な使い方ができますので、興味がある方は参照のAPI Documentsを見てください。
それでは。
参照