Язык Wolfram Language

Внешние услуги

Сравнение двух энантиомеров

Химические элементы имеют определяющие характеристики; даже самые малые изменения в их составе могут значительно влиять на их качества. Используя язык Wolfram Language, Вы можете получить доступ к данным PubChem и изучить характеристики химических элементов.

Установить связь с PubChem API.

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

Сравнить ингалятор Vicks и метамфетамин, два общеизвестных вещества, которые на удивление схожи.

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]=

Хотя они и выглядят одинаково, можно доказать, что они действительно энантиомеры, если графически изобразить структуру их соединений, что позволяет увидеть, что один элемент является зеркальным отображением другого.

код на языке Wolfram Language целиком
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 ja ko pt-br zh