3

According to many sources (e.g., this), there should be four bridgehead atoms in phenanthrene. But MoleculeValue returns an empty list.

"phenanthrene" // (Molecule /* {MoleculeValue[#, "BridgeheadAtoms"] &, MoleculePlot} /* Through /* Row)

How does Wolfram Language define a bridgehead atom?

enter image description here

Shredderroy
  • 5,249
  • 17
  • 26

1 Answers1

4

The definition used for "BridgeheadAtoms" is "atoms common to rings sharing at least two bonds".

This definition is specifically designed to include only bridged compounds and exclude fused rings. You can see this with

MoleculePlot3D[m = Molecule[#], {m["BridgeheadAtoms"]}] & /@ {"norbornane", "decalin"}

enter image description here

If you want to include fused rings you can use a SMARTS pattern to find any atom with three or four ring bonds, as suggested here:

MoleculePlot3D[m = Molecule[#], {MoleculePattern["[x{3-4}]"]}] & /@ {"norbornane", "decalin"}

enter image description here

Jason B.
  • 68,381
  • 3
  • 139
  • 286
  • That makes sense. At some point, I should just buckle down and learn to use SMARTS. – Shredderroy Apr 13 '22 at 18:16
  • 2
    I am trying to make it so you don't have to, but haven't covered everything that SMARTS can cover in WL syntax yet. So you could write the smarts "[R{3-4}] as Atom[_, "RingCount" -> (3|4)], because R stands for ring memberships. But x stands for ring connectivity - the number of ring bonds from an atom, and I now see I should enable that in WL. Eventually I want a convertor from SMARTS to WL. – Jason B. Apr 13 '22 at 18:22