‹›Services externes Comparez deux énantiomères
Les composants chimiques ont des caractéristiques qui les définissent ; même le plus petit changement permet d'obtenir des propriétés différentes. Avec Wolfram Language, vous pouvez accéder aux données PubChem et explorer ces caractéristiques.
Premièrement, connectez-vous à l'API de PubChem.
pubchem = ServiceConnect["PubChem"]
Comparez l'inhalateur Vicks et la méthamphétamine, deux substances qui sont généralement connues et étonnamment liées.
compounds =
pubchem["CompoundProperties", "Name" -> {"Vicks Inhaler", "Meth"},
"Property" -> {"MolecularFormula", "IUPACName"}]
Récupérez et comparez leur structure 3D.
{vicksid, methid} = Normal[compounds[All, "CompoundID"]];
Row[{pubchem["CompoundSDF", "CompoundID" -> vicksid]["Graphics3D", 1],
pubchem["CompoundSDF", "CompoundID" -> methid]["Graphics3D", 1]}]
Bien qu'ils se ressemblent, vous pouvez corroborer qu'il s'agit bien d'énantiomères en traçant leur structure de liaison et en constatant que l'un est l'image miroir de l'autre.
Afficher l'entrée complète de Wolfram Language
{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