/** * This is a template file for synapse placement at a set of locations. * As the morphology is a free parameter, you insert it. * * These template files all work by replacing bracket-percent???percent-bracket * enclosed segments with some value. The replacement is done with a MATLAB * script, and the template is the basis for a NEURON simulation, hence the * C-like commenting. So, for instance, the first line below will replace the * morphoFile string with whatever the user assigns to params(x).value where * params(x).idstr is "morphoFile". This is all done in generate_hocfiles.m, * so look there if the above sounds confusing. * * morpho: cell = <%morphoFile%> * variables: Rm = <%Rm%> * Ri = <%Ri%> * Cm = 1.5 * synalpha = <%synAlpha%> * sampInterval = .025 ms * simLen = <%simLen%> * output = <%outfilePath%>/<%outfileTag%>.out * */ strdef morphologyFile, parameterFile lineRead = 1 /* Definitions */ morphologyFile = "<%morphoFile%>.hoc" simLen = <%simLen%> // length of simulation in ms dt = <%dt%> // resolution of simulation samfreq_den = <%samp_dt%>/dt // resolution of data -- 0.025/.005 means every 5th is // sampled, so 1/.025=40 kHz (remember, .025 is ms) /* Load the cell file */ xopen (morphologyFile) fRm = <%Rm%> // membrane resistsance fCm = 1.5 // capactance fRi = <%Ri%> // intracellular resistivity v_init = -68 // base voltage -- note that this is where the simulation STARTS, // not Erest, which will stabilize based on active conductances // after some time tstop1 = simLen // when the simulation stops /* Membrane properties ... */ Rm = fRm // Ohm cm2 Cm = fCm // micro farad / cm 2 Rax = fRi // ohm cm // Derive the file to write to's name strdef fil_name // output filename sprint(fil_name, "<%outfilePath%>/<%outfileTag%>.out") g_m = 1 / Rm // membrane condctance -- this is what NEURON uses so we convert /* Create the leak conductance (and hence Rm) */ forall { Ra = Rax // axial resistivity = intracellular resistivity cm = Cm // membrane capacitiance } /* setup active conductances ; this uses the class variable you assign in * the morphology file, allowing this to work independent of morpho file * as long as that variable is used; specifically, * 1 = dendrite * 2 = SIZ (with KCa) * 3 = axon */ // Hodgkin Huxley conductance settings (HH throughout) gna_axon = <%gNaAxon%> //axonal, starting as the SIZ widens on axon side gkdr_axon = <%gKDrAxon%> gna_siz = <%gNa%> // concentration in the narrowing gkdr_siz = <%gKDr%> gna_dend = <%gNaDend%> // along the main trunk of the dendritic tree, for back-propogation, not initiation gkdr_dend = <%gKDrDend%> // settings for KCa -- only in SIZ gcal = <%gCaL%> // conductance for calcium channel (L-type like) gkca = <%gKCa%> // conductance for ca-dependent K channel // These parameters govern calcium clearance; see Peron and Gabbiani 2009 // nature neuroscience, and the accompanying biological cybernetics paper // from same year alphaCa = 0.006 // mM * cm2 / ms / mA tauCa = 132 // FIXED from GAbbiani and Krapp 2006 -- extrusion time constant kD = .030 // mM // For different compartment classes (dendrite, spike-initiation-zone, axon) // the conductance complement is different. This is reflected below. for i=1, nseg { access seg[i] if (cmpt_class[i] == 1) { // DEND (In future models, H-current) insert pas g_pas=g_m e_pas=v_init // this line creates passive properties } else if (cmpt_class[i] == 2) { // SIZ (HH + KCa) insert pas g_pas=g_m e_pas=v_init // this line creates passive properties insert HH_Na35 ena=70 gmax_HH_Na35=gna_siz insert HH_Kdr35 ek=-80 gmax_HH_Kdr35=gkdr_siz insert CaL eca=120 gmax_CaL=gcal insert CaInternal alpha_ca_CaInternal=alphaCa tau_ca_CaInternal=tauCa insert KCa gmax_KCa = gkca kD_ca = kD ek=-80 cai = 0 } else if (cmpt_class[i] == 3) { // AXON (HH only) insert pas g_pas=g_m e_pas=v_init // this line creates passive properties insert HH_Na35 ena=70 gmax_HH_Na35=gna_axon insert HH_Kdr35 ek=-80 gmax_HH_Kdr35=gkdr_axon } else if (cmpt_class[i] == 4) { // proximal dendritic trunk insert pas g_pas=g_m e_pas=v_init //insert dendNa ena=70 gmax_dendNa=gna_siz*1.3 //insert HH_Kdr35 ek=-80 gmax_HH_Kdr35=gkdr_siz //insert CaL eca=120 gmax_CaL=gcal //insert CaInternal alpha_ca_CaInternal=alphaCa tau_ca_CaInternal=tauCa //insert KCa gmax_KCa = gkca kD_ca = kD ek=-80 //cai = 0 } else { // main dendritic trunk, create a Na channel gradient insert pas g_pas=g_m e_pas=v_init //insert dendNa ena=70 gmax_dendNa=gna_dend //insert HH_Kdr35 ek=-80 gmax_HH_Kdr35=gkdr_dend //insert HH_Na35 ena=70 gmax_HH_Na35=gna_siz/(1+1*(cmpt_class[i]-4)) //insert HH_Kdr35 ek=-80 gmax_HH_Kdr35=gkdr_siz/(1+1*(cmpt_class[i]-4)) } } /* Synaptic block goes here -- this is generally quite complex so it is * generated by a MATLAB script and then inserted. It generally constitutes the * bulk of this script. Synaptic properties are defined in the MATLAB code. */ <%synBlock%> /* **** SETUP IS NOW DONE ; SIMULATION IS RUN BELOW **** */ /* Prepare file for writing */ wopen (fil_name) finitialize (v_init) fcurrent() // forall for (x,0) ri_dummy(x) = ri(x) // skip the 0 area nodes at 0 and 1 wv = 0 while (t<tstop1) { wv = wv + 1 fadvance() /* record the voltage at the middle of the compartment */ if (wv >= samfreq_den) { wv = 0 // Sample saveparams line: fprint(" %f %f %f %f %f %f %f\n", t, seg[133].v(.5), seg[463].v(.5), seg[320].v(.5), seg[1470].v(.5), seg[1466].v(.5), seg[1480].v(.5)) <%saveParamsLine%> } } /* close the file */ wopen() quit()