//genesis
//net_conn.g - Description of the FS and SP connections to the SP network

//This file sets up the SP-SP connections based on the factor sent to the netconn function

////////////////////////////////Connecting Inhibitory SP network/////////////////////////////////////////////////
//1- soma, 2- primary dendrite, 3-secondary dendrite, 4- tertiary dendrite
function rannum_new (tablename)
	str tablename
  	int i
  	int last={getfield {tablename} X_A->xmax}  //get the index of last element from the value of xmax
  	//echo "last=" {last}
  	int index={ round {rand -0.499 {last+0.499}} }  //choose a random index
  	int filenum={getfield {tablename} X_A->table[{index}]}  //return filenum associated with index selected above
  	setfield {tablename} X_A->table[{filenum}] {getfield {tablename} X_A->table[{last}]} //replace selected filenum with last element
  	setfield {tablename} X_A->xmax {last-1} //set xmax to be {last-1}
  	return {filenum}
end

function rannum_net (tablename,net,min_SP,max_FS,int_perc)
  	str tablename,net
  	int i,min_SP,max_FS
  	float int_perc
  	int last={getfield {tablename} X_A->xmax}  //get the index of last element from the value of xmax
  	//echo "last=" {last}
  	if ({net}=="FS")
  		int index={ round {rand -0.499 {max_FS+0.499}} }  //choose a random index
  	elif ({net}=="SP")
  		int index={ round {rand {min_SP-0.499} {last+0.499}} }  //choose a random index
  	elif ({int_perc}!=1)
  		int index={ round {rand -0.499 {last+0.499}} }  //choose a random index
  	end
  	int filenum={getfield {tablename} X_A->table[{index}]}  //return filenum associated with index selected above
  	setfield {tablename} X_A->table[{filenum}] {getfield {tablename} X_A->table[{last}]} //replace selected filenum with last element
  	setfield {tablename} X_A->xmax {last-1} //set xmax to be {last-1}
  	return {filenum}
end

function connectGap(compA, compB, resistance)
	str compA
    	str compB
    	float resistance
    	// Gap junctions go both ways...
    	addmsg {compA} {compB} RAXIAL {resistance} Vm
    	addmsg {compB} {compA} RAXIAL {resistance} Vm
end

function gapconn
	int gapCtr
	// Create gap junctions required in file
 	for(gapCtr = 1; gapCtr < {numGaps}+1; gapCtr = {gapCtr} + 1)
    		if({getglobal gapRes_{gapCtr}} > 0)
      			connectGap {getglobal gapSrc_{gapCtr}} {getglobal gapDest_{gapCtr}} {getglobal gapRes_{gapCtr}}
      			echo {getglobal gapSrc_{gapCtr}}"-->"{getglobal gapDest_{gapCtr}}" res: "{getglobal gapRes_{gapCtr}}
    		else
      		echo "WARNING: gapRes: "{getglobal gapRes_{gapCtr}}" ohm, no gap junction created"
    		end
 	end
end

function netconn(net,net2,network,network2,fact,loops,syn_weight1,chem_gap,ind_gap, gap_prob, ind_prob, gap_res)
//Receives the network to connect and the factor to connect it with
//Was first made to connect either FS or SP networks but has been changed to only include FS network
//Purposely did not add tab completion after start of function 
str net,net2,network,network2
float fact, gap_res
int ctrpre, ctrpost, dctr,  densityMax_3_SP = 2, densityMax_4_SP = 2, increment=1, loops, syn_weight1
float xpre, ypre, xpost, ypost, dist2parent, prob, connect, dist_f, alpha, beta, gap_conn, gap_prob, gap_ind_conn, ind_prob
int compt_pre_select, compt_post_select=0, compt_sub_select, cellCtr, branch_select, inter=1
str compt_1 = "soma", compt_2 = "primdend", compt_3 = "secdend", compt_4 = "tertdend"
str compname_pre, compname_post, compname, comn, comn2, comn_t, comn_t2
int n_syn, n_syn_allowed, n_ind, c_ctr=0, a_ctr=0, index1, index2, index2_2, gap_rand
int chem_gap, ind_gap, i

for(ctrpre = 0; ctrpre < {getglobal numCells_{net}}; ctrpre = {ctrpre + 1})  //loops through presynaptic cells
        xpre={getfield {network}[{ctrpre}]/soma/ x}  //get x location
	ypre={getfield {network}[{ctrpre}]/soma/ y}  //get y location

	for(ctrpost = 0; ctrpost < {getglobal numCells_{net2}}; ctrpost= {ctrpost +1})  //loops through postsynaptic cells
		if ({ctrpre}!={ctrpost}) //only if pre & post synaptic cells are different, start connecting                                                                                       
                	xpost={getfield {network2}[{ctrpost}]/soma/ x} //get x location
		 	ypost={getfield {network2}[{ctrpost}]/soma/ y} //get y location
                   	dist2parent={{pow {xpost-xpre} 2 } + {pow {ypost-ypre} 2}}   // calculating distance between the cells     
                   	//echo {dist2parent} >> dist.log          
                   	dist_f= {-dist2parent}/{pow {fact} 2}  
                   	prob = {exp {dist_f}} //probability as a function of distance, so farther it is, lower the probability of connection              
                   	connect = {rand 0 1} 
                   	if ({connect}<{prob}) 
                     		c_ctr=0  //counter to be incremented each time connection between pair is established
		    		while ({c_ctr} < {loops})  //loop till reaches # of synaptic connections allowed between each pair of cells
                         		if ({net}=="FS" && {net2}=="FS") 
                         			compt_post_select = {rand 1 5} //randomly select the post-synaptic compartment
                         		end
                         		if ({compt_post_select}==1)
                               			n_syn = {getfield {network2}[{ctrpost}]/soma/GABA nsynapses} //1 represents soma
                               			if ({n_syn}==0)
                                			n_ind = 0
                               			else
                                			n_ind = {n_syn-1}
                               			end
                               			n_syn_allowed = {getfield {network2}[{ctrpost}]/soma nsynallowed_g}
                               			if (({n_syn}<{n_syn_allowed}) && ({connect}<{prob}))
			       				addmsg {network}[{ctrpre}]/soma/spike \
				    			{network2}[{ctrpost}]/soma/GABA SPIKE
                               				setfield {network2}[{ctrpost}]/soma/GABA synapse[{n_ind}].weight {syn_weight1}
                               				c_ctr = {c_ctr} + 1
                               			end
					elif ({compt_post_select}==2)
                     				branch_select = {rand 1 {{getglobal prim_max_index1_{net2}}*{getglobal prim_max_index2_{net2}}}}  
						//since this morphology has multiple compartments for each primary dendrite
                    				index1 = {branch_select}/{getglobal prim_max_index2_{net2}}  //sets quotient as primdend number
                           			index2_2 = {getglobal prim_max_index2_{net2}}
                           			index2 = {branch_select}%{index2_2}  //sets remainder as prim_dend number
                 	                        if ({index1}==0)
                             				comn_t ="primdend1"
                           			else
                             				comn_t = "primdend"@{index1}
                           			end
                           			if ({index2}==1 || {index2}==0)  //no need to select tert_dend number for these cases
                               				n_syn = {getfield {network2}[{ctrpost}]/{comn_t}/GABA nsynapses}
                               				if ({n_syn}==0)
                                				n_ind = 0
                               				else
                                				n_ind = {n_syn-1}
                               				end
                               				n_syn_allowed = {getfield {network2}[{ctrpost}]/{comn_t} nsynallowed_g}
                               				if (({n_syn}<{n_syn_allowed}) && ({connect}<{prob}))
			       					addmsg {network}[{ctrpre}]/soma/spike \
				    				{network2}[{ctrpost}]/{comn_t}/GABA SPIKE
                              					setfield {network2}[{ctrpost}]/{comn_t}/GABA synapse[{n_ind}].weight {syn_weight1}
                               					c_ctr = {c_ctr} + 1
                                   				gap_conn = {rand 0 1}
                                   				if ({gap_conn}<{gap_prob})
                                   					connectGap {network}[{ctrpre}]/{comn_t} {network2}[{ctrpost}]/{comn_t} {gap_res}
                                   					echo {ctrpre}  {ctrpost}   {comn_t} >> gaps.log 
                                   				end
                               				end
                           			else
                              				comn_t2 = "prim_dend"@{index2}
                              				n_syn = {getfield {network2}[{ctrpost}]/{comn_t}/{comn_t2}/GABA nsynapses}
                              				if ({n_syn}==0)
                                				n_ind = 0
                               				else
                                				n_ind = {n_syn-1}
                               				end
                              				n_syn_allowed = {getfield {network2}[{ctrpost}]/{comn_t}/{comn_t2} nsynallowed_g}  
                              				if (({n_syn}<{n_syn_allowed}) && ({connect}<{prob}))
			       					addmsg {network}[{ctrpre}]/soma/spike \
				    				{network2}[{ctrpost}]/{comn_t}/{comn_t2}/GABA SPIKE
                               					setfield {network2}[{ctrpost}]/{comn_t}/{comn_t2}/GABA synapse[{n_ind}].weight {syn_weight1}
                               					c_ctr = {c_ctr} + 1
                               					gap_conn = {rand 0 1} //connect gap junctions
                                   				if ({gap_conn}<{gap_prob})
                                   					connectGap {network}[{ctrpre}]/{comn_t}/{comn_t2} {network2}[{ctrpost}]/{comn_t}/{comn_t2} {gap_res}
                                   					echo {ctrpre}  {ctrpost}   {comn_t} >> gaps.log
                                   				end
                              				end
                           			end
					elif ({compt_post_select}==3)
                           			branch_select = {rand 1 {{getglobal sec_max_index1_{net2}}*{getglobal sec_max_index2_{net2}}}} 
						//since this morphology has multiple compartments for each secondary dendrite compartments           
                                        	index1 = {branch_select}/{getglobal sec_max_index2_{net2}}  //sets quotient as secdend number
                           			index2_2 = {getglobal sec_max_index2_{net2}}
                           			index2 = {branch_select}%{index2_2}  //sets remainder as sec_dend number
						if ({index1}==0)
                             				comn_t ="secdend1"
                           			else
                             				comn_t = "secdend"@{index1}
                           			end
                           			if ({index2}==1 || {index2}==0)  //no need to select tert_dend number for these cases
                               				n_syn = {getfield {network2}[{ctrpost}]/{comn_t}/GABA nsynapses}
                               				if ({n_syn}==0)
                                				n_ind = 0
                               				else
                                				n_ind = {n_syn-1}
                               				end
                               				n_syn_allowed = {getfield {network2}[{ctrpost}]/{comn_t} nsynallowed_g}
                               				if (({n_syn}<{n_syn_allowed}) && ({connect}<{prob}))
			      					addmsg {network}[{ctrpre}]/soma/spike \
				    				{network2}[{ctrpost}]/{comn_t}/GABA SPIKE
                               					setfield {network2}[{ctrpost}]/{comn_t}/GABA synapse[{n_ind}].weight {syn_weight1}
                               					c_ctr = {c_ctr} + 1
                          					gap_conn = {rand 0 1}  //connect gap junctions
                                   				if ({gap_conn}<{gap_prob})
                                   					connectGap {network}[{ctrpre}]/{comn_t} {network2}[{ctrpost}]/{comn_t} {gap_res}
                                   					echo {ctrpre}  {ctrpost}   {comn_t} >> gaps.log
                                   				end
                               				end
                           			else
                              				comn_t2 = "sec_dend"@{index2}
                              				n_syn = {getfield {network2}[{ctrpost}]/{comn_t}/{comn_t2}/GABA nsynapses}
                                                     	if ({n_syn}==0)
                                				n_ind = 0
                               				else
                                				n_ind = {n_syn-1}
                               				end  
                              				n_syn_allowed = {getfield {network2}[{ctrpost}]/{comn_t}/{comn_t2} nsynallowed_g}  
                              				if (({n_syn}<{n_syn_allowed}) && ({connect}<{prob}))
			       					addmsg {network}[{ctrpre}]/soma/spike \
				    				{network2}[{ctrpost}]/{comn_t}/{comn_t2}/GABA SPIKE
                               					setfield {network2}[{ctrpost}]/{comn_t}/{comn_t2}/GABA synapse[{n_ind}].weight {syn_weight1}
                               					c_ctr = {c_ctr} + 1
                                                               	gap_conn = {rand 0 1}
                                   				if ({gap_conn}<{gap_prob})
                                   					connectGap {network}[{ctrpre}]/{comn_t}/{comn_t2} {network2}[{ctrpost}]/{comn_t}/{comn_t2} {gap_res}
                                   					echo {ctrpre}  {ctrpost}   {comn_t} >> gaps.log
                                   				end
                      					end
						end                
     					elif ({compt_post_select}==4)
    				 		branch_select = {rand 1 {{getglobal tert_max_index1_{net2}}*{getglobal tert_max_index2_{net2}}}}
                                                //since this morphology has multiple compartments for each tertiary dendrite
       						index1 = {branch_select}/{getglobal tert_max_index2_{net2}}  //sets quotient as tertdend number
                           			index2_2 = {getglobal tert_max_index2_{net2}}
                           			index2 = {branch_select}%{index2_2}  //sets remainder as tert_dend number 
                           			if ({index1}==0)
                             				comn_t ="tertdend1"
                           			else
                             				comn_t = "tertdend"@{index1}
                           			end
                           			if ({index2}==1 || {index2}==0)  //no need to select tert_dend number for these cases
                               				n_syn = {getfield {network2}[{ctrpost}]/{comn_t}/GABA nsynapses}
                               				if ({n_syn}==0)
                                				n_ind = 0
                               				else
                                				n_ind = {n_syn-1}
                               				end
                               				n_syn_allowed = {getfield {network2}[{ctrpost}]/{comn_t} nsynallowed_g}
                               				if (({n_syn}<{n_syn_allowed}) && ({connect}<{prob}))
			       					addmsg {network}[{ctrpre}]/soma/spike \
				    				{network2}[{ctrpost}]/{comn_t}/GABA SPIKE
                               					setfield {network2}[{ctrpost}]/{comn_t}/GABA synapse[{n_ind}].weight {syn_weight1}
                               					c_ctr = {c_ctr} + 1
                                 			end
                           			else
                              				comn_t2 = "tert_dend"@{index2}
                              				n_syn = {getfield {network2}[{ctrpost}]/{comn_t}/{comn_t2}/GABA nsynapses}
                              				if ({n_syn}==0)
                                				n_ind = 0
                               				else
                                				n_ind = {n_syn-1}
                               				end
                              				n_syn_allowed = {getfield {network2}[{ctrpost}]/{comn_t}/{comn_t2} nsynallowed_g}  
                              				if (({n_syn}<{n_syn_allowed}) && ({connect}<{prob}))
			       					addmsg {network}[{ctrpre}]/soma/spike \
				    				{network2}[{ctrpost}]/{comn_t}/{comn_t2}/GABA SPIKE
                               					setfield {network2}[{ctrpost}]/{comn_t}/{comn_t2}/GABA synapse[{n_ind}].weight {syn_weight1}
                               					c_ctr = {c_ctr} + 1
	                    				end
                           			end 
                       			end   
				end //while
		  	end
                end
         end
   end
   echo "End of netconn"
end


//Connect SP network
function netconn_SP(net,net2,network,network2,fact,SP,FS,int_perc)
	int SP, FS, pre_rem, prev
	str net,net2,network,network2,DA
	float fact, gap_res, int_perc
	int int_GABA= {round {{int_perc}*{getglobal nGABA_{net2}}}}	//intrinsic GABAergic input calculated
	int numCells_pre = {{SP}*{numCells_SP} + {FS}*{numCells_FS}}	//# of SP and FS GABAergic input
	int ctrpre, ctrpost, dctr,  densityMax_3_SP = 2, densityMax_4_SP = 2, increment=1, loops, inCtr, ctr_pre
	int break0=0, break1=0 , break2=0, break3=0, break4=0, break5=0, break6=0, break7=0
	float xpre, ypre, xpost, ypost, dist2parent, prob, connect, dist_f, alpha, beta, gap_conn, gap_prob, gap_ind_conn, ind_prob
	int compt_pre_select, compt_post_select=0, compt_sub_select, cellCtr, branch_select, inter=0
	str compt_1 = "soma", compt_2 = "primdend", compt_3 = "secdend", compt_4 = "tertdend"
	str compname_pre, compname_post, compname, comn, comn2, comn_t, comn_t2
	int n_syn, n_syn_allowed, n_ind, c_ctr, a_ctr=0, index1, index2, index2_2, gap_rand
	int chem_gap, ind_gap, i
	//int proximal = {densityMax_soma_GABA_SP} + {densityMax_pd_GABA_SP}*{prim_dend_num_SP} + {densityMax_sd_GABA_SP}*{sec_dend_num_SP}
	int i,j,k,x,p,w=0
	int min_SP=1 //oorschot 18% somal
	str InsignalPath=""
        //setting the branches based on number of GABAergic synapses
	for (i=1; i<{{densityMax_soma_GABA_SP}+1}; i={i+1})
		addglobal str branch_{i} "soma"
   		addglobal str branch2_{i} "" 
	end 
   	x={i}
  	j=0
   	k=1
   	for (i={x}; i<{{x}+{{densityMax_pd_GABA_SP}*{prim_dend_num_SP}}}; i={i+1})
   		j = {j+1}
   		if (({j}%{{densityMax_pd_GABA_SP}+1})==0)
    			k={k+1}
   		end
   		addglobal str branch_{i} "primdend"{k}""
   		addglobal str branch2_{i} ""
   	end 
   	x={i}
	j=0
   	k=1
   	for (i={x}; i<{{x}+{{densityMax_sd_GABA_SP}*{sec_dend_num_SP}}}; i={i+1})
   		j = {j+1}
   		if (({j}%{{densityMax_sd_GABA_SP}+1})==0)
    			k={k+1}
   		end
   		addglobal str branch_{i} "secdend"{k}""
   		addglobal str branch2_{i} ""
   	end 
   	x={i}
   	int max_FS={x-4}   //index starts from 0 and FS proximal
   	//echo "max_fs" {max_FS}
   	j=0
   	k=1
   	for (i={x}; i<{{x}+{{densityMax_td_GABA_SP}*{tert_dend_num_SP}}}; i={i+1})
   		j = {j+1}
   		w = {w+1}
   		if (({j}%{{{densityMax_td_GABA_SP}*11}+1})==0)
    			k={k+1}
    			w=1
   		end
   		addglobal str branch_{i} "tertdend"{k}""
   		if ({w}>1 && {w<12})
   			addglobal str branch2_{i} "tert_dend"{w}""
   		else
   			addglobal str branch2_{i} ""
   		end
   	end  
	if (!{exists synap})
   		create tabchannel synap  
   	end
   	disable synap
   	int tablemax = {getglobal nGABA_{net2}}
	if (!{exists pre})
   		create tabchannel pre  
   	end
   	disable pre
	if (!{exists pre_num})
   		create tabchannel pre_num  
   	end
   	disable pre_num   
   	call pre_num TABCREATE X {{getglobal numCells_{net2}}-1} 0 {{getglobal numCells_{net2}}-1}
   	for (i=0; i<{getglobal numCells_{net2}}; i={i+1})
      		setfield pre_num X_B->table[{i}] 1
   	end 
	if (!{exists pre_spk})
   		create tabchannel pre_spk  
   	end
   	disable pre_spk
   	call pre_spk TABCREATE X {{getglobal numCells_{net2}}-1} 0 {{getglobal numCells_{net2}}-1}
   	call pre_spk TABCREATE Y {{getglobal numCells_{net2}}-1} 0 {{getglobal numCells_{net2}}-1}
   	call pre_spk TABCREATE Z {{getglobal numCells_{net2}}-1} 0 {{getglobal numCells_{net2}}-1}
   	for (i=0; i<{getglobal numCells_{net2}}; i={i+1})
      		setfield pre_spk X_A->table[{i}] 0
      		setfield pre_spk X_B->table[{i}] 0
      		setfield pre_spk Y_A->table[{i}] 0
   	end 
	//int nu = {getglobal nUnique_g_{net2}}
        //create tabchannel for type of extrinsic input
   	//Following loops for writing distance log function
	for(ctrpre = 0; ctrpre < {getglobal numCells_{net}}; ctrpre = {ctrpre + 1})  //loops through presynaptic cells
        	xpre={getfield {network}[{ctrpre}]/soma/ x}  //get x location
		ypre={getfield {network}[{ctrpre}]/soma/ y}  //get y location
		for(ctrpost = 0; ctrpost < {getglobal numCells_{net2}}; ctrpost= {ctrpost +1})  //loops through postsynaptic cells
			if ({ctrpre}!={ctrpost}) 
                        	xpost={getfield {network2}[{ctrpost}]/soma/ x} //get x location
		   		ypost={getfield {network2}[{ctrpost}]/soma/ y} //get y location
				dist2parent={{pow {xpost-xpre} 2 } + {pow {ypost-ypre} 2}}   // calculating distance between the cells     
                   		echo {dist2parent} >> dist.log    
                  	end
		end
	end
        //Following loops for connecting neurons to GABAergic input both extrinsic and intrinsic
        //Loops through post-synaptic neuron and then decides pre-synaptic neuron for each one
 	for(ctrpost = 0; ctrpost < {getglobal numCells_{net2}}; ctrpost = {ctrpost + 1})  //loops through postsynaptic cells
        	xpost={getfield {network2}[{ctrpost}]/soma/ x}	//get x location of post-synaptic neuron
		ypost={getfield {network2}[{ctrpost}]/soma/ y}	//get y location of post-synaptic neuron		  
          	//If extrinsic input exists then read in the unique input files
		if ({int_perc}!=1)
        		readInputFromFile {net2} "GABAinsignal_u_"{ctrpost}"_" \
		            "INPUTDATA_SP/GABAinsignal_"{{ctrpost}+1}"_" \
                    	{getglobal nGABA_{net2}} {nGABA_SP}      
        	end
		call synap TABCREATE X {{tablemax}-1} 0 {{tablemax}-1}
        	for (i=0; i<{tablemax}; i={i+1})
        		setfield synap X_A->table[{i}] {i} 
        	end
                //tabchannel for indices of intrinsic presynaptic neurons
		call pre TABCREATE X {{numCells_pre}-1} 0 {{numCells_pre}-1}
        	for (i=0; i<{numCells_pre}; i={i+1})
        		setfield pre X_A->table[{i}] {i} 
        	end
		if ({getfield /SPnetwork/SPcell[{ctrpost}]/soma D1} == 1)
                        DA = "D1"
                elif ({getfield /SPnetwork/SPcell[{ctrpost}]/soma D1} == 0) 
                        DA = "D2"
                end
 		c_ctr = 0
                //Connect all intrinsic input by calling random number from the pre tabchannel
        	while ({c_ctr} < {int_GABA})  
                        //if random number tabchannel empty replenish it
        		if ({pre_rem}==-1)
           			call pre TABCREATE X {{numCells_pre}-1} 0 {{numCells_pre}-1}
           			for (i=0; i<{numCells_pre}; i={i+1})
             				setfield pre X_A->table[{i}] {i} 
           			end 
           			prev = {getfield pre_num X_B->table[{ctrpost}]}
           			setfield pre_num X_B->table[{ctrpost}] {prev+1}
        		end	  
        		ctrpre = {rannum_new pre}	//randomly select presynaptic neuron 
        		pre_rem = {getfield pre X_A->xmax}	//check number of elements left to make sure tabchannel not empty 
        		//if the randomly selected number is in the FS range then use FS-SP connection probabilities
                        if ({ctrpre}>{{numCells_SP}-1})
        			ctr_pre = {{ctrpre}-{numCells_SP}}
        			net="FS"
        			prob=0.20
        			//echo "ctrpre FS" {ctrpre} 
			//else if either intrisic SP connections are present or extrinsic is absent and at the same time
    			//random number is in the SP range then use SP-SP presynaptic connection values
        		elif (({SP}==1 && {FS}==0)||({SP}==1 && {FS}==1 && {ctrpre}<{numCells_SP}))
        			ctr_pre={ctrpre}
        			net="SP"
        			//echo "ctrpre SP" {ctrpre} 
        			xpre={getfield ""/{net}"network/"{net}"cell"[{ctr_pre}]/soma/ x} //get x location
        			ypre={getfield ""/{net}"network/"{net}"cell"[{ctr_pre}]/soma/ y} //get y location
        			dist2parent={{pow {xpost-xpre} 2 } + {pow {ypost-ypre} 2}}   // calculating distance between the cells
        			dist_f= {-dist2parent}/{pow {fact} 2}  
        			//echo "dist_f" {dist_f}
       	 			prob = {exp {dist_f}} //probability as a function of distance, so farther it is, lower the probability of connection              
			//else if FS are the only intrinsic connection just continue using the FS probability 
			elif ({SP}==0 && {FS}==1)
        			ctr_pre = {ctrpre}
        			net="FS"
        			prob=0.20
        		end
        		//echo "ctrpost" {ctrpost} 
                        //Now after the appropriate connection probability is connected, connect it up
        		connect = {rand 0 1} 
        		if ({connect}<{prob})
				inCtr = {{rannum_net synap {net} {min_SP} {max_FS} {int_perc}} +1}
        			if ({net}=="SP")
					echo {ctrpre} {ctrpost} >> sync_conn.log	
            				p = {getfield pre_spk X_A->table[{ctrpost}]}
            				setfield pre_spk X_A->table[{ctrpost}] {p+1}
        			elif ({net}=="FS")
            				p = {getfield pre_spk X_B->table[{ctrpost}]}
            				setfield pre_spk X_B->table[{ctrpost}] {p+1}
        			end
                                //if branch does not have another sub-branch connect 1 way or connect it the other way
           			//the #of synapses obtained for the 2 cases
				if ({getglobal branch2_{inCtr}}=="")
            				n_syn = {getfield {network2}[{ctrpost}]/{getglobal branch_{inCtr}}/GABA nsynapses}
           			else
            				n_syn = {getfield {network2}[{ctrpost}]/{getglobal branch_{inCtr}}/{getglobal branch2_{inCtr}}/GABA nsynapses}       
           			end
				//get synapse index
        			if ({n_syn}==0)
       					n_ind = 0
        			else
        				n_ind = {n_syn-1}
        			end
				//connecting the neurons
				if ({getglobal branch2_{inCtr}}=="")
        				addmsg ""/{net}"network/"{net}"cell"[{ctr_pre}]/soma/spike \
	        			{network2}[{ctrpost}]/{getglobal branch_{inCtr}}/GABA SPIKE
        				setfield {network2}[{ctrpost}]/{getglobal branch_{inCtr}}/GABA synapse[{n_ind}].weight {getglobal weight_{net}_{DA}}
        			else
        				addmsg ""/{net}"network/"{net}"cell"[{ctr_pre}]/soma/spike \
	        			{network2}[{ctrpost}]/{getglobal branch_{inCtr}}/{getglobal branch2_{inCtr}}/GABA SPIKE
        				setfield {network2}[{ctrpost}]/{getglobal branch_{inCtr}}/{getglobal branch2_{inCtr}}/GABA synapse[{n_ind}].weight {getglobal weight_{net}_{DA}}
        			end
        			c_ctr = {c_ctr} + 1
        		end   
        	end      
                //if the counter is less than the total GABAergic input that means extrinsic input also exists
                //in that case connect the extrinsic input to the neurons
       		setfield pre_num X_A->table[{ctrpost}] {{numCells_pre}-{pre_rem}+1}
		if ({DA}=="D1")
        		echo {{getfield pre_spk X_A->table[{ctrpost}]}/227} >> SP_D1.log 
       			echo {{getfield pre_spk X_B->table[{ctrpost}]}/227} >> FS_D1.log 
       			echo {{getfield pre_spk Y_A->table[{ctrpost}]}/227} >> ext_D1.log
		elif ({DA}=="D2")
			echo {{getfield pre_spk X_A->table[{ctrpost}]}/227} >> SP_D2.log 
       			echo {{getfield pre_spk X_B->table[{ctrpost}]}/227} >> FS_D2.log 
       			echo {{getfield pre_spk Y_A->table[{ctrpost}]}/227} >> ext_D2.log
		end

  	end     
end