Thank you for the extremely detailed answer, that is exactly what I was looking for!
Best, Ignacio On Thu, Oct 3, 2019 at 2:33 PM Andrew Dalke <da...@dalkescientific.com> wrote: > Hi Ignacio, > > The xyz parser is in openbabel/src/formats/xyzformat.cpp . > > The code you are looking for is called on lines 276 and 278, see > https://github.com/openbabel/openbabel/blob/master/src/formats/xyzformat.cpp#L276 > > if (!pConv->IsOption("b",OBConversion::INOPTIONS)) > mol.ConnectTheDots(); > if (!pConv->IsOption("s",OBConversion::INOPTIONS) && > !pConv->IsOption("b",OBConversion::INOPTIONS)) > mol.PerceiveBondOrders(); > > ConnectTheDots() is in src/mol.cpp starting at line 2937. > https://github.com/openbabel/openbabel/blob/master/src/mol.cpp#L2937 > > This method adds single bonds between all atoms > closer than their combined atomic covalent radii, > then "cleans up" making sure bonded atoms are not > closer than 0.4A and the atom does not exceed its valence. > It implements blue-obelisk:rebondFrom3DCoordinates. > > PerceiveBondOrders() starts on line 3139 of the same file > https://github.com/openbabel/openbabel/blob/master/src/mol.cpp#L3139 > > This method uses bond angles and geometries from current > connectivity to guess atom types and then filling empty valences > with multiple bonds. It currently has a pass to detect some > frequent functional groups. It still needs a pass to detect aromatic > rings to "clean up." > AssignSpinMultiplicity(true) is called at the end of the function. The > true > states that there are no implict hydrogens in the molecule. > > Cheers, > > Andrew > da...@dalkescientific.com > > > > On Oct 3, 2019, at 18:43, Ignacio Pickering <ign.picker...@gmail.com> > wrote: > > > > I found that OpenBabel can convert .xyz files to SMILES strings, which > means that it must be using some sort of heuristic to determine the > connectivity of a molecule based on distances and nuclear charges. > > > > I've been trying to find references to the specific algorithm > implemented but I couldn't find anything, and I haven't been able to find > the code that does this conversion in github (probably because I'm not too > familiar with the repo, It should be there somewhere right?). > > > > I was wondering if someone could point me in the right direction > regarding this, since its a very useful feature I would like to use, and I > would like to be more familiar with its inner workings to check how > reliable/robust it is, and what approximations its making. > > > > Best, > > > > Ignacio > > _______________________________________________ > > OpenBabel-discuss mailing list > > OpenBabel-discuss@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/openbabel-discuss > > > >
_______________________________________________ OpenBabel-discuss mailing list OpenBabel-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbabel-discuss