Coverage for src/driada/utils/neural.py: 100.00%
20 statements
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-25 15:40 +0300
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-25 15:40 +0300
1import numpy as np
4def generate_pseudo_calcium_signal(duration,
5 sampling_rate,
6 event_rate,
7 amplitude_range,
8 decay_time,
9 noise_std):
10 """
11 Generate a pseudo-calcium imaging signal with noise.
13 Parameters:
14 - duration: Total duration of the signal in seconds.
15 - sampling_rate: Sampling rate in Hz.
16 - event_rate: Average rate of calcium events per second.
17 - amplitude_range: Tuple of (min, max) for the amplitude of calcium events.
18 - decay_time: Time constant for the decay of calcium events in seconds.
19 - noise_std: Standard deviation of the Gaussian noise to be added.
21 Returns:
22 - signal: Numpy array representing the pseudo-calcium signal.
23 """
24 # Calculate number of samples
25 num_samples = int(duration * sampling_rate)
27 # Initialize the signal with zeros
28 signal = np.zeros(num_samples)
30 # Generate calcium events
31 num_events = np.random.poisson(event_rate * duration)
32 event_times = np.random.uniform(0, duration, num_events)
33 event_amplitudes = np.random.uniform(amplitude_range[0], amplitude_range[1], num_events)
35 # Add calcium events to the signal
36 for t, a in zip(event_times, event_amplitudes):
37 event_index = int(t * sampling_rate)
38 decay = np.exp(-np.arange(num_samples - event_index) / (decay_time * sampling_rate))
39 signal[event_index:] += a * decay
41 # Add Gaussian noise
42 noise = np.random.normal(0, noise_std, num_samples)
43 signal += noise
45 return signal
48def generate_pseudo_calcium_multisignal(n, duration, sampling_rate, event_rate, amplitude_range, decay_time, noise_std):
49 sigs = []
50 for i in range(n):
51 sig = generate_pseudo_calcium_signal(duration, sampling_rate, event_rate, amplitude_range, decay_time, noise_std)
52 sigs.append(sig)
54 return np.vstack(sigs)