import numpy as np
import matplotlib.pyplot as plt
import os
from scipy import stats
def hamming_distance(s1, s2):
"Return the Hamming Distance (HD) between two patterns"
if len(s1) != len(s2):
raise ValueError("Unequal length of patterns")
return sum(ch1 != ch2 for ch1, ch2 in zip(s1,s2))
def analysis_of_results(Trials,mossy,maindir):
scale_fac = 4
N_output = 500*scale_fac
N_input = 100*scale_fac
Fout_ALL = []
similarityO_ALL = []
similarityI_ALL = []
errors_ALL = []
GC_activity = []
O_rateALL = []
overlap = '80'
if mossy == 'Control':
path=maindir+'/results/Control/'
elif mossy == 'noMC':
path=maindir+'/results/MC_delete/'
elif mossy == 'noMCBC':
path=maindir+'/results/MC_to_IN_delete/'
elif mossy == 'noMCGC':
path=maindir+'/results/MC_to_GC_delete/'
Fout = []
Fin = []
O_rate = []
# Number of trials-runs
for i_trial in Trials:
GC_active = []
I1 = np.load(path+'input_pattern0d_'+overlap+'_'+str(i_trial)+'_'+str(1)+'.npy')
O1 = np.load(path+'output_pattern0d_'+overlap+'_'+str(i_trial)+'_'+str(1)+'.npy')
I2 = np.load(path+'input_pattern0d_'+overlap+'_'+str(i_trial)+'_'+str(2)+'.npy')
O2 = np.load(path+'output_pattern0d_'+overlap+'_'+str(i_trial)+'_'+str(2)+'.npy')
for rate_i in xrange(N_output):
O_rate.append(O1[rate_i])
O_rate.append(O2[rate_i])
O_rateALL.append(O_rate)
for n_i in xrange(N_input):
if I1[n_i] < 1:
I1[n_i] = 0
else:
I1[n_i] = 1
if I2[n_i] < 1:
I2[n_i] = 0
else:
I2[n_i] = 1
for n_o in xrange(N_output):
if O1[n_o] < 1:
O1[n_o] = 0
else:
O1[n_o] = 1
if O2[n_o] < 1:
O2[n_o] = 0
else:
O2[n_o] = 1
GC_active.append(len(find(O1 != 0))/float(N_output))
GC_active.append(len(find(O2 != 0))/float(N_output))
# mean of GC neurons that are active!!!
s_in = len(find(I1 != 0))/float(N_input)
s_out = max(GC_active)
GC_activity.append((len(find(O2 != 0))/float(N_output)))
HDin = hamming_distance(I1, I2)
HDout = hamming_distance(O1, O2)
finput = float(HDin)/(2*s_in*N_input)
foutput = float(HDout)/(2*s_out*N_output)
if foutput < 0:
print HDout
print GC_active
print
Fout.append(foutput*100)
Fin.append(int(finput*100))
Fout_ALL.append(Fout)
similarityO_ALL.append(mean(Fout))
similarityI_ALL.append(mean(Fin))
errors_ALL.append(stats.sem(Fout))
return similarityO_ALL, GC_activity*100
Trials = range(1,51)
case = ['Control','noMC','noMCBC','noMCGC']
maindir = os.getcwd()
mydict1={}
mydict2={}
for icase in case:
results1,results2 = analysis_of_results(Trials,icase,maindir)
mydict1[icase]=results1
mydict2[icase]=results2
fs=12 # fontsize
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(6, 6), sharey=True)
plt.hist(mydict2['Control'], bins=15, histtype='stepfilled',
weights=np.zeros_like(mydict2['Control']) + 1. / len(mydict2['Control']), color='green', alpha=0.8, label='Control')
plt.hist(mydict2['noMC'], bins=15, histtype='stepfilled',
weights=np.zeros_like(mydict2['noMC']) + 1. / len(mydict2['noMC']), color='purple', alpha=0.8, label='Deletion')
plt.ylabel('density', fontsize=fs+4)
plt.xlabel('Fraction of GCs recruited', fontsize=fs+4)
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(6, 6), sharey=True)
plt.hist(mydict2['Control'], bins=15, histtype='stepfilled',
weights=np.zeros_like(mydict2['Control']) + 1. / len(mydict2['Control']), color='green', alpha=0.8, label='Control')
plt.hist(mydict2['noMCGC'], bins=15, histtype='stepfilled',
weights=np.zeros_like(mydict2['noMCGC']) + 1. / len(mydict2['noMCGC']), color='purple', alpha=0.8, label='Deletion')
plt.ylabel('density', fontsize=fs+4)
plt.xlabel('Fraction of GCs recruited', fontsize=fs+4)
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(6, 6), sharey=True)
plt.hist(mydict2['Control'], bins=15, histtype='stepfilled',
weights=np.zeros_like(mydict2['Control']) + 1. / len(mydict2['Control']), color='green', alpha=0.8, label='Control')
plt.hist(mydict2['noMCBC'], bins=15, histtype='stepfilled',
weights=np.zeros_like(mydict2['noMCBC']) + 1. / len(mydict2['noMCBC']), color='purple', alpha=0.8, label='Deletion')
plt.ylabel('density', fontsize=fs+4)
plt.xlabel('Fraction of GCs recruited', fontsize=fs+4)
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(6, 6), sharey=True)
plt.boxplot([mydict1['Control'],mydict1['noMC']], positions = [0.5, 1],showfliers=False)
axes.set_xticklabels(['control', 'MC deletion'], fontsize=fs+4)
axes.set_xticks([0.5, 1.0])
plt.ylim(30,80)
plt.ylabel('Output distance', fontsize=fs+4)
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(6, 6), sharey=True)
plt.boxplot([mydict1['Control'],mydict1['noMCGC']], positions = [0.5, 1],showfliers=False)
axes.set_xticklabels(['control', 'MC to GC \ndeletion'], fontsize=fs+4)
axes.set_xticks([0.5, 1.0])
plt.ylim(30,80)
plt.ylabel('Output distance', fontsize=fs+4)
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(6, 6), sharey=True)
plt.boxplot([mydict1['Control'],mydict1['noMCBC']], positions = [0.5, 1],showfliers=False)
axes.set_xticklabels(['control', 'MC to BC \ndeletion'], fontsize=fs+4)
axes.set_xticks([0.5, 1.0])
plt.ylim(30,80)
plt.ylabel('Output distance', fontsize=fs+4)