def test_NaturalNuclideBase_getNatrualIsotpics(self): for nuc in nuclideBases.where( lambda nn: isinstance(nn, nuclideBases.NaturalNuclideBase) ): numNaturals = len(list(nuc.getNaturalIsotopics())) self.assertGreaterEqual( len(nuc.element.nuclideBases) - 1, numNaturals ) # , nuc)
def test_nucBases_labelAndNameCollsionsAreForSameNuclide(self): count = 0 for nuc in nuclideBases.where(lambda nn: nn.name == nn.label): count += 1 self.assertEqual(nuc, nuclideBases.byName[nuc.name]) self.assertEqual(nuc, nuclideBases.byDBName[nuc.getDatabaseName()]) self.assertEqual(nuc, nuclideBases.byLabel[nuc.label]) self.assertGreater(count, 10)
def test_NaturalNuclide_atomicWeightIsAverageOfNaturallyOccuringIsotopes( self): for natNuk in nuclideBases.where( lambda nn: isinstance(nn, nuclideBases.NaturalNuclideBase)): atomicMass = 0.0 for natIso in natNuk.getNaturalIsotopics(): atomicMass += natIso.abundance * natIso.weight self.assertEqual( atomicMass, natNuk.weight, "{} weight is {}, expected {}".format(natNuk, natNuk.weight, atomicMass), )
def _buildMo99LumpedFissionProduct(): """ Build a dummy MO-99 LFP collection. This is a very bad FP approximation from a physics standpoint but can be very useful for rapid-running test cases. """ mo99 = nuclideBases.byName["MO99"] mo99LFPs = LumpedFissionProductCollection() for lfp in nuclideBases.where( lambda nb: isinstance(nb, nuclideBases.LumpNuclideBase)): # Not all lump nuclide bases defined are fission products, so ensure that only fission products are considered. if not "FP" in lfp.name: continue mo99FP = LumpedFissionProduct(lfp.name) mo99FP[mo99] = 2.0 mo99LFPs[lfp.name] = mo99FP return mo99LFPs
def test_nucBases_Mc2Elementals(self): notElemental = [ "LFP00", # this is an on-the-fly fission product "LFP35", "LFP38", "LFP39", "LFP40", "LFP41", "DUMMY", "DUMP1", "DUMP2", "LREGN", ] for lump in nuclideBases.where( lambda nn: isinstance(nn, nuclideBases.LumpNuclideBase)): if lump.name in notElemental: self.assertIsInstance(lump, nuclideBases.LumpNuclideBase) else: self.assertIsInstance(lump, nuclideBases.NaturalNuclideBase)
def test_nucBases_imposeBurnChainDecayBulkStatistics(self): """ Test must be updated manually when burn chain is modified. """ decayers = list(nuclideBases.where(lambda nn: len(nn.decays) > 0)) self.assertTrue(decayers) for nuc in decayers: if nuc.name in [ "U238", "PU240", "PU242", "CM242", "CM244", "CM246", "CF250", "CF252", ]: continue self.assertAlmostEqual(1.0, sum(dd.branch for dd in nuc.decays))
def test_nucBases_imposeBurnChainTransmutationBulkStatistics(self): """ Make sure all branches are equal to 1 for every transmutation type. Exception: We allow 3e-4 threshold to account for ternary fissions, which are usually < 2e-4 per fission. """ trasmuters = nuclideBases.where(lambda nn: len(nn.trans) > 0) self.assertTrue(trasmuters) for nuc in trasmuters: expected = len(set(tt.type for tt in nuc.trans)) self.assertTrue(all(0.0 <= tt.branch <= 1.0 for tt in nuc.trans)) actual = sum(tt.branch for tt in nuc.trans) self.assertAlmostEqual( expected, actual, msg="{0} has {1} transmutation but the branches add up to {2}" "".format(nuc, expected, actual), delta=3e-4, ) # ternary fission
def test_nucBases_isHeavyMetal(self): for nb in nuclideBases.where(lambda nn: nn.z <= 89): self.assertFalse(nb.isHeavyMetal()) for nb in nuclideBases.where(lambda nn: nn.z > 89): self.assertTrue(nb.isHeavyMetal())
def test_LumpNuclideBase_getNatrualIsotopicsDoesNotFail(self): for nuc in nuclideBases.where(lambda nn: isinstance( nn, nuclideBases.LumpNuclideBase) and nn.z == 0): self.assertEqual(0, len(list(nuc.getNaturalIsotopics())), nuc)