Esempio n. 1
0
def test_generate_eline_list3():
    r"""
    ``generate_eline_list``: fails if emission line category is specified incorrectly
    """
    with pytest.raises(
            RuntimeError,
            match="Some of the selected emission lines are incorrect"):
        generate_eline_list(["Fe", "W", "Ta"],
                            incident_energy=12.0,
                            lines=["K", "Ka"])
Esempio n. 2
0
def test_generate_eline_list2(elements, incident_energy, lines, elines):
    r"""
    ``generate_eline_list``: explicitely select eline categories
    """
    assert (generate_eline_list(
        elements, incident_energy=incident_energy,
        lines=lines) == elines), "Emission line list is generated incorrectly"
Esempio n. 3
0
def test_generate_eline_list1(elements, incident_energy, elines):
    r"""
    ``generate_eline_list``: search all lines
    """
    assert (generate_eline_list(elements,
                                incident_energy=incident_energy) == elines
            ), "Emission line list is generated incorrectly"
Esempio n. 4
0
def test_get_quant_fluor_data_dict():
    """Tests for 'get_quant_fluor_data_dict': basic tests for consistensy of the returned dictionary"""

    for standard_data in _standard_data_sample:

        quant_fluor_data_dict = get_quant_fluor_data_dict(standard_data,
                                                          incident_energy=12.0)
        # Will raise exception is schema is not satisfied
        jsonschema.validate(instance=quant_fluor_data_dict,
                            schema=_xrf_quant_fluor_schema)

        assert quant_fluor_data_dict["name"] == standard_data[
            "name"], "Dictionary element 'name' is incorrect"

        assert (quant_fluor_data_dict["serial"] == standard_data["serial"]
                ), "Dictionary element 'serial' is incorrect"

        assert (quant_fluor_data_dict["description"] ==
                standard_data["description"]
                ), "Dictionary element 'description' is incorrect"

        eline_set = set()
        # The 'mass' is not actual mass. If elements has multiple emission lines activated, then
        #   the mass (density) of the element will be counted multiple times. There is no
        #   physical meaning in the computed value: it is used to verify the sum of densities in
        #   the 'element_lines' dictionary of emission lines in 'quant_fluor_data_dict'
        mass_sum_expected = 0
        for cmpd, mass in standard_data["compounds"].items():
            em_dict = split_compound_mass(cmpd, mass)
            for el, ms in em_dict.items():
                elines = generate_eline_list([el], incident_energy=12.0)
                n_elines = len(elines)
                if n_elines:
                    mass_sum_expected += n_elines * ms
                    eline_set.update(elines)

        eline_out_list = list(quant_fluor_data_dict["element_lines"].keys())
        assert len(eline_out_list) == len(
            eline_set), "The number of emission lines is not as expected"
        assert (
            set(eline_out_list) == eline_set
        ), "Generated object contains emission lines that are different from expected"

        mass_sum = sum([
            _["density"]
            for _ in quant_fluor_data_dict["element_lines"].values()
        ])
        assert (
            mass_sum == mass_sum_expected
        ), "The total mass (density) of the components is different from expected"