Distinct integration properties of noisy inputs in active dendritic subunits (Poleg-Polsky 2019)

 Download zip file 
Help downloading and running models
Accession:259732
The brain operates surprisingly well despite the noisy nature of individual neurons. The central mechanism for noise mitigation in the nervous system is thought to involve averaging over multiple noise-corrupted inputs. Subsequently, there has been considerable interest recently to identify noise structures that can be integrated linearly in a way that preserves reliable signal encoding. By analyzing realistic synaptic integration in biophysically accurate neuronal models, I report a complementary de-noising approach that is mediated by focal dendritic spikes. Dendritic spikes might seem to be unlikely candidates for noise reduction due to their miniscule integration compartments and poor averaging abilities. Nonetheless, the extra thresholding step introduced by dendritic spike generation increases neuronal tolerance for a broad category of noise structures, some of which cannot be resolved well with averaging. This property of active dendrites compensates for compartment size constraints and expands the repertoire of conditions that can be processed by neuronal populations.
Reference:
1 . Poleg-Polsky A (2019) Dendritic spikes expand the range of well-tolerated population noise structures. J Neurosci [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Synapse; Dendrite; Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Neocortex;
Cell Type(s): Neocortex L2/3 pyramidal GLU cell; Neocortex primary motor area pyramidal layer 5 corticospinal cell;
Channel(s): I Na,t; I Potassium;
Gap Junctions:
Receptor(s): AMPA; GabaA; NMDA;
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: NEURON;
Model Concept(s): Synaptic Integration; Active Dendrites; Information transfer;
Implementer(s): Polsky, Alon [alonpol at tx.technion.ac.il];
Search NeuronDB for information about:  Neocortex L2/3 pyramidal GLU cell; GabaA; AMPA; NMDA; I Na,t; I Potassium; Gaba; Glutamate;
	objref fTuning,fSyn, fTuningDend,fDend,dendsave,fInput,inputsave,ftraces,somaMat,dendMat,inputMat,spikeMat
	objref outputMat,somasave,casave, vecmean,vecSD,f2

	strdef basename
	
	func checkNMDAspike(){//measures how many NMDA spikes were present
		spike=0
		duration=30
		amp=-30
		for dend=0,Input_numberDend-1{//all active dends
			if(dendV[dend].max>amp){//examine only where there is chance for a spike
				first=-1
				for tt=0,dendV[dend].size()-2{
					if ((dendV[dend].x[tt]<=amp)&&(dendV[dend].x[tt+1]>amp)){first=tt}//positive cross
					if ((dendV[dend].x[tt]>amp)&&(dendV[dend].x[tt+1]<=amp)){//negative cross
						if(tt-first>duration/dt){ spike+=1 first=tt }
					}	
				}
				if((tt-first>duration/dt)&&(first>=0)&&(dendV[dend].x[dendV[dend].size()-2]>amp)){spike+=1 }
			}
		}
		//print spike
		return spike
	}
	
	func CalcPreSynInput(){//measures the total input
		InputCount=0
		for i=0,SynList.count()-1{
			InputCount+=StimTimeVec[i].sum()//-TimeVec[i].sum(0,100)
		}
		return InputCount
	}
	proc saveRun(){//saves the current run
		objref f1
		f1=new File()
		f1.wopen("ampSomaV.dat")	

		run()	
		for i=0,somav.size()-1{
			f1.printf("%g\n",somav.x[i])	
		}			
		f1.close()	
		checkNMDAspike()		
	}
	proc TestRun(){	//runs $1 times and saves the number of APs
		avg_firing=0
		spikes=0
		if($1>0){
			for rep=1,$1{
				PlaceSyn()			 
				Update()
				run()
				avg_firing+=somaAP.size()/$1
				spikes+=(somaAP.size()>0)
			}
		}
		print avg_firing,spikes
	}
	//------runs over different sim parameters
 	proc RunsimOutput(){
			//$1-angles, $2-num trials, $3 type (1: num inputs,2:DSI,3:num bias inputs,4:noise levels)
		objref f1,fSpike,f2,fInput
		f1=new File()
		f2=new File()
		fSpike=new File()			
		fInput=new File()			
		sprint(filename,"out_%s_%d_%d.dat",GF,Input_NOISE_type,$3)
		f1.wopen(filename)	
		sprint(filename,"out_Dend_%s_%d_%d.dat",GF,Input_NOISE_type,$3)
		f2.wopen(filename)
		sprint(filename,"out_SPIKE_%s_%d_%d.dat",GF,Input_NOISE_type,$3)	
		fSpike.wopen(filename)	
		sprint(filename,"out_Input_%s_%d_%d.dat",GF,Input_NOISE_type,$3)	
		fInput.wopen(filename)		
		NumAngles=$1
		RandObj.ACG(randomseed)
		//for numInput=0,20{
		saveAM=	Input_AM	
		saveDM=	Input_DM	
		saveCE=	Input_CE	
		saveORTH=	OrthogonalNoise_Level	
		saveSIGNAL=	Input_AngleStableSD			
			
		for trial=0,$2{
			print "trial ",trial
			//Input_numberGlobalSynapses=(20+numInput*20)*(Sim_Global==1)*(CellNum*2-1)//20+420//20
				//Input_numberGlobalSynapses=(100+numInput*50)*(Sim_Global==1)*CellNum//20+420//20
			//Input_numberFocalSynapses=(numInput*1)*(Sim_Global==0)*(1+(layer5dend1)*3)//*(1+insertHHdend*2)*(Sim_Global==0)//+22
				//Input_numberFocalSynapses=(5+numInput*1)*(Sim_Global==0)//*(1+insertHHdend*2)*(Sim_Global==0)//+22
			//PlaceSyn()	
			if($3==1){//-------------num inputs
				Input_numberFocalSynapses=(5+trial*1)*(Sim_Global==0)-(CellNum==2)*2
				if(Voff_glutamate){
					Input_numberFocalSynapses=(20+trial*20)*(Sim_Global==0)
				}
				if((layer5dend1)&&(CellNum==2)){
					Input_numberFocalSynapses=5+trial*5
				}
				Input_numberGlobalSynapses=(20+trial*20)*(Sim_Global==1)//*(CellNum*2-1)//20+420//20
			}
		
			if($3==2){//--------------dsi change
				Input_DSI=trial/($2)
			}
			if($3==3){//--------------bias
				tstop=500
				Input_Center=300
				Input_biasnumberSynapses=trial*20
				Input_biasGABAnumberSynapses=int(Input_biasnumberSynapses/5)
			}
			if($3==4){//--------------noise levels
				Input_AM=trial*saveAM/($2/2)
				Input_DM=trial*saveDM/($2/2)
				Input_CE=trial*saveCE/($2/2)
				OrthogonalNoise_Level=trial*saveORTH/($2/2)
				Input_AngleStableSD=trial*saveSIGNAL/($2/2)	
				
			}	
			noise_level=Input_AM+	Input_DM+	Input_CE+	OrthogonalNoise_Level+Input_AngleStableSD
			//Input_AM=numInput/10
			//Input_DM=numInput/20*90
			//Update_DStuningTable(0)
			//print Input_DSI
			PlaceSyn() 
			Update() 
			//Update_DStuningTable(randomseed)
		//--------------dsi change
			for countRS=0,InputRepeats-1{
				Update_DStuningTable(countRS)
				for repPer_Input=1,Sim_repeatsPer_Input{//repeat over input configurations
					//f1.printf("%g	%d	%d	",Input_AM,countRS,Input_numberFocalSynapses+Input_numberGlobalSynapses)
					f1.printf("%d	%d	%d	%g	%d	%g	",trial,countRS,Input_numberFocalSynapses+Input_numberGlobalSynapses,Input_DSI,Input_biasnumberSynapses+Input_biasGABAnumberSynapses,noise_level)
					f2.printf("%d	%d	%d	%g	%d	%g	",trial,countRS,Input_numberFocalSynapses+Input_numberGlobalSynapses,Input_DSI,Input_biasnumberSynapses+Input_biasGABAnumberSynapses,noise_level)
					fSpike.printf("%d	%d	%d	%g	%d	%g	",trial,countRS,Input_numberFocalSynapses+Input_numberGlobalSynapses,Input_DSI,Input_biasnumberSynapses+Input_biasGABAnumberSynapses,noise_level)
					fInput.printf("%d	%d	%d	%g	%d	%g	",trial,countRS,Input_numberFocalSynapses+Input_numberGlobalSynapses,Input_DSI,Input_biasnumberSynapses+Input_biasGABAnumberSynapses,noise_level)
					//PlaceSyn()
					for ang=0,NumAngles-1{
						Input_Angle=int(ang*360/NumAngles)
						Update()
						run()	
						maxtime=(Input_Center+150)/dt
						if(maxtime>dendV[0].size()-1){maxtime=dendV[0].size()-1}						
						if(insertHH){
							count=0
							for i=0,somaAP.size()-1{
								count+=((somaAP.x[i]>=Input_Center))//&&(somaAP.x[i]<(Input_Center+150)))
							}
							f1.printf("%d	", count)//somaAP.size())
						}else{
							f1.printf("%g	", somav.max(Input_Center/dt,maxtime)-somav.min(Input_Center/dt/2,Input_Center/dt))
						}
						fSpike.printf("%d	",checkNMDAspike())
						fInput.printf("%d	",CalcPreSynInput())
						f2.printf("%g	", dendV[0].mean(Input_Center/dt,maxtime))	
					}						
					f1.printf("\n")
					f2.printf("\n")
					fSpike.printf("\n")
					fInput.printf("\n")
				}
			}					
		}
		f1.close()
		f2.close()
		fSpike.close()	
		fInput.close()	
		quit()		
	}
	
	proc ReportBias(){
		for trial=0,$1{
			//print "trial ",trial

			tstop=300
			Input_Center=300
			Input_biasnumberSynapses=trial*20
			Input_biasGABAnumberSynapses=int(Input_biasnumberSynapses/5)
			//  
			PlaceSyn()  
			Update()
			run()	
			print somav.mean()-somav.min()			
		}
	}
	
	//---makes an example - tuning curve, 10 PD,10 ND responses
	proc RunsimExample10(){
		objref f1,fSpike,fTuningDend,fDend,dendsave,fInput,inputsave
		fTuning=new File()
		f1=new File()
		fSpike=new File()
		fSyn=new File()
		fTuningDend=new File()
		fDend=new File()
		fInput=new File()
		
		//randomseed=0
		//tuning
		sprint(basename,"%s_%g.dat",GF,Input_NOISE_type)
		sprint(filename,"Tuning_%s",basename)
		fTuning.wopen(filename)	
		sprint(filename,"Spike_%s",basename)	
		fSpike.wopen(filename)
		sprint(filename,"Synapses_%s",basename)	
		fSyn.wopen(filename)
		//examples
		sprint(filename,"Example_%s",basename)
		f1.wopen(filename)	
		sprint(filename,"Tuning_Dend_%s",basename)
		fTuningDend.wopen(filename)	
		sprint(filename,"Example_Dend_%s",basename)
		fDend.wopen(filename)
		sprint(filename,"Input_%s",basename)
		fInput.wopen(filename)
		
		somasave=new Matrix(tstop/dt+1,20)
		dendsave=new Matrix(tstop/dt+1,20*Input_numberDend)
		dendsave.muls(0)
		inputsave=new Matrix(SynList.count()+BiasList.count(),23)
		countPD=0
		NumAngles=2
		
//print "hr"

		
		//Update_DStuningTable(05)//4
		for ang=0,NumAngles-1{
			mean_spike_out=0
			for rep=1,10{
				Input_Angle=int(ang*360/NumAngles)//+RandObj.normal(0,Input_AngleStableSD^2))
				//while(Input_Angle<0){Input_Angle+=360}
				//while(Input_Angle>=360){Input_Angle-=360}
				
				countRS=rep/2+countPD/100+(CellNum-1)//024+rep*2//rep*5+5+Sim_Global*10
				PlaceSyn()	
				 
				Update()
				run()
					
				if(insertHH){
					counter=0
					for i=0,somaAP.size()-1{
						counter+=((somaAP.x[i]>Input_Center)&&(somaAP.x[i]<(Input_Center+150)))
					}
					fTuning.printf("%d	", counter)//somaAP.size())
					mean_spike_out+=counter
//print Input_Angle,somaAP.size(),mean_spike_out
				}else{
					fTuning.printf("%g	", somav.max()-somav.min())
				}
				maxtime=(Input_Center+150)/dt
				if(maxtime>dendV[0].size()-1){maxtime=dendV[0].size()-1}

				for dend=0,Input_numberDend-1{
					fTuningDend.printf("%g	", dendV[dend].mean(Input_Center/dt,maxtime)-dendV[dend].min())
				}
				fSpike.printf("%d	",checkNMDAspike())	
				
				if(((ang==0)||(ang==NumAngles/2))){//PD ND
					for in=0,SynList.count()-1{//---inputs
						inputsave.x[in][rep+(ang>0)*10+2]=StimTimeVec[in].sum()
						inputsave.x[in][0]=SynList.o(in).locx
						inputsave.x[in][01]=SynList.o(in).locy
						inputsave.x[in][02]=0//signal
					}
					for in=0,BiasList.count()-1{//---inputs
						inputsave.x[in+SynList.count()][rep+(ang>0)*10+2]=BiasTimeVec[in].sum()
						inputsave.x[in+SynList.count()][0]=BiasList.o(in).locx
						inputsave.x[in+SynList.count()][01]=BiasList.o(in).locy
						inputsave.x[in+SynList.count()][02]=1+(in<Input_biasnumberSynapses)//bias
					}
					
					for i=0,somav.size()-1{//----voltages
						somasave.x[i][countPD]=somav.x[i]
						
						for dend=0,Input_numberDend-1{
							dendsave.x[i][countPD+dend*20]=dendV[dend].x[i] 
						}						
					}
					countPD+=1
					//if(rep==1){
					for i=0,SynList.count()-1{
						for tt=0,TimeVec[i].size()-1{
							fSyn.printf("%d	%d	%d	%d	%g	%g\n",rep,ang,0,i,tt, TimeVec[i].x[tt])
							
						}
					}	
					for i=0,BiasList.count()-1{
						for tt=0,BiasTimeVec[i].size()-1{
							fSyn.printf("%d	%d	%d	%d	%g	%g\n",rep,ang,1,i,tt, BiasTimeVec[i].x[tt])	
						}
					}
					//}
				}
			}
print "angle, mean firing: ",Input_Angle,mean_spike_out/10
			fTuning.printf("\n")
			fTuningDend.printf("\n")
			fSpike.printf("\n")
		}
		somasave.fprint(0,f1,"%-8g\t")
		dendsave.fprint(0,fDend,"%-8g\t")
		inputsave.fprint(0,fInput,"%-8g\t")
		f1.close()
		fSpike.close()	
		fTuning.close()	
		fTuningDend.close()	
		fDend.close()	
		fSyn.close()
		fInput.close()
		//quit()		
	}
			
	//---saves layered information
proc savewithheader(){//1 matrix,2 inputs,3 data
	$o1.x[0][0]=-1
	$o1.x[0][01]=-1
	$o1.x[01][0]=-1
	$o1.x[01][01]=-1
	$o1.x[countRS*Sim_repeatsPer_Input+repPer_Input+2][0]=countRS
	$o1.x[countRS*Sim_repeatsPer_Input+repPer_Input+2][1]=repPer_Input
	$o1.x[0][ang+2+$2*NumAngles]=Input_Angle
	$o1.x[1][ang+2+$2*NumAngles]=Input_numberFocalSynapses+Input_numberGlobalSynapses
	$o1.x[2][ang+2+$2*NumAngles]=LayerNum
	$o1.x[countRS*Sim_repeatsPer_Input+repPer_Input+2][ang+2+$2*NumAngles]=$3
	//print ($4-1)*NumAngles+$5+2+$6*NumAngles*maxLayers
	//somaMat.x[countRS*Sim_repeatsPer_Input+repPer_Input-1][(LayerNum-1)*NumAngles+ang+2]= $5
}

proc RunsimLayers(){//for ($1;<$2;+$3)-number inputs L1;($4;<$5;+$6)-number inputs L2; $7/$8 L1/L2 is linear (global distribution)
		objref f1,fInput,f2
		f1=new File()	
		f2=new File()	
		fInput=new File()
		
		//---first generation
		for (layer1=$1;layer1<=$2;layer1+=$3){
			for (Input_Angle=0;Input_Angle<=180;Input_Angle+=180){
				Sim_Read_File=0
				sprint(filename,"Layers/l1_out_%d_%d_%g_%d.dat",$7,layer1,Input_Angle ,Input_NOISE_type)
				sprint(filename_1,"Layers/l1_to_l2_%d_%d_%g_%d.dat",$7,layer1,Input_Angle ,Input_NOISE_type)
				fInput.ropen(filename)
				print "LAYER 1 ", filename
				if(fInput.isopen()==0){	//layer 1 run is not complete
					fInput.wopen(filename)
					Input_numberFocalSynapses=($7==0)*layer1
					Input_numberGlobalSynapses=($7)*layer1
					tstop=500
					PlaceSyn()
					somasave=new Matrix(Sim_repeatsPer_Input*InputRepeats,tstop)
					somasave.muls(0)					
					f1.wopen(filename_1)				
					for trials=1,Sim_repeatsPer_Input*InputRepeats{
						Update()
						run()
						fInput.printf("%d\n", somaAP.size())
						for i=0,somaAP.size()-1{
							somasave.x[trials-1][int(somaAP.x[i])]=1	//spike timing for each run
						}	
					}
					somasave.fprint(f1)
					f1.close()
				}
				fInput.close()
				//---second generation
				for (layer2=$4;layer2<=$5;layer2+=$6){
					Sim_Read_File=1
					outinMat=new Matrix()
					fInput.ropen(filename_1)
					outinMat.scanf(fInput)
					fInput.close()
					Input_numberFocalSynapses=($8==0)*layer2
					Input_numberGlobalSynapses=($8)*layer2
					PlaceSyn()
					sprint(filename,"Layers/l2_out_%d_%d_%d_%g_%d.dat",layer1,$8,layer2,Input_Angle ,Input_NOISE_type)
					f2.wopen(filename)
					print "LAYER 2 READ ", filename_1, " WRITE ",filename
					for trials=1,Sim_repeatsPer_Input*InputRepeats{
						Update()
						run()
						f2.printf("%d\n", somaAP.size())
					}
					f2.close()
	
				}//---layer 2
				
			}
		}
		
		
/*/		
		Presynaptic_inputs=Input_numberFocalSynapses+Input_numberGlobalSynapses
		for (Presynaptic_inputs=10*(Sim_Global_L1==0)+150*(Sim_Global_L1==1);Presynaptic_inputs<=14*(Sim_Global_L1==0)+400*(Sim_Global_L1==1);Presynaptic_inputs+=1*(Sim_Global_L1==0)+50*(Sim_Global_L1==1)){
		//for (Presynaptic_inputs=12*(Sim_Global_L1==0)+150*(Sim_Global_L1==1);Presynaptic_inputs<=14*(Sim_Global_L1==0)+400*(Sim_Global_L1==1);Presynaptic_inputs+=1*(Sim_Global_L1==0)+50*(Sim_Global_L1==1)){
			
			fInput.wopen(filename)				
			maxLayers=2
			NumpostInputs=8
			LayerNum=1
			somaMat=new Matrix(Sim_repeatsPer_Input*InputRepeats+3,NumAngles*(NumpostInputs+1)+2)
			dendMat=new Matrix(Sim_repeatsPer_Input*InputRepeats+3,NumAngles*(NumpostInputs+1)+2)
			inputMat=new Matrix(Sim_repeatsPer_Input*InputRepeats+3,NumAngles*(NumpostInputs+1)+2)
			spikeMat=new Matrix(Sim_repeatsPer_Input*InputRepeats+3,NumAngles*(NumpostInputs+1)+2)
			somaMat.muls(0)
			dendMat.muls(0)
			inputMat.muls(0)
			spikeMat.muls(0)
			Input_numberFocalSynapses=(Presynaptic_inputs)*(Sim_Global_L1==0)
			Input_numberGlobalSynapses=(Presynaptic_inputs)*(Sim_Global_L1==1)

			somasave=new Matrix(Sim_repeatsPer_Input*InputRepeats,tstop)
			
			Sim_Read_File=0
			PlaceSyn()	
			if($2==1){//do first layer
				for ang=0,NumAngles-1{
					Input_Angle=int(ang*360/NumAngles)	
					sprint(filename,"Layers/in%s_%g_%g_%g_%g.dat",Read_File_st,Presynaptic_inputs,Input_Angle ,Input_NOISE_type,LayerNum)
					ftraces.wopen(filename)	
					somasave.muls(0)				
					for countRS=0,InputRepeats-1{
						for repPer_Input=1,Sim_repeatsPer_Input{//repeat over input configurations				
					
							Update()
							run()
							count=0
							for i=0,somaAP.size()-1{
								count+=((somaAP.x[i]>Input_Center)&&(somaAP.x[i]<(Input_Center+150)))
								somasave.x[countRS*Sim_repeatsPer_Input+repPer_Input-1][int(somaAP.x[i])]=1
							}		
							maxtime=(Input_Center+150)/dt
							if(maxtime>dendV[0].size()-1){maxtime=dendV[0].size()-1}						
							savewithheader(somaMat,0,count)	
							savewithheader(dendMat,0, dendV[0].mean(Input_Center/dt,maxtime))	
							savewithheader(inputMat,0,CalcPreSynInput())	
							savewithheader(spikeMat,0,checkNMDAspike())	
						}
					}
					somasave.fprint(ftraces)
					ftraces.close()					
				}
			}
			
			startInput=6*(Sim_Global==0)+100*(Sim_Global==1)
			addInput=1*(Sim_Global==0)+50*(Sim_Global==1)
			LayerNum=2
			for	inputs=0,NumpostInputs-1{
				Input_numberFocalSynapses=(startInput+addInput*inputs)*(Sim_Global==0)
				Input_numberGlobalSynapses=(startInput+addInput*inputs)*(Sim_Global==1)
				Sim_Read_File=1
				PlaceSyn()		
				for ang=0,NumAngles-1{
					Input_Angle=int(ang*360/NumAngles)
					// 
						
					for countRS=0,InputRepeats-1{
						for repPer_Input=1,Sim_repeatsPer_Input{//repeat over input configurations
							Update()
							run()
							count=0
							for i=0,somaAP.size()-1{
								count+=((somaAP.x[i]>Input_Center)&&(somaAP.x[i]<(Input_Center+150)))
							}
							maxtime=(Input_Center+150)/dt
							if(maxtime>dendV[0].size()-1){maxtime=dendV[0].size()-1}						
							
							savewithheader(somaMat,inputs+1,count)	
							savewithheader(dendMat,inputs+1, dendV[0].mean(Input_Center/dt,maxtime))	
							savewithheader(inputMat,inputs+1,CalcPreSynInput())	
							savewithheader(spikeMat,inputs+1,checkNMDAspike())										
						}					
					}	

				}
			}
			somaMat.fprint(0,f1,"%-8g\t")
			f1.close()
			dendMat.fprint(0,f2,"%-8g\t")
			inputMat.fprint(0,fInput,"%-8g\t")
			spikeMat.fprint(0,fSpike,"%-8g\t")
			f2.close()
			fSpike.close()
			fInput.close()
			
		}
		/*/
		//quit()
	}		

	//*/
	proc print_tuning_input(){//prints the tuning of the input to different directions 
		objref f1
		f1=new File()
		f1.wopen("input.dat")
		//Input_DM=00
		//Input_AngleSD=0
		//Input_AM=3
		for rep=1,100{
			for ang=0,7{
				Input_Angle=ang*45
				Update()			
				for i=0,SynList.count()-1{
					f1.printf("%g	",StimTimeVec[i].sum())
				}
				f1.printf("\n") 
			}
		}
		f1.close()
		quit()		
	}
	
	proc morph(){//saves the morphology of the cell, synaptic inputs and timing
		objref f1
		f1=new File()
		f1.wopen("morph.dat")
		forall {
			for i=0,n3d()-1{
				f1.printf("%g	%g\n", x3d(i),y3d(i))
			} 
			f1.printf(" 	 \n")  
		}
		f1.close()
		f1.wopen("syn.dat")
		for i=0,SynList.count()-1{
			f1.printf("%g	%g\n", SynList.o(i).locx,SynList.o(i).locy)
		}
		for i=0,BiasList.count()-1{
			f1.printf("%g	%g\n", BiasList.o(i).locx,BiasList.o(i).locy)
		}		
		f1.close()
		f1.wopen("inputs.dat")
		for i=0,NetEventList.count()-1{
			//f1.printf("%g	", NetEventList.o(i).size())
			for tt=0,NetEventList.o(i).size()-1{
				f1.printf("%g	", NetEventList.o(i).x[tt])
			}
			f1.printf("\n")
		}
		f1.close()		
	}
	
	proc Corr(){//saves the correlations in synaptic inputs 
		objref f1
		f1=new File()
		f1.wopen("corr.dat")
		Input_Angle=180//90
		//Input_AngleInitSD=0
		PlaceSyn()	
		tstop=1		 
		run()
		NumAngles=8	
		NoiseLevels=10//10
		NumInputs=SynList.count()
		Repeats=250
		outputMat=new Matrix(NumInputs*(NoiseLevels+1)*Repeats,NumAngles+4)
		//print outputMat.ncol(),outputMat.nrow()
		count=0
		for noise=0,NoiseLevels{
			Input_AM=((2^(1/3)*(noise/NoiseLevels))^3)//*.001//----G
			Input_DM=0//90*(noise/NoiseLevels)//*.5
			for rep=0,Repeats-1{
				for ang=0,NumAngles-1{
					Input_Angle=int(ang*360/NumAngles)
					Update()
					run()
					//print ang+1,count
					for i=0,NumInputs-1{
						outputMat.x[count+i][ang+4]=noiseVec.x[i]//StimTimeVec[i].sum()
						outputMat.x[count+i][0]=noise
						outputMat.x[count+i][1]=i
						outputMat.x[count+i][2]=rep
						outputMat.x[count+i][3]=Input_DM+Input_AM
					}
				}
				count+=NumInputs
				
			}
			print count,noise
		}
		outputMat.fprint(0,f1,"%-8g\t")
		f1.close()	
		quit()
	}

	proc NoiseFunc(){//saves the correlations in synaptic inputs 
		objref f1
		f1=new File()
		f1.wopen("noise.dat")
		Input_numberGlobalSynapses=121
		Input_Background=0
		PlaceSyn()
		//run()
		NumAngles=1		
		tstop=2
		for ang=1,20{
			Input_Angle=0180//ang*180
		
			Update()
			//f1.printf("%g\n", StimTimeVec[1].sum())
			//f1.printf("%g\n", noiseVec.x[0])
			//run()
			//for i=01,120{
			for i=1,120{			
				f1.printf("%g	", StimTimeVec[i].sum())
				//f1.printf("%g	", NetEventList.o(i).size())
			}
			f1.printf("\n")

		}
			for i=1,120{
				f1.printf("%g	", DStuningPD.x[i])
			}
		//	f1.printf("\n")		
		f1.close()	
		quit()
	}	

Loading data, please wait...