I’ve written a program that does this: https://github.com/jensengroup/xyz2mol
You need to set "charged_fragments = False” to work with radicals Best regards, Jan On 15 Nov 2018, at 15:05, Peter St. John <peterc.stj...@gmail.com<mailto:peterc.stj...@gmail.com>> 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_problem_mol.py>_______________________________________________ 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