objectvar g[10] // max 10 graphs ngraph = 0 proc addgraph() { local ii // define subroutine to add a new graph ngraph = ngraph+1 ii = ngraph-1 g[ii] = new Graph(0) // With 0 argument will NOT map window to screen (but .view will!) g[ii].size(0,tstop,$2,$3) // $2 = ystart coordinates; $3 = yend coordinates g[ii].view(0,$2,tstop,$3, $4,$5,$6,$7) g[ii].xaxis(0) g[ii].yaxis() g[ii].addvar($s1,1,1) g[ii].family(0) // 0/1=nooverlay/overlay lines g[ii].save_name("graphList[0].") graphList[0].append(g[ii]) } proc addline() { g[$1].addexpr($s2,$3,1) } //////////////////////////////////////////////////////////////////////////////////// //////////////////// TRIAL PLOTS ////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// objectvar plottrial proc initPlotTrial() { plottrial = new Graph() plottrial.size(0,$1,-2,10) plottrial.xaxis() plottrial.yaxis() plottrial.beginline(0,0) } proc PlotTrial() { plottrial.mark($1,$2,$s3,$4,$5,1) plottrial.flush() } //////////////////////////////////////////////////////////////////////////////////// //////////////////// CONNECTIVITY ////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// objectvar plotconnecEx connecEECount = 0 //counts # of times connecEE was called connecEEminW = 0 connecEEmaxW = AmpaMaxExEx double baseweights[nEx][nEx_Ex] ncolor=9 objref sq[ncolor], SQ[ncolor], tri[ncolor], TRI[ncolor], oh[ncolor], OH[ncolor] proc mkgl() {local x x = .025 $o1 = new Glyph() if ($4 == 0) { // square $o1.path.m(-x, -x).l(-x, x).l(x, x).l(x,-x).close }else if ($4 == 1) { // triangle $o1.path.m(-x, -x).l(0,x).l(x,-x).close }else if ($4 == 2) { // circle (not a very fast shape) // might be better off using a gif ellipse_path($o1, x, x) } if ($3 == 0) { $o1.s($2,1) }else{ $o1.fill($2) } } proc ellipse_path() {local p0, p1, p2, p3, p4, px0, px1, px2, px3, px4, rx, ry, x, y x = 0 y = 0 rx = $2 ry = $3 // following from iv/src/lib/IV-Mac/canvas.cpp p0 = 1.00000000 p1 = 0.89657547 // cos 30 * sqrt(1 + tan 15 * tan 15) p2 = 0.70710678 // cos 45 p3 = 0.51763809 // cos 60 * sqrt(1 + tan 15 * tan 15) p4 = 0.26794919 // tan 15 px0 = p0 * rx py0 = p0 * ry px1 = p1 * rx py1 = p1 * ry px2 = p2 * rx py2 = p2 * ry px3 = p3 * rx py3 = p3 * ry px4 = p4 * rx py4 = p4 * ry $o1.path() $o1.m(x + rx, y) $o1.curve(px2, y + py2, x + px0, y + py4, x + px1, y + py3) $o1.curve(x, y + ry, x + px3, y + py1, x + px4, y + py0) $o1.curve(x - px2, y + py2, x - px4, y + py0, x - px3, y + py1) $o1.curve(x - rx, y, x - px1, y + py3, x - px0, y + py4) $o1.curve(x - px2, y - py2, x - px0, y - py4, x - px1, y - py3) $o1.curve(x, y - ry, x - px3, y - py1, x - px4, y - py0) $o1.curve(x + px2, y - py2, x + px4, y - py0, x + px3, y - py1) $o1.curve(x + rx, y, x + px1, y - py3, x + px0, y - py4) $o1.close } for i=1,ncolor-1 { mkgl(sq[i],i,0,0) mkgl(SQ[i], i, 1,0) mkgl(tri[i],i,0,1) mkgl(TRI[i], i, 1,1) mkgl(oh[i],i,0,2) mkgl(OH[i], i, 1,2) } proc connecEx() {local numpost, numpre, numpresyn, x, y, sizemax, size, color, tt sizemax = 10 //numpost = nEx //numpre = nEx numpost = 1 numpre = 1 numpresyn = nEx_Ex // IF FIRST CALL OPEN GRAPH AND GET INITIAL Ws if (connecEECount==0) { plotconnecEx = new Graph(1) plotconnecEx.size(0,numpost,-2,numpre) //plotconnecEx.view(0,numpost,-2,numpre, 100,0,100,100) //for (x=0;x<numpost;x=x+1) { x = 1 for (y=0;y<numpresyn;y=y+1) { baseweights[x][y]=sExEx[x][y].gmaxAMPA } //} } // end of connecEECount=0 plotconnecEx.erase_all() //for (x=0;x<numpost;x=x+1) { x = 1 //connecEEselec[x][stim-1] = Ex[x].soma.Ca_CaSOMA for (y=0;y<numpresyn;y=y+1) { ypoint = sExEx[x][y].precell size = (sExEx[x][y].gmaxAMPA-connecEEminW)/(connecEEmaxW-connecEEminW)*sizemax+1 if (sExEx[x][y].gmaxAMPA>=connecEEmaxW) { color = 2 } else { color = 3 } plotconnecEx.glyph(sq[color], x+y*0.01,ypoint, size, size, 0) size = (baseweights[x][y]-connecEEminW)/(connecEEmaxW-connecEEminW)*sizemax+1 plotconnecEx.glyph(SQ[3], x+y*0.01,ypoint, size, size, 0) } // plotconnecEx.beginline(1,2) // plotconnecEx.line(x+0.1,0) // plotconnecEx.line(x+0.1,Ex1[x].soma.Ca_CaSOMA) //} connecEECount=1 plotconnecEx.label(0.5,0.95,"Triang=Inh->Ex") plotconnecEx.label(0.5,0.9,"Circ=Ex->Inh") plotconnecEx.crosshair_action("ExConnections") } // END proc connecEE() ///////////////// Ex->Inh Weights connecExInhCount = 0 //counts # of times connecEE was called connecExInhminW = 0 connecExInhmaxW = AmpaMaxExInh double baseweightsExInh[nInh][nEx_Inh] //double connecEEselec[nEx][numStim] proc connecExInh() {local numpost, numpre, numpresyn, x, y, sizemax, size, color sizemax = 10 numpost = nInh numpre = nEx numpresyn = nEx_Inh // IF FIRST CALL OPEN GRAPH AND GET INITIAL Ws if (connecExInhCount==0) { for (x=0;x<numpost;x=x+1) { for (y=0;y<numpresyn;y=y+1) { baseweightsExInh[x][y]=sExInh[x][y].gmaxAMPA } } } // end of connecEECount=0 for (x=0;x<numpost;x=x+1) { //connecEEselec[x][stim-1] = Ex[x].soma.Ca_CaSOMA for (y=0;y<numpresyn;y=y+1) { ypoint = sExInh[x][y].precell size = (baseweightsExInh[x][y]-connecExInhminW)/(connecExInhmaxW-connecExInhminW)*sizemax+1 plotconnecEx.glyph(OH[4], x+y*0.01+0.2,ypoint,size, size,0) size = (sExInh[x][y].gmaxAMPA-connecExInhminW)/(connecExInhmaxW-connecExInhminW)*sizemax+1 if (sExInh[x][y].gmaxAMPA>=connecExInhmaxW) { color = 2 } else { color = 4 } plotconnecEx.glyph(oh[color], x+y*0.01+0.2,ypoint,size,size,0) } // plotconnecEx.beginline(1,2) // plotconnecEx.line(x+0.1,0) // plotconnecEx.line(x+0.1,Ex1[x].soma.Ca_CaSOMA) } connecExInhCount=1 } // END proc connecEE() ///////////////// Inh->Ex Weights connecInhExCount = 0 //counts # of times connecEE was called connecInhExminW = 0.002 connecInhExmaxW = GabaMax double baseweightsInhEx[nEx][nInh_Ex] proc connecInhEx() {local numpost, numpre, numpresyn, x, y, sizemax, size, color sizemax = 10 numpost = nEx numpre = nInh numpresyn = nInh_Ex // IF FIRST CALL OPEN GRAPH AND GET INITIAL Ws if (connecInhExCount==0) { x = 1 //for (x=0;x<numpost;x=x+1) { for (y=0;y<numpresyn;y=y+1) { baseweightsInhEx[x][y]=sInhEx[x][y].gmaxGABA } //} } // end of connecEECount=0 //for (x=0;x<numpost;x=x+1) { x = 1 //connecEEselec[x][stim-1] = Ex[x].soma.Ca_CaSOMA for (y=0;y<numpresyn;y=y+1) { ypoint = sInhEx[x][y].precell size = (baseweightsInhEx[x][y]-connecInhExminW)/(connecInhExmaxW-connecInhExminW)*sizemax+1 plotconnecEx.glyph(TRI[6], x+y*0.01,ypoint+0.2,size,size,0) size = (sInhEx[x][y].gmaxGABA-connecInhExminW)/(connecInhExmaxW-connecInhExminW)*sizemax+1 if (sInhEx[x][y].gmaxGABA>=connecInhExmaxW) { color = 2 } else { color = 7 } plotconnecEx.glyph(tri[color],x+y*0.01,ypoint+0.2,size,size,0) } // plotconnecEx.beginline(1,2) // plotconnecEx.line(x+0.1,0) // plotconnecEx.line(x+0.1,Ex1[x].soma.Ca_CaSOMA) //} connecInhExCount=1 } // END proc connecEE() //////////////////////////////////////////////////////////////////////////////////// //////////////////// INTERACTIVE CONNECTIVITY ////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// proc ExConnections() {local numpost, numpre, post, pre, numpresyn, x, y, sizemax, size, color post = int($1) plotconnecEx.beginline(2,2) plotconnecEx.line(post,0) plotconnecEx.line(post,-1) numpresyn = nEx_Ex for (y=0;y<numpresyn;y=y+1) { ypoint = sExEx[post][y].precell plotconnecEx.mark(0,ypoint,"S",8,5,1) print "Post=",post,"Pre=",ypoint,"W=",sExEx[post][y].gmaxAMPA,"D=",sExEx[post][y].Delay } yscale = nEx/nInh numpresyn = nInh_Ex for (y=0;y<numpresyn;y=y+1) { ypoint = sInhEx[post][y].precell plotconnecEx.mark(post,ypoint*yscale,"T",6,4,1) } } proc PrintConnections() { post = int($1) strdef dummystr numpresyn = nEx_Ex for (y=0;y<numpresyn;y=y+1) { sprint(dummystr,"Post=%4d, ExPre(%3d)=%4d, W=%10.8f, D=%4.2f",post,y,sExEx[post][y].precell,sExEx[post][y].gmaxAMPA,sExEx[post][y].Delay) print dummystr } }