from pypcsimplus import * import pypcsimplus as pcsim from numpy import * import numpy from tables import * class BeforeAfterBiofeedModel(pcsim.Model): def defaultParameters(self): p = self.params p.sampleIdx = 0 p.h5filename = last_file('biofeed.*\.h5$') return p def generate(self): my_p = self.params ep = self.expParams dm = self.depModels m = self.elements net = self.net print "Opening file ", my_p.h5filename p = constructParametersFromH5File(my_p.h5filename).biofeed r = constructRecordingsFromH5File(my_p.h5filename).biofeed if not hasattr(p, "additScale"): p.additScale = 1.0 last_weights = [] initial_weights = [] for w in r.weights: last_weights.append(mean(w[-1])) initial_weights.append(w[my_p.sampleIdx]) beforeLearnSynW = initial_weights afterLearnSynW = last_weights targetSynW = hstack((ones(p.numStrongTargetSynapses) * p.Wmax, zeros(p.numWeakTargetSynapses))) inhibSynW = random.normal(p.initInhWMean * p.WmaxInh, p.initInhWVar * p.WmaxInh,p.numInhibSynapses) inhibSynW.clip( min = (p.initInhWMean + p.initInhWBound) * p.WmaxInh, max = (p.initInhWMean - p.initInhWBound) * p.WmaxInh) additionalTargetSynW = ones(p.numAdditionalTargetSynapses) * p.additScale * p.Wmax print "currWmax = ", p.CurrWmax print "Wmax = ", p.Wmax #************************************* # Setup the neurons #************************************* m.before_learning_nrn = net.add(DARecvCbLifNeuron(Cm = p.Cm, Rm = p.Rm, Vresting = p.Vresting, Vthresh = p.Vthresh, Vreset = p.Vreset, Vinit = p.Vinit, Trefract = p.Trefract, Iinject = 0, Inoise = 0), SimEngine.ID(0, 0 % (net.maxLocalEngineID() + 1)) ) m.after_learning_nrn = net.add(DARecvCbLifNeuron(Cm = p.Cm, Rm = p.Rm, Vresting = p.Vresting, Vthresh = p.Vthresh, Vreset = p.Vreset, Vinit = p.Vinit, Trefract = p.Trefract, Iinject = 0, Inoise = 0), SimEngine.ID(0, 0 % (net.maxLocalEngineID() + 1)) ) m.target_nrn = net.add(CbLifNeuron(Cm = p.Cm, Rm = p.Rm, Vresting = p.Vresting, Vthresh = p.Vthresh, Vreset = p.Vreset, Vinit = p.Vinit, Trefract = p.Trefract), SimEngine.ID(0, 2 % (net.maxLocalEngineID() + 1))) m.realiz_target_nrn = net.add(CbLifNeuron(Cm = p.Cm, Rm = p.Rm, Vresting = p.Vresting, Vthresh = p.Vthresh, Vreset = p.Vreset, Vinit = p.Vinit, Trefract = p.Trefract), SimEngine.ID(0, 2 % (net.maxLocalEngineID() + 1))) # Connect the learning and target neurons to the circuit if p.DATraceShape == 'alpha': DATraceResponse = AlphaFunctionSpikeResponse(p.DATraceTau) else: DATraceResponse = ExponentialDecaySpikeResponse(p.DATraceTau) exc_permutation = numpy.random.permutation(dm.exc_nrn_popul.size()) read_exc_nrns = exc_permutation[:p.NumSyn] addit_read_exc_nrns = exc_permutation[p.NumSyn:(p.NumSyn + p.numAdditionalTargetSynapses)] read_inh_nrns = numpy.random.permutation(dm.inh_nrn_popul.size())[:p.numInhibSynapses] # ******************************** Add learning synapses to learning_nrn m.before_learning_plastic_syn = [] for i in xrange(p.NumSyn): m.before_learning_plastic_syn.append(net.connect(dm.exc_nrn_popul[read_exc_nrns[i]], m.before_learning_nrn, DAModStdpDynamicCondExpSynapse( Winit= beforeLearnSynW[i], tau = p.synTau, delay = p.delaySyn, Erev = p.ErevExc, U = p.U, D = p.D, F = p.F, Wex = p.Wmax, activeDASTDP = False, STDPgap = p.stdpGap, Apos = p.stdpApos, Aneg = p.stdpAneg, taupos = p.stdpTaupos, tauneg = p.stdpTauneg, DATraceDelay = p.DATraceDelay, DAStdpRate = p.DAStdpRate, useFroemkeDanSTDP = False, daTraceResponse = DATraceResponse))) m.after_learning_plastic_syn = [] for i in xrange(p.NumSyn): m.after_learning_plastic_syn.append(net.connect(dm.exc_nrn_popul[read_exc_nrns[i]], m.after_learning_nrn, DAModStdpDynamicCondExpSynapse( Winit= afterLearnSynW[i], tau = p.synTau, delay = p.delaySyn, Erev = p.ErevExc, U = p.U, D = p.D, F = p.F, Wex = p.Wmax, activeDASTDP = False, STDPgap = p.stdpGap, Apos = p.stdpApos, Aneg = p.stdpAneg, taupos = p.stdpTaupos, tauneg = p.stdpTauneg, DATraceDelay = p.DATraceDelay, DAStdpRate = p.DAStdpRate, useFroemkeDanSTDP = False, daTraceResponse = DATraceResponse))) m.target_syn = [] for i in xrange(p.NumSyn): m.target_syn.append(net.connect(dm.exc_nrn_popul[read_exc_nrns[i]], m.target_nrn, DynamicCondExpSynapse(W = targetSynW[i], delay = p.delaySyn, tau = p.synTau, Erev = p.ErevExc, U = p.U, D = p.D, F = p.F))) m.realiz_target_syn = [] for i in xrange(p.NumSyn): m.realiz_target_syn.append(net.connect(dm.exc_nrn_popul[read_exc_nrns[i]], m.realiz_target_nrn, DynamicCondExpSynapse(W = targetSynW[i], delay = p.delaySyn, tau = p.synTau, Erev = p.ErevExc, U = p.U, D = p.D, F = p.F))) m.addit_target_syn = [] for i in xrange(p.numAdditionalTargetSynapses): m.addit_target_syn.append(net.connect(dm.exc_nrn_popul[addit_read_exc_nrns[i]], m.target_nrn, DynamicCondExpSynapse(W = additionalTargetSynW[i], delay = p.delaySyn, tau = p.synTau, Erev = p.ErevExc, U = p.U, D = p.D, F = p.F))) m.inhib_before_learn_syn = [] for i in xrange(p.numInhibSynapses): m.inhib_before_learn_syn.append(net.connect(dm.inh_nrn_popul[read_inh_nrns[i]], m.before_learning_nrn, DynamicCondExpSynapse(W = inhibSynW[i], delay = p.delaySyn, tau = p.synTauInh, Erev = p.ErevInh, U = p.Uinh, D = p.Dinh, F = p.Finh))) m.inhib_after_learn_syn = [] for i in xrange(p.numInhibSynapses): m.inhib_after_learn_syn.append(net.connect(dm.inh_nrn_popul[read_inh_nrns[i]], m.after_learning_nrn, DynamicCondExpSynapse(W = inhibSynW[i], delay = p.delaySyn, tau = p.synTauInh, Erev = p.ErevInh, U = p.Uinh, D = p.Dinh, F = p.Finh))) m.inhib_target_syn = [] for i in xrange(p.numInhibSynapses): m.inhib_target_syn.append(net.connect(dm.inh_nrn_popul[read_inh_nrns[i]], m.target_nrn, DynamicCondExpSynapse(W = inhibSynW[i], delay = p.delaySyn, tau = p.synTauInh, Erev = p.ErevInh, U = p.Uinh, D = p.Dinh, F = p.Finh))) m.inhib_realiz_target_syn = [] for i in xrange(p.numInhibSynapses): m.inhib_realiz_target_syn.append(net.connect(dm.inh_nrn_popul[read_inh_nrns[i]], m.realiz_target_nrn, DynamicCondExpSynapse(W = inhibSynW[i], delay = p.delaySyn, tau = p.synTauInh, Erev = p.ErevInh, U = p.Uinh, D = p.Dinh, F = p.Finh))) def setupRecordings(self): m = self.elements p = self.params ep = self.expParams r = Recordings(self.net) # Recorders for the two neurons r.target_nrn_spikes = self.net.record(m.target_nrn, SpikeTimeRecorder()) r.realiz_target_nrn_spikes = self.net.record(m.realiz_target_nrn, SpikeTimeRecorder()) r.before_learning_nrn_spikes = self.net.record(m.before_learning_nrn, SpikeTimeRecorder()) r.after_learning_nrn_spikes = self.net.record(m.after_learning_nrn, SpikeTimeRecorder()) return r def scriptList(self): return ["BeforeAfterBiofeedModel.py"]