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
295f706d
Commit
295f706d
authored
3 months ago
by
Egor Sobolev
Browse files
Options
Downloads
Patches
Plain Diff
Fix missed param for nomrmalization of SPI hitscores on pulse energy
parent
c37e18ec
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!1125
[AGIPD][CORRECT][SPI] Fix missed param
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
notebooks/AGIPD/AGIPD_Correct_and_Verify_Summary_NBC.ipynb
+2
-1
2 additions, 1 deletion
notebooks/AGIPD/AGIPD_Correct_and_Verify_Summary_NBC.ipynb
with
2 additions
and
1 deletion
notebooks/AGIPD/AGIPD_Correct_and_Verify_Summary_NBC.ipynb
+
2
−
1
View file @
295f706d
...
@@ -195,10 +195,11 @@
...
@@ -195,10 +195,11 @@
" min_scores=spi_hf_min_scores,\n",
" min_scores=spi_hf_min_scores,\n",
" fixed_threshold=spi_hf_fixed_threshold,\n",
" fixed_threshold=spi_hf_fixed_threshold,\n",
" hitrate_window_size=spi_hf_hitrate_window_size,\n",
" hitrate_window_size=spi_hf_hitrate_window_size,\n",
" xgm_norm=spi_hf_xgm_norm,\n",
" miss_fraction=spi_hf_miss_fraction,\n",
" miss_fraction=spi_hf_miss_fraction,\n",
" miss_fraction_base=spi_hf_miss_fraction_base,\n",
" miss_fraction_base=spi_hf_miss_fraction_base,\n",
" )\n",
" )\n",
" hitfinder.find_hits(litpx_src)\n",
" hitfinder.find_hits(litpx_src
, litfrm_src
)\n",
"\n",
"\n",
" # write hit-finder data in file\n",
" # write hit-finder data in file\n",
" sources = {\n",
" sources = {\n",
...
...
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
# Summary of the AGIPD offline correction #
# Summary of the AGIPD offline correction #
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
python
```
python
run
=
11
# runs to process, required
run
=
11
# runs to process, required
in_folder
=
"
/gpfs/exfel/exp/MID/202201/p002834/raw
"
# the folder to read data from, required
in_folder
=
"
/gpfs/exfel/exp/MID/202201/p002834/raw
"
# the folder to read data from, required
out_folder
=
"
/gpfs/exfel/data/scratch/ahmedk/test/AGIPD_Corr
"
# path to output to, required
out_folder
=
"
/gpfs/exfel/data/scratch/ahmedk/test/AGIPD_Corr
"
# path to output to, required
metadata_folder
=
""
# Directory containing calibration_metadata.yml when run by xfel-calibrate
metadata_folder
=
""
# Directory containing calibration_metadata.yml when run by xfel-calibrate
karabo_id
=
"
SPB_DET_AGIPD1M-1
"
# karabo karabo_id
karabo_id
=
"
SPB_DET_AGIPD1M-1
"
# karabo karabo_id
modules
=
[
-
1
]
modules
=
[
-
1
]
karabo_da
=
[
'
-1
'
]
# a list of data aggregators names, Default [-1] for selecting all data aggregators
karabo_da
=
[
'
-1
'
]
# a list of data aggregators names, Default [-1] for selecting all data aggregators
rel_gain_mode
=
"
off
"
# Select relative gain correction. Choices [`PC`, `CS`, `off`]. (`PC`: Pulse Capacitor, `CS`: Current Source, `off`: Disable relative gain correction). Default: off.
rel_gain_mode
=
"
off
"
# Select relative gain correction. Choices [`PC`, `CS`, `off`]. (`PC`: Pulse Capacitor, `CS`: Current Source, `off`: Disable relative gain correction). Default: off.
# Additional processing
# Additional processing
count_lit_pixels
=
False
# Count the number of pixels registering photons
count_lit_pixels
=
False
# Count the number of pixels registering photons
spi_hitfinding
=
False
# Find hits using lit-pixel counter
spi_hitfinding
=
False
# Find hits using lit-pixel counter
# SPI hit-finder parameters
# SPI hit-finder parameters
spi_hf_modules
=
[
3
,
4
,
8
,
15
]
# Use specified modules for SPI hitfinding
spi_hf_modules
=
[
3
,
4
,
8
,
15
]
# Use specified modules for SPI hitfinding
spi_hf_mode
=
"
adaptive
"
# The method to compute threshold for hitscores in SPI hitfinding: `fixed` or `adaptive`
spi_hf_mode
=
"
adaptive
"
# The method to compute threshold for hitscores in SPI hitfinding: `fixed` or `adaptive`
spi_hf_snr
=
4.0
# Siginal-to-noise ration for adaptive threshold in SPI hitfinding
spi_hf_snr
=
4.0
# Siginal-to-noise ration for adaptive threshold in SPI hitfinding
spi_hf_min_scores
=
100
# The minimal size of events to compute adaptive threshold in SPI hitfinding
spi_hf_min_scores
=
100
# The minimal size of events to compute adaptive threshold in SPI hitfinding
spi_hf_fixed_threshold
=
0
# The fixed threshold value
spi_hf_fixed_threshold
=
0
# The fixed threshold value
spi_hf_hitrate_window_size
=
200
# The window size for runnig average of hitrate in trains
spi_hf_hitrate_window_size
=
200
# The window size for runnig average of hitrate in trains
spi_hf_xgm_norm
=
False
# Use XGM pulse energy for hitscore normalization
spi_hf_xgm_norm
=
False
# Use XGM pulse energy for hitscore normalization
spi_hf_miss_fraction
=
1
# The fraction of misses to select along with hits
spi_hf_miss_fraction
=
1
# The fraction of misses to select along with hits
spi_hf_miss_fraction_base
=
"
hit
"
# The base to compute the number of misses to select: the number of hits (`hit`) or misses (`miss`)
spi_hf_miss_fraction_base
=
"
hit
"
# The base to compute the number of misses to select: the number of hits (`hit`) or misses (`miss`)
# Lit-frame finder
# Lit-frame finder
use_litframe_finder
=
'
off
'
# Process only illuminated frames: 'off' - disable, 'device' - use online device data, 'offline' - use offline algorithm, 'auto' - choose online/offline source automatically (default)
use_litframe_finder
=
'
off
'
# Process only illuminated frames: 'off' - disable, 'device' - use online device data, 'offline' - use offline algorithm, 'auto' - choose online/offline source automatically (default)
litframe_device_id
=
''
# Device ID for a lit frame finder device, empty string to auto detection
litframe_device_id
=
''
# Device ID for a lit frame finder device, empty string to auto detection
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
python
```
python
from
pathlib
import
Path
from
pathlib
import
Path
from
logging
import
warning
from
logging
import
warning
import
yaml
import
yaml
import
tabulate
import
tabulate
from
cal_tools.tools
import
CalibrationMetadata
from
cal_tools.tools
import
CalibrationMetadata
from
IPython.display
import
Latex
,
display
,
Markdown
from
IPython.display
import
Latex
,
display
,
Markdown
import
matplotlib
import
matplotlib
import
matplotlib.pyplot
as
plt
import
matplotlib.pyplot
as
plt
matplotlib
.
use
(
"
agg
"
)
matplotlib
.
use
(
"
agg
"
)
%
matplotlib
inline
%
matplotlib
inline
from
extra_data
import
RunDirectory
from
extra_data
import
RunDirectory
from
extra_redu.fileutils
import
StackedPulseSource
,
exdf_save
from
extra_redu.fileutils
import
StackedPulseSource
,
exdf_save
from
extra_redu.spi
import
SpiHitfinder
from
extra_redu.spi
import
SpiHitfinder
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
python
```
python
out_folder
=
Path
(
out_folder
)
out_folder
=
Path
(
out_folder
)
metadata
=
CalibrationMetadata
(
metadata_folder
or
out_folder
)
metadata
=
CalibrationMetadata
(
metadata_folder
or
out_folder
)
const_dict
=
metadata
.
setdefault
(
"
retrieved-constants
"
,
{})
const_dict
=
metadata
.
setdefault
(
"
retrieved-constants
"
,
{})
time_dict
=
const_dict
.
setdefault
(
"
time-summary
"
,
{})
time_dict
=
const_dict
.
setdefault
(
"
time-summary
"
,
{})
# Extracting Instrument string
# Extracting Instrument string
instrument
=
karabo_id
.
split
(
"
_
"
)[
0
]
instrument
=
karabo_id
.
split
(
"
_
"
)[
0
]
# Evaluate detector instance for mapping
# Evaluate detector instance for mapping
if
instrument
==
"
SPB
"
:
if
instrument
==
"
SPB
"
:
dinstance
=
"
AGIPD1M1
"
dinstance
=
"
AGIPD1M1
"
nmods
=
16
nmods
=
16
elif
instrument
==
"
MID
"
:
elif
instrument
==
"
MID
"
:
dinstance
=
"
AGIPD1M2
"
dinstance
=
"
AGIPD1M2
"
nmods
=
16
nmods
=
16
elif
instrument
==
"
HED
"
:
elif
instrument
==
"
HED
"
:
dinstance
=
"
AGIPD500K
"
dinstance
=
"
AGIPD500K
"
nmods
=
8
nmods
=
8
if
karabo_da
[
0
]
==
'
-1
'
:
if
karabo_da
[
0
]
==
'
-1
'
:
if
modules
[
0
]
==
-
1
:
if
modules
[
0
]
==
-
1
:
modules
=
list
(
range
(
nmods
))
modules
=
list
(
range
(
nmods
))
karabo_da
=
[
"
AGIPD{:02d}
"
.
format
(
i
)
for
i
in
modules
]
karabo_da
=
[
"
AGIPD{:02d}
"
.
format
(
i
)
for
i
in
modules
]
else
:
else
:
modules
=
[
int
(
x
[
-
2
:])
for
x
in
karabo_da
]
modules
=
[
int
(
x
[
-
2
:])
for
x
in
karabo_da
]
# This is needed only if AGIPD Correction notebook had no precorrection notebooks for retrieving constants
# This is needed only if AGIPD Correction notebook had no precorrection notebooks for retrieving constants
# gather all generated sequence yml files for time summary of retrieved constant under retrieved-constants in metadata.yml
# gather all generated sequence yml files for time summary of retrieved constant under retrieved-constants in metadata.yml
for
fn
in
sorted
(
out_folder
.
glob
(
"
retrieved_constants_*.yml
"
)):
for
fn
in
sorted
(
out_folder
.
glob
(
"
retrieved_constants_*.yml
"
)):
with
fn
.
open
(
"
r
"
)
as
fd
:
with
fn
.
open
(
"
r
"
)
as
fd
:
fdict
=
yaml
.
safe_load
(
fd
)
fdict
=
yaml
.
safe_load
(
fd
)
# append different sequences' time summary to the main yaml
# append different sequences' time summary to the main yaml
time_dict
.
update
(
fdict
[
"
time-summary
"
])
time_dict
.
update
(
fdict
[
"
time-summary
"
])
fn
.
unlink
()
fn
.
unlink
()
metadata
.
save
()
metadata
.
save
()
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
python
```
python
def
print_const_table
(
const
):
def
print_const_table
(
const
):
print
(
f
"
{
const
}
constants were injected on:
"
)
print
(
f
"
{
const
}
constants were injected on:
"
)
table_data
=
{}
table_data
=
{}
for
seq
,
mod_data
in
time_dict
.
items
():
for
seq
,
mod_data
in
time_dict
.
items
():
for
mod
,
const_data
in
mod_data
.
items
():
for
mod
,
const_data
in
mod_data
.
items
():
timestamp
=
const_data
[
const
]
timestamp
=
const_data
[
const
]
table_data
.
setdefault
(
timestamp
,
[]).
append
(
f
"
{
seq
}
:
{
mod
}
"
)
table_data
.
setdefault
(
timestamp
,
[]).
append
(
f
"
{
seq
}
:
{
mod
}
"
)
table
=
[]
table
=
[]
if
not
len
(
table_data
):
if
not
len
(
table_data
):
table
.
append
([
"
No constants retrieved
"
])
table
.
append
([
"
No constants retrieved
"
])
elif
len
(
table_data
)
==
1
:
elif
len
(
table_data
)
==
1
:
table
.
append
([[
*
table_data
][
0
],
"
All modules
"
])
table
.
append
([[
*
table_data
][
0
],
"
All modules
"
])
else
:
else
:
for
timestamp
,
seqmod
in
table_data
.
items
():
for
timestamp
,
seqmod
in
table_data
.
items
():
table
.
append
([
timestamp
,
seqmod
[
0
]])
table
.
append
([
timestamp
,
seqmod
[
0
]])
for
further_module
in
seqmod
[
1
:]:
for
further_module
in
seqmod
[
1
:]:
table
.
append
([
""
,
further_module
])
table
.
append
([
""
,
further_module
])
display
(
Latex
(
tabulate
.
tabulate
(
table
,
display
(
Latex
(
tabulate
.
tabulate
(
table
,
tablefmt
=
"
latex
"
,
tablefmt
=
"
latex
"
,
headers
=
[
"
Timestamps
"
,
"
Modules and sequences
"
])))
headers
=
[
"
Timestamps
"
,
"
Modules and sequences
"
])))
rel_gain_alias
=
"
CS
"
if
rel_gain_mode
.
lower
()
==
"
cs
"
else
"
PC
"
# 'off' or 'pc'
rel_gain_alias
=
"
CS
"
if
rel_gain_mode
.
lower
()
==
"
cs
"
else
"
PC
"
# 'off' or 'pc'
for
const
in
[
'
Offset
'
,
f
'
Slopes
{
rel_gain_alias
}
'
,
'
SlopesFF
'
]:
for
const
in
[
'
Offset
'
,
f
'
Slopes
{
rel_gain_alias
}
'
,
'
SlopesFF
'
]:
print_const_table
(
const
)
print_const_table
(
const
)
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
python
```
python
if
spi_hitfinding
and
not
count_lit_pixels
:
if
spi_hitfinding
and
not
count_lit_pixels
:
# Operators are not expected to enable SPI hitfidnig without lit-pixels
# Operators are not expected to enable SPI hitfidnig without lit-pixels
# counting. If this happens, warn on the mismatch in the configuration.
# counting. If this happens, warn on the mismatch in the configuration.
warning
(
"
SPI hitfinding will be skipped because the required lit-pixel
"
warning
(
"
SPI hitfinding will be skipped because the required lit-pixel
"
"
counting is disabled. To run hitfinding, enable also lit-pixel
"
"
counting is disabled. To run hitfinding, enable also lit-pixel
"
"
counting with the `--count-lit-pixels` option.
"
)
"
counting with the `--count-lit-pixels` option.
"
)
if
spi_hitfinding
and
count_lit_pixels
:
if
spi_hitfinding
and
count_lit_pixels
:
display
(
Markdown
(
"
# SPI hit finding
"
))
display
(
Markdown
(
"
# SPI hit finding
"
))
litfrm_src
=
None
litfrm_src
=
None
if
use_litframe_finder
!=
'
off
'
:
if
use_litframe_finder
!=
'
off
'
:
from
extra_redu
import
make_litframe_finder
,
LitFrameFinderError
from
extra_redu
import
make_litframe_finder
,
LitFrameFinderError
from
extra_redu.fileutils
import
PulseSource
from
extra_redu.fileutils
import
PulseSource
dc
=
RunDirectory
(
Path
(
in_folder
)
/
f
'
r
{
run
:
04
d
}
'
)
dc
=
RunDirectory
(
Path
(
in_folder
)
/
f
'
r
{
run
:
04
d
}
'
)
litfrm
=
make_litframe_finder
(
karabo_id
[:
3
],
dc
,
litframe_device_id
)
litfrm
=
make_litframe_finder
(
karabo_id
[:
3
],
dc
,
litframe_device_id
)
try
:
try
:
get_data
=
{
get_data
=
{
'
auto
'
:
litfrm
.
read_or_process
,
'
auto
'
:
litfrm
.
read_or_process
,
'
offline
'
:
litfrm
.
process
,
'
offline
'
:
litfrm
.
process
,
'
online
'
:
litfrm
.
read
'
online
'
:
litfrm
.
read
}
}
r
=
get_data
[
use_litframe_finder
]()
r
=
get_data
[
use_litframe_finder
]()
litfrm_src
=
PulseSource
(
litfrm_src
=
PulseSource
(
r
.
meta
.
trainId
,
r
.
output
.
nFrame
,
r
.
meta
.
trainId
,
r
.
output
.
nFrame
,
r
.
output
.
detectorPulseId
.
ravel
(),
r
.
output
.
detectorPulseId
.
ravel
(),
{
{
"
energyPerFrame
"
:
r
.
output
.
energyPerFrame
.
ravel
(),
"
energyPerFrame
"
:
r
.
output
.
energyPerFrame
.
ravel
(),
}
}
)
)
except
LitFrameFinderError
as
err
:
except
LitFrameFinderError
as
err
:
pass
pass
try
:
try
:
dc
=
RunDirectory
(
out_folder
)
dc
=
RunDirectory
(
out_folder
)
except
FileNotFoundError
:
except
FileNotFoundError
:
warning
(
"
No corrected files found to plot.
"
)
warning
(
"
No corrected files found to plot.
"
)
else
:
else
:
litpx_src
=
StackedPulseSource
.
from_datacollection
(
litpx_src
=
StackedPulseSource
.
from_datacollection
(
dc
,
f
"
{
karabo_id
}
/CORR/(?P<key>\d+)CH0:output
"
,
"
litpx
"
)
dc
,
f
"
{
karabo_id
}
/CORR/(?P<key>\d+)CH0:output
"
,
"
litpx
"
)
hitfinder
=
SpiHitfinder
(
hitfinder
=
SpiHitfinder
(
modules
=
spi_hf_modules
,
modules
=
spi_hf_modules
,
mode
=
spi_hf_mode
,
mode
=
spi_hf_mode
,
snr
=
spi_hf_snr
,
snr
=
spi_hf_snr
,
min_scores
=
spi_hf_min_scores
,
min_scores
=
spi_hf_min_scores
,
fixed_threshold
=
spi_hf_fixed_threshold
,
fixed_threshold
=
spi_hf_fixed_threshold
,
hitrate_window_size
=
spi_hf_hitrate_window_size
,
hitrate_window_size
=
spi_hf_hitrate_window_size
,
xgm_norm
=
spi_hf_xgm_norm
,
miss_fraction
=
spi_hf_miss_fraction
,
miss_fraction
=
spi_hf_miss_fraction
,
miss_fraction_base
=
spi_hf_miss_fraction_base
,
miss_fraction_base
=
spi_hf_miss_fraction_base
,
)
)
hitfinder
.
find_hits
(
litpx_src
)
hitfinder
.
find_hits
(
litpx_src
,
litfrm_src
)
# write hit-finder data in file
# write hit-finder data in file
sources
=
{
sources
=
{
f
"
{
karabo_id
}
/REDU/SPI_HITFINDER
"
:
hitfinder
,
f
"
{
karabo_id
}
/REDU/SPI_HITFINDER
"
:
hitfinder
,
}
}
exdf_save
(
out_folder
,
"
REDU00
"
,
run
,
sources
,
sequence_size
=
3500
)
exdf_save
(
out_folder
,
"
REDU00
"
,
run
,
sources
,
sequence_size
=
3500
)
# draw plots
# draw plots
display
(
Markdown
(
"
## Hit-rate plot
"
))
display
(
Markdown
(
"
## Hit-rate plot
"
))
hitfinder
.
plot_hitrate
()
hitfinder
.
plot_hitrate
()
plt
.
show
()
plt
.
show
()
display
(
Markdown
(
"
## Hitscore histogram
"
))
display
(
Markdown
(
"
## Hitscore histogram
"
))
hitfinder
.
plot_hitscore_hist
()
hitfinder
.
plot_hitscore_hist
()
plt
.
show
()
plt
.
show
()
display
(
Markdown
(
"
## Hitscore plots
"
))
display
(
Markdown
(
"
## Hitscore plots
"
))
hitfinder
.
plot_hitscore
()
hitfinder
.
plot_hitscore
()
```
```
...
...
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