Skip to content

Commit 0d76d66

Browse files
committed
Uses ordinate property in manipulations code
1 parent f7053ec commit 0d76d66

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)
@@ -205,7 +205,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
205205

206206
data_contents = {
207207
"Q": Quantity(qx_data, data2d._data_contents["Qx"].units, None),
208-
"I": Quantity(intensity, data2d._data_contents["I"].units, error),
208+
"I": Quantity(intensity, data2d.ordinate.units, error),
209209
}
210210
return SasData(f"{data2d.name}: Slab X Average", data_contents, one_dim, data2d.metadata)
211211

@@ -278,7 +278,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
278278

279279
data_contents = {
280280
"Q": Quantity(qy_data, data2d._data_contents["Qy"].units, None),
281-
"I": Quantity(intensity, data2d._data_contents["I"].units, error),
281+
"I": Quantity(intensity, data2d.ordinate.units, error),
282282
}
283283
return SasData(f"{data2d.name}: Slab Y Average", data_contents, one_dim, data2d.metadata)
284284

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

330-
data_all = data2D._data_contents["I"].value[finite_mask]
330+
data_all = data2D.ordinate.value[finite_mask]
331331
qx_all = data2D._data_contents["Qx"].value[finite_mask]
332332
qy_all = data2D._data_contents["Qy"].value[finite_mask]
333333
q_all = np.sqrt(data2D._data_contents["Qx"].value**2 + data2D._data_contents["Qy"].value**2)[finite_mask]
334-
err_all = np.sqrt(data2D._data_contents["I"].variance.value)[finite_mask]
335-
mask_all = (data2D.mask if data2D.mask is not None else np.ones_like(data2D._data_contents["I"].value, dtype=bool))[finite_mask]
334+
err_all = np.sqrt(data2D.ordinate.variance.value)[finite_mask]
335+
mask_all = (data2D.mask if data2D.mask is not None else np.ones_like(data2D.ordinate.value, dtype=bool))[finite_mask]
336336

337337
# Optional mask handling: legacy used an ismask flag to optionally skip masked points
338338
if ismask:
@@ -385,7 +385,7 @@ def __call__(self, data2D: SasData, ismask: bool = False) -> SasData:
385385

386386
data_contents = {
387387
"Q": Quantity(x, data2D._data_contents["Qx"].units, dQ),
388-
"I": Quantity(intensity, data2D._data_contents["I"].units, error),
388+
"I": Quantity(intensity, data2D.ordinate.units, error),
389389
}
390390
return SasData(f"{data2D.name}: Circular Average", data_contents, one_dim, data2D.metadata)
391391

@@ -435,20 +435,19 @@ def __call__(self, data2D: SasData) -> SasData:
435435
msg = "Data supplied for ring averaging must be of type SasData."
436436
raise RuntimeError(msg)
437437
if not ("Qx" in data2D._data_contents and
438-
"Qy" in data2D._data_contents and
439-
"I" in data2D._data_contents):
440-
msg = "SasData object for ring averaging must contain 'Qx', 'Qy', and 'I' data."
438+
"Qy" in data2D._data_contents):
439+
msg = "SasData object for ring averaging must contain 'Qx' and 'Qy' data."
441440
raise RuntimeError(msg)
442441

443442
# Get data
444-
valid_data = np.isfinite(data2D._data_contents["I"].value)
443+
valid_data = np.isfinite(data2D.ordinate.value)
445444

446-
data = data2D._data_contents["I"].value[valid_data]
447-
err_data = np.sqrt(data2D._data_contents["I"].variance.value)[valid_data]
445+
data = data2D.ordinate.value[valid_data]
446+
err_data = np.sqrt(data2D.ordinate.variance.value)[valid_data]
448447
qx_data = data2D._data_contents["Qx"].value[valid_data]
449448
qy_data = data2D._data_contents["Qy"].value[valid_data]
450449
q_data = np.sqrt(data2D._data_contents["Qx"].value ** 2 + data2D._data_contents["Qy"].value ** 2)[valid_data]
451-
mask_data = (data2D.mask if data2D.mask is not None else np.ones_like(data2D._data_contents["I"].value, dtype=bool))[valid_data]
450+
mask_data = (data2D.mask if data2D.mask is not None else np.ones_like(data2D.ordinate.value, dtype=bool))[valid_data]
452451

453452
# Set space for 1d outputs
454453
phi_bins = np.zeros(self.nbins)
@@ -505,7 +504,7 @@ def __call__(self, data2D: SasData) -> SasData:
505504

506505
data_contents = {
507506
"Phi": Quantity(phi_values[idx], radians, None),
508-
"I": Quantity(phi_bins[idx], data2D._data_contents["I"].units, phi_err[idx]),
507+
"I": Quantity(phi_bins[idx], data2D.ordinate.units, phi_err[idx]),
509508
}
510509
return SasData(f"{data2D.name}: Ring Average", data_contents, angle_dim, data2D.metadata)
511510

@@ -641,7 +640,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
641640

642641
data_contents = {
643642
"Q": Quantity(combined_q[finite], data2d._data_contents["Qx"].units, None),
644-
"I": Quantity(average_intensity[finite], data2d._data_contents["I"].units, combined_err[finite]),
643+
"I": Quantity(average_intensity[finite], data2d.ordinate.units, combined_err[finite]),
645644
}
646645
else:
647646
# The secondary ROI is labelled with negative Q values.
@@ -651,7 +650,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
651650

652651
data_contents = {
653652
"Q": Quantity(combined_q, data2d._data_contents["Qx"].units, None),
654-
"I": Quantity(combined_intensity, data2d._data_contents["I"].units, combined_error),
653+
"I": Quantity(combined_intensity, data2d.ordinate.units, combined_error),
655654
}
656655

657656
return SasData(f"{data2d.name}:SectorQ Average", data_contents, one_dim, data2d.metadata)
@@ -738,7 +737,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
738737

739738
data_contents = {
740739
"Q": Quantity(q_data, data2d._data_contents["Qx"].units, None),
741-
"I": Quantity(intensity, data2d._data_contents["I"].units, error),
740+
"I": Quantity(intensity, data2d.ordinate.units, error),
742741
}
743742
return SasData(f"{data2d.name}: Wedge Q Average", data_contents, one_dim, data2d.metadata)
744743

@@ -846,7 +845,7 @@ def __call__(self, data2d: SasData = None) -> SasData:
846845
# intensity and error returned by DirectionalAverage are already filtered to the populated/finite bins
847846
data_contents = {
848847
"Phi": Quantity(phi_centers, radians, None),
849-
"I": Quantity(intensity, data2d._data_contents["I"].units, error),
848+
"I": Quantity(intensity, data2d.ordinate.units, error),
850849
}
851850
return SasData(f"{data2d.name}: Wedge Phi Average", data_contents, angle_dim, data2d.metadata)
852851

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:
@@ -725,7 +724,7 @@ def _agv(self, data2D, run='phi'):
725724

726725
data_contents = {
727726
"Q": Quantity(x[idx], data2D._data_contents["Qx"].units, dQ),
728-
"I": Quantity(y[idx], data2D._data_contents["I"].units, y_err[idx]),
727+
"I": Quantity(y[idx], data2D.ordinate.units, y_err[idx]),
729728
}
730729
return SasData("agv", data_contents, one_dim, data2D.metadata)
731730

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)