load_file("nrngui.hoc") create soma[1] objectvar st objectvar sh strdef str1 tstop = 50 steps_per_ms = 40 ra = 200 rm = 60000 c_m = 0.75 v_init = -65 celsius = 30 t = 0.025 proc setpassive() { forall { insert pas cm = c_m e_pas = v_init Ra=ra g_pas=1/rm } } proc load_3dcell() { xopen(str1) setpassive() forall { soma area(0.5) nseg = (int((L/(0.1*lambda_f(100))+.9)/2)*2 + 1) totcomp=totcomp+nseg } setpassive() access soma[0] } /*****************************************************************/ objref netlist, s, ampasyn, f1, DEND, sapamp, somavec, sampvec strdef str2 proc find_epsp_amplitudes() { nmdaamparat=0.25 atrise=2.0 atau=3 ntrise=5 ntau=50 netlist=new List() ropen("neuron.que") f1=new File() nneu=fscan() stdel=5 tstop=50 Gstart=1e-5 Gend=0.5 SET=0 while (nneu > 0){ getstr(str1,1) load_3dcell(str1) sprint(str2, "%s.sco",str1) wopen(str2) soma[2] s = new NetStim(0.5) s.interval=1 // ms (mean) time between spikes s.number=1 // (average) number of spikes s.start=2 // ms (mean) start time of first spike s.noise=0 // range 0 to 1. Fractional randomness. DEND = new SectionList() forsec "basal" { DEND.append() } forsec "apical"{ DEND.append() } access soma[2] distance() forsec DEND { for (x) { G=0.004 ampasyn=new AMPA(x) ampasyn.TRise=atrise ampasyn.tau=atau ampasyn.gmax=G netlist.append(new NetCon(s,ampasyn,1,0,0)) SOMAMAX=-70 DENDMAX=-70 update_init() while (t DENDMAX) { DENDMAX=v(x) } if(soma[2].v(0.5)>SOMAMAX) { SOMAMAX=soma[2].v(0.5) } } print secname(), " ", x, " ", distance(x), " ", 65+DENDMAX, " ", 65+SOMAMAX fprint("%f\t%f\t%f\n", distance(x), 65+SOMAMAX, 65+DENDMAX) } } wopen() nneu=nneu-1 } } /*****************************************************************/ proc update_init(){ finitialize(v_init) fcurrent() } /*****************************************************************/ somax=-2.68892 somay=13.0872 somaz=1.07191 double distances[200] proc compute_distances() { ropen("neuron.que") f1=new File() nneu=fscan() count=0 while (nneu > 0){ getstr(str1,1) sprint(str2, "%s.dis",str1) wopen(str2) load_3dcell(str1) access soma[2] distance() DEND = new SectionList() forsec "basal" { DEND.append() } forsec "apical"{ DEND.append() } forsec DEND { distn0=distance(0) distances[0]=0 sum=0 for i=1,n3d()-1 { xx=(x3d(i)-x3d(i-1))*(x3d(i)-x3d(i-1)) yy=(y3d(i)-y3d(i-1))*(y3d(i)-y3d(i-1)) zz=(z3d(i)-z3d(i-1))*(z3d(i)-z3d(i-1)) sum=sum+sqrt(xx+yy+zz) distances[i]=sum } for (x) { // Amoung the various pt3d's find which one matches the distance of // current x closely distn=distance(x) match=distn-distn0 matchptdist=100000 for i=0,n3d()-1 { matptdist=(match-distances[i])*(match-distances[i]) if(matchptdist>matptdist){ matchptdist=matptdist matchi=i } } //print "Match for ", x, " is ", matchi, " XDIST ", match, " MATCH ", distances[matchi], " ERROR ", sqrt(matchptdist) // Find the distance of the closely matched point to the somatic // centroid and use that as the distance for this BPAP measurement xx=(x3d(matchi)-somax)*(x3d(matchi)-somax) yy=(y3d(matchi)-somay)*(y3d(matchi)-somay) zz=(z3d(matchi)-somaz)*(z3d(matchi)-somaz) raddist=sqrt(xx+yy+zz) fprint("%s\t%f\n", secname(), raddist) print secname(), x, raddist count=count+1 } } wopen() nneu=nneu-1 } } /*****************************************************************/ find_epsp_amplitudes() //compute_distances()