Skip to content

Commit 7986099

Browse files
committed
CaP: parse xrd_alpha as pint Quantity or numeric; avoid DimensionalityError in normalize_xrd_data
1 parent 45f19af commit 7986099

1 file changed

Lines changed: 31 additions & 5 deletions

File tree

src/nomad_cau_plugin/normalizers/CaP_experiments_normalizer.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,36 @@ def _two_theta_to_q(two_theta: np.ndarray, wavelength: float) -> np.ndarray:
481481
theta_radians = np.deg2rad(np.asarray(two_theta, dtype=float) / 2.0)
482482
return 4.0 * np.pi * np.sin(theta_radians) / float(wavelength)
483483

484+
@staticmethod
485+
def _parse_xrd_alpha(xrd_alpha) -> float:
486+
"""Return a wavelength in Angstrom as float from various input types.
487+
488+
Accepts None, numeric, string, or pint Quantity with units.
489+
Falls back to DEFAULT_XRD_ALPHA_ANGSTROM on failure.
490+
"""
491+
if xrd_alpha is None:
492+
return CaPNormalizer.DEFAULT_XRD_ALPHA_ANGSTROM
493+
494+
# Handle pint Quantity-like objects
495+
try:
496+
if hasattr(xrd_alpha, 'to') and hasattr(xrd_alpha, 'magnitude'):
497+
try:
498+
q = xrd_alpha.to('angstrom')
499+
return float(q.magnitude)
500+
except Exception:
501+
return float(xrd_alpha.magnitude)
502+
except Exception:
503+
pass
504+
505+
# Fallback: try numeric conversion or parse leading numeric from string
506+
try:
507+
return float(xrd_alpha)
508+
except Exception:
509+
try:
510+
return float(str(xrd_alpha).split()[0])
511+
except Exception:
512+
return CaPNormalizer.DEFAULT_XRD_ALPHA_ANGSTROM
513+
484514
@staticmethod
485515
def _to_local_maxima(df_local: pd.DataFrame) -> pd.DataFrame:
486516
"""Return local maxima points for stick plotting."""
@@ -548,11 +578,7 @@ def normalize_xrd_data( # noqa: PLR0913
548578
reference_files = CaPNormalizer._as_list(
549579
reference_files or reference_cif_files
550580
)
551-
xrd_alpha_value = (
552-
float(xrd_alpha)
553-
if xrd_alpha is not None
554-
else CaPNormalizer.DEFAULT_XRD_ALPHA_ANGSTROM
555-
)
581+
xrd_alpha_value = CaPNormalizer._parse_xrd_alpha(xrd_alpha)
556582

557583
try:
558584
measurement_df = CaPNormalizer._read_xyd_df(archive, xrd_file)

0 commit comments

Comments
 (0)