プロが教えるわが家の防犯対策術!

官能基の有無を調べるソフトにOpenBabelなどありますが、

特定の官能基の有無はわかるのですが、その数を指定することはできる
のでしょうか。
たとえば[OH]が5つ存在するものをSMILESとうからとって来れるのでしょうか。
COC1=C(C=CC(=C1)CC=C)O
CC(=O)NC1=CC=C(C=C1)CC(=O)O
CCOC1=CC2=C(C3=C(C=C(C=C3)N)N=C2C=C1)N
C(C(C1C(=O)C(=C(O1)O)O)O)O
CC(=O)OC1=CC=CC=C1C(=O)O
CC(=O)NC1=NN=C(S1)S(=O)(=O)N
C1=NC2=C(N1)C(=NC=N2)N
C1=NC2=C(C(=N1)N)N=CN2C3C(C(C(O3)CO)O)O

例えばこれらのデータから[OH]が2つ以上含む化合物は判別できますでしょうか。

A 回答 (5件)

OpenBabelGUIを使う(あまりスマートではないけどとりあえず思いついた)やり方。



Add hydrogens (make explicit) と
Output explicit hydrogens as such に
チェックを入れて、質問文のデータをコンバートすると

[CH3]Oc1c([cH][cH]c([cH]1)[CH2][CH]=[CH2])[OH]
[CH3]C(=O)[NH]c1[cH][cH]c([cH][cH]1)[CH2]C(=O)[OH]
[CH3][CH2]Oc1[cH]c2c(c3c([cH]c([cH][cH]3)[NH2])nc2[cH][cH]1)[NH2]
[CH2]([CH]([CH]1C(=O)C(=C(O1)[OH])[OH])[OH])[OH]
[CH3]C(=O)Oc1[cH][cH][cH][cH]c1C(=O)[OH]
[CH3]C(=O)[NH]c1nnc(s1)S(=O)(=O)[NH2]
[cH]1nc2c([nH]1)c(n[cH]n2)[NH2]
[cH]1nc2c(c(n1)[NH2])n[cH]n2[CH]1[CH]([CH]([CH](O1)[CH2][OH])[OH])[OH]

のように変換されますから、あとはPerlなどを使って各データの[OH]を数えればいいんじゃないかと思います。

ただし、このやり方だとカルボキシ基CO2Hやスルホ基SO3Hなどもヒドロキシ基OHとしてカウントされますので注意してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
[OH]の数を数えることはプログラム組めばできそうですね。
ちなみにカルボキシル基の場合はC(=O)[OH]
スルホ基の場合は、S(=O)(=O)[OH],
アミドやアミンの場合はどのような文字列で表示されるのでしょうか。
そもそも
Add hydrogens (make explicit) と
Output explicit hydrogens as such の処理は何を施しているのでしょうか。

お礼日時:2010/01/28 02:55

すみません, 当然わかると思いますがヒドロキシルアミンは SMILES式だと NO ですね.

    • good
    • 0

とりあえず突っ込むだけだとアレなので本題もちょっと考えてみる (苦笑).


もとの SMILES式だけから調べようとすると, 「どのような構造が欲しいのか」をちゃんと考えないといけないし, 調べかたもその構造に依存するような感じがします.
例えばヒドロキシ基 1つをとっても, 「何がヒドロキシ基なのか」は意外と難しかったりします. 例えば NNO (ヒドロキシルアミン) の OH がヒドロキシ基か? って言われると微妙だし, ClO (次亜塩素酸) だともっと困る.
まあヒドロキシ基は単純なので, 「構造が正しいかどうかは無視」「アルコールかフェノールかは気にしない」「互変異性は違うものとみなす」などいくつかの条件を付ければそれなりにできそうです.
まず, 潜在的なヒドロキシ基に含まれる酸素を見付けます. これは「先頭の O で O(...)なんか という形でないもの」か「最後の O」か「O)」です.
ここからその酸素につながる元素, さらにそこに隣接する元素を調べてチェックすれば多分 OK. 本質的にはアミンも同じことになります. アミドもできるといえばできるけどちょっと面倒な感じ. そろそろ「SMILES式からきちんと構造を作りあげる」必要がありそうです.
ちなみに OpenBabel GUI で遊んでみた感じでは蟻酸がちょっといやなことになったような.
    • good
    • 0

> Add hydrogens (make explicit) と


> Output explicit hydrogens as such の処理は何を施しているのでしょうか。

#2さんの仰るとおり、見たまま字のままだと思います。よく分からなかったら、

CO
[CH3]O
C[OH]
[CH3][OH]

を入力データにして、チェックを入れたり外したりしたときに出力がどうなるかを試してみて下さい。

> アミドやアミンの場合はどのような文字列で表示されるのでしょうか。

結合の手が1本しかない1級アミド C(=O)[NH2] や1級アミン [NH2](ただし1級アミドも含まれる)を文字列で表すのは簡単です。しかし、結合の手が2本,3本になると、Perlなどの正規表現を使ったとしても、ひとつの文字列で表すのは無理なんじゃないかなと思います(少なくとも私には無理です、ごめんなさい)。

Daylightのページにあるように、SMARTS を使えば
アミドは [NX3][CX3](=[OX1])[#6]
アミン(一級または二級,アミドを含まない)は [NX3;H2,H1;!$(NC=O)]
のように簡単に表すことができるのですが。
http://www.daylight.com/dayhtml_tutorials/langua …

つきなみなアドバイスで申し訳ありませんが、ひとつの文字列で表すのにこだわらずに、SMARTSでやるところ、正規表現でやるところ、プログラムを組んでやるところ、手作業でやるところに適当に分けて、問題に取り組んだらいいんじゃないでしょうか。
    • good
    • 0

Add hydrogens (make explicit) とか


Output explicit hydrogens as such とかを日本語に直せば分かるのでは? あるいは, 入力と出力を比較しても分かるはず.
アミドやアミンは例の中にありますね.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!