Hi Peter,

a few weeks ago I wrote something very close to what you describe:

https://gist.github.com/ptosco/4844d3635cf14d11e5e14381993915c1

which takes coordinates from a XYZ block (which is what you get from Gaussian) and assigns them to an RDKit molecule generated from a SMILES string. I haven't tested it with a radical, but it should work.

Feel free to write to my personal e-mail if you need help.

Cheers,
p.


On 11/15/18 14:05, Peter St. John wrote:
Makes sense, apologies for the lack of details -- it was a bit of a convoluted process to get to that molecule.
Attached is a python script that hopefully reproduces it.

Essentially I'm taking the result of a Gaussian optimization (for a radical); constructing an SDF file with OpenBabel (via cclib), and then trying to read the result in RDKit. I have the SMILES string of the radical, but the connectivity is lost in the gaussian output file. So the SDF that gets created by OpenBabel has to assume bond orders based on distances that it sometimes gets wrong. I also had to edit the AssignBondOrdersFromTemplate function in AllChem to handle the radical atoms.

If you had another recommendation on going from a gaussian output file to an RDKit mol though, I'd certainly like to hear it.

Thanks!
-- Peter

On Wed, Nov 14, 2018 at 10:53 PM Greg Landrum <greg.land...@gmail.com <mailto:greg.land...@gmail.com>> wrote:

    Hi Peter,

    Without seeing how you're building the molecule this one is a bit
    tricky to help with.

    If I start with a standard molecule and just adjust the valence
    count things are fine:

        In [22]: m = Chem.MolFromSmiles('CNC(C)C')

        In [23]: m.GetAtomWithIdx(0).SetNumRadicalElectrons(1)

        In [24]: mh = Chem.AddHs(m)

        In [25]: print(Chem.MolToMolBlock(mh))

             RDKit          2D

         16 15  0  0  0  0  0  0  0  0999 V2000
            0.0000    0.0000    0.0000 C   0  0  0  0  0 4  0  0  0 
        0  0  0
            1.5000   -0.0000    0.0000 N   0  0  0  0  0 0  0  0  0 
        0  0  0
            2.2500   -1.2990    0.0000 C   0  0  0  0  0 0  0  0  0 
        0  0  0
            0.9510   -2.0490    0.0000 C   0  0  0  0  0 0  0  0  0 
        0  0  0
            3.5490   -0.5490    0.0000 C   0  0  0  0  0 0  0  0  0 
        0  0  0
           -1.5000    0.0000    0.0000 H   0  0  0  0  0 0  0  0  0 
        0  0  0
            0.0000    1.5000    0.0000 H   0  0  0  0  0 0  0  0  0 
        0  0  0
           -0.0972   -0.7912    0.0000 H   0  0  0  0  0 0  0  0  0 
        0  0  0
            2.0861    1.3808    0.0000 H   0  0  0  0  0 0  0  0  0 
        0  0  0
            3.0000   -2.5981    0.0000 H   0  0  0  0  0 0  0  0  0 
        0  0  0
           -0.3481   -2.7990    0.0000 H   0  0  0  0  0 0  0  0  0 
        0  0  0
            0.3314   -1.5474    0.0000 H   0  0  0  0  0 0  0  0  0 
        0  0  0
            1.7010   -3.3481    0.0000 H   0  0  0  0  0 0  0  0  0 
        0  0  0
            4.8481    0.2010    0.0000 H   0  0  0  0  0 0  0  0  0 
        0  0  0
            4.2990   -1.8481    0.0000 H   0  0  0  0  0 0  0  0  0 
        0  0  0
            2.9630    0.8317    0.0000 H   0  0  0  0  0 0  0  0  0 
        0  0  0
          1  2  1  0
          2  3  1  0
          3  4  1  0
          3  5  1  0
          1  6  1  0
          1  7  1  0
          1  8  1  0
          2  9  1  0
          3 10  1  0
          4 11  1  0
          4 12  1  0
          4 13  1  0
          5 14  1  0
          5 15  1  0
          5 16  1  0
        M  RAD  1   1   2
        M  END


        In [26]: Chem.SanitizeMol(mh)
        Out[26]: rdkit.Chem.rdmolops.SanitizeFlags.SANITIZE_NONE

        In [27]: Chem.SanitizeMol(m)
        Out[27]: rdkit.Chem.rdmolops.SanitizeFlags.SANITIZE_NONE


    How are you constructing the molecule with the radical?

    Best,
    -greg


    On Wed, Nov 14, 2018 at 7:36 PM Peter St. John
    <peterc.stj...@gmail.com <mailto:peterc.stj...@gmail.com>> wrote:

        I have a molecule with radicals for which I'm trying to
        correct the bond orders.
        The mol block I have currently is shown below.

        Ultimately it thinks the first carbon (which is supposed to
        have 2 explicit hydrogens, 1 C-C bond, and 1 radical electron)
        has a valence of 5. So when I try to call `SanitizeMol`, it
        errors out with too high a valence.

        for the problematic atom 'a',

        >>> a.GetNumImplicitHs()

        RuntimeError: Pre-condition Violation
                getNumImplicitHs() called without preceding call to 
calcImplicitValence()

        >>> a.GetTotalValence()

        3 (odd, since this is what I want)

        >>> a.UpdatePropertyCache()

        ValueError: Sanitization error: Explicit valence for atom # 0 C, 5, is 
greater than permitted

        And when I print the mol block, it clearly thinks that first carbon as 
a valence of 5.

        Any suggestions how to fix this?

        >>> print(Chem.MolToMolBlock(mol))

        9572
              RDKit          3D

          15 14  0  0  0  0  0  0  0  0999 V2000
             2.0411   -0.0455   -0.1061 C   0  0  0  0  0*5*   0  0  0  0  0  0
             0.8127   -0.5644    0.2519 N   0  0  0  0  0  0  0  0  0  0  0  0
            -0.3953    0.0049   -0.3294 C   0  0  0  0  0  0  0  0  0  0  0  0
            -0.6511    1.4326    0.1487 C   0  0  0  0  0  0  0  0  0  0  0  0
            -1.5741   -0.9060   -0.0263 C   0  0  0  0  0  0  0  0  0  0  0  0
             2.1578    0.2387   -1.1430 H   0  0  0  0  0  0  0  0  0  0  0  0
             2.9032   -0.4021    0.4366 H   0  0  0  0  0  0  0  0  0  0  0  0
             0.7154   -0.7889    1.2330 H   0  0  0  0  0  0  0  0  0  0  0  0
            -0.2282    0.0219   -1.4109 H   0  0  0  0  0  0  0  0  0  0  0  0
            -0.8463    1.4378    1.2242 H   0  0  0  0  0  0  0  0  0  0  0  0
             0.2197    2.0597   -0.0426 H   0  0  0  0  0  0  0  0  0  0  0  0
            -1.5161    1.8651   -0.3565 H   0  0  0  0  0  0  0  0  0  0  0  0
            -1.7375   -0.9640    1.0535 H   0  0  0  0  0  0  0  0  0  0  0  0
            -1.3932   -1.9131   -0.4005 H   0  0  0  0  0  0  0  0  0  0  0  0
            -2.4874   -0.5194   -0.4787 H   0  0  0  0  0  0  0  0  0  0  0  0
           1  2  1  0
           1  7  1  0
           2  8  1  0
           3  5  1  0
           3  4  1  0
           3  2  1  0
           4 10  1  0
           5 13  1  0
           6  1  1  0
           9  3  1  0
          11  4  1  0
          12  4  1  0
          14  5  1  0
          15  5  1  0
        M  RAD  1   1   2
        M  END

        Thanks!

        -- Peter St. John

        _______________________________________________
        Rdkit-discuss mailing list
        Rdkit-discuss@lists.sourceforge.net
        <mailto:Rdkit-discuss@lists.sourceforge.net>
        https://lists.sourceforge.net/lists/listinfo/rdkit-discuss





_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to