아스피린의 조합
아스피린은 통증, 열, 염증에 가장 많이 사용되는 약물 중 하나입니다. 아스피린은 등몰 양의 살리실산과 무수 초산을 혼합하여 합성할 수 있습니다. 여기에서는 아스피린의 화학 조합의 탐구를 위해 Wolfram Knowledgebase의 화학 데이터와 수량 프레임워크, 엔티티 그룹, 복사, 인스턴스를 함께 사용하였습니다.
EntityGroup을 사용하여 일반적으로 실험실에서 행해지는 한 번에 100 밀리몰라 아스피린 화학 조제 모습을 나타냅니다.
In[1]:=

reactants =
EntityGroup[{EntityInstance[Entity["Chemical", "SalicylicAcid"],
Quantity[0.1, "Moles"]],
EntityInstance[Entity["Chemical", "AceticAnhydride"],
Quantity[0.1, "Moles"]]}]
Out[1]=

엔티티-특성 쿼리의 "커링" (curried) 형식을 사용하여 이 실험의 총 질량을 계산합니다.
In[2]:=

mass = reactants["AbsoluteMass"]
Out[2]=

무수 초산은 액체이기 때문에 정확히 얼마나 필요한지 알면 편리합니다.
In[3]:=

UnitConvert[
EntityInstance[Entity["Chemical", "AceticAnhydride"],
Quantity[0.1, "Moles"]]["AbsoluteVolume"], "Milliliter"]
Out[3]=

화학량적인, 즉 (이론적) 정량 반응을 가정하면 100 밀리몰라의 아스피린의 산출할 수 있어야 합니다. 그러나, 실제로 얻을 수 있는 것은 90% 정도일 것입니다.
In[4]:=

EntityInstance[Entity["Chemical", "Aspirin"],
0.9*Quantity[0.1, "Moles"]]["AbsoluteMass"]
Out[4]=

아스피린 분자의 구성 원자를 계산합니다.
In[5]:=

elem = Entity["Chemical", "Aspirin"]["ElementCounts"]
Out[5]=

적절한 수의 이러한 원자를 그룹화된 엔티티 식으로 정리합니다.
In[6]:=

atomAssemble =
EntityGroup[
MapThread[EntityCopies[#1, #2] &, {Keys[elem], Values[elem]}]]
Out[6]=

In[7]:=

atomicmass = atomAssemble["AtomicMass"]
Out[7]=

예상한 바와 같이, 이 엔티티 그룹의 전반적인 원자 질량은 분자 전체의 몰 질량과 일치합니다.
In[8]:=

molarmass =
Entity["Chemical", "Aspirin"][
EntityProperty["Chemical", "MolarMass"]]
Out[8]=

In[9]:=

Equal @@ QuantityMagnitude /@ {atomicmass, molarmass}
Out[9]=

하지만, 그 밖의 가능한 동위 원소의 조합의 각각의 총 질량은 미묘한 차이를 보입니다.
In[10]:=

stableIsotopes = #[EntityProperty["Element", "StableIsotopes"]] & /@
Keys[elem]
Out[10]=

이 그룹은 표준 동위 원소 (소위 말하는 "주 이온")만으로 구성되어 있습니다.
In[11]:=

EntityGroup[{EntityCopies[Entity["Isotope", "C12"], 9],
EntityCopies[Entity["Isotope", "H1"], 8],
EntityCopies[Entity["Isotope", "O16"], 4]}]["AtomicMass"]
Out[11]=

이러한 구성 분자가 출현할 확률은 90% 미만입니다. 그러나 질량 스펙트럼에서 이것은 가장 눈에 띄는 분자의 피크입니다.
In[12]:=

Times @@ MapThread[(QuantityMagnitude[#1[
EntityProperty["Isotope", "IsotopeAbundance"]],
"PureUnities"])^#2 &, {stableIsotopes[[All, 1]], Values[elem]}]
Out[12]=
