nxs-analysis-tools 0.0.42__py3-none-any.whl → 0.0.43__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of nxs-analysis-tools might be problematic. Click here for more details.
- _meta/__init__.py +1 -1
- nxs_analysis_tools/chess.py +7 -1
- nxs_analysis_tools/datareduction.py +3 -3
- nxs_analysis_tools/pairdistribution.py +58 -14
- {nxs_analysis_tools-0.0.42.dist-info → nxs_analysis_tools-0.0.43.dist-info}/METADATA +1 -1
- nxs_analysis_tools-0.0.43.dist-info/RECORD +11 -0
- nxs_analysis_tools-0.0.42.dist-info/RECORD +0 -11
- {nxs_analysis_tools-0.0.42.dist-info → nxs_analysis_tools-0.0.43.dist-info}/LICENSE +0 -0
- {nxs_analysis_tools-0.0.42.dist-info → nxs_analysis_tools-0.0.43.dist-info}/WHEEL +0 -0
- {nxs_analysis_tools-0.0.42.dist-info → nxs_analysis_tools-0.0.43.dist-info}/top_level.txt +0 -0
_meta/__init__.py
CHANGED
nxs_analysis_tools/chess.py
CHANGED
|
@@ -202,7 +202,13 @@ class TempDependence:
|
|
|
202
202
|
path = os.path.join(self.sample_directory, item)
|
|
203
203
|
|
|
204
204
|
# Save dataset
|
|
205
|
-
|
|
205
|
+
try:
|
|
206
|
+
self.datasets[self.temperatures[i]] = load_transform(path)
|
|
207
|
+
except Exception as e:
|
|
208
|
+
# Report temperature that was unable to load, then raise exception.
|
|
209
|
+
temp_failed = self.temperatures[i]
|
|
210
|
+
print(f"Failed to load data for temperature {temp_failed} K from file {item}. Error: {e}")
|
|
211
|
+
raise # Re-raise the exception
|
|
206
212
|
|
|
207
213
|
# Initialize scissors object
|
|
208
214
|
self.scissors[self.temperatures[i]] = Scissors()
|
|
@@ -185,14 +185,14 @@ def plot_slice(data, X=None, Y=None, transpose=False, vmin=None, vmax=None,
|
|
|
185
185
|
"""
|
|
186
186
|
if isinstance(data, np.ndarray):
|
|
187
187
|
if X is None:
|
|
188
|
-
X = NXfield(np.linspace(0, data.shape[
|
|
188
|
+
X = NXfield(np.linspace(0, data.shape[0], data.shape[0]), name='x')
|
|
189
189
|
if Y is None:
|
|
190
|
-
Y = NXfield(np.linspace(0, data.shape[
|
|
190
|
+
Y = NXfield(np.linspace(0, data.shape[1], data.shape[1]), name='y')
|
|
191
191
|
if transpose:
|
|
192
192
|
X, Y = Y, X
|
|
193
193
|
data = data.transpose()
|
|
194
194
|
data = NXdata(NXfield(data, name='value'), (X, Y))
|
|
195
|
-
data_arr = data
|
|
195
|
+
data_arr = data[data.signal].nxdata.transpose()
|
|
196
196
|
elif isinstance(data, (NXdata, NXfield)):
|
|
197
197
|
if X is None:
|
|
198
198
|
X = data[data.axes[0]]
|
|
@@ -185,23 +185,58 @@ class Symmetrizer2D:
|
|
|
185
185
|
q1 = data_padded[data.axes[0]]
|
|
186
186
|
q2 = data_padded[data.axes[1]]
|
|
187
187
|
|
|
188
|
-
# Define signal to be symmetrized
|
|
189
|
-
counts = data_padded[data.signal].nxdata
|
|
190
|
-
|
|
191
188
|
# Calculate the angle for each data point
|
|
192
189
|
theta = np.arctan2(q1.reshape((-1, 1)), q2.reshape((1, -1)))
|
|
193
190
|
# Create a boolean array for the range of angles
|
|
194
191
|
symmetrization_mask = np.logical_and(theta >= theta_min * np.pi / 180,
|
|
195
192
|
theta <= theta_max * np.pi / 180)
|
|
196
|
-
self.symmetrization_mask = NXdata(NXfield(p.unpad(symmetrization_mask),
|
|
197
|
-
name='mask'),
|
|
198
|
-
(data[data.axes[0]], data[data.axes[1]])
|
|
199
|
-
)
|
|
200
193
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
194
|
+
# Define signal to be transformed
|
|
195
|
+
counts = symmetrization_mask
|
|
196
|
+
|
|
197
|
+
# Scale and skew counts
|
|
198
|
+
skew_angle_adj = 90 - self.skew_angle
|
|
199
|
+
|
|
200
|
+
scale2 = counts.shape[0] / counts.shape[1]
|
|
201
|
+
counts_unscaled2 = ndimage.affine_transform(counts,
|
|
202
|
+
Affine2D().scale(scale2, 1).inverted().get_matrix()[:2, :2],
|
|
203
|
+
offset=[-(1 - scale2) * counts.shape[
|
|
204
|
+
0] / 2 / scale2, 0],
|
|
205
|
+
order=0,
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
scale1 = np.cos(skew_angle_adj * np.pi / 180)
|
|
209
|
+
counts_unscaled1 = ndimage.affine_transform(counts_unscaled2,
|
|
210
|
+
Affine2D().scale(scale1, 1).inverted().get_matrix()[:2, :2],
|
|
211
|
+
offset=[-(1 - scale1) * counts.shape[
|
|
212
|
+
0] / 2 / scale1, 0],
|
|
213
|
+
order=0,
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
mask = ndimage.affine_transform(counts_unscaled1,
|
|
217
|
+
t.get_matrix()[:2, :2],
|
|
218
|
+
offset=[-counts.shape[0] / 2
|
|
219
|
+
* np.sin(skew_angle_adj * np.pi / 180), 0],
|
|
220
|
+
order=0,
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
# Convert mask to nxdata
|
|
224
|
+
mask = array_to_nxdata(mask, data_padded)
|
|
225
|
+
|
|
226
|
+
# Save mask for user interaction
|
|
227
|
+
self.symmetrization_mask = p.unpad(mask)
|
|
228
|
+
|
|
229
|
+
# Perform masking
|
|
230
|
+
wedge = mask * data_padded
|
|
231
|
+
|
|
232
|
+
# Save wedge for user interaction
|
|
233
|
+
self.wedge = p.unpad(wedge)
|
|
234
|
+
|
|
235
|
+
# Convert wedge back to array for further transformations
|
|
236
|
+
wedge = wedge[data.signal].nxdata
|
|
237
|
+
|
|
238
|
+
# Define signal to be transformed
|
|
239
|
+
counts = wedge
|
|
205
240
|
|
|
206
241
|
# Scale and skew counts
|
|
207
242
|
skew_angle_adj = 90 - self.skew_angle
|
|
@@ -216,7 +251,7 @@ class Symmetrizer2D:
|
|
|
216
251
|
Affine2D().scale(scale1, 1).get_matrix()[:2, :2],
|
|
217
252
|
offset=[(1 - scale1) * counts.shape[0] / 2, 0],
|
|
218
253
|
order=0,
|
|
219
|
-
)
|
|
254
|
+
)
|
|
220
255
|
|
|
221
256
|
scale2 = counts.shape[0] / counts.shape[1]
|
|
222
257
|
wedge = ndimage.affine_transform(wedge,
|
|
@@ -325,15 +360,24 @@ class Symmetrizer2D:
|
|
|
325
360
|
symm_test = s.symmetrize_2d(data)
|
|
326
361
|
fig, axesarr = plt.subplots(2, 2, figsize=(10, 8))
|
|
327
362
|
axes = axesarr.reshape(-1)
|
|
363
|
+
|
|
364
|
+
# Plot the data
|
|
328
365
|
plot_slice(data, skew_angle=s.skew_angle, ax=axes[0], title='data', **kwargs)
|
|
329
|
-
|
|
366
|
+
|
|
367
|
+
# Filter kwargs to exclude 'vmin' and 'vmax'
|
|
368
|
+
filtered_kwargs = {key: value for key, value in kwargs.items() if key not in ('vmin', 'vmax')}
|
|
369
|
+
# Plot the mask
|
|
370
|
+
plot_slice(s.symmetrization_mask, skew_angle=s.skew_angle, ax=axes[1], title='mask', **filtered_kwargs)
|
|
371
|
+
|
|
372
|
+
# Plot the wedge
|
|
330
373
|
plot_slice(s.wedge, skew_angle=s.skew_angle, ax=axes[2], title='wedge', **kwargs)
|
|
374
|
+
|
|
375
|
+
# Plot the symmetrized data
|
|
331
376
|
plot_slice(symm_test, skew_angle=s.skew_angle, ax=axes[3], title='symmetrized', **kwargs)
|
|
332
377
|
plt.subplots_adjust(wspace=0.4)
|
|
333
378
|
plt.show()
|
|
334
379
|
return fig, axesarr
|
|
335
380
|
|
|
336
|
-
|
|
337
381
|
class Symmetrizer3D:
|
|
338
382
|
"""
|
|
339
383
|
A class to symmetrize 3D datasets by performing sequential 2D symmetrization on
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
_meta/__init__.py,sha256=kxRgW9usOeluI-Bk-1GiZ0pt5jesv-HKRThTZKAvTtI,352
|
|
2
|
+
nxs_analysis_tools/__init__.py,sha256=bxbTLpIcKasH3fuRZOvJ9zeu7IBBju82mOTgUV4ZqHE,530
|
|
3
|
+
nxs_analysis_tools/chess.py,sha256=e3ZnyepnLATXZRk2cgh6iCZ7Pk3NKJ4IvRf4xNLuu94,24984
|
|
4
|
+
nxs_analysis_tools/datareduction.py,sha256=arEWF8VI8qJfT--G77OJL37C_3usjfd3-wT2gTCtwZM,41964
|
|
5
|
+
nxs_analysis_tools/fitting.py,sha256=vPx75lKvm5pWOGBtRtff8k6J5dA6kRk3EJyzxCH5Tyk,8809
|
|
6
|
+
nxs_analysis_tools/pairdistribution.py,sha256=8E1grptUMb4UXVT9mBSk45xk2JwjCvTG0Rl6BlbJAdo,60013
|
|
7
|
+
nxs_analysis_tools-0.0.43.dist-info/LICENSE,sha256=tdnoYVH1-ogW_5-gGs9bK-IkCamH1ATJqrdL37kWTHk,1102
|
|
8
|
+
nxs_analysis_tools-0.0.43.dist-info/METADATA,sha256=aBNS2AJAECd6RLqqQCFBjJgrW0piIhFaDxQCekvMqFc,3895
|
|
9
|
+
nxs_analysis_tools-0.0.43.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
10
|
+
nxs_analysis_tools-0.0.43.dist-info/top_level.txt,sha256=8U000GNPzo6T6pOMjRdgOSO5heMzLMGjkxa1CDtyMHM,25
|
|
11
|
+
nxs_analysis_tools-0.0.43.dist-info/RECORD,,
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
_meta/__init__.py,sha256=RgVI9i9hMP8JG47ZopZMSrPEHTeCD680Z5-BWeTUZzY,352
|
|
2
|
-
nxs_analysis_tools/__init__.py,sha256=bxbTLpIcKasH3fuRZOvJ9zeu7IBBju82mOTgUV4ZqHE,530
|
|
3
|
-
nxs_analysis_tools/chess.py,sha256=LA2z-qk7IgNGPm8ov7JLgIupv__vmHfAc9NFCblI5fQ,24632
|
|
4
|
-
nxs_analysis_tools/datareduction.py,sha256=RcfAqokK04CKuj867MdiF5EhzhhodJx99G40v8wh8W8,41932
|
|
5
|
-
nxs_analysis_tools/fitting.py,sha256=vPx75lKvm5pWOGBtRtff8k6J5dA6kRk3EJyzxCH5Tyk,8809
|
|
6
|
-
nxs_analysis_tools/pairdistribution.py,sha256=bO-Ljst8eD5wmeq6oH8ylhHqaUyu2CvARznDupCygWQ,58245
|
|
7
|
-
nxs_analysis_tools-0.0.42.dist-info/LICENSE,sha256=tdnoYVH1-ogW_5-gGs9bK-IkCamH1ATJqrdL37kWTHk,1102
|
|
8
|
-
nxs_analysis_tools-0.0.42.dist-info/METADATA,sha256=8lqJPJaka29fMmA2GTTtUzCnJnkhjVjKYcLv_gLqmu4,3895
|
|
9
|
-
nxs_analysis_tools-0.0.42.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
10
|
-
nxs_analysis_tools-0.0.42.dist-info/top_level.txt,sha256=8U000GNPzo6T6pOMjRdgOSO5heMzLMGjkxa1CDtyMHM,25
|
|
11
|
-
nxs_analysis_tools-0.0.42.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|