diff --git a/src/geomtools/sfx/optimiser.py b/src/geomtools/sfx/optimiser.py index c0d55c05dc204922976932c7856dd01a8f29010c..f5ae9446ed60f5755e0f513084eb2ec6675646ab 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 c1d8fb72e81b6141653246bb67462b8cb59ad903..96cc9d1a7e7f6a856ddef829fed8a5088264ad72 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