Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tomotools
Nabu
Commits
b40cfd2f
Commit
b40cfd2f
authored
Jan 11, 2022
by
Pierre Paleo
Browse files
Histogram: use silx by default
parent
8fd980fa
Changes
1
Hide whitespace changes
Inline
Side-by-side
nabu/misc/histogram.py
View file @
b40cfd2f
from
math
import
log2
,
ceil
import
numpy
as
np
from
silx.math
import
Histogramnd
from
tomoscan.io
import
HDF5File
from
..utils
import
check_supported
from
..resources.logger
import
LoggerOrPrint
...
...
@@ -13,17 +14,11 @@ class PartialHistogram:
data are readily available in-memory.
"""
histogram_methods
=
[
"fixed_bins_width"
,
"fixed_bins_number"
]
histogram_methods
=
[
"fixed_bins_width"
,
"fixed_bins_number"
]
bin_width_policies
=
[
"uint16"
]
backends
=
[
"numpy"
,
"silx"
]
bin_width_policies
=
[
"uint16"
,
]
def
__init__
(
self
,
method
=
"fixed_bins_width"
,
bin_width
=
"uint16"
,
num_bins
=
None
,
min_bins
=
None
):
def
__init__
(
self
,
method
=
"fixed_bins_width"
,
bin_width
=
"uint16"
,
num_bins
=
None
,
min_bins
=
None
,
backend
=
"silx"
):
"""
Initialize a PartialHistogram class.
...
...
@@ -49,9 +44,14 @@ class PartialHistogram:
Number of bins when method = 'fixed_bins_number'.
min_bins: int, optional
Minimum number of bins when method = 'fixed_bins_width'.
backend: str, optional
Which histogram backend to use for computations. Available are "silx", "numpy".
Fastest is "silx".
"""
check_supported
(
method
,
self
.
histogram_methods
,
"histogram computing method"
)
self
.
method
=
method
check_supported
(
backend
,
self
.
backends
,
"histogram backend"
)
self
.
backend
=
backend
self
.
_set_bin_width
(
bin_width
)
self
.
_set_num_bins
(
num_bins
)
self
.
min_bins
=
min_bins
...
...
@@ -114,7 +114,13 @@ class PartialHistogram:
if
data
.
ndim
>
1
:
data
=
data
.
ravel
()
dmin
,
dmax
=
data
.
min
(),
data
.
max
()
if
data_range
is
None
else
data_range
res
=
np
.
histogram
(
data
,
bins
=
self
.
num_bins
)
if
self
.
backend
==
"numpy"
:
res
=
np
.
histogram
(
data
,
bins
=
self
.
num_bins
)
elif
self
.
backend
==
"silx"
:
histogrammer
=
Histogramnd
(
data
,
n_bins
=
self
.
num_bins
,
histo_range
=
(
dmin
,
dmax
),
last_bin_closed
=
True
)
res
=
histogrammer
.
histo
,
histogrammer
.
edges
[
0
]
return
res
...
...
@@ -232,8 +238,8 @@ class VolumeHistogram:
except
KeyError
:
msg
=
str
(
"Could not access HDF5 path %s in file %s. Please check that this file
\
actually contains a reconstruction and that the HDF5
entry %s
is correct"
%
(
self
.
data_path
,
self
.
fname
,
self
.
entry
)
actually contains a reconstruction and that the HDF5
path
is correct"
%
(
self
.
data_path
,
self
.
fname
)
)
self
.
logger
.
fatal
(
msg
)
raise
ValueError
(
msg
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment