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

1import numpy as np 

2 

3 

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. 

12 

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. 

20 

21 Returns: 

22 - signal: Numpy array representing the pseudo-calcium signal. 

23 """ 

24 # Calculate number of samples 

25 num_samples = int(duration * sampling_rate) 

26 

27 # Initialize the signal with zeros 

28 signal = np.zeros(num_samples) 

29 

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) 

34 

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 

40 

41 # Add Gaussian noise 

42 noise = np.random.normal(0, noise_std, num_samples) 

43 signal += noise 

44 

45 return signal 

46 

47 

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) 

53 

54 return np.vstack(sigs)