objref stimEsyndend[20], connEsyndend[20], Esyndend[20]
objref stimIsyndend[20], connIsyndend[20], Isyndend[20]
objref stimEsynsoma[1], connEsynsoma[1], Esynsoma[1]
objref stimIsynsoma[1], connIsynsoma[1], Isynsoma[1]
objref stimEsynprox[1], connEsynprox[1], Esynprox[1]
objref stimIsynprox[1], connIsynprox[1], Isynprox[1]
objref stimEsyndist[1], connEsyndist[1], Esyndist[1]
objref stimIsyndist[1], connIsyndist[1], Isyndist[1]
EXTHZ = 4
INTHZ = 1
NOISE = 1
ISI_EXC = 1000/INTHZ
ISI_INH = 1000/INTHZ
START_EXC = 50
START_INH = 50
INTERVAL = 12000
NSPIKES = 40
GABAaDENDDEN=1
AMPADENDDEN=1
TOTAL_GABAa_g=491.4
TOTAL_AMPA_g =5898
SEEDNUM = 1
SEED = 88
SEED=800
NSEG= 27
NSEG_SPINE=3
OFFSET=50
ONSET=50
NOISE=1
CURRINJ=0.03
DT = 0.025
TSTOP = 1000
PLOTSMS=4
AMPA_tau1 = 5.6616
AMPA_tau2 = 3.4725
AMPA_Esyn = 0
AMPA_g = 0.0002729
GABAa_g=0.0021
GABAa_Esyn = -60
GABAa_tau1 = 0.5
GABAa_tau2 = 7.5
START_EXC = 100
func AddSynapses() { local cnt, nSyn, DELAY, ST_EXC, stopTime
nSyn = $o2.size()
ST_EXC = $3
DELAY = $4
objref stimEsyndend[nSyn], connEsyndend[nSyn], Esyndend[nSyn]
cnt = 0
forsec $o1 {
Esyndend[cnt] = new Exp2Syn($o2.x[cnt])
Esyndend[cnt].tau1=AMPA_tau1
Esyndend[cnt].tau2=AMPA_tau2
Esyndend[cnt].e=AMPA_Esyn
stimEsyndend[cnt]= new NetStim($o2.x[cnt])
stimEsyndend[cnt].interval= INTERVAL
stimEsyndend[cnt].start= $3 + cnt*DELAY
stimEsyndend[cnt].noise=NOISE
stimEsyndend[cnt].number=1
connEsyndend[cnt] = new NetCon(stimEsyndend[cnt],Esyndend[cnt],-55,0,AMPA_g)
cnt += 1
}
stopTime = START_EXC+(nSyn+2)*DELAY
printf("Added %d synapses, final time %d\n",nSyn,START_EXC + nSyn*DELAY)
return stopTime
}
objref sref
func AddExcSynapses_byNumber() { local cnt, nSyn, DELAY, ST_EXC, stopTime, SAspacing, totSA, SAcnt, numSec, cntSec, xloc
nASyn = $1
nBSyn = $2
nCSyn = $3
nSyn = nASyn + nBSyn + nCSyn
ST_EXC = $4
DELAY = $5
objref stimEsyndend[nSyn], connEsyndend[nSyn], Esyndend[nSyn]
soma { distance(0) }
$o6 = new SectionList()
$o7 = new Vector()
if( nASyn > 0 ) {
totSA = 0
forsec proximal {
totSA =totSA + L*3.1415926*diam
}
SAspacing = totSA / nASyn
printf("Spacing for proximal EXC synapses: every %g = %g / %d microns ^ 2\n",SAspacing,totSA,nASyn)
SAcnt = 0
cnt = 0
numSec = 0
forsec proximal { numSec += 1 }
cntSec = 0
forsec proximal {
cntSec += 1
for(x) {
SAcnt += area(x)
while( SAcnt >= SAspacing ) {
sref = new SectionRef()
$o6.append()
$o7.append(x)
Esyndend[cnt] = new Exp2Syn(x)
Esyndend[cnt].tau1=AMPA_tau1
Esyndend[cnt].tau2=AMPA_tau2
Esyndend[cnt].e=AMPA_Esyn
stimEsyndend[cnt]= new NetStim(x)
stimEsyndend[cnt].seed(SEED)
nslist.append(stimEsyndend[cnt])
rs = new RandomStream(cnt)
rslist.append(rs)
stimEsyndend[cnt].interval= INTERVAL
stimEsyndend[cnt].start= 0
stimEsyndend[cnt].noise=NOISE
stimEsyndend[cnt].number= NSPIKES
rs.r.negexp(1)
rs.start()
connEsyndend[cnt] = new NetCon(stimEsyndend[cnt],Esyndend[cnt],-55,0,AMPA_g)
connEsyndend[cnt].record(tvec, idvec, cnt)
cnt += 1
SAcnt -= SAspacing
}
}
if( cnt < nASyn && cntSec == numSec ) {
while( cnt < nASyn ) {
xloc = 1
sref = new SectionRef()
$o6.append()
$o7.append(xloc)
Esyndend[cnt] = new Exp2Syn(xloc)
Esyndend[cnt].tau1=AMPA_tau1
Esyndend[cnt].tau2=AMPA_tau2
Esyndend[cnt].e=AMPA_Esyn
stimEsyndend[cnt]= new NetStim(x)
stimEsyndend[cnt].seed(SEED)
nslist.append(stimEsyndend[cnt])
rs = new RandomStream(cnt)
rslist.append(rs)
stimEsyndend[cnt].interval= INTERVAL
stimEsyndend[cnt].start= 0
stimEsyndend[cnt].noise=NOISE
stimEsyndend[cnt].number= NSPIKES
rs.r.negexp(1)
rs.start()
connEsyndend[cnt] = new NetCon(stimEsyndend[cnt],Esyndend[cnt],-55,0,AMPA_g)
connEsyndend[cnt].record(tvec, idvec, cnt)
cnt += 1
}
}
}
printf("Finished with proximal dendrites, added %d synapses, %g SA till next synapse\n",cnt,SAcnt)
}else { printf("No apical synapses added.\n") }
if( nBSyn > 0 ) {
totSA = 0
forsec middend {
totSA += L*3.1415926*diam
}
SAspacing = totSA / nBSyn
printf("Spacing for middend EXC synapses: every %g = %g / %d microns ^ 2\n",SAspacing,totSA,nBSyn)
SAcnt = 0
numSec = 0
forsec middend { numSec += 1 }
cntSec = 0
forsec middend {
cntSec += 1
for(x) {
SAcnt += area(x)
while( SAcnt >= SAspacing ) {
sref = new SectionRef()
$o6.append()
$o7.append(x)
Esyndend[cnt] = new Exp2Syn(x)
Esyndend[cnt].tau1=AMPA_tau1
Esyndend[cnt].tau2=AMPA_tau2
Esyndend[cnt].e=AMPA_Esyn
stimEsyndend[cnt]= new NetStim(x)
stimEsyndend[cnt].seed(SEED)
nslist.append(stimEsyndend[cnt])
rs = new RandomStream(cnt)
rslist.append(rs)
stimEsyndend[cnt].interval= INTERVAL
stimEsyndend[cnt].start= 0
stimEsyndend[cnt].noise=NOISE
stimEsyndend[cnt].number= NSPIKES
rs.r.negexp(1)
rs.start()
connEsyndend[cnt] = new NetCon(stimEsyndend[cnt],Esyndend[cnt],-55,0,AMPA_g)
connEsyndend[cnt].record(tvec, idvec, cnt)
cnt += 1
SAcnt -= SAspacing
}
}
if( cnt < nSyn && cntSec == numSec ) {
while( cnt < nASyn+nBSyn ) {
xloc = 1
sref = new SectionRef()
$o6.append()
$o7.append(xloc)
Esyndend[cnt] = new Exp2Syn(xloc)
Esyndend[cnt].tau1=AMPA_tau1
Esyndend[cnt].tau2=AMPA_tau2
Esyndend[cnt].e=AMPA_Esyn
stimEsyndend[cnt]= new NetStim(x)
stimEsyndend[cnt].seed(SEED)
nslist.append(stimEsyndend[cnt])
rs = new RandomStream(cnt)
rslist.append(rs)
stimEsyndend[cnt].interval= INTERVAL
stimEsyndend[cnt].start= 0
stimEsyndend[cnt].noise=NOISE
stimEsyndend[cnt].number= NSPIKES
rs.r.negexp(1)
rs.start()
connEsyndend[cnt] = new NetCon(stimEsyndend[cnt],Esyndend[cnt],-55,0,AMPA_g)
connEsyndend[cnt].record(tvec, idvec, cnt)
cnt += 1
}
}
}
printf("Finished with middend dendrites, added %d synapses, %g SA till next synapse\n",cnt,SAcnt)
} else { printf("No Middend synapses added.\n") }
if( nCSyn > 0 ) {
totSA = 0
forsec distal {
totSA += L*3.1415926*diam
}
SAspacing = totSA / nCSyn
printf("Spacing for distal EXC synapses: every %g = %g / %d microns ^ 2\n",SAspacing,totSA,nCSyn)
SAcnt = 0
numSec = 0
forsec distal { numSec += 1 }
cntSec = 0
forsec distal {
cntSec += 1
for(x) {
SAcnt += area(x)
while( SAcnt >= SAspacing ) {
sref = new SectionRef()
$o6.append()
$o7.append(x)
Esyndend[cnt] = new Exp2Syn(x)
Esyndend[cnt].tau1=AMPA_tau1
Esyndend[cnt].tau2=AMPA_tau2
Esyndend[cnt].e=AMPA_Esyn
stimEsyndend[cnt]= new NetStim(x)
stimEsyndend[cnt].seed(SEED)
nslist.append(stimEsyndend[cnt])
rs = new RandomStream(cnt)
rslist.append(rs)
stimEsyndend[cnt].interval= INTERVAL
stimEsyndend[cnt].start= 0
stimEsyndend[cnt].noise=NOISE
stimEsyndend[cnt].number= NSPIKES
rs.r.negexp(1)
rs.start()
connEsyndend[cnt] = new NetCon(stimEsyndend[cnt],Esyndend[cnt],-55,0,AMPA_g)
connEsyndend[cnt].record(tvec, idvec, cnt)
cnt += 1
SAcnt -= SAspacing
}
}
if( cnt < nSyn && cntSec == numSec ) {
while( cnt < nSyn ) {
xloc = 1
sref = new SectionRef()
$o6.append()
$o7.append(xloc)
Esyndend[cnt] = new Exp2Syn(xloc)
Esyndend[cnt].tau1=AMPA_tau1
Esyndend[cnt].tau2=AMPA_tau2
Esyndend[cnt].e=AMPA_Esyn
stimEsyndend[cnt]= new NetStim(x)
stimEsyndend[cnt].seed(SEED)
nslist.append(stimEsyndend[cnt])
rs = new RandomStream(cnt)
rslist.append(rs)
stimEsyndend[cnt].interval= INTERVAL
stimEsyndend[cnt].start= 0
stimEsyndend[cnt].noise=NOISE
stimEsyndend[cnt].number= NSPIKES
rs.r.negexp(1)
rs.start()
connEsyndend[cnt] = new NetCon(stimEsyndend[cnt],Esyndend[cnt],-55,0,AMPA_g)
connEsyndend[cnt].record(tvec, idvec, cnt)
cnt += 1
}
}
}
printf("Finished with distal dendrites, added %d synapses, %g SA till next synapse\n",cnt,SAcnt)
} else { printf("No distal synapses added.\n") }
printf("Added %d excitatory synapses, final time %d\n",nSyn,START_EXC + nSyn*DELAY)
return nSyn
}
func AddInhSynapses() { local cnt, nSyn, DELAY, ST_EXC, stopTime, SAspacing, totSA, SAcnt, numSec, cntSec, xloc
nSyn = $1
ST_EXC = $3
DELAY = $4
totSA = countSA($2)
SAspacing = totSA / nSyn
printf("Spacing for INH synapses: every %g = %g / %d microns ^ 2\n",SAspacing,totSA,nSyn)
objref stimIsyndend[nSyn], connIsyndend[nSyn], Isyndend[nSyn]
soma { distance(0) }
SAcnt = 0
cnt = 0
$o5 = new SectionList()
$o6 = new Vector()
forsec "soma" {
for(x) {
SAcnt += area(x)
while( SAcnt >= SAspacing ) {
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
print "\tAdded Exp2Syn"
Isyndend[cnt].tau1=GABAa_tau1
print "\tset tau1"
Isyndend[cnt].tau2=GABAa_tau2
print "\tset tau2"
Isyndend[cnt].e=GABAa_Esyn
print "\tset Esyn"
stimIsyndend[cnt]= new NetStim(x)
print "\tAdded NetStim"
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
print "\tset NetStim params"
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
print "\tAdded NetCon"
cnt += 1
SAcnt -= SAspacing
}
}
}
printf("Finished with soma, added %d synapses, %g SA till next synapse\n",cnt,SAcnt)
numSec = 0
forsec dendritic { numSec += 1 }
cntSec = 0
forsec dendritic {
cntSec += 1
for(x) {
if( distance(x) > $2 ) continue
SAcnt += area(x)
while( SAcnt >= SAspacing ) {
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
SAcnt -= SAspacing
}
}
if( cnt < nSyn && cntSec == numSec ) {
while( cnt < nSyn ) {
xloc = 1
sref = new SectionRef()
$o5.append()
$o6.append(xloc)
Isyndend[cnt] = new Exp2Syn(xloc)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(xloc)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
}
}
}
printf("Finished with dendrites, added %d synapses, %g SA till next synapse\n",cnt,SAcnt)
stopTime = START_EXC+(nSyn+2)*DELAY
printf("Added %d inhibitory synapses, final time %d\n",nSyn,START_EXC + nSyn*DELAY)
$7 = cnt
return stopTime
}
func AddInhSynapses_ProxAndUni() { local cnt, nSyn, DELAY, ST_EXC, stopTime, SAspacing, totSA, prxSA, SAcnt, numSec, cntSec, xloc, nClose, nFar
nSyn = $1
ST_EXC = $3
DELAY = $4
nClose = int(nSyn * $8 + 0.5 )
nFar = nSyn - nClose
objref stimIsyndend[nSyn], connIsyndend[nSyn], Isyndend[nSyn]
$o5 = new SectionList()
$o6 = new Vector()
soma { distance(0) }
numSec = 0
forsec dendritic { numSec += 1 }
prxSA = countSA($2)
SAspacing = prxSA / nClose
printf("Spacing for proximal INH synapses: every %g = %g / %d microns ^ 2\n",SAspacing,prxSA,nClose)
SAcnt = 0
cnt = 0
forsec "soma" {
for(x) {
SAcnt += area(x)
while( SAcnt >= SAspacing ) {
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
SAcnt -= SAspacing
}
}
}
printf("Finished with soma, added %d synapses, %g SA till next synapse\n",cnt,SAcnt)
cntSec = 0
forsec dendritic {
cntSec += 1
for(x) {
if( distance(x) > $2 ) continue
SAcnt += area(x)
while( SAcnt >= SAspacing ) {
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
SAcnt -= SAspacing
}
}
}
printf("Finished with proximal dendrites, added %d synapses, %g SA till next synapse\n",cnt,SAcnt)
if( nFar > 0 ) {
totSA = countSA(70)
SAspacing = (totSA - prxSA ) / nFar
printf("Spacing for distal INH synapses: every %g = %g / %d microns ^ 2\n",SAspacing,(totSA-prxSA),nFar)
SAcnt = 0
cntSec = 0
forsec dendritic {
cntSec += 1
for(x) {
if( distance(x) <= $2 ) continue
SAcnt += area(x)
while( SAcnt >= SAspacing ) {
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
SAcnt -= SAspacing
}
}
if( cnt < nSyn && cntSec == numSec ) {
while( cnt < nSyn ) {
xloc = 1
sref = new SectionRef()
$o5.append()
$o6.append(xloc)
Isyndend[cnt] = new Exp2Syn(xloc)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(xloc)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
}
}
}
printf("Finished with dendrites, added %d synapses, %g SA till next synapse\n",cnt,SAcnt)
}
stopTime = START_EXC+(nSyn+2)*DELAY
printf("Added %d inhibitory synapses, final time %d\n",nSyn,START_EXC + nSyn*DELAY)
$7 = cnt
return stopTime
}
func AddInhSynapses_ProxDist_byDensity() { local cnt, nSyn, DELAY, ST_EXC, stopTime, Lspacing, totSA, prxSA, Lcnt, numSec, cntSec, xloc, nClose, nFar, baseDens, prxSpDens, dstSpDens, totL, prxL, dstL, lastX
baseDens = $1
ST_EXC = $3
DELAY = $4
prxL = find_totLen($2)
totL = find_totLen(70)
dstL = totL - prxL
prxSpDens = $8
dstSpDens = $9
nClose = int(prxL * (baseDens + prxSpDens) + 0.5 )
nFar = int(dstL * (baseDens + dstSpDens) + 0.5 )
nSyn = nClose + nFar
printf("Inh syn density: %g base/t%g prox Spines/t%g dist Spines\n",baseDens,prxSpDens,dstSpDens)
printf("Want a total of %d synapses: %d close and %d far from soma.\n",nSyn,nClose,nFar)
objref stimIsyndend[nSyn], connIsyndend[nSyn], Isyndend[nSyn]
$o5 = new SectionList()
$o6 = new Vector()
soma { distance(0) }
numSec = 0
forsec dendritic { numSec += 1 }
Lspacing = prxL / nClose
printf("Spacing for proximal INH synapses: every %g = %g / %d microns of length\n",Lspacing,prxL,nClose)
Lcnt = 0
cnt = 0
forsec "soma" {
for(x) {
if( x==0 || x == 1 ) continue
Lcnt += L / nseg
while( Lcnt >= Lspacing ) {
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
Lcnt -= Lspacing
}
}
}
printf("Finished with soma, added %d synapses, %g L till next synapse\n",cnt,Lcnt)
cntSec = 0
forsec dendritic {
cntSec += 1
for(x) {
if( distance(x) > $2 ) { continue }
if( x==0 || x==1 ) continue
Lcnt += L / nseg
while( Lcnt >= Lspacing ) {
if( cnt > nClose ) { printf("\ttrying to add synapse %d\n",cnt) }
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
Lcnt -= Lspacing
}
}
}
printf("Finished with proximal dendrites, added %d synapses, %g length till next synapse\n",cnt,Lcnt)
if( nFar > 0 ) {
Lspacing = dstL / nFar
printf("Spacing for distal INH synapses: every %g = %g / %d microns of length\n",Lspacing,dstL,nFar)
cntSec = 0
forsec dendritic {
cntSec += 1
for(x) {
if( x==0 || x==1 ) continue
if( distance(x) <= $2 ) continue
Lcnt += L / nseg
while( Lcnt >= Lspacing && cnt < nSyn ) {
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
Lcnt -= Lspacing
}
}
if( cnt < nSyn && cntSec == numSec ) {
while( cnt < nSyn ) {
xloc = 1
sref = new SectionRef()
$o5.append()
$o6.append(xloc)
Isyndend[cnt] = new Exp2Syn(xloc)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(xloc)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
}
}
}
printf("Finished with dendrites, added %d synapses, %g length till next synapse\n",cnt,Lcnt)
}
stopTime = START_EXC+(nSyn+2)*DELAY
printf("Added %d inhibitory synapses, final time %d\n",nSyn,START_EXC + nSyn*DELAY)
$7 = cnt
return nSyn
}
func AddInhSynapses_ProxDist_byDensityAB() { local cnt, nSyn, DELAY, ST_EXC, stopTime, Lspacing, totSA, prxSA, Lcnt, numSec, cntSec, xloc, nClose, nFar, baseDens, prxSpDens, dstSpDens, totL, prxL, dstL, lastX
baseDens = $1
ST_EXC = $3
DELAY = $4
if( $10 == 0 ) {
prxL = find_totProxLen($2)
totL = find_totProxLen(70)
} else {
if( $10 == 1 ) {
prxL = find_totMiddLen($2)
totL = find_totMiddLen(70)
} else {
prxL = find_totLen($2)
totL = find_totLen(70)
}
}
dstL = totL - prxL
prxSpDens = $8
dstSpDens = $9
nClose = int(prxL * (baseDens + prxSpDens) + 0.5 )
nFar = int(dstL * (baseDens + dstSpDens) + 0.5 )
nSyn = nClose + nFar
printf("Inh syn density: %g base/t%g prox Spines/t%g dist Spines\n",baseDens,prxSpDens,dstSpDens)
printf("Want a total of %d synapses: %d close and %d far from soma.\n",nSyn,nClose,nFar)
objref stimIsyndend[nSyn], connIsyndend[nSyn], Isyndend[nSyn]
$o5 = new SectionList()
$o6 = new Vector()
soma { distance(0) }
numSec = 0
if( $10 == 0 ) { forsec proximal { numSec += 1 }
} else {
if( $10 ==1 ) { forsec middend { numSec += 1 }
} else {
forsec distal { numSec += 1 }
}
}
Lspacing = prxL / nClose
printf("Spacing for proximal INH synapses: every %g = %g / %d microns of length\n",Lspacing,prxL,nClose)
Lcnt = 0
cnt = 0
forsec "soma" {
for(x) {
if( x==0 || x == 1 ) continue
Lcnt += L / nseg
while( Lcnt >= Lspacing ) {
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
Lcnt -= Lspacing
}
}
}
printf("Finished with soma, added %d synapses, %g L till next synapse\n",cnt,Lcnt)
cntSec = 0
if( $10 != 1 ) {
forsec proximal {
cntSec += 1
for(x) {
if( distance(x) > $2 ) { continue }
if( x==0 || x==1 ) continue
Lcnt += L / nseg
while( Lcnt >= Lspacing ) {
if( cnt > nClose ) { printf("\ttrying to add synapse %d\n",cnt) }
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
Lcnt -= Lspacing
}
}
}
}
if( $10 != 0 ) {
forsec middend {
cntSec += 1
for(x) {
if( distance(x) > $2 ) { continue }
if( x==0 || x==1 ) continue
Lcnt += L / nseg
while( Lcnt >= Lspacing ) {
if( cnt > nClose ) { printf("\ttrying to add synapse %d\n",cnt) }
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
Lcnt -= Lspacing
}
}
}
}
printf("Finished with proximal dendrites, added %d synapses, %g length till next synapse\n",cnt,Lcnt)
if( nFar > 0 ) {
Lspacing = dstL / nFar
printf("Spacing for distal INH synapses: every %g = %g / %d microns of length\n",Lspacing,dstL,nFar)
cntSec = 0
if( $10 == 0 ) {
forsec proximal {
cntSec += 1
for(x) {
if( x==0 || x==1 ) continue
if( distance(x) <= $2 ) continue
Lcnt += L / nseg
while( Lcnt >= Lspacing && cnt < nSyn ) {
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
Lcnt -= Lspacing
}
}
if( cnt < nSyn && cntSec == numSec ) {
while( cnt < nSyn ) {
xloc = 1
sref = new SectionRef()
$o5.append()
$o6.append(xloc)
Isyndend[cnt] = new Exp2Syn(xloc)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(xloc)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
}
}
}
}
if( $10 == 1 ) {
forsec middend {
cntSec += 1
for(x) {
if( x==0 || x==1 ) continue
if( distance(x) <= $2 ) continue
Lcnt += L / nseg
while( Lcnt >= Lspacing && cnt < nSyn ) {
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
Lcnt -= Lspacing
}
}
if( cnt < nSyn && cntSec == numSec ) {
while( cnt < nSyn ) {
xloc = 1
sref = new SectionRef()
$o5.append()
$o6.append(xloc)
Isyndend[cnt] = new Exp2Syn(xloc)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(xloc)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
}
}
}
}
if( ($10 != 0 ) && ($10 != 1) ) {
forsec dendritic {
cntSec += 1
for(x) {
if( x==0 || x==1 ) continue
if( distance(x) <= $2 ) continue
Lcnt += L / nseg
while( Lcnt >= Lspacing && cnt < nSyn ) {
sref = new SectionRef()
$o5.append()
$o6.append(x)
Isyndend[cnt] = new Exp2Syn(x)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(x)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
Lcnt -= Lspacing
}
}
if( cnt < nSyn && cntSec == numSec ) {
while( cnt < nSyn ) {
xloc = 1
sref = new SectionRef()
$o5.append()
$o6.append(xloc)
Isyndend[cnt] = new Exp2Syn(xloc)
Isyndend[cnt].tau1=GABAa_tau1
Isyndend[cnt].tau2=GABAa_tau2
Isyndend[cnt].e=GABAa_Esyn
stimIsyndend[cnt]= new NetStim(xloc)
stimIsyndend[cnt].interval= INTERVAL
stimIsyndend[cnt].start= $3 + cnt*DELAY
stimIsyndend[cnt].noise=NOISE
stimIsyndend[cnt].number=1
connIsyndend[cnt] = new NetCon(stimIsyndend[cnt],Isyndend[cnt],-55,0,GABAa_g)
cnt += 1
}
}
}
}
printf("Finished with dendrites, added %d synapses, %g length till next synapse\n",cnt,Lcnt)
}
stopTime = START_EXC+(nSyn+2)*DELAY
printf("Added %d inhibitory synapses, final time %d\n",nSyn,START_EXC + nSyn*DELAY)
$7 = cnt
return nSyn
}
proc SynapsesOff() { local i
for i = 0, $1-1 {
stimEsyndend[i].start = 70
}
}
proc SynapseOn() {
stimEsyndend[$1].start = $2
}
proc adjust_gAMPA() { local i
for i = 0, $2-1 {
connEsyndend[i].weight = $1
}
}
proc adjust_gGABA() { local i
for i = 0, $2-1 {
connIsyndend[i].weight = $1
}
}
proc adjust_tau1() { local i
for i = 0, $2-1 {
Esyndend[i].tau1 = $1
}
}
proc adjust_tau2() { local i
for i = 0, $2-1 {
Esyndend[i].tau2 = $1
}
}
proc adjust_Itau1() { local i
for i = 0, $2-1 {
Isyndend[i].tau1 = $1
}
}
proc adjust_Itau2() { local i
for i = 0, $2-1 {
Isyndend[i].tau2 = $1
}
}
func countSA() { local sa
sa = 0
if( $1 >= 0 ) { forsec "soma" for(x) sa += area(x) }
forsec dendritic {
for(x) {
if( $1< 0 || distance(x) <= $1 ) {
sa += area(x)
}
}
}
return sa
}