//  randomize_location = new RandomLocation($o2, $4)
//  randomize_location = new RandomLocation(SectionList, randomseed)



begintemplate RandomLocation

public loc
objectvar seclist, ran

proc init() {
    seclist = $o1  //SectionList
    ran = new Random($2) //randomseed
    total_length = 0
    forsec seclist { total_length = total_length + L } //length
//print "Random Location Total Length"
//print total_length

}

// randomize location of synapse
// if required put synapse on spine, scale conductance and onset
proc loc() {local l, done, rpos, secx, dx//, ss
  //randomize_location.loc(synapse)
  rpos = ran.uniform(0, total_length) //random number
  //print "Random location"
  //print rpos

  done = 0
  l = 0

  //ss=0

  distance()  // assumes soma is currently accessed               
  
  forsec seclist {
    l = l + L
   if (l > rpos) {
  
      secx = (rpos - l + L)/L //random location in SectionList

      //print "Random location in Section List" //[0; 1]
      //print secx
      //print $o1

      $o1.loc(secx)//  SectionList.loc(random location in SectionList) 
      rpos = 1e20 
    }
  }
}

endtemplate RandomLocation


//example 

//creatensyn(cell, cell.apical_list, 100, 1)
//cell - object, target
//cell.apical_list - SectionList
//100 - number of synapses
//1 - random seed
//nsyn=$3 - nsyn=100
//  access $o1.soma  - soma
//  randomize_location = new RandomLocation($o2, $4)
//  randomize_location = new RandomLocation(SectionList, randomseed)
//  for i = 0, nsyn-1 { for =0, 99
//    syn[i] = new Exp2Syn(0.5)  synapse
//    syn[i].tau1 = 0.5
//    syn[i].tau2 = 3
//    randomize_location.loc(syn[i])  //synapse i on random location 
//    $o1.pre_list.append(syn[i])
//}
//}

//1.Use template RandomLocation - creates random  locations on Section List
//2.Call random location  
//randomize_location = new RandomLocation(SectionList,randomseed)
//3.Use randomize_location in cycle while creating synapses :) :)