# -*- coding: utf-8 -*-
## USAGE: python2.6 test_corrs.py
from pylab import *
import pickle
import sys
import math
sys.path.extend(["..","../networks","../generators","../simulations"])
from stimuliConstants import * # has SETTLETIME
from data_utils import *
from simset_odor import* # has REALRUNTIME
f = open('../generators/firerates_2sgm_'+str(rate_seednum)+'.pickle','r')
frateOdorList,fratePulseList,randomPulseList,randomPulseStepsList,randomResponseList,kernels\
= pickle.load(f)
f.close()
RUNTIME = REALRUNTIME + SETTLETIME
firingtsteps = arange(0,RUNTIME+1e-10,FIRINGFILLDT)# include the last RUNTIME point also.
numt = len(firingtsteps)
def calc_corrs():
## frateOdorList[glomnum][odornum]
## ORN firing rates are very low - increase.
## compare increases in firing rate
#frate1 = 0.5*50*frateOdorList[0][1] # glom0 0.8*odorB+0.2*odorA
#frate2 = 50*frateOdorList[1][0] # glom1 odorB
#frate3 = 0.5*3*frate1
## compare wide (v1) vs narrow (v2) vs phase shift (v3)
frate1 = 50*frateOdorList[0][0] # glom0 odorB
frate2 = 200*frateOdorList[1][5] # glom1 odorA
frate3 = 50*frateOdorList[8][0] # glom8 odorB
peakfrate = max(max(frate1),max(frate2),max(frate3))*2.0
v1 = []
v2 = []
v3 = []
for i in range(10):
v1.append(poissonTrainVaryingRate(RUNTIME,peakfrate,REFRACTORY,firingtsteps,frate1))
v2.append(poissonTrainVaryingRate(RUNTIME,peakfrate,REFRACTORY,firingtsteps,frate2))
v3.append(poissonTrainVaryingRate(RUNTIME,peakfrate,REFRACTORY,firingtsteps,frate3))
## pairs of vectors varnames between which to calculate xcorrgrams.
## CHANGE THIS FOR DIFFERENT PAIRS:
#corrgram_pairs = (('v1','v1'),('v1','v2'),('v1','v3'))
corrgram_pairs = (('v3','v3'),('v3','v2'),('v3','v1'))
#corrgram_pairs = (('v1','v3'),('v3','v1'))
#corrgram_pairs = (('v1','v1'),('v3','v3'))
starttime = REALRUNTIME+SETTLETIME-2*RESPIRATION
endtime = REALRUNTIME+SETTLETIME
T = endtime-starttime
## Dhawale et al 2010: 5 ms time bin, T=0.5s.
## I have T=1.0s as rat resp is 1.0s whereas mouse is 0.5s.
## refractory period in my poisson generator is 1ms, so have that as the bin size:
## must ensure that there are never more than one spike per bin per moving window.
dt = 1e-3
tcorrlist = arange(-T/4.0,T/4.0+1e-6,dt)
colorlist = ['r','g','b','c','m','y','k']
labellist = [va+' '+vb for (va,vb) in corrgram_pairs]
## calc xcorrgrams for each type of normalization.
for (norm_str,title_str) in (('none','no norm'),('overall','integral norm'),\
('ref','ref norm'),('analogous','standard norm')):
xcorrgrams = []
for (va_str,vb_str) in corrgram_pairs:
## lookup the variable value given the variable name
## don't use eval() as it can evaluate any python expression
## hackable if user enters a string
va = locals()[va_str]
vb = locals()[vb_str]
xcorrgrams.append(crosscorrgram( va, vb, dt, T/4.0, starttime, endtime, norm_str ))
plot_corrs(tcorrlist,xcorrgrams,title_str,colorlist,labellist)
return (v1,v2,v3)
def plot_corrs(tcorrlist,xcorrgrams,titlestr,colorlist,labellist):
fig = figure(facecolor='none')
ax = fig.add_subplot(111)
for xcgnum,xcorrgram in enumerate(xcorrgrams):
plot(tcorrlist, xcorrgram, color=colorlist[xcgnum], label=labellist[xcgnum])
biglegend()
axes_labels(ax,'time shift (s)','')
title(titlestr+' sisters xcorrelogram', fontsize=24)
if __name__ == "__main__":
rasters = calc_corrs()
plot_rasters(rasters, RUNTIME)
show()