fakecbed 0.2.0__tar.gz → 0.3.0__tar.gz
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.
- {fakecbed-0.2.0 → fakecbed-0.3.0}/PKG-INFO +1 -1
- {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed/discretized.py +95 -61
- {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed/shapes.py +85 -116
- {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed/tds.py +6 -13
- {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed/version.py +2 -2
- {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed.egg-info/PKG-INFO +1 -1
- {fakecbed-0.2.0 → fakecbed-0.3.0}/tests/test_discretized.py +29 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/.coveragerc +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/.github/workflows/measure_code_coverage.yml +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/.github/workflows/publish_documentation_website.yml +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/.github/workflows/publish_release_to_pypi.yml +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/.github/workflows/test_library.yml +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/.gitignore +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/LICENSE +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/README.md +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/INSTALL.rst +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/Makefile +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/_static/readthedocs_custom.css +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/_templates/custom_class_template.rst +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/_templates/custom_module_template.rst +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/_templates/versions.html +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/api.rst +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/build_docs.py +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/conf.py +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/examples.rst +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/index.rst +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/license.rst +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/literature.rst +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/make.bat +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/docs/private_members_to_publish_to_docs.rst +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/examples/basic_usage.ipynb +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed/__init__.py +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed.egg-info/SOURCES.txt +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed.egg-info/dependency_links.txt +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed.egg-info/requires.txt +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/fakecbed.egg-info/top_level.txt +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/pyproject.toml +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/setup.cfg +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/setup.py +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/tests/test_shapes.py +0 -0
- {fakecbed-0.2.0 → fakecbed-0.3.0}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: fakecbed
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: A Python library for generating quickly images that imitate convergent beam electron diffraction patterns.
|
|
5
5
|
Author-email: Matthew Fitzpatrick <matthew.rc.fitzpatrick@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://mrfitzpa.github.io/fakecbed
|
|
@@ -21,12 +21,6 @@
|
|
|
21
21
|
## Load libraries/packages/modules ##
|
|
22
22
|
#####################################
|
|
23
23
|
|
|
24
|
-
# For accessing attributes of functions.
|
|
25
|
-
import inspect
|
|
26
|
-
|
|
27
|
-
# For randomly selecting items in dictionaries.
|
|
28
|
-
import random
|
|
29
|
-
|
|
30
24
|
# For performing deep copies.
|
|
31
25
|
import copy
|
|
32
26
|
|
|
@@ -74,9 +68,7 @@ __all__ = ["CBEDPattern"]
|
|
|
74
68
|
|
|
75
69
|
|
|
76
70
|
def _check_and_convert_undistorted_tds_model(params):
|
|
77
|
-
|
|
78
|
-
char_idx = 19
|
|
79
|
-
obj_name = current_func_name[char_idx:]
|
|
71
|
+
obj_name = "undistorted_tds_model"
|
|
80
72
|
obj = params[obj_name]
|
|
81
73
|
|
|
82
74
|
accepted_types = (fakecbed.tds.Model, type(None))
|
|
@@ -95,7 +87,7 @@ def _check_and_convert_undistorted_tds_model(params):
|
|
|
95
87
|
|
|
96
88
|
|
|
97
89
|
def _pre_serialize_undistorted_tds_model(undistorted_tds_model):
|
|
98
|
-
obj_to_pre_serialize =
|
|
90
|
+
obj_to_pre_serialize = undistorted_tds_model
|
|
99
91
|
serializable_rep = obj_to_pre_serialize.pre_serialize()
|
|
100
92
|
|
|
101
93
|
return serializable_rep
|
|
@@ -111,11 +103,11 @@ def _de_pre_serialize_undistorted_tds_model(serializable_rep):
|
|
|
111
103
|
|
|
112
104
|
|
|
113
105
|
def _check_and_convert_undistorted_disks(params):
|
|
114
|
-
|
|
115
|
-
char_idx = 19
|
|
116
|
-
obj_name = current_func_name[char_idx:]
|
|
106
|
+
obj_name = "undistorted_disks"
|
|
117
107
|
obj = params[obj_name]
|
|
118
108
|
|
|
109
|
+
current_func_name = "_check_and_convert_undistorted_disks"
|
|
110
|
+
|
|
119
111
|
try:
|
|
120
112
|
for undistorted_disk in obj:
|
|
121
113
|
accepted_types = (fakecbed.shapes.NonuniformBoundedShape,)
|
|
@@ -147,7 +139,7 @@ def _check_and_convert_undistorted_disks(params):
|
|
|
147
139
|
|
|
148
140
|
|
|
149
141
|
def _pre_serialize_undistorted_disks(undistorted_disks):
|
|
150
|
-
obj_to_pre_serialize =
|
|
142
|
+
obj_to_pre_serialize = undistorted_disks
|
|
151
143
|
serializable_rep = tuple()
|
|
152
144
|
for elem in obj_to_pre_serialize:
|
|
153
145
|
serializable_rep += (elem.pre_serialize(),)
|
|
@@ -172,9 +164,7 @@ def _de_pre_serialize_undistorted_disks(serializable_rep):
|
|
|
172
164
|
|
|
173
165
|
|
|
174
166
|
def _check_and_convert_undistorted_misc_shapes(params):
|
|
175
|
-
|
|
176
|
-
char_idx = 19
|
|
177
|
-
obj_name = current_func_name[char_idx:]
|
|
167
|
+
obj_name = "undistorted_misc_shapes"
|
|
178
168
|
obj = params[obj_name]
|
|
179
169
|
|
|
180
170
|
accepted_types = (fakecbed.shapes.Circle,
|
|
@@ -188,6 +178,8 @@ def _check_and_convert_undistorted_misc_shapes(params):
|
|
|
188
178
|
fakecbed.shapes.Lune,
|
|
189
179
|
fakecbed.shapes.NonuniformBoundedShape)
|
|
190
180
|
|
|
181
|
+
current_func_name = "_check_and_convert_undistorted_misc_shapes"
|
|
182
|
+
|
|
191
183
|
try:
|
|
192
184
|
for undistorted_misc_shape in obj:
|
|
193
185
|
kwargs = {"obj": undistorted_misc_shape,
|
|
@@ -205,7 +197,7 @@ def _check_and_convert_undistorted_misc_shapes(params):
|
|
|
205
197
|
|
|
206
198
|
|
|
207
199
|
def _pre_serialize_undistorted_misc_shapes(undistorted_misc_shapes):
|
|
208
|
-
obj_to_pre_serialize =
|
|
200
|
+
obj_to_pre_serialize = undistorted_misc_shapes
|
|
209
201
|
serializable_rep = tuple()
|
|
210
202
|
for elem in obj_to_pre_serialize:
|
|
211
203
|
serializable_rep += (elem.pre_serialize(),)
|
|
@@ -249,9 +241,7 @@ def _de_pre_serialize_undistorted_misc_shapes(serializable_rep):
|
|
|
249
241
|
|
|
250
242
|
|
|
251
243
|
def _check_and_convert_undistorted_outer_illumination_shape(params):
|
|
252
|
-
|
|
253
|
-
char_idx = 19
|
|
254
|
-
obj_name = current_func_name[char_idx:]
|
|
244
|
+
obj_name = "undistorted_outer_illumination_shape"
|
|
255
245
|
obj = params[obj_name]
|
|
256
246
|
|
|
257
247
|
accepted_types = (fakecbed.shapes.Circle,
|
|
@@ -275,7 +265,7 @@ def _check_and_convert_undistorted_outer_illumination_shape(params):
|
|
|
275
265
|
|
|
276
266
|
def _pre_serialize_undistorted_outer_illumination_shape(
|
|
277
267
|
undistorted_outer_illumination_shape):
|
|
278
|
-
obj_to_pre_serialize =
|
|
268
|
+
obj_to_pre_serialize = undistorted_outer_illumination_shape
|
|
279
269
|
serializable_rep = obj_to_pre_serialize.pre_serialize()
|
|
280
270
|
|
|
281
271
|
return serializable_rep
|
|
@@ -298,8 +288,7 @@ def _de_pre_serialize_undistorted_outer_illumination_shape(serializable_rep):
|
|
|
298
288
|
|
|
299
289
|
|
|
300
290
|
def _check_and_convert_gaussian_filter_std_dev(params):
|
|
301
|
-
|
|
302
|
-
obj_name = current_func_name[19:]
|
|
291
|
+
obj_name = "gaussian_filter_std_dev"
|
|
303
292
|
func_alias = czekitout.convert.to_nonnegative_float
|
|
304
293
|
kwargs = {"obj": params[obj_name], "obj_name": obj_name}
|
|
305
294
|
gaussian_filter_std_dev = func_alias(**kwargs)
|
|
@@ -308,9 +297,8 @@ def _check_and_convert_gaussian_filter_std_dev(params):
|
|
|
308
297
|
|
|
309
298
|
|
|
310
299
|
|
|
311
|
-
def _pre_serialize_gaussian_filter_std_dev(
|
|
312
|
-
|
|
313
|
-
obj_to_pre_serialize = random.choice(list(locals().values()))
|
|
300
|
+
def _pre_serialize_gaussian_filter_std_dev(gaussian_filter_std_dev):
|
|
301
|
+
obj_to_pre_serialize = gaussian_filter_std_dev
|
|
314
302
|
serializable_rep = obj_to_pre_serialize
|
|
315
303
|
|
|
316
304
|
return serializable_rep
|
|
@@ -325,9 +313,7 @@ def _de_pre_serialize_gaussian_filter_std_dev(serializable_rep):
|
|
|
325
313
|
|
|
326
314
|
|
|
327
315
|
def _check_and_convert_distortion_model(params):
|
|
328
|
-
|
|
329
|
-
char_idx = 19
|
|
330
|
-
obj_name = current_func_name[char_idx:]
|
|
316
|
+
obj_name = "distortion_model"
|
|
331
317
|
obj = params[obj_name]
|
|
332
318
|
|
|
333
319
|
num_pixels_across_pattern = \
|
|
@@ -351,6 +337,8 @@ def _check_and_convert_distortion_model(params):
|
|
|
351
337
|
sampling_grid_dims_in_pixels = \
|
|
352
338
|
distortion_model_core_attrs["sampling_grid_dims_in_pixels"]
|
|
353
339
|
|
|
340
|
+
current_func_name = "_check_and_convert_distortion_model"
|
|
341
|
+
|
|
354
342
|
if ((sampling_grid_dims_in_pixels[0]%num_pixels_across_pattern != 0)
|
|
355
343
|
or (sampling_grid_dims_in_pixels[1]%num_pixels_across_pattern != 0)):
|
|
356
344
|
err_msg = globals()[current_func_name+"_err_msg_1"]
|
|
@@ -361,7 +349,7 @@ def _check_and_convert_distortion_model(params):
|
|
|
361
349
|
|
|
362
350
|
|
|
363
351
|
def _pre_serialize_distortion_model(distortion_model):
|
|
364
|
-
obj_to_pre_serialize =
|
|
352
|
+
obj_to_pre_serialize = distortion_model
|
|
365
353
|
serializable_rep = obj_to_pre_serialize.pre_serialize()
|
|
366
354
|
|
|
367
355
|
return serializable_rep
|
|
@@ -377,8 +365,7 @@ def _de_pre_serialize_distortion_model(serializable_rep):
|
|
|
377
365
|
|
|
378
366
|
|
|
379
367
|
def _check_and_convert_num_pixels_across_pattern(params):
|
|
380
|
-
|
|
381
|
-
obj_name = current_func_name[19:]
|
|
368
|
+
obj_name = "num_pixels_across_pattern"
|
|
382
369
|
kwargs = {"obj": params[obj_name], "obj_name": obj_name}
|
|
383
370
|
num_pixels_across_pattern = czekitout.convert.to_positive_int(**kwargs)
|
|
384
371
|
|
|
@@ -387,7 +374,7 @@ def _check_and_convert_num_pixels_across_pattern(params):
|
|
|
387
374
|
|
|
388
375
|
|
|
389
376
|
def _pre_serialize_num_pixels_across_pattern(num_pixels_across_pattern):
|
|
390
|
-
obj_to_pre_serialize =
|
|
377
|
+
obj_to_pre_serialize = num_pixels_across_pattern
|
|
391
378
|
serializable_rep = obj_to_pre_serialize
|
|
392
379
|
|
|
393
380
|
return serializable_rep
|
|
@@ -402,8 +389,7 @@ def _de_pre_serialize_num_pixels_across_pattern(serializable_rep):
|
|
|
402
389
|
|
|
403
390
|
|
|
404
391
|
def _check_and_convert_apply_shot_noise(params):
|
|
405
|
-
|
|
406
|
-
obj_name = current_func_name[19:]
|
|
392
|
+
obj_name = "apply_shot_noise"
|
|
407
393
|
kwargs = {"obj": params[obj_name], "obj_name": obj_name}
|
|
408
394
|
apply_shot_noise = czekitout.convert.to_bool(**kwargs)
|
|
409
395
|
|
|
@@ -412,7 +398,7 @@ def _check_and_convert_apply_shot_noise(params):
|
|
|
412
398
|
|
|
413
399
|
|
|
414
400
|
def _pre_serialize_apply_shot_noise(apply_shot_noise):
|
|
415
|
-
obj_to_pre_serialize =
|
|
401
|
+
obj_to_pre_serialize = apply_shot_noise
|
|
416
402
|
serializable_rep = obj_to_pre_serialize
|
|
417
403
|
|
|
418
404
|
return serializable_rep
|
|
@@ -426,9 +412,43 @@ def _de_pre_serialize_apply_shot_noise(serializable_rep):
|
|
|
426
412
|
|
|
427
413
|
|
|
428
414
|
|
|
415
|
+
def _check_and_convert_rng_seed(params):
|
|
416
|
+
obj_name = "rng_seed"
|
|
417
|
+
obj = params[obj_name]
|
|
418
|
+
|
|
419
|
+
current_func_name = "_check_and_convert_rng_seed"
|
|
420
|
+
|
|
421
|
+
if obj is not None:
|
|
422
|
+
kwargs = {"obj": obj, "obj_name": obj_name}
|
|
423
|
+
try:
|
|
424
|
+
rng_seed = czekitout.convert.to_nonnegative_int(**kwargs)
|
|
425
|
+
except:
|
|
426
|
+
err_msg = globals()[current_func_name+"_err_msg_1"]
|
|
427
|
+
raise TypeError(err_msg)
|
|
428
|
+
else:
|
|
429
|
+
rng_seed = obj
|
|
430
|
+
|
|
431
|
+
return rng_seed
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
def _pre_serialize_rng_seed(rng_seed):
|
|
436
|
+
obj_to_pre_serialize = rng_seed
|
|
437
|
+
serializable_rep = obj_to_pre_serialize
|
|
438
|
+
|
|
439
|
+
return serializable_rep
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
def _de_pre_serialize_rng_seed(serializable_rep):
|
|
444
|
+
rng_seed = serializable_rep
|
|
445
|
+
|
|
446
|
+
return rng_seed
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
|
|
429
450
|
def _check_and_convert_detector_partition_width_in_pixels(params):
|
|
430
|
-
|
|
431
|
-
obj_name = current_func_name[19:]
|
|
451
|
+
obj_name = "detector_partition_width_in_pixels"
|
|
432
452
|
func_alias = czekitout.convert.to_nonnegative_int
|
|
433
453
|
kwargs = {"obj": params[obj_name], "obj_name": obj_name}
|
|
434
454
|
detector_partition_width_in_pixels = func_alias(**kwargs)
|
|
@@ -439,7 +459,7 @@ def _check_and_convert_detector_partition_width_in_pixels(params):
|
|
|
439
459
|
|
|
440
460
|
def _pre_serialize_detector_partition_width_in_pixels(
|
|
441
461
|
detector_partition_width_in_pixels):
|
|
442
|
-
obj_to_pre_serialize =
|
|
462
|
+
obj_to_pre_serialize = detector_partition_width_in_pixels
|
|
443
463
|
serializable_rep = obj_to_pre_serialize
|
|
444
464
|
|
|
445
465
|
return serializable_rep
|
|
@@ -454,14 +474,15 @@ def _de_pre_serialize_detector_partition_width_in_pixels(serializable_rep):
|
|
|
454
474
|
|
|
455
475
|
|
|
456
476
|
def _check_and_convert_cold_pixels(params):
|
|
457
|
-
|
|
458
|
-
obj_name = current_func_name[19:]
|
|
477
|
+
obj_name = "cold_pixels"
|
|
459
478
|
kwargs = {"obj": params[obj_name], "obj_name": obj_name}
|
|
460
479
|
cold_pixels = czekitout.convert.to_pairs_of_ints(**kwargs)
|
|
461
480
|
|
|
462
481
|
num_pixels_across_pattern = \
|
|
463
482
|
_check_and_convert_num_pixels_across_pattern(params)
|
|
464
483
|
|
|
484
|
+
current_func_name = "_check_and_convert_cold_pixels"
|
|
485
|
+
|
|
465
486
|
coords_of_cold_pixels = cold_pixels
|
|
466
487
|
for coords_of_cold_pixel in coords_of_cold_pixels:
|
|
467
488
|
row, col = coords_of_cold_pixel
|
|
@@ -491,8 +512,7 @@ def _de_pre_serialize_cold_pixels(serializable_rep):
|
|
|
491
512
|
|
|
492
513
|
|
|
493
514
|
def _check_and_convert_mask_frame(params):
|
|
494
|
-
|
|
495
|
-
obj_name = current_func_name[19:]
|
|
515
|
+
obj_name = "mask_frame"
|
|
496
516
|
kwargs = {"obj": params[obj_name], "obj_name": obj_name}
|
|
497
517
|
mask_frame = czekitout.convert.to_quadruplet_of_nonnegative_ints(**kwargs)
|
|
498
518
|
|
|
@@ -501,7 +521,7 @@ def _check_and_convert_mask_frame(params):
|
|
|
501
521
|
|
|
502
522
|
|
|
503
523
|
def _pre_serialize_mask_frame(mask_frame):
|
|
504
|
-
obj_to_pre_serialize =
|
|
524
|
+
obj_to_pre_serialize = mask_frame
|
|
505
525
|
serializable_rep = obj_to_pre_serialize
|
|
506
526
|
|
|
507
527
|
return serializable_rep
|
|
@@ -516,8 +536,7 @@ def _de_pre_serialize_mask_frame(serializable_rep):
|
|
|
516
536
|
|
|
517
537
|
|
|
518
538
|
def _check_and_convert_deep_copy(params):
|
|
519
|
-
|
|
520
|
-
obj_name = current_func_name[19:]
|
|
539
|
+
obj_name = "deep_copy"
|
|
521
540
|
kwargs = {"obj": params[obj_name], "obj_name": obj_name}
|
|
522
541
|
deep_copy = czekitout.convert.to_bool(**kwargs)
|
|
523
542
|
|
|
@@ -526,9 +545,7 @@ def _check_and_convert_deep_copy(params):
|
|
|
526
545
|
|
|
527
546
|
|
|
528
547
|
def _check_and_convert_overriding_image(params):
|
|
529
|
-
|
|
530
|
-
char_idx = 19
|
|
531
|
-
obj_name = current_func_name[char_idx:]
|
|
548
|
+
obj_name = "overriding_image"
|
|
532
549
|
obj = params[obj_name]
|
|
533
550
|
|
|
534
551
|
func_alias = fakecbed.shapes._check_and_convert_real_torch_matrix
|
|
@@ -542,6 +559,8 @@ def _check_and_convert_overriding_image(params):
|
|
|
542
559
|
num_pixels_across_pattern = params["num_pixels_across_pattern"]
|
|
543
560
|
expected_image_dims_in_pixels = 2*(num_pixels_across_pattern,)
|
|
544
561
|
|
|
562
|
+
current_func_name = "_check_and_convert_overriding_image"
|
|
563
|
+
|
|
545
564
|
if overriding_image.shape != expected_image_dims_in_pixels:
|
|
546
565
|
unformatted_err_msg = globals()[current_func_name+"_err_msg_1"]
|
|
547
566
|
args = expected_image_dims_in_pixels
|
|
@@ -578,6 +597,8 @@ _default_num_pixels_across_pattern = \
|
|
|
578
597
|
512
|
|
579
598
|
_default_apply_shot_noise = \
|
|
580
599
|
False
|
|
600
|
+
_default_rng_seed = \
|
|
601
|
+
None
|
|
581
602
|
_default_detector_partition_width_in_pixels = \
|
|
582
603
|
0
|
|
583
604
|
_default_cold_pixels = \
|
|
@@ -908,7 +929,7 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
|
|
|
908
929
|
\text{det}\left(\mathbf{J}_{\square}\left(
|
|
909
930
|
q_{\mathring{\mathcal{I}};x;j},
|
|
910
931
|
q_{\mathring{\mathcal{I}};y;i}\right)\right)
|
|
911
|
-
\mathring{\mathcal{I}}_{\text{CBED};⌑;i,j}
|
|
932
|
+
\left|\mathring{\mathcal{I}}_{\text{CBED};⌑;i,j}\right|.
|
|
912
933
|
:label: HD_I_CBED__3
|
|
913
934
|
|
|
914
935
|
8. Apply average pooling to
|
|
@@ -1051,6 +1072,9 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
|
|
|
1051
1072
|
If ``apply_shot_noise`` is set to ``True``, then shot noise is applied
|
|
1052
1073
|
to the image of the fake CBED pattern. Otherwise, no shot noise is
|
|
1053
1074
|
applied.
|
|
1075
|
+
rng_seed : `int` | `None`, optional
|
|
1076
|
+
``rng_seed`` specifies the seed used in the random number generator used
|
|
1077
|
+
to apply shot noise.
|
|
1054
1078
|
detector_partition_width_in_pixels : `int`, optional
|
|
1055
1079
|
The detector partition width in units of pixels,
|
|
1056
1080
|
:math:`N_{\text{DPW}}`. Must be nonnegative.
|
|
@@ -1073,6 +1097,7 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
|
|
|
1073
1097
|
"num_pixels_across_pattern",
|
|
1074
1098
|
"distortion_model",
|
|
1075
1099
|
"apply_shot_noise",
|
|
1100
|
+
"rng_seed",
|
|
1076
1101
|
"detector_partition_width_in_pixels",
|
|
1077
1102
|
"cold_pixels",
|
|
1078
1103
|
"mask_frame")
|
|
@@ -1107,6 +1132,8 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
|
|
|
1107
1132
|
_default_distortion_model,
|
|
1108
1133
|
apply_shot_noise=\
|
|
1109
1134
|
_default_apply_shot_noise,
|
|
1135
|
+
rng_seed=\
|
|
1136
|
+
_default_rng_seed,
|
|
1110
1137
|
detector_partition_width_in_pixels=\
|
|
1111
1138
|
_default_detector_partition_width_in_pixels,
|
|
1112
1139
|
cold_pixels=\
|
|
@@ -1670,21 +1697,24 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
|
|
|
1670
1697
|
method_name = ("_calc_maskless_and_noiseless_image"
|
|
1671
1698
|
"_and_cache_select_intermediates")
|
|
1672
1699
|
method_alias = getattr(self, method_name)
|
|
1673
|
-
|
|
1700
|
+
image = method_alias(u_x, u_y)
|
|
1701
|
+
|
|
1702
|
+
apply_shot_noise = self._apply_shot_noise
|
|
1703
|
+
if apply_shot_noise == True:
|
|
1704
|
+
np_rng = np.random.default_rng(self._rng_seed)
|
|
1705
|
+
torch_rng_seed = np_rng.integers(low=0, high=2**32-1).item()
|
|
1706
|
+
torch_rng = torch.Generator().manual_seed(torch_rng_seed)
|
|
1707
|
+
image = torch.poisson(image, torch_rng)
|
|
1674
1708
|
|
|
1709
|
+
image = self._apply_detector_partition_inpainting(input_image=image)
|
|
1710
|
+
|
|
1675
1711
|
if self._illumination_support is None:
|
|
1676
1712
|
method_name = "_calc_illumination_support"
|
|
1677
1713
|
method_alias = getattr(self, method_name)
|
|
1678
1714
|
self._illumination_support = method_alias(u_x, u_y)
|
|
1679
1715
|
illumination_support = self._illumination_support
|
|
1680
1716
|
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
apply_shot_noise = self._apply_shot_noise
|
|
1684
|
-
|
|
1685
|
-
image = (torch.poisson(noiseless_image)
|
|
1686
|
-
if (apply_shot_noise == True)
|
|
1687
|
-
else noiseless_image)
|
|
1717
|
+
image = image*illumination_support
|
|
1688
1718
|
|
|
1689
1719
|
coords_of_cold_pixels = self._cold_pixels
|
|
1690
1720
|
L, R, B, T = self._mask_frame
|
|
@@ -1698,8 +1728,6 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
|
|
|
1698
1728
|
for coords_of_cold_pixel in coords_of_cold_pixels:
|
|
1699
1729
|
image[coords_of_cold_pixel] = 0
|
|
1700
1730
|
|
|
1701
|
-
image = self._apply_detector_partition_inpainting(input_image=image)
|
|
1702
|
-
|
|
1703
1731
|
image = self._normalize_matrix(input_matrix=image)
|
|
1704
1732
|
|
|
1705
1733
|
image = torch.clip(image, min=0)
|
|
@@ -1732,6 +1760,8 @@ class CBEDPattern(fancytypes.PreSerializableAndUpdatable):
|
|
|
1732
1760
|
+ (disk_supports
|
|
1733
1761
|
* intra_disk_shapes).sum(dim=0))
|
|
1734
1762
|
|
|
1763
|
+
maskless_and_noiseless_image = torch.abs(maskless_and_noiseless_image)
|
|
1764
|
+
|
|
1735
1765
|
kwargs = {"input_matrix": maskless_and_noiseless_image,
|
|
1736
1766
|
"truncate": 4}
|
|
1737
1767
|
maskless_and_noiseless_image = self._apply_2d_guassian_filter(**kwargs)
|
|
@@ -2539,6 +2569,10 @@ _check_and_convert_distortion_model_err_msg_1 = \
|
|
|
2539
2569
|
"grid, specified by the object ``distortion_model``, must be divisible "
|
|
2540
2570
|
"by the object ``num_pixels_across_pattern``.")
|
|
2541
2571
|
|
|
2572
|
+
_check_and_convert_rng_seed_err_msg_1 = \
|
|
2573
|
+
("The object ``rng_seed`` must be either a nonnegative integer or of the "
|
|
2574
|
+
"type `NoneType`.")
|
|
2575
|
+
|
|
2542
2576
|
_check_and_convert_cold_pixels_err_msg_1 = \
|
|
2543
2577
|
("The object ``cold_pixels`` must be a sequence of integer pairs, where "
|
|
2544
2578
|
"each integer pair specifies valid pixel coordinates (i.e. row and column "
|