/* Relating dendritic geometry and signal propagation */ /* Philipp Vetter, Arnd Roth and Michael Hausser */ /* neuronprefs.hoc Version 1.0 11.10.1999 */ proc add_cell() { /* $s1 strdef "p18" */ /* $s2 "p18.hoc" */ /* celladdress /Nigra2a955-1.nrn */ /* cell ../data/cells/Nigra2a955-1.nrn */ /* cellname Nigra 2 */ /* add_cell("asp","/lcAS3.hoc","Aspiny L3",1,"soma") */ {sprint(str1,"objref %s",$s1) execute(str1)} {sprint(str1,"%s = new MyCell()",$s1) execute(str1)} {sprint(str1,"%s.loc = \"../data/cells/%s\"",$s1,$s2) execute(str1)} {sprint(str1,"%s.tag = \"/%s\"",$s1,$s2) execute(str1)} {sprint(str1,"%s.n = \"%s\"",$s1,$s3) execute(str1)} {sprint(str1,"%s.spinescale = %f",$s1,$4) execute(str1)} {sprint(str1,"%s.somatic = \"%s\"",$s1,$s5) execute(str1)} if (numarg()>5) str1 = $s6 else str1 = "" {sprint(str1,"%s.distal = \"%s\"",$s1,str1) execute(str1)} if (strob.substr($s3,"Pyramidal")>-1) type = 0 if (strob.substr($s3,"Nigra")>-1) type = 1 if (strob.substr($s3,"Purkinje")>-1) type = 2 if (strob.substr($s3,"DG granule cell")>-1) type = 3 if (strob.substr($s3,"DG interneuron")>-1) type = 4 if (strob.substr($s3,"CA1 Pyramidal")>-1) type = 5 if (strob.substr($s3,"CA3 Pyramidal")>-1) type = 6 if (strob.substr($s3,"CA3 interneuron")>-1) type = 7 {sprint(str1,"%s.type = %d",$s1,type) execute(str1)} } add_cell("pjs","pjs.hoc","Pyramidal L5 Schiller",1.96,"somaA") add_cell("ca3d","l56b.hoc","CA3 Pyramidal 4",1.89,"soma[0]") add_cell("int4","n260.hoc","DG interneuron 4",1,"soma[0]") add_cell("P1","Rapp_cell1","Purkinje 1",100,"soma") add_cell("P20","P20.hoc","Purkinje 20",10,"soma") add_cell("pds","pds.hoc","Pyramidal L5 Smetters",1.96,"somaE") add_cell("gc5 ","claiborne1.hoc","DG granule cell 5",1.6,"soma") add_cell("gc6 ","claiborne2.hoc","DG granule cell 6",1.6,"soma") add_cell("gc7 ","claiborne3.hoc","DG granule cell 7",1.6,"soma") add_cell("gc8 ","claiborne4.hoc","DG granule cell 8",1.6,"soma") add_cell("l23","j8.hoc","Pyramidal L2/3",1,"soma") add_cell("p22","p22.hoc","Pyramidal L5 22",1.96,"somaC") add_cell("p21","p21.hoc","Pyramidal L5 21",1.96 ,"somaB") add_cell("p18","p18.hoc","Pyramidal L5 18",1.96 ,"somaA") add_cell("par","par.hoc","Pyramidal L5 Roth",1.96 ,"somaD") add_cell("n2","Nigra2a955-1.nrn","Nigra 2",1 ,"soma") add_cell("n11","Nigra11h941-1.nrn","Nigra 11",1,"soma") add_cell("n12","n12.hoc","Nigra 12",1,"somaA") add_cell("n24","n24.hoc","Nigra 24",1,"somaA") add_cell("P19","P19.hoc","Purkinje 19",10,"soma") add_cell("P2","Rapp_cell2","Purkinje 2",100,"soma") add_cell("P3","Rapp_cell3","Purkinje 3",100,"soma") add_cell("ca1a","n121.hoc","CA1 Pyramidal 1",1.89,"soma[0]") //add_cell("ca1b","n177.hoc","CA1 Pyramidal 2",1.89,"soma[0]") //add_cell("ca1c","n179.hoc","CA1 Pyramidal 3",1.89,"soma") //add_cell("ca1d","n403.hoc","CA1 Pyramidal 4",1.89,"soma[0]") //add_cell("ca1e","n404.hoc","CA1 Pyramidal 5",1.89,"soma[0]") //add_cell("ca1f","822.hoc","CA1 Pyramidal 6",1.89,"soma[0]") add_cell("ca1g","503c.hoc","CA1 Pyramidal 7",1.89,"soma") add_cell("ca1h","602c.hoc","CA1 Pyramidal 8",1.89,"soma") add_cell("ca1i","913c.hoc","CA1 Pyramidal 9",1.89,"soma") //add_cell("ca1j","n417.hoc","CA1 Pyramidal 10",1.89,"soma") //add_cell("ca3a","l10.hoc","CA3 Pyramidal 1",1.89,"soma[0]") add_cell("ca3b","l24b.hoc","CA3 Pyramidal 2",1.89,"soma[0]") add_cell("ca3c","l60a.hoc","CA3 Pyramidal 3",1.89,"soma[0]") //add_cell("ca3e","l48b.hoc","CA3 Pyramidal 5",1.89,"soma[1]") //add_cell("ca3f","l51.hoc","CA3 Pyramidal 6",1.89,"soma[5]") add_cell("ca3g","960924b.nrn","CA3 Pyramidal 7",1.89,"soma") add_cell("ca3h","970529c.nrn","CA3 Pyramidal 8",1.89 ,"soma") //add_cell("gc1 ","n270.hoc","DG granule cell 1",1.6 ,"soma[0]") //add_cell("gc2 ","n271.hoc","DG granule cell 2",1.6,"soma[0]") add_cell("gc3 ","n503.hoc","DG granule cell 3",1.6,"soma[0]") add_cell("gc4 ","n517.hoc","DG granule cell 4",1.6,"soma[0]") add_cell("int1","n257.hoc","DG interneuron 1",1,"soma[0]") add_cell("int2","n258.hoc","DG interneuron 2",1,"soma[0]") add_cell("int3","n259.hoc","DG interneuron 3",1,"soma[0]") add_cell("int5","n250.hoc","DG interneuron 5",1,"soma[0]") add_cell("int6","n262.hoc","DG interneuron 6",1,"soma[0]") //add_cell("ca3int1","960824a.nrn","CA3 interneuron 1",1,"soma[1]") add_cell("ca3int2","960210b.nrn","CA3 interneuron 2",1,"soma") add_cell("ca3int3","960217e.nrn","CA3 interneuron 3",1,"soma") add_cell("ca3int4","960816d.nrn","CA3 interneuron 4",1,"soma") add_cell("ca3int5","970213b.nrn","CA3 interneuron 5",1,"soma") add_cell("ca3int6","960427a.nrn","CA3 interneuron 6",1,"soma[1]") // add_cell("asp","lcAS3.hoc","Aspiny L3",1,"soma") // add_cell("ste","j7.hoc","Stellate L4",1,"soma") printcellnameact = 1 /********************************************************************/ proc cell_name() { local n,i, f f = -1 for i=0,CellList.count-1 { if (strcmp($s1,CellList.object(i).loc)==0) f=i } if (f>-1) { cellname = CellList.object(f).n core = CellList.object(f).loc } set_suffix() /* adding suffixes */ if (strob.substr(cellname,suffix)==-1) sprint(cellname,"%s%s",cellname,suffix) sprint(cell,"%s%s",core,suffix) // eg ../data/cells/P19.hocequiv strob.tail(cell,"cells",celladdress) // eg /P19.hocequiv // equivalent cables are contingent on the active model, so they are stored in // ../data/ActiveModel/equiv/celladdress if (equiv) sprint(cell,"../data/%s/equiv%s",ActiveModel,celladdress) activecell=cellname sprint(cellnameact,"%s using %s conductances",activecell,actname) if (printcellnameact) print cellnameact } /********************************************************************/ proc set_suffix() { if (numarg()==1) { suffix="" equiv=0 forward=0 hdecay=0 } if(forward){if (strob.substr(suffix,"forward200")==-1) sprint(suffix,"%sforward200",suffix)} if(hdecay){strob.tail(core,"cells",celladdress) readveca("halfdecay") suffix=halfdecay_maxlocation} if (equiv){if (strob.substr(suffix,"equiv")==-1) sprint(suffix,"%sequiv",suffix)} } /********************************************************************/ proc set_spinedensity() { /* set spinescale (by hand for each neuron) */ spinescale = 1 spinescaleII = 1 for i=0,CellList.count-1 { if (strcmp($s1,CellList.object(i).loc)==0) f=i } spinescale = CellList.object(f).spinescale if (strob.substr($s1,P19.loc)>-1) dendII() /* special case Purkinje cells */ if (strob.substr($s1,P20.loc)>-1) dendII() if (strob.substr($s1,P1.loc)>-1) dendIII() if (strob.substr($s1,P2.loc)>-1) dendIII() if (strob.substr($s1,P3.loc)>-1) dendIII() if (equiv) spinescale = 1 spine_set() } /**************************************************************/ proc dendII() { /* make SectionList dendrites II for Roth Purkinje cells */ spinescale = 5.34 spinescaleII = 1.2 forsec cf dendritesII.append() forsec dendritesII dendritesI.remove() } /**************************************************************/ proc dendIII() { /* make SectionList dendritesIII for Rapp cells */ // forsec dendrites if (diam(0.5) <= 2.2) { dendritesIII.append() spinescale = 5.34 spinescaleII = 1.2 forsec dendrites if (diam(0.5) > 2.2) { dendritesII.append() dendritesI.remove() } // spinescale = 1 } /**************************************************************/ proc swc_format() { local a /* parsing step for neurons from Duke Southampton Archive */ forsec "axon" disconnect() forsec "axon" delete_section() execute("soma[0] Soma = new SectionRef()") a = 0 forsec "soma" for(x) a += area(x) equivdiam = sqrt(a/(4*PI)) swc = 1 } /**************************************************************/ proc make_sectionrefs() { local n, d, maxdist n = numarg() for i=0,CellList.count-1 { if (strcmp(cellname,CellList.object(i).n)==0) f=i } str1 = CellList.object(f).somatic /* define Soma */ if (equiv) str1 = "soma" sprint(str1,"%s Soma = new SectionRef()",str1) execute(str1) maxdist = 0 /* define Distal */ if (n==0) { Soma.sec origin = new SectionRef() Soma.sec origins = secname() originsec = new SectionList() sprint(str1,"%s originsec.append()",origins) execute(str1) Soma.sec Iclamp = new SectionRef() Soma.sec Vclamp = new SectionRef() Soma.sec Synapse = new SectionRef() } origin.sec distance(0,originx) all = new SectionList() forall all.append() forsec "node" all.remove() forsec "myelin" all.remove() forsec "iseg" all.remove() forsec "hill" all.remove() forsec all { d = distance(0.5) if (d > maxdist) { maxdist = d this_section() Distal = new SectionRef() } } if (!equiv) { if (strcmp(cell,p18.loc)==0) execute("dendA[184] Distal=new SectionRef()") if (strcmp(cell,p21.loc)==0) execute("dendB[232] Distal=new SectionRef()") if (strcmp(cell,p22.loc)==0) execute("dendC[134] Distal=new SectionRef()") if (strcmp(cell,pds.loc)==0) execute("dendE9[78] Distal=new SectionRef()") if (strcmp(cell,par.loc)==0) execute("dendD7_0111111111111 Distal=new SectionRef()") } }