From: Geoffrey H. <ge...@ge...> - 2007-09-11 15:14:54
|
On Sep 11, 2007, at 9:25 AM, Noel O'Boyle wrote: >> [Amide / rotatable bond] >> >>> Regarding "Is amide bond considered as a rotatable bond?". Uh...this >>> requires looking at the code, which says: ... >> http://www.daylight.com/dayhtml_tutorials/languages/smarts/ >> smarts_examples.html#ROTATE >> >> Rotatable bond [!$(*#*)&!D1]-!@[!$(*#*)&!D1] >> "An atom which is not triply bonded and not one-connected >> i.e.terminal >> connected by a single non-ring bond to and equivalent atom." One "catch" about rotatable bonds in Open Babel is that there's essentially two methods for determining the number of rotatable bonds. What you describe is something like the "descriptor" method. In this case, the documentation clearly states what is a rotatable bond: (No need to read the code) http://openbabel.SourceForge.net/api/2.1.0/ > Currently, this function classifies any bond with at least one > heavy atom, no sp-hybrid atoms (e.g., a triple bond somewhere) not > in a ring as a potential rotor. No other bond typing is attempted. > Now I don't know if the Open Babel definition matches "standard QSAR practice." If not, let's add a new function. But the reason OBMol::NumRotors() and OBBond::IsRotor() overestimate whether a bond is rotatable is for rotamer/conformer searching (i.e., using OBRotamerList, OBRotorList, and OBRotorRules). These classes can define a set of SMARTS patterns and likely dihedral angles. It's better to consider an amide as a bond to attempt to rotate, than to miss out on low-energy conformers. Yes, this means that OBMol::NumRotors() serves double duty. If there needs to be a new "descriptor" version which returns the expected answer, that sounds like a good idea. But I'd also like to see the OBRotorRules database enhanced with some potential conformer searching rules too. This can be used to get a number of rotatable bonds too: OBRotorList rl; rl.Setup(mol); cerr << " Number of rotors: " << rl.Size() << endl; Cheers, -Geoff |