Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Bliss
bliss
Commits
8b953608
Commit
8b953608
authored
May 04, 2021
by
Valentin Valls
Browse files
Feed scan_info with fill_meta_at_scan_start
parent
921efa5f
Changes
3
Hide whitespace changes
Inline
Side-by-side
bliss/scanning/scan.py
View file @
8b953608
...
...
@@ -1416,16 +1416,16 @@ class Scan:
Method name can be either 'fill_meta_as_scan_start' or 'fill_meta_at_scan_end'
"""
for
dev
in
self
.
acq_chain
.
nodes_list
:
node
=
self
.
nodes
.
get
(
dev
)
if
node
is
None
:
# prepare has not finished ?
continue
for
acq_obj
in
self
.
acq_chain
.
nodes_list
:
with
KillMask
(
masked_kill_nb
=
1
):
meth
=
getattr
(
dev
,
method_name
)
tmp
=
meth
(
self
.
user_scan_meta
)
if
tmp
:
update_node_info
(
node
,
tmp
)
fill_meta
=
getattr
(
acq_obj
,
method_name
)
metadata
=
fill_meta
(
self
.
user_scan_meta
)
if
metadata
is
not
None
:
node
=
self
.
nodes
.
get
(
acq_obj
)
if
node
is
not
None
:
update_node_info
(
node
,
metadata
)
if
method_name
==
"fill_meta_at_scan_start"
:
self
.
_scan_info
.
_set_device_meta
(
acq_obj
,
metadata
)
def
run
(
self
):
"""Run the scan
...
...
bliss/scanning/scan_info.py
View file @
8b953608
...
...
@@ -263,6 +263,24 @@ class ScanInfo(dict):
info
=
self
.
_scan_info
.
setdefault
(
"sequence-info"
,
{})
info
[
"scan-count"
]
=
int
(
scan_count
)
def
_get_key_from_acq_obj
(
self
,
acq_obj
):
"""Used device key from an acq_obj"""
return
f
"
{
str
(
id
(
acq_obj
))
}
:
{
acq_obj
.
name
}
"
def
_set_device_meta
(
self
,
acq_obj
,
metadata
:
typing
.
Dict
):
"""Protected function called by the scan to feed the device info after
the device preparation.
Argument:
acq_obj: A device though its acquisition object
metadata: A dictionary of basic python types.
Few reserved keys could be ignored.
"""
devices
=
self
.
setdefault
(
"devices"
,
{})
name
=
self
.
_get_key_from_acq_obj
(
acq_obj
)
device
=
devices
.
setdefault
(
name
,
{})
device
.
update
(
metadata
)
def
_get_channels_dict
(
self
,
acq_object
,
channels_dict
):
scalars
=
channels_dict
.
setdefault
(
"scalars"
,
[])
spectra
=
channels_dict
.
setdefault
(
"spectra"
,
[])
...
...
tests/scans/test_data_watch.py
View file @
8b953608
...
...
@@ -17,6 +17,7 @@ from bliss.scanning.acquisition.counter import SamplingCounterAcquisitionSlave
from
bliss.scanning.acquisition.mca
import
McaAcquisitionSlave
from
bliss.scanning.acquisition.motor
import
LinearStepTriggerMaster
from
bliss.scanning.scan
import
Scan
from
bliss.scanning.scan_info
import
ScanInfo
from
bliss.data.scan
import
watch_session_scans
,
ScansObserver
,
ScansWatcher
from
bliss.scanning.chain
import
AcquisitionChain
from
bliss.common
import
scans
...
...
@@ -460,6 +461,10 @@ def test_scan_observer(session, diode_acq_device_factory, mocker):
master
=
SoftwareTimerMaster
(
0.1
,
npoints
=
1
)
chain
.
add
(
master
,
acquisition_device_1
)
scan
=
Scan
(
chain
,
"test"
,
save
=
False
)
meta
=
{
"kind"
:
"foo"
}
acquisition_device_1
.
fill_meta_at_scan_start
=
mocker
.
Mock
(
return_value
=
meta
)
try
:
scan
.
run
()
finally
:
...
...
@@ -470,11 +475,20 @@ def test_scan_observer(session, diode_acq_device_factory, mocker):
observer
.
on_scan_created
.
assert_called_once
()
observer
.
on_scan_started
.
assert_called_once
()
observer
.
on_scan_finished
.
assert_called_once
()
# Check that the scan_info looks like what it is expected
sf
=
ScanInfo
()
device_key
=
sf
.
_get_key_from_acq_obj
(
acquisition_device_1
)
call
=
observer
.
on_scan_created
.
call_args_list
[
0
]
scan_info
=
call
[
0
][
1
]
assert
"positioners_start"
in
scan_info
[
"positioners"
]
assert
"start_timestamp"
in
scan_info
call
=
observer
.
on_scan_started
.
call_args_list
[
0
]
scan_info
=
call
[
0
][
1
]
assert
"kind"
in
scan_info
[
"devices"
][
device_key
]
call
=
observer
.
on_scan_finished
.
call_args_list
[
0
]
scan_info
=
call
[
0
][
1
]
assert
"end_timestamp"
in
scan_info
...
...
Write
Preview
Supports
Markdown
0%
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!
Cancel
Please
register
or
sign in
to comment