pytme 0.2.0b0__cp311-cp311-macosx_14_0_arm64.whl → 0.2.1__cp311-cp311-macosx_14_0_arm64.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.
- {pytme-0.2.0b0.data → pytme-0.2.1.data}/scripts/match_template.py +473 -140
- {pytme-0.2.0b0.data → pytme-0.2.1.data}/scripts/postprocess.py +107 -49
- {pytme-0.2.0b0.data → pytme-0.2.1.data}/scripts/preprocessor_gui.py +4 -1
- {pytme-0.2.0b0.dist-info → pytme-0.2.1.dist-info}/METADATA +2 -2
- pytme-0.2.1.dist-info/RECORD +73 -0
- scripts/extract_candidates.py +117 -85
- scripts/match_template.py +473 -140
- scripts/match_template_filters.py +458 -169
- scripts/postprocess.py +107 -49
- scripts/preprocessor_gui.py +4 -1
- scripts/refine_matches.py +364 -160
- tme/__version__.py +1 -1
- tme/analyzer.py +278 -148
- tme/backends/__init__.py +1 -0
- tme/backends/cupy_backend.py +20 -13
- tme/backends/jax_backend.py +218 -0
- tme/backends/matching_backend.py +25 -10
- tme/backends/mlx_backend.py +13 -9
- tme/backends/npfftw_backend.py +22 -12
- tme/backends/pytorch_backend.py +20 -9
- tme/density.py +85 -64
- tme/extensions.cpython-311-darwin.so +0 -0
- tme/matching_data.py +86 -60
- tme/matching_exhaustive.py +245 -166
- tme/matching_optimization.py +137 -69
- tme/matching_utils.py +1 -1
- tme/orientations.py +175 -55
- tme/preprocessing/__init__.py +2 -0
- tme/preprocessing/_utils.py +188 -0
- tme/preprocessing/composable_filter.py +31 -0
- tme/preprocessing/compose.py +51 -0
- tme/preprocessing/frequency_filters.py +378 -0
- tme/preprocessing/tilt_series.py +1017 -0
- tme/preprocessor.py +17 -7
- tme/structure.py +4 -1
- pytme-0.2.0b0.dist-info/RECORD +0 -66
- {pytme-0.2.0b0.data → pytme-0.2.1.data}/scripts/estimate_ram_usage.py +0 -0
- {pytme-0.2.0b0.data → pytme-0.2.1.data}/scripts/preprocess.py +0 -0
- {pytme-0.2.0b0.dist-info → pytme-0.2.1.dist-info}/LICENSE +0 -0
- {pytme-0.2.0b0.dist-info → pytme-0.2.1.dist-info}/WHEEL +0 -0
- {pytme-0.2.0b0.dist-info → pytme-0.2.1.dist-info}/entry_points.txt +0 -0
- {pytme-0.2.0b0.dist-info → pytme-0.2.1.dist-info}/top_level.txt +0 -0
@@ -9,7 +9,7 @@ import argparse
|
|
9
9
|
from sys import exit
|
10
10
|
from os import getcwd
|
11
11
|
from os.path import join, abspath
|
12
|
-
from typing import List
|
12
|
+
from typing import List, Tuple
|
13
13
|
from os.path import splitext
|
14
14
|
|
15
15
|
import numpy as np
|
@@ -29,6 +29,7 @@ from tme.matching_utils import (
|
|
29
29
|
euler_to_rotationmatrix,
|
30
30
|
euler_from_rotationmatrix,
|
31
31
|
)
|
32
|
+
from tme.matching_optimization import create_score_object, optimize_match
|
32
33
|
|
33
34
|
PEAK_CALLERS = {
|
34
35
|
"PeakCallerSort": PeakCallerSort,
|
@@ -181,6 +182,13 @@ def parse_args():
|
|
181
182
|
required=False,
|
182
183
|
help="Number of accepted false-positives picks to determine minimum score.",
|
183
184
|
)
|
185
|
+
additional_group.add_argument(
|
186
|
+
"--local_optimization",
|
187
|
+
action="store_true",
|
188
|
+
required=False,
|
189
|
+
help="[Experimental] Perform local optimization of candidates. Useful when the "
|
190
|
+
"number of identified candidats is small (< 10).",
|
191
|
+
)
|
184
192
|
|
185
193
|
args = parser.parse_args()
|
186
194
|
|
@@ -195,28 +203,34 @@ def parse_args():
|
|
195
203
|
|
196
204
|
if args.minimum_score is not None or args.n_false_positives is not None:
|
197
205
|
args.number_of_peaks = np.iinfo(np.int64).max
|
198
|
-
|
206
|
+
elif args.number_of_peaks is None:
|
199
207
|
args.number_of_peaks = 1000
|
200
208
|
|
201
209
|
return args
|
202
210
|
|
203
211
|
|
204
|
-
def load_template(
|
212
|
+
def load_template(
|
213
|
+
filepath: str,
|
214
|
+
sampling_rate: NDArray,
|
215
|
+
centering: bool = True,
|
216
|
+
target_shape: Tuple[int] = None,
|
217
|
+
):
|
205
218
|
try:
|
206
219
|
template = Density.from_file(filepath)
|
207
|
-
|
220
|
+
center = np.divide(np.subtract(template.shape, 1), 2)
|
208
221
|
template_is_density = True
|
209
|
-
except
|
222
|
+
except Exception:
|
210
223
|
template = Structure.from_file(filepath)
|
211
|
-
|
224
|
+
center = template.center_of_mass()[::-1]
|
212
225
|
template = Density.from_structure(template, sampling_rate=sampling_rate)
|
213
226
|
template_is_density = False
|
214
227
|
|
215
|
-
translation = np.zeros_like(
|
216
|
-
if
|
228
|
+
translation = np.zeros_like(center)
|
229
|
+
if centering and template_is_density:
|
217
230
|
template, translation = template.centered(0)
|
231
|
+
center = np.divide(np.subtract(template.shape, 1), 2)
|
218
232
|
|
219
|
-
return template,
|
233
|
+
return template, center, translation, template_is_density
|
220
234
|
|
221
235
|
|
222
236
|
def merge_outputs(data, filepaths: List[str], args):
|
@@ -226,7 +240,7 @@ def merge_outputs(data, filepaths: List[str], args):
|
|
226
240
|
if data[0].ndim != data[2].ndim:
|
227
241
|
return data, 1
|
228
242
|
|
229
|
-
from tme.matching_exhaustive import
|
243
|
+
from tme.matching_exhaustive import normalize_under_mask
|
230
244
|
|
231
245
|
def _norm_scores(data, args):
|
232
246
|
target_origin, _, sampling_rate, cli_args = data[-1]
|
@@ -235,7 +249,7 @@ def merge_outputs(data, filepaths: List[str], args):
|
|
235
249
|
ret = load_template(
|
236
250
|
filepath=cli_args.template,
|
237
251
|
sampling_rate=sampling_rate,
|
238
|
-
|
252
|
+
centering=not cli_args.no_centering,
|
239
253
|
)
|
240
254
|
template, center_of_mass, translation, template_is_density = ret
|
241
255
|
|
@@ -256,7 +270,7 @@ def merge_outputs(data, filepaths: List[str], args):
|
|
256
270
|
mask.shape, np.multiply(args.min_boundary_distance, 2)
|
257
271
|
).astype(int)
|
258
272
|
mask[cropped_shape] = 0
|
259
|
-
|
273
|
+
normalize_under_mask(template=data[0], mask=mask, mask_intensity=mask.sum())
|
260
274
|
return data[0]
|
261
275
|
|
262
276
|
entities = np.zeros_like(data[0])
|
@@ -280,7 +294,7 @@ def main():
|
|
280
294
|
ret = load_template(
|
281
295
|
filepath=cli_args.template,
|
282
296
|
sampling_rate=sampling_rate,
|
283
|
-
|
297
|
+
centering=not cli_args.no_centering,
|
284
298
|
)
|
285
299
|
template, center_of_mass, translation, template_is_density = ret
|
286
300
|
|
@@ -310,7 +324,9 @@ def main():
|
|
310
324
|
max_shape = np.max(template.shape)
|
311
325
|
args.min_boundary_distance = np.ceil(np.divide(max_shape, 2))
|
312
326
|
|
313
|
-
|
327
|
+
entities = None
|
328
|
+
if len(args.input_file) > 1:
|
329
|
+
data, entities = merge_outputs(data=data, filepaths=args.input_file, args=args)
|
314
330
|
|
315
331
|
orientations = args.orientations
|
316
332
|
if orientations is None:
|
@@ -346,31 +362,33 @@ def main():
|
|
346
362
|
minimum_score = max(minimum_score, 0)
|
347
363
|
args.minimum_score = minimum_score
|
348
364
|
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
args.
|
365
|
+
args.batch_dims = None
|
366
|
+
if hasattr(cli_args, "target_batch"):
|
367
|
+
args.batch_dims = cli_args.target_batch
|
368
|
+
|
369
|
+
peak_caller_kwargs = {
|
370
|
+
"number_of_peaks": args.number_of_peaks,
|
371
|
+
"min_distance": args.min_distance,
|
372
|
+
"min_boundary_distance": args.min_boundary_distance,
|
373
|
+
"batch_dims": args.batch_dims,
|
374
|
+
}
|
356
375
|
|
376
|
+
peak_caller = PEAK_CALLERS[args.peak_caller](**peak_caller_kwargs)
|
357
377
|
peak_caller(
|
358
378
|
scores,
|
359
|
-
rotation_matrix=np.eye(
|
379
|
+
rotation_matrix=np.eye(template.data.ndim),
|
360
380
|
mask=template.data,
|
361
381
|
rotation_mapping=rotation_mapping,
|
362
382
|
rotation_array=rotation_array,
|
363
383
|
minimum_score=args.minimum_score,
|
364
384
|
)
|
365
385
|
candidates = peak_caller.merge(
|
366
|
-
candidates=[tuple(peak_caller)],
|
367
|
-
number_of_peaks=args.number_of_peaks,
|
368
|
-
min_distance=args.min_distance,
|
369
|
-
min_boundary_distance=args.min_boundary_distance,
|
386
|
+
candidates=[tuple(peak_caller)], **peak_caller_kwargs
|
370
387
|
)
|
371
388
|
if len(candidates) == 0:
|
372
|
-
|
373
|
-
|
389
|
+
candidates = [[], [], [], []]
|
390
|
+
print("Found no peaks, consider changing peak calling parameters.")
|
391
|
+
exit(0)
|
374
392
|
|
375
393
|
for translation, _, score, detail in zip(*candidates):
|
376
394
|
rotations.append(rotation_mapping[rotation_array[tuple(translation)]])
|
@@ -381,8 +399,13 @@ def main():
|
|
381
399
|
for i in range(translation.shape[0]):
|
382
400
|
rotations.append(euler_from_rotationmatrix(rotation[i]))
|
383
401
|
|
384
|
-
|
402
|
+
if len(rotations):
|
403
|
+
rotations = np.vstack(rotations).astype(float)
|
385
404
|
translations, scores, details = candidates[0], candidates[2], candidates[3]
|
405
|
+
|
406
|
+
if entities is not None:
|
407
|
+
details = entities[tuple(translations.T)]
|
408
|
+
|
386
409
|
orientations = Orientations(
|
387
410
|
translations=translations,
|
388
411
|
rotations=rotations,
|
@@ -390,14 +413,55 @@ def main():
|
|
390
413
|
details=details,
|
391
414
|
)
|
392
415
|
|
393
|
-
if args.minimum_score is not None:
|
416
|
+
if args.minimum_score is not None and len(orientations.scores):
|
394
417
|
keep = orientations.scores >= args.minimum_score
|
395
418
|
orientations = orientations[keep]
|
396
419
|
|
397
|
-
if args.maximum_score is not None:
|
420
|
+
if args.maximum_score is not None and len(orientations.scores):
|
398
421
|
keep = orientations.scores <= args.maximum_score
|
399
422
|
orientations = orientations[keep]
|
400
423
|
|
424
|
+
if args.peak_oversampling > 1:
|
425
|
+
peak_caller = peak_caller = PEAK_CALLERS[args.peak_caller]()
|
426
|
+
if data[0].ndim != data[2].ndim:
|
427
|
+
print(
|
428
|
+
"Input pickle does not contain template matching scores."
|
429
|
+
" Cannot oversample peaks."
|
430
|
+
)
|
431
|
+
exit(-1)
|
432
|
+
orientations.translations = peak_caller.oversample_peaks(
|
433
|
+
score_space=data[0],
|
434
|
+
peak_positions=orientations.translations,
|
435
|
+
oversampling_factor=args.peak_oversampling,
|
436
|
+
)
|
437
|
+
|
438
|
+
if args.local_optimization:
|
439
|
+
target = Density.from_file(cli_args.target)
|
440
|
+
orientations.translations = orientations.translations.astype(np.float32)
|
441
|
+
orientations.rotations = orientations.rotations.astype(np.float32)
|
442
|
+
for index, (translation, angles, *_) in enumerate(orientations):
|
443
|
+
score_object = create_score_object(
|
444
|
+
score="FLC",
|
445
|
+
target=target.data.copy(),
|
446
|
+
template=template.data.copy(),
|
447
|
+
template_mask=template_mask.data.copy(),
|
448
|
+
)
|
449
|
+
|
450
|
+
center = np.divide(template.shape, 2)
|
451
|
+
init_translation = np.subtract(translation, center)
|
452
|
+
bounds_translation = tuple((x - 5, x + 5) for x in init_translation)
|
453
|
+
|
454
|
+
translation, rotation_matrix, score = optimize_match(
|
455
|
+
score_object=score_object,
|
456
|
+
optimization_method="basinhopping",
|
457
|
+
bounds_translation=bounds_translation,
|
458
|
+
maxiter=3,
|
459
|
+
x0=[*init_translation, *angles],
|
460
|
+
)
|
461
|
+
orientations.translations[index] = np.add(translation, center)
|
462
|
+
orientations.rotations[index] = angles
|
463
|
+
orientations.scores[index] = score * -1
|
464
|
+
|
401
465
|
if args.output_format == "orientations":
|
402
466
|
orientations.to_file(filename=f"{args.output_prefix}.tsv", file_format="text")
|
403
467
|
exit(0)
|
@@ -515,7 +579,6 @@ def main():
|
|
515
579
|
)
|
516
580
|
rotation_matrix = rotation.inv().as_matrix()
|
517
581
|
|
518
|
-
# rotation_matrix = euler_to_rotationmatrix(orientations.rotations[index])
|
519
582
|
subset = Density(target.data[obs_slices[index]])
|
520
583
|
subset = subset.rigid_transform(rotation_matrix=rotation_matrix, order=1)
|
521
584
|
|
@@ -526,35 +589,30 @@ def main():
|
|
526
589
|
ret.to_file(f"{args.output_prefix}_average.mrc")
|
527
590
|
exit(0)
|
528
591
|
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
)
|
536
|
-
exit(-1)
|
537
|
-
orientations.translations = peak_caller.oversample_peaks(
|
538
|
-
score_space=data[0],
|
539
|
-
translations=orientations.translations,
|
540
|
-
oversampling_factor=args.oversampling_factor,
|
541
|
-
)
|
592
|
+
template, center, *_ = load_template(
|
593
|
+
filepath=cli_args.template,
|
594
|
+
sampling_rate=sampling_rate,
|
595
|
+
centering=not cli_args.no_centering,
|
596
|
+
target_shape=target.shape,
|
597
|
+
)
|
542
598
|
|
543
599
|
for index, (translation, angles, *_) in enumerate(orientations):
|
544
600
|
rotation_matrix = euler_to_rotationmatrix(angles)
|
545
601
|
if template_is_density:
|
546
|
-
translation = np.subtract(translation,
|
602
|
+
translation = np.subtract(translation, center)
|
547
603
|
transformed_template = template.rigid_transform(
|
548
604
|
rotation_matrix=rotation_matrix
|
549
605
|
)
|
550
|
-
|
551
|
-
|
606
|
+
transformed_template.origin = np.add(
|
607
|
+
target_origin, np.multiply(translation, sampling_rate)
|
608
|
+
)
|
609
|
+
|
552
610
|
else:
|
553
611
|
template = Structure.from_file(cli_args.template)
|
554
612
|
new_center_of_mass = np.add(
|
555
613
|
np.multiply(translation, sampling_rate), target_origin
|
556
614
|
)
|
557
|
-
translation = np.subtract(new_center_of_mass,
|
615
|
+
translation = np.subtract(new_center_of_mass, center)
|
558
616
|
transformed_template = template.rigid_transform(
|
559
617
|
translation=translation[::-1],
|
560
618
|
rotation_matrix=rotation_matrix[::-1, ::-1],
|
@@ -789,7 +789,10 @@ class AlignmentWidget(widgets.Container):
|
|
789
789
|
active_layer = self.viewer.layers.selection.active
|
790
790
|
if active_layer is None:
|
791
791
|
return ()
|
792
|
-
|
792
|
+
try:
|
793
|
+
return [i for i in range(active_layer.data.ndim)]
|
794
|
+
except Exception:
|
795
|
+
return ()
|
793
796
|
|
794
797
|
def _update_align_axis(self, *args):
|
795
798
|
self.align_axis.choices = self._get_active_layer_dims()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pytme
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.1
|
4
4
|
Summary: Python Template Matching Engine
|
5
5
|
Author: Valentin Maurer
|
6
6
|
Author-email: Valentin Maurer <valentin.maurer@embl-hamburg.de>
|
@@ -22,7 +22,7 @@ Requires-Dist: scikit-learn >=1.2.1
|
|
22
22
|
Requires-Dist: scipy >=1.9.1
|
23
23
|
Requires-Dist: pybind11
|
24
24
|
Requires-Dist: psutil
|
25
|
-
Requires-Dist: tifffile
|
25
|
+
Requires-Dist: tifffile
|
26
26
|
Requires-Dist: h5py
|
27
27
|
|
28
28
|
# Python Template Matching Engine (PyTME)
|
@@ -0,0 +1,73 @@
|
|
1
|
+
pytme-0.2.1.data/scripts/estimate_ram_usage.py,sha256=R1NDpFajcF-MonJ4a43SfDlA-nxBYwK7D2quzCdsVFM,2767
|
2
|
+
pytme-0.2.1.data/scripts/match_template.py,sha256=d9c_014dy4X9jFtulHkypuRqcDTCJsddA5-tt2ZUw6g,39833
|
3
|
+
pytme-0.2.1.data/scripts/postprocess.py,sha256=dg2TQpoTiQFDm1Q-l-WH3g0kIqwBEvKk-hX1QhhgjoI,23132
|
4
|
+
pytme-0.2.1.data/scripts/preprocess.py,sha256=zog-l2Je-GeouJ6SnamOMuHgTn7fFPiGnO5X03y5qSY,2527
|
5
|
+
pytme-0.2.1.data/scripts/preprocessor_gui.py,sha256=-lYdd9--xvgZghhuPE43JGycventc3tPoG4JF1wkXo0,35254
|
6
|
+
scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
+
scripts/estimate_ram_usage.py,sha256=rN7haobnHg3YcgGJIp81FNiCzy8-saJGeEurQlmQmNQ,2768
|
8
|
+
scripts/extract_candidates.py,sha256=j8SZNw4-F73_7o0_NorioQcyH8LatrbNX4pwfe-XC9A,8139
|
9
|
+
scripts/match_template.py,sha256=yTFtX0cZqk6Q38wtlDDTzHRRJsGLNnoVTXQeXWBH8Rc,39834
|
10
|
+
scripts/match_template_filters.py,sha256=-QnSZsGgLP5k6nH5DXINO2Yd7c1zEq_qyIDwfGB0w8o,40272
|
11
|
+
scripts/postprocess.py,sha256=L67WF7A9RIWEjr04KzHjHDg4LUpbn6h19JFKh_OyonI,23133
|
12
|
+
scripts/preprocess.py,sha256=ebJVLxbRlB6TI5YHNr0VavZ4lmaRdf8QVafyiDhh_oU,2528
|
13
|
+
scripts/preprocessor_gui.py,sha256=2-IKFVwztnvOa_G6fZ4SYsk1g6rFb3_-LMDmWSHqCno,35255
|
14
|
+
scripts/refine_matches.py,sha256=BlQqZFYdatAUAPly14xobDgqJOWvwEidjTz4pW4QBlg,14628
|
15
|
+
tme/__init__.py,sha256=MGVeRX1f5k6RwExBcffZtCM7igNNtpoIr2G2yJZ4OHI,251
|
16
|
+
tme/__version__.py,sha256=HfjVOrpTnmZ-xVFCYSVmX50EXaBQeJteUHG-PD6iQs8,22
|
17
|
+
tme/analyzer.py,sha256=esp23U15jsctbtDy1QMcUwsiBCwXbapiRfH3ZEVvwOg,61500
|
18
|
+
tme/density.py,sha256=cMfHfZSY8Ff9w7HfE-Sqigo4XKT_naht3jMtdWg4sKk,88846
|
19
|
+
tme/extensions.cpython-311-darwin.so,sha256=nIqjOFVGoKxod55SSK7hNvHxk6uTnTQ-oqkYdSsmn6Y,411792
|
20
|
+
tme/helpers.py,sha256=TMtBuJoZk6q4M_rfkr8yPpGzJD74ycqyN3yXMuU9mr4,23625
|
21
|
+
tme/matching_constrained.py,sha256=NAJnZpusjQs5rKabHiNyrclXSPm27K0V8HVFjTQ2zB0,6725
|
22
|
+
tme/matching_data.py,sha256=QeAhwgqiwCpQIghlj9wN0jCbW1UpZH55DOZWFudtXSw,24869
|
23
|
+
tme/matching_exhaustive.py,sha256=YidMx0RGnV-YdAK-tEdG9aHg06sSE3QgV-D2KMTKcZE,63676
|
24
|
+
tme/matching_memory.py,sha256=bmCAUYyXWEet-1XXhldtc0irio2ytMSsAzWYyFI5LNM,11273
|
25
|
+
tme/matching_optimization.py,sha256=wil0-5DYrqLzgFMhi-uClkt5mzp15AE_--zmmhJbdkw,43530
|
26
|
+
tme/matching_utils.py,sha256=qLcRcfMCURsA5vFvJDUBa7xIAHsICWn_PB_jOYK3Pb0,42520
|
27
|
+
tme/orientations.py,sha256=3SuKZhscTGnclOfNJCz2Rq1KiePHFytPdjuHiQi7m5Q,23929
|
28
|
+
tme/parser.py,sha256=tA9ABeV95cZn8lJCukVUaocQ9RguR6ZZzQsMXf_-ud0,13887
|
29
|
+
tme/preprocessor.py,sha256=ylVO-D1o9lpvvApXEymkmtdRrvaFd2HrJSn9nsWcMTs,51225
|
30
|
+
tme/structure.py,sha256=mIhDhGksMf8cSARr0ofNhJQUpQIdpKZtJsX63Law2z0,52503
|
31
|
+
tme/types.py,sha256=2Tyh_xnMLxIWYb3aJDAUb6GWpaL6gcYMUm2YNbJlAPI,295
|
32
|
+
tme/backends/__init__.py,sha256=xNX4Vx182F57AwZjb0DwLJA-sps6DixnDRWPcMlOvWw,4397
|
33
|
+
tme/backends/cupy_backend.py,sha256=1Wsnoo0HiIELRGb8wT9VZJ5spVEU5-DVbyyY092RixI,13230
|
34
|
+
tme/backends/jax_backend.py,sha256=uq_Vk_ofb5JG9IGg3SfHn3YqcBD9c4wWypgdCu9HTno,7372
|
35
|
+
tme/backends/matching_backend.py,sha256=eFoowia-uzc1UYAq9AnDN3CMN31rWAT1ilCskH6sruw,29876
|
36
|
+
tme/backends/mlx_backend.py,sha256=pq4U3m3-dAkSC5y6P0R1CayvVKwi5rZjTVoeG4XOQ8g,8569
|
37
|
+
tme/backends/npfftw_backend.py,sha256=_PzGKO6fuo20RofChRqq7WlfqVm-6Ne6tMPEyxB3fvE,27856
|
38
|
+
tme/backends/pytorch_backend.py,sha256=cY3KSQdLy80NVvKSMy5Jj6HzD1UDsLRQTeC2WA70Abo,18694
|
39
|
+
tme/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
40
|
+
tme/data/c48n309.npy,sha256=NwH64mOEbm3tStq5c98o81fY1vMOoq4nvXDAh7Z7iZg,296768
|
41
|
+
tme/data/c48n527.npy,sha256=saSUMTa1R0MisPvgFL02a7IHQSwEZ-mJu0v3qJjg5AU,506048
|
42
|
+
tme/data/c48n9.npy,sha256=bDVLV6mWjZHSQfeDc-MOCKKarfc1jaNeVvpoe2xMUy4,8768
|
43
|
+
tme/data/c48u1.npy,sha256=JeXMFzFITs2ezdc3x5lp3jo1cHHHHVADSA1Tpf77kXs,1088
|
44
|
+
tme/data/c48u1153.npy,sha256=ECiEximtYDWtIux3Fwe_EJlyn08gUqP85DN9gjkT9_k,1107008
|
45
|
+
tme/data/c48u1201.npy,sha256=aceC_Jeienz_81X4520nPpZcg5tnRhbW795EqbpWkrg,1153088
|
46
|
+
tme/data/c48u1641.npy,sha256=p4LwW3LzdTjrUUpA7H53RfNWxYfPX0XjeSwZ39Ac78Q,1575488
|
47
|
+
tme/data/c48u181.npy,sha256=mLYXrv1YHLH6DsBp5MkxHkxlxgMnj1mw_KKI0udH-FY,173888
|
48
|
+
tme/data/c48u2219.npy,sha256=p8TQeX8YHu4pdxnwJjEAlQWAPa66W7kpK96iZKZr9JE,2130368
|
49
|
+
tme/data/c48u27.npy,sha256=k03ZNEsoPwBKCy8IeIa5G0WRZqjGZMtX6Ibu7EpJHvU,26048
|
50
|
+
tme/data/c48u2947.npy,sha256=icI97ED6ct66y7FIaJAugmjzrIWk7CINCxtO3wDTnrU,2829248
|
51
|
+
tme/data/c48u3733.npy,sha256=tla-__Pf-hpN6h04vtFIfkkFdCLple11VO06kr1dXkM,3583808
|
52
|
+
tme/data/c48u4749.npy,sha256=tItOA4oV7SiqCCREwz3fyEpZoxM0lCq_jfEo5_-fp2s,4559168
|
53
|
+
tme/data/c48u5879.npy,sha256=bFk89MllIFCX_sLXTYWFquSyN1NuahH4wwnEsPJLxzA,5643968
|
54
|
+
tme/data/c48u7111.npy,sha256=CMy9kI2edH-q9eTIVdgUtXurplYNI7Uqp4dXfkkVdf8,6826688
|
55
|
+
tme/data/c48u815.npy,sha256=bCuJxLtm0Sjg3GGxtyjGzRYZ1G0Gz79XHI-71GvqQnI,782528
|
56
|
+
tme/data/c48u83.npy,sha256=7ODJYnsiuDjGbgd9GFopsyIW2IjrYI0J2X2f-cK868U,79808
|
57
|
+
tme/data/c48u8649.npy,sha256=-IPlpR4zrPQZWhhSPu4zEulFdrCEVgTMFffCB5d-huE,8303168
|
58
|
+
tme/data/c600v.npy,sha256=JqSu3ALoL1A9iguehc0YGUMFPsh2fprHHp76VXeFXIw,2528
|
59
|
+
tme/data/c600vc.npy,sha256=Yht-GFXDSjjGvsjFBvyxxEZAI-ODADPd5gEgFNZQVTA,14528
|
60
|
+
tme/data/metadata.yaml,sha256=fAgX-mEzB0QMHTEtYDG4cSMbJhYxBbDJH3sdvJvL7a8,750
|
61
|
+
tme/data/quat_to_numpy.py,sha256=-gkDZb10fKBxwfYrSLCUWvMB76TzZWELCeKsYProwws,1333
|
62
|
+
tme/preprocessing/__init__.py,sha256=7O3vDzJcIfxovJkf7avWSPtzaIVlTbmsW7egQFukC_s,98
|
63
|
+
tme/preprocessing/_utils.py,sha256=jj5VSRLewO4uk0cHoEhpw2rTU9taT8iuZCijvbFcrw0,5190
|
64
|
+
tme/preprocessing/composable_filter.py,sha256=sp3bN8JeFB2r384cEIgvN6yXjC53GCoPhBmGI0S0kbI,781
|
65
|
+
tme/preprocessing/compose.py,sha256=tbQMo3LaKRBnOFKoqZ64as3i0t6U6312s76Csz0FPvk,1324
|
66
|
+
tme/preprocessing/frequency_filters.py,sha256=k3MvXTBeoETTp5WINpqxEcmhiHSFh90QyAJBXe-fGxs,12614
|
67
|
+
tme/preprocessing/tilt_series.py,sha256=OaYMuN4e0F5Z7tuNVwG_kn69E4zPAU6_xIoA5B-IQUw,34747
|
68
|
+
pytme-0.2.1.dist-info/LICENSE,sha256=K1IUNSVAz8BXbpH5EA8y5FpaHdvFXnAF2zeK95Lr2bY,18467
|
69
|
+
pytme-0.2.1.dist-info/METADATA,sha256=pTq0YVA2oWM7Zo8p-lk6ynkuZsEHAPnDDEbzcbEon_4,2165
|
70
|
+
pytme-0.2.1.dist-info/WHEEL,sha256=BDgKu9_KNfDn85ptly0T56JpX4avXH07X_ZCqAJnQwY,110
|
71
|
+
pytme-0.2.1.dist-info/entry_points.txt,sha256=ff3LQL3FCWfCYOwFiP9zatm7laUbnwCkuPELkQVyUO4,241
|
72
|
+
pytme-0.2.1.dist-info/top_level.txt,sha256=J8FUkazOb2fZ0n_KexnqCGyNOtie2bwisFSUBiM5-0w,12
|
73
|
+
pytme-0.2.1.dist-info/RECORD,,
|