/******************************************************************************
Create totSyn number(here is 1000) synapses on either proximal apical dendrite,
distal apical dendrite or basal dendrite (based on the flag "choice"). Also sets
the synaptic weight following Type I or Type C model based on the value of MODELTYPE.
MODELTYPE is inherited.
Here each synapse is connected to individual NetStim cell
******************************************************************************/

//1 for apical dendrite(both main trunk & obl. branches) < TWO_THIRD_APIDEND
//2 for apical dendrite(both main trunk & obl. branches) > TWO_THIRD_APIDEND
//3 for basal dendrite
choice = 1

if (choice == 1 || choice == 2) {
    BEGINSECTION= BASDENDMAX + 1
    ENDSECTION= TOTALDEND - 1
} else {
    BEGINSECTION= 0
    ENDSECTION= BASDENDMAX
} 

objref rc, rd
rc = new Random()
rc.MCellRan4(highindex+250)
rc.uniform(BEGINSECTION, ENDSECTION) 
rd = new Random()
totSyn = 1000

objref Ens[totSyn], syn[totSyn], nc[totSyn]
double  synWt[totSyn]

access soma
soma distance()

for (i=0; i <= totSyn-1; i +=1) {
    count = 1
    /*---------generate a syn at random section and random segment--*/
	flag=0
	while (flag==0) {
		comp=int(rc.repick()+0.5)
		dend[comp].sec {  //for now limiting syn loc 2/3 to soma
		    rd.MCellRan4(highindex+i*15)
		    rd.uniform(1, nseg+1)
		    count = 0
		    while (count <= nseg && flag==0) {
			tmpnseg = int( rd.repick())
			count += 1
			tmp = (2*tmpnseg - 1)/(2*nseg)
			if (choice == 1) { // shorter than 2/3 max. apical length   
			    if (distance(tmp) < TWO_THIRD_APIDIST ) {flag=1} else {flag=0} //total length is up to 800uM
			} else if (choice == 2) { // longer than 2/3 max. apical length
			    if (distance(tmp) > TWO_THIRD_APIDIST ) {flag=1} else {flag=0} //total length is up to 800uM
			} else { //basal dendrite
			    flag = 1
			}
		    }
		}
	}//now right section, right segment has been found
    
    dend[comp].sec {
	dist = distance(tmp)
        Ens[i] = new NetStim(0.5)
        Ens[i].interval=200
        Ens[i].number = 1000000000000000000000000000000
        Ens[i].start=0
        Ens[i].noise=0

        syn[i] = new Exp2Syn(tmp)
        syn[i].e=0
        syn[i].tau1 = TAU1
        syn[i].tau2 = TAU2
        nc[i] = new NetCon(Ens[i], syn[i])

	/*-----------Setting up dist value based on Type I or Type C Model----------------------*/
	if ( MODELTYPE == 1 ) {  //Type C Model
		if (choice == 1) {  //within 2/3 proximal apical dendrite
		    if (issection("apical_dendrite.*")) { //synapse on oblique branch
			index = comp - BASDENDMAX - 1
			user5[aplist.x[index]] dist = distance(1)
		    } else { //synapse on main trunk user5
			dist = distance(tmp)
		    }

		} else if (choice == 2) {  //on distal apical dendrite
		    dist = TWO_THIRD_APIDIST
		} else { //choice == 3
		    dist = 0
		}

	} else {  //Type I Model
		dist = distance(tmp)
	}
     
	nc[i].weight =(A*dist*dist+B)/1e+06  //A, B have diff. values dep. on type I or C model

    } 
}