pyTEMlib 0.2023.3.0__py2.py3-none-any.whl → 0.2023.8.0__py2.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 pyTEMlib might be problematic. Click here for more details.
- pyTEMlib/crystal_tools.py +47 -5
- pyTEMlib/eels_dialog.py +673 -42
- pyTEMlib/eels_dialog_utilities.py +8 -4
- pyTEMlib/eels_dlg.py +6 -5
- pyTEMlib/eels_tools.py +118 -38
- pyTEMlib/file_tools.py +95 -13
- pyTEMlib/graph_tools.py +716 -10
- pyTEMlib/image_dialog.py +1 -1
- pyTEMlib/image_dlg.py +1 -1
- pyTEMlib/image_tools.py +82 -39
- pyTEMlib/info_dialog.py +356 -15
- pyTEMlib/info_dlg.py +1 -1
- pyTEMlib/info_widget.py +655 -0
- pyTEMlib/interactive_eels.py +12 -4
- pyTEMlib/peak_dialog.py +807 -120
- pyTEMlib/peak_dlg.py +53 -24
- pyTEMlib/version.py +2 -2
- pyTEMlib/viz.py +217 -0
- pyTEMlib/xrpa_x_sections.py +39 -25
- {pyTEMlib-0.2023.3.0.dist-info → pyTEMlib-0.2023.8.0.dist-info}/METADATA +5 -5
- pyTEMlib-0.2023.8.0.dist-info/RECORD +40 -0
- {pyTEMlib-0.2023.3.0.dist-info → pyTEMlib-0.2023.8.0.dist-info}/WHEEL +1 -1
- pyTEMlib-0.2023.3.0.dist-info/RECORD +0 -39
- {pyTEMlib-0.2023.3.0.dist-info → pyTEMlib-0.2023.8.0.dist-info}/LICENSE +0 -0
- {pyTEMlib-0.2023.3.0.dist-info → pyTEMlib-0.2023.8.0.dist-info}/entry_points.txt +0 -0
- {pyTEMlib-0.2023.3.0.dist-info → pyTEMlib-0.2023.8.0.dist-info}/top_level.txt +0 -0
pyTEMlib/peak_dlg.py
CHANGED
|
@@ -14,14 +14,14 @@ try:
|
|
|
14
14
|
|
|
15
15
|
except:
|
|
16
16
|
Qt_available = False
|
|
17
|
-
print('Qt dialogs are not available')
|
|
17
|
+
# print('Qt dialogs are not available')
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
if Qt_available:
|
|
21
21
|
class UiDialog(object):
|
|
22
22
|
"""GUI definitions for peak_fit_dialog"""
|
|
23
23
|
|
|
24
|
-
def __init__(self, dialog):
|
|
24
|
+
def __init__(self, dialog, mode=None):
|
|
25
25
|
dialog.setObjectName('Fit Peaks')
|
|
26
26
|
dialog.resize(371, 184)
|
|
27
27
|
|
|
@@ -224,30 +224,59 @@ if Qt_available:
|
|
|
224
224
|
self.separator3.setText("Analysis")
|
|
225
225
|
self.layout.addWidget(self.separator3, row, 0, 1, 4)
|
|
226
226
|
######################################################################
|
|
227
|
+
if mode == 'low_loss':
|
|
228
|
+
row += 1
|
|
229
|
+
self.zl_button = QtWidgets.QPushButton('Zero_Loss', dialog)
|
|
230
|
+
self.zl_button.setCheckable(False)
|
|
231
|
+
self.drude_button = QtWidgets.QPushButton('Plasmon', dialog)
|
|
232
|
+
self.drude_button.setCheckable(False)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
self.layout.addWidget(self.zl_button, row, 0)
|
|
236
|
+
self.layout.addWidget(self.drude_button, row, 1)
|
|
237
|
+
|
|
238
|
+
self.model_list = ['None', 'Zero Loss', 'Plasmon', 'Both']
|
|
239
|
+
self.list_model = QtWidgets.QComboBox()
|
|
240
|
+
self.list_model.setEditable(False)
|
|
241
|
+
self.list_model.addItems(self.model_list)
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
self.layout.addWidget(self.list_model, row, 2)
|
|
245
|
+
|
|
246
|
+
else:
|
|
247
|
+
row += 1
|
|
248
|
+
self.labelwl = QtWidgets.QLabel('White-Line Ratio:')
|
|
249
|
+
self.wl_list = ['Ratio']
|
|
250
|
+
self.listwl = QtWidgets.QComboBox()
|
|
251
|
+
self.listwl.setEditable(False)
|
|
252
|
+
self.listwl.addItems(self.wl_list)
|
|
253
|
+
self.unitswl = QtWidgets.QLabel('')
|
|
254
|
+
|
|
255
|
+
self.layout.addWidget(self.labelwl, row, 0)
|
|
256
|
+
self.layout.addWidget(self.listwl, row, 1)
|
|
257
|
+
self.layout.addWidget(self.unitswl, row, 2)
|
|
258
|
+
|
|
259
|
+
row += 1
|
|
260
|
+
self.labelwls = QtWidgets.QLabel('White-Line Sum:')
|
|
261
|
+
self.wls_list = ['Sum']
|
|
262
|
+
self.listwls = QtWidgets.QComboBox()
|
|
263
|
+
self.listwls.setEditable(False)
|
|
264
|
+
self.listwls.addItems(self.wls_list)
|
|
265
|
+
self.unitswls = QtWidgets.QLabel('')
|
|
266
|
+
|
|
267
|
+
self.layout.addWidget(self.labelwls, row, 0)
|
|
268
|
+
self.layout.addWidget(self.listwls, row, 1)
|
|
269
|
+
self.layout.addWidget(self.unitswls, row, 2)
|
|
227
270
|
|
|
228
271
|
row += 1
|
|
229
|
-
self.
|
|
230
|
-
self.
|
|
231
|
-
self.
|
|
232
|
-
self.
|
|
233
|
-
|
|
234
|
-
self.
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
self.layout.addWidget(self.listwl, row, 1)
|
|
238
|
-
self.layout.addWidget(self.unitswl, row, 2)
|
|
239
|
-
|
|
240
|
-
row += 1
|
|
241
|
-
self.labelwls = QtWidgets.QLabel('White-Line Sum:')
|
|
242
|
-
self.wls_list = ['Sum']
|
|
243
|
-
self.listwls = QtWidgets.QComboBox()
|
|
244
|
-
self.listwls.setEditable(False)
|
|
245
|
-
self.listwls.addItems(self.wls_list)
|
|
246
|
-
self.unitswls = QtWidgets.QLabel('')
|
|
247
|
-
|
|
248
|
-
self.layout.addWidget(self.labelwls, row, 0)
|
|
249
|
-
self.layout.addWidget(self.listwls, row, 1)
|
|
250
|
-
self.layout.addWidget(self.unitswls, row, 2)
|
|
272
|
+
self.progress = QtWidgets.QProgressBar()
|
|
273
|
+
self.progress.setGeometry(0, 0, 300, 25)
|
|
274
|
+
self.progress.setMaximum(100)
|
|
275
|
+
self.do_all_button = QtWidgets.QPushButton('Do All', dialog)
|
|
276
|
+
|
|
277
|
+
self.layout.addWidget(self.do_all_button, row, 0)
|
|
278
|
+
self.layout.addWidget(self.progress, row, 1)
|
|
279
|
+
|
|
251
280
|
|
|
252
281
|
dialog.setLayout(self.layout)
|
|
253
282
|
dialog.setWindowTitle('Peak Fit Input')
|
pyTEMlib/version.py
CHANGED
pyTEMlib/viz.py
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
import sidpy
|
|
5
|
+
from sidpy.hdf.dtype_utils import is_complex_dtype
|
|
6
|
+
|
|
7
|
+
import plotly.graph_objects as go
|
|
8
|
+
from plotly.subplots import make_subplots
|
|
9
|
+
from ipywidgets import widgets
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
import pyTEMlib.eels_tools as eels
|
|
13
|
+
import pyTEMlib.file_tools as ft
|
|
14
|
+
|
|
5
15
|
|
|
6
16
|
from bokeh.layouts import column
|
|
7
17
|
from bokeh.plotting import figure # , show, output_notebook
|
|
@@ -262,3 +272,210 @@ class CurveVisualizer(object):
|
|
|
262
272
|
else:
|
|
263
273
|
legline.set_alpha(0.2)
|
|
264
274
|
self.fig.canvas.draw()
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
def verify_spectrum_dataset(datasets):
|
|
278
|
+
if isinstance(datasets, sidpy.Dataset):
|
|
279
|
+
datasets = {'Channel_000': datasets}
|
|
280
|
+
|
|
281
|
+
first_dataset = datasets[list(datasets)[0]]
|
|
282
|
+
has_complex_dataset = False
|
|
283
|
+
for dat in datasets.values():
|
|
284
|
+
if is_complex_dtype(dat.dtype):
|
|
285
|
+
has_complex_dataset = True
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
if first_dataset.data_type.name != 'SPECTRUM':
|
|
289
|
+
raise TypeError('We need a spectrum dataset here')
|
|
290
|
+
if first_dataset.ndim >1:
|
|
291
|
+
if first_dataset.shape[1] >1:
|
|
292
|
+
raise TypeError('Wrong dimensions for spectrum datasset')
|
|
293
|
+
|
|
294
|
+
energy_dim = first_dataset.get_spectrum_dims()
|
|
295
|
+
energy_dim = first_dataset.get_dimension_by_number(energy_dim[0])[0]
|
|
296
|
+
energy_dim.label = f'{energy_dim.quantity} ({energy_dim.units})'
|
|
297
|
+
|
|
298
|
+
default_plot_dictionary = {'title': '',
|
|
299
|
+
'theme': "plotly_white",
|
|
300
|
+
'y_scale': 1.0,
|
|
301
|
+
'y_axis_label': first_dataset.data_descriptor,
|
|
302
|
+
'x_axis_label': energy_dim.label,
|
|
303
|
+
'show_legend': True,
|
|
304
|
+
'height': 500,
|
|
305
|
+
'figure_size': None,
|
|
306
|
+
'scale_bar': False,
|
|
307
|
+
'colorbar': True,
|
|
308
|
+
'set_title': True,
|
|
309
|
+
'has_complex_dataset': has_complex_dataset}
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
default_plot_dictionary.update(first_dataset.metadata['plot_parameter'])
|
|
313
|
+
first_dataset.metadata['plot_parameter'] = default_plot_dictionary
|
|
314
|
+
|
|
315
|
+
return datasets
|
|
316
|
+
|
|
317
|
+
def spectrum_view_plotly(datasets, figure=None, show=False):
|
|
318
|
+
|
|
319
|
+
datasets = verify_spectrum_dataset(datasets)
|
|
320
|
+
first_dataset = datasets[list(datasets)[0]]
|
|
321
|
+
plot_dic = first_dataset.metadata['plot_parameter']
|
|
322
|
+
|
|
323
|
+
if figure is None:
|
|
324
|
+
if plot_dic['has_complex_dataset']:
|
|
325
|
+
fig = make_subplots(rows=1, cols=2, subplot_titles=("Magnitude", "Phase"))
|
|
326
|
+
else:
|
|
327
|
+
fig = go.Figure()
|
|
328
|
+
|
|
329
|
+
else:
|
|
330
|
+
fig = figure
|
|
331
|
+
|
|
332
|
+
for key, dat in datasets.items():
|
|
333
|
+
if dat.data_type == first_dataset.data_type:
|
|
334
|
+
energy_dim = dat.get_spectrum_dims()
|
|
335
|
+
energy_dim = dat.get_dimension_by_number(energy_dim[0])[0]
|
|
336
|
+
if is_complex_dtype(dat.dtype):
|
|
337
|
+
fig.add_trace(go.Scatter(x=energy_dim.values, y=np.abs(dat).squeeze()*plot_dic['y_scale'], name=f'{dat.title}-Magnitude', mode="lines+markers", marker=dict(size=2)), row=1, col=1)
|
|
338
|
+
fig.add_trace(go.Scatter(x=energy_dim.values, y=np.angle(dat).squeeze()*plot_dic['y_scale'], name=f'{dat.title}-Phase', mode="lines+markers", marker=dict(size=2)), row=1, col=2)
|
|
339
|
+
else:
|
|
340
|
+
fig.add_trace(go.Scatter(x=energy_dim.values, y=np.array(dat).squeeze()*plot_dic['y_scale'], name=dat.title, mode="lines+markers", marker=dict(size=2)))
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
fig.update_layout(
|
|
344
|
+
selectdirection='h',
|
|
345
|
+
showlegend = plot_dic['show_legend'],
|
|
346
|
+
dragmode='select',
|
|
347
|
+
title_text=plot_dic['title'],
|
|
348
|
+
yaxis_title_text=plot_dic['y_axis_label'],
|
|
349
|
+
xaxis_title_text=plot_dic['x_axis_label'],
|
|
350
|
+
height=plot_dic['height'],
|
|
351
|
+
template=plot_dic['theme']
|
|
352
|
+
)
|
|
353
|
+
fig.update_layout(hovermode='x unified')
|
|
354
|
+
|
|
355
|
+
if plot_dic['has_complex_dataset']:
|
|
356
|
+
fig.update_yaxes(title_text='angle (rad)', row = 1, col = 2)
|
|
357
|
+
fig.update_xaxes(title_text=plot_dic['x_axis_label'], row = 1, col = 2)
|
|
358
|
+
|
|
359
|
+
config = {'displayModeBar': True}
|
|
360
|
+
if show:
|
|
361
|
+
fig.show(config=config)
|
|
362
|
+
return fig
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
class SpectrumView(object):
|
|
366
|
+
def __init__(self, datasets, figure=None, **kwargs):
|
|
367
|
+
first_dataset = datasets[list(datasets)[0]]
|
|
368
|
+
if first_dataset.data_type.name != 'SPECTRUM':
|
|
369
|
+
raise TypeError('We need a spectrum dataset here')
|
|
370
|
+
if first_dataset.ndim >1:
|
|
371
|
+
if first_dataset.shape[1] >1:
|
|
372
|
+
raise TypeError('Wrong dimensions for spectrum datasset')
|
|
373
|
+
|
|
374
|
+
energy_dim = first_dataset.get_spectrum_dims()
|
|
375
|
+
energy_dim = first_dataset.get_dimension_by_number(energy_dim[0])[0]
|
|
376
|
+
|
|
377
|
+
if 'plot_parameter' not in first_dataset.metadata:
|
|
378
|
+
first_dataset.metadata['plot_parameter'] = {}
|
|
379
|
+
plot_dic = first_dataset.metadata['plot_parameter']
|
|
380
|
+
energy_dim.label = f'{energy_dim.quantity} ({energy_dim.units})'
|
|
381
|
+
|
|
382
|
+
plot_dic['title'] = kwargs.pop('title', '')
|
|
383
|
+
plot_dic['theme'] = kwargs.pop('theme', "plotly_white")
|
|
384
|
+
plot_dic['y_scale'] = kwargs.pop('y_scale', 1.0)
|
|
385
|
+
plot_dic['y_axis_label'] = kwargs.pop('y_axis_label', first_dataset.data_descriptor)
|
|
386
|
+
plot_dic['x_axis_label'] = kwargs.pop('x_axis_label', energy_dim.label)
|
|
387
|
+
plot_dic['height'] = kwargs.pop('height', 500)
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
if 'incident_beam_current_counts' in first_dataset.metadata['experiment']:
|
|
391
|
+
plot_dic['y_scale'] = 1e6/first_dataset.metadata['experiment']['incident_beam_current_counts']
|
|
392
|
+
plot_dic['y_axis_label'] = ' probability (ppm)'
|
|
393
|
+
# plot_dic['y_scale'] = 1e6/first_dataset.sum()
|
|
394
|
+
|
|
395
|
+
def selection_fn(trace,points,selector):
|
|
396
|
+
self.energy_selection = [points.point_inds[0], points.point_inds[-1]]
|
|
397
|
+
|
|
398
|
+
self.fig = spectrum_view_plotly(datasets)
|
|
399
|
+
|
|
400
|
+
self.spectrum_widget = go.FigureWidget(self.fig)
|
|
401
|
+
|
|
402
|
+
self.spectrum_widget.data[0].on_selection(selection_fn)
|
|
403
|
+
self.spectrum_widget.data[0].on_click(self.identify_edges)
|
|
404
|
+
|
|
405
|
+
self.edge_annotation = 0
|
|
406
|
+
self.edge_line = 0
|
|
407
|
+
self.regions = {}
|
|
408
|
+
self.initialize_edge()
|
|
409
|
+
|
|
410
|
+
self.plot = display(self.spectrum_widget)
|
|
411
|
+
|
|
412
|
+
def initialize_edge(self):
|
|
413
|
+
""" Intitalizes edge cursor
|
|
414
|
+
Should be run first so that edge cursor is first
|
|
415
|
+
"""
|
|
416
|
+
self.edge_annotation = len(self.spectrum_widget.layout.annotations)
|
|
417
|
+
self.edge_line = len(self.spectrum_widget.layout.shapes)
|
|
418
|
+
self.spectrum_widget.add_vline(x=200, line_dash="dot", line_color='blue',
|
|
419
|
+
annotation_text= " ",
|
|
420
|
+
annotation_position="top right",
|
|
421
|
+
visible = False)
|
|
422
|
+
|
|
423
|
+
def identify_edges(self, trace, points, selector):
|
|
424
|
+
energy = points.xs[0]
|
|
425
|
+
edge_names = find_edge_names(points.xs[0])
|
|
426
|
+
self.spectrum_widget.layout['annotations'][self.edge_annotation].x=energy
|
|
427
|
+
|
|
428
|
+
self.spectrum_widget.layout['annotations'][self.edge_annotation].text = f"{edge_names}"
|
|
429
|
+
self.spectrum_widget.layout['annotations'][self.edge_annotation].visible = True
|
|
430
|
+
self.spectrum_widget.layout['shapes'][self.edge_line].x0 = energy
|
|
431
|
+
self.spectrum_widget.layout['shapes'][self.edge_line].x1 = energy
|
|
432
|
+
self.spectrum_widget.layout['shapes'][self.edge_line].visible = True
|
|
433
|
+
self.spectrum_widget.layout.update()
|
|
434
|
+
|
|
435
|
+
def add_region(self, text, start, end, color='blue'):
|
|
436
|
+
if text not in self.regions:
|
|
437
|
+
self.regions[text] = {'annotation': len(self.spectrum_widget.layout.annotations),
|
|
438
|
+
'shape': len(self.spectrum_widget.layout.shapes),
|
|
439
|
+
'start': start,
|
|
440
|
+
'end': end,
|
|
441
|
+
'color': color}
|
|
442
|
+
self.spectrum_widget.add_vrect(x0=start, x1=end,
|
|
443
|
+
annotation_text=text, annotation_position="top left",
|
|
444
|
+
fillcolor=color, opacity=0.15, line_width=0)
|
|
445
|
+
self.spectrum_widget.layout.update()
|
|
446
|
+
else:
|
|
447
|
+
self.update_region(text, start, end)
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
def update_region(self, text, start, end):
|
|
451
|
+
if text in self.regions:
|
|
452
|
+
region = self.regions[text]
|
|
453
|
+
self.spectrum_widget.layout.annotations[region['annotation']].x =start
|
|
454
|
+
self.spectrum_widget.layout['shapes'][region['shape']].x0 = start
|
|
455
|
+
self.spectrum_widget.layout['shapes'][region['shape']].x1 = end
|
|
456
|
+
self.spectrum_widget.layout.update()
|
|
457
|
+
|
|
458
|
+
def regions_visibility(self, visibility=True):
|
|
459
|
+
|
|
460
|
+
for region in self.regions.values():
|
|
461
|
+
self.spectrum_widget.layout.annotations[region['annotation']].visible = visibility
|
|
462
|
+
self.spectrum_widget.layout.shapes[region['shape']].visible = visibility
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
def find_edge_names(energy_value):
|
|
466
|
+
|
|
467
|
+
selected_edges = []
|
|
468
|
+
for shift in [1,2,5,10,20]:
|
|
469
|
+
selected_edge = ''
|
|
470
|
+
edges = eels.find_major_edges(energy_value, shift)
|
|
471
|
+
edges = edges.split('\n')
|
|
472
|
+
for edge in edges[1:]:
|
|
473
|
+
edge = edge[:-3].split(':')
|
|
474
|
+
name = edge[0].strip()
|
|
475
|
+
energy = float(edge[1].strip())
|
|
476
|
+
selected_edge = name
|
|
477
|
+
|
|
478
|
+
if selected_edge != '':
|
|
479
|
+
selected_edges.append(selected_edge)
|
|
480
|
+
if len(selected_edges)>0:
|
|
481
|
+
return selected_edges
|
pyTEMlib/xrpa_x_sections.py
CHANGED
|
@@ -387,31 +387,45 @@ x_sections = {'1': {'name': 'H',
|
|
|
387
387
|
5.849270e+04, 6.252870e+04, 6.684318e+04, 7.145536e+04,
|
|
388
388
|
7.638578e+04, 8.165640e+04, 8.729069e+04, 9.331374e+04,
|
|
389
389
|
9.975239e+04]),
|
|
390
|
-
'dat': np.array([
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
390
|
+
'dat': np.array([0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 1.73384709E+17,
|
|
391
|
+
1.68319106E+17, 4.17741709E+16, 3.70675760E+16, 3.27899957E+16,
|
|
392
|
+
2.89145043E+16, 2.83239362E+16, 2.75089880E+16, 2.72971733E+16,
|
|
393
|
+
3.39872874E+16, 3.34739059E+16, 3.29533443E+16, 3.11062482E+16,
|
|
394
|
+
2.96127749E+16, 2.82646998E+16, 2.69920165E+16, 2.57318984E+16,
|
|
395
|
+
2.44484448E+16, 2.31237053E+16, 2.17576798E+16, 2.03593437E+16,
|
|
396
|
+
1.89430571E+16, 1.75265911E+16, 1.61291524E+16, 1.47677941E+16,
|
|
397
|
+
1.34574149E+16, 1.22096826E+16, 1.10330339E+16, 9.93339235E+15,
|
|
398
|
+
8.91327112E+15, 7.97374718E+15, 7.11320501E+15, 6.32841352E+15,
|
|
399
|
+
5.61416710E+15, 4.96741419E+15, 4.38492371E+15, 3.86202856E+15,
|
|
400
|
+
3.39477965E+15, 2.97833037E+15, 2.60639808E+15, 2.27431568E+15,
|
|
401
|
+
1.98172416E+15, 1.72436928E+15, 1.49846349E+15, 1.30052443E+15,
|
|
402
|
+
1.12741077E+15, 9.76268405E+14, 8.44476568E+14, 7.29737611E+14,
|
|
403
|
+
6.30005189E+14, 5.70840670E+14, 5.51938899E+14, 5.47038440E+14,
|
|
404
|
+
1.46983260E+16, 1.46076765E+16, 1.41693277E+16, 1.28133545E+16,
|
|
405
|
+
1.11572506E+16, 9.66090528E+15, 8.32090792E+15, 7.13205293E+15,
|
|
406
|
+
6.08787816E+15, 5.17851090E+15, 4.39156536E+15, 3.71447627E+15,
|
|
407
|
+
3.13431934E+15, 2.63924731E+15, 2.21813093E+15, 1.86091797E+15,
|
|
408
|
+
1.55881274E+15, 1.30384525E+15, 1.08906872E+15, 9.08505645E+14,
|
|
409
|
+
7.56932467E+14, 6.29897486E+14, 5.23595218E+14, 4.34740738E+14,
|
|
410
|
+
3.60515834E+14, 2.98658755E+14, 2.47194958E+14, 2.04490957E+14,
|
|
411
|
+
1.67685457E+14, 1.37494679E+14, 1.12742872E+14, 9.24481501E+13,
|
|
412
|
+
7.58135144E+13, 6.21730054E+13, 5.09917013E+13, 4.18226370E+13,
|
|
413
|
+
3.43050094E+13, 2.81426371E+13, 2.30895995E+13, 1.89448522E+13,
|
|
414
|
+
1.55477390E+13, 1.27614779E+13, 1.04767510E+13, 8.60308821E+12,
|
|
415
|
+
7.03727482E+12, 5.73622982E+12, 4.67554069E+12, 3.79453506E+12,
|
|
416
|
+
3.08136566E+12, 2.50408080E+12, 2.03665238E+12, 1.65802460E+12,
|
|
417
|
+
1.35144972E+12, 1.10312388E+12, 9.01863997E+11, 7.38641010E+11,
|
|
418
|
+
6.06292710E+11, 4.99021120E+11, 4.11979630E+11, 3.41362757E+11,
|
|
419
|
+
2.83688122E+11, 2.35922107E+11, 1.97382598E+11, 1.66220704E+11,
|
|
420
|
+
1.41029113E+11, 1.20641048E+11, 1.04123090E+11, 9.07249117E+10,
|
|
421
|
+
7.98397891E+10, 7.09812667E+10, 6.37616158E+10, 5.78595243E+10,
|
|
422
|
+
5.30236866E+10, 4.90476730E+10, 4.57681349E+10, 4.30468542E+10,
|
|
423
|
+
4.07797187E+10, 3.88626160E+10, 3.72434899E+10, 3.58648992E+10,
|
|
424
|
+
3.46819678E+10, 3.36534099E+10, 3.27487098E+10, 3.19445318E+10,
|
|
425
|
+
3.12157456E+10, 3.05515808E+10, 2.99358821E+10, 2.93578792E+10,
|
|
426
|
+
2.88103920E+10, 2.82844453E+10, 2.77764490E+10, 2.72810179E+10,
|
|
427
|
+
2.67963571E+10, 2.63170814E+10, 2.58449859E+10, 2.53746854E+10,
|
|
428
|
+
2.49061800E+10,])},
|
|
415
429
|
'6': {'name': 'C',
|
|
416
430
|
'barns': 199447000000.0,
|
|
417
431
|
'NumEdges': 3,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pyTEMlib
|
|
3
|
-
Version: 0.2023.
|
|
3
|
+
Version: 0.2023.8.0
|
|
4
4
|
Summary: pyTEM: TEM Data Quantification library through a model-based approach
|
|
5
5
|
Home-page: https://pycroscopy.github.io/pyTEMlib/about.html
|
|
6
6
|
Author: Gerd Duscher
|
|
@@ -18,7 +18,6 @@ Classifier: Natural Language :: English
|
|
|
18
18
|
Classifier: Operating System :: OS Independent
|
|
19
19
|
Classifier: Programming Language :: Cython
|
|
20
20
|
Classifier: Programming Language :: Python :: 3
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.8
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.9
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.10
|
|
@@ -34,12 +33,13 @@ Requires-Dist: plotly
|
|
|
34
33
|
Requires-Dist: pandas
|
|
35
34
|
Requires-Dist: requests
|
|
36
35
|
Requires-Dist: lxml
|
|
36
|
+
Requires-Dist: ipympl
|
|
37
37
|
Requires-Dist: spglib
|
|
38
38
|
Requires-Dist: scikit-image
|
|
39
39
|
Requires-Dist: scikit-learn
|
|
40
|
-
Requires-Dist: pyNSID
|
|
41
|
-
Requires-Dist: sidpy
|
|
42
|
-
Requires-Dist: SciFiReaders
|
|
40
|
+
Requires-Dist: pyNSID >=0.0.7
|
|
41
|
+
Requires-Dist: sidpy >=0.11.2
|
|
42
|
+
Requires-Dist: SciFiReaders >=0.0.8
|
|
43
43
|
|
|
44
44
|
pyTEMlib
|
|
45
45
|
========
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
pyTEMlib/__init__.py,sha256=nEN93amIEoZxO7rJgN71ABeCoXrnmaywBbE97l5lPio,178
|
|
2
|
+
pyTEMlib/animation.py,sha256=oPxbTuy8LfdH2mOOgm9Q40ArFAJmXM_58UV97ptcNAY,25187
|
|
3
|
+
pyTEMlib/atom_tools.py,sha256=ViO4ZZZoCZ_Cp2KijiqKKOiQhGOWnye45T0rsiPhf4I,7314
|
|
4
|
+
pyTEMlib/config_dir.py,sha256=NWAseETgFNfBgHfBFv7ZTl7RsFzrLdGlhTN5Bn5FrTg,2104
|
|
5
|
+
pyTEMlib/crystal_tools.py,sha256=KGW_fQqr2L8iJnGh31gi6qbJOeHt-Y7mOeIHx_Psxb8,61676
|
|
6
|
+
pyTEMlib/diffraction_plot.py,sha256=pM5d3bdBGa8LlPZ5lw8sLT94mlYTXELxPLv-jUP2FWY,27959
|
|
7
|
+
pyTEMlib/dynamic_scattering.py,sha256=O9MxnxfndWJ2VhQRjksKNQ4yY7y-gN_hitRQ4Qox4ns,9472
|
|
8
|
+
pyTEMlib/eds_tools.py,sha256=gPrKT3U8lS7V36Njk72CWI-ovsoFv-EvwB8U9zBhpGU,3546
|
|
9
|
+
pyTEMlib/eels_dialog.py,sha256=IuiekHXOz7kL36TGv3dJAunifSiMF-92U-s9PrSAqTo,61225
|
|
10
|
+
pyTEMlib/eels_dialog_utilities.py,sha256=hCNIu5UcA1WZtsFMNw3go_kzYgm2nGjvwxDKhLFZpxg,54612
|
|
11
|
+
pyTEMlib/eels_dlg.py,sha256=t3DotxKBqgmqUd_ITQGfzdDWaHANj5CYsHt4hc8chSY,9834
|
|
12
|
+
pyTEMlib/eels_tools.py,sha256=n6ke9XEqvzMXYrri0EmIE9pJ2sZZdV55Dolton9-Gvg,75435
|
|
13
|
+
pyTEMlib/file_tools.py,sha256=wL50vVk7vwPKIua4-tCzjM_dAy5uWg0jUwLMv_BoTZI,46102
|
|
14
|
+
pyTEMlib/file_tools_qt.py,sha256=tLZACS4JyGH_AOzNR_SGAhjA01y4VJB261opPhGMlm8,7223
|
|
15
|
+
pyTEMlib/graph_tools.py,sha256=lXU0ty2kHv2aqJEHiTQliqkfLHWAELzBRIqEb7Ni6Nk,44148
|
|
16
|
+
pyTEMlib/graph_viz.py,sha256=m5PwSn6l2r0bsaLWBDSHc9IGR3_PneG2BrZgnEdi07I,13644
|
|
17
|
+
pyTEMlib/image_dialog.py,sha256=F-ZgKq7UnMtPPd1b9eqb7t8MXDfWN-8hVKwB2Il0x28,6235
|
|
18
|
+
pyTEMlib/image_dlg.py,sha256=n5gradDiYOFGEQ3k_Wlk9RUYYzl4bl_hKLzNVcYteNE,5694
|
|
19
|
+
pyTEMlib/image_tools.py,sha256=AqNdbiPvr0uRy_o89NiuuHjQQcdx-rhj90Ae7_aQGQs,37278
|
|
20
|
+
pyTEMlib/info_dialog.py,sha256=E7kumPEzyEYumTcvV0sdYPjHM7MO2SAwcl9oT_nK_AA,32694
|
|
21
|
+
pyTEMlib/info_dlg.py,sha256=A72cifLU12ucijP_Nxf2hsA8IUhIs5cKJ0yIbKRPjXk,9894
|
|
22
|
+
pyTEMlib/info_widget.py,sha256=PcHQGx-Ndzdemt7XZ1nlb2aSGQYiC0ZZHx88B-nQkeI,32003
|
|
23
|
+
pyTEMlib/interactive_eels.py,sha256=lzK6sgMTjoRyaUc48BgOgrG_xhuBqjXdp-kIeaTBVD0,912
|
|
24
|
+
pyTEMlib/interactive_image.py,sha256=5PwypcA1OjLAD-fi8bmWWFHuOjdIPVY9Dh59V24WuDA,34
|
|
25
|
+
pyTEMlib/kinematic_scattering.py,sha256=wuH0YvPz4PL3DksPNsRvkl6zsJP-Uy-QXGvLlwHxR6c,61071
|
|
26
|
+
pyTEMlib/microscope.py,sha256=iigUF1UImHEfmL2wqEBBj3aNRgEYouDbIln8VCo4_KM,1545
|
|
27
|
+
pyTEMlib/peak_dialog.py,sha256=dBJshnBcmtn8L2BJpTclshTukJYXYbd0dFJEJmbyCjU,56368
|
|
28
|
+
pyTEMlib/peak_dlg.py,sha256=qcjcnhwpGa4jBCeXzwQz9sCyX-tHsLLQ67ToqfKOiQY,11550
|
|
29
|
+
pyTEMlib/probe_tools.py,sha256=8tPQuANClLsGAKnZo6Vo4gNIGKfyDR6WUMO3dXcm_4k,27177
|
|
30
|
+
pyTEMlib/sidpy_tools.py,sha256=0oIx-qMtEmcZmLazQKW19dd-KoxyY3B15aIeMcyHA8E,4878
|
|
31
|
+
pyTEMlib/simulation_tools.py,sha256=RmegD5TpQMU68uASvzZWVplAqs7bM5KkF6bWDWLjyc0,2799
|
|
32
|
+
pyTEMlib/version.py,sha256=L6feq1ILXLEf4Sl5r76W5rml6QzybDbUuBsZS947eYE,93
|
|
33
|
+
pyTEMlib/viz.py,sha256=Z36r4OptraJVIQlZx57_1wwwrwnxWVZyNoCOjeNj_ac,18439
|
|
34
|
+
pyTEMlib/xrpa_x_sections.py,sha256=WeR7dc6SjYukk1S_8kR6IQFDqPagETTMJkFmbP78OPU,1805870
|
|
35
|
+
pyTEMlib-0.2023.8.0.dist-info/LICENSE,sha256=ASQTnQgYv39esmSFeb-IDhPwOMZSqGJ4s19vy4YtIaA,1069
|
|
36
|
+
pyTEMlib-0.2023.8.0.dist-info/METADATA,sha256=6fqx1QSoxo3E-0CvA6NB70ukueyAefT0Z1YVnGpz2u8,3280
|
|
37
|
+
pyTEMlib-0.2023.8.0.dist-info/WHEEL,sha256=m9WAupmBd2JGDsXWQGJgMGXIWbQY3F5c2xBJbBhq0nY,110
|
|
38
|
+
pyTEMlib-0.2023.8.0.dist-info/entry_points.txt,sha256=qiIFPP3ffSz-gxj-TowzbA0Setq5Lo0RJTVtSrqD1IY,44
|
|
39
|
+
pyTEMlib-0.2023.8.0.dist-info/top_level.txt,sha256=rPLVH0UJxrPSPgSoKScTjL1K_X69JFzsYYnDnYTYIlU,9
|
|
40
|
+
pyTEMlib-0.2023.8.0.dist-info/RECORD,,
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
pyTEMlib/__init__.py,sha256=nEN93amIEoZxO7rJgN71ABeCoXrnmaywBbE97l5lPio,178
|
|
2
|
-
pyTEMlib/animation.py,sha256=oPxbTuy8LfdH2mOOgm9Q40ArFAJmXM_58UV97ptcNAY,25187
|
|
3
|
-
pyTEMlib/atom_tools.py,sha256=ViO4ZZZoCZ_Cp2KijiqKKOiQhGOWnye45T0rsiPhf4I,7314
|
|
4
|
-
pyTEMlib/config_dir.py,sha256=NWAseETgFNfBgHfBFv7ZTl7RsFzrLdGlhTN5Bn5FrTg,2104
|
|
5
|
-
pyTEMlib/crystal_tools.py,sha256=D8Di8uq1pBTZ8el9Pz48I8HgT6_fbqZCAh5A25ON5dw,59580
|
|
6
|
-
pyTEMlib/diffraction_plot.py,sha256=pM5d3bdBGa8LlPZ5lw8sLT94mlYTXELxPLv-jUP2FWY,27959
|
|
7
|
-
pyTEMlib/dynamic_scattering.py,sha256=O9MxnxfndWJ2VhQRjksKNQ4yY7y-gN_hitRQ4Qox4ns,9472
|
|
8
|
-
pyTEMlib/eds_tools.py,sha256=gPrKT3U8lS7V36Njk72CWI-ovsoFv-EvwB8U9zBhpGU,3546
|
|
9
|
-
pyTEMlib/eels_dialog.py,sha256=ICb_7f-Mbglrl8QM2KaxOFOoevkLEwXAvP2aqFUa0zY,32400
|
|
10
|
-
pyTEMlib/eels_dialog_utilities.py,sha256=p52DIzLRN3f8-jW_hzoC5vvqb3OKB3qxYlc3DuHetMA,54546
|
|
11
|
-
pyTEMlib/eels_dlg.py,sha256=0m9-f_lf80okDzmc8d0jiw29ex-CF_49IKygk3Lrpx8,9757
|
|
12
|
-
pyTEMlib/eels_tools.py,sha256=xzTDY35eRiCkxHE9vQIgqeysyPeJ7H78PQVaJ_-DqJU,72114
|
|
13
|
-
pyTEMlib/file_tools.py,sha256=fKXgNMeVKkG-DhZC-EG32O6wNn5SbXLR5foplwmKToQ,42516
|
|
14
|
-
pyTEMlib/file_tools_qt.py,sha256=tLZACS4JyGH_AOzNR_SGAhjA01y4VJB261opPhGMlm8,7223
|
|
15
|
-
pyTEMlib/graph_tools.py,sha256=aHd2Hff9zFHB5W5EvVsPwplLQMnqoRGddHIW0sJgeDY,16875
|
|
16
|
-
pyTEMlib/graph_viz.py,sha256=m5PwSn6l2r0bsaLWBDSHc9IGR3_PneG2BrZgnEdi07I,13644
|
|
17
|
-
pyTEMlib/image_dialog.py,sha256=EHlJG2MSwN_bw61TIdp6e_blYKTSQwUJKMxQcQyouWI,6233
|
|
18
|
-
pyTEMlib/image_dlg.py,sha256=55eO-0ZOy144SopintvtNM4cRKFGU08lC0Gk6vwoV2A,5692
|
|
19
|
-
pyTEMlib/image_tools.py,sha256=GwDqe0tzU6gym_Mi4bTdbcFoe96vH-OBIrsuwS24Enk,35797
|
|
20
|
-
pyTEMlib/info_dialog.py,sha256=lfcoiHe9vvgj90TtjBdSPgcbcSTl2WKLEErzKEOo1LM,14394
|
|
21
|
-
pyTEMlib/info_dlg.py,sha256=fsQXrANJ5GAqH_Glh9MhuI38Z4cfMDtNi2XgHbEyMB8,9892
|
|
22
|
-
pyTEMlib/interactive_eels.py,sha256=i9TMHm5Ak_M6e4HKZNp4QQ2CPScNa5YpsoqfzSck-EA,645
|
|
23
|
-
pyTEMlib/interactive_image.py,sha256=5PwypcA1OjLAD-fi8bmWWFHuOjdIPVY9Dh59V24WuDA,34
|
|
24
|
-
pyTEMlib/kinematic_scattering.py,sha256=wuH0YvPz4PL3DksPNsRvkl6zsJP-Uy-QXGvLlwHxR6c,61071
|
|
25
|
-
pyTEMlib/microscope.py,sha256=iigUF1UImHEfmL2wqEBBj3aNRgEYouDbIln8VCo4_KM,1545
|
|
26
|
-
pyTEMlib/peak_dialog.py,sha256=w0Yxz37DZOLhlPYMSf2doLVLOBoHWjMyMC__GTmGVFQ,23364
|
|
27
|
-
pyTEMlib/peak_dlg.py,sha256=FPecchKfwbGQd40FD2yJR0SucaVfkNubYGbLcMqwvTo,10286
|
|
28
|
-
pyTEMlib/probe_tools.py,sha256=8tPQuANClLsGAKnZo6Vo4gNIGKfyDR6WUMO3dXcm_4k,27177
|
|
29
|
-
pyTEMlib/sidpy_tools.py,sha256=0oIx-qMtEmcZmLazQKW19dd-KoxyY3B15aIeMcyHA8E,4878
|
|
30
|
-
pyTEMlib/simulation_tools.py,sha256=RmegD5TpQMU68uASvzZWVplAqs7bM5KkF6bWDWLjyc0,2799
|
|
31
|
-
pyTEMlib/version.py,sha256=8Pl0rxW579E_EK1bs2uqQg9dfSAphcpC5gPq_VUP0gw,93
|
|
32
|
-
pyTEMlib/viz.py,sha256=0s4QCIWPq_z3WaXlAdQnH8QgeU1u3aoO3gCHWA0wSbE,9356
|
|
33
|
-
pyTEMlib/xrpa_x_sections.py,sha256=2qhWCueASAslrQFEnKX2TOv_kni6mhGgGfj4GVtjZ0E,1805586
|
|
34
|
-
pyTEMlib-0.2023.3.0.dist-info/LICENSE,sha256=ASQTnQgYv39esmSFeb-IDhPwOMZSqGJ4s19vy4YtIaA,1069
|
|
35
|
-
pyTEMlib-0.2023.3.0.dist-info/METADATA,sha256=FvdGf88_uEK5S72NoZwoN9gd3to0oAUQIa5Pgqcoavk,3314
|
|
36
|
-
pyTEMlib-0.2023.3.0.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
|
|
37
|
-
pyTEMlib-0.2023.3.0.dist-info/entry_points.txt,sha256=qiIFPP3ffSz-gxj-TowzbA0Setq5Lo0RJTVtSrqD1IY,44
|
|
38
|
-
pyTEMlib-0.2023.3.0.dist-info/top_level.txt,sha256=rPLVH0UJxrPSPgSoKScTjL1K_X69JFzsYYnDnYTYIlU,9
|
|
39
|
-
pyTEMlib-0.2023.3.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|