if cone == 0: geometry = SphereTorusGeometry(NH = nh, verbose=args.verbose) else: geometry = BNTorusGeometry(Theta_tor = cone, NH = nh, verbose=args.verbose) geometry.viz() plt.savefig(prefix + "geometry.pdf") plt.savefig(prefix + "geometry.png") plt.close() binmapfunction = lambda beta, alpha: (numpy.round(0.5 + nmu * numpy.abs(cos(beta))) - 1).astype(int) def binmapfunction(beta, alpha): mu = ((0.5 + nmu * numpy.abs(cos(beta))) - 1).astype(int) mu[mu >= nmu] = nmu - 1 return mu rdata, nphot = montecarlo.run(prefix, nphot = args.nevents, nmu = nmu, geometry=geometry, binmapfunction = binmapfunction, plot_paths=args.plot_paths, plot_interactions=args.plot_interactions, verbose=args.verbose) rdata_transmit, rdata_reflect = rdata header = dict(NH=nh, OPENING=cone) montecarlo.store(prefix + 'transmit', nphot, rdata_transmit, nmu, extra_fits_header = header, plot=False) montecarlo.store(prefix + 'reflect', nphot, rdata_reflect, nmu, extra_fits_header = header, plot=False) rdata_transmit += rdata_reflect del rdata_reflect montecarlo.store(prefix, nphot, rdata_transmit, nmu, extra_fits_header = header, plot=True)
# ==== Covariance Frobenius Norm ===== # ==================================== norm_exact = np.linalg.norm(mcov, 'fro') # ==================================== # ===== Portfolio Hedging Inits ====== # ==================================== # Used for estimating hedged portfolio variance, involing inverse of covariance matrix. p = putils.Portfolio(np.array([1, 0, 0, 0])) p_var = putils.portfolio_var(p, mcov) hdg = putils.mvp_hedge(p, mcov) mvp = p + hdg mvp_var = putils.portfolio_var(mvp, mcov) truevals = {'mvp.var': mvp_var, 'cov.relnorm': norm_exact, 'p.var': p_var} # ==================================== # =========== Monte Carlo ============ # ==================================== obs_gen = stats.multivariate_normal(cov=mcov) T_grid = pmc.init_sparse_grid(lbound=p_dim, max_sample_size=64) mc = mc.MonteCarlo(rndgen=lambda: obs_gen.rvs(T_grid[-1]), nsim=1000, evalfunc=lambda welfords, path: pmc.mc_path_eval( T_grid, p, mcov, welfords, path), welfords=pmc.estimations(len(T_grid))) est = mc.run() # ===================== # ===== Plotting ====== # ===================== present.result(T_grid, est, truevals, alpha_conf=0.01)