orthonym.rules.tricyclo#

Note

Internal API. Names and behaviour may change between releases.

Tricyclo compound naming according to IUPAC 2013 nomenclature.

Implements tricyclo[x.y.z.a^b,c] descriptor generation for bridged tricyclic hydrocarbons.

IUPAC Reference: Blue Book 2013, (Tricyclic bridged ring systems)

The tricyclo descriptor format is: - tricyclo[a.b.c.d^e,f]alkane

where: - a, b are the two branches of the main ring (atoms between main bridgeheads) - c is the main bridge (first additional bridge) - d^e,f describes the secondary bridge: d atoms, connecting positions e and f

Examples: - Adamantane: tricyclo[3.3.1.1^3,7]decane

  • Main ring: 6 atoms, split 3.3

  • Main bridge: 1 atom

  • Secondary bridge: 1 atom connecting positions 3 and 7

Numbering rules: 1. Start at one main bridgehead (position 1) 2. Number along the longer branch of main ring 3. Continue to second bridgehead 4. Number back along shorter branch 5. Number main bridge 6. Number secondary bridges (from higher-numbered bridgehead)

orthonym.rules.tricyclo.is_tricyclo_system(mol)#

Check if molecule is a tricyclo (3-ring bridged) system.

Parameters:

mol – RDKit Mol object

Returns:

True if molecule has exactly 3 rings

Return type:

bool

orthonym.rules.tricyclo.generate_tricyclo_descriptor(mol)#

Generate the tricyclo[a.b.c.d^e,f] descriptor for a molecule.

Parameters:

mol – RDKit Mol object

Returns:

Descriptor string like “tricyclo[3.3.1.1^3,7]”, or None

Return type:

str | None

Examples

>>> mol = Chem.MolFromSmiles('C1C2CC3CC1CC(C2)C3') # adamantane
>>> generate_tricyclo_descriptor(mol)
'tricyclo[3.3.1.1^3,7]'
orthonym.rules.tricyclo.get_tricyclo_numbering(mol)#

Generate IUPAC numbering for a tricyclo system.

Numbering rules: 1. Start at one main bridgehead (position 1) 2. Number along longer branch of main ring to other bridgehead 3. Number back along shorter branch toward position 1 4. Number main bridge atoms 5. Number secondary bridge atoms

Parameters:

mol – RDKit Mol object

Returns:

Dict mapping atom_idx -> IUPAC locant (1-indexed), or None

Return type:

Dict[int, int] | None

orthonym.rules.tricyclo.name_tricyclo_system(mol)#

Generate the full IUPAC name for a tricyclo system.

Parameters:

mol – RDKit Mol object

Returns:

Full IUPAC name like “tricyclo[3.3.1.1^3,7]decane”, or None

Return type:

str | None

Examples

>>> mol = Chem.MolFromSmiles('C1C2CC3CC1CC(C2)C3') # adamantane
>>> name_tricyclo_system(mol)
'tricyclo[3.3.1.1^3,7]decane'
orthonym.rules.tricyclo.get_retained_tricyclo_name(canonical_smiles)#

Look up retained name for a tricyclo compound.

Parameters:

canonical_smiles (str) – Canonical SMILES string

Returns:

Retained name if found, None otherwise

Return type:

str | None

orthonym.rules.tricyclo.is_retained_tricyclo(canonical_smiles)#

Check if a SMILES has a retained tricyclo name.

orthonym.rules.tricyclo.generate_polycyclo_descriptor(mol)#

Generate descriptor for any bridged polycyclic system.

Handles bicyclo, tricyclo, tetracyclo, etc.

Parameters:

mol – RDKit Mol object

Returns:

Descriptor string or None

Return type:

str | None

orthonym.rules.tricyclo.name_polycyclo_system(mol)#

Generate IUPAC name for any bridged polycyclic system.

Routes to appropriate naming function based on ring count.

Parameters:

mol – RDKit Mol object

Returns:

IUPAC name or None

Return type:

str | None

orthonym.rules.tricyclo.name_polycyclo_with_functional_groups(mol)#

Name a polycyclic system that also has functional groups.

This handles cases like the diterpenoid where we have: - Hexacyclo ring system - Multiple ester groups - Lactone ring

Parameters:

mol – RDKit Mol object

Returns:

IUPAC name combining polycyclic parent with functional group suffixes

Return type:

str | None