// Version information if (name_declared("pkgversions") != 4 ) { execute("strdef pkgversions") } sprint(pkgversions,"%sepspsizes = $Revision: 1.18 $, ",pkgversions) // Required packages load_file("utils.hoc") load_file("bpap-record.hoc") load_file("bpap-dendburst.hoc") load_file("NmdaAmpaSynStim.hoc") load_file("NmdaAmpaSpineSynStim.hoc") load_file("SimpleSpine.hoc") // For a spine with an AMPA/NMDA synapse placed at each position // on the dendrtic tree, we would like to know: // * The EPSP amplitude at the soma // * The EPSP amplitude at the spine // * The Ca amplitude at the spine // // We would also like to know the EPSP amplitude of the standard // spine/synapse placed at the soma, as this can then be used to // compute the attenuation associated with any point on the dendritic // tree. // // To allow us to compute the EPSP amplitude and Ca amplitude of an // individual synapse when there is activity, we first need to perform // a baseline simulation where we measure the membrane potential at // the soma and the EPSP and Ca amplitude at each spine. // // Hence the pseudo-code reads: // // insert_spine(positions) // record(spines,features,baseline) // record(soma ,v ,baseline) // run() // // record_remove() // // foreach position { // insert_spine(position) // record(spine ,features,active) // record(soma ,v ,active) // run() // record_remove() // } // The business objref syn, nc, netstim objref spine objref epsp_soma, epsp_syn objref epsp_soma_amp, epsp_syn_amp objref epsp_ca_syn objref epsp_ca_syn_amp objref baseline_soma, baseline_syn objref baseline_soma_amp, baseline_syn_amp objref baseline_ca_syn objref baseline_ca_syn_amp objref baseline_synapse objref epsp_attenuation objref epsp_srl proc measure_epspsizes() { local x, i, ncols, maxntestsegs if (numarg() == 1 ) { maxntestsegs = utils.min(1+$1,segreflist.srl.count()) // Maximum segment index to test } else { maxntestsegs = segreflist.srl.count() } // Set up storage space for baseline and EPSP recordings baseline_synapse = new List() baseline_soma = new List() baseline_syn = new List() baseline_ca_syn = new List() epsp_soma = new List() epsp_syn = new List() epsp_ca_syn = new List() baseline_soma_amp = new Vector(maxntestsegs) baseline_syn_amp = new Vector(maxntestsegs) baseline_ca_syn_amp = new Vector(maxntestsegs) epsp_soma_amp = new Vector(maxntestsegs) epsp_syn_amp = new Vector(maxntestsegs) epsp_ca_syn_amp = new Vector(maxntestsegs) epsp_attenuation = new Vector(maxntestsegs) // // Baseline run // // Add spines and recordings for i= 0, maxntestsegs - 1 { baseline_soma.append(new Vector()) baseline_syn.append(new Vector()) baseline_ca_syn.append(new Vector()) // Set up spines segreflist.srl.object(i).secref.sec baseline_synapse.append(new NmdaAmpaSpineSynStim(segreflist.srl.object(i).x)) // Set up no input to the synapses baseline_synapse.object(i).netstim.number = 0 // Set up recordings baseline_soma.object(i).record(&v(0),Dt) baseline_synapse.object(i).spine.head baseline_syn.object(i).record(&v(0.5),Dt) baseline_synapse.object(i).spine.head baseline_ca_syn.object(i).record(&cai(0.5),Dt) } // run the simulation run() // Remove recordings for i= 0, maxntestsegs - 1 { baseline_syn.object(i).play_remove() baseline_ca_syn.object(i).play_remove() baseline_soma.object(i).play_remove() } // Remove synapses baseline_synapse.remove_all() // // EPSP runs // // Iterate through segments for i= 0, maxntestsegs - 1 { // Go through each segment in turn // Locate a spine segreflist.srl.object(i).secref.sec syn = new NmdaAmpaSpineSynStim(segreflist.srl.object(i).x) // Set parameters syn.ampasyn.e = e_ampa syn.netcon.weight = gsbar_ampa if (name_declared("gsbar_nmda")) { syn.nmdasyn.e = e_nmda syn.nmdanetcon.weight = gsbar_nmda syn.spine.head insert cacum syn.spine.head insert car_mag set_spine_pars(syn) } // netcon parameters syn.netstim.noise = 0 syn.netstim.start = epsp_start syn.netstim.interval = tstop syn.netstim.number = 1 // // Recordings // epsp_soma.append(new Vector()) epsp_syn.append(new Vector()) epsp_ca_syn.append(new Vector()) epsp_soma.object(i).record(&v(0),Dt) syn.spine.head epsp_syn.object(i).record(&v(0.5),Dt) syn.spine.head epsp_ca_syn.object(i).record(&cai(0.5),Dt) // Run the simulation run() // Analysis epsp_soma.object(i).sub(baseline_soma.object(i)) epsp_syn.object(i).sub(baseline_syn.object(i)) epsp_ca_syn.object(i).sub(baseline_ca_syn.object(i)) epsp_soma_amp.x(i) = epsp_soma.object(i).max() epsp_syn_amp.x(i) = epsp_syn.object(i).max() epsp_ca_syn_amp.x(i) = epsp_ca_syn.object(i).max() // This assumes that the soma is first segment in segreflist epsp_attenuation.x(i) = 1-(epsp_soma_amp.x(i)/epsp_soma_amp.x(0)) // Remove recordings epsp_syn.object(i).play_remove() epsp_ca_syn.object(i).play_remove() epsp_soma.object(i).play_remove() } // Add to data list datalist.appendVectorList("epsp_soma", "", 0) datalist.appendVectorList("epsp_syn", "", 0) datalist.appendVectorList("epsp_ca_syn", "", 0) datalist.appendVector("epsp_soma_amp") datalist.appendVector("epsp_syn_amp") datalist.appendVector("epsp_ca_syn_amp") datalist.appendVector("epsp_attenuation") }