bluecellulab 2.6.53__tar.gz → 2.6.55__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of bluecellulab might be problematic. Click here for more details.
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/PKG-INFO +1 -1
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/analysis/analysis.py +22 -34
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/sonata_simulation_config.py +1 -1
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit_simulation.py +7 -6
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/simulation/report.py +45 -8
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/validation/validation.py +24 -54
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab.egg-info/PKG-INFO +1 -1
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.compile_mod.sh +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.gitattributes +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.github/dependabot.yml +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.github/workflows/release.yml +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.github/workflows/test.yml +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.gitignore +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.gitlab-ci.yml +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.readthedocs.yml +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/.zenodo.json +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/AUTHORS.txt +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/CHANGELOG.rst +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/CITATION.cff +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/CONTRIBUTING.rst +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/LICENSE +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/MANIFEST.in +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/Makefile +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/README.rst +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/__init__.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/analysis/__init__.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/analysis/inject_sequence.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/analysis/plotting.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/analysis/utils.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/__init__.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/ballstick/__init__.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/ballstick/emodel.hoc +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/ballstick/morphology.asc +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/cell_dict.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/core.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/injector.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/plotting.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/random.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/recording.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/section_distance.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/serialized_sections.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/sonata_proxy.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/stimuli_generator.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/cell/template.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/__init__.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/circuit_access/__init__.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/circuit_access/bluepy_circuit_access.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/circuit_access/definition.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/circuit_access/sonata_circuit_access.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/__init__.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/bluepy_simulation_config.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/definition.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/sections.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/format.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/iotools.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/node_id.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/simulation_access.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/synapse_properties.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/validate.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/connection.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/dendrogram.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/exceptions.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/graph.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/hoc/Cell.hoc +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/hoc/RNGSettings.hoc +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/hoc/TDistFunc.hoc +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/hoc/TStim.hoc +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/hoc/fileUtils.hoc +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/importer.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/neuron_interpreter.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/plotwindow.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/psection.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/psegment.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/rngsettings.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/simulation/__init__.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/simulation/neuron_globals.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/simulation/parallel.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/simulation/simulation.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/stimulus/__init__.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/stimulus/circuit_stimulus_definitions.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/stimulus/factory.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/stimulus/stimulus.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/synapse/__init__.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/synapse/synapse_factory.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/synapse/synapse_types.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/tools.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/type_aliases.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/utils.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/verbosity.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab.egg-info/SOURCES.txt +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab.egg-info/dependency_links.txt +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab.egg-info/requires.txt +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab.egg-info/top_level.txt +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/Makefile +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/images/voltage-readme.png +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/make.bat +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/requirements_docs.txt +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/_static/.gitkeep +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/api.rst +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/changelog.rst +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/compiling-mechanisms.rst +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/conf.py +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/contributing.rst +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/index.rst +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/list_of_stim.rst +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/docs/source/logo/BlueCelluLabBanner.jpg +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/pyproject.toml +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/setup.cfg +0 -0
- {bluecellulab-2.6.53 → bluecellulab-2.6.55}/tox.ini +0 -0
|
@@ -4,11 +4,9 @@ try:
|
|
|
4
4
|
except ImportError:
|
|
5
5
|
efel = None
|
|
6
6
|
from itertools import islice
|
|
7
|
-
from itertools import repeat
|
|
8
7
|
import logging
|
|
9
8
|
from matplotlib.collections import LineCollection
|
|
10
9
|
import matplotlib.pyplot as plt
|
|
11
|
-
from multiprocessing import Pool
|
|
12
10
|
import neuron
|
|
13
11
|
import numpy as np
|
|
14
12
|
import pathlib
|
|
@@ -97,20 +95,15 @@ def compute_plot_iv_curve(cell,
|
|
|
97
95
|
for amp in list_amp
|
|
98
96
|
]
|
|
99
97
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
repeat(True), # add_hypamp
|
|
110
|
-
repeat(recording_section),
|
|
111
|
-
repeat(recording_segment),
|
|
112
|
-
)
|
|
113
|
-
)
|
|
98
|
+
recordings = []
|
|
99
|
+
for step in steps:
|
|
100
|
+
recording = run_stimulus(cell.template_params,
|
|
101
|
+
step,
|
|
102
|
+
section=injecting_section,
|
|
103
|
+
segment=injecting_segment,
|
|
104
|
+
recording_section=recording_section,
|
|
105
|
+
recording_segment=recording_segment)
|
|
106
|
+
recordings.append(recording)
|
|
114
107
|
|
|
115
108
|
steady_states = []
|
|
116
109
|
# compute steady state response
|
|
@@ -208,24 +201,19 @@ def compute_plot_fi_curve(cell,
|
|
|
208
201
|
for amp in list_amp
|
|
209
202
|
]
|
|
210
203
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
repeat(threshold_voltage), # threshold_spike_detection
|
|
225
|
-
)
|
|
226
|
-
)
|
|
227
|
-
|
|
228
|
-
spike_count = [len(recording.spike) for recording in recordings]
|
|
204
|
+
spikes = []
|
|
205
|
+
for step in steps:
|
|
206
|
+
recording = run_stimulus(cell.template_params,
|
|
207
|
+
step,
|
|
208
|
+
section=injecting_section,
|
|
209
|
+
segment=injecting_segment,
|
|
210
|
+
recording_section=recording_section,
|
|
211
|
+
recording_segment=recording_segment,
|
|
212
|
+
enable_spike_detection=True,
|
|
213
|
+
threshold_spike_detection=threshold_voltage)
|
|
214
|
+
spikes.append(recording.spike)
|
|
215
|
+
|
|
216
|
+
spike_count = [len(spike) for spike in spikes]
|
|
229
217
|
|
|
230
218
|
plot_fi_curve(list_amp,
|
|
231
219
|
spike_count,
|
{bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/sonata_simulation_config.py
RENAMED
|
@@ -177,7 +177,7 @@ class SonataSimulationConfig:
|
|
|
177
177
|
@property
|
|
178
178
|
def spikes_file_path(self) -> Path:
|
|
179
179
|
output_dir = Path(self.output_root_path)
|
|
180
|
-
spikes_file = self.impl.config.get("output", {}).get("spikes_file", "
|
|
180
|
+
spikes_file = self.impl.config.get("output", {}).get("spikes_file", "out.h5")
|
|
181
181
|
return output_dir / spikes_file
|
|
182
182
|
|
|
183
183
|
@property
|
|
@@ -311,8 +311,8 @@ class CircuitSimulation:
|
|
|
311
311
|
|
|
312
312
|
# add spike recordings
|
|
313
313
|
for cell in self.cells.values():
|
|
314
|
-
if not cell.is_recording_spikes(
|
|
315
|
-
cell.start_recording_spikes(None, location=
|
|
314
|
+
if not cell.is_recording_spikes(self.spike_location, threshold=self.spike_threshold):
|
|
315
|
+
cell.start_recording_spikes(None, location=self.spike_location, threshold=self.spike_threshold)
|
|
316
316
|
|
|
317
317
|
def _add_stimuli(self, add_noise_stimuli=False,
|
|
318
318
|
add_hyperpolarizing_stimuli=False,
|
|
@@ -474,7 +474,6 @@ class CircuitSimulation:
|
|
|
474
474
|
filtered_dicts = [d for d in train_dicts if isinstance(d, dict) and d]
|
|
475
475
|
|
|
476
476
|
if not filtered_dicts:
|
|
477
|
-
logger.warning("merge_pre_spike_trains: No presynaptic spike trains found.")
|
|
478
477
|
return {}
|
|
479
478
|
|
|
480
479
|
all_keys = set().union(*[d.keys() for d in filtered_dicts])
|
|
@@ -832,7 +831,8 @@ class CircuitSimulation:
|
|
|
832
831
|
cells=self.cells,
|
|
833
832
|
report_cfg=report_cfg,
|
|
834
833
|
source_sets=compartment_sets,
|
|
835
|
-
source_type="compartment_set"
|
|
834
|
+
source_type="compartment_set",
|
|
835
|
+
sim_dt=self.dt,
|
|
836
836
|
)
|
|
837
837
|
|
|
838
838
|
else:
|
|
@@ -848,7 +848,8 @@ class CircuitSimulation:
|
|
|
848
848
|
cells=self.cells,
|
|
849
849
|
report_cfg=report_cfg,
|
|
850
850
|
source_sets=node_sets,
|
|
851
|
-
source_type="node_set"
|
|
851
|
+
source_type="node_set",
|
|
852
|
+
sim_dt=self.dt,
|
|
852
853
|
)
|
|
853
854
|
|
|
854
855
|
self.write_spike_report()
|
|
@@ -868,7 +869,7 @@ class CircuitSimulation:
|
|
|
868
869
|
if pop is None:
|
|
869
870
|
continue
|
|
870
871
|
try:
|
|
871
|
-
cell_spikes = cell.get_recorded_spikes(location=
|
|
872
|
+
cell_spikes = cell.get_recorded_spikes(location=self.spike_location, threshold=self.spike_threshold)
|
|
872
873
|
if cell_spikes is not None:
|
|
873
874
|
spikes_by_population[pop][gid.id] = list(cell_spikes)
|
|
874
875
|
except AttributeError:
|
|
@@ -92,6 +92,7 @@ def write_compartment_report(
|
|
|
92
92
|
report_cfg: dict,
|
|
93
93
|
source_sets: dict,
|
|
94
94
|
source_type: str,
|
|
95
|
+
sim_dt: float
|
|
95
96
|
):
|
|
96
97
|
"""Write a SONATA-compatible compartment report to an HDF5 file.
|
|
97
98
|
|
|
@@ -109,6 +110,7 @@ def write_compartment_report(
|
|
|
109
110
|
- "cells" or "compartments": Name of the node or compartment set.
|
|
110
111
|
source_sets (dict): Dictionary of either node sets or compartment sets.
|
|
111
112
|
source_type (str): Either "node_set" or "compartment_set".
|
|
113
|
+
sim_dt (float): Simulation time step used for the recorded data.
|
|
112
114
|
|
|
113
115
|
Raises:
|
|
114
116
|
ValueError: If the specified source set is not found.
|
|
@@ -157,25 +159,60 @@ def write_compartment_report(
|
|
|
157
159
|
return
|
|
158
160
|
|
|
159
161
|
write_sonata_report_file(
|
|
160
|
-
output_path, population, data_matrix, recorded_node_ids, index_pointers, element_ids, report_cfg
|
|
162
|
+
output_path, population, data_matrix, recorded_node_ids, index_pointers, element_ids, report_cfg, sim_dt
|
|
161
163
|
)
|
|
162
164
|
|
|
163
165
|
|
|
164
166
|
def write_sonata_report_file(
|
|
165
|
-
output_path,
|
|
167
|
+
output_path,
|
|
168
|
+
population,
|
|
169
|
+
data_matrix,
|
|
170
|
+
recorded_node_ids,
|
|
171
|
+
index_pointers,
|
|
172
|
+
element_ids,
|
|
173
|
+
report_cfg,
|
|
174
|
+
sim_dt
|
|
166
175
|
):
|
|
167
|
-
|
|
176
|
+
start_time = float(report_cfg.get("start_time", 0.0))
|
|
177
|
+
end_time = float(report_cfg.get("end_time", 0.0))
|
|
178
|
+
dt_report = float(report_cfg.get("dt", sim_dt))
|
|
179
|
+
|
|
180
|
+
# Clamp dt_report if finer than simuldation dt
|
|
181
|
+
if dt_report < sim_dt:
|
|
182
|
+
logger.warning(
|
|
183
|
+
f"Requested report dt={dt_report} ms is finer than simulation dt={sim_dt} ms. "
|
|
184
|
+
f"Clamping report dt to {sim_dt} ms."
|
|
185
|
+
)
|
|
186
|
+
dt_report = sim_dt
|
|
187
|
+
|
|
188
|
+
step = int(round(dt_report / sim_dt))
|
|
189
|
+
if not np.isclose(step * sim_dt, dt_report, atol=1e-9):
|
|
190
|
+
raise ValueError(
|
|
191
|
+
f"dt_report={dt_report} is not an integer multiple of dt_data={sim_dt}"
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
# Downsample the data if needed
|
|
195
|
+
# Compute start and end indices in the original data
|
|
196
|
+
start_index = int(round(start_time / sim_dt))
|
|
197
|
+
end_index = int(round(end_time / sim_dt)) + 1 # inclusive
|
|
198
|
+
|
|
199
|
+
# Now slice and downsample
|
|
200
|
+
data_matrix_downsampled = [
|
|
201
|
+
trace[start_index:end_index:step] for trace in data_matrix
|
|
202
|
+
]
|
|
203
|
+
data_array = np.stack(data_matrix_downsampled, axis=1).astype(np.float32)
|
|
204
|
+
|
|
205
|
+
# Prepare metadata arrays
|
|
168
206
|
node_ids_arr = np.array(recorded_node_ids, dtype=np.uint64)
|
|
169
207
|
index_ptr_arr = np.array(index_pointers, dtype=np.uint64)
|
|
170
208
|
element_ids_arr = np.array(element_ids, dtype=np.uint32)
|
|
171
|
-
time_array = np.array([
|
|
172
|
-
report_cfg.get("start_time", 0.0),
|
|
173
|
-
report_cfg.get("end_time", 0.0),
|
|
174
|
-
report_cfg.get("dt", 0.1)
|
|
175
|
-
], dtype=np.float64)
|
|
209
|
+
time_array = np.array([start_time, end_time, dt_report], dtype=np.float64)
|
|
176
210
|
|
|
211
|
+
# Ensure output directory exists
|
|
177
212
|
output_path = Path(output_path)
|
|
178
213
|
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
214
|
+
|
|
215
|
+
# Write to HDF5
|
|
179
216
|
with h5py.File(output_path, "w") as f:
|
|
180
217
|
grp = f.require_group(f"/report/{population}")
|
|
181
218
|
data_ds = grp.create_dataset("data", data=data_array.astype(np.float32))
|
|
@@ -438,68 +438,38 @@ def run_validations(
|
|
|
438
438
|
)
|
|
439
439
|
|
|
440
440
|
logger.debug("Running validations...")
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
spiking_test,
|
|
446
|
-
(cell.template_params, rheobase, out_dir, spike_threshold_voltage)
|
|
447
|
-
)
|
|
448
|
-
|
|
449
|
-
# Validation 2: Depolarization Block Test
|
|
450
|
-
depolarization_block_result_future = pool.apply_async(
|
|
451
|
-
depolarization_block_test,
|
|
452
|
-
(cell.template_params, rheobase, out_dir)
|
|
453
|
-
)
|
|
441
|
+
# Validation 1: Spiking Test
|
|
442
|
+
spiking_test_result = spiking_test(
|
|
443
|
+
cell.template_params, rheobase, out_dir, spike_threshold_voltage
|
|
444
|
+
)
|
|
454
445
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
)
|
|
446
|
+
# Validation 2: Depolarization Block Test
|
|
447
|
+
depolarization_block_result = depolarization_block_test(
|
|
448
|
+
cell.template_params, rheobase, out_dir
|
|
449
|
+
)
|
|
460
450
|
|
|
461
|
-
|
|
462
|
-
|
|
451
|
+
# Validation 3: Backpropagating AP Test
|
|
452
|
+
bpap_result = bpap_test(cell.template_params, rheobase, out_dir)
|
|
463
453
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
ais_spiking_test,
|
|
467
|
-
(cell.template_params, rheobase, out_dir, spike_threshold_voltage)
|
|
468
|
-
)
|
|
454
|
+
# Validation 4: Postsynaptic Potential Test
|
|
455
|
+
# We have to wait for ProbAMPANMDA_EMS to be present in entitycore to implement this test
|
|
469
456
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
)
|
|
457
|
+
# Validation 5: AIS Spiking Test
|
|
458
|
+
ais_spiking_test_result = ais_spiking_test(
|
|
459
|
+
cell.template_params, rheobase, out_dir, spike_threshold_voltage
|
|
460
|
+
)
|
|
475
461
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
rin_test,
|
|
479
|
-
(rin,)
|
|
480
|
-
)
|
|
462
|
+
# Validation 6: Hyperpolarization Test
|
|
463
|
+
hyperpolarization_result = hyperpolarization_test(cell.template_params, rheobase, out_dir)
|
|
481
464
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
iv_test,
|
|
485
|
-
(cell.template_params, rheobase, out_dir, spike_threshold_voltage)
|
|
486
|
-
)
|
|
465
|
+
# Validation 7: Rin Test
|
|
466
|
+
rin_result = rin_test(rin)
|
|
487
467
|
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
fi_test,
|
|
491
|
-
(cell.template_params, rheobase, out_dir, spike_threshold_voltage)
|
|
492
|
-
)
|
|
468
|
+
# Validation 8: IV Test
|
|
469
|
+
iv_test_result = iv_test(cell.template_params, rheobase, out_dir, spike_threshold_voltage)
|
|
493
470
|
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
depolarization_block_result = depolarization_block_result_future.get()
|
|
497
|
-
bpap_result = bpap_result_future.get()
|
|
498
|
-
ais_spiking_test_result = ais_spiking_test_result_future.get()
|
|
499
|
-
hyperpolarization_result = hyperpolarization_result_future.get()
|
|
500
|
-
rin_result = rin_result_future.get()
|
|
501
|
-
iv_test_result = iv_test_result_future.get()
|
|
502
|
-
fi_test_result = fi_test_result_future.get()
|
|
471
|
+
# Validation 9: FI Test
|
|
472
|
+
fi_test_result = fi_test(cell.template_params, rheobase, out_dir, spike_threshold_voltage)
|
|
503
473
|
|
|
504
474
|
return {
|
|
505
475
|
"memodel_properties": {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/circuit_access/definition.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/circuit/config/bluepy_simulation_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bluecellulab-2.6.53 → bluecellulab-2.6.55}/bluecellulab/stimulus/circuit_stimulus_definitions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|