108 lines
3.4 KiB
Python
108 lines
3.4 KiB
Python
import glob
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
import rlxnix as rlx
|
|
import scipy as sp
|
|
import time
|
|
import useful_functions as f
|
|
|
|
# tatsächliche Power der peaks benutzen
|
|
|
|
|
|
|
|
|
|
# all files we want to use
|
|
files = glob.glob("../data/2024-10-*.nix")
|
|
|
|
# get only the good and fair filepaths
|
|
new_files = f.remove_poor(files)
|
|
|
|
|
|
# loop over all the good files
|
|
for file in new_files:
|
|
|
|
contrast_frequencies = []
|
|
contrast_powers = []
|
|
# load a file
|
|
dataset = rlx.Dataset(file)
|
|
# extract sams
|
|
sams = dataset.repro_runs('SAM')
|
|
# get arrays for frequnecies and power
|
|
stim_frequencies = np.zeros(len(sams))
|
|
peak_powers = np.zeros_like(stim_frequencies)
|
|
# loop over all sams
|
|
# dictionary for the contrasts
|
|
contrast_sams = {20 : [],
|
|
10 : [],
|
|
5 : []}
|
|
# loop over all sams
|
|
for sam in sams:
|
|
# get the contrast
|
|
avg_dur, contrast, _, _, _, _, _ = f.sam_data(sam)
|
|
# check for valid trails
|
|
if np.isnan(contrast):
|
|
continue
|
|
elif sam.stimulus_count < 3: #aborted trials
|
|
continue
|
|
elif avg_dur < 1.7:
|
|
continue
|
|
else:
|
|
contrast = int(contrast) # get integer of contrast
|
|
# sort them accordingly
|
|
if contrast == 20:
|
|
contrast_sams[20].append(sam)
|
|
if contrast == 10:
|
|
contrast_sams[10].append(sam)
|
|
if contrast == 5:
|
|
contrast_sams[5].append(sam)
|
|
else:
|
|
continue
|
|
# loop over the contrasts
|
|
for key in contrast_sams:
|
|
stim_frequencies = np.zeros(len(contrast_sams[key]))
|
|
peak_powers = np.zeros_like(stim_frequencies)
|
|
|
|
for i, sam in enumerate(contrast_sams[key]):
|
|
# get stimulus frequency and stimuli
|
|
_, _, _, _, _, _, stim_frequency = f.sam_data(sam)
|
|
stimuli = sam.stimuli
|
|
# lists for the power spectra
|
|
frequencies = []
|
|
powers = []
|
|
# loop over the stimuli
|
|
for stimulus in stimuli:
|
|
# get the powerspectrum for each stimuli
|
|
frequency, power = f.power_spectrum(stimulus)
|
|
# append the power spectrum data
|
|
frequencies.append(frequency)
|
|
powers.append(power)
|
|
#average over the stimuli
|
|
sam_frequency = np.mean(frequencies, axis = 0)
|
|
sam_power = np.mean(powers, axis = 0)
|
|
# detect peaks
|
|
integral, surroundings, peak_power = f.calculate_integral(sam_frequency,
|
|
sam_power, stim_frequency)
|
|
|
|
peak_powers[i] = peak_power
|
|
# add the current stimulus frequency
|
|
stim_frequencies[i] = stim_frequency
|
|
|
|
# replae zeros with NaN
|
|
peak_powers = np.where(peak_powers == 0, np.nan, peak_powers)
|
|
|
|
contrast_frequencies.append(stim_frequencies)
|
|
contrast_powers.append(peak_powers)
|
|
|
|
fig, ax = plt.subplots(layout = 'constrained')
|
|
ax.plot(contrast_frequencies[0], contrast_powers[0])
|
|
ax.plot(contrast_frequencies[1], contrast_powers[1])
|
|
ax.plot(contrast_frequencies[2], contrast_powers[2])
|
|
ax.set_xlabel('stimulus frequency [Hz]')
|
|
ax.set_ylabel(r' power [$\frac{\mathrm{mV^2}}{\mathrm{Hz}}$]')
|
|
ax.set_title(f"{file}")
|
|
|
|
|
|
|
|
|
|
|
|
|