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

Add bad pixels to sfx geometry report

parent 5101b754
No related branches found
No related tags found
No related merge requests found
%% Cell type:code id:3852d9ec-1143-4846-9f48-11751729d547 tags:parameters
``` python
xwiz_dir = ""
stream_file = ""
summary_file = ""
prefix=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
)
```
%% 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 = 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)
msk = pixels_to_image((16, 512, 128), 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