Skip to content

Parsing of hypervalent nitrogen compounds from SMILES/InChI is broken #1301

@mliu49

Description

@mliu49

Before #1206:

  • RMG was able to handle hypervalent N
  • RDKit could not really handle hypervalent N (it tries to sanitize and create a non-hypervalent resonance structure)
  • OpenBabel could handle hypervalent N
  • Parsing of hypervalent SMILES/InChI could be done with OpenBabel

After #1206:

  • RMG no longer has atomtypes for hypervalent nitrogen
  • Parsing of hypervalent SMILES/InChI breaks with OpenBabel; raises AtomTypeError
  • RDKit's treatment of hypervalent N is now similar to RMG's treatment, however RDKit cannot handle all cases.

Examples:

  • O=N(=O)C
    • RDKit converts this to one single bonded O and one double bonded O with charge separation
    • OpenBabel converts this to two double bonded O's (raises AtomTypeError)
  • O=N(C)=N(C)=O
    • RDKit converts this to N-O single bonds with charge separation and N=N double bond
    • OpenBabel converts this to three double bonds (raises AtomTypeError)
  • InChI=1S/C4H10N2O2/c1-3-5(7)6(8)4-2/h3-4H2,1-2H3 (InChI of the prior molecule)
    • RDKit is unable to parse
    • OpenBabel gives the same result

Note: RDKitMol conversion doesn't work properly on current master because of an issue with the order of updateCharge and updateLonePairs. This is a straightforward issue that will be fixed in #1262.

What do we do next?

  • Should we re-add atomtypes for hypervalent N?
  • Should we add a "sanitation" method similar to RDKit to convert hypervalent N to resonance structures with charge separation?
  • Should we prioritize RDKit as a backend? (Currently OpenBabel is tried first for most methods, since it was previously more robust in general.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type: Errorabandonedabandoned issue/PR as determined by actions botstalestale issue/PR as determined by actions bot

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions