有機分子記述法開発 05
前回の続き、さらに欲しい機能を書いていきます。
巻き矢印を記述できる
前回、反応系を一括で書けたら嬉しいという話をしていました。それだけでも十分嬉しいのですが、
やはり有機化学をやるなら、電子移動を表す巻き矢印はぜひとも欲しいはずです。
幸いなことに、<atoms>では、各原子の属性を割り当てられるため、孤立電子対を記述することは結構簡単だろうと思います。
記述は次のような感じがいいと思います。
<mol id="reactant">
<atoms>
1:O[:]
</atoms>
巻き矢印の場合、(a)原子から原子のパターン、(b)結合から原子のパターン、(c)結合から結合のパターンが考えられます。次のような感じですね。
fig.1 電子移動のパターン
これを表現するためには、次のような感じでいいんじゃないかと思います。fig.1をコードにするとこんなイメージです。
<mol id="reactant">
<atoms>
1:C
2:C
3:C
4:C
4,1:H
4,2:H
5:C
5,1:H
5,2:H
6:Br
</atoms>
<bond>
1-2-3>4[For]-5-6
4-4,1
4<4,2[Back]
5<5,1[For]
5<5,2[back]
</bond>
</mol>
<mol id="nu">
<atoms>
1:C_{2}H_{5}
2:O[-,:]
</atoms>
<bond>
1-2[nonbond,1:end]
</bond>
<mol>
<electrontransfer>
#nu/atoms/2[:]>#reactant/atoms/4,1 <!--(a)に相当-->
#reactant/bond/4-4,1>bond/4-5 <!--(b)に相当-->
#reactant/bond/5-6>/atoms/6 <!--(c)に相当-->
</electrontransfer>
<electrontransfer>の部分に、どこからどこに向かっていくのか書いていくイメージですね。
<reaction>と分離させることで、<reaction>にある分子との電子移動についても記述可能となります。
<bond>において、「1-2[nonbond,1:end]」と書いてありますが、「nonband」は、結合自体はしてるけど、
その結合は描画しなくていいよという意味です。
また、「1:end」の部分は、後ろからくっつけるようにしろという意味です。普通、先頭原子同士を結合させるので、
何も指定しないとOC2H5となってしまいます。今回のようなパターンや、チオシアネート/チオイソシアネート
の区別みたいなパターンを想定しています。
「half」みたいな属性を作っておけば、ラジカル反応などで出てくる1電子移動なんかも表現できると思います。
巻き矢印の記述は、私にとってはかなりの悲願となります。これが書けるようになると、劇的に反応の理解が進むためです。 実装はかなり大変だと思いますが、ぜひともやりたいと思います。
今後について、早速実装に取り掛かりたいのはやまやまなのですが、この先の更新はかなり遅くなると思います。
理由はいくつかありますが、脆弱性対策という部分が一番大きいです。少しだけ説明します。
これまでの記事で、Image langとして仮想的に使っていた言語は、もちろんまだ現実世界にはありません。そのため、 今後は、これを解読して図形に起こす変換スクリプトを書いていくことになります。
ここで使うのがJavaScriptですが、ここでは、HTMLファイルの、記述されたコード部分を読み込んで、自動的に
新たなHTMLを生成するという機能を使います。このとき、読み込むHTMLファイルに悪意ある改造が施されてしまうと、それをもとにして攻撃が
できてしまうという問題が起きます。そのため、開発途中のファイルを安易に公開すると悪用される恐れがあります。
よって、これから先はソースコード公開はしばらく避け、できた機能の紹介をメインにしていきます。そのため、更新は遅くなると思います。
もともとここまで一気に記事を書いてきたのは、アイデアはあったがサイトの書き方を知らず、それがボトルネックになっていたから というのもあります。しばらく間は空くと思いますが、他の記事なんかも適宜更新しようと思いますので、気長にお待ちください。
前回:有機分子記述法開発 04