Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
est
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Mauro Rovezzi
est
Commits
6e70b6bf
Commit
6e70b6bf
authored
11 months ago
by
Loic Huder
Browse files
Options
Downloads
Patches
Plain Diff
Remove spectra_url_dims and other little improvements in XASObject
parent
a1af738a
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/est/core/types/xasobject.py
+21
-54
21 additions, 54 deletions
src/est/core/types/xasobject.py
with
21 additions
and
54 deletions
src/est/core/types/xasobject.py
+
21
−
54
View file @
6e70b6bf
from
__future__
import
annotations
import
copy
from
typing
import
Any
,
Optional
,
Tuple
,
Union
from
typing
import
Any
,
Sequence
import
pint
import
numpy
...
...
@@ -9,7 +9,7 @@ from silx.io.url import DataUrl
from
est.io.utils
import
get_data_from_url
from
est.units
import
ur
from
est.settings
import
DEFAULT_READ_TIMEOUT
from
est.core.types
import
dimensions
as
dimensions_mod
from
est.core.types
.
dimensions
import
STANDARD_DIMENSIONS
from
.spectra
import
Spectra
from
.spectrum
import
Spectrum
...
...
@@ -20,43 +20,33 @@ class XASObject:
:param spectra: absorbed beam as a list of :class:`.Spectrum` or a
numpy.ndarray. If is a numpy array, the axes should
have the `STANDARD_DIMENSIONS` order.
:type: Union[numpy.ndarray, list]
:param energy: beam energy
:type: numpy.ndarray of one dimension
:param dict configuration: configuration of the different process
:param int dim1: first dimension of the spectra
:param int dim2: second dimension of the spectra
:param str name: name of the object. Will be used for the hdf5 entry
:param configuration: configuration of the different process
:param dim1: first dimension of the spectra
:param dim2: second dimension of the spectra
:param name: name of the object. Will be used for the hdf5 entry
:param spectra_url: path to the spectra data if any. Used when serializing
the XASObject. Won
'
t read it from it.
:type: Union[None,str]
:param spectra_url_dims: dimensions of the stored spectra. WARNING:
this is different of the spectra dimension
which should be given in the
`STANDARD_DIMENSIONS` order
:type: Union[tuple,None]
:param energy_url: path to the energy / channel data if any. Used when
serializing the XASObject. Won
'
t read it from it.
:type: Union[None,str]
"""
def
__init__
(
self
,
spectra
=
None
,
energy
=
None
,
configuration
:
Union
[
dict
,
None
]
=
None
,
dim1
:
Union
[
int
,
None
]
=
None
,
dim2
:
Union
[
int
,
None
]
=
None
,
spectra
:
numpy
.
ndarray
|
Sequence
[
Any
]
|
None
=
None
,
energy
:
numpy
.
ndarray
|
None
=
None
,
configuration
:
dict
|
None
=
None
,
dim1
:
int
|
None
=
None
,
dim2
:
int
|
None
=
None
,
name
:
str
=
"
scan1
"
,
spectra_url
:
Union
[
DataUrl
,
None
]
=
None
,
spectra_url_dims
:
Optional
[
dimensions_mod
.
DimensionsType
]
=
None
,
energy_url
:
Union
[
DataUrl
,
None
]
=
None
,
check_energy
:
bool
=
True
,
spectra_url
:
DataUrl
|
None
=
None
,
energy_url
:
DataUrl
|
None
=
None
,
):
if
isinstance
(
energy
,
numpy
.
ndarray
)
and
not
isinstance
(
energy
,
pint
.
Quantity
):
# automatic energy unit guess. convert energy provided in keV to eV
# works because EXAFS data are never longer than 2 keV and a low
# energy XANES is never shorter than 3 eV. See issue 30
# energy XANES is never shorter than 3 eV.
# See https://gitlab.esrf.fr/workflow/ewoksapps/est/-/issues/30
if
(
energy
.
max
()
-
energy
.
min
())
<
3.0
:
energy
=
energy
*
ur
.
keV
else
:
...
...
@@ -65,13 +55,8 @@ class XASObject:
if
energy
is
not
None
:
energy
=
energy
.
m_as
(
ur
.
eV
)
self
.
__channels
=
None
self
.
__spectra
=
Spectra
(
energy
=
energy
)
self
.
__dim1
=
None
self
.
__dim2
=
None
self
.
__entry_name
=
name
self
.
__spectra_url
=
spectra_url
self
.
__spectra_url_dims
=
spectra_url_dims
self
.
__energy_url
=
energy_url
self
.
spectra
=
(
energy
,
spectra
,
dim1
,
dim2
)
self
.
configuration
=
configuration
...
...
@@ -106,7 +91,7 @@ class XASObject:
return
self
.
__spectra
@property
def
spectra_url
(
self
)
->
Union
[
None
,
DataUrl
]
:
def
spectra_url
(
self
)
->
DataUrl
|
None
:
"""
Url from where the spectra is available.
Used for object serialization
"""
return
self
.
__spectra_url
...
...
@@ -116,18 +101,7 @@ class XASObject:
self
.
__spectra_url
=
url
@property
def
spectra_url_dims
(
self
,
)
->
dimensions_mod
.
DimensionsType
|
Tuple
[
int
,
...]
|
None
:
"""
used to interpret the spectra_url if any
"""
return
self
.
__spectra_url_dims
@spectra_url_dims.setter
def
spectra_url_dims
(
self
,
dims
:
Tuple
[
int
,
...]):
self
.
__spectra_url_dims
=
dims
@property
def
energy_url
(
self
)
->
Union
[
DataUrl
,
None
]:
def
energy_url
(
self
)
->
DataUrl
|
None
:
"""
Url from where the energy is available.
Used for object serialization
"""
return
self
.
__energy_url
...
...
@@ -185,13 +159,6 @@ class XASObject:
"""
convert the XAS object to a dict
By default made to simply import raw data.
:param with_process_details: used to embed a list of spectrum with
intermediary result instead of only raw mu.
This is needed especially for the
pushworkflow actors to keep a trace of the
processes.
:type: bool
"""
res
=
{
...
...
@@ -200,6 +167,7 @@ class XASObject:
"
dim2
"
:
self
.
spectra
.
shape
[
1
],
"
energy
"
:
self
.
spectra
.
energy
,
"
spectra
"
:
[
spectrum
.
to_dict
()
for
spectrum
in
self
.
spectra
],
"
dimensions
"
:
STANDARD_DIMENSIONS
,
# spectra dimensions are always changed to STANDARD on load
}
return
res
...
...
@@ -210,10 +178,8 @@ class XASObject:
"""
load XAS values from a dict
"""
if
not
isinstance
(
ddict
,
dict
):
raise
TypeError
(
f
"
ddict is expected to be a dict. Not
{
type
(
ddict
)
}
"
)
# TODO: is this correct? Shouldn't this be `self.spectra_url_dims`?
# We don't have a test for this.
dimensions
=
dimensions_mod
.
STANDARD_DIMENSIONS
# default yay of storing data
dimensions
=
ddict
.
get
(
"
dimensions
"
,
STANDARD_DIMENSIONS
)
# default way of storing data
from
est.io
import
load_data
# avoid cyclic import
"""
The dict can be on the scheme of the to_dict function, containing
...
...
@@ -282,6 +248,7 @@ class XASObject:
channel_url
=
energy_url
,
config_url
=
config_url
,
dimensions
=
dimensions
,
timeout
=
timeout
,
)
def
dump
(
self
,
h5_file
:
str
):
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment