Skip to content

Commit 44be768

Browse files
committed
optics group level not_ctf flag
1 parent 5cb9557 commit 44be768

File tree

4 files changed

+10
-17
lines changed

4 files changed

+10
-17
lines changed

src/aspire/source/image.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,9 +1330,6 @@ def _ensure_column(field, value):
13301330
_ensure_column("_rlnVoltage", 0)
13311331
_ensure_column("_rlnAmplitudeContrast", 0)
13321332

1333-
if missing_fields:
1334-
metadata["_aspireMetadata"] = np.full(n_rows, "no_ctf", dtype=object)
1335-
13361333
# Restrict to the optics columns that are actually present on this source.
13371334
optics_value_fields = [
13381335
field for field in all_optics_fields if field in metadata
@@ -1359,6 +1356,10 @@ def _ensure_column(field, value):
13591356
for field, value in zip(optics_value_fields, signature):
13601357
optics_block[field].append(value)
13611358

1359+
# Tag dummy optics if we had to synthesize any fields
1360+
if missing_fields:
1361+
optics_block["_aspireNoCTF"] = ["." for _ in range(len(group_lookup))]
1362+
13621363
# Everything not lifted into the optics block stays with the particle metadata.
13631364
particle_block = OrderedDict()
13641365
if "_rlnOpticsGroup" in metadata:

src/aspire/source/relion.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,7 @@ def __init__(
126126
del self._metadata[key]
127127

128128
# Detect ASPIRE-generated dummy variables
129-
aspire_metadata = metadata.get("_aspireMetadata")
130-
dummy_ctf = isinstance(aspire_metadata, (list, np.ndarray)) and np.all(
131-
np.asarray(aspire_metadata) == "no_ctf"
132-
)
129+
no_ctf_flag = "_aspireNoCTF" in metadata
133130

134131
# CTF estimation parameters coming from Relion
135132
CTF_params = [
@@ -169,7 +166,7 @@ def __init__(
169166
self.filter_indices = filter_indices
170167

171168
# If we detect ASPIRE added dummy variables, log and initialize identity filter
172-
elif dummy_ctf:
169+
elif no_ctf_flag:
173170
logger.info(
174171
"Detected ASPIRE-generated dummy optics; initializing identity filters."
175172
)

tests/test_coordinate_source.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,6 @@ def testSave(self):
542542
"_rlnImageName",
543543
"_rlnCoordinateX",
544544
"_rlnCoordinateY",
545-
"_aspireMetadata",
546545
],
547546
)
548547

@@ -557,6 +556,7 @@ def testSave(self):
557556
"_rlnAmplitudeContrast",
558557
"_rlnImageSize",
559558
"_rlnImageDimensionality",
559+
"_aspireNoCTF",
560560
],
561561
)
562562

tests/test_simulation.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -926,18 +926,13 @@ def test_save_load_dummy_ctf_values(tmp_path, caplog):
926926

927927
# STAR file should contain our fallback tag
928928
star = RelionStarFile(star_path)
929-
particles_block = star.get_block_by_index(1)
930-
np.testing.assert_array_equal(
931-
particles_block["_aspireMetadata"], np.full(sim.n, "no_ctf", dtype=object)
932-
)
929+
optics_block = star.get_block_by_index(0)
930+
assert "_aspireNoCTF" in optics_block
933931

934932
# Tag should survive round-trip
935933
caplog.clear()
936934
reloaded = RelionSource(star_path)
937-
np.testing.assert_array_equal(
938-
reloaded._metadata["_aspireMetadata"],
939-
np.full(reloaded.n, "no_ctf", dtype=object),
940-
)
935+
assert "_aspireNoCTF" in reloaded._metadata
941936

942937
# Check message is logged about detecting dummy variables
943938
assert "Detected ASPIRE-generated dummy optics" in caplog.text

0 commit comments

Comments
 (0)