bluecellulab 2.6.64__py3-none-any.whl → 2.6.66__py3-none-any.whl

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.

@@ -20,6 +20,7 @@ from bluecellulab.analysis.inject_sequence import run_stimulus
20
20
  from bluecellulab.analysis.plotting import plot_iv_curve, plot_fi_curve
21
21
  from bluecellulab.analysis.utils import exp_decay
22
22
  from bluecellulab.simulation import Simulation
23
+ from bluecellulab.simulation.neuron_globals import set_neuron_globals
23
24
  from bluecellulab.stimulus import StimulusFactory
24
25
  from bluecellulab.stimulus.circuit_stimulus_definitions import Hyperpolarizing
25
26
  from bluecellulab.tools import calculate_rheobase
@@ -43,7 +44,9 @@ def compute_plot_iv_curve(cell,
43
44
  save_figure=False,
44
45
  output_dir="./",
45
46
  output_fname="iv_curve.pdf",
46
- n_processes=None):
47
+ n_processes=None,
48
+ celsius=None,
49
+ v_init=None):
47
50
  """Compute and plot the Current-Voltage (I-V) curve for a given cell by
48
51
  injecting a range of currents.
49
52
 
@@ -78,6 +81,8 @@ def compute_plot_iv_curve(cell,
78
81
  n_processes (int, optional): The number of processes to use for parallel execution.
79
82
  If None or if it is higher than the number of steps,
80
83
  it will use the number of steps as the number of processes.
84
+ celsius (float, optional): Temperature in Celsius.
85
+ v_init (float, optional): Initial membrane potential.
81
86
 
82
87
  Returns:
83
88
  tuple: A tuple containing:
@@ -103,7 +108,7 @@ def compute_plot_iv_curve(cell,
103
108
 
104
109
  if n_processes is None or n_processes > len(steps):
105
110
  n_processes = len(steps)
106
- with Pool(n_processes) as p:
111
+ with Pool(n_processes, initializer=set_neuron_globals, initargs=(celsius, v_init)) as p:
107
112
  recordings = p.starmap(
108
113
  run_stimulus,
109
114
  zip(
@@ -162,7 +167,9 @@ def compute_plot_fi_curve(cell,
162
167
  save_figure=False,
163
168
  output_dir="./",
164
169
  output_fname="fi_curve.pdf",
165
- n_processes=None):
170
+ n_processes=None,
171
+ celsius=None,
172
+ v_init=None):
166
173
  """Compute and plot the Frequency-Current (F-I) curve for a given cell by
167
174
  injecting a range of currents.
168
175
 
@@ -199,6 +206,8 @@ def compute_plot_fi_curve(cell,
199
206
  n_processes (int, optional): The number of processes to use for parallel execution.
200
207
  If None or if it is higher than the number of steps,
201
208
  it will use the number of steps as the number of processes.
209
+ celsius (float, optional): Temperature in Celsius.
210
+ v_init (float, optional): Initial membrane potential.
202
211
 
203
212
  Returns:
204
213
  tuple: A tuple containing:
@@ -220,7 +229,7 @@ def compute_plot_fi_curve(cell,
220
229
 
221
230
  if n_processes is None or n_processes > len(steps):
222
231
  n_processes = len(steps)
223
- with Pool(n_processes) as p:
232
+ with Pool(n_processes, initializer=set_neuron_globals, initargs=(celsius, v_init)) as p:
224
233
  recordings = p.starmap(
225
234
  run_stimulus,
226
235
  zip(
@@ -365,43 +374,55 @@ class BPAP:
365
374
  except RuntimeError:
366
375
  return None, True
367
376
 
368
- def validate(self, soma_amp, dend_amps, dend_dist, apic_amps, apic_dist):
377
+ def validate(self, soma_amp, dend_amps, dend_dist, apic_amps, apic_dist, validate_with_fit=True):
369
378
  """Check that the exponential fit is decaying."""
370
379
  validated = True
371
380
  notes = ""
372
- popt_dend, dend_fit_error = self.fit(soma_amp, dend_amps, dend_dist)
373
- popt_apic, apic_fit_error = self.fit(soma_amp, apic_amps, apic_dist)
374
- if dend_fit_error or apic_fit_error:
375
- logger.debug("Fitting error occurred.")
376
- validated = False
377
- notes += "Validation failed: Fitting error occurred.\n"
378
- return validated, notes
379
-
380
- if dend_amps is not None:
381
- plt.cla()
382
- plt.plot([0], soma_amp, '.')
383
- plt.plot(dend_dist, dend_amps, '.')
384
- x = np.linspace(0, max(dend_dist), 100)
385
- plt.plot(x, exp_decay(x, *popt_dend), color='darkgreen', linestyle='--', label='Basal Dendritic Fit')
386
- plt.savefig("bad_dendritic_fit.png")
387
- if popt_dend is None:
388
- logger.debug("No dendritic recordings found.")
389
- notes += "No dendritic recordings found.\n"
390
- elif popt_dend[1] <= 0 or popt_dend[0] <= 0:
391
- logger.debug("Dendritic fit is not decaying.")
392
- validated = False
393
- notes += "Dendritic fit is not decaying.\n"
381
+ if validate_with_fit:
382
+ popt_dend, dend_fit_error = self.fit(soma_amp, dend_amps, dend_dist)
383
+ popt_apic, apic_fit_error = self.fit(soma_amp, apic_amps, apic_dist)
384
+ if dend_fit_error or apic_fit_error:
385
+ logger.debug("Fitting error occurred.")
386
+ validated = False
387
+ notes += "Validation failed: Fitting error occurred.\n"
388
+ return validated, notes
389
+ if popt_dend is None:
390
+ logger.debug("No dendritic recordings found.")
391
+ notes += "No dendritic recordings found.\n"
392
+ elif popt_dend[1] <= 0 or popt_dend[0] <= 0:
393
+ logger.debug("Dendritic fit is not decaying.")
394
+ validated = False
395
+ notes += "Dendritic fit is not decaying.\n"
396
+ else:
397
+ notes += "Dendritic validation passed: dendritic amplitude is decaying with distance relative to soma.\n"
398
+ if popt_apic is None:
399
+ logger.debug("No apical recordings found.")
400
+ notes += "No apical recordings found.\n"
401
+ elif popt_apic[1] <= 0 or popt_apic[0] <= 0:
402
+ logger.debug("Apical fit is not decaying.")
403
+ validated = False
404
+ notes += "Apical fit is not decaying.\n"
405
+ else:
406
+ notes += "Apical validation passed: apical amplitude is decaying with distance relative to soma.\n"
394
407
  else:
395
- notes += "Dendritic validation passed: dendritic amplitude is decaying with distance relative to soma.\n"
396
- if popt_apic is None:
397
- logger.debug("No apical recordings found.")
398
- notes += "No apical recordings found.\n"
399
- elif popt_apic[1] <= 0 or popt_apic[0] <= 0:
400
- logger.debug("Apical fit is not decaying.")
401
- validated = False
402
- notes += "Apical fit is not decaying.\n"
403
- else:
404
- notes += "Apical validation passed: apical amplitude is decaying with distance relative to soma.\n"
408
+ if dend_amps and dend_dist:
409
+ furthest_dend_idx = np.argmax(dend_dist)
410
+ if dend_amps[furthest_dend_idx] < soma_amp[0]:
411
+ notes += "Dendritic validation passed: dendritic amplitude is decaying with distance relative to soma.\n"
412
+ else:
413
+ validated = False
414
+ notes += "Dendritic validation failed: dendritic amplitude is not decaying with distance relative to soma.\n"
415
+ else:
416
+ notes += "No dendritic recordings found.\n"
417
+ if apic_amps and apic_dist:
418
+ furthest_apic_idx = np.argmax(apic_dist)
419
+ if apic_amps[furthest_apic_idx] < soma_amp[0]:
420
+ notes += "Apical validation passed: apical amplitude is decaying with distance relative to soma.\n"
421
+ else:
422
+ validated = False
423
+ notes += "Apical validation failed: apical amplitude is not decaying with distance relative to soma.\n"
424
+ else:
425
+ notes += "No apical recordings found.\n"
405
426
 
406
427
  return validated, notes
407
428
 
@@ -416,10 +437,14 @@ class BPAP:
416
437
  save_figure=False,
417
438
  output_dir="./",
418
439
  output_fname="bpap.pdf",
440
+ do_fit=True,
419
441
  ):
420
442
  """Plot the results of the BPAP analysis."""
421
- popt_dend, _ = self.fit(soma_amp, dend_amps, dend_dist)
422
- popt_apic, _ = self.fit(soma_amp, apic_amps, apic_dist)
443
+ popt_dend = None
444
+ popt_apic = None
445
+ if do_fit:
446
+ popt_dend, _ = self.fit(soma_amp, dend_amps, dend_dist)
447
+ popt_apic, _ = self.fit(soma_amp, apic_amps, apic_dist)
423
448
 
424
449
  outpath = pathlib.Path(output_dir) / output_fname
425
450
  fig, ax1 = plt.subplots(figsize=(10, 6))
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
  """Module that handles the global NEURON parameters."""
15
15
 
16
+ from typing import Optional
16
17
  from typing import NamedTuple
17
18
  import neuron
18
19
  from bluecellulab.circuit.config.sections import Conditions, MechanismConditions
@@ -109,3 +110,14 @@ class NeuronGlobals:
109
110
  def load_params(self, params: NeuronGlobalParams) -> None:
110
111
  self.temperature = params.temperature
111
112
  self.v_init = params.v_init
113
+
114
+
115
+ def set_neuron_globals(temperature: Optional[float] = 34.0, v_init: Optional[float] = -80.0) -> None:
116
+ """Set the global NEURON parameters."""
117
+ if temperature is None and v_init is None:
118
+ return
119
+ neuron_globals = NeuronGlobals.get_instance()
120
+ if temperature is not None:
121
+ neuron_globals.temperature = temperature
122
+ if v_init is not None:
123
+ neuron_globals.v_init = v_init
bluecellulab/tools.py CHANGED
@@ -26,7 +26,7 @@ import bluecellulab
26
26
  from bluecellulab.cell import Cell
27
27
  from bluecellulab.circuit.circuit_access import EmodelProperties
28
28
  from bluecellulab.exceptions import UnsteadyCellError
29
- from bluecellulab.simulation.neuron_globals import NeuronGlobals
29
+ from bluecellulab.simulation.neuron_globals import set_neuron_globals
30
30
  from bluecellulab.simulation.parallel import IsolatedProcess
31
31
  from bluecellulab.utils import CaptureOutput
32
32
  from bluecellulab.type_aliases import NeuronSection
@@ -40,7 +40,7 @@ def calculate_input_resistance(
40
40
  morphology_path: str | Path,
41
41
  template_format: str,
42
42
  emodel_properties: EmodelProperties | None,
43
- current_delta: float = 0.01,
43
+ current_delta: float = -0.02,
44
44
  section: str = "soma[0]",
45
45
  segx: float = 0.5
46
46
  ) -> float:
@@ -394,6 +394,15 @@ def check_empty_topology() -> bool:
394
394
  return stdout == ['', '']
395
395
 
396
396
 
397
+ def section_exists(name: str) -> bool:
398
+ """Check if a section exists in the NEURON simulator.
399
+
400
+ Args:
401
+ name (str): The name of the section to check.
402
+ """
403
+ return bool(neuron.h.section_exists(name))
404
+
405
+
397
406
  def calculate_max_thresh_current(cell: Cell,
398
407
  threshold_voltage: float = -20.0,
399
408
  section: str = "soma[0]",
@@ -608,9 +617,7 @@ def compute_memodel_properties(
608
617
  celsius (float, optional): Temperature in Celsius. Default is 34.0 C.
609
618
  """
610
619
  # set initial voltage and temperature
611
- neuron_globals = NeuronGlobals.get_instance()
612
- neuron_globals.temperature = celsius
613
- neuron_globals.v_init = v_init
620
+ set_neuron_globals(temperature=celsius, v_init=v_init)
614
621
 
615
622
  # get me-model properties
616
623
  holding_current = cell.hypamp if cell.hypamp else 0.0
@@ -25,11 +25,13 @@ from bluecellulab.analysis.analysis import compute_plot_iv_curve
25
25
  from bluecellulab.analysis.inject_sequence import run_multirecordings_stimulus
26
26
  from bluecellulab.analysis.inject_sequence import run_stimulus
27
27
  from bluecellulab.cell.core import Cell
28
- from bluecellulab.simulation.neuron_globals import NeuronGlobals
28
+ from bluecellulab.simulation.neuron_globals import set_neuron_globals
29
29
  from bluecellulab.stimulus.factory import IDRestTimings
30
30
  from bluecellulab.stimulus.factory import StimulusFactory
31
31
  from bluecellulab.tools import calculate_input_resistance
32
32
  from bluecellulab.tools import calculate_rheobase
33
+ from bluecellulab.tools import section_exists
34
+ from bluecellulab.utils import NestedPool
33
35
 
34
36
  logger = logging.getLogger(__name__)
35
37
 
@@ -83,10 +85,10 @@ def plot_traces(recordings, out_dir, fname, title, labels=None, xlim=None):
83
85
  return outpath
84
86
 
85
87
 
86
- def spiking_test(template_params, rheobase, out_dir, spike_threshold_voltage=-30.):
88
+ def spiking_test(template_params, rheobase, out_dir, spike_threshold_voltage=-40.):
87
89
  """Spiking test: cell should spike."""
88
90
  stim_factory = StimulusFactory(dt=1.0)
89
- step_stimulus = stim_factory.idrest(threshold_current=rheobase, threshold_percentage=200)
91
+ step_stimulus = stim_factory.idrest(threshold_current=rheobase, threshold_percentage=130)
90
92
  recording = run_stimulus(
91
93
  template_params,
92
94
  step_stimulus,
@@ -103,7 +105,7 @@ def spiking_test(template_params, rheobase, out_dir, spike_threshold_voltage=-30
103
105
  recording,
104
106
  out_dir,
105
107
  fname="spiking_test.pdf",
106
- title="Spiking Test - Step at 200% of Rheobase",
108
+ title="Spiking Test - Step at 130% of Rheobase",
107
109
  )
108
110
 
109
111
  notes = "Validation passed: Spikes detected." if passed else "Validation failed: No spikes detected."
@@ -135,6 +137,7 @@ def depolarization_block_test(template_params, rheobase, out_dir):
135
137
  "stim_start": [IDRestTimings.PRE_DELAY.value],
136
138
  "stim_end": [IDRestTimings.PRE_DELAY.value + IDRestTimings.DURATION.value],
137
139
  }
140
+ efel.set_setting("depol_block_min_duration", 150)
138
141
  features_results = efel.get_feature_values([trace], ["depol_block_bool"])
139
142
  depol_block = bool(features_results[0]["depol_block_bool"][0])
140
143
 
@@ -167,7 +170,14 @@ def bpap_test(template_params, rheobase, out_dir="./"):
167
170
  bpap = BPAP(Cell.from_template_parameters(template_params))
168
171
  bpap.run(duration=1500, amplitude=amplitude)
169
172
  soma_amp, dend_amps, dend_dist, apic_amps, apic_dist = bpap.get_amplitudes_and_distances()
170
- validated, notes = bpap.validate(soma_amp, dend_amps, dend_dist, apic_amps, apic_dist)
173
+ validated, notes = bpap.validate(
174
+ soma_amp,
175
+ dend_amps,
176
+ dend_dist,
177
+ apic_amps,
178
+ apic_dist,
179
+ validate_with_fit=False
180
+ )
171
181
  outpath_amp_dist = bpap.plot_amp_vs_dist(
172
182
  soma_amp,
173
183
  dend_amps,
@@ -177,7 +187,8 @@ def bpap_test(template_params, rheobase, out_dir="./"):
177
187
  show_figure=False,
178
188
  save_figure=True,
179
189
  output_dir=out_dir,
180
- output_fname="bpap.pdf"
190
+ output_fname="bpap.pdf",
191
+ do_fit=False,
181
192
  )
182
193
  outpath_recordings = bpap.plot_recordings(
183
194
  show_figure=False,
@@ -194,11 +205,11 @@ def bpap_test(template_params, rheobase, out_dir="./"):
194
205
  }
195
206
 
196
207
 
197
- def ais_spiking_test(template_params, rheobase, out_dir, spike_threshold_voltage=-30.):
208
+ def ais_spiking_test(template_params, rheobase, out_dir, spike_threshold_voltage=-40.):
198
209
  """AIS spiking test: axon should spike before soma."""
199
210
  name = "Simulatable Neuron AIS Spiking Validation"
200
211
  # Check that the cell has an axon
201
- if len(Cell.from_template_parameters(template_params).axonal) == 0:
212
+ if len(Cell.from_template_parameters(template_params).axonal) == 0 or not section_exists("axon[0]"):
202
213
  return {
203
214
  "name": name,
204
215
  "passed": True,
@@ -216,8 +227,7 @@ def ais_spiking_test(template_params, rheobase, out_dir, spike_threshold_voltage
216
227
  0.5,
217
228
  add_hypamp=True,
218
229
  recording_locations=[("axon[0]", 0.5), ("soma[0]", 0.5)],
219
- enable_spike_detection=True,
220
- threshold_spike_detection=spike_threshold_voltage,
230
+ enable_spike_detection=False,
221
231
  )
222
232
  axon_recording, soma_recording = recordings
223
233
 
@@ -238,23 +248,37 @@ def ais_spiking_test(template_params, rheobase, out_dir, spike_threshold_voltage
238
248
  xlim=(IDRestTimings.PRE_DELAY.value, IDRestTimings.PRE_DELAY.value + 100),
239
249
  )
240
250
 
241
- # Check for spiking
242
- for recording in recordings:
243
- if recording.spike is None or len(recording.spike) == 0:
244
- return {
245
- "name": name,
246
- "passed": False,
247
- "validation_details": "Validation failed: No spikes detected in one or both recordings.",
248
- "figures": [outpath1, outpath2],
249
- }
251
+ # Extract spike times using efel
252
+ traces = [
253
+ {
254
+ "T": axon_recording.time,
255
+ "V": axon_recording.voltage,
256
+ "stim_start": [IDRestTimings.PRE_DELAY.value],
257
+ "stim_end": [IDRestTimings.PRE_DELAY.value + IDRestTimings.DURATION.value],
258
+ },
259
+ {
260
+ "T": soma_recording.time,
261
+ "V": soma_recording.voltage,
262
+ "stim_start": [IDRestTimings.PRE_DELAY.value],
263
+ "stim_end": [IDRestTimings.PRE_DELAY.value + IDRestTimings.DURATION.value],
264
+ }
265
+ ]
266
+ efel.set_setting("Threshold", spike_threshold_voltage)
267
+ features_results = efel.get_feature_values(traces, ["peak_time"])
268
+ axon_spike_time = features_results[0]["peak_time"]
269
+ soma_spike_time = features_results[1]["peak_time"]
250
270
 
251
271
  # Check if axon spike happens before soma spike
252
- passed = bool(axon_recording.spike[0] < soma_recording.spike[0])
253
- notes = (
254
- "Validation passed: Axon spikes before soma."
255
- if passed
256
- else "Validation failed: Axon does not spike before soma."
257
- )
272
+ if axon_spike_time is None or soma_spike_time is None or len(axon_spike_time) == 0 or len(soma_spike_time) == 0:
273
+ passed = False
274
+ notes = "Validation failed: Could not determine spike times for axon or soma."
275
+ else:
276
+ passed = bool(axon_spike_time[0] <= soma_spike_time[0])
277
+ notes = (
278
+ "Validation passed: Axon spikes before soma."
279
+ if passed
280
+ else "Validation failed: Axon does not spike before soma."
281
+ )
258
282
  return {
259
283
  "name": name,
260
284
  "passed": passed,
@@ -337,7 +361,15 @@ def rin_test(rin):
337
361
  }
338
362
 
339
363
 
340
- def iv_test(template_params, rheobase, out_dir, spike_threshold_voltage=-30., n_processes=None):
364
+ def iv_test(
365
+ template_params,
366
+ rheobase,
367
+ out_dir,
368
+ spike_threshold_voltage=-40.,
369
+ n_processes=None,
370
+ celsius=None,
371
+ v_init=None
372
+ ):
341
373
  """IV curve should have a positive slope."""
342
374
  name = "Simulatable Neuron IV Curve Validation"
343
375
  amps, steady_states = compute_plot_iv_curve(
@@ -350,6 +382,8 @@ def iv_test(template_params, rheobase, out_dir, spike_threshold_voltage=-30., n_
350
382
  output_dir=out_dir,
351
383
  output_fname="iv_curve.pdf",
352
384
  n_processes=n_processes,
385
+ celsius=celsius,
386
+ v_init=v_init,
353
387
  )
354
388
 
355
389
  outpath = pathlib.Path(out_dir) / "iv_curve.pdf"
@@ -377,12 +411,21 @@ def iv_test(template_params, rheobase, out_dir, spike_threshold_voltage=-30., n_
377
411
  }
378
412
 
379
413
 
380
- def fi_test(template_params, rheobase, out_dir, spike_threshold_voltage=-30., n_processes=None):
414
+ def fi_test(
415
+ template_params,
416
+ rheobase,
417
+ out_dir,
418
+ spike_threshold_voltage=-40.,
419
+ n_processes=None,
420
+ celsius=None,
421
+ v_init=None,
422
+ ):
381
423
  """FI curve should have a positive slope."""
382
424
  name = "Simulatable Neuron FI Curve Validation"
383
425
  amps, spike_counts = compute_plot_fi_curve(
384
426
  Cell.from_template_parameters(template_params),
385
427
  rheobase=rheobase,
428
+ max_current=3. * rheobase,
386
429
  threshold_voltage=spike_threshold_voltage,
387
430
  nb_bins=5,
388
431
  show_figure=False,
@@ -390,6 +433,8 @@ def fi_test(template_params, rheobase, out_dir, spike_threshold_voltage=-30., n_
390
433
  output_dir=out_dir,
391
434
  output_fname="fi_curve.pdf",
392
435
  n_processes=n_processes,
436
+ celsius=celsius,
437
+ v_init=v_init,
393
438
  )
394
439
 
395
440
  outpath = pathlib.Path(out_dir) / "fi_curve.pdf"
@@ -449,7 +494,7 @@ def thumbnail_test(template_params, rheobase, out_dir):
449
494
  def run_validations(
450
495
  cell,
451
496
  cell_name,
452
- spike_threshold_voltage=-30,
497
+ spike_threshold_voltage=-40,
453
498
  v_init=-80.0,
454
499
  celsius=34.0,
455
500
  output_dir="./memodel_validation_figures",
@@ -461,6 +506,7 @@ def run_validations(
461
506
  cell (Cell): The cell to validate.
462
507
  cell_name (str): The name of the cell, used in the output directory.
463
508
  spike_threshold_voltage (float): The voltage threshold for spike detection.
509
+ Default value in this module is -40 mV because some cells do not reach -20 mv.
464
510
  v_init: Initial membrane potential. Default is -80.0 mV.
465
511
  celsius: Temperature in Celsius. Default is 34.0.
466
512
  output_dir (str): The directory to save the validation figures.
@@ -472,9 +518,7 @@ def run_validations(
472
518
  out_dir.mkdir(parents=True, exist_ok=True)
473
519
 
474
520
  # set initial voltage and temperature
475
- neuron_globals = NeuronGlobals.get_instance()
476
- neuron_globals.temperature = celsius
477
- neuron_globals.v_init = v_init
521
+ set_neuron_globals(temperature=celsius, v_init=v_init)
478
522
 
479
523
  # get me-model properties
480
524
  holding_current = cell.hypamp if cell.hypamp else 0.0
@@ -489,12 +533,14 @@ def run_validations(
489
533
  morphology_path=cell.template_params.morph_filepath,
490
534
  template_format=cell.template_params.template_format,
491
535
  emodel_properties=cell.template_params.emodel_properties,
536
+ current_delta=-0.2 * rheobase,
492
537
  )
493
538
 
494
539
  logger.debug("Running validations...")
495
- from bluecellulab.utils import NestedPool
496
540
  val_n_processes = n_processes if n_processes is not None else 7
497
- with NestedPool(processes=val_n_processes) as pool:
541
+ with NestedPool(
542
+ processes=val_n_processes, initializer=set_neuron_globals, initargs=(celsius, v_init)
543
+ ) as pool:
498
544
  # Validation 1: Spiking Test
499
545
  spiking_test_result_future = pool.apply_async(
500
546
  spiking_test,
@@ -550,10 +596,14 @@ def run_validations(
550
596
 
551
597
  # IV and FI tests are outside of nestedpool, because they use multiprocessing internaly
552
598
  # Validation 8: IV Test
553
- iv_test_result = iv_test(cell.template_params, rheobase, out_dir, spike_threshold_voltage, n_processes)
599
+ iv_test_result = iv_test(
600
+ cell.template_params, rheobase, out_dir, spike_threshold_voltage, n_processes, celsius, v_init
601
+ )
554
602
 
555
603
  # Validation 9: FI Test
556
- fi_test_result = fi_test(cell.template_params, rheobase, out_dir, spike_threshold_voltage, n_processes)
604
+ fi_test_result = fi_test(
605
+ cell.template_params, rheobase, out_dir, spike_threshold_voltage, n_processes, celsius, v_init
606
+ )
557
607
 
558
608
  return {
559
609
  "memodel_properties": {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluecellulab
3
- Version: 2.6.64
3
+ Version: 2.6.66
4
4
  Summary: Biologically detailed neural network simulations and analysis.
5
5
  Author: Blue Brain Project, EPFL
6
6
  License: Apache2.0
@@ -10,12 +10,12 @@ bluecellulab/plotwindow.py,sha256=ePU-EegZ1Sqk0SoYYiQ6k24ZO4s3Hgfpx10uePiJ5xM,27
10
10
  bluecellulab/psection.py,sha256=FSOwRNuOTyB469BM-jPEf9l1J59FamXmzrQgBI6cnP4,6174
11
11
  bluecellulab/psegment.py,sha256=PTgoGLqM4oFIdF_8QHFQCU59j-8TQmtq6PakiGUQhIo,3138
12
12
  bluecellulab/rngsettings.py,sha256=2Ykb4Ylk3XTs58x1UIxjg8XJqjSpnCgKRZ8avXCDpxk,4237
13
- bluecellulab/tools.py,sha256=Wj3zEalJuyMzp0btoyWHXsCRpxyg6lNEuJfvmudlQmc,21767
13
+ bluecellulab/tools.py,sha256=XvfWGSbNevAEUa8TYlAJtRurKOvbARY0wLa6qHkm93g,21925
14
14
  bluecellulab/type_aliases.py,sha256=DvgjERv2Ztdw_sW63JrZTQGpJ0x5uMTFB5hcBHDb0WA,441
15
15
  bluecellulab/utils.py,sha256=0NhwlzyLnSi8kziSfDsQf7pokO4qDkMJVAO33kSX4O0,2227
16
16
  bluecellulab/verbosity.py,sha256=T0IgX7DrRo19faxrT4Xzb27gqxzoILQ8FzYKxvUeaPM,1342
17
17
  bluecellulab/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- bluecellulab/analysis/analysis.py,sha256=_ggribmdjerotj8u3qJYUojP7Y2IfKpGLZRBzFX8vdE,22596
18
+ bluecellulab/analysis/analysis.py,sha256=qZN2R7IKMOda8sVEDU61TkTDNUbaZjIWbwP3pM6Fcm8,24184
19
19
  bluecellulab/analysis/inject_sequence.py,sha256=bpi_C1oz_G5cZv_CvvZG8SnGYaKIlDsIFHdkOAkDm-E,12666
20
20
  bluecellulab/analysis/plotting.py,sha256=PqRoaZz33ULMw8A9YnZXXrxcUd84M_dwlYMTFhG7YT4,3999
21
21
  bluecellulab/analysis/utils.py,sha256=eMirP557D11BuedgSqjripDxOq1haIldNbnYNetV1bg,121
@@ -63,7 +63,7 @@ bluecellulab/reports/writers/base_writer.py,sha256=P5ramFD2oFIroEBCH1pAscbkfcBIV
63
63
  bluecellulab/reports/writers/compartment.py,sha256=EwFc2NwqhGEwGShEFOIrpYWRgH4b7qZCwsPvpUxeboU,7212
64
64
  bluecellulab/reports/writers/spikes.py,sha256=ycMuoT6f-UbAbC47X9gkG44OQYeAGBQMB2RdJAq3Ykg,2558
65
65
  bluecellulab/simulation/__init__.py,sha256=P2ebt0SFw-08J3ihN-LeRn95HeF79tzA-Q0ReLm32dM,214
66
- bluecellulab/simulation/neuron_globals.py,sha256=iBjhg0-1YMP5LsVdtUDt24PEypkCL6mlyzEBZqoS8xo,4508
66
+ bluecellulab/simulation/neuron_globals.py,sha256=wvh6HfVYXoUsAcy17wqI_4SOqBCovRGEEaW9ANDgiIQ,4943
67
67
  bluecellulab/simulation/parallel.py,sha256=oQ_oV2EKr8gP4yF2Dq8q9MiblDyi89_wBgLzQkLV_U0,1514
68
68
  bluecellulab/simulation/report.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
69
  bluecellulab/simulation/simulation.py,sha256=OfrzeHvLmOV2ptYcGie_fVGrtkDfizLpE6ZyQWVxnIE,6492
@@ -74,10 +74,10 @@ bluecellulab/stimulus/stimulus.py,sha256=a_hKJUtZmIgjiFjbJf6RzUPokELqn0IHCgIWGw5
74
74
  bluecellulab/synapse/__init__.py,sha256=RW8XoAMXOvK7OG1nHl_q8jSEKLj9ZN4oWf2nY9HAwuk,192
75
75
  bluecellulab/synapse/synapse_factory.py,sha256=NHwRMYMrnRVm_sHmyKTJ1bdoNmWZNU4UPOGu7FCi-PE,6987
76
76
  bluecellulab/synapse/synapse_types.py,sha256=zs_yBvGTH4QrbQF3nEViidyq1WM_ZcTSFdjUxB3khW0,16871
77
- bluecellulab/validation/validation.py,sha256=csy1xKOOWdlo3NYHdknePPxb7KBRTjoUV-81ZmWo2CM,20041
78
- bluecellulab-2.6.64.dist-info/licenses/AUTHORS.txt,sha256=EDs3H-2HXBojbma10psixk3C2rFiOCTIREi2ZAbXYNQ,179
79
- bluecellulab-2.6.64.dist-info/licenses/LICENSE,sha256=dAMAR2Sud4Nead1wGFleKiwTZfkTNZbzmuGfcTKb3kg,11335
80
- bluecellulab-2.6.64.dist-info/METADATA,sha256=M0-DelNxsIVqo8IMQOWMS9ASkzME8YKJfvPAvJYMoHE,8259
81
- bluecellulab-2.6.64.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
82
- bluecellulab-2.6.64.dist-info/top_level.txt,sha256=VSyEP8w9l3pXdRkyP_goeMwiNA8KWwitfAqUkveJkdQ,13
83
- bluecellulab-2.6.64.dist-info/RECORD,,
77
+ bluecellulab/validation/validation.py,sha256=D35LE_131CtIzeeePAPz1OFzncGjAcvF02lSIvGvL2E,21331
78
+ bluecellulab-2.6.66.dist-info/licenses/AUTHORS.txt,sha256=EDs3H-2HXBojbma10psixk3C2rFiOCTIREi2ZAbXYNQ,179
79
+ bluecellulab-2.6.66.dist-info/licenses/LICENSE,sha256=dAMAR2Sud4Nead1wGFleKiwTZfkTNZbzmuGfcTKb3kg,11335
80
+ bluecellulab-2.6.66.dist-info/METADATA,sha256=Ks8Pluoya43-54yOznhJlHPFTlIRmgr8z8NGWRvvZ5o,8259
81
+ bluecellulab-2.6.66.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
82
+ bluecellulab-2.6.66.dist-info/top_level.txt,sha256=VSyEP8w9l3pXdRkyP_goeMwiNA8KWwitfAqUkveJkdQ,13
83
+ bluecellulab-2.6.66.dist-info/RECORD,,