# -*- coding: utf-8 -*-
########## THIS FITTING PROGRAM IS MEANT TO BE A CLONE OF MUKUND'S AND ADIL'S MATLAB ONE
## USAGE: python2.6 fit_odor_morphs.py ../results/odor_morphs/2011-01-13_odormorph_SINGLES_JOINTS_PGS.pickle
metainfo = [
"E=400*1nS*2, no inhibition",
"E=400*1nS*2, I=10000*0.02nS, E/I~=4.0",
"E=400*1nS*2, I=10000*0.10nS, E/I~=0.8",
"E=400*1nS*2, I=10000*0.20nS, E/I~=0.4",
"E=400*1nS*2, I=10000*0.50nS, E/I~=0.16",
"E=400*1nS*2, I=10000*1.00nS, E/I~=0.08",
]
filelist = [
"2011_05_25_17_56_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle",
"2011_05_25_22_29_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle",
"2011_05_25_18_22_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle",
"2011_05_25_18_27_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle",
"2011_05_25_18_36_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle",
"2011_05_25_18_46_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle"
]
colorlist = ['r','g','b','c','m','y','k']
markerlist = ['s','o','d','+','x','^','<','>','v']
from pylab import *
import pickle
import sys
sys.path.extend(["..","../networks","../generators","../simulations"])
from stimuliConstants import * # has SETTLETIME, inputList and pulseList, GLOMS_ODOR, GLOMS_NIL
from simset_odor import * # has NUMBINS
from networkConstants import * # has central_glom
from sim_utils import * # has rebin() to alter binsize
from data_utils import *
## I override the NUMBINS in simset_odor above, and I rebin() below
NUMBINS = 17
## smooths / overlapping bins. non-overlapping would be RESPIRATION/NUMBINS
bin_width_time = 2.0*RESPIRATION/NUMBINS
NUMMIX = len(inputList)
if __name__ == "__main__":
for filenum,filename in enumerate(filelist):
fig = figure(facecolor='w') # 'none' is transparent
filenamefull = "../results/odor_morphs/"+filename
f = open(filenamefull,'r')
#### mitral_responses_list[avgnum][odornum][mitralnum][tnum]
#### mitral_responses_binned_list[avgnum][odornum][mitralnum][binnum]
mitral_responses_list, mitral_responses_binned_list = pickle.load(f)
f.close()
###################### Input conditioning
mitral_responses_binned_list = \
rebin(mitral_responses_list, NUMBINS, bin_width_time)
#### very important to convert to numpy array,
#### else where() below returns empty list.
mitral_responses_binned_list = array(mitral_responses_binned_list)
mitral_responses_mean = mean(mitral_responses_binned_list, axis=0)
mitral_responses_std = std(mitral_responses_binned_list, axis=0)
## since I fit the mean response,
## I must use standard error/deviation of the _mean_
## = standard deviation of a repeat / sqrt(num of repeats).
NUMAVGs = len(mitral_responses_binned_list)
mitral_responses_se = mitral_responses_std/sqrt(NUMAVGs)
######## scatter plot of std error vs firing rate
scatter(mitral_responses_mean,mitral_responses_se,\
s=20, color=colorlist[filenum], marker=markerlist[filenum], label=metainfo[filenum])
## Poisson noise
plot(arange(0,50,1),[sqrt(val) for val in arange(0,50,1)],color='k',label='Poisson')
legend()
show()