Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
pycalibration
Manage
Activity
Members
Labels
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Model registry
Analyze
Contributor 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
calibration
pycalibration
Commits
f587f9cf
Commit
f587f9cf
authored
1 year ago
by
Thomas Kluyver
Browse files
Options
Downloads
Patches
Plain Diff
Update code in pre notebook to get memory cell order condition
parent
57df52f1
No related branches found
No related tags found
1 merge request
!851
[LPD] Automatically decide whether to inject & use memory cell order
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
notebooks/LPD/LPD_retrieve_constants_precorrection.ipynb
+8
-4
8 additions, 4 deletions
notebooks/LPD/LPD_retrieve_constants_precorrection.ipynb
with
8 additions
and
4 deletions
notebooks/LPD/LPD_retrieve_constants_precorrection.ipynb
+
8
−
4
View file @
f587f9cf
...
...
@@ -38,7 +38,7 @@
"capacitor = '5pF' # Capacitor setting: 5pF or 50pF\n",
"photon_energy = 9.2 # Photon energy in keV.\n",
"category = 0 # Whom to blame.\n",
"use_cell_order =
False
# Whether to use memory cell order as a detector condition (not stored for older constants)"
"use_cell_order =
'auto'
# Whether to use memory cell order as a detector condition (not stored for older constants)"
]
},
{
...
...
@@ -56,7 +56,7 @@
"from calibration_client.modules import CalibrationConstantVersion\n",
"import extra_data as xd\n",
"\n",
"from cal_tools.lpdlib import get_mem_cell_
order
\n",
"from cal_tools.lpdlib import get_mem_cell_
pattern, make_cell_order_condition
\n",
"from cal_tools.tools import (\n",
" CalibrationMetadata,\n",
" calcat_creation_time,\n",
...
...
@@ -130,12 +130,16 @@
" dict(parameter_id=13, value=256), # Pixels X\n",
" dict(parameter_id=14, value=256), # Pixels Y\n",
"]\n",
"if use_cell_order:\n",
"cell_ids_pattern_s = None\n",
"if use_cell_order != 'never':\n",
" # Read the order of memory cells used\n",
" raw_data = xd.RunDirectory(Path(in_folder, f'r{run:04d}'))\n",
" cell_ids_pattern_s = get_mem_cell_order(raw_data, det_inp_sources)\n",
" cell_ids_pattern_s = make_cell_order_condition(\n",
" use_cell_order, get_mem_cell_pattern(raw_data, det_inp_sources)\n",
" )\n",
" print(\"Memory cells order:\", cell_ids_pattern_s)\n",
"\n",
"if cell_ids_pattern_s is not None:\n",
" dark_condition = base_condition + [\n",
" dict(parameter_id=30, value=cell_ids_pattern_s), # Memory cell order\n",
" ]\n",
...
...
%% Cell type:markdown id: tags:
# LPD Retrieving Constants Pre-correction #
Author: European XFEL Detector Group, Version: 1.0
The following notebook provides a constants metadata in a YAML file to use while correcting LPD images.
%% Cell type:code id: tags:
```
python
# Input parameters
in_folder
=
"
/gpfs/exfel/exp/FXE/202201/p003073/raw/
"
# the folder to read data from, required
out_folder
=
"
/gpfs/exfel/data/scratch/ahmedk/test/remove/LPD_test
"
# the folder to output to, required
metadata_folder
=
''
# Directory containing calibration_metadata.yml when run by xfel-calibrate.
modules
=
[
-
1
]
# Modules indices to correct, use [-1] for all, only used when karabo_da is empty
karabo_da
=
[
''
]
# Data aggregators names to correct, use [''] for all
run
=
10
# run to process, required
# Source parameters
karabo_id
=
'
FXE_DET_LPD1M-1
'
# Karabo domain for detector.
input_source
=
'
{karabo_id}/DET/{module_index}CH0:xtdf
'
# Input fast data source.
# CalCat parameters
creation_time
=
""
# The timestamp to use with Calibration DB. Required Format: "YYYY-MM-DD hh:mm:ss" e.g. 2019-07-04 11:02:41
# Operating conditions
mem_cells
=
512
# Memory cells, LPD constants are always taken with 512 cells.
bias_voltage
=
250.0
# Detector bias voltage.
capacitor
=
'
5pF
'
# Capacitor setting: 5pF or 50pF
photon_energy
=
9.2
# Photon energy in keV.
category
=
0
# Whom to blame.
use_cell_order
=
False
# Whether to use memory cell order as a detector condition (not stored for older constants)
use_cell_order
=
'
auto
'
# Whether to use memory cell order as a detector condition (not stored for older constants)
```
%% Cell type:code id: tags:
```
python
from
pathlib
import
Path
from
time
import
perf_counter
import
numpy
as
np
from
calibration_client
import
CalibrationClient
from
calibration_client.modules
import
CalibrationConstantVersion
import
extra_data
as
xd
from
cal_tools.lpdlib
import
get_mem_cell_
order
from
cal_tools.lpdlib
import
get_mem_cell_
pattern
,
make_cell_order_condition
from
cal_tools.tools
import
(
CalibrationMetadata
,
calcat_creation_time
,
save_constant_metadata
,
)
from
cal_tools.restful_config
import
restful_config
```
%% Cell type:code id: tags:
```
python
out_folder
=
Path
(
out_folder
)
out_folder
.
mkdir
(
exist_ok
=
True
)
metadata
=
CalibrationMetadata
(
metadata_folder
or
out_folder
)
# Constant paths & timestamps are saved under retrieved-constants in calibration_metadata.yml
retrieved_constants
=
metadata
.
setdefault
(
"
retrieved-constants
"
,
{})
creation_time
=
calcat_creation_time
(
in_folder
,
run
,
creation_time
)
print
(
f
'
Using
{
creation_time
.
isoformat
()
}
as creation time
'
)
# Pick all modules/aggregators or those selected.
if
not
karabo_da
or
karabo_da
==
[
''
]:
if
not
modules
or
modules
==
[
-
1
]:
modules
=
list
(
range
(
16
))
karabo_da
=
[
f
'
LPD
{
i
:
02
d
}
'
for
i
in
modules
]
# List of detector sources.
det_inp_sources
=
[
input_source
.
format
(
karabo_id
=
karabo_id
,
module_index
=
int
(
da
[
-
2
:]))
for
da
in
karabo_da
]
```
%% Cell type:code id: tags:
```
python
# Connect to CalCat.
calcat_config
=
restful_config
[
'
calcat
'
]
client
=
CalibrationClient
(
base_api_url
=
calcat_config
[
'
base-api-url
'
],
use_oauth2
=
calcat_config
[
'
use-oauth2
'
],
client_id
=
calcat_config
[
'
user-id
'
],
client_secret
=
calcat_config
[
'
user-secret
'
],
user_email
=
calcat_config
[
'
user-email
'
],
token_url
=
calcat_config
[
'
token-url
'
],
refresh_url
=
calcat_config
[
'
refresh-url
'
],
auth_url
=
calcat_config
[
'
auth-url
'
],
scope
=
''
)
```
%% Cell type:code id: tags:
```
python
dark_calibrations
=
{
1
:
'
Offset
'
,
14
:
'
BadPixelsDark
'
,
}
base_condition
=
[
dict
(
parameter_id
=
1
,
value
=
bias_voltage
),
# Sensor bias voltage
dict
(
parameter_id
=
7
,
value
=
mem_cells
),
# Memory cells
dict
(
parameter_id
=
15
,
value
=
capacitor
),
# Feedback capacitor
dict
(
parameter_id
=
13
,
value
=
256
),
# Pixels X
dict
(
parameter_id
=
14
,
value
=
256
),
# Pixels Y
]
if
use_cell_order
:
cell_ids_pattern_s
=
None
if
use_cell_order
!=
'
never
'
:
# Read the order of memory cells used
raw_data
=
xd
.
RunDirectory
(
Path
(
in_folder
,
f
'
r
{
run
:
04
d
}
'
))
cell_ids_pattern_s
=
get_mem_cell_order
(
raw_data
,
det_inp_sources
)
cell_ids_pattern_s
=
make_cell_order_condition
(
use_cell_order
,
get_mem_cell_pattern
(
raw_data
,
det_inp_sources
)
)
print
(
"
Memory cells order:
"
,
cell_ids_pattern_s
)
if
cell_ids_pattern_s
is
not
None
:
dark_condition
=
base_condition
+
[
dict
(
parameter_id
=
30
,
value
=
cell_ids_pattern_s
),
# Memory cell order
]
else
:
dark_condition
=
base_condition
.
copy
()
illuminated_calibrations
=
{
20
:
'
BadPixelsFF
'
,
42
:
'
GainAmpMap
'
,
43
:
'
FFMap
'
,
44
:
'
RelativeGain
'
,
}
illuminated_condition
=
base_condition
+
[
dict
(
parameter_id
=
3
,
value
=
photon_energy
),
# Source energy
dict
(
parameter_id
=
25
,
value
=
category
)
# category
]
```
%% Cell type:code id: tags:
```
python
const_data
=
{}
print
(
'
Querying calibration database
'
,
end
=
''
,
flush
=
True
)
start
=
perf_counter
()
for
k_da
in
karabo_da
:
pdu
=
None
retrieved_constants
[
k_da
]
=
dict
()
const_mdata
=
retrieved_constants
[
k_da
][
"
constants
"
]
=
dict
()
for
calibrations
,
condition
in
[
(
dark_calibrations
,
dark_condition
),
(
illuminated_calibrations
,
illuminated_condition
)
]:
resp
=
CalibrationConstantVersion
.
get_closest_by_time_by_detector_conditions
(
client
,
karabo_id
,
list
(
calibrations
.
keys
()),
{
'
parameters_conditions_attributes
'
:
condition
},
karabo_da
=
k_da
,
event_at
=
creation_time
.
isoformat
())
if
not
resp
[
"
success
"
]:
print
(
f
"
ERROR: Constants
{
list
(
calibrations
.
values
())
}
"
f
"
were not retrieved,
{
resp
[
'
app_info
'
]
}
"
)
for
cname
in
calibrations
.
values
():
if
cname
==
'
Offset
'
:
raise
Exception
(
"
Could not find offset constant, will not correct data
"
)
const_mdata
[
cname
]
=
dict
()
const_mdata
[
cname
][
"
file-path
"
]
=
None
const_mdata
[
cname
][
"
dataset-name
"
]
=
None
const_mdata
[
cname
][
"
creation-time
"
]
=
None
continue
for
ccv
in
resp
[
"
data
"
]:
cc
=
ccv
[
'
calibration_constant
'
]
cname
=
calibrations
[
cc
[
'
calibration_id
'
]]
const_mdata
[
cname
]
=
dict
()
const_mdata
[
cname
][
"
file-path
"
]
=
str
(
Path
(
ccv
[
'
path_to_file
'
])
/
ccv
[
'
file_name
'
])
const_mdata
[
cname
][
"
dataset-name
"
]
=
ccv
[
'
data_set_name
'
]
const_mdata
[
cname
][
"
creation-time
"
]
=
ccv
[
'
begin_at
'
]
pdu
=
ccv
[
'
physical_detector_unit
'
][
'
physical_name
'
]
print
(
'
.
'
,
end
=
''
,
flush
=
True
)
retrieved_constants
[
k_da
][
"
physical-detector-unit
"
]
=
pdu
metadata
.
save
()
total_time
=
perf_counter
()
-
start
print
(
f
'
{
total_time
:
.
1
f
}
s
'
)
print
(
f
"
Stored retrieved constants in
{
metadata
.
filename
}
"
)
```
...
...
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