reboost 0.6.2__py3-none-any.whl → 0.8.0__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.
- reboost/_version.py +16 -3
- reboost/build_hit.py +102 -58
- reboost/cli.py +1 -0
- reboost/core.py +18 -9
- reboost/daq/__init__.py +5 -0
- reboost/daq/core.py +262 -0
- reboost/daq/utils.py +28 -0
- reboost/hpge/psd.py +444 -94
- reboost/hpge/surface.py +34 -1
- reboost/hpge/utils.py +2 -1
- reboost/iterator.py +4 -1
- reboost/math/stats.py +2 -2
- reboost/optmap/cli.py +40 -101
- reboost/optmap/convolve.py +206 -233
- reboost/optmap/create.py +41 -124
- reboost/optmap/evt.py +5 -2
- reboost/optmap/mapview.py +9 -7
- reboost/optmap/optmap.py +13 -14
- reboost/shape/cluster.py +4 -4
- reboost/spms/__init__.py +5 -0
- reboost/spms/pe.py +178 -0
- reboost/units.py +40 -8
- reboost/utils.py +65 -3
- {reboost-0.6.2.dist-info → reboost-0.8.0.dist-info}/METADATA +7 -5
- reboost-0.8.0.dist-info/RECORD +42 -0
- reboost-0.6.2.dist-info/RECORD +0 -37
- {reboost-0.6.2.dist-info → reboost-0.8.0.dist-info}/WHEEL +0 -0
- {reboost-0.6.2.dist-info → reboost-0.8.0.dist-info}/entry_points.txt +0 -0
- {reboost-0.6.2.dist-info → reboost-0.8.0.dist-info}/licenses/LICENSE +0 -0
- {reboost-0.6.2.dist-info → reboost-0.8.0.dist-info}/top_level.txt +0 -0
reboost/spms/pe.py
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
import awkward as ak
|
|
6
|
+
import numpy as np
|
|
7
|
+
from lgdo import VectorOfVectors
|
|
8
|
+
|
|
9
|
+
from ..optmap import convolve
|
|
10
|
+
from ..units import units_conv_ak
|
|
11
|
+
|
|
12
|
+
log = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def load_optmap_all(map_file: str) -> convolve.OptmapForConvolve:
|
|
16
|
+
"""Load an optical map file for later use with :py:func:`detected_photoelectrons`."""
|
|
17
|
+
return convolve.open_optmap(map_file)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def load_optmap(map_file: str, spm_det_uid: int) -> convolve.OptmapForConvolve:
|
|
21
|
+
"""Load an optical map file for later use with :py:func:`detected_photoelectrons`."""
|
|
22
|
+
return convolve.open_optmap_single(map_file, spm_det_uid)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _nested_unflatten(data: ak.Array, lengths: ak.Array):
|
|
26
|
+
return ak.unflatten(ak.unflatten(ak.flatten(data), ak.flatten(lengths)), ak.num(lengths))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def corrected_photoelectrons(
|
|
30
|
+
simulated_pe: ak.Array,
|
|
31
|
+
simulated_uids: ak.Array,
|
|
32
|
+
data_pe: ak.Array,
|
|
33
|
+
data_uids: ak.Array,
|
|
34
|
+
*,
|
|
35
|
+
seed: int | None = None,
|
|
36
|
+
) -> tuple[ak.Array, ak.Array]:
|
|
37
|
+
r"""Add a correction to the observed number of photoelectrons (p.e.) using forced trigger data.
|
|
38
|
+
|
|
39
|
+
For every simulated event a corresponding forced trigger event in data is chosen
|
|
40
|
+
and the resulting number of p.e. for each channel (i) is:
|
|
41
|
+
|
|
42
|
+
.. math::
|
|
43
|
+
|
|
44
|
+
n_i = n_{\text{sim},i} + n_{\text{data},i}
|
|
45
|
+
|
|
46
|
+
.. warning::
|
|
47
|
+
The number of supplied forced trigger events in data should ideally be
|
|
48
|
+
more than that in the simulations. If this is not the case and "allow_data_reuse"
|
|
49
|
+
is True then some data events will be used multiple times. This introduces
|
|
50
|
+
a small amount of correlation between the simulated events, but is probably acceptable
|
|
51
|
+
in most circumstances.
|
|
52
|
+
|
|
53
|
+
Parameters
|
|
54
|
+
----------
|
|
55
|
+
simulated_pe
|
|
56
|
+
The number of number of detected pe per sipm channel.
|
|
57
|
+
simulated_uids
|
|
58
|
+
The unique identifier (uid) for each sipm hit.
|
|
59
|
+
data_pe
|
|
60
|
+
The collection of forced trigger pe.
|
|
61
|
+
data_uids
|
|
62
|
+
The uids for each forced trigger event.
|
|
63
|
+
seed
|
|
64
|
+
Seed for random number generator
|
|
65
|
+
|
|
66
|
+
Returns
|
|
67
|
+
-------
|
|
68
|
+
a tuple of the corrected pe and sipm uids.
|
|
69
|
+
"""
|
|
70
|
+
rand = np.random.default_rng(seed=seed)
|
|
71
|
+
rand_ints = rand.integers(0, len(data_pe), size=len(simulated_pe))
|
|
72
|
+
|
|
73
|
+
selected_data_pe = data_pe[rand_ints]
|
|
74
|
+
selected_data_uids = data_uids[rand_ints]
|
|
75
|
+
|
|
76
|
+
# combine sims with data
|
|
77
|
+
pe_tot = ak.concatenate([simulated_pe, selected_data_pe], axis=1)
|
|
78
|
+
uid_tot = ak.concatenate([simulated_uids, selected_data_uids], axis=1)
|
|
79
|
+
|
|
80
|
+
# sort by uid
|
|
81
|
+
order = ak.argsort(uid_tot)
|
|
82
|
+
pe_tot = pe_tot[order]
|
|
83
|
+
uid_tot = uid_tot[order]
|
|
84
|
+
|
|
85
|
+
# add an extra axis
|
|
86
|
+
n = ak.run_lengths(uid_tot)
|
|
87
|
+
|
|
88
|
+
# add another dimension
|
|
89
|
+
pe_tot = _nested_unflatten(pe_tot, n)
|
|
90
|
+
uid_tot = _nested_unflatten(uid_tot, n)
|
|
91
|
+
|
|
92
|
+
# sum pe and take the first uid (should all be the same)
|
|
93
|
+
corrected_pe = ak.sum(pe_tot, axis=-1)
|
|
94
|
+
uid_tot = ak.fill_none(ak.firsts(uid_tot, axis=-1), np.nan)
|
|
95
|
+
|
|
96
|
+
return corrected_pe, uid_tot
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def detected_photoelectrons(
|
|
100
|
+
num_scint_ph: ak.Array,
|
|
101
|
+
particle: ak.Array,
|
|
102
|
+
time: ak.Array,
|
|
103
|
+
xloc: ak.Array,
|
|
104
|
+
yloc: ak.Array,
|
|
105
|
+
zloc: ak.Array,
|
|
106
|
+
optmap: convolve.OptmapForConvolve,
|
|
107
|
+
material: str,
|
|
108
|
+
spm_detector_uid: int,
|
|
109
|
+
map_scaling: float = 1,
|
|
110
|
+
map_scaling_sigma: float = 0,
|
|
111
|
+
) -> VectorOfVectors:
|
|
112
|
+
"""Derive the number of detected photoelectrons (p.e.) from scintillator hits using an optical map.
|
|
113
|
+
|
|
114
|
+
Parameters
|
|
115
|
+
----------
|
|
116
|
+
num_scint_ph
|
|
117
|
+
array of emitted scintillation photons, as generated by
|
|
118
|
+
:func:`emitted_scintillation_photons`.
|
|
119
|
+
particle
|
|
120
|
+
array of particle PDG IDs of scintillation events.
|
|
121
|
+
time
|
|
122
|
+
array of timestamps of scintillation events.
|
|
123
|
+
xloc
|
|
124
|
+
array of x coordinate position of scintillation events.
|
|
125
|
+
yloc
|
|
126
|
+
array of y coordinate position of scintillation events.
|
|
127
|
+
zloc
|
|
128
|
+
array of z coordinate position of scintillation events.
|
|
129
|
+
optmap
|
|
130
|
+
the optical map loaded via py:func:`load_optmap`.
|
|
131
|
+
material
|
|
132
|
+
scintillating material name.
|
|
133
|
+
spm_detector_uid
|
|
134
|
+
SiPM detector uid as used in the optical map.
|
|
135
|
+
map_scaling
|
|
136
|
+
scale the detection probability in the map for this detector by this factor.
|
|
137
|
+
map_scaling_sigma
|
|
138
|
+
if larger than zero, sample the used scaling factor for each (reshaped) event
|
|
139
|
+
from a normal distribution with this standard deviation.
|
|
140
|
+
"""
|
|
141
|
+
hits = ak.Array(
|
|
142
|
+
{
|
|
143
|
+
"num_scint_ph": num_scint_ph,
|
|
144
|
+
"particle": particle,
|
|
145
|
+
"time": units_conv_ak(time, "ns"),
|
|
146
|
+
"xloc": units_conv_ak(xloc, "m"),
|
|
147
|
+
"yloc": units_conv_ak(yloc, "m"),
|
|
148
|
+
"zloc": units_conv_ak(zloc, "m"),
|
|
149
|
+
}
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
scint_mat_params = convolve._get_scint_params(material)
|
|
153
|
+
pe = convolve.iterate_stepwise_depositions_pois(
|
|
154
|
+
hits, optmap, scint_mat_params, spm_detector_uid, map_scaling, map_scaling_sigma
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
return VectorOfVectors(pe, attrs={"units": "ns"})
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def emitted_scintillation_photons(
|
|
161
|
+
edep: ak.Array, particle: ak.Array, material: str
|
|
162
|
+
) -> VectorOfVectors:
|
|
163
|
+
"""Derive the number of emitted scintillation photons from scintillator hits.
|
|
164
|
+
|
|
165
|
+
Parameters
|
|
166
|
+
----------
|
|
167
|
+
edep
|
|
168
|
+
array of deposited energy in scintillation events.
|
|
169
|
+
particle
|
|
170
|
+
array of particle PDG IDs of scintillation events.
|
|
171
|
+
material
|
|
172
|
+
scintillating material name.
|
|
173
|
+
"""
|
|
174
|
+
hits = ak.Array({"edep": units_conv_ak(edep, "keV"), "particle": particle})
|
|
175
|
+
|
|
176
|
+
scint_mat_params = convolve._get_scint_params(material)
|
|
177
|
+
ph = convolve.iterate_stepwise_depositions_scintillate(hits, scint_mat_params)
|
|
178
|
+
return VectorOfVectors(ph)
|
reboost/units.py
CHANGED
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
from typing import Any
|
|
5
5
|
|
|
6
|
+
import awkward as ak
|
|
6
7
|
import pint
|
|
7
8
|
import pyg4ometry as pg4
|
|
8
9
|
from lgdo import LGDO
|
|
@@ -16,7 +17,7 @@ ureg = pint.get_application_registry()
|
|
|
16
17
|
ureg.formatter.default_format = "~P"
|
|
17
18
|
|
|
18
19
|
|
|
19
|
-
def pg4_to_pint(obj) -> pint.Quantity:
|
|
20
|
+
def pg4_to_pint(obj: pint.Quantity | pg4.gdml.Defines.VectorBase) -> pint.Quantity:
|
|
20
21
|
"""Convert pyg4ometry object to pint Quantity."""
|
|
21
22
|
if isinstance(obj, pint.Quantity):
|
|
22
23
|
return obj
|
|
@@ -26,32 +27,54 @@ def pg4_to_pint(obj) -> pint.Quantity:
|
|
|
26
27
|
raise ValueError(msg)
|
|
27
28
|
|
|
28
29
|
|
|
29
|
-
def units_convfact(data: Any, target_units: pint.
|
|
30
|
+
def units_convfact(data: Any | LGDO | ak.Array, target_units: pint.Unit | str) -> float:
|
|
30
31
|
"""Calculate numeric conversion factor to reach `target_units`.
|
|
31
32
|
|
|
32
33
|
Parameters
|
|
33
34
|
----------
|
|
34
35
|
data
|
|
35
|
-
starting data structure. If an LGDO
|
|
36
|
-
into its attributes. Otherwise, just return 1.
|
|
36
|
+
starting data structure. If an :class:`LGDO` or :class:`ak.Array`, try to
|
|
37
|
+
determine units by peeking into its attributes. Otherwise, just return 1.
|
|
37
38
|
target_units
|
|
38
39
|
units you wish to convert data to.
|
|
39
40
|
"""
|
|
40
41
|
if isinstance(data, LGDO) and "units" in data.attrs:
|
|
41
42
|
return ureg(data.attrs["units"]).to(target_units).magnitude
|
|
43
|
+
if isinstance(data, ak.Array) and "units" in ak.parameters(data):
|
|
44
|
+
return ureg(ak.parameters(data)["units"]).to(target_units).magnitude
|
|
42
45
|
return 1
|
|
43
46
|
|
|
44
47
|
|
|
45
|
-
def
|
|
48
|
+
def units_conv_ak(data: Any | LGDO | ak.Array, target_units: pint.Unit | str) -> ak.Array:
|
|
49
|
+
"""Calculate numeric conversion factor to reach `target_units`, and apply to data converted to ak.
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
data
|
|
54
|
+
starting data structure. If an :class:`LGDO` or :class:`ak.Array`, try to
|
|
55
|
+
determine units by peeking into its attributes. Otherwise, return the data
|
|
56
|
+
unchanged.
|
|
57
|
+
target_units
|
|
58
|
+
units you wish to convert data to.
|
|
59
|
+
"""
|
|
60
|
+
fact = units_convfact(data, target_units)
|
|
61
|
+
if isinstance(data, LGDO) and fact != 1:
|
|
62
|
+
return ak.without_parameters(data.view_as("ak") * fact)
|
|
63
|
+
if isinstance(data, ak.Array) and fact != 1:
|
|
64
|
+
return ak.without_parameters(data * fact)
|
|
65
|
+
return data.view_as("ak") if isinstance(data, LGDO) else data
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def unwrap_lgdo(data: Any | LGDO | ak.Array, library: str = "ak") -> tuple[Any, pint.Unit | None]:
|
|
46
69
|
"""Return a view of the data held by the LGDO and its physical units.
|
|
47
70
|
|
|
48
71
|
Parameters
|
|
49
72
|
----------
|
|
50
73
|
data
|
|
51
|
-
the data container. If not an LGDO
|
|
52
|
-
``None`` units.
|
|
74
|
+
the data container. If not an :class:`LGDO` or :class:`ak.Array`, it will be
|
|
75
|
+
returned as is with ``None`` units.
|
|
53
76
|
library
|
|
54
|
-
forwarded to :
|
|
77
|
+
forwarded to :meth:`LGDO.view_as`.
|
|
55
78
|
|
|
56
79
|
Returns
|
|
57
80
|
-------
|
|
@@ -64,6 +87,15 @@ def unwrap_lgdo(data: Any, library: str = "ak") -> tuple(Any, pint.Unit | None):
|
|
|
64
87
|
if "units" in data.attrs:
|
|
65
88
|
ret_units = ureg(data.attrs["units"]).u
|
|
66
89
|
|
|
90
|
+
if isinstance(data, ak.Array):
|
|
91
|
+
if library != "ak":
|
|
92
|
+
msg = "cannot unwrap an awkward array as a non-awkward type"
|
|
93
|
+
raise ValueError(msg)
|
|
94
|
+
|
|
95
|
+
if "units" in ak.parameters(data):
|
|
96
|
+
ret_units = ureg(ak.parameters(data)["units"]).u
|
|
97
|
+
ret_data = ak.without_parameters(data)
|
|
98
|
+
|
|
67
99
|
return ret_data, ret_units
|
|
68
100
|
|
|
69
101
|
|
reboost/utils.py
CHANGED
|
@@ -9,6 +9,7 @@ from collections.abc import Iterable, Mapping
|
|
|
9
9
|
from contextlib import contextmanager
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
|
|
12
|
+
import h5py
|
|
12
13
|
from dbetto import AttrsDict
|
|
13
14
|
from lgdo import lh5
|
|
14
15
|
from lgdo.types import Struct, Table, VectorOfVectors
|
|
@@ -164,7 +165,7 @@ def get_file_dict(
|
|
|
164
165
|
files = {}
|
|
165
166
|
|
|
166
167
|
for file_type, file_list in zip(
|
|
167
|
-
["stp", "glm", "hit"], [stp_files, glm_files_list, hit_files_list]
|
|
168
|
+
["stp", "glm", "hit"], [stp_files, glm_files_list, hit_files_list], strict=True
|
|
168
169
|
):
|
|
169
170
|
if isinstance(file_list, str):
|
|
170
171
|
files[file_type] = [file_list]
|
|
@@ -283,7 +284,7 @@ def get_function_string(expr: str, aliases: dict | None = None) -> tuple[str, di
|
|
|
283
284
|
if "." not in func_call:
|
|
284
285
|
continue
|
|
285
286
|
|
|
286
|
-
subpackage,
|
|
287
|
+
subpackage, _func = func_call.rsplit(".", 1)
|
|
287
288
|
package = subpackage.split(".")[0]
|
|
288
289
|
|
|
289
290
|
# import the subpackage
|
|
@@ -303,7 +304,10 @@ def get_function_string(expr: str, aliases: dict | None = None) -> tuple[str, di
|
|
|
303
304
|
globs = globs | {
|
|
304
305
|
package: importlib.import_module(package_import),
|
|
305
306
|
}
|
|
306
|
-
except Exception:
|
|
307
|
+
except Exception as e:
|
|
308
|
+
# for imports of our own package, raise the error back to the user
|
|
309
|
+
if package_import == "reboost":
|
|
310
|
+
raise e
|
|
307
311
|
msg = f"Function {package_import} cannot be imported"
|
|
308
312
|
log.debug(msg)
|
|
309
313
|
continue
|
|
@@ -439,3 +443,61 @@ def write_lh5(
|
|
|
439
443
|
)
|
|
440
444
|
if time_dict is not None:
|
|
441
445
|
time_dict.update_field("write", start_time)
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
def get_remage_detector_uids(h5file: str | Path) -> dict:
|
|
449
|
+
"""Get mapping of detector names to UIDs from a remage output file.
|
|
450
|
+
|
|
451
|
+
The remage LH5 output files contain a link structure that lets the user
|
|
452
|
+
access detector tables by UID. For example:
|
|
453
|
+
|
|
454
|
+
.. code-block:: text
|
|
455
|
+
|
|
456
|
+
├── stp · struct{det1,det2,optdet1,optdet2,scint1,scint2}
|
|
457
|
+
└── __by_uid__ · struct{det001,det002,det011,det012,det101,det102}
|
|
458
|
+
├── det001 -> /stp/scint1
|
|
459
|
+
├── det002 -> /stp/scint2
|
|
460
|
+
├── det011 -> /stp/det1
|
|
461
|
+
├── det012 -> /stp/det2
|
|
462
|
+
├── det101 -> /stp/optdet1
|
|
463
|
+
└── det102 -> /stp/optdet2
|
|
464
|
+
|
|
465
|
+
This function analyzes this structure and returns:
|
|
466
|
+
|
|
467
|
+
.. code-block:: text
|
|
468
|
+
|
|
469
|
+
{1: 'scint1',
|
|
470
|
+
2: 'scint2',
|
|
471
|
+
11: 'det1',
|
|
472
|
+
12: 'det2',
|
|
473
|
+
101: 'optdet1',
|
|
474
|
+
102: 'optdet2'g
|
|
475
|
+
|
|
476
|
+
Parameters
|
|
477
|
+
----------
|
|
478
|
+
h5file
|
|
479
|
+
path to remage output file.
|
|
480
|
+
"""
|
|
481
|
+
if isinstance(h5file, Path):
|
|
482
|
+
h5file = h5file.as_posix()
|
|
483
|
+
|
|
484
|
+
out = {}
|
|
485
|
+
with h5py.File(h5file, "r") as f:
|
|
486
|
+
g = f["/stp/__by_uid__"]
|
|
487
|
+
# loop over links
|
|
488
|
+
for key in g:
|
|
489
|
+
# is this a link?
|
|
490
|
+
link = g.get(key, getlink=True)
|
|
491
|
+
if isinstance(link, h5py.SoftLink):
|
|
492
|
+
m = re.fullmatch(r"det(\d+)", key)
|
|
493
|
+
if m is None:
|
|
494
|
+
msg = rf"'{key}' is not formatted as expected, i.e. 'det(\d+)', skipping"
|
|
495
|
+
log.warning(msg)
|
|
496
|
+
continue
|
|
497
|
+
|
|
498
|
+
# get the name of the link target without trailing groups (to
|
|
499
|
+
# i.e. remove /stp)
|
|
500
|
+
name = link.path.split("/")[-1]
|
|
501
|
+
|
|
502
|
+
out[int(m.group(1))] = name
|
|
503
|
+
return out
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: reboost
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.0
|
|
4
4
|
Summary: New LEGEND Monte-Carlo simulation post-processing
|
|
5
5
|
Author-email: Manuel Huber <info@manuelhu.de>, Toby Dixon <toby.dixon.23@ucl.ac.uk>, Luigi Pertoldi <gipert@pm.me>
|
|
6
6
|
Maintainer: The LEGEND Collaboration
|
|
@@ -693,16 +693,16 @@ Classifier: Programming Language :: Python
|
|
|
693
693
|
Classifier: Programming Language :: Python :: 3
|
|
694
694
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
695
695
|
Classifier: Topic :: Scientific/Engineering
|
|
696
|
-
Requires-Python: >=3.
|
|
696
|
+
Requires-Python: >=3.10
|
|
697
697
|
Description-Content-Type: text/markdown
|
|
698
698
|
License-File: LICENSE
|
|
699
699
|
Requires-Dist: hdf5plugin
|
|
700
700
|
Requires-Dist: colorlog
|
|
701
701
|
Requires-Dist: numpy
|
|
702
702
|
Requires-Dist: scipy
|
|
703
|
-
Requires-Dist: numba
|
|
704
|
-
Requires-Dist: legend-pydataobj>=1.
|
|
705
|
-
Requires-Dist: legend-pygeom-optics>=0.
|
|
703
|
+
Requires-Dist: numba>=0.60
|
|
704
|
+
Requires-Dist: legend-pydataobj>=1.15.1
|
|
705
|
+
Requires-Dist: legend-pygeom-optics>=0.12.0
|
|
706
706
|
Requires-Dist: legend-pygeom-tools>=0.0.11
|
|
707
707
|
Requires-Dist: hist
|
|
708
708
|
Requires-Dist: dbetto
|
|
@@ -728,6 +728,8 @@ Dynamic: license-file
|
|
|
728
728
|
|
|
729
729
|
# reboost
|
|
730
730
|
|
|
731
|
+
[](https://pypi.org/project/reboost/)
|
|
732
|
+
[](https://anaconda.org/conda-forge/reboost)
|
|
731
733
|

|
|
732
734
|
[](https://github.com/legend-exp/reboost/actions)
|
|
733
735
|
[](https://github.com/pre-commit/pre-commit)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
reboost/__init__.py,sha256=VZz9uo7i2jgAx8Zi15SptLZnE_qcnGuNWwqkD3rYHFA,278
|
|
2
|
+
reboost/_version.py,sha256=Rttl-BDadtcW1QzGnNffCWA_Wc9mUKDMOBPZp--Mnsc,704
|
|
3
|
+
reboost/build_evt.py,sha256=VXIfK_pfe_Cgym6gI8dESwONZi-v_4fll0Pn09vePQY,3767
|
|
4
|
+
reboost/build_glm.py,sha256=IerSLQfe51ZO7CQP2kmfPnOIVaDtcfw3byOM02Vaz6o,9472
|
|
5
|
+
reboost/build_hit.py,sha256=pjEaiPW63Q3MfpjI29uJXx9gtwfiOIgOcADRDrDpRrA,17409
|
|
6
|
+
reboost/cli.py,sha256=68EzKiWTHJ2u1RILUv7IX9HaVq6nTTM80_W_MUnWRe4,6382
|
|
7
|
+
reboost/core.py,sha256=TPxvZgUaHZdxfQSDdX2zIerQXt3Gq-zQaA6AeXZKNvA,15232
|
|
8
|
+
reboost/iterator.py,sha256=qlEqRv5qOh8eIs-dyVOLYTvH-ZpQDx9fLckpcAdtWjs,6975
|
|
9
|
+
reboost/log_utils.py,sha256=VqS_9OC5NeNU3jcowVOBB0NJ6ssYvNWnirEY-JVduEA,766
|
|
10
|
+
reboost/profile.py,sha256=EOTmjmS8Rm_nYgBWNh6Rntl2XDsxdyed7yEdWtsZEeg,2598
|
|
11
|
+
reboost/units.py,sha256=LUwl6swLQoG09Rt9wcDdu6DTrwDsy-C751BNGzX4sz8,3651
|
|
12
|
+
reboost/utils.py,sha256=-4315U6m1M-rwoaI_inI1wIo_l20kvoGmC84D_QOhkE,14563
|
|
13
|
+
reboost/daq/__init__.py,sha256=rNPhxx1Yawt3tENYhmOYSum9_TdV57ZU5kjxlWFAGuo,107
|
|
14
|
+
reboost/daq/core.py,sha256=Rs6Q-17fzEod2iX_2WqEmnqKnNRFoWTYURl3wYhFihU,9915
|
|
15
|
+
reboost/daq/utils.py,sha256=KcH6zvlInmD2YiF6V--DSYBTYudJw3G-hp2JGOcES2o,1042
|
|
16
|
+
reboost/hpge/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
reboost/hpge/psd.py,sha256=P9lxji4njwFwPBR0vfh6gkvt7GQx2BRajvCsUUmtEqU,24407
|
|
18
|
+
reboost/hpge/surface.py,sha256=ROewOsSoq8zRAaiamWdMDl-UR7ZfsimgH2Lv9k0flKg,8494
|
|
19
|
+
reboost/hpge/utils.py,sha256=AcMS86v8s0SbeC4YA3CfH73GBZcC7Sb_RR3pRPjWAwU,2857
|
|
20
|
+
reboost/math/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
reboost/math/functions.py,sha256=OymiYTcA0NXxxm-MBDw5kqyNwHoLCmuv4J48AwnSrbU,5633
|
|
22
|
+
reboost/math/stats.py,sha256=Rq4Wdzv-3aoSK7EsPZCuOEHfnOz3w0moIzCEHbC07xw,3173
|
|
23
|
+
reboost/optmap/__init__.py,sha256=imvuyld-GLw8qdwqW-lXCg2feptcTyQo3wIzPvDHwmY,93
|
|
24
|
+
reboost/optmap/cli.py,sha256=KJFyO4Sd2oYlRC65Kvrdq0BN_Qygp6o7LgO36D5O6_s,8887
|
|
25
|
+
reboost/optmap/convolve.py,sha256=UVc-KjiYvi8LoAlykL__5qDd5T8teT89aDjiE7WYjE4,12464
|
|
26
|
+
reboost/optmap/create.py,sha256=R9W8Wyl8cgXIYESenVpCRuN_MoHhLfaEv4a44cf3AxU,14479
|
|
27
|
+
reboost/optmap/evt.py,sha256=p5ngsCuvOxIZDDQNL9efcLn8Q4CfGL7G726BRrCpE6Y,5637
|
|
28
|
+
reboost/optmap/mapview.py,sha256=_zGiONqCWc4kCp1yHvNFRkh7svvud4ZLqaSHkNieo_M,6878
|
|
29
|
+
reboost/optmap/numba_pdg.py,sha256=y8cXR5PWE2Liprp4ou7vl9do76dl84vXU52ZJD9_I7A,731
|
|
30
|
+
reboost/optmap/optmap.py,sha256=3clc1RA8jA4YJte83w085MY8zLpG-G7DBkpZ2UeKPpM,12825
|
|
31
|
+
reboost/shape/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
+
reboost/shape/cluster.py,sha256=nwR1Dnf00SDICGPqpXeM1Q7_DwTtO9uP3wmuML45c3g,8195
|
|
33
|
+
reboost/shape/group.py,sha256=gOCYgir2gZqmW1JXtbNRPlQqP0gmUcbe7RVb9CbY1pU,5540
|
|
34
|
+
reboost/shape/reduction.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
|
+
reboost/spms/__init__.py,sha256=ffi0rH-ZFGmpURbFt-HY1ZAHCdady0mLXNsblRNh-JY,207
|
|
36
|
+
reboost/spms/pe.py,sha256=Q_GzN5HEp2BmgB4fni5mfc5ZOXh4mlJepDwZd1EzFdc,5696
|
|
37
|
+
reboost-0.8.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
38
|
+
reboost-0.8.0.dist-info/METADATA,sha256=t8uYwYlKBZPoO5Rbrv4RVr5AQj4D_rglFCQ-HFrYe1I,44442
|
|
39
|
+
reboost-0.8.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
40
|
+
reboost-0.8.0.dist-info/entry_points.txt,sha256=DxhD6BidSWNot9BrejHJjQ7RRLmrMaBIl52T75oWTwM,93
|
|
41
|
+
reboost-0.8.0.dist-info/top_level.txt,sha256=q-IBsDepaY_AbzbRmQoW8EZrITXRVawVnNrB-_zyXZs,8
|
|
42
|
+
reboost-0.8.0.dist-info/RECORD,,
|
reboost-0.6.2.dist-info/RECORD
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
reboost/__init__.py,sha256=VZz9uo7i2jgAx8Zi15SptLZnE_qcnGuNWwqkD3rYHFA,278
|
|
2
|
-
reboost/_version.py,sha256=DhO-RAVJdQTjYPaMf0M6q_WAXdD6jcx2tWl_B9FtuhM,511
|
|
3
|
-
reboost/build_evt.py,sha256=VXIfK_pfe_Cgym6gI8dESwONZi-v_4fll0Pn09vePQY,3767
|
|
4
|
-
reboost/build_glm.py,sha256=IerSLQfe51ZO7CQP2kmfPnOIVaDtcfw3byOM02Vaz6o,9472
|
|
5
|
-
reboost/build_hit.py,sha256=BwcAzr7hkhLqQpyULYPqM70VEvENaw-j90fvBYKh-68,15649
|
|
6
|
-
reboost/cli.py,sha256=HZgqUZK0tSmnlGqoXjrbmLitW_i001TzibxvDrRxLLg,6324
|
|
7
|
-
reboost/core.py,sha256=WGbWe2rcfMDEaehVyw7peqAHoTFWoCu5J6CdWHC5aWA,14974
|
|
8
|
-
reboost/iterator.py,sha256=fATFDxu2PUc0e48OdJJujZo2kwykfRLH1oBtcB-s5pM,6905
|
|
9
|
-
reboost/log_utils.py,sha256=VqS_9OC5NeNU3jcowVOBB0NJ6ssYvNWnirEY-JVduEA,766
|
|
10
|
-
reboost/profile.py,sha256=EOTmjmS8Rm_nYgBWNh6Rntl2XDsxdyed7yEdWtsZEeg,2598
|
|
11
|
-
reboost/units.py,sha256=3EH8XlpbsObdu5vLgxhm1600L6UNYD5jng4SjJT_1QE,2202
|
|
12
|
-
reboost/utils.py,sha256=dzDiQWwv_snoWoRBDnDNZ27hG0CpCRo8V4jSEG2b82c,12592
|
|
13
|
-
reboost/hpge/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
reboost/hpge/psd.py,sha256=jAUAoQ_PMz76wyA1NXYHNKtOwoCnRT3My8_LCFrKi-U,13860
|
|
15
|
-
reboost/hpge/surface.py,sha256=lbWcFnFFWKxtFKs755GyM9US_IfyxaoM6MpOIZgIMM0,7478
|
|
16
|
-
reboost/hpge/utils.py,sha256=0Rx4HubCOm8JMECjWcAJXfAch9OkSlRpUkdsSlzwZ2E,2830
|
|
17
|
-
reboost/math/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
-
reboost/math/functions.py,sha256=OymiYTcA0NXxxm-MBDw5kqyNwHoLCmuv4J48AwnSrbU,5633
|
|
19
|
-
reboost/math/stats.py,sha256=cG-6mQx33Dzpv3ABkHLEwC104WJ_PMgbWtmjg37SBj4,3164
|
|
20
|
-
reboost/optmap/__init__.py,sha256=imvuyld-GLw8qdwqW-lXCg2feptcTyQo3wIzPvDHwmY,93
|
|
21
|
-
reboost/optmap/cli.py,sha256=N8J2Hd8m_csYU9CtpAp7Rc3LHy6eNzZ26gWZgHCiUso,10250
|
|
22
|
-
reboost/optmap/convolve.py,sha256=x7boLDcBJIsontoB0yemvzHSE2hlRpUomlDXc3jqdr4,14668
|
|
23
|
-
reboost/optmap/create.py,sha256=_6GZbdRvmjDFs6DDbWC-THZxaNPUiLAOIDNaigMKJSQ,18139
|
|
24
|
-
reboost/optmap/evt.py,sha256=UrjjNNeS7Uie4Ah9y_f5PyroFutLGo5aOFcwReOEy7o,5556
|
|
25
|
-
reboost/optmap/mapview.py,sha256=73kpe0_SKDj9bIhEx1ybX1sBP8TyvufiLfps84A_ijA,6798
|
|
26
|
-
reboost/optmap/numba_pdg.py,sha256=y8cXR5PWE2Liprp4ou7vl9do76dl84vXU52ZJD9_I7A,731
|
|
27
|
-
reboost/optmap/optmap.py,sha256=j4rfbQ84PYSpE-BvP4Rdt96ZjPdwy8P4e4eZz1mATys,12817
|
|
28
|
-
reboost/shape/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
-
reboost/shape/cluster.py,sha256=RIvBlhHzp88aaUZGofp5SD9bimnoiqIOddhQ84jiwoM,8135
|
|
30
|
-
reboost/shape/group.py,sha256=gOCYgir2gZqmW1JXtbNRPlQqP0gmUcbe7RVb9CbY1pU,5540
|
|
31
|
-
reboost/shape/reduction.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
-
reboost-0.6.2.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
33
|
-
reboost-0.6.2.dist-info/METADATA,sha256=o0DAQXxkMCG68Uf-WHTHeVsIEMKMsj044lWWMJLAx_k,44222
|
|
34
|
-
reboost-0.6.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
35
|
-
reboost-0.6.2.dist-info/entry_points.txt,sha256=DxhD6BidSWNot9BrejHJjQ7RRLmrMaBIl52T75oWTwM,93
|
|
36
|
-
reboost-0.6.2.dist-info/top_level.txt,sha256=q-IBsDepaY_AbzbRmQoW8EZrITXRVawVnNrB-_zyXZs,8
|
|
37
|
-
reboost-0.6.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|