From ffe7d8fe9d1b2fda266e9769f13ccded3980a5a3 Mon Sep 17 00:00:00 2001 From: Egor Sobolev <egor.sobolev@xfel.eu> Date: Sat, 1 Jun 2024 20:10:46 +0200 Subject: [PATCH] Add minimal number of peaks which is needed to refine a panel --- src/geomtools/sfx/optimiser.py | 9 ++++++--- src/geomtools/sfx/refine.py | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/geomtools/sfx/optimiser.py b/src/geomtools/sfx/optimiser.py index c0d55c0..f5ae944 100644 --- a/src/geomtools/sfx/optimiser.py +++ b/src/geomtools/sfx/optimiser.py @@ -2,9 +2,9 @@ import argparse import pathlib import tempfile -from .refine import refine_geometry -from .crystfelio import extract_geometry, read_crystfel_streamfile from ..detector import read_crystfel_geom, write_crystfel_geom +from .crystfelio import extract_geometry, read_crystfel_streamfile +from .refine import refine_geometry def refine(): @@ -14,6 +14,8 @@ def refine(): help="Crystfel stream file") parser.add_argument('-c', '--connected', default="modules", 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('-o', '--output', type=pathlib.Path, default=pathlib.Path("refined.geom"), help="File to store refined geometry") @@ -35,7 +37,8 @@ def refine(): fr, pe, la, re, ma = read_crystfel_streamfile( stream_filename, panels, args.connected, disp=True) - panels_new, transform, clen = refine_geometry(ma, panels, 1.0) + panels_new, transform, clen = refine_geometry( + ma, panels, 1.0, args.min_counts) with open(args.output.absolute(), "w") as f: write_crystfel_geom(f, panels_new, beam, ["modules", "quads"]) diff --git a/src/geomtools/sfx/refine.py b/src/geomtools/sfx/refine.py index c1d8fb7..96cc9d1 100644 --- a/src/geomtools/sfx/refine.py +++ b/src/geomtools/sfx/refine.py @@ -1,11 +1,11 @@ import time + import numpy as np import pandas as pd - from natsort import natsorted -def refine_geometry(matches, panels, clen_scale=1., +def refine_geometry(matches, panels, clen_scale=1., min_counts=50, rigid_group="modules", disp=True): transform = {} clen = panels.clen[0] @@ -21,6 +21,8 @@ def refine_geometry(matches, panels, clen_scale=1., groups = matches[columns].groupby(rigid_group) for modname, mp in natsorted(groups): count = len(mp) + if count < min_counts: + continue # AGIPD1M layout ss_p = mp.ss_p + (np.round(mp.ss_p) // 64) * 2 -- GitLab