Example #1
0
def calculateExactSDFs():
    N_phi = 4;
    print 'N_phi = ', N_phi
    
    phis =  2*pi*array([0,.25, .5, .75])
       
    
    for regime_idx, regime_name in enumerate(['superT', 'superSin', 'crit','subT']):
    #        for regime_name in ['superT']:
        regime_label = 'sinusoidal_spike_train_N=1000_' + regime_name + '_12' 
        binnedTrain = BinnedSpikeTrain.initFromFile(regime_label, phis)
        Tf = binnedTrain.getTf()
        print 'Tf = ', Tf
        
        theta = binnedTrain.theta;
        print 'theta = ', theta
        ps = binnedTrain._Train._params
        abg_true = array((ps._alpha, ps._beta, ps._gamma))
        abg = abg_true
        xmin = FPMultiPhiSolver.calculate_xmin(Tf, abg, theta)
#        dx = .0125#        dx = .0125; ;
        dx = .0125; 
        dt = FPMultiPhiSolver.calculate_dt(dx, abg, xmin, factor = 5.)
        print 'xmin = ', xmin, ', dx, dt = ', dx, dt
        
        S = FPMultiPhiSolver(theta, phis,
                         dx, dt, Tf, xmin)
   
        S.setTf(Tf)
        Fs = S.c_solve(abg)
        ts = S._ts;
         
        
        filename= RESULTS_DIR + '/Fs_%s'%regime_name
        print 'saving Fs to ', filename
        savez(filename, ts=ts,
                         Gs=squeeze(Fs[:,:,-1]),
                         phis=phis,
                         Tf = Tf);
Example #2
0
def thetas_sandbox(save_figs=False):
    N_samples = 100;
    N_phi = 64;
    normalized_phis =  linspace(1/(2.*N_phi), 1. - 1/ (2.*N_phi), N_phi)
    
    #results banks:
#    seed(2013)
    thetas = [10, 20]
    likelihoods = empty((len(thetas), 4, N_samples))
    errors = empty((len(thetas), 3, N_samples))
    
    base_name = 'sinusoidal_spike_train_N=1000_critical_theta='
    for regime_idx, theta in enumerate(thetas):    
        sample_id = 17
        regime_name = 'theta%d'%theta
        regime_label = base_name + '%d'%theta            
        file_name = regime_label + '_%d'%sample_id
        print file_name
        binnedTrain = BinnedSpikeTrain.initFromFile(file_name, normalized_phis)
        theta = binnedTrain.theta;
        real_phis = normalized_phis * 2.0 * pi / theta;
        
        for sample_idx in xrange(N_samples): 
            phi_star,I_star = binnedTrain.getRandomPhiInterval()
            print 'phi_star_normalized, I_star: %.3f, %.3f' %(phi_star/ (2*pi/theta), I_star)
            
            phi_m, phi_minus, phi_plus = getApproximatePhis(phi_star, real_phis,theta)
            delta_phi_minus_weight, delta_phi_plus_weight = getDeltaPhiWeights(phi_star, phi_minus, phi_plus)
            
            #phi_star_idx = 0; phi_m_idx = 1; etc...
            solver_phis = [phi_star, phi_m, phi_minus, phi_plus]
#            print 'solver_phis = ', solver_phis
#            print 'weights = %.3f, %.3f'%(delta_phi_minus_weight, delta_phi_plus_weight)   
            
            ps = binnedTrain._Train._params
            abg_true = array((ps._alpha, ps._beta, ps._gamma))
            
            abg = abg_true
            
            Tf = I_star + .2;
            
            dx = .025; 
            x_min = FPMultiPhiSolver.calculate_xmin(Tf, abg, theta)
            dt = FPMultiPhiSolver.calculate_dt(dx,abg, x_min, factor = 1.0)
            
            S = FPMultiPhiSolver(theta, solver_phis,
                                    dx, dt, Tf, x_min)
            S.setTf(Tf)
            
            Fs =  S.c_solve(abg)
            Fth = Fs[:,:,-1]
#            Fth_phis = S.solveFphi(abg, Fs)[:,:,-1]
            ts = S._ts;
            
            tm_idx, tp_idx = gettsIndex(ts, I_star)
            delta_t = S._dt
            delta_phi = phi_star - phi_m
            
            #various approximations to the likelihood, L
            L_star = -diff(Fth[0, [tm_idx, tp_idx]]) / (delta_t)
            L_m    = -diff(Fth[1, [tm_idx, tp_idx]]) / (delta_t)
            L_plus_minus    = -(diff(Fth[2, [tm_idx, tp_idx]])*delta_phi_minus_weight + \
                                  diff(Fth[3, [tm_idx, tp_idx]])*delta_phi_plus_weight)/ (delta_t)
#            gradphi_g = -diff(Fth_phis[1, [tm_idx, tp_idx]]) / (delta_t);
#            logL_gradphi = log(L_m) +  delta_phi * gradphi_g / L_m
#            L_gradphi = exp(logL_gradphi)
            L_gradphi = L_plus_minus
              
            
#            print 'di_F: %.4f,%.4f,%.4f' %(diF_star, diF_m, diF_plus_minus)
#            print 'error: %.4f,%.4f' %(abs(diF_star - diF_m), abs(diF_star-diF_plus_minus) )
            
            likelihoods[regime_idx, :, sample_idx] = r_[L_star,
                                                         L_m,
                                                          L_plus_minus,
                                                           L_gradphi]
            errors[regime_idx, :, sample_idx] = r_[abs(L_star - L_m),
                                                    abs(L_star-L_plus_minus),
                                                    abs(L_star - L_gradphi)]
            
        figure()
        plot(errors[regime_idx, 0,:], 'b', label='F_m')
        plot(errors[regime_idx, 1,:], 'r', label='F_min + F_plus')
        legend(); title('theta= %.2f'%theta, fontsize = 32)
    
    from numpy import save
    save('likelihoods_thetas',likelihoods)
    save('errors_thetas', errors)
Example #3
0
def adapted_sandbox(save_figs=False):
#    file_name = 'sinusoidal_spike_train_N=1000_subT_11'
#    file_name = 'sinusoidal_spike_train_N=1000_superSin_13'
    N_samples = 16;

    N_phi_per_quarter = 4;
    N_phi = 4*N_phi_per_quarter;
    normalized_phis =  getAdaptedPhis(N_phi_per_quarter) 
    diFs = empty((4, 3, N_samples))
    errors = empty((4, 2, N_samples))
    
    seed(2013)
    for regime_idx, tag in enumerate(['superSin', 'crit', 'superT', 'subT']):
        file_name = 'sinusoidal_spike_train_N=1000_%s_13'%tag
        binnedTrain = BinnedSpikeTrain.initFromFile(file_name, normalized_phis)
        theta = binnedTrain.theta;
        real_phis = normalized_phis * 2.0 * pi / theta;
                
        for sample_idx in xrange(N_samples): 
            phi_star,I_star = binnedTrain.getRandomPhiInterval()
            
            print 'phi_star, I_star: ', phi_star, I_star
            
            phi_m, phi_minus, phi_plus = getApproximatePhis(phi_star, real_phis,theta)
            delta_phi_minus_weight, delta_phi_plus_weight = getDeltaPhiWeights(phi_star, phi_minus, phi_plus)
            
            solver_phis = [phi_star, phi_m, phi_minus, phi_plus]
            
            ps = binnedTrain._Train._params
            abg = array((ps._alpha, ps._beta, ps._gamma))
            
            Tf = I_star + .2;
            
            dx = .025; 
            x_min = FPMultiPhiSolver.calculate_xmin(Tf, abg, theta)
            dt = FPMultiPhiSolver.calculate_dt(dx,abg, x_min, factor = 1.0)
            
            S = FPMultiPhiSolver(theta, solver_phis,
                                    dx, dt, Tf, x_min)
            S.setTf(Tf)
            
            Fth = S.c_solve(abg)[:,:,-1]
            ts = S._ts;
            
            tm_idx, tp_idx = gettsIndex(ts, I_star)
            
            diF_star = -diff(Fth[0, [tm_idx, tp_idx]]) / (S._dt)
            diF_m    = -diff(Fth[1, [tm_idx, tp_idx]]) / (S._dt)
            diF_plus_minus    = -(diff(Fth[2, [tm_idx, tp_idx]])*delta_phi_minus_weight + \
                                  diff(Fth[3, [tm_idx, tp_idx]])*delta_phi_plus_weight)/ (S._dt)
            
#            print 'di_F: %.4f,%.4f,%.4f' %(diF_star, diF_m, diF_plus_minus)
#            print 'error: %.4f,%.4f' %(abs(diF_star - diF_m), abs(diF_star-diF_plus_minus) )
            
            diFs[regime_idx, :, sample_idx] = r_[diF_star, diF_m, diF_plus_minus]
            errors[regime_idx, :, sample_idx] = r_[abs(diF_star - diF_m), abs(diF_star-diF_plus_minus)]
            
        figure()
        plot(errors[regime_idx, 0,:], 'b', label='F_m')
        plot(errors[regime_idx, 1,:], 'r', label='F_min + F_plus')
        legend(); title(tag, fontsize = 32)
    
    from numpy import save
    save('Ls_adapted',diFs)
    save('errors_adapted', errors)
Example #4
0
def supersin_sandbox(N_phi = 32):
    N_sub_samples = 10
    N_samples = N_sub_samples*5;

    normalized_phis =  linspace(1/(2.*N_phi), 1. - 1/ (2.*N_phi), N_phi)
    
    #results banks:
    likelihoods = empty((4, 4, N_samples))
    errors = empty((4, 3, N_samples))
    
    seed(2013)
    for regime_idx, tag in enumerate(['superSin']):
        file_name = 'sinusoidal_spike_train_N=1000_%s_22'%(tag)
        print file_name
        binnedTrain = BinnedSpikeTrain.initFromFile(file_name, normalized_phis)
        theta = binnedTrain.theta;
        real_phis = normalized_phis * 2.0 * pi / theta;
    
        for sample_idx in xrange(N_samples):
            if 0 == mod(sample_idx, N_sub_samples):
                train_id = randint(1,101) 
                file_name = 'sinusoidal_spike_train_N=1000_%s_%d'%(tag, train_id)
                print file_name
                binnedTrain = BinnedSpikeTrain.initFromFile(file_name, normalized_phis)
                
            phi_star,I_star = binnedTrain.getRandomPhiInterval()
            print 'phi_star_normalized, I_star: %.3f, %.3f' %(phi_star/ (2*pi/theta), I_star)
            
            phi_m, phi_minus, phi_plus = getApproximatePhis(phi_star, real_phis,theta)
            delta_phi_minus_weight, delta_phi_plus_weight = getDeltaPhiWeights(phi_star, phi_minus, phi_plus)
            
            #phi_star_idx = 0; phi_m_idx = 1; etc...
            solver_phis = [phi_star, phi_m, phi_minus, phi_plus]
#            print 'solver_phis = ', solver_phis
#            print 'weights = %.3f, %.3f'%(delta_phi_minus_weight, delta_phi_plus_weight)   
            
            ps = binnedTrain._Train._params
            abg_true = array((ps._alpha, ps._beta, ps._gamma))
            
            abg = abg_true
            
            Tf = I_star + .2;
            
            dx = .025; 
            x_min = FPMultiPhiSolver.calculate_xmin(Tf, abg, theta)
            dt = FPMultiPhiSolver.calculate_dt(dx,abg, x_min, factor = 1.0)
            
            S = FPMultiPhiSolver(theta, solver_phis,
                                    dx, dt, Tf, x_min)
            S.setTf(Tf)
            
            Fs =  S.c_solve(abg)
            Fth = Fs[:,:,-1]
            Fth_phis = S.solveFphi(abg, Fs)[:,:,-1]
            ts = S._ts;
            
            tm_idx, tp_idx = gettsIndex(ts, I_star)
            delta_t = S._dt
            delta_phi = phi_star - phi_m
            
            #various approximations to the likelihood, L
            L_star = -diff(Fth[0, [tm_idx, tp_idx]]) / (delta_t)
            L_m    = -diff(Fth[1, [tm_idx, tp_idx]]) / (delta_t)
            L_plus_minus    = -(diff(Fth[2, [tm_idx, tp_idx]])*delta_phi_minus_weight + \
                                  diff(Fth[3, [tm_idx, tp_idx]])*delta_phi_plus_weight)/ (delta_t)
            gradphi_g = -diff(Fth_phis[1, [tm_idx, tp_idx]]) / (delta_t);
            logL_gradphi = log(L_m) +  delta_phi * gradphi_g / L_m
            L_gradphi = exp(logL_gradphi)  
            
            'sanity check'
            approx_Fth_phi = .5 * sum(Fth[0, [tm_idx, tp_idx]] - Fth[1, [tm_idx, tp_idx]]) / (phi_star - phi_m)
            lFth_phi = .5* (sum(Fth_phis[1, [tm_idx, tp_idx]]))  
            if (approx_Fth_phi * lFth_phi < .0):
                print 'sanity inverse: approx:%.3f , adjoint_calc: %.3f'%(approx_Fth_phi,lFth_phi) 
            
            if (.0 >= L_star*L_m*L_plus_minus*L_gradphi):
                print 'negative likelihood encountered'
#            print 'di_F: %.4f,%.4f,%.4f' %(diF_star, diF_m, diF_plus_minus)
#            print 'error: %.4f,%.4f' %(abs(diF_star - diF_m), abs(diF_star-diF_plus_minus) )
            
            likelihoods[regime_idx, :, sample_idx] = r_[L_star,
                                                         L_m,
                                                          L_plus_minus,
                                                          L_gradphi]
            errors[regime_idx, :, sample_idx] = r_[abs(L_star - L_m),
                                                    abs(L_star-L_plus_minus),
                                                    abs(L_star - L_gradphi)]
            
        figure()
        plot(errors[regime_idx, 0,:], 'b', label='F_m')
        plot(errors[regime_idx, 1,:], 'r', label='F_min + F_plus')
        legend(); title(tag, fontsize = 32)
    
    from numpy import save
    save('likelihoods_supersin',likelihoods)
    save('errors_supersin', errors)