From d235badbd4d33a735c927039479b68de676f558c Mon Sep 17 00:00:00 2001 From: ilkankilic Date: Thu, 12 Mar 2026 15:03:37 +0100 Subject: [PATCH 1/5] add soma voltage recording by default --- bluecellulab/reports/utils.py | 38 ++++++++++++++++++++++++ tests/test_reports/test_reports_utils.py | 24 +++++++++++---- 2 files changed, 57 insertions(+), 5 deletions(-) diff --git a/bluecellulab/reports/utils.py b/bluecellulab/reports/utils.py index 25df764..3657387 100644 --- a/bluecellulab/reports/utils.py +++ b/bluecellulab/reports/utils.py @@ -141,6 +141,44 @@ def prepare_recordings_for_reports( sites_index[cell_id].append(entry) cell.report_sites[report_name].append(entry) + for cell_id, cell in cells.items(): + sec = cell.soma + sec_name = sec.name().split(".")[-1] + segx = 0.5 + rec_name = section_to_variable_recording_str(sec, segx, "v") + + if rec_name in recording_index[cell_id]: + continue + + report_name = "__default_voltage__" + cell.report_sites.setdefault(report_name, []) + + configured = cell.configure_recording( + [(sec, sec_name, segx)], + "v", + report_name, + ) + + for (sec, sec_name, segx), rec_name in configured: + recording_index[cell_id].append(rec_name) + + area_um2 = None + try: + area_um2 = float(neuron.h.area(segx, sec=sec)) + except Exception: + pass + + entry_default_voltage: SiteEntry = { + "report": report_name, + "rec_name": rec_name, + "section": sec_name, + "segx": float(segx), + "area_um2": area_um2, + } + sites_index[cell_id].append(entry_default_voltage) + cell.report_sites[report_name].append(entry_default_voltage) + + return dict(recording_index), dict(sites_index) diff --git a/tests/test_reports/test_reports_utils.py b/tests/test_reports/test_reports_utils.py index 88ed17c..1f71070 100644 --- a/tests/test_reports/test_reports_utils.py +++ b/tests/test_reports/test_reports_utils.py @@ -34,12 +34,19 @@ prepare_recordings_for_reports, ) +class DummySection: + def name(self): + return "cell.soma[0]" + + def __str__(self): + return "soma[0]" class DummyCell: def __init__(self, targets, rec_names): self.targets = targets self.rec_names = rec_names self.report_sites: dict[str, list[dict]] = {} + self.soma = DummySection() def resolve_segments_from_config(self, _cfg): return self.targets @@ -47,7 +54,9 @@ def resolve_segments_from_config(self, _cfg): def resolve_segments_from_compartment_set(self, _node_id, _compartment_nodes): return self.targets - def configure_recording(self, sites, _variable, _report_name): + def configure_recording(self, sites, variable, report_name): + if report_name == "__default_voltage__": + return [(site, f"default_{variable}_{idx}") for idx, site in enumerate(sites)] return list(zip(sites, self.rec_names)) @@ -134,8 +143,11 @@ def test_prepare_recordings_for_reports_compartment_populates_report_sites(caplo recording_index, sites_index = prepare_recordings_for_reports(cells, cfg) assert not caplog.records - assert recording_index[cell_id] == ["rec_soma", "rec_dend"] - assert len(sites_index[cell_id]) == 2 + assert recording_index[cell_id][:2] == ["rec_soma", "rec_dend"] + assert len(recording_index[cell_id]) == 3 + assert len(sites_index[cell_id]) == 3 + assert "__default_voltage__" in cell.report_sites + assert len(cell.report_sites["__default_voltage__"]) == 1 assert "r1" in cell.report_sites assert [s["rec_name"] for s in cell.report_sites["r1"]] == ["rec_soma", "rec_dend"] @@ -155,8 +167,10 @@ def test_prepare_recordings_for_reports_warns_on_rec_mismatch(caplog): recording_index, sites_index = prepare_recordings_for_reports(cells, cfg) assert "Configured 1/2 recording sites" in caplog.text - assert recording_index[cell_id] == ["only_one"] - assert len(sites_index[cell_id]) == 1 + assert recording_index[cell_id][0] == "only_one" + assert len(recording_index[cell_id]) == 2 + assert len(sites_index[cell_id]) == 2 + assert "__default_voltage__" in cell.report_sites def test_prepare_recordings_for_reports_populates_area_um2(monkeypatch): From ea9b393ba2c68240ad80fef46fda1ce3f181e1af Mon Sep 17 00:00:00 2001 From: ilkankilic Date: Thu, 12 Mar 2026 15:26:43 +0100 Subject: [PATCH 2/5] lint fix --- bluecellulab/reports/utils.py | 1 - tests/test_reports/test_reports_utils.py | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bluecellulab/reports/utils.py b/bluecellulab/reports/utils.py index 3657387..31305c0 100644 --- a/bluecellulab/reports/utils.py +++ b/bluecellulab/reports/utils.py @@ -178,7 +178,6 @@ def prepare_recordings_for_reports( sites_index[cell_id].append(entry_default_voltage) cell.report_sites[report_name].append(entry_default_voltage) - return dict(recording_index), dict(sites_index) diff --git a/tests/test_reports/test_reports_utils.py b/tests/test_reports/test_reports_utils.py index 1f71070..05fe4be 100644 --- a/tests/test_reports/test_reports_utils.py +++ b/tests/test_reports/test_reports_utils.py @@ -34,6 +34,7 @@ prepare_recordings_for_reports, ) + class DummySection: def name(self): return "cell.soma[0]" @@ -41,6 +42,7 @@ def name(self): def __str__(self): return "soma[0]" + class DummyCell: def __init__(self, targets, rec_names): self.targets = targets From 180f9af97e4e8c27f2a2e73c8eccf99b19e4886b Mon Sep 17 00:00:00 2001 From: ilkankilic Date: Thu, 12 Mar 2026 15:47:07 +0100 Subject: [PATCH 3/5] cleanup --- bluecellulab/reports/utils.py | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/bluecellulab/reports/utils.py b/bluecellulab/reports/utils.py index 31305c0..1067126 100644 --- a/bluecellulab/reports/utils.py +++ b/bluecellulab/reports/utils.py @@ -159,24 +159,17 @@ def prepare_recordings_for_reports( report_name, ) - for (sec, sec_name, segx), rec_name in configured: - recording_index[cell_id].append(rec_name) - - area_um2 = None - try: - area_um2 = float(neuron.h.area(segx, sec=sec)) - except Exception: - pass - - entry_default_voltage: SiteEntry = { - "report": report_name, - "rec_name": rec_name, - "section": sec_name, - "segx": float(segx), - "area_um2": area_um2, - } - sites_index[cell_id].append(entry_default_voltage) - cell.report_sites[report_name].append(entry_default_voltage) + recording_index[cell_id].append(configured[1]) + + entry_default_voltage: SiteEntry = { + "report": report_name, + "rec_name": rec_name, + "section": sec_name, + "segx": float(segx), + "area_um2": None, + } + sites_index[cell_id].append(entry_default_voltage) + cell.report_sites[report_name].append(entry_default_voltage) return dict(recording_index), dict(sites_index) From 04735f37ea8f34a5c6fbc1943b3946fa98e7323a Mon Sep 17 00:00:00 2001 From: ilkankilic Date: Thu, 12 Mar 2026 15:55:28 +0100 Subject: [PATCH 4/5] fix --- bluecellulab/reports/utils.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/bluecellulab/reports/utils.py b/bluecellulab/reports/utils.py index 1067126..b7f3f07 100644 --- a/bluecellulab/reports/utils.py +++ b/bluecellulab/reports/utils.py @@ -159,17 +159,18 @@ def prepare_recordings_for_reports( report_name, ) - recording_index[cell_id].append(configured[1]) - - entry_default_voltage: SiteEntry = { - "report": report_name, - "rec_name": rec_name, - "section": sec_name, - "segx": float(segx), - "area_um2": None, - } - sites_index[cell_id].append(entry_default_voltage) - cell.report_sites[report_name].append(entry_default_voltage) + for (sec, sec_name, segx), rec_name in configured: + recording_index[cell_id].append(rec_name) + + entry_default_voltage: SiteEntry = { + "report": report_name, + "rec_name": rec_name, + "section": sec_name, + "segx": float(segx), + "area_um2": area_um2, + } + sites_index[cell_id].append(entry_default_voltage) + cell.report_sites[report_name].append(entry_default_voltage) return dict(recording_index), dict(sites_index) From 05537f689943c60f5c78a1d54959ce5ff0017104 Mon Sep 17 00:00:00 2001 From: ilkankilic Date: Thu, 12 Mar 2026 16:04:59 +0100 Subject: [PATCH 5/5] fix --- bluecellulab/reports/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bluecellulab/reports/utils.py b/bluecellulab/reports/utils.py index b7f3f07..c69d7fc 100644 --- a/bluecellulab/reports/utils.py +++ b/bluecellulab/reports/utils.py @@ -167,7 +167,7 @@ def prepare_recordings_for_reports( "rec_name": rec_name, "section": sec_name, "segx": float(segx), - "area_um2": area_um2, + "area_um2": None, } sites_index[cell_id].append(entry_default_voltage) cell.report_sites[report_name].append(entry_default_voltage)