Приготовление аспирина
Аспирин является одним из наиболее часто используемых препаратов для лечения боли, повышенной температуры тела, и воспалительных процессов. Он может быть синтезирован путем объединения эквимолярных количеств салициловой кислоты и уксусного ангидрида. В данном случае химические данные из базы знаний Wolfram используются совместно с информацией о количествах и группах веществ, необходимых для изучения процесса приготовления аспирина.
Рассмотрим типичный лабораторный вариант 100-миллимолярного приготовления аспирина. Для этого воспользуемся функцией EntityGroup.

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

Рассчитаем общую массу партии аспирина.

mass = reactants["AbsoluteMass"]

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

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

Аспирин образуется в результате стехиометрической реакции. Теоретически это дает 100 миллимолей аспирина, тогда как на практике будет получено около 90% от данноого количества.

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

Подсчитаем количество атомов, составляющих молекулу аспирина.

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

Используем данную информацию о числе атомов для следующего выражения:

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


atomicmass = atomAssemble["AtomicMass"]

Как и следовало ожидать, общая атомная масса равна массе молекулы аспирина.

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


Equal @@ QuantityMagnitude /@ {atomicmass, molarmass}

Тем не менее, существуют и другие возможные изотопные комбинации, каждая из которых имеет несколько иную общую массу, чем совокупная масса отдельно взятых атомов.

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

Данная группа элементов включает только стандартные изотопы (так называемые "основные ионы").

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

Вероятность существования молекулы с такой композицией составляет менее 90%. Тем не менее, в спектре молекулярных масс, такие молекулы наиболее заметны и представляют собой так называемый "молекулярный пик".

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