def next() :
     global xx
     global delta, gamma
     global model, evolve, alpha
     
     delta, gamma = steps.next()
     xx = step( xx, delta, gamma )
     
     model = WrapParamModel( SYS, xx.params_est )
     evolve, alpha = bootstrap.bootstrap_evolve( xx.samples, xx.y, model, k=3 )
def particle_sysid_filter( n, y, samples, pHMM, params, delta, gamma, k=None ) :
    a, b = params.perturbation_twosided( delta )
    
    HMM1 = WrapParamModel( pHMM, a )
    HMM2 = WrapParamModel( pHMM, b )
    
    _, alpha1 = bootstrap.bootstrap_evolve( samples, y, HMM1, k )
    _, alpha2 = bootstrap.bootstrap_evolve( samples, y, HMM2, k )
    #print alpha1, alpha2
    
    J1 = np.log( np.average( alpha1 ) )
    J2 = np.log( np.average( alpha2 ) )
    
    params_next = params.copy().update( a, b, J2 - J1, gamma )
    
    # then actually filter ya know...
    HMM_next = WrapParamModel( pHMM, params_next )
    samples_next = bootstrap.bootstrap_filter( n, y, samples, HMM_next, k )
    
    return samples_next, params_next