def _makePDFCalculator(crst, cfgdict): '''Return a PDFCalculator object evaluated for a pyobjcryst.Crystal crst. ''' inpdfcalc = lambda kv: kv[0] not in ('biso', 'type') pdfcargs = dict(filter(inpdfcalc, cfgdict.items())) pdfc = PDFCalculator(**pdfcargs) if 'biso' in cfgdict: setbiso = lambda sc: sc.mpScattPow.SetBiso(cfgdict['biso']) map(setbiso, crst.GetScatteringComponentList()) if 'type' in cfgdict: pdfc.scatteringfactortable = cfgdict['type'] pdfc.eval(crst) # avoid metadata override by PDFFitStructure for k, v in pdfcargs.items(): setattr(pdfc, k, v) return pdfc
def _makePDFCalculator(crst, cfgdict): '''Return a PDFCalculator object evaluated for a pyobjcryst.Crystal crst. ''' pdfcargs = {k: v for k, v in cfgdict.items() if k not in ('biso', 'type')} pdfc = PDFCalculator(**pdfcargs) if 'biso' in cfgdict: reg = crst.GetScatteringPowerRegistry() for i in range(reg.GetNb()): sp = reg.GetObj(i) sp.SetBiso(cfgdict['biso']) if 'type' in cfgdict: pdfc.scatteringfactortable = cfgdict['type'] pdfc.eval(crst) # avoid metadata override by PDFFitStructure for k, v in pdfcargs.items(): setattr(pdfc, k, v) return pdfc
def _makePDFCalculator(crst, cfgdict): '''Return a PDFCalculator object evaluated for a pyobjcryst.Crystal crst. ''' pdfcargs = {k : v for k, v in cfgdict.items() if k not in ('biso', 'type')} pdfc = PDFCalculator(**pdfcargs) if 'biso' in cfgdict: reg = crst.GetScatteringPowerRegistry() for i in range(reg.GetNb()): sp = reg.GetObj(i) sp.SetBiso(cfgdict['biso']) if 'type' in cfgdict: pdfc.scatteringfactortable = cfgdict['type'] pdfc.eval(crst) # avoid metadata override by PDFFitStructure for k, v in pdfcargs.items(): setattr(pdfc, k, v) return pdfc
def test_ticker_override(self): """check Python override of ScatteringFactorTable.ticker. """ from diffpy.srreal.pdfcalculator import PDFCalculator lsft = LocalTable() self.assertEqual(0, lsft.tcnt) et0 = lsft.ticker() self.assertEqual(1, lsft.tcnt) et1 = ScatteringFactorTable.ticker(lsft) self.assertEqual(1, lsft.tcnt) self.assertEqual(et0, et1) et0.click() self.assertEqual(et0, et1) # check that implicit ticker call from PDFCalculator is # handled by Python override of the ticker method. pc = PDFCalculator() pc.scatteringfactortable = lsft pc.ticker() self.assertEqual(2, lsft.tcnt) return
def test_picking_owned(self): '''verify pickling of envelopes owned by PDF calculators. ''' pc = PDFCalculator() dbpc = DebyePDFCalculator() ltb = LocalTable() ltb.setCustomAs('Na', 'Na', 37) ltb.foo = 'bar' pc.scatteringfactortable = ltb dbpc.scatteringfactortable = ltb self.assertIs(ltb, pc.scatteringfactortable) self.assertIs(ltb, dbpc.scatteringfactortable) pc2 = pickle.loads(pickle.dumps(pc)) dbpc2 = pickle.loads(pickle.dumps(dbpc)) self.assertEqual('localtable', pc2.scatteringfactortable.type()) self.assertEqual('localtable', dbpc2.scatteringfactortable.type()) self.assertEqual(37, pc2.scatteringfactortable.lookup('Na')) self.assertEqual(37, dbpc2.scatteringfactortable.lookup('Na')) self.assertEqual('bar', pc2.scatteringfactortable.foo) self.assertEqual('bar', dbpc2.scatteringfactortable.foo) return