changed the way the fake data is generated (use scipy.signal.lfilter instead of manually constructing kernel and convolving it with spikes using scipy.ndimage.convolve1d). seems more correct (C starts at zero). also make_fake_data() now returns theta as well for consistency
tried dotting alpha with F, alpha.C and beta before computing the residual. seems wrong (fails to converge before z->0)
went back to old method for computing residual, added a new stopping criterion, tweaks to param updates, LL estimate. now seems to learn parameters reasonably well, scaling of n_hat still seems to be off
broken again