\documentclass[addpoints,10pt]{exam}
\usepackage{url}
\usepackage{color}
\usepackage{hyperref}
\usepackage{graphicx}

\pagestyle{headandfoot}
\runningheadrule
\firstpageheadrule

\firstpageheader{Scientific Computing}{Homogeneous Poisson process}{Oct 27, 2014}
%\runningheader{Homework 01}{Page \thepage\ of \numpages}{23. October 2014}
\firstpagefooter{}{}{}
\runningfooter{}{}{}
\pointsinmargin
\bracketedpoints

%\printanswers
\shadedsolutions

\usepackage[mediumspace,mediumqspace,Gray]{SIunits}      % \ohm, \micro

%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}
\lstset{
 basicstyle=\ttfamily,
 numbers=left,
 showstringspaces=false,
 language=Matlab,
 breaklines=true,
 breakautoindent=true,
 columns=flexible,
 frame=single,
 captionpos=t,
 xleftmargin=2em,
 xrightmargin=1em,
 aboveskip=10pt,
 %title=\lstname,
 title={\protect\filename@parse{\lstname}\protect\filename@base.\protect\filename@ext}
 }


\begin{document}

\sffamily
%%%%%%%%%%%%%% Questions %%%%%%%%%%%%%%%%%%%%%%%%%

\begin{questions}
  \question \textbf{Homogeneous Poisson process}
  We use the Poisson process to generate spike trains on which we can test and imrpove some 
  standard analysis functions.

  A homogeneous Poisson process of rate $\lambda$ (measured in Hertz) is a point process
  where the probability of an event is independent of time $t$ and independent of previous events.
  The probability $P$ of an event within a bin of width $\Delta t$ is 
  \[ P = \lambda \cdot \Delta t \]
  for sufficiently small $\Delta t$.
  \begin{parts}

    \part Write a function that generates $n$ homogeneous Poisson spike trains of a given duration $T_{max}$
    with rate $\lambda$.
    \begin{solution}
      \lstinputlisting{hompoissonspikes.m}
    \end{solution}

    \part Using this function, generate a few trials and display them in a raster plot.
    \begin{solution}
      \lstinputlisting{simulations/spikeraster.m}
      \begin{lstlisting}
spikes = hompoissonspikes( 10, 100.0, 0.5 );
spikeraster( spikes )
      \end{lstlisting}
      \mbox{}\\[-3ex]
      \colorbox{white}{\includegraphics[width=0.7\textwidth]{poissonraster100hz}}
    \end{solution}

    \part Write a function that extracts a single vector of interspike intervals
    from the spike times returned by the first function.
    \begin{solution}
      \lstinputlisting{simulations/isis.m}
    \end{solution}

    \part Write a function that plots the interspike-interval histogram
    from a vector of interspike intervals. The function should also
    compute the mean, the standard deviation, and the CV of the intervals
    and display the values in the plot.
    \begin{solution}
      \lstinputlisting{simulations/isihist.m}
    \end{solution}

    \part Compute histograms for Poisson spike trains with rate
    $\lambda=100$\,Hz. Play around with $T_{max}$ and $n$ and the bin width
    (start with 1\,ms) of the histogram.
    How many
    interspike intervals do you approximately need to get a ``nice''
    histogram? How long do you need to record from the neuron?
    \begin{solution}
      About 5000 intervals for 25 bins. This corresponds to a $5000 / 100\,\hertz = 50\,\second$ recording
      of a neuron firing with 100\,\hertz.
    \end{solution}

    \part Compare the histogram with the true distribution of intervals $T$ of the Poisson process
    \[ p(T) = \lambda e^{-\lambda T} \]
    for various rates $\lambda$.
    \begin{solution}
      \lstinputlisting{hompoissonisih.m}
      \colorbox{white}{\includegraphics[width=0.48\textwidth]{poissonisih100hz}}
      \colorbox{white}{\includegraphics[width=0.48\textwidth]{poissonisih20hz}}
    \end{solution}

    \part What happens if you make the bin width of the histogram smaller than $\Delta t$ 
    used for generating the Poisson spikes?
    \begin{solution}
      The bins between the discretization have zero entries. Therefore
      the other ones become higher than they should be.
    \end{solution}

    \part Plot the mean interspike interval, the corresponding standard deviation, and the CV
    as a function of the rate $\lambda$ of the Poisson process.
    Compare the simulations with the theoretical expectations for the dependence on $\lambda$.
    \begin{solution}
      \lstinputlisting{hompoissonisistats.m}
      \colorbox{white}{\includegraphics[width=0.98\textwidth]{poissonisistats}}
    \end{solution}

    \part Write a function that computes serial correlations for the interspike intervals
    for a range of lags.
    The serial correlations $\rho_k$ at lag $k$ are defined as
    \[ \rho_k = \frac{\langle (T_{i+k} - \langle T \rangle)(T_i - \langle T \rangle) \rangle}{\langle (T_i - \langle T \rangle)^2\rangle} = \frac{{\rm cov}(T_{i+k}, T_i)}{{\rm var}(T_i)} \]
    Use this function to show that interspike intervals of Poisson spikes are independent.
    \begin{solution}
      \lstinputlisting{simulations/isiserialcorr.m}
      \colorbox{white}{\includegraphics[width=0.98\textwidth]{poissonserial100hz}}
    \end{solution}

    \part Write a function that generates from spike times 
    a histogram of spike counts in a count window of given duration $W$.
    The function should also plot the Poisson distribution
    \[ P(k) = \frac{(\lambda W)^ke^{\lambda W}}{k!} \]
    for the rate $\lambda$ determined from the spike trains.
    \begin{solution}
      \lstinputlisting{simulations/counthist.m}
      \colorbox{white}{\includegraphics[width=0.48\textwidth]{poissoncounthistdist100hz10ms}}
      \colorbox{white}{\includegraphics[width=0.48\textwidth]{poissoncounthistdist100hz100ms}}
    \end{solution}

    \part Write a function that computes mean count, variance of count and the corresponding Fano factor
    for a range of count window durations. The function should generate tow plots: one plotting
    the count variance against the mean, the other one the Fano factor as a function of the window duration.
    \begin{solution}
      \lstinputlisting{simulations/fano.m}
      \colorbox{white}{\includegraphics[width=0.98\textwidth]{poissonfano100hz}}
    \end{solution}

  \end{parts}
  
\end{questions}


\end{document}
