How every name is checked#
A name that reads well can still describe the wrong molecule. Orthonym does not trust its own name: before a name leaves the engine, the name is checked against your structure, and a candidate that fails is withdrawn.
The round trip#
You give a structure. RDKit reads the SMILES.
Orthonym writes a name from the rules of the IUPAC 2013 recommendations.
OPSIN reads the name back into a structure. OPSIN is an independent program that turns names into structures; it never saw your SMILES.
The two structures are compared by InChIKey, a short code computed from a structure that changes with its constitution, charge and stereochemistry.
When they match, the name ships. Here is caffeine, from the engine’s own output:
Cn1cnc2c1c(=O)n(C)c(=O)n2CCN1C(N(C=2N=CN(C2C1=O)C)C)=ORYYVLZVUVIJVGH-UHFFFAOYSA-NSame moleculeThe three checks#
1. Every atom is named. Every heavy atom of your structure must be claimed by exactly one part of the name, and every part must appear in the final name. This check decides for the names of the general engine (the valid, complete and best-effort tiers). On the strict path of the default tier it is recorded but does not decide; the OPSIN checks below do.
2. OPSIN must be able to read the name. At the valid, complete and best-effort tiers, a name OPSIN cannot read is not emitted.
3. What OPSIN read must be your molecule. At the valid, complete and best-effort tiers the full InChIKey must match: constitution, charge and stereochemistry. A name with a missing or wrong stereodescriptor is therefore not emitted there. At the default tier the check accepts the same full InChIKey, or the same constitution, charge and protonation state with no stereodescriptor that disagrees with your structure.
A candidate that fails is withdrawn, and the engine tries the next way of naming the molecule. When none passes, it declines and says why (Declines).
The one stereo repair#
When a name read back with the right constitution but without some of its stereodescriptors, the engine adds the missing descriptors from your structure once and has OPSIN read the new name. The name ships only if the full InChIKey then matches. The provenance row shows it as gate_outcome stereo_omission_full_key_recomposed.
Where OPSIN cannot read the name#
Some correct names use words OPSIN does not know. Two kinds of name leave the engine without a full read-back, and the provenance row says so every time:
Names from exact-match lists. Metal tetrapyrrole complexes (hemes, chlorophylls, cobalamins, siroheme, coenzyme F430) and a table of retained natural-product parent names are matched to your structure exactly, by InChIKey or canonical SMILES, and the listed name is given. OPSIN cannot read these names at all. A list name is returned at every tier. It shows
verifiedidentityand the tier of the path that returned it: the natural-product parent names, and at the default tier the metal-complex names, arepin_verified. A natural-product parent name showsgate_outcomecarveout:np_stereoparent.A few name classes at the default tier. Some preferred-name forms (inositols, phanes and some anhydrides among them) are built by their rules and shipped at the default tier although OPSIN cannot read them, or reads only their constitution. The row shows
gate_outcomecarveout:<class>orself_consistency_constitution_only, and the tier is lowered accordingly. At thevalid,completeandbest-efforttiers these names are declined instead.
If OPSIN itself does not answer (the Java runtime times out or stops), the candidate is withdrawn and the row shows gate_outcome suppressed. A name ships with gate_outcome unavailable only in the opt-in reduced mode without the jars (ORTHONYM_ALLOW_REDUCED=1, Install).
See it for yourself#
--provenance prints what happened to every name. The provenance row explains each field, and the web app draws the read-back structure next to yours (In the browser).