Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ build-backend = "setuptools.build_meta"
name = "vlab4mic"
version = "0.1.1"
description = "VLab4Mic: A virtual laboratory for microscopy simulation and validation"
keywords = [
"microscopy",
"simulation",
"super-resolution",
"SMLM",
"STED",
"fluorescence",
"labeling",
"structural-biology"
]
authors = [
{ name = "Damián Martínez", email = "jdmartinezigc@gmail.com" },
{ name = "Bruno M. Saraiva", email = "bruno.msaraiva2@gmail.com" },
Expand Down
24 changes: 22 additions & 2 deletions src/vlab4mic/sweep_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,16 @@ def set_sweep_parameters(
exp_time=None,
**kwargs,
):
# Snapshot the parameters the user actually provided so we can report
# back which ones will be swept and which were accepted but ignored.
_provided = {
name: value
for name, value in locals().items()
if name not in ("self", "kwargs") and value is not None
}
_provided.update(
{name: value for name, value in kwargs.items() if value is not None}
)
if probe_distance_to_epitope is not None:
self.set_parameter_values(
"probe",
Expand Down Expand Up @@ -714,8 +724,18 @@ def set_sweep_parameters(
self.set_parameter_values(
"modality", "depth_of_field_nm", values=depth_of_field_nm
)
if peptide_motif is not None:
pass
# Parameters accepted by the signature (or via kwargs) that are not yet
# wired into the sweep. They are silently discarded otherwise, so warn.
_not_applied = {"peptide_motif", "minimal_distance"} | set(kwargs)
applied = sorted(name for name in _provided if name not in _not_applied)
ignored = sorted(name for name in _provided if name in _not_applied)
if applied:
print(f"Parameters set for sweep: {', '.join(applied)}")
if ignored:
print(
"WARNING: the following parameters were provided but are not "
f"applied during the sweep and will be ignored: {', '.join(ignored)}"
)

def clear_sweep_parameters(self):
"""
Expand Down
36 changes: 36 additions & 0 deletions tests/test_sweep_generator_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,39 @@ def test_analysis_dict_is_per_instance():

assert "only_in_a" not in b.analysis["unsorted"]
assert b.analysis["dataframes"] is None


def test_set_sweep_parameters_reports_applied(capsys):
g = sweep_generator.sweep_generator()
capsys.readouterr()
g.set_sweep_parameters(probe_DoL=[0.3, 0.6], pixelsize_nm=[80, 100])
out = capsys.readouterr().out
assert "Parameters set for sweep:" in out
assert "probe_DoL" in out and "pixelsize_nm" in out
assert "WARNING" not in out


def test_set_sweep_parameters_warns_on_ignored(capsys):
g = sweep_generator.sweep_generator()
capsys.readouterr()
g.set_sweep_parameters(
exp_time=[10, 20],
peptide_motif={"motif": 1},
minimal_distance=5,
bogus_param=7,
)
out = capsys.readouterr().out
assert "Parameters set for sweep: exp_time" in out
assert "WARNING" in out
for ignored in ("peptide_motif", "minimal_distance", "bogus_param"):
assert ignored in out
assert "exp_time" not in out.split("WARNING", 1)[1]


def test_set_sweep_parameters_silent_when_empty(capsys):
g = sweep_generator.sweep_generator()
capsys.readouterr()
g.set_sweep_parameters()
out = capsys.readouterr().out
assert "Parameters set for sweep:" not in out
assert "WARNING" not in out
Loading