From: Noel O'B. <bao...@gm...> - 2013-03-24 22:06:23
|
(ccing to list) On 24 March 2013 21:23, inviso <in...@gm...> wrote: > 1) Good deal, looks like that was what I was seeing > > 2) Yeah, I figured that out a few minutes after sending my message but > hadn't see it show up on the list so I could reply. The things you remember > to check after hitting send... :( > > 3) Yep, that's what I ended up with and it's doing a proper deep copy as far > as I can tell and is preserving values as expected. > > 4) Thanks. I'm loading up larger files typically. Any reason not to load > up a set of molecules the way I was loading in the one test molecule? aka, > molecules = [mol for mol in pybel.readfile...]. I want them in a list > either way. Regarding (4), there is no particular reason not to, but if you ever find yourself using "z = [x for x in y]" then a better Python idiom is "z = list(y)". The intention is then somewhat clearer. - Noel > Greg > > > On Sun, Mar 24, 2013 at 1:17 PM, Noel O'Boyle <bao...@gm...> wrote: >> >> Hi Greg, >> >> 1. "mol_from_Molecule_copy = pybel.Molecule(mol)" >> This doesn't copy anything. It writes it out as a Mol file, and then >> reads it in from a Mol file. A Mol file has 4 decimal places of >> precision. It seems that I should document this. >> >> 2. "mol_from_OBMol_copy = pybel.Molecule(mol.OBMol)" >> This doesn't copy anything either. It just creates a pybel Molecule as >> a thin wrapper around an OBMol. >> >> 3. If you want to copy an OBMol, you should use OBMol's copy >> constructor, "myCopyMol = pybel.ob.OBMol(mol.OBMol)" >> >> 4. FYI, "mol = [mol for mol in pybel.readfile('xyz', 'test1.xyz')][0]" >> is better as "mol = pybel.readfile(...).next()" >> >> HTH, >> - Noel >> >> On 24 March 2013 18:36, inviso <in...@gm...> wrote: >> > In one specific case that I'm able to identify, I'm losing precision on >> > the >> > geometry vectors when copying a molecule in pybel. I've attached a >> > small >> > sample of source and a single molecule file that reliably reproduces the >> > results for me on Windows with OpenBabel 2.3.1 and Python 2.7.2. Also, >> > confirmed on Rocks Linux with OpenBabel 2.3.2 and Python 2.6.6. >> > >> > The output on my machine from the sample code is as follows: >> > Original : 0.0602900000, -2.2281500000, 0.0378600000 >> > Molecule_copy : 0.0603000000, -2.2281000000, 0.0379000000 >> > OBMol_copy : 0.0602900000, -2.2281500000, 0.0378600000 >> > >> > A few notes: >> > 1) Yes, the precision in my print format string is ridiculous :) I just >> > wanted to make sure I wasn't arbitrarily clipping precision when >> > displaying >> > the output. >> > 2) The sample code only outputs the first atom (Rh) as it was all that >> > was >> > necessary to show the problem on my machine. >> > 3) Since this works fine when passing OBMol into the constructor, it >> > looks >> > like it has to be caused by the Molecule._exchange call which in turn >> > calls >> > Molecule.write(format='mol') >> > 4) Calling Molecule.write(format='mol') directly also shows a loss of >> > precision on the geometry in the output. The .write() call goes into >> > openbabel.OBConversion and from there into swig code which I'm not very >> > familiar with so I didn't try to follow it deeper into the C++ library. >> > 5) It seems like the precision being lost is far greater than I would >> > expected from the inherent precision problems of double and it feels >> > more >> > like it's just rounding to four digits of precision. It seems >> > especially >> > suspect since using OBMol is accurate. >> > >> > I will work around this by always using new_copy = >> > pybel.Molecule(my_mol.OBMol), but it is an odd behavior. Is anyone else >> > able to confirm? Is it unexpected behavior to pass pybel.Molecule >> > instead >> > of OBMol or is the _cinfony check in the constructor specifically meant >> > for >> > that case? >> > >> > Thanks, >> > >> > Greg Fortune >> > >> > >> > ------------------------------------------------------------------------------ >> > Everyone hates slow websites. So do we. >> > Make your web apps faster with AppDynamics >> > Download AppDynamics Lite for free today: >> > http://p.sf.net/sfu/appdyn_d2d_mar >> > _______________________________________________ >> > OpenBabel-discuss mailing list >> > Ope...@li... >> > https://lists.sourceforge.net/lists/listinfo/openbabel-discuss >> > > > |