// Channel layout from Poirazi, Brannon and Mel (2001) // =============================================================================== // parameters // ---------- v_init=-70 celsius = 34 RmSoma = 200000 // ohmcm2 RaSoma = 50 // ohmcm CmSoma = 1 ENa = 50 EK = -80 ECa = 140 El = -70 // calculated so that Vrest=-70 everywhere !!! // =============================================================================== // variable defaults // ----------------- // section and location of holding point 157 microns from soma (determines conductances for oblique branches) objref hold_sec,prev_hold_sec objref hold_sec1 objref hold_sec2 func find_max() { local dx,max max=0 forsec dendrite_apical_trunk_section_list { for (x) { dx=vdist_co(x) if (dx>max) { max=dx } } } return max } proc find_hold() { local hold_dist,dx,prev_dx,prev_hold_loc hold_dist=$1 hold_loc=0 prev_hold_loc=0 dx=0 prev_dx=0 forsec dendrite_apical_trunk_section_list { for (x) { dx=vdist_co(x) if (prev_dx>-1) { if (dx>hold_dist) { if (dx-hold_dist>hold_dist-prev_dx) { hold_sec=new SectionRef() hold_loc=x } else { hold_sec=prev_hold_sec hold_loc=prev_hold_loc } prev_dx=-1 // after passing hold_dist, no need to check any more } else { prev_hold_sec=new SectionRef() prev_hold_loc=x prev_dx=dx } } } } } max_trunk_dist=find_max() // distance of farthest point on the trunk find_hold(157) hold_sec.sec hold_sec1=new SectionRef() hold_loc1=hold_loc find_hold(50) hold_sec.sec hold_sec2=new SectionRef() hold_loc2=hold_loc tmp=0 dx=0 // conductance in mho/cm2 // ---------------------- // soma SGNa = 7/1000 SNaATT = 1 // 1=no slow attenuation of the sodium current (0=maximum slow attenuation) SGKdr = 1.4/1000 SDND = 0 // flag: 0=not a dendritic section; 1=a dendritic section SGKA = 7.5/1000 SGNah = 7.8/1000 SGCaT = 0.05/1000 SGCaR = 3/1000 SGCaL = 7/1000 SGAHPs = 0.5/1000 SGAHPm = 82.5/1000 SGKm = 60/1000 // apical trunk DaTGNa = 7/1000 DaTNaATT = 0 // 0=slow attenuation of the sodium current (1=no slow attenuation) DaTGKdr = 0.867/1000 DaTDND = 1 // flag: 0=not a dendritic section; 1=a dendritic section DaTGKAp = 7.5/1000 DaTGKAd = 7.2/1000 DaTGNah = 7.8/1000 DaTGCaT = 0.1/1000 DaTGCaR = 0.03/1000 DaTGCaL = 0.333/1000 DaTGAHPs = 0.1/1000 DaTGAHPm = 15/1000 DaTGKm = 60/1000 // apical oblique branches DaOGNa = 7/1000 DaONaATT = DaTNaATT // not used DaOGKdr = 0.867/1000 DaODND = 1 // flag: 0=not a dendritic section; 1=a dendritic section DaOGKAd = DaTGKAd // not used DaOGNah = DaTGNah // not used DaOGCaT = DaTGCaT // not used DaOGCaR = DaTGCaR // not used DaOGCaL = DaTGCaL // not used DaOGAHPs = DaTGAHPs // not used DaOGAHPm = DaTGAHPm // not used DaOGKm = 120/1000 DaOGNap = 2.8/1000 // basal tree DbGNa = 7/1000 DbGKdr = 0.867/1000 DbDND = 1 // flag: 0=not a dendritic section; 1=a dendritic section DbGKAp = DaTGKAp // not used DbGKAd = DaTGKAd // not used DbGNah = SGNah // axon AxGNa = 10/1000 AxGKdr = 2/1000 AxDND = 0 // flag: 0=not a dendritic section; 1=a dendritic section // =============================================================================== // user access flag; conductance parameter flag; [gui name]; [variable name]; // ([] - if user access flag==1) // variable value; range distribution formula // Soma ////////////////////////////////////////////////////////////////////////////////////////// subtree = new Subtree("Soma",soma_section_list) channel = new Channel("hha2_P") channel.add_parameter(new Channel_Parameter(0,0,"gl_hha2_P",1/RmSoma,"gl_hha2_P=1/RmSoma")) channel.add_parameter(new Channel_Parameter(1,1,"gnabar_hha2_P","g Na+ (fast)","SGNa",SGNa,"gnabar_hha2_P=SGNa")) channel.add_parameter(new Channel_Parameter(0,0,"ar2_hha2_P",SNaATT,"ar2_hha2_P=SNaATT")) channel.add_parameter(new Channel_Parameter(1,1,"gkbar_hha2_P","g K+ (dr)","SGKdr",SGKdr,"gkbar_hha2_P=SGKdr")) channel.add_parameter(new Channel_Parameter(0,0,"dend_hha2_P",SDND,"dend_hha2_P=SDND")) channel.add_parameter(new Channel_Parameter(0,0,"ena",ENa,"ena=ENa")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) channel.add_parameter(new Channel_Parameter(0,0,"el_hha2_P",El,"el_hha2_P=El")) channel.add_parameter(new Channel_Parameter(0,0,"Ra",RaSoma,"Ra=RaSoma")) channel.add_parameter(new Channel_Parameter(0,0,"cm",CmSoma,"cm=CmSoma")) subtree.add_channel(channel) channel = new Channel("kap_P") channel.add_parameter(new Channel_Parameter(1,1,"gkabar_kap_P","g K+ (Ap)","SGKA",SGKA,"gkabar_kap_P=SGKA")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("h_P") channel.add_parameter(new Channel_Parameter(1,1,"gbar_h_P","g Na+ (h)","SGNah",SGNah,"gbar_h_P=SGNah")) channel.add_parameter(new Channel_Parameter(0,0,"ena",ENa,"ena=ENa")) subtree.add_channel(channel) channel = new Channel("cat_P") channel.add_parameter(new Channel_Parameter(1,1,"gcatbar_cat_P","g Ca++ (T)","SGCaT",SGCaT,"gcatbar_cat_P=SGCaT")) channel.add_parameter(new Channel_Parameter(0,0,"eca",ECa,"eca=ECa")) subtree.add_channel(channel) channel = new Channel("somacar_P") channel.add_parameter(new Channel_Parameter(1,1,"gcabar_somacar_P","g Ca++ (R)","SGCaR",SGCaR,"gcabar_somacar_P=SGCaR")) channel.add_parameter(new Channel_Parameter(0,0,"eca",ECa,"eca=ECa")) subtree.add_channel(channel) channel = new Channel("cal_P") channel.add_parameter(new Channel_Parameter(1,1,"gcalbar_cal_P","g Ca++ (L)","SGCaL",SGCaL,"gcalbar_cal_P=SGCaL")) channel.add_parameter(new Channel_Parameter(0,0,"eca",ECa,"eca=ECa")) subtree.add_channel(channel) channel = new Channel("cad_P") subtree.add_channel(channel) channel = new Channel("kca_P") channel.add_parameter(new Channel_Parameter(1,1,"gbar_kca_P","g K+ (AHPs)","SGAHPs",SGAHPs,"gbar_kca_P=SGAHPs")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("mykca_P") channel.add_parameter(new Channel_Parameter(1,1,"gkbar_mykca_P","g K+ (AHPm)","SGAHPm",SGAHPm,"gkbar_mykca_P=SGAHPm")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("km_P") channel.add_parameter(new Channel_Parameter(1,1,"gbar_km_P","g K+ (m)","SGKm",SGKm,"gbar_km_P=SGKm")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) LAYOUT.add_subtree(subtree) // Apical Trunk ////////////////////////////////////////////////////////////////////////////////////////// // ---------------------------------------------------------------------------------------- // procedures for distance-dependednt assignments proc apical_gl_hha2_P_x() { for (x) { dx=vdist_co(x) gl_hha2_P(x)=(1+exp((200-dx)/50))/(RmSoma*exp((200-dx)/50)+5000) } } proc apical_ar2_hha2_P_x() { for (x) { dx=vdist_co(x) ar2_hha2_P(x)=1-dx/max_trunk_dist } } proc apical_gkabar_kap_P_x() { for (x) { dx=vdist_co(x) if (dx<=100) { gkabar_kap_P(x)=DaTGKAp } else { gkabar_kap_P(x)=0 } } } proc apical_gkabar_kad_P_x() { for (x) { dx=vdist_co(x) if (dx<=100) { gkabar_kad_P(x)=0 } else { if (dx<=350) { gkabar_kad_P(x)=DaTGKAd*8*dx/350 } else { gkabar_kad_P(x)=DaTGKAd*8 }} } } proc apical_gbar_h_P_x() { for (x) { dx=vdist_co(x) gbar_h_P(x)=DaTGNah+(9*DaTGNah-DaTGNah)/(1+exp((280-dx)/50)) } } proc apical_gcatbar_cat_P_x() { for (x) { dx=vdist_co(x) if (dx<100) { gcatbar_cat_P(x)=0 } else { gcatbar_cat_P(x)=DaTGCaT*4*dx/350 } } } proc apical_gcalbar_calH_P_x() { for (x) { dx=vdist_co(x) if (dx<50) { gcalbar_calH_P(x)=0.1*DaTGCaL } else { gcalbar_calH_P(x)=4.6*DaTGCaL } } } proc apical_gbar_kca_P_x() { for (x) { dx=vdist_co(x) if (dx>50 && dx<200) { gbar_kca_P(x)=5*DaTGAHPs } else { gbar_kca_P(x)=0.5*DaTGAHPs } } } proc apical_gkbar_mykca_P_x() { for (x) { dx=vdist_co(x) if (dx>50 && dx<200) { gkbar_mykca_P(x)=2*DaTGAHPm } else { gkbar_mykca_P(x)=0.25*DaTGAHPm } } } // ---------------------------------------------------------------------------------------- subtree = new Subtree("Apical Trunk",dendrite_apical_trunk_section_list) channel = new Channel("hha2_P") channel.add_parameter(new Channel_Parameter(0,0,"gl_hha2_P",1/RmSoma,"apical_gl_hha2_P_x()")) channel.add_parameter(new Channel_Parameter(1,1,"gnabar_hha2_P","g Na+ (fast)","DaTGNa",DaTGNa,"gnabar_hha2_P=DaTGNa")) channel.add_parameter(new Channel_Parameter(0,0,"ar2_hha2_P",DaTNaATT,"apical_ar2_hha2_P_x()")) channel.add_parameter(new Channel_Parameter(1,1,"gkbar_hha2_P","g K+ (dr)","DaTGKdr",DaTGKdr,"gkbar_hha2_P=DaTGKdr")) channel.add_parameter(new Channel_Parameter(0,0,"dend_hha2_P",DaTDND,"dend_hha2_P=DaTDND")) channel.add_parameter(new Channel_Parameter(0,0,"ena",ENa,"ena=ENa")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) channel.add_parameter(new Channel_Parameter(0,0,"el_hha2_P",El,"el_hha2_P=El")) channel.add_parameter(new Channel_Parameter(0,0,"Ra",RaSoma,"Ra=RaSoma")) channel.add_parameter(new Channel_Parameter(0,0,"cm",CmSoma,"cm=CmSoma")) subtree.add_channel(channel) channel = new Channel("kap_P") channel.add_parameter(new Channel_Parameter(1,1,"gkabar_kap_P","g K+ (Ap)","DaTGKAp",DaTGKAp,"apical_gkabar_kap_P_x()")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("kad_P") channel.add_parameter(new Channel_Parameter(1,1,"gkabar_kad_P","g K+ (Ad)","DaTGKAd",DaTGKAd,"apical_gkabar_kad_P_x()")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("h_P") channel.add_parameter(new Channel_Parameter(1,1,"gbar_h_P","g Na+ (h)","DaTGNah",DaTGNah,"apical_gbar_h_P_x()")) channel.add_parameter(new Channel_Parameter(0,0,"ena",ENa,"ena=ENa")) subtree.add_channel(channel) channel = new Channel("cat_P") channel.add_parameter(new Channel_Parameter(1,1,"gcatbar_cat_P","g Ca++ (T)","DaTGCaT",DaTGCaT,"apical_gcatbar_cat_P_x()")) channel.add_parameter(new Channel_Parameter(0,0,"eca",ECa,"eca=ECa")) subtree.add_channel(channel) channel = new Channel("car_P") channel.add_parameter(new Channel_Parameter(1,1,"gcabar_car_P","g Ca++ (R)","DaTGCaR",DaTGCaR,"gcabar_car_P=DaTGCaR")) channel.add_parameter(new Channel_Parameter(0,0,"eca",ECa,"eca=ECa")) subtree.add_channel(channel) channel = new Channel("calH_P") channel.add_parameter(new Channel_Parameter(1,1,"gcalbar_calH_P","g Ca++ (L)","DaTGCaL",DaTGCaL,"apical_gcalbar_calH_P_x()")) channel.add_parameter(new Channel_Parameter(0,0,"eca",ECa,"eca=ECa")) subtree.add_channel(channel) channel = new Channel("cad_P") subtree.add_channel(channel) channel = new Channel("kca_P") channel.add_parameter(new Channel_Parameter(1,1,"gbar_kca_P","g K+ (AHPs)","DaTGAHPs",DaTGAHPs,"apical_gbar_kca_P_x()")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("mykca_P") channel.add_parameter(new Channel_Parameter(1,1,"gkbar_mykca_P","g K+ (AHPm)","DaTGAHPm",DaTGAHPm,"apical_gkbar_mykca_P_x()")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("km_P") channel.add_parameter(new Channel_Parameter(1,1,"gbar_km_P","g K+ (m)","DaTGKm",DaTGKm,"gbar_km_P=DaTGKm")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) LAYOUT.add_subtree(subtree) // Oblique apical branches ////////////////////////////////////////////////////////////////////////////////////////// objref last_oblique last_oblique=new SectionList() ok=1 forsec dendrite_apical_obliques_section_list { secref=new SectionRef() } secref.sec last_oblique.append() // ---------------------------------------------------------------------------------------- // procedure for distance-dependednt assignments proc oblique_x() { local n,loc a=$1 b=$2 secref=new SectionRef() ifsec last_oblique { // run this loop only for the last section (since it updates all sections) n=0 forsec dendrite_apical_obliques_section_list { for (x) { dx=vdist_co(x) if (distance(x)-tcd.x(n)<=50) { sprint(cmd,"tcs.object(%d).sec tmp=%s(%g)",n,param.param_name,tcl.x(n)) execute(cmd) sprint(cmd,"%s(x)=tmp",param.param_name) execute(cmd) } else { sprint(cmd,"hold_sec1.sec tmp=%s(hold_loc1)",param.param_name) // parameter value at holding point on trunk execute(cmd) if (dx<300) { sprint(cmd,"%s(x)=tmp",param.param_name) execute(cmd) } else { sprint(cmd,"%s(x)=a*tmp+b",param.param_name) execute(cmd) } } } n+=1 } } access secref.sec } // ---------------------------------------------------------------------------------------- subtree = new Subtree("Apical Oblique Branches",dendrite_apical_obliques_section_list) channel = new Channel("hha2_P") channel.add_parameter(new Channel_Parameter(0,0,"gl_hha2_P",1/RmSoma,"oblique_x(1,0)")) // no specification of leak beyond 300 channel.add_parameter(new Channel_Parameter(1,1,"gnabar_hha2_P","g Na+ (fast)","DaOGNa",DaOGNa,"gnabar_hha2_P=DaOGNa")) channel.add_parameter(new Channel_Parameter(0,0,"ar2_hha2_P",DaONaATT,"oblique_x(0,0.95)")) channel.add_parameter(new Channel_Parameter(1,1,"gkbar_hha2_P","g K+ (dr)","DaOGKdr",DaOGKdr,"gkbar_hha2_P=DaOGKdr")) channel.add_parameter(new Channel_Parameter(0,0,"dend_hha2_P",DaODND,"dend_hha2_P=DaODND")) channel.add_parameter(new Channel_Parameter(0,0,"ena",ENa,"ena=ENa")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) channel.add_parameter(new Channel_Parameter(0,0,"el_hha2_P",El,"el_hha2_P=El")) channel.add_parameter(new Channel_Parameter(0,0,"Ra",RaSoma,"Ra=RaSoma")) channel.add_parameter(new Channel_Parameter(0,0,"cm",CmSoma,"cm=CmSoma")) subtree.add_channel(channel) channel = new Channel("kad_P") channel.add_parameter(new Channel_Parameter(0,1,"gkabar_kad_P",DaOGKAd,"oblique_x(1.9,0)")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("h_P") channel.add_parameter(new Channel_Parameter(0,1,"gbar_h_P",DaOGNah,"oblique_x(1,0)")) // no specification beyond 300 microns channel.add_parameter(new Channel_Parameter(0,0,"ena",ENa,"ena=ENa")) subtree.add_channel(channel) channel = new Channel("cat_P") channel.add_parameter(new Channel_Parameter(0,1,"gcatbar_cat_P",DaOGCaT,"oblique_x(1,0)")) // no specification beyond 300 microns channel.add_parameter(new Channel_Parameter(0,0,"eca",ECa,"eca=ECa")) subtree.add_channel(channel) channel = new Channel("car_P") channel.add_parameter(new Channel_Parameter(0,1,"gcabar_car_P",DaOGCaR,"oblique_x(13,0)")) channel.add_parameter(new Channel_Parameter(0,0,"eca",ECa,"eca=ECa")) subtree.add_channel(channel) channel = new Channel("calH_P") channel.add_parameter(new Channel_Parameter(0,1,"gcalbar_calH_P",DaOGCaL,"oblique_x(14,0)")) channel.add_parameter(new Channel_Parameter(0,0,"eca",ECa,"eca=ECa")) subtree.add_channel(channel) channel = new Channel("cad_P") subtree.add_channel(channel) channel = new Channel("kca_P") channel.add_parameter(new Channel_Parameter(0,1,"gbar_kca_P",DaOGAHPs,"oblique_x(0,5*DaOGAHPs)")) // it says ginit and not ghold channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("mykca_P") channel.add_parameter(new Channel_Parameter(0,1,"gkbar_mykca_P",DaOGAHPm,"oblique_x(1,0)")) // no specification channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("km_P") channel.add_parameter(new Channel_Parameter(1,1,"gbar_km_P","g K+ (m)","DaOGKm",DaOGKm,"gbar_km_P=DaOGKm")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("nap_P") channel.add_parameter(new Channel_Parameter(1,1,"gnabar_nap_P","g Na+ (p)","DaOGNap",DaOGNap,"gnabar_nap_P=DaOGNap")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) LAYOUT.add_subtree(subtree) // Basal tree ////////////////////////////////////////////////////////////////////////////////////////// subtree = new Subtree("Basal Dendrite",dendrite_basal_section_list) channel = new Channel("hha2_P") channel.add_parameter(new Channel_Parameter(0,0,"gl_hha2_P",1/RmSoma,"hold_sec2.sec { tmp=gl_hha2_P(hold_loc2) } gl_hha2_P=tmp")) channel.add_parameter(new Channel_Parameter(1,1,"gnabar_hha2_P","g Na+ (fast)","DbGNa",DbGNa,"gnabar_hha2_P=DbGNa")) channel.add_parameter(new Channel_Parameter(1,1,"gkbar_hha2_P","g K+ (dr)","DbGKdr",DbGKdr,"gkbar_hha2_P=DbGKdr")) channel.add_parameter(new Channel_Parameter(0,0,"dend_hha2_P",DbDND,"dend_hha2_P=DbDND")) channel.add_parameter(new Channel_Parameter(0,0,"ena",ENa,"ena=ENa")) channel.add_parameter(new Channel_Parameter(0,0,"ek_P",EK,"ek=EK")) channel.add_parameter(new Channel_Parameter(0,0,"el_hha2_P",El,"el_hha2_P=El")) channel.add_parameter(new Channel_Parameter(0,0,"Ra",RaSoma,"Ra=RaSoma")) channel.add_parameter(new Channel_Parameter(0,0,"cm",CmSoma,"cm=CmSoma")) subtree.add_channel(channel) channel = new Channel("kap_P") channel.add_parameter(new Channel_Parameter(0,1,"gkabar_kap_P",DbGKAp,"hold_sec2.sec { tmp=gkabar_kap_P(hold_loc2) } gkabar_kap_P=1.6*tmp")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("kad_P") channel.add_parameter(new Channel_Parameter(0,1,"gkabar_kad_P",DbGKAd,"hold_sec2.sec { tmp=gkabar_kad_P(hold_loc2) } gkabar_kad_P=1.6*tmp")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) subtree.add_channel(channel) channel = new Channel("h_P") channel.add_parameter(new Channel_Parameter(0,1,"gbar_h_P",DbGNah,"gbar_h_P=DbGNah")) channel.add_parameter(new Channel_Parameter(0,0,"na",ENa,"ena=ENa")) subtree.add_channel(channel) LAYOUT.add_subtree(subtree) // Axon ////////////////////////////////////////////////////////////////////////////////////////// subtree = new Subtree("Axon",axon_section_list) channel = new Channel("hha2_P") channel.add_parameter(new Channel_Parameter(0,0,"gl_hha2_P",1/RmSoma,"gl_hha2_P=1/RmSoma")) channel.add_parameter(new Channel_Parameter(1,1,"gnabar_hha2_P","g Na+ (fast)","AxGNa",AxGNa,"gnabar_hha2_P=AxGNa")) channel.add_parameter(new Channel_Parameter(1,1,"gkbar_hha2_P","g K+ (dr)","AxGKdr",AxGKdr,"gkbar_hha2_P=AxGKdr")) channel.add_parameter(new Channel_Parameter(0,0,"dend_hha2_P",AxDND,"dend_hha2_P=AxDND")) channel.add_parameter(new Channel_Parameter(0,0,"ena",ENa,"ena=ENa")) channel.add_parameter(new Channel_Parameter(0,0,"ek",EK,"ek=EK")) channel.add_parameter(new Channel_Parameter(0,0,"el_hha2_P",El,"el_hha2_P=El")) channel.add_parameter(new Channel_Parameter(0,0,"Ra",RaSoma,"Ra=RaSoma")) channel.add_parameter(new Channel_Parameter(0,0,"cm",CmSoma,"cm=CmSoma")) subtree.add_channel(channel) LAYOUT.add_subtree(subtree) // --------------------------------------------------------------------------------------