From 0f863054460e01b0f874ba281879e9a7df5c021c Mon Sep 17 00:00:00 2001 From: Richard Posert Date: Mon, 4 Nov 2024 16:20:20 -0500 Subject: [PATCH 1/2] Before converting to STAR, put refined shifts in terms of blob apix --- pyem/cli/csparc2star.py | 8 ++++++++ pyem/star/star.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pyem/cli/csparc2star.py b/pyem/cli/csparc2star.py index dc99a18..f732c89 100755 --- a/pyem/cli/csparc2star.py +++ b/pyem/cli/csparc2star.py @@ -42,6 +42,14 @@ def main(args): if args.input[0].endswith(".cs"): log.info("Detected CryoSPARC 2+ .cs file") cs = np.load(args.input[0]) + + # convert shifts from alignment psize to blob psize + for dimension in ["alignments2D", "alignments3D"]: + try: + cs[f"{dimension}/shift"] = cs[f"{dimension}/shift"] * cs[f"{dimension}/psize_A"].reshape(-1, 1) / cs["blob/psize_A"].reshape(-1, 1) + except ValueError: + pass + if args.first10k: cs = cs[:10000] diff --git a/pyem/star/star.py b/pyem/star/star.py index 787cbd7..817f215 100755 --- a/pyem/star/star.py +++ b/pyem/star/star.py @@ -598,7 +598,7 @@ def check_defaults(df, inplace=False): if Relion.MICROGRAPHORIGINALPIXELSIZE in df and Relion.MICROGRAPHPIXELSIZE in df: df[Relion.MICROGRAPHBINNING] = df[Relion.MICROGRAPHPIXELSIZE] / df[Relion.MICROGRAPHORIGINALPIXELSIZE] - sync_origins_from_angst(df) + sync_origins_from_angst(df, inplace = True) if Relion.ORIGINZANGST in df: df[Relion.IMAGEDIMENSION] = 3 From d8b9992103109ee77ad6e7f9da22cd428be8cac0 Mon Sep 17 00:00:00 2001 From: Richard Posert Date: Wed, 29 Jan 2025 14:28:30 -0500 Subject: [PATCH 2/2] Move apix conversion to cryosparc2_model_parameters() --- pyem/cli/csparc2star.py | 7 ------- pyem/metadata/cryosparc2.py | 7 +++++++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pyem/cli/csparc2star.py b/pyem/cli/csparc2star.py index f732c89..a76ff9a 100755 --- a/pyem/cli/csparc2star.py +++ b/pyem/cli/csparc2star.py @@ -43,13 +43,6 @@ def main(args): log.info("Detected CryoSPARC 2+ .cs file") cs = np.load(args.input[0]) - # convert shifts from alignment psize to blob psize - for dimension in ["alignments2D", "alignments3D"]: - try: - cs[f"{dimension}/shift"] = cs[f"{dimension}/shift"] * cs[f"{dimension}/psize_A"].reshape(-1, 1) / cs["blob/psize_A"].reshape(-1, 1) - except ValueError: - pass - if args.first10k: cs = cs[:10000] diff --git a/pyem/metadata/cryosparc2.py b/pyem/metadata/cryosparc2.py index 500389f..c601192 100644 --- a/pyem/metadata/cryosparc2.py +++ b/pyem/metadata/cryosparc2.py @@ -145,6 +145,13 @@ def cryosparc_2_cs_model_parameters(cs, df=None, minphic=0): if df is None: df = pd.DataFrame() phic_names = [n for n in cs.dtype.names if "class_posterior" in n] + # convert shifts from alignment psize to blob psize + for dimension in ["alignments2D", "alignments3D"]: + try: + cs[f"{dimension}/shift"] = cs[f"{dimension}/shift"] * cs[f"{dimension}/psize_A"].reshape(-1, 1) / cs["blob/psize_A"].reshape(-1, 1) + cs[f"{dimension}/psize_A"] = cs["blob/psize_A"] + except ValueError: + pass if u'alignments3D/class_posterior' in cs.dtype.names: log.info("Assigning pose from single 3D refinement") for k in model: