def test_DiffPy_constrainAsSpaceGroup(self): """Test the constrainAsSpaceGroup function.""" from diffpy.srfit.structure.diffpyparset import DiffpyStructureParSet from diffpy.srfit.structure.sgconstraints import constrainAsSpaceGroup stru = makeLaMnO3_P1() parset = DiffpyStructureParSet("LaMnO3", stru) sgpars = constrainAsSpaceGroup(parset, "P b n m", scatterers = parset.getScatterers()[::2], constrainadps = True) # Make sure that the new parameters were created for par in sgpars: self.assertNotEqual(None, par) self.assertNotEqual(None, par.getValue() ) # Test the unconstrained atoms for scatterer in parset.getScatterers()[1::2]: self.assertFalse(scatterer.x.const) self.assertFalse(scatterer.y.const) self.assertFalse(scatterer.z.const) self.assertFalse(scatterer.U11.const) self.assertFalse(scatterer.U22.const) self.assertFalse(scatterer.U33.const) self.assertFalse(scatterer.U12.const) self.assertFalse(scatterer.U13.const) self.assertFalse(scatterer.U23.const) self.assertEqual(0, len(scatterer._constraints)) proxied = [p.par for p in sgpars] def _consttest(par): return par.const def _constrainedtest(par): return par.constrained def _proxytest(par): return par in proxied def _alltests(par): return _consttest(par) or _constrainedtest(par) or _proxytest(par) for idx, scatterer in enumerate(parset.getScatterers()[::2]): # Under this scheme, atom 6 is free to vary test = False for par in [scatterer.x, scatterer.y, scatterer.z]: test |= _alltests(par) self.assertTrue(test) test = False for par in [scatterer.U11, scatterer.U22, scatterer.U33, scatterer.U12, scatterer.U13, scatterer.U23]: test |= _alltests(par) self.assertTrue(test) return
def testConstrainAsSpaceGroup(self): """Test the constrainAsSpaceGroup function.""" from diffpy.srfit.structure.sgconstraints import constrainAsSpaceGroup stru = makeLaMnO3_P1() parset = DiffpyStructureParSet("LaMnO3", stru) sgpars = constrainAsSpaceGroup(parset, "P b n m", scatterers = parset.getScatterers()[::2], constrainadps = True) # Make sure that the new parameters were created for par in sgpars: self.assertNotEquals(None, par) self.assertNotEquals(None, par.getValue() ) # Test the unconstrained atoms for scatterer in parset.getScatterers()[1::2]: self.assertFalse(scatterer.x.const) self.assertFalse(scatterer.y.const) self.assertFalse(scatterer.z.const) self.assertFalse(scatterer.U11.const) self.assertFalse(scatterer.U22.const) self.assertFalse(scatterer.U33.const) self.assertFalse(scatterer.U12.const) self.assertFalse(scatterer.U13.const) self.assertFalse(scatterer.U23.const) self.assertEquals(0, len(scatterer._constraints)) proxied = [p.par for p in sgpars] def _consttest(par): return par.const def _constrainedtest(par): return par.constrained def _proxytest(par): return par in proxied def _alltests(par): return _consttest(par) or _constrainedtest(par) or _proxytest(par) for idx, scatterer in enumerate(parset.getScatterers()[::2]): # Under this scheme, atom 6 is free to vary test = False for par in [scatterer.x, scatterer.y, scatterer.z]: test |= _alltests(par) self.assertTrue(test) test = False for par in [scatterer.U11, scatterer.U22, scatterer.U33, scatterer.U12, scatterer.U13, scatterer.U23]: test |= _alltests(par) self.assertTrue(test) return