period_cut=period_cut, drift_order=drift_order)

        #fmri = fmri / fmri.mean() * 100
        niimgs = nb.Nifti1Image(fmri, affine=np.eye(4))

        for iest, hrf_peak in enumerate(peak_range):

            # GLM using HRF with a different peak
            hrf_est = _gamma_difference_hrf(1., oversampling=1./dt, time_length=hrf_length + dt,
                                          onset=0., delay=hrf_peak, undershoot=hrf_ushoot,
                                          dispersion=1., u_dispersion=1., ratio=0.167)
            f_hrf_est = interp1d(x_0, hrf_est)

            _, design, _, _ = generate_spikes_time_series(
                n_events=n_events, n_blank_events=n_blank_events,
                event_spacing=event_spacing, t_r=t_r, event_types=event_types,
                return_jitter=True, jitter_min=jitter_min, jitter_max=jitter_max,
                period_cut=period_cut, drift_order=drift_order, time_offset=10,
                modulation=None, seed=seed, f_hrf=f_hrf_est, hrf_length=hrf_length)

            # Testing with a GLM
            glm = FirstLevelGLM(mask=mask_img, t_r=t_r, standardize=True,
                                noise_model='ols')
            glm.fit(niimgs, design)
            #print 'n_timepoints, n_voxels: ', glm.results_[0][0].norm_resid.shape
            #print glm.results_[0][0].resid
            #print glm.results_[0][0].logL
            snr = np.linalg.norm(fmri, axis=3) / sigma_noise
            snr_db = 20 * (np.log10(np.linalg.norm(fmri, axis=3) / sigma_noise))
            print 'sigma_noise = ', sigma_noise
            print 'SNR = ', snr.mean()
            print 'SNR = ', snr_db.mean(), ' dB'
        plt.figure(figsize=(12, 8))
    i = 0

    for hrf_peak in range_peak:


        # Simulate with different hrf peaks
        hrf_sim = _gamma_difference_hrf(1., oversampling=1./dt, time_length=hrf_length+dt,
                                    onset=0., delay=hrf_peak, undershoot=hrf_ushoot,
                                    dispersion=1., u_dispersion=1., ratio=0.167)
        f_hrf_sim = interp1d(x_0, hrf_sim)

        paradigm, design, modulation, measurement_time = \
            generate_spikes_time_series(n_events=n_events, n_blank_events=n_blank_events,
                            event_spacing=event_spacing, t_r=t_r, return_jitter=True,
                            jitter_min=jitter_min, jitter_max=jitter_max, f_hrf=f_hrf_sim,
                            hrf_length=hrf_length, event_types=event_types, period_cut=64,
                            time_offset=10, modulation=None, seed=seed)
        design = design[event_types].values  # forget about drifts for the moment
        beta = rng.randn(len(event_types))
        ys = design.dot(beta)
        noise = rng.randn(design.shape[0])
        scale_factor = np.linalg.norm(ys) / np.linalg.norm(noise)
        ys_acquired = ys + noise * scale_factor * sigma_noise

        snr = 20 * (np.log10(np.linalg.norm(ys_acquired) / np.linalg.norm(ys - ys_acquired)))
        print 'SNR = ', snr, ' dB'


        # Estimation with 1 hrf. Uses glover as mean GP
        hrf_model = 'glover'