Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions news/rm-packing-fraction.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
**Added:**

* <news item>

**Changed:**

* <news item>

**Deprecated:**

* <news item>

**Removed:**

* Removed API that calculates mu from packing fraction.

**Fixed:**

* <news item>

**Security:**

* <news item>
39 changes: 10 additions & 29 deletions src/diffpy/utils/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,49 +231,30 @@ def get_density_from_cloud(sample_composition, mp_token=""):
)


def compute_mu_using_xraydb(
sample_composition, energy, sample_mass_density=None, packing_fraction=None
):
def compute_mu_using_xraydb(sample_composition, energy, sample_mass_density):
"""Compute the attenuation coefficient (mu) using the XrayDB
database.

Computes mu based on the sample composition and energy.
User should provide a sample mass density or a packing fraction.
If neither density nor packing fraction is specified,
or if both are specified, a ValueError will be raised.
Reference: https://xraypy.github.io/XrayDB/python.html#xraydb.material_mu.
Computes mu based on the sample composition, X-ray energy, and
sample mass density.

Reference:
https://xraypy.github.io/XrayDB/python.html#xraydb.material_mu

Parameters
----------
sample_composition : str
The chemical formula of the material.
energy : float
The energy of the incident x-rays in keV.
sample_mass_density : float, ``optional``
The mass density of the packed powder/sample in g/cm*3.
Default is None.
packing_fraction : float, ``optional``
The fraction of sample in the capillary (between 0 and 1).
Specify either sample_mass_density or packing_fraction but not both.
Default is None.
The energy of the incident X-rays in keV.
sample_mass_density : float
The mass density of the sample in g/cm^3.

Returns
-------
mu : float
The attenuation coefficient mu in mm^{-1}.
The attenuation coefficient μ in mm⁻¹.
"""
if (sample_mass_density is None and packing_fraction is None) or (
sample_mass_density is not None and packing_fraction is not None
):
raise ValueError(
"You must specify either sample_mass_density or packing_fraction, "
"but not both. "
"Please rerun specifying only one."
)
if packing_fraction is not None:
sample_mass_density = (
get_density_from_cloud(sample_composition) * packing_fraction
)
energy_eV = energy * 1000
mu = (
material_mu(
Expand Down
35 changes: 0 additions & 35 deletions tests/test_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
from diffpy.utils.tools import (
_extend_z_and_convolve,
check_and_build_global_config,
compute_mu_using_xraydb,
compute_mud,
get_package_info,
get_user_info,
Expand Down Expand Up @@ -270,40 +269,6 @@ def test_get_package_info(monkeypatch, inputs, expected):
assert actual_metadata == expected


@pytest.mark.parametrize(
"inputs",
[
# Test when the function has invalid inputs
( # C1: Both mass density and packing fraction are provided,
# expect ValueError exception
{
"sample_composition": "SiO2",
"energy": 10,
"sample_mass_density": 2.65,
"packing_fraction": 1,
}
),
( # C2: None of mass density or packing fraction are provided,
# expect ValueError exception
{
"sample_composition": "SiO2",
"energy": 10,
}
),
],
)
def test_compute_mu_using_xraydb_bad(inputs):
with pytest.raises(
ValueError,
match=(
"You must specify either sample_mass_density or "
"packing_fraction, but not both. "
"Please rerun specifying only one."
),
):
compute_mu_using_xraydb(**inputs)


def test_compute_mud(tmp_path):
diameter, slit_width, z0, I0, mud, slope = 1, 0.1, 0, 1e5, 3, 0
z_data = np.linspace(-1, 1, 50)
Expand Down
Loading