Newer
Older
notebooks / coursera_compneuro / w4quiz / quiz4.py
# %%
import numpy as np
import pickle

with open('tuning_3.4.pickle', 'rb') as f:
    data = pickle.load(f)

#%%
data['neuron1'].shape

import matplotlib.pyplot as plt


# plt.plot(data['stim'],data['neuron1'].mean(axis=0))
# plt.show()


# plt.plot(data['stim'],data['neuron2'].mean(axis=0))
# plt.show()


# plt.plot(data['stim'],data['neuron3'].mean(axis=0))
# plt.show()


# plt.plot(data['stim'],data['neuron4'].mean(axis=0))
# plt.show()

import numpy as np

def fano(neuron):
  d = data[neuron]
  f = (100/10) * d.std(axis=0) / d.mean(axis=0)
  return f

# calc r_max per neuron
r_max={}
for i in range(1,5):
  n = f'neuron{i}'
  print(f'fano of {n}:', np.nanmean(fano(n)))
  # r_max_index = data[n].mean(axis=0).argmax()
  # r_max[n] = data['stim'][r_max_index]
  r_max[n] = data[n].mean(axis=0).max()

print('r_max: ', r_max)

#%%

# part 2 (last question)
with open('pop_coding_3.4.pickle', 'rb') as f:
    pdata = pickle.load(f)

r0 = 0
v_total = [0,0]
for n in range(1,5):
  v = pdata[f'c{n}'] * np.mean(pdata[f'r{n}']) / r_max[f'neuron{n}']
  v_total += v

# map to the expected coord (clockwise, y-axis is zero degree)
v_deg = np.rad2deg(np.arctan(v_total)[1])
np.round(-(v_deg - 90) % 360)