bluecellulab 2.6.21__py3-none-any.whl → 2.6.23__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.
- bluecellulab/__init__.py +1 -1
- bluecellulab/cell/injector.py +1 -3
- bluecellulab/cell/stimuli_generator.py +25 -7
- bluecellulab/stimulus/circuit_stimulus_definitions.py +10 -3
- {bluecellulab-2.6.21.dist-info → bluecellulab-2.6.23.dist-info}/METADATA +1 -1
- {bluecellulab-2.6.21.dist-info → bluecellulab-2.6.23.dist-info}/RECORD +10 -10
- {bluecellulab-2.6.21.dist-info → bluecellulab-2.6.23.dist-info}/AUTHORS.txt +0 -0
- {bluecellulab-2.6.21.dist-info → bluecellulab-2.6.23.dist-info}/LICENSE +0 -0
- {bluecellulab-2.6.21.dist-info → bluecellulab-2.6.23.dist-info}/WHEEL +0 -0
- {bluecellulab-2.6.21.dist-info → bluecellulab-2.6.23.dist-info}/top_level.txt +0 -0
bluecellulab/__init__.py
CHANGED
|
@@ -18,7 +18,7 @@ from .psection import PSection # NOQA
|
|
|
18
18
|
from .psegment import PSegment # NOQA
|
|
19
19
|
from .simulation import Simulation # NOQA
|
|
20
20
|
from .rngsettings import RNGSettings # NOQA
|
|
21
|
-
from .circuit_simulation import CircuitSimulation
|
|
21
|
+
from .circuit_simulation import CircuitSimulation # NOQA
|
|
22
22
|
import neuron
|
|
23
23
|
|
|
24
24
|
from .simulation.neuron_globals import NeuronGlobals
|
bluecellulab/cell/injector.py
CHANGED
|
@@ -360,17 +360,15 @@ class InjectableMixin:
|
|
|
360
360
|
stimulus: RelativeShotNoise,
|
|
361
361
|
shotnoise_stim_count=0):
|
|
362
362
|
"""Add a replay relative shot noise stimulus."""
|
|
363
|
-
cv_square = stimulus.amp_cv**2
|
|
364
363
|
|
|
365
364
|
stim_mode = stimulus.mode
|
|
366
365
|
rel_prop = self.relativity_proportion(stim_mode)
|
|
367
366
|
|
|
368
367
|
mean = stimulus.mean_percent / 100 * rel_prop
|
|
369
368
|
sd = stimulus.sd_percent / 100 * rel_prop
|
|
370
|
-
var = sd * sd
|
|
371
369
|
|
|
372
370
|
rate, amp_mean, amp_var = get_relative_shotnoise_params(
|
|
373
|
-
mean,
|
|
371
|
+
mean, sd, stimulus.decay_time, stimulus.rise_time, stimulus.relative_skew)
|
|
374
372
|
|
|
375
373
|
rng = self._get_shotnoise_step_rand(shotnoise_stim_count, stimulus.seed)
|
|
376
374
|
tvec, svec = gen_shotnoise_signal(stimulus.decay_time, stimulus.rise_time, rate, amp_mean,
|
|
@@ -114,17 +114,35 @@ def gen_shotnoise_signal(tau_D, tau_R, rate, amp_mean, amp_var,
|
|
|
114
114
|
return tvec, P
|
|
115
115
|
|
|
116
116
|
|
|
117
|
-
def get_relative_shotnoise_params(mean,
|
|
117
|
+
def get_relative_shotnoise_params(mean, sd, tau_D, tau_R, relative_skew):
|
|
118
118
|
"""Returns Rate, amp_mean and amp_var parameters."""
|
|
119
119
|
# bi-exponential time to peak [ms]
|
|
120
120
|
t_peak = math.log(tau_D / tau_R) / (1 / tau_R - 1 / tau_D)
|
|
121
121
|
# bi-exponential peak height [1]
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
122
|
+
F_peak = math.exp(-t_peak / tau_D) - math.exp(-t_peak / tau_R)
|
|
123
|
+
|
|
124
|
+
# utility constants
|
|
125
|
+
Xi = (tau_D - tau_R) / F_peak
|
|
126
|
+
A = 1 / (tau_D + tau_R)
|
|
127
|
+
B = 1 / ((tau_D + 2 * tau_R) * (2 * tau_D + tau_R))
|
|
128
|
+
|
|
129
|
+
# skewness
|
|
130
|
+
skew_bnd_min = (8 / 3) * (B / A ** 2) * (sd / mean)
|
|
131
|
+
skew = (1 + relative_skew) * skew_bnd_min
|
|
132
|
+
if skew < skew_bnd_min or skew > 2 * skew_bnd_min:
|
|
133
|
+
raise ValueError("skewness out of bounds")
|
|
134
|
+
|
|
135
|
+
# cumulants
|
|
136
|
+
lambda2_1 = sd ** 2 / mean # lambda2 over lambda1
|
|
137
|
+
lambda3_2 = sd * skew # lambda3 over lambda2
|
|
138
|
+
theta1pk = 2 / (A * Xi) * lambda2_1 # = (1 + k) * theta
|
|
139
|
+
theta2pk = (3 * A) / (4 * B * Xi) * lambda3_2 # = (2 + k) * theta
|
|
140
|
+
|
|
141
|
+
# derived parameters
|
|
142
|
+
amp_mean = 2 * theta1pk - theta2pk # mean amplitude [nA or uS]
|
|
143
|
+
amp_var = amp_mean * (theta2pk - theta1pk) # variance of amplitude [nA^2 or uS^2]
|
|
144
|
+
rate_ms = mean / (amp_mean * Xi) # event rate in 1 / ms
|
|
145
|
+
rate = rate_ms * 1000 # event rate in 1 / s [Hz]
|
|
128
146
|
|
|
129
147
|
return rate, amp_mean, amp_var
|
|
130
148
|
|
|
@@ -170,7 +170,7 @@ class Stimulus:
|
|
|
170
170
|
decay_time=stimulus_entry["DecayTime"],
|
|
171
171
|
mean_percent=stimulus_entry["MeanPercent"],
|
|
172
172
|
sd_percent=stimulus_entry["SDPercent"],
|
|
173
|
-
|
|
173
|
+
relative_skew=stimulus_entry.get("RelativeSkew", 0.5),
|
|
174
174
|
seed=stimulus_entry.get("Seed", None),
|
|
175
175
|
mode=mode,
|
|
176
176
|
reversal=stimulus_entry.get("Reversal", 0.0)
|
|
@@ -269,7 +269,7 @@ class Stimulus:
|
|
|
269
269
|
decay_time=stimulus_entry["decay_time"],
|
|
270
270
|
mean_percent=stimulus_entry["mean_percent"],
|
|
271
271
|
sd_percent=stimulus_entry["sd_percent"],
|
|
272
|
-
|
|
272
|
+
relative_skew=stimulus_entry.get("RelativeSkew", 0.5),
|
|
273
273
|
seed=stimulus_entry.get("random_seed", None),
|
|
274
274
|
mode=ClampMode(stimulus_entry.get("input_type", "current_clamp").lower()),
|
|
275
275
|
reversal=stimulus_entry.get("reversal", 0.0)
|
|
@@ -365,7 +365,7 @@ class RelativeShotNoise(Stimulus):
|
|
|
365
365
|
decay_time: float
|
|
366
366
|
mean_percent: float
|
|
367
367
|
sd_percent: float
|
|
368
|
-
|
|
368
|
+
relative_skew: float = 0.5
|
|
369
369
|
dt: float = 0.25
|
|
370
370
|
seed: Optional[int] = None
|
|
371
371
|
mode: ClampMode = ClampMode.CURRENT
|
|
@@ -378,6 +378,13 @@ class RelativeShotNoise(Stimulus):
|
|
|
378
378
|
raise ValueError("decay_time must be greater than rise_time")
|
|
379
379
|
return v
|
|
380
380
|
|
|
381
|
+
@field_validator("relative_skew")
|
|
382
|
+
@classmethod
|
|
383
|
+
def relative_skew_in_range(cls, v):
|
|
384
|
+
if v < 0.0 or v > 1.0:
|
|
385
|
+
raise ValueError("relative skewness must be in [0,1]")
|
|
386
|
+
return v
|
|
387
|
+
|
|
381
388
|
|
|
382
389
|
@dataclass(frozen=True, config=dict(extra="forbid"))
|
|
383
390
|
class OrnsteinUhlenbeck(Stimulus):
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
bluecellulab/__init__.py,sha256=
|
|
1
|
+
bluecellulab/__init__.py,sha256=1d_CKIJLIpon7o13h3lBnV_-33obZEPwa9KDTjlFPD8,880
|
|
2
2
|
bluecellulab/circuit_simulation.py,sha256=cLCA97WKjhlEitD4CUad9n4pH4KF7Iw68w1bZH512yw,33587
|
|
3
3
|
bluecellulab/connection.py,sha256=volV2YKtmqAF7MOEJar5ldF1ARAo7k2vF9MB1NXybUY,4640
|
|
4
4
|
bluecellulab/dendrogram.py,sha256=w0vvv0Q169DolTX1j9dAZIvHIl4H258gAjQ1xQaNiGk,6427
|
|
@@ -19,14 +19,14 @@ bluecellulab/analysis/inject_sequence.py,sha256=Ih3wdNRn0-lM-NW8agrMUGS862CEgzn_
|
|
|
19
19
|
bluecellulab/cell/__init__.py,sha256=Sbc0QOsJ8E7tSwf3q7fsXuE_SevBN6ZmoCVyyU5zfII,208
|
|
20
20
|
bluecellulab/cell/cell_dict.py,sha256=PVmZsjhZ9jp3HC-8QmdFqp-crAcVMSVeLWujcOPLlpo,1346
|
|
21
21
|
bluecellulab/cell/core.py,sha256=2UtXXd4FA2X5A_7ljjbN4yobpMWD2FWfux67ZFND2rI,31315
|
|
22
|
-
bluecellulab/cell/injector.py,sha256=
|
|
22
|
+
bluecellulab/cell/injector.py,sha256=u6Jvf_14rNOy5azK_mIUU8C2WioiGZd-7YGKoSnbR6Y,18042
|
|
23
23
|
bluecellulab/cell/plotting.py,sha256=hW5KAmaSonJ1tgR6xRrnfVe33I5mBsBUrKJQwGvAbUc,4032
|
|
24
24
|
bluecellulab/cell/random.py,sha256=FDby9BN4eJT27COwHP59bhDE2v-c6rdOKNFj3cYZTVY,1773
|
|
25
25
|
bluecellulab/cell/recording.py,sha256=dekJspPb_5yrS6WR3aXtvZ6KWwMNbyhe5aIOVtNDHpY,342
|
|
26
26
|
bluecellulab/cell/section_distance.py,sha256=J8-oqgCHzRaJkpfjPUR6NFtXDhwbrXad9nDaTCKNkTU,3908
|
|
27
27
|
bluecellulab/cell/serialized_sections.py,sha256=sH9mV2CJU_DlhfJhwtuMs1gGnNEnKUvB_Bxx3AEmLHQ,1543
|
|
28
28
|
bluecellulab/cell/sonata_proxy.py,sha256=dLT9mLlGVpXxj2O2lXN0g7Sq4BwroPLVdPikR2yNMv4,1529
|
|
29
|
-
bluecellulab/cell/stimuli_generator.py,sha256=
|
|
29
|
+
bluecellulab/cell/stimuli_generator.py,sha256=01CjXToBYtz24QP_h_LkZnSKhmEpDFIQOk4TU-ueeXg,7129
|
|
30
30
|
bluecellulab/cell/template.py,sha256=K8Vp1-yE6-9wxjmhkLBhnjBhgciUixoMk8LU-GioTgM,7562
|
|
31
31
|
bluecellulab/cell/ballstick/__init__.py,sha256=v1Z8tHFfbpWShxOBdShCUaE0utoz-7rZumuNBQtNOFI,439
|
|
32
32
|
bluecellulab/cell/ballstick/emodel.hoc,sha256=7WcuepK-wB9bASRvNdCwO9Woc9-SpBCFqBqCXKgjsV8,1517
|
|
@@ -57,14 +57,14 @@ bluecellulab/simulation/neuron_globals.py,sha256=_8xmJPQMfCyhVn6KppK7i3jaUZaALML
|
|
|
57
57
|
bluecellulab/simulation/parallel.py,sha256=oQ_oV2EKr8gP4yF2Dq8q9MiblDyi89_wBgLzQkLV_U0,1514
|
|
58
58
|
bluecellulab/simulation/simulation.py,sha256=I__cZwV_A8I7XSefn6aJDBA_jXCI3E35-pCNCLUsnvo,6206
|
|
59
59
|
bluecellulab/stimulus/__init__.py,sha256=DgIgVaSyR-URf3JZzvO6j-tjCerzvktuK-ep8pjMRPQ,37
|
|
60
|
-
bluecellulab/stimulus/circuit_stimulus_definitions.py,sha256=
|
|
60
|
+
bluecellulab/stimulus/circuit_stimulus_definitions.py,sha256=Vt95dfvkSFAKl53wSv7CEECgYUVbkVAh1uZrD5ial1Y,15890
|
|
61
61
|
bluecellulab/stimulus/factory.py,sha256=XDbnqCuMCh1RdZLKvlRucMj3wkXDqy6mEda_Oh6Yqo4,19955
|
|
62
62
|
bluecellulab/synapse/__init__.py,sha256=RW8XoAMXOvK7OG1nHl_q8jSEKLj9ZN4oWf2nY9HAwuk,192
|
|
63
63
|
bluecellulab/synapse/synapse_factory.py,sha256=3y15LlaBoNJiU2KUeTkh70pyU5OYf6xQIMSBmmMPMak,6987
|
|
64
64
|
bluecellulab/synapse/synapse_types.py,sha256=4gne-hve2vq1Lau-LAVPsfLjffVYqAYBW3kCfC7_600,16871
|
|
65
|
-
bluecellulab-2.6.
|
|
66
|
-
bluecellulab-2.6.
|
|
67
|
-
bluecellulab-2.6.
|
|
68
|
-
bluecellulab-2.6.
|
|
69
|
-
bluecellulab-2.6.
|
|
70
|
-
bluecellulab-2.6.
|
|
65
|
+
bluecellulab-2.6.23.dist-info/AUTHORS.txt,sha256=EDs3H-2HXBojbma10psixk3C2rFiOCTIREi2ZAbXYNQ,179
|
|
66
|
+
bluecellulab-2.6.23.dist-info/LICENSE,sha256=xOouu1gC1GGklDxkITlaVl60I9Ab860O-nZsFbWydvU,11749
|
|
67
|
+
bluecellulab-2.6.23.dist-info/METADATA,sha256=Yizrto13DoMEm7O3ac9WrtHo_JuTOgNdmetsmNN42c0,7267
|
|
68
|
+
bluecellulab-2.6.23.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
|
|
69
|
+
bluecellulab-2.6.23.dist-info/top_level.txt,sha256=VSyEP8w9l3pXdRkyP_goeMwiNA8KWwitfAqUkveJkdQ,13
|
|
70
|
+
bluecellulab-2.6.23.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|