def build_interpol(transform, box, id="none", posunit=1.0, sys=None): sys = config.get("map_sys", sys) # We widen the bounding box slightly to avoid samples falling outside it # due to rounding errors. box = utils.widen_box(np.array(box), 1e-3) box[:, 1:] = utils.widen_box(box[:, 1:], config.get("pmat_interpol_pad") * utils.arcmin, relative=False) acc = config.get("pmat_accuracy") ip_size = config.get("pmat_interpol_max_size") ip_time = config.get("pmat_interpol_max_time") # Build pointing interpolator errlim = np.array( [1e-3 * posunit, 1e-3 * posunit, utils.arcmin, utils.arcmin]) * acc ipol, obox, ok, err = interpol.build(transform, interpol.ip_linear, box, errlim, maxsize=ip_size, maxtime=ip_time, return_obox=True, return_status=True) if not ok and np.any(err > errlim): print "Warning: Accuracy %g was specified, but only reached %g for tod %s" % ( acc, np.max(err / errlim) * acc, id) return ipol, obox, err
}[args.interpolator] for iaz in range(naz): for iel in range(nel): az_mid = (args.az1 + args.daz*iaz)*utils.degree el_mid = (args.el1 + args.delta_el*iel)*utils.degree t_mid = args.t # Bounds box = np.array([ [-args.wt/2./60/24, args.wt/2./60/24], [az_mid-utils.degree*args.waz/2, az_mid+utils.degree*args.waz/2], [el_mid-utils.degree*args.wel/2, el_mid+utils.degree*args.wel/2]]).T # Build an interpolator wbox = utils.widen_box(box) errlim = np.array([utils.arcsec, utils.arcsec, utils.arcmin, utils.arcmin])*acc t1 = time.time() ipol, obox, ok, err = interpol.build(hor2cel, interpolator, wbox, errlim, maxsize=max_size, maxtime=max_time, return_obox=True, return_status=True) t2 = time.time() # Choose some points to evaluate the model at hor_test = box[0,:,None] + np.random.uniform(0,1,size=(3,args.ntest))*(box[1]-box[0])[:,None] cel_exact = hor2cel(hor_test) cel_interpol = ipol(hor_test) #cel_interpol2 = eval_ipol(ipol, hor_test) diff = np.max(np.abs(cel_interpol-cel_exact),1) print (" %9.4f"*(2+4+1) + " %d") % ( (az_mid/utils.degree,el_mid/utils.degree) + tuple(diff/errlim) + (t2-t1,ok)) sys.stdout.flush()
az_mid - utils.degree * args.waz / 2, az_mid + utils.degree * args.waz / 2 ], [ el_mid - utils.degree * args.wel / 2, el_mid + utils.degree * args.wel / 2 ]]).T # Build an interpolator wbox = utils.widen_box(box) errlim = np.array( [utils.arcsec, utils.arcsec, utils.arcmin, utils.arcmin]) * acc t1 = time.time() ipol, obox, ok, err = interpol.build(hor2cel, interpolator, wbox, errlim, maxsize=max_size, maxtime=max_time, return_obox=True, return_status=True) t2 = time.time() # Choose some points to evaluate the model at hor_test = box[0, :, None] + np.random.uniform( 0, 1, size=(3, args.ntest)) * (box[1] - box[0])[:, None] cel_exact = hor2cel(hor_test) cel_interpol = ipol(hor_test) #cel_interpol2 = eval_ipol(ipol, hor_test) diff = np.max(np.abs(cel_interpol - cel_exact), 1) print(" %9.4f" * (2 + 4 + 1) + " %d") % ( (az_mid / utils.degree, el_mid / utils.degree) + tuple(diff / errlim) + (t2 - t1, ok))
else: ipnames = args.interpolator.split(",") pix = None for dir in dirs: for ipname in ipnames: # Precompute pointing if ipname.split("_")[0] in ["std"]: t1 = time.time() corners = utils.box2corners(wibox).T ocorners = transfun(corners) ipol, obox, ok, err = interpol.build(transfun, ipfun, wibox, errlim, maxsize=max_size, maxtime=max_time, return_obox=True, return_status=True, order=1) t2 = time.time() tbuild = t2 - t1 # evaluate accuracy pos_exact = transfun(bore.T) pos_inter = ipol(bore.T) rbox, nbox, yvals = pmat.extract_interpol_params(ipol, ptype) else: t1 = time.time() poly = pmat.PolyInterpol(transfun, bore, det_pos) tbuild = time.time() - t1 pos_exact = transfun((bore + det_pos[0]).T)
if args.interpolator == "all": ipnames = [ #"fast", "std_bi_0","std_bi_1","std_bi_3"] else: ipnames = args.interpolator.split(",") pix = None for dir in dirs: for ipname in ipnames: # Precompute pointing if ipname.split("_")[0] in ["std"]: t1 = time.time() corners = utils.box2corners(wibox).T ocorners = transfun(corners) ipol, obox, ok, err = interpol.build(transfun, ipfun, wibox, errlim, maxsize=max_size, maxtime=max_time, return_obox=True, return_status=True, order=1) t2 = time.time() tbuild = t2-t1 # evaluate accuracy pos_exact = transfun(bore.T) pos_inter = ipol(bore.T) rbox, nbox, yvals = pmat.extract_interpol_params(ipol, ptype) else: t1 = time.time() poly = pmat.PolyInterpol(transfun, bore, det_pos) tbuild = time.time()-t1 pos_exact = transfun((bore + det_pos[0]).T) pos_inter = poly(bore, [0])[0] ok = True nbox = [ndet, 11] err = np.max(np.abs(pos_exact-pos_inter)/errlim[:,None])*acc