技術屋にゃん兵衛のてくてくらぼ

気の向くままソフトについて書いてます。バリバリエンジニアではないのであくまでも初心者目線で。

Google Colaboratoryで化学構造式を使う

Google Colaboratoryで化学構造式を使う

 

脱線が好きなので、いろいろ飛びますがご容赦を。

 

RDKitを使うと化学構造式をPythonで使うことができる。

Google Colaboratory(以下、Google Colab)を使うとそれなりに化学構造式を書くことができたので少し書いてみます。

 

Google Colabでpipを使うときには先頭に「!」を付ける必要があります。

 

!pip install rdkit-pypi

!pip install py3Dmol

 

エラーが表示されずに実行が終わったら、ベースの環境設定は終わりです。

 

Mol形式のデータを構造式にしてみます。

 

Google Colabの「セッションストレージにアップロード」を使ってMolファイルをアップロードします。

Google Colabにmolファイルをアップロード



from rdkit import Chem

 

m = Chem.MolFromMolFile('/content/caffeine.mol')

 

Colaboratoryのファイルのパスの指定には、次の方法を使うと便利です。

パスを取得したいファイルの上にマウスカーソルを移動すると、右側に縦3つの点が妙寺されるので、このメニューから「パスをコピー」して貼り付けます

アップロードしたファイルへのパスをコピー



from rdkit.Chem import Draw

 

img = Draw.MolToImage(m)

img

カフェインの構造式が出力

 

これは画像なので、どこでもコピー&ペーストできます。

 

少し意地悪して、立体はどうなるか、とC36フラーレンのMolファイルを入れてみると次のようになりました。

C36フラーレンの描画

 

やはり少し厳しいか。

 

MolToImage()には次の属性があるので、触ってみます。

 

kekulize: 構造式のケクレ化のオン/オフ。デフォルトはオン

size: 画像ぞサイズ(ピクセル)。デフォルトは300px x 300px

wedgeBonds: Wedgeボンド(立体ボンド [楔形のボンド])のオン/オフ。デフォルトはオン

highlightAtoms: ハイライトする原子のリスト。デフォルトは

highlightBonds: ハイライトするボンドのリスト。デフォルトは

highlightColor: タプルとしてRGB指定。デフォルト(1, 0, 0)。0~1の範囲で指定

 

【kekulize】

 

わかりやすいようにベンゼンを使います。

 

m = Chem.MolFromMolFile('/content/benzene.mol')

 

まずはデフォルトの状態を確認します。

 

img = Draw.MolToImage(m, kekulize=True)

img

ベンゼンの表示(1)



で次にオフにしてみます。

 

img = Draw.MolToImage(m, kekulize=False)

img

ベンゼンの表示(2)

 

【size】

 

img = Draw.MolToImage(m, size=(100, 100))

img

 

とすると100px x 100pxになり画像が小さくなります。

 

 

【wedgeBonds】

 

wedgeBondsは、例えば、L-乳酸でやってみると、wedgeBondsがTrueの時(デフォルト)は次。

ボンドの表示(1)

 

Falseにすると次のようになります。

ボンドの表示(2)

 

【highlightAtoms】

 

img = Draw.MolToImage(m, highlightAtoms=[1])

img

 

すると、インデックス「1」の原子がハイライトされます。

原子のハイライト

 

インデックスは次の方法で表示することができます(RDKit Cookbook参照)。

原子ごとにIDを取得して(getAtoms())、そのIDを原子にマップします(SetAtomMapNum(atom.GetIdx()))。

 

def mol_with_atom_index(mol):

    for atom in mol.GetAtoms():

        atom.SetAtomMapNum(atom.GetIdx())

    return mol

 

この関数を読んで、構造式の画像を生成すると次のようになります。

 

mol_with_atom_index(m)

img = Draw.MolToImage(m)

img

原子のIDを表示

 

これで何番かわかりますね。併せて表示してみると次のようになります。

 

mol_with_atom_index(m)

img = Draw.MolToImage(m, highlightAtoms=[1])

img

 

【highlightBonds】

 

今度はイブプロフェンのMolファイルを使ってやってみましょう。

1と5のボンドをハイライトするように指定してみます。

 

img = Draw.MolToImage(m, highlightBonds=[1, 5])

img

ボンドのハイライト

 

【highlightColor】

 

highlightBondsのようなハイライトの色を変更します。

 

img = Draw.MolToImage(m, highlightBonds=[1, 5], highlightColor=(0.6, 0.8, 0.2))

img

 

次のように色が変わります。

ボンドのハイライトの色の変更



とりあえず今回はここまで。

構造式を書くだけであれば他のソフトを使ったほうが手っ取り早いです。

Pythonを使うのは、分析やフローを作るとき、という感じでしょうか。