BTheDragonMaster / pikachu

Python-based Informatics Kit for Analysing Chemical Units
MIT License
65 stars 21 forks source link

SMILES parser fails #9

Open OBrink opened 1 year ago

OBrink commented 1 year ago

Hey there!

When reading SMILES strings using PIKAChU, @Mar-Gol ran into the following problem:

Minimal example for reproduction:


>>> smiles = 'CCOC1=CC2=C(C=C1)S(=O)C(=C2C3=CC=CC=C3)C(=O)C4=CC=CC=C4'
>>> from pikachu.general import read_smiles
>>> mol = read_smiles(smiles)

Expected behavior:

Observed behavior:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Otto Brinkhaus\anaconda3\envs\RanDepict\lib\site-packages\pikachu\general.py", line 45, in read_smiles
    structure = smiles.smiles_to_structure()
  File "C:\Users\Otto Brinkhaus\anaconda3\envs\RanDepict\lib\site-packages\pikachu\smiles\smiles.py", line 496, in smiles_to_structure
    structure.refine_structure()
  File "C:\Users\Otto Brinkhaus\anaconda3\envs\RanDepict\lib\site-packages\pikachu\chem\structure.py", line 916, in refine_structure
    self.aromatic_cycles = self.find_aromatic_cycles()
  File "C:\Users\Otto Brinkhaus\anaconda3\envs\RanDepict\lib\site-packages\pikachu\chem\structure.py", line 781, in find_aromatic_cycles
    self.promote_lone_pairs_in_aromatic_cycles(aromatic_cycles)
  File "C:\Users\Otto Brinkhaus\anaconda3\envs\RanDepict\lib\site-packages\pikachu\chem\structure.py", line 731, in promote_lone_pairs_in_aromatic_cycles
    atom.promote_lone_pair_to_p_orbital()
  File "C:\Users\Otto Brinkhaus\anaconda3\envs\RanDepict\lib\site-packages\pikachu\chem\atom.py", line 512, in promote_lone_pair_to_p_orbital
    p_orbital = p_orbitals[-1]
IndexError: list index out of range

I will build a work-around for our application for now, but I would appreciate your help a lot! Thank you in advance! Otto

BTheDragonMaster commented 1 year ago

Dear Otto,

Thank you very much for pointing this out! Unfortunately, PIKAChU has not been extensively tested with sulfur-containing aromatic rings; I will take a deep dive into the code sometime before the new year and see what is going on!

OBrink commented 1 year ago

Thanks a lot!