eqn.objective = BayesianObjectiveStats(qtarget, beta_prior, sigma_obs, sigma_prior)

    n = np.size(qtarget)/6
    try:
        dat = io.loadmat("H.mat")
        H = data["H"]
        print 1000*"#"
        print "Using Hessian from file"
    except:
        njac = 10
        Jac = np.zeros([njac, 4*n])
        for i in range(njac):
            print "\rBuilding jac %i of %i"%(i, 5*n),
            sys.stdout.flush()
            eqn.objective.set_index(i)
            dJdbeta = eqn.calc_sensitivity()
            Jac[i,:] = dJdbeta[:]
        H = Jac.transpose().dot(Jac)/sigma_obs**2 + np.eye(5*n)/sigma_prior**2
        io.savemat("H.mat", {"H":H})

    Cov = linalg.inv(H)
    R = linalg.cholesky(Cov)
    Q_post = np.zeros([np.size(eqn.q), nsamples])

    sample = 0
    while sample < nsamples:
        print "\rSampling post %i of %i"%(sample, nsamples),
        sys.stdout.flush()
        eqn.dt = dt
        eqn.q[:] = eqn_map.q[:]
        eqn.beta[:] = beta_map + R.dot(np.random.randn(np.shape(beta_map)))