def test_get_set_chain_br(simple_chain): """Test minor modifications to capture branch ratios""" expected = {"C": {"A": 0.7, "B": 0.3}} assert simple_chain.get_branch_ratios() == expected # safely modify new_chain = Chain.from_xml("chain_test.xml") new_br = {"C": {"A": 0.5, "B": 0.5}, "A": {"C": 0.99, "B": 0.01}} new_chain.set_branch_ratios(new_br) assert new_chain.get_branch_ratios() == new_br # write, re-read new_chain.export_to_xml("chain_mod.xml") assert Chain.from_xml("chain_mod.xml").get_branch_ratios() == new_br # Test non-strict [warn, not error] setting bad_br = {"B": {"X": 0.6, "A": 0.4}, "X": {"A": 0.5, "C": 0.5}} bad_br.update(new_br) new_chain.set_branch_ratios(bad_br, strict=False) assert new_chain.get_branch_ratios() == new_br # Ensure capture reactions are removed rem_br = {"A": {"C": 1.0}} new_chain.set_branch_ratios(rem_br) # A is not in returned dict because there is no branch assert "A" not in new_chain.get_branch_ratios()
def test_set_fiss_q(): """Make sure new fission q values can be set on the chain""" new_q = {"U235": 2.0E8, "U238": 2.0E8, "U234": 5.0E7} chain_file = Path(__file__).parents[1] / "chain_simple.xml" mod_chain = Chain.from_xml(chain_file, new_q) for name, q in new_q.items(): chain_nuc = mod_chain[name] for rx in chain_nuc.reactions: if rx.type == 'fission': assert rx.Q == q
def test_capture_branch_no_rxn(): """Ensure capture reactions that don't exist aren't created""" u4br = {"U234": {"U235": 0.5, "U235_m1": 0.5}} chain_file = Path(__file__).parents[1] / "chain_simple.xml" chain = Chain.from_xml(chain_file) u5m = nuclide.Nuclide("U235_m1") chain.nuclides.append(u5m) chain.nuclide_dict[u5m.name] = len(chain.nuclides) - 1 with pytest.raises(AttributeError, match="U234"): chain.set_branch_ratios(u4br)
def test_capture_branch_infer_ground(): """Ensure the ground state is infered if not given""" # Make up a metastable capture transition: infer_br = {"Xe135": {"Xe136_m1": 0.5}} set_br = {"Xe135": {"Xe136": 0.5, "Xe136_m1": 0.5}} chain_file = Path(__file__).parents[1] / "chain_simple.xml" chain = Chain.from_xml(chain_file) # Create nuclide to be added into the chain xe136m = nuclide.Nuclide("Xe136_m1") chain.nuclides.append(xe136m) chain.nuclide_dict[xe136m.name] = len(chain.nuclides) - 1 chain.set_branch_ratios(infer_br, "(n,gamma)") assert chain.get_branch_ratios("(n,gamma)") == set_br
def gnd_simple_chain(): chainfile = Path(__file__).parents[1] / "chain_simple.xml" return Chain.from_xml(chainfile)
def simple_chain(): with cdtemp(): with open('chain_test.xml', 'w') as fh: fh.write(_TEST_CHAIN) yield Chain.from_xml('chain_test.xml')