from neuron import h
import matplotlib
matplotlib.use('Agg')
import numpy
from pylab import *
import mytools
import pickle
import time
import sys
import random

random.seed(1)

maxLen = 356
Nsyns = 1000

lenToStart = 0.0
lenToEnd = 356.0
maxSynsPerSeg = 17

synlocs = []

h("""
load_file("myrun.hoc")
objref cvode, tvec
cvode = new CVode()
cvode.active(1)
cvode.atol(0.001)

access a_soma
double siteVec[2]
tvec = new Vector()
objref sl,syns["""+str(Nsyns)+"""]
sl = new List()
""")
synsInSegs = [0]*len(h.dend)
for istim in range(0,Nsyns):
  myiseg = -1
  while myiseg == -1:
    x = lenToStart+(maxLen-lenToStart)*random.random()
    h("""sl = locateSites(\"dend\","""+str(x)+""")
Nsegs_x = sl.count()
""")
    iseg = random.randint(0,h.Nsegs_x-1)
    h("myseg = sl.o["+str(iseg)+"].x[0]")
    if synsInSegs[int(h.myseg)] < maxSynsPerSeg:
      myiseg = int(h.myseg)
      break
    print "istim = "+str(istim)+", x = "+str(x)+", continue searching for myseg..."
  synsInSegs[myiseg] = synsInSegs[myiseg] + 1
  h("""
siteVec[0] = sl.o["""+str(iseg)+"""].x[0]
siteVec[1] = sl.o["""+str(iseg)+"""].x[1]
dend[siteVec[0]] {
  syns["""+str(istim)+"""] = new AlphaSynapse(siteVec[1])
  syns["""+str(istim)+"""].e = 0
  syns["""+str(istim)+"""].tau = 5
  syns["""+str(istim)+"""].onset = 10000
}
""")
  synlocs.append([h.siteVec[0],h.siteVec[1]])
  
picklelist = [Nsyns,maxSynsPerSeg,maxLen,synlocs]
file = open('basalsynlocs'+str(lenToStart)+'-'+str(lenToEnd)+'.sav', 'w')
pickle.dump(picklelist,file)
file.close()