Skip to content

Commit 65e2d64

Browse files
authored
Merge branch 'main' into cbishop4-patch-1
2 parents fa2c61a + caeb18e commit 65e2d64

12 files changed

Lines changed: 1493 additions & 29 deletions

docs/plans/nrss_q_coordinate_semantics.md

Lines changed: 573 additions & 0 deletions
Large diffs are not rendered by default.

docs/source/getting_started/integration.rst

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,14 @@ For grazing-incidence experiments ``PGGeneralIntegrator`` uses
2323
``pygix`` to output either reciprocal-space ``q_xy``/``q_z`` data or
2424
caked ``q`` vs ``chi``. Datasets already in ``qx``/``qy`` coordinates
2525
can be integrated with ``WPIntegrator`` which relies on
26-
``skimage.transform.warp_polar`` (or its GPU version).
26+
``skimage.transform.warp_polar`` (or its GPU version). ``WPIntegrator``
27+
is a detector-plane ``qx``/``qy`` to ``chi``/``q_perp`` remesher, so it
28+
is the right choice for reciprocal-plane / 2D NRSS outputs.
29+
30+
For NRSS detector-aware 3D outputs use ``NRSSIntegrator`` instead.
31+
It keeps the same polar remesh approach but relabels the radial axis
32+
with detector-corrected ``|q|`` so the reduced curve can be compared to
33+
geometry-aware analytical form factors.
2734

2835
All integrators return properly labeled xarray objects so the rest of
2936
the workflow can use normal xarray indexing and visualization.

src/PyHyperScattering/Fitting.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,15 @@ def fit_lorentz(x,guess=None,pos_int_override=False,silent=False):
9494
except RuntimeError:
9595
if not silent:
9696
print("Fit failed to converge")
97-
retval = xr.DataArray(data=np.nan,coords=x.coords).to_dataset(name='intensity')
98-
retval['pos'] = xr.DataArray(data=np.nan,coords=x.coords)
99-
retval['width'] = xr.DataArray(data=np.nan,coords=x.coords)
97+
retval = xr.full_like(x, np.nan, dtype=float).to_dataset(name='intensity')
98+
retval['pos'] = xr.full_like(x, np.nan, dtype=float)
99+
retval['width'] = xr.full_like(x, np.nan, dtype=float)
100100
return retval
101101
if not silent:
102102
print(f"Fit completed, coeff = {coeff}")
103-
retval = xr.DataArray(data=coeff[0],coords=x.coords).to_dataset(name='intensity')
104-
retval['pos'] = xr.DataArray(data=coeff[1],coords=x.coords)
105-
retval['width'] = xr.DataArray(data=coeff[2],coords=x.coords)
103+
retval = xr.full_like(x, coeff[0], dtype=float).to_dataset(name='intensity')
104+
retval['pos'] = xr.full_like(x, coeff[1], dtype=float)
105+
retval['width'] = xr.full_like(x, coeff[2], dtype=float)
106106
return retval
107107
def fit_lorentz_bg(x,guess=None,pos_int_override=False,silent=False):
108108
'''
@@ -131,17 +131,17 @@ def fit_lorentz_bg(x,guess=None,pos_int_override=False,silent=False):
131131
except RuntimeError:
132132
if not silent:
133133
print("Fit failed to converge")
134-
retval = xr.DataArray(data=np.nan,coords=x.coords).to_dataset(name='intensity')
135-
retval['pos'] = xr.DataArray(data=np.nan,coords=x.coords)
136-
retval['width'] = xr.DataArray(data=np.nan,coords=x.coords)
137-
retval['bg'] = xr.DataArray(data=np.nan,coords=x.coords)
134+
retval = xr.full_like(x, np.nan, dtype=float).to_dataset(name='intensity')
135+
retval['pos'] = xr.full_like(x, np.nan, dtype=float)
136+
retval['width'] = xr.full_like(x, np.nan, dtype=float)
137+
retval['bg'] = xr.full_like(x, np.nan, dtype=float)
138138
return retval
139139
if not silent:
140140
print(f"Fit completed, coeff = {coeff}")
141-
retval = xr.DataArray(data=coeff[0],coords=x.coords).to_dataset(name='intensity')
142-
retval['pos'] = xr.DataArray(data=coeff[1],coords=x.coords)
143-
retval['width'] = xr.DataArray(data=coeff[2],coords=x.coords)
144-
retval['bg'] = xr.DataArray(data=coeff[3],coords=x.coords)
141+
retval = xr.full_like(x, coeff[0], dtype=float).to_dataset(name='intensity')
142+
retval['pos'] = xr.full_like(x, coeff[1], dtype=float)
143+
retval['width'] = xr.full_like(x, coeff[2], dtype=float)
144+
retval['bg'] = xr.full_like(x, coeff[3], dtype=float)
145145
return retval
146146

147147
def fit_cos_anisotropy(data,qL,qU,qspacing,Enlist,ChiL,ChiU,binnumber,Chilim):
@@ -329,4 +329,4 @@ def fit_cos(x_data, y_data):
329329
Ani_unc=0
330330
Chisq=100
331331

332-
return params, Ani, Ani_unc, Chisq
332+
return params, Ani, Ani_unc, Chisq

0 commit comments

Comments
 (0)