Skip to content

Commit 94f69f1

Browse files
committed
Uses ordinate property in manipulations code
1 parent f6edb62 commit 94f69f1

3 files changed

Lines changed: 38 additions & 41 deletions

File tree

sasdata/data_util/averaging.py

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ def get_dq_data(data2d: SasData) -> npt.NDArray[np.floating]:
5656
# Final protection of dq
5757
if dq_overlap < 0:
5858
dq_overlap = dqy_at_z_min
59-
dqx_data = dqx_data[np.isfinite(data2d._data_contents["I"].value)]
60-
dqy_data = dqy_data[np.isfinite(data2d._data_contents["I"].value)] - dq_overlap
59+
dqx_data = dqx_data[np.isfinite(data2d.ordinate.value)]
60+
dqy_data = dqy_data[np.isfinite(data2d.ordinate.value)] - dq_overlap
6161
# def; dqx_data = dq_r dqy_data = dq_phi
6262
# Convert dq 2D to 1D here
6363
dq_data = np.sqrt(dqx_data**2 + dqy_data**2)
@@ -206,7 +206,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
206206
#return Data1D(x=qx_data, y=intensity, dy=error)
207207
data_contents = {
208208
"Q": Quantity(qx_data, data2d._data_contents["Qx"].units, None),
209-
"I": Quantity(intensity, data2d._data_contents["I"].units, error),
209+
"I": Quantity(intensity, data2d.ordinate.units, error),
210210
}
211211
return SasData(f"{data2d.name}: Slab X Average", data_contents, one_dim, data2d.metadata)
212212

@@ -280,7 +280,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
280280
#return Data1D(x=qy_data, y=intensity, dy=error)
281281
data_contents = {
282282
"Q": Quantity(qy_data, data2d._data_contents["Qy"].units, None),
283-
"I": Quantity(intensity, data2d._data_contents["I"].units, error),
283+
"I": Quantity(intensity, data2d.ordinate.units, error),
284284
}
285285
return SasData(f"{data2d.name}: Slab Y Average", data_contents, one_dim, data2d.metadata)
286286

@@ -325,16 +325,16 @@ def __call__(self, data2D: Data2D, ismask: bool = False) -> Data1D:
325325
:return: SasData object with x (bin centers), y (intensity), dy and dx (if available)
326326
"""
327327
# Work on unmasked finite arrays first (matches legacy filtering)
328-
finite_mask = np.isfinite(data2D._data_contents["I"].value)
328+
finite_mask = np.isfinite(data2D.ordinate.value)
329329
if not np.any(finite_mask):
330330
raise RuntimeError(f"Circular averaging: invalid q_data: {data2D.q_data}")
331331

332-
data_all = data2D._data_contents["I"].value[finite_mask]
332+
data_all = data2D.ordinate.value[finite_mask]
333333
qx_all = data2D._data_contents["Qx"].value[finite_mask]
334334
qy_all = data2D._data_contents["Qy"].value[finite_mask]
335335
q_all = np.sqrt(data2D._data_contents["Qx"].value**2 + data2D._data_contents["Qy"].value**2)[finite_mask]
336-
err_all = np.sqrt(data2D._data_contents["I"].variance.value)[finite_mask]
337-
mask_all = (data2D.mask if data2D.mask is not None else np.ones_like(data2D._data_contents["I"].value, dtype=bool))[finite_mask]
336+
err_all = np.sqrt(data2D.ordinate.variance.value)[finite_mask]
337+
mask_all = (data2D.mask if data2D.mask is not None else np.ones_like(data2D.ordinate.value, dtype=bool))[finite_mask]
338338

339339
# Optional mask handling: legacy used an ismask flag to optionally skip masked points
340340
if ismask:
@@ -388,7 +388,7 @@ def __call__(self, data2D: Data2D, ismask: bool = False) -> Data1D:
388388
#return Data1D(x=x, y=intensity, dy=error, dx=dx)
389389
data_contents = {
390390
"Q": Quantity(x, data2D._data_contents["Qx"].units, dQ),
391-
"I": Quantity(intensity, data2D._data_contents["I"].units, error),
391+
"I": Quantity(intensity, data2D.ordinate.units, error),
392392
}
393393
return SasData(f"{data2D.name}: Circular Average", data_contents, one_dim, data2D.metadata)
394394

@@ -438,20 +438,19 @@ def __call__(self, data2D: Data2D) -> Data1D:
438438
msg = "Data supplied for ring averaging must be of type SasData."
439439
raise RuntimeError(msg)
440440
if not ("Qx" in data2D._data_contents and
441-
"Qy" in data2D._data_contents and
442-
"I" in data2D._data_contents):
443-
msg = "SasData object for ring averaging must contain 'Qx', 'Qy', and 'I' data."
441+
"Qy" in data2D._data_contents):
442+
msg = "SasData object for ring averaging must contain 'Qx' and 'Qy' data."
444443
raise RuntimeError(msg)
445444

446445
# Get data
447-
valid_data = np.isfinite(data2D._data_contents["I"].value)
446+
valid_data = np.isfinite(data2D.ordinate.value)
448447

449-
data = data2D._data_contents["I"].value[valid_data]
450-
err_data = np.sqrt(data2D._data_contents["I"].variance.value)[valid_data]
448+
data = data2D.ordinate.value[valid_data]
449+
err_data = np.sqrt(data2D.ordinate.variance.value)[valid_data]
451450
qx_data = data2D._data_contents["Qx"].value[valid_data]
452451
qy_data = data2D._data_contents["Qy"].value[valid_data]
453452
q_data = np.sqrt(data2D._data_contents["Qx"].value ** 2 + data2D._data_contents["Qy"].value ** 2)[valid_data]
454-
mask_data = (data2D.mask if data2D.mask is not None else np.ones_like(data2D._data_contents["I"].value, dtype=bool))[valid_data]
453+
mask_data = (data2D.mask if data2D.mask is not None else np.ones_like(data2D.ordinate.value, dtype=bool))[valid_data]
455454

456455
# Set space for 1d outputs
457456
phi_bins = np.zeros(self.nbins)
@@ -509,7 +508,7 @@ def __call__(self, data2D: Data2D) -> Data1D:
509508
#return Data1D(x=phi_values[idx], y=phi_bins[idx], dy=phi_err[idx])
510509
data_contents = {
511510
"Phi": Quantity(phi_values[idx], radians, None),
512-
"I": Quantity(phi_bins[idx], data2D._data_contents["I"].units, phi_err[idx]),
511+
"I": Quantity(phi_bins[idx], data2D.ordinate.units, phi_err[idx]),
513512
}
514513
return SasData(f"{data2D.name}: Ring Average", data_contents, angle_dim, data2D.metadata)
515514

@@ -648,7 +647,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
648647
# dy=combined_err[finite])
649648
data_contents = {
650649
"Q": Quantity(combined_q[finite], data2d._data_contents["Qx"].units, None),
651-
"I": Quantity(average_intensity[finite], data2d._data_contents["I"].units, combined_err[finite]),
650+
"I": Quantity(average_intensity[finite], data2d.ordinate.units, combined_err[finite]),
652651
}
653652
else:
654653
# The secondary ROI is labelled with negative Q values.
@@ -660,7 +659,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
660659
# dy=combined_error)
661660
data_contents = {
662661
"Q": Quantity(combined_q, data2d._data_contents["Qx"].units, None),
663-
"I": Quantity(combined_intensity, data2d._data_contents["I"].units, combined_error),
662+
"I": Quantity(combined_intensity, data2d.ordinate.units, combined_error),
664663
}
665664

666665
return SasData(f"{data2d.name}:SectorQ Average", data_contents, one_dim, data2d.metadata)
@@ -748,7 +747,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
748747
#return Data1D(x=q_data, y=intensity, dy=error)
749748
data_contents = {
750749
"Q": Quantity(q_data, data2d._data_contents["Qx"].units, None),
751-
"I": Quantity(intensity, data2d._data_contents["I"].units, error),
750+
"I": Quantity(intensity, data2d.ordinate.units, error),
752751
}
753752
return SasData(f"{data2d.name}: Wedge Q Average", data_contents, one_dim, data2d.metadata)
754753

@@ -857,7 +856,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
857856
#return Data1D(x=phi_centers, y=intensity, dy=error)
858857
data_contents = {
859858
"Phi": Quantity(phi_centers, radians, None),
860-
"I": Quantity(intensity, data2d._data_contents["I"].units, error),
859+
"I": Quantity(intensity, data2d.ordinate.units, error),
861860
}
862861
return SasData(f"{data2d.name}: Wedge Phi Average", data_contents, angle_dim, data2d.metadata)
863862

sasdata/data_util/manipulations.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -391,11 +391,11 @@ def __call__(self, data2D, ismask=False):
391391
:return: SasData object
392392
"""
393393
# Get data W/ finite values
394-
finite_mask = np.isfinite(data2D._data_contents["I"].value)
395-
data = data2D._data_contents["I"].value[finite_mask]
394+
finite_mask = np.isfinite(data2D.ordinate.value)
395+
data = data2D.ordinate.value[finite_mask]
396396
q_data = np.sqrt(data2D._data_contents["Qx"].value**2 + data2D._data_contents["Qy"].value**2)[finite_mask]
397-
err_data = np.sqrt(data2D._data_contents["I"].variance.value)[finite_mask]
398-
mask_data = (data2D.mask if data2D.mask is not None else np.ones_like(data2D._data_contents["I"].value, dtype=bool))[finite_mask]
397+
err_data = np.sqrt(data2D.ordinate.variance.value)[finite_mask]
398+
mask_data = (data2D.mask if data2D.mask is not None else np.ones_like(data2D.ordinate.value, dtype=bool))[finite_mask]
399399

400400
dq_data = None
401401
if data2D._data_contents["Qx"].has_variance and data2D._data_contents["Qy"].has_variance:
@@ -482,7 +482,7 @@ def __call__(self, data2D, ismask=False):
482482

483483
data_contents = {
484484
"Q": Quantity(x[idx], data2D._data_contents["Qx"].units, dQ),
485-
"I": Quantity(y[idx], data2D._data_contents["I"].units, err_y[idx]),
485+
"I": Quantity(y[idx], data2D.ordinate.units, err_y[idx]),
486486
}
487487
return SasData("Circular Average", data_contents, one_dim, data2D.metadata)
488488

@@ -542,20 +542,19 @@ def _agv(self, data2D, run='phi'):
542542
:return: SasData object
543543
"""
544544
if not ("Qx" in data2D._data_contents and
545-
"Qy" in data2D._data_contents and
546-
"I" in data2D._data_contents):
547-
raise RuntimeError("For averaging the SasData object must contain 'Qx', 'Qy', and 'I' data.")
545+
"Qy" in data2D._data_contents):
546+
raise RuntimeError("For averaging the SasData object must contain 'Qx' and 'Qy' data.")
548547

549548
# Get all the data & info
550-
finite_mask = np.isfinite(data2D._data_contents["I"].value)
551-
data = data2D._data_contents["I"].value[finite_mask]
552-
err_data = np.sqrt(data2D._data_contents["I"].variance.value)[finite_mask]
549+
finite_mask = np.isfinite(data2D.ordinate.value)
550+
data = data2D.ordinate.value[finite_mask]
551+
err_data = np.sqrt(data2D.ordinate.variance.value)[finite_mask]
553552
qx_data = data2D._data_contents["Qx"].value[finite_mask]
554553
qy_data = data2D._data_contents["Qy"].value[finite_mask]
555554
q_data = np.sqrt(data2D._data_contents["Qx"].value ** 2 +
556555
data2D._data_contents["Qy"].value ** 2
557556
)[finite_mask]
558-
mask_data = (data2D.mask if data2D.mask is not None else np.ones_like(data2D._data_contents["I"].value, dtype=bool))[finite_mask]
557+
mask_data = (data2D.mask if data2D.mask is not None else np.ones_like(data2D.ordinate.value, dtype=bool))[finite_mask]
559558

560559
dq_data = None
561560
if data2D._data_contents["Qx"].has_variance and data2D._data_contents["Qy"].has_variance:
@@ -726,7 +725,7 @@ def _agv(self, data2D, run='phi'):
726725
#return Data1D(x=x[idx], y=y[idx], dy=y_err[idx], dx=d_x)
727726
data_contents = {
728727
"Q": Quantity(x[idx], data2D._data_contents["Qx"].units, dQ),
729-
"I": Quantity(y[idx], data2D._data_contents["I"].units, y_err[idx]),
728+
"I": Quantity(y[idx], data2D.ordinate.units, y_err[idx]),
730729
}
731730
return SasData("agv", data_contents, one_dim, data2D.metadata)
732731

sasdata/data_util/roi.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,8 @@ def validate_and_assign_data(self, data2d: SasData = None) -> None:
3939
msg = "Data supplied must be of type SasData."
4040
raise TypeError(msg)
4141
if not ("Qx" in data2d._data_contents and
42-
"Qy" in data2d._data_contents and
43-
"I" in data2d._data_contents):
44-
msg = "SasData object must contain 'Qx', 'Qy', and 'I' data."
42+
"Qy" in data2d._data_contents):
43+
msg = "SasData object must contain 'Qx' and 'Qy' data."
4544
raise TypeError(msg)
4645
if len(data2d.metadata.instrument.detector) > 1:
4746
msg = (f"Invalid number of detectors: {len(data2d.metadata.instrument.detector)}."
@@ -50,14 +49,14 @@ def validate_and_assign_data(self, data2d: SasData = None) -> None:
5049

5150
# Only use data which is finite and not masked off
5251
if data2d.mask is not None:
53-
valid_data = np.isfinite(data2d._data_contents["I"].value) & data2d.mask
52+
valid_data = np.isfinite(data2d.ordinate.value) & data2d.mask
5453
else:
55-
valid_data = np.isfinite(data2d._data_contents["I"].value)
54+
valid_data = np.isfinite(data2d.ordinate.value)
5655

5756
# Assign properties of the SasData object to variables for reference
5857
# during data processing.
59-
self.data = data2d._data_contents["I"].value[valid_data]
60-
self.err_data = np.sqrt(data2d._data_contents["I"].variance.value)[valid_data]
58+
self.data = data2d.ordinate.value[valid_data]
59+
self.err_data = np.sqrt(data2d.ordinate.variance.value)[valid_data]
6160

6261
self.qx_data = data2d._data_contents["Qx"].value[valid_data] - self.center_x
6362
self.qy_data = data2d._data_contents["Qy"].value[valid_data] - self.center_y

0 commit comments

Comments
 (0)