Skip to content
Snippets Groups Projects
Commit bab254a0 authored by Egor Sobolev's avatar Egor Sobolev
Browse files

Add snr parameter to sfx hot-pixels mask

parent 7e8c4b1f
No related branches found
No related tags found
1 merge request!4SNR parameter for sfx mask maker
......@@ -21,6 +21,8 @@ def refine():
help="Collection of rigid groups to pose")
parser.add_argument('-m', '--min-counts', type=int, default=50,
help="Minimum counts per group")
parser.add_argument('--snr', type=float, default=4,
help="SNR for bad pixels threshold")
parser.add_argument('-o', '--output', type=pathlib.Path,
default=pathlib.Path("refined.geom"),
help="File to store refined geometry")
......@@ -69,7 +71,7 @@ def refine():
panels_new, transform, clen = refine_geometry(
ma, panels, layout, 1.0, args.min_counts, args.connected)
px = badpixels_mask(pe, panels)
px = badpixels_mask(pe, panels, snr=args.snr)
badpx = pixels_to_image(shape, px)
geom_fn = args.output
......
%% Cell type:code id:3852d9ec-1143-4846-9f48-11751729d547 tags:parameters
``` python
xwiz_dir = ""
stream_file = ""
summary_file = ""
prefix = ""
output_dir = ""
geometry_file = ""
connected_groups = ""
```
%% Cell type:code id:19d522a3-26f5-4ac6-a4af-ee2139deafa2 tags:
``` python
import os
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from cfelpyutils.geometry import load_crystfel_geometry
from geomtools import (
read_crystfel_streamfile, extract_geometry, parse_xwiz_summary,
read_crystfel_geom, plot_center_shift, plot_cell_parameters,
plot_peakogram, plot_powder, get_peak_position, rmsd_per_group,
avg_pixel_displacement, plot_geoptimiser_errormap,
plot_data_on_detector, pixels_to_image, badpixels_mask,
get_detector_shape
)
```
%% Cell type:code id:776ff0aa tags:
``` python
xwiz_conf, summary = parse_xwiz_summary(summary_file)
propno = int(xwiz_conf['data']['proposal'])
runs = eval(xwiz_conf['data']['runs'])
panels, beam, mask = read_crystfel_geom(geometry_file, indexes={'modno': 1})
panel_columns = panels.columns.tolist() + ['panel']
if connected_groups not in panel_columns:
raise ValueError(
f"Connected groups '{connected_groups}' are not defined")
photon_energy = beam['photon_energy']
clen = panels.clen.unique()
if len(clen) == 1:
clen = clen[0]
fr, pe, la, re, ma = read_crystfel_streamfile(
stream_file, panels, connected_groups, disp=False)
```
%% Cell type:markdown id:046f728b tags:
# EXtra-xwiz summary
%% Cell type:code id:7c2a58aa tags:
``` python
print(f"Proposal: {propno}")
print(f"Runs: {runs}")
print()
print(f"Photon energy: {photon_energy} eV")
print(f"Distance to sample: {clen} m")
print()
print(summary)
print()
print("From Crystfel stream file")
print(f"read: {len(fr):9d} chunks, {len(la):9d} crystalls")
```
%% Cell type:markdown id:3978ac22 tags:
# Cell parameters
%% Cell type:code id:2050288b-6bbd-4e5a-9854-04cde094ff6b tags:
``` python
fig, axs = plot_cell_parameters(la)
plt.show()
```
%% Cell type:markdown id:59980ed1 tags:
# Center shift
%% Cell type:code id:c4265f40-f0c4-4ad6-bfbd-21796fb1354c tags:
``` python
fig, ax = plot_center_shift(la)
plt.show()
```
%% Cell type:markdown id:d772ce42 tags:
# Peakogram
%% Cell type:code id:5ce7abee-fd09-48d3-85ef-cacc7b3a3468 tags:
``` python
fig, ax = plot_peakogram(re)
plt.show()
```
%% Cell type:markdown id:7f05317e tags:
# Pseudo-powder diffraction
%% Cell type:code id:3cdf4100 tags:
``` python
peak_pos = pe[['intensity']].join(get_peak_position(pe, panels))
fig, ax = plot_powder(peak_pos, counts=False)
```
%% Cell type:markdown id:c407096a tags:
# Peak distribution
%% Cell type:code id:aa673412 tags:
``` python
fig, ax = plot_powder(peak_pos, counts=True)
```
%% Cell type:markdown id:c5fb7a10-6ec2-4fc1-93bd-931440c7d0de tags:
# Bad pixels
%% Cell type:code id:e5a90585-47e1-4445-a038-e6bed28ec13d tags:
``` python
px = badpixels_mask(pe, panels)
px = badpixels_mask(pe, panels, snr=4)
shape = get_detector_shape(panels)
msk = pixels_to_image(shape, px, 'msk')
fig, ax = plot_data_on_detector(msk, panels, colorbar=False, cmap=plt.cm.copper)
```
%% Cell type:markdown id:d13224ba-344a-460d-8a18-ae011e3839e4 tags:
# Peak distribution (masked)
%% Cell type:code id:aa6706da-0470-4dc1-a88b-428fd209eb89 tags:
``` python
flag = ~(
pe[['panel', 'fs', 'ss', 'intensity']]
.astype({'fs':int, 'ss':int})
.join(px.set_index(['panel', 'fs', 'ss']), on=['panel', 'fs', 'ss']).msk
)
peak_pos = pe[flag][['intensity']].join(get_peak_position(pe, panels))
fig, ax = plot_powder(peak_pos, counts=True)
```
%% Cell type:markdown id:81b065a7 tags:
# Geoptimiser error map
%% Cell type:code id:0d829343 tags:
``` python
pxdispl = avg_pixel_displacement(ma, panels)
fig, ax = plot_geoptimiser_errormap(pxdispl, panels)
```
%% Cell type:markdown id:5cbe54a5 tags:
\newpage
%% Cell type:code id:d4041551 tags:
``` python
rmsd_detector = np.sqrt((pxdispl.r_avg * pxdispl.r_avg).mean())
print(f"Detector-wide error: RMSD = {rmsd_detector:.4f} pixels.")
rmsd = rmsd_per_group(pxdispl, panels, connected_groups)
rmsd = rmsd.sort_index(key=np.vectorize(lambda x: int(x[1:])))
print("Error per module:")
display(rmsd)
```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment