The Dot in a SMILES: Writing Salts, Counterions, and Mixtures Correctly
Writing a SMILES for a salt with the dot: charge placement, stoichiometry by repeating fragments, hydrates, and canonical ordering for dedup.
Your compound is an HCl salt, and you need its SMILES for the inventory or a property calculation. You write the free base, tack a chlorine on the end, and the parser either rejects it or — worse — accepts something that isn’t your salt at all. The fix is the dot. Writing a SMILES for a salt with a dot-disconnected counterion is straightforward once you know what the dot does and the four places it trips people up: charge placement, stoichiometry, hydrates, and how the fragments get ordered. Here is the working chemist’s version.
Step 1 — What the dot in a SMILES actually means
The period in a SMILES means “no bond between these adjacent atoms.” It separates a string into independent components. Sodium phenoxide is [Na+].[O-]c1ccccc1 — sodium as one fragment, phenoxide as another, with no bond joining them. Three rules follow from the definition, and they’re the source of most confusion: the order of the fragments is arbitrary, there is no implied pairing of one charge to another, and the overall string is not required to be charge-neutral. The dot just says “these pieces aren’t connected” — it doesn’t encode salt stoichiometry or pairing for you.
Step 2 — Choose the ionized form or the neutral-component form
An amine hydrochloride can be written two defensible ways, and they mean different things. The ionized form shows the proton transfer explicitly: ethylamine hydrochloride as CC[NH3+].[Cl-] — a protonated ammonium and a chloride. The neutral-component form lists the free base and HCl as separate neutral pieces: CCN.Cl. Both are valid SMILES; many databases (PubChem among them) store the neutral-component form, while modeling pipelines often prefer the ionized form because it reflects the species in solution.
Pick one convention and apply it consistently. The mistake is mixing them — writing a charged ammonium next to a neutral Cl (an HCl molecule), which leaves the string non-neutral and ambiguous about what you meant.
[NH3+] pairs with one [Cl-]. The format won’t enforce it — a SMILES can carry a net charge — so balancing is on you.Step 3 — Get the stoichiometry right by repeating fragments
SMILES has no coefficient syntax. You cannot write “2” in front of a fragment to mean two of it — you repeat the fragment with another dot. This is where salt ratios go wrong most often.
- Dihydrochloride (1 base : 2 HCl): repeat the chloride —
Cl.Cl.plus the base, e.g. a diamine bis-hydrochloride as[Cl-].[Cl-].[NH3+]CCCC[NH3+]. - Disodium salt of a diacid: two sodiums —
[Na+].[Na+].[O-]C(=O)CC(=O)[O-]for disodium malonate. - Hemisulfate (2 base : 1 sulfate): write two base fragments and one sulfate. There’s no way to express “half a sulfate” per base — the ratio only emerges from the full multi-component string.
If the fragment count doesn’t match the named salt ratio, the SMILES describes a different compound than your label. A “dihydrochloride” with one chloride is a monohydrochloride string.
Step 4 — Handle hydrates and solvates
Crystal water is just another disconnected fragment: each water is an O component. A monohydrate is .O appended; a dihydrate, .O.O. The same goes for solvates — a hemi-ethanolate would carry an ethanol fragment. Be aware that many cheminformatics workflows deliberately strip water and small solvents during standardization, so a hydrate you carefully encoded may be normalized away downstream. Encode it when the hydrate is part of the identity you’re tracking; expect it to be stripped when you hand the structure to a property calculator.
Step 5 — Canonicalize before you store or deduplicate
Because fragment order is arbitrary, [Na+].[O-]c1ccccc1 and [O-]c1ccccc1.[Na+] are the same compound written two ways. If you store raw SMILES and compare them literally, identical salts look like different rows. Run the strings through a canonicalizer first — canonicalization fixes a single fragment order so the same salt always yields the same string. The independence of the “canonical” and “isomeric” settings matters here too; our note on why canonical and isomeric SMILES aren’t opposites covers which flags to set so a stereo-bearing salt dedups correctly.
Step 6 — Strip to the parent for property prediction
When you want drug-likeness or physicochemical properties, the counterion usually shouldn’t be in the calculation. Lipinski properties of an amine describe the amine, not the chloride riding along. Standard practice is to take the largest organic fragment — the parent — and compute on that. Keep the full salt string for inventory and identity; use the stripped parent for properties.
Letting the tool keep the counterion honest
Paste a dot-containing SMILES into our SMILES-to-structure tool and it shows the component count prominently, names the likely counterion, and keeps every fragment by default — stripping a salt is opt-in and reversible, never a silent drop. That matters because an accidental counterion loss changes the compound’s identity without any error message. To go from the pasted string to an editable structure you can hand off, our walkthrough of turning a SMILES string into an editable molecule covers the round-trip.
The dot is one of the simplest pieces of SMILES syntax and one of the easiest to get subtly wrong. Decide ionized-or-neutral once, count your fragments against the named ratio, treat water as its own fragment, and canonicalize before you store. The Daylight SMILES disconnections tutorial and the OpenSMILES specification document the dot’s exact semantics if you want the primary source.