Apologies for the confusion - the "?" indicated I didn't know the answer, rather than didn't understand the question. I'm hoping the others can weigh in on them.
On 12 November 2010 00:21, Andrew Dalke <da...@dalkescientific.com> wrote: > On Nov 11, 2010, at 9:58 PM, Noel O'Boyle replied to Andrew Dalke: >>> Since I'm not (directly) calling WriteMolecule and since my >>> test cases don't support the --gen2D or --gen3d flags, this >>> warning isn't that helpful in a library function. >> >> This is by design (added recently). Up until recently, new users >> thought that Open Babel didn't work, and complained to the mailing >> list. I remember it confused me too when I first did a SMILES to SDF >> conversion and it came up all zeros! This way we annoy you and me but >> everyone else is happy. > > I understand the need for the warning. It's useful and appropriate. > > But in a general-purpose library, this warning is less useful > and rarely appropriate. It indicates that the library should have > some way to flag to the caller that some action should be done, > and let the caller figure out the right way to handle that. > > For example, in a GUI without a console, that message isn't > helpful. > > However, as the number of people who have a problem with this > are very small in number, I am not suggesting a change to the > API. I wanted to point this out only if there was a simple > solution which addressed everyone's problems. > >>> 3) Why does the fingerprint GetBit require a fingerprinter instance? >>> That is, I have to go through a bound method >>> >>> x = ob.OBFingerprint.FindFingerprint("FP2") >>> self.assertEquals(x.GetBit(v, 0), True) >>> >>> instead of using a static/global function >>> >>> self.assertEquals(ob.OBFingerprint.GetBit(v, 0), True) >> >> ? > > That is, why do I need the "FP2" or to load any fingerprinter. > Is there any way to call GetBit otherwise? > >> All Begin/End methods do not work from Python. Many of them are >> disabled from Python. > > Okay. Didn't know that. > >>> 6) I included tests for iterating over atoms and bonds in >>> a molecule, and for atoms and bonds connected to an atom. I >>> expected I could also iterate over the atoms in a bond, but >>> there is no OBBondAtomIter . While not important, it appeals >>> to my sense of symmetry and it's very simple to write. >> >> True, but will have to wait until next API change. > > What does "API" change mean here? This is part of the adapter > layer to make Python work with OpenBabel. ... Ahh, you mean > that the C++ layer doesn't have an iterator interface for > this case, so the Python one won't have something like > > def OBBondAtomIter(bond): > yield bond.GetBeginAtom() > yield bond.GetEndAtom() > > until the C++ one does. Well, I can understand the reasoning > behind keeping things in synch. > > >> >>> 7) Why can't I do mol.AddBond(C, N, 3) where C and N are atoms? >>> Instead, I need to do mol.AddBond(C.GetIdx(), N.GetIdx(), 3) >> >> No reason I guess. Could cause problems where C and N are not members >> of the molecule though. > > Which lead me to wonder why > >>>> import openbabel as ob >>>> mol = ob.OBMol() >>>> mol.AddBond(123,435, 3) > True > > returned True. Then digging through the code I discovered > "OBGenericDataType::VirtualBondData". > > which lead me to try > >>>> mol.AddBond(-123, -532, 3) > True > > I don't intend for the code to change, only pointing out > something I thought was interesting. > >>> 9) How does OpenBabel define "implicit hydrogen"? > >> ? > > Take away the other things I said. It was my attempt at > figuring out what OB does. I think I know the answer but > it's different from RDKit, OEChem, and Daylight, and > not what I'm used to, so I'm looking for enlightenment. > >> I think no C arrays are accessible (I think most instances can be >> worked around). You need to use atom.GetVector(). > > Through the magic of ctypes. I use it in my fingerprint > reader, for example, to get faster access to the actual > fingerprint data. > >>> 15) In an OBRing, if there are multiple non-C atoms, which one >>> is the root? And since ring.GetRootAtom() returns an integer, >>> shouldn't it be named GetRootAtomIdx()? >> >> ? > > What does the "?" refer to? There are two parts here. > > - "the root" > > mol = parse_smiles("C12CNCC3C1.C2CCC3") > sssr = mol.GetSSSR() > ring = sssr[0] > idx = ring.GetRootAtom() > > The documentation for GetRootAtom: > > the index for the root atom. O for furan, S for thiazole, > N for pyrrole. For 6 membered aromatic rings, the first > non carbon atom is used for root. For 5 members rings the > O, S or N (BOSum=3, valence=3) will be used for root > > That isn't enough information to figure out what it does. > What is "first"? What if there are multiple non-carbons, as in > "C1CCOCOCCNC1" -- which is first? > > - "GetRootAtomIdx()" > > The other API calls which end "*Atom()" return an OBAtom, > while *Idx() returns an integer. This is an API call which > returns an integer index instead of an actual atom. > >>> 19) I see that MMFF94's ValidateGradients() dumps output >>> to stdout. The other ValidateGradients I tested (gaff and >>> ghemical) do not do that, and the output probably isn't >>> appropriate for a library. >>> >>> Then again, the API docs say that it's meant for debugging. >>> Should the debugging API be published for general use? >> >> ? > > Who is the target audience for ValidateGradients()? Is > it used for anything other than debugging? > > > Andrew > da...@dalkescientific.com > > > > ------------------------------------------------------------------------------ > Centralized Desktop Delivery: Dell and VMware Reference Architecture > Simplifying enterprise desktop deployment and management using > Dell EqualLogic storage and VMware View: A highly scalable, end-to-end > client virtualization framework. Read more! > http://p.sf.net/sfu/dell-eql-dev2dev > _______________________________________________ > OpenBabel-Devel mailing list > OpenBabel-Devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/openbabel-devel > ------------------------------------------------------------------------------ Centralized Desktop Delivery: Dell and VMware Reference Architecture Simplifying enterprise desktop deployment and management using Dell EqualLogic storage and VMware View: A highly scalable, end-to-end client virtualization framework. Read more! http://p.sf.net/sfu/dell-eql-dev2dev _______________________________________________ OpenBabel-Devel mailing list OpenBabel-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbabel-devel