/********************************************************** Define methods to let user initialize the synapses and netstims. The file is desinged to allow also the intialization of a basket cell (bc). ************************************************************/ /*--------------------------------------------------------- WriteSynLoc writes into files that specify synapse locations: --------------------------------------------------------*/ proc WriteSynLoc(){local i,loc,size,type,location localobj ve,LocArray,rnd,fp type = $1 location = $2 ve = WRSynFile(type,location,fp) LocArray = new Vector(ve.x(0)) rnd = new Random() for i=0,ve.x(0)-1{ LocArray.x(i) = int ( rnd.uniform ( 0 , ve.x (1) ) ) } fp.wopen() LocArray.printf(fp) fp.close() } /************************************** WRSynFile generates a file by the name of the cell type (ssc), the location on the dendritic tree (soma, prox, dist) and the type of synapse (Cl1=LGN; CL2=L4; CL3=L6; CL4=inhibition). it also returns a vector (ve) with the number of synapses (ve.x(0)) of the input source specified in $1 & $2. ve.x(1) is the number of distal/proximal sections. the file opened here can be used to wrtie synapse locations (in WriteSynLoc) or to read them (in ReadSynapses) ********************************************/ strdef s,r obfunc WRSynFile(){local nos,nsyns,type,location localobj ve,seclist type = $1 location = $2 ve = new Vector(2) seclist = SecLists.o(location) //string s with type of neuron: if ( NumOfSomaSyn[1] == 0 ) { sprint(s,"ssc") } else { sprint(s,"bc") } if (location==0) { //soma ve.x(0) = NumOfSomaSyn[type] ve.x(1) = 1 sprint(r,"%s\SomaCl%g",s,$1) } else if ( location == 1 ) { //proximal ve.x(0) = NumOfProxSyn[type] ve.x(1) = seclist.count() sprint(r,"%s\ProxCl%g",s,$1) } else if ( location == 2 ) { //distal ve.x(0) = NumOfDistSyn[type] ve.x(1) = seclist.count() sprint(r,"%s\DistCl%g",s,$1) } else {print "unknown location"} //print "#ofsyn (ve.x(0))=",$o3.x(0),", #ofsections (ve.x(1))=",$o3.x(1) $o3 = new File(r) s = "" r = "" return ve } /**************************************** read the synapse locations file (from WRSynFile), and initialize VectorSynapses. ve.x(0) is the number of synapses in the array. ve.x(1) is the location of the synapses (code of sections) ****************************************/ proc ReadSynapses(){local loc,scpa,i localobj ve,ns,nslist,nclist,seclist,codevec,vsyn,nc,fp,tmp type=$1 location=$2 //get number of synapses in ve.x(0) and open file with synapse locations: ve=WRSynFile(type,location,fp) fp.ropen() //# of synaptic contacts: scpa=SynContsPerAxons[type] //list of netstims: nslist=NSLists.o(location).o(type) //list of netcons: nclist=NCLists.o(location).o(type) //list of sections: seclist=SecLists.o(location) //vector of section codes to Vsyn: codevec=SectionCodeToVsynList.o(location) for i = 0, ve.x(0)-1 { //get the location specified in the file and go to section: loc = fp.scanvar() seclist.o(loc).sec{ //print i,"\t",secname(),"\t",distance(0.5) //get the Vsysn there, and add a synapse of type type: vsyn = VSynList.o( codevec.x(loc) ) vsyn.add(type) //get corresponding netstim (make one if needed): if ( (i%scpa) ==0 ){ ns = new NetStim(0.5) SetNetStim(ns,1e9,1e9,1) ns.number = 20000 nslist.append(ns) } //connect new synapses to nnetstim: nc = new NetCon(ns,vsyn,0,0,vsyn.syncount-1) nclist.append(nc) //print "ns and nc: ",ns,"\t",nc,"\t",vsyn.syncount-1,"\n" } } fp.close() //print "read synapses type", type, ", location",location } //Set the parameters of the netstim ($o1) proc SetNetStim(){ $o1.start = $2 $o1.interval = $3 $o1.noise = $4 } /*--------------------------------------------------------------- set netstim parameters for $1 synapses at location $2 --------------------------------------------------------------*/ proc SetInputSourceLocationFrequency(){local i,start,interval,noise localobj nslist type = $1 location = $2 start = $3 interval = $4 noise = $5 nslist = NSLists.o(location).o(type) for i = 0, nslist.count()-1{ SetNetStim(nslist.o(i),start,interval,noise) } } /*--------------------------------------------------------------- set input parameters for input source $1 at all locations --------------------------------------------------------------*/ proc SetInputSourceFrequency(){local i, start, interval, noise start = $2 interval = $3 noise = $4 for i = 0, 2{ SetInputSourceLocationFrequency($1,i,start,interval,noise) } }