Wolfram言語

外部サービス

2つの光学異性体を比べる

化合物はそれを特徴付ける特性を持っており,少しでもそれを変えると,別の特性が現れる.Wolfram言語を使うと, PubChemデータにアクセスし,これらの特徴を調べることができる.

PubChemのAPIに接続する.

In[1]:=
Click for copyable input
pubchem = ServiceConnect["PubChem"]
Out[1]=

ヴィックスの吸入薬とメタンフェタミンという2つの薬物を例に取る.これらはどちらもよく知られる薬物で驚くほどよく似ている.

In[2]:=
Click for copyable input
compounds = pubchem["CompoundProperties", "Name" -> {"Vicks Inhaler", "Meth"}, "Property" -> {"MolecularFormula", "IUPACName"}]
Out[2]=

それぞれの3D構造を取り出し比べる.

In[3]:=
Click for copyable input
{vicksid, methid} = Normal[compounds[All, "CompoundID"]]; Row[{pubchem["CompoundSDF", "CompoundID" -> vicksid]["Graphics3D", 1], pubchem["CompoundSDF", "CompoundID" -> methid]["Graphics3D", 1]}]
Out[3]=

2つは同じように見えるが,それぞれの結合構造をプロットすることによって,実はこの2つは光学異性体であり,互いの鏡像であることが分かる.

完全なWolfram言語入力を表示する
In[4]:=
Click for copyable input
{edgerule1, edgetype1, vertextype1} = Flatten[Values[ Normal[pubchem["CompoundSDF", "CompoundID" -> vicksid][{"EdgeRules", "EdgeTypes", "VertexTypes"}]]], 1]; vertexcoord1 = Thread[Rule[Range[1, Length[#]], #]] &@ Flatten[Normal[ pubchem["CompoundSDF", "CompoundID" -> vicksid][ "VertexCoordinates"]], 1]; {edgerule2, edgetype2, vertextype2} = Flatten[Values[ Normal[pubchem["CompoundSDF", "CompoundID" -> methid][{"EdgeRules", "EdgeTypes", "VertexTypes"}]]], 1]; vertexcoord2 = Thread[Rule[Range[1, Length[#]], #]] &@ Flatten[Normal[ pubchem["CompoundSDF", "CompoundID" -> methid][ "VertexCoordinates"]], 1]; normal[{x_, y_}] := 2.5*{-y, x}/Norm[{x, y}]; (Block[{name = #name, edgerule = #edgerules, vertextype = #vertextype, vertexcoord = #vertexcoord, edgetype = #edgetype}, name -> GraphPlot[edgerule, VertexRenderingFunction -> (Text[ Style[vertextype[[#2]], Bold], #1, Background -> White] &), VertexCoordinateRules -> vertexcoord, EdgeRenderingFunction -> (Switch[ Extract[edgetype, Position[ edgerule, (Rule @@ #) &@#2]], {"Single"}, {Purple, Line[#1]}, {"Double"}, norm = normal[First[#1] - Last[#1]]; {Orange, Thickness[0.005], Line[{First[#1] + norm, Last[#1] + norm}], Line[{First[#1] - norm, Last[#1] - norm}]}] &), ImageSize -> 200]] & /@ {<|"name" -> "Vicks Inhaler", "edgerules" -> edgerule1, "edgetype" -> edgetype1, "vertextype" -> vertextype1, "vertexcoord" -> vertexcoord1|>, <| "name" -> "Methamphetamine", "edgerules" -> edgerule2, "edgetype" -> edgetype2, "vertextype" -> vertextype2, "vertexcoord" -> vertexcoord2|>}) // Dataset
Out[4]=

関連する例

de en es fr ko pt-br ru zh