// This function makes a set of lists, each containing the basal sections // that form a continuous path: starting from the section attached // to the trunk and ending at the basal tip section. // written by Yiota Poirazi, July 2001, poirazi@LNC.usc.edu // OLD CODE: ADJUSTED BY MARTINE ROSA GROEN (martine.groen@gmail.com) TO IMPLEMENT MULTIPLE MORPHOLOGIES, // this code refinement makes that the oblique path are traced automatically from an // ending to the trunk (Defined in apical-trunk-list), preventing the author to // manually type these paths with new morphologies (with the possible type errors) // The new code automatically trace back. This showed that the list below is tracing // some of the obliques all the way back to the soma (e.g. 5-4-3-2-1-0) while others // are only partially traced (e.g. 52-51-35 in stead of 52-51-35-21-19-18). It is not // clear why this is the case. However in the simulations of Sterratt et al, this // basal-paths list is not used, so all the code is commented out. /* objref bl[150],obl[150] blcount=0 bl[blcount]=new SectionList() dendrite[0] bl[blcount].append() dendrite[16] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[0] bl[blcount].append() dendrite[1] bl[blcount].append() dendrite[2] bl[blcount].append() dendrite[3] bl[blcount].append() dendrite[4] bl[blcount].append() dendrite[5] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[0] bl[blcount].append() dendrite[1] bl[blcount].append() dendrite[2] bl[blcount].append() dendrite[3] bl[blcount].append() dendrite[4] bl[blcount].append() dendrite[6] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[0] bl[blcount].append() dendrite[1] bl[blcount].append() dendrite[2] bl[blcount].append() dendrite[3] bl[blcount].append() dendrite[7] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[0] bl[blcount].append() dendrite[1] bl[blcount].append() dendrite[2] bl[blcount].append() dendrite[8] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[0] bl[blcount].append() dendrite[1] bl[blcount].append() dendrite[2] bl[blcount].append() dendrite[9] bl[blcount].append() dendrite[10] bl[blcount].append() dendrite[11] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[0] bl[blcount].append() dendrite[1] bl[blcount].append() dendrite[2] bl[blcount].append() dendrite[9] bl[blcount].append() dendrite[10] bl[blcount].append() dendrite[12] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[13] bl[blcount].append() dendrite[14] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[54] bl[blcount].append() dendrite[55] bl[blcount].append() dendrite[57] bl[blcount].append() dendrite[13] bl[blcount].append() dendrite[15] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[15] bl[blcount].append() dendrite[17] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[23] bl[blcount].append() dendrite[24] bl[blcount].append() dendrite[25] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[23] bl[blcount].append() dendrite[24] bl[blcount].append() dendrite[26] bl[blcount].append() dendrite[27] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[23] bl[blcount].append() dendrite[24] bl[blcount].append() dendrite[26] bl[blcount].append() dendrite[28] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[23] bl[blcount].append() dendrite[29] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[35] bl[blcount].append() dendrite[36] bl[blcount].append() dendrite[37] bl[blcount].append() dendrite[38] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[35] bl[blcount].append() dendrite[36] bl[blcount].append() dendrite[37] bl[blcount].append() dendrite[39] bl[blcount].append() dendrite[40] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[35] bl[blcount].append() dendrite[36] bl[blcount].append() dendrite[37] bl[blcount].append() dendrite[39] bl[blcount].append() dendrite[41] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[35] bl[blcount].append() dendrite[36] bl[blcount].append() dendrite[42] bl[blcount].append() dendrite[43] bl[blcount].append() dendrite[44] bl[blcount].append() dendrite[45] bl[blcount].append() dendrite[46] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[35] bl[blcount].append() dendrite[36] bl[blcount].append() dendrite[42] bl[blcount].append() dendrite[43] bl[blcount].append() dendrite[44] bl[blcount].append() dendrite[45] bl[blcount].append() dendrite[47] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[35] bl[blcount].append() dendrite[36] bl[blcount].append() dendrite[49] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[35] bl[blcount].append() dendrite[36] bl[blcount].append() dendrite[50] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[35] bl[blcount].append() dendrite[51] bl[blcount].append() dendrite[52] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[35] bl[blcount].append() dendrite[51] bl[blcount].append() dendrite[53] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[54] bl[blcount].append() dendrite[56] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[54] bl[blcount].append() dendrite[55] bl[blcount].append() dendrite[57] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) blcount=blcount + 1 bl[blcount]=new SectionList() dendrite[54] bl[blcount].append() dendrite[58] bl[blcount].append() obl[blcount]=new BasalPath(bl[blcount]) */ /* // START NEW CODE!! ///////////////////////////////////////////////////////////////// //Define new variables objref currentsection,soma_to_basalending, basalending_to_soma strdef soma_compartment soma_to_basalending=new SectionList() basalending_to_soma=new List() objref bl2[150],obl2[150] blcount2=-1 // to make the first counter in list pl 0 func issoma() { local x // return 1 if $o1.sec is the origin of the path forsec soma_list{ soma_compartment=secname() $o1.sec x=issection(soma_compartment) if (x==1) { return x } } return x // In this case 0 because it has not forfilled the x==1 if statement } obfunc trace_to_soma() { localobj path //path = new SectionList() path = new List() while (issoma(this)!=1) { // The function isorigin is defined in apical-trunk-list.hoc path.append(this) this = parsr(this) // the new this is the parent of the previous this } //this.sec path.append() // to add the trunk segment //path.append(this) return path } obfunc reverse_listbasal(){ localobj revlist,reftemp revlist=new SectionList() for(i=$o1.count()-1;i>=0;i=i-1) { reftemp=$o1.o(i) reftemp.sec revlist.append() } return revlist } forsec basal_tree_list { secname() currentsection=new SectionRef() if (currentsection.nchild==0){ //endsegment currentsection this = new SectionRef() basalending_to_soma=trace_to_soma() if(basalending_to_soma.count()!=1){ // Discard the endsegment of the trunk as being an oblique blcount2=blcount2+1 soma_to_basalending=reverse_listbasal(basalending_to_soma) bl2[blcount2]=new SectionList() bl2[blcount2]=soma_to_basalending obl2[blcount2]=new BasalPath(bl2[blcount2]) // to visually check the list of segments print to command line printf("new basal \n") print blcount2 forsec bl2[blcount2]{ print secname() } } } } */