Download the problem set code here.
In Azouz & Gray 2000, the authors investigate a mechanism by which neurons may be more sensitive to synchrony in their inputs than previously imagined. They found that the rate of depolarization leading up to the spike varies inversely with the spike threshold such that faster depolarization, as may arise from more synchronous inputs compared to those spread out in time, leads to a lower threshold and greater likelihood to spike. However, Azouz & Gray utilize a somewhat puzzling definition of "spike threshold", given their hypothesis and the particular plots they produce (2C, 4B, 5C). State their definition of threshold, discuss why it could be problematic, and describe a definition of threshold that one might use instead to avoid this problem (you can make something up - justify your definition). You do not need to produce a Neuron model of your definition, though if you wish to test it you are certainly welcome to do so.
Azouz & Gray demonstrated the utility of their effect in Figure 5D, in which they plot the number of synaptic inputs needed to evoke a spike on 95% of trials against the standard deviation of synapse onset times. Importantly, it is the *slope* of these curves which indicate that the Hodgkin-Huxley model neuron is relatively more sensitive to coincident inputs than the integrate-and-fire model. In the second part of this problem set, you will investigate other ways in which neurons may be particularly sensitive to synchronous or nearly synchronous inputs.
1) Replicate Figure 5D using the full-scale L5 pyramidal neuron from Mainen et al. 1995 (and from Problem Set #2) rather than the single compartment neuron that Azouz & Gray used. You do not need to also produce the integrate-and-fire curve (though you can if you'd like).
2) Examine how this curve changes (or doesn't) when you distribute the synapses throughout the dendritic tree rather than just at the soma. Also try distributing the synapses only on one part of the dendritic tree (try "dend6" first).
3) NMDA receptors are a type of voltage-gated glutamate receptor, meaning that they have a threshold much like Na+ channels or T-type Ca2+ channels that we have talked about. The threshold is around -40mV and they are cation channels meaning the reversal potential is about 0mV. So if a synapse has both NMDA and AMPA receptors, then activation of the synapse alone may not depolarize the branch to the NMDA threshold, and only the AMPA receptors will pass current. However, if the dendritic branch is already depolarized (e.g. by a back-propagating AP or by other synchronously occurring synaptic inputs) then the NMDA threshold may be crossed, resulting in a substantially larger amount of current generated by the synapse. Modify the synapses to include NMDA receptors as well as AMPA receptors, and again compare the scattered and clustered synapse distributions.
In the end you should have at least 5 curves in the form of Azouz & Gray's Figure 5D, i.e. number of synaptic inputs required to spike versus standard deviation of synaptic onset times. The five curves are: synapses in the soma, synapses scattered around the entire basal dendritic tree both with and without NMDA, and synapses clustered on just one part of the dendritic tree both with and without NMDA. You can do somatic synapses with NMDA if you like but it's not an explicitly useful condition.
To aid in performing these relatively complicated manipulations, we have provided you with several pieces of code. The first, "proc makeSynapsesDendScattered(numSyn)" takes as input the number of synapses you would like to create and generates this number of synapses randomly around the basal dendritic tree, in addition to any existing synapses. The second "proc setStrengths()" sets the magnitude of AMPA and NMDA conductances of each synapse according to the currently selected values, which can be modified using a gui panel. The function "proc setSynapseOnsetTimes()" chooses random onset times for each synapse with a particular standard deviation. Finally, the main body of the program loops, adding some synapses on each iteration, until at least half of the trials for that iteration (i.e. for that number of synapses) produce spikes. You should be able to start with these functions and modify them or write functions inspired by them to solve the problem set.
When you first run pset4.hoc, you will see a series of plots appear. Each of these represents a "trial" in which randomly distributed synapses (created with makeSynapsesDendScattered) are stimulated with onset times described by a distribution with a particular standard deviation. If spikes are not generated in at least 50% of trials, then more synapses are added and another set of trials is performed. Once spikes are generated, the program will end and report the number of synapses required for spiking to the terminal window. This number constitutes a data point much like one of the points in Azouz & Gray's Figure 5D (and is close enough for our purposes).