def parse_arguments(comm): timer = Timer() timer.start() log = Logger.get() parser = argparse.ArgumentParser( description="Simulate ground-based boresight pointing. Simulate " "atmosphere and make maps for some number of noise Monte Carlos.", fromfile_prefix_chars="@", ) toast_tools.add_dist_args(parser) toast_tools.add_todground_args(parser) toast_tools.add_pointing_args(parser) toast_tools.add_polyfilter_args(parser) toast_tools.add_groundfilter_args(parser) toast_tools.add_atmosphere_args(parser) toast_tools.add_noise_args(parser) toast_tools.add_gainscrambler_args(parser) toast_tools.add_madam_args(parser) toast_tools.add_mapmaker_args(parser) toast_tools.add_filterbin_args(parser) toast_tools.add_sky_map_args(parser) toast_tools.add_sss_args(parser) toast_tools.add_tidas_args(parser) toast_tools.add_mc_args(parser) so_tools.add_corotator_args(parser) so_tools.add_time_constant_args(parser) so_tools.add_demodulation_args(parser) so_tools.add_h_n_args(parser) so_tools.add_crosslinking_args(parser) so_tools.add_cadence_map_args(parser) so_tools.add_hw_args(parser) so_tools.add_so_noise_args(parser) so_tools.add_pysm_args(parser) so_tools.add_export_args(parser) toast_tools.add_debug_args(parser) so_tools.add_import_args(parser) so_tools.add_sim_sso_args(parser) so_tools.add_flag_sso_args(parser) so_tools.add_sim_hwpss_args(parser) parser.add_argument( "--no-maps", required=False, default=False, action="store_true", help="Disable all mapmaking.", ) parser.add_argument("--outdir", required=False, default="out", help="Output directory") parser.add_argument( "--madam", required=False, action="store_true", help="Use libmadam for map-making", dest="use_madam", ) parser.add_argument( "--no-madam", required=False, action="store_false", help="Do not use libmadam for map-making [default]", dest="use_madam", ) parser.set_defaults(use_madam=True) try: args = parser.parse_args() except SystemExit as e: sys.exit() if len(args.bands.split(",")) != 1: # Multi frequency run. We don't support multiple copies of # scanned signal. if args.input_map: raise RuntimeError( "Multiple frequencies are not supported when scanning from a map" ) if args.weather is None: raise RuntimeError("You must provide a TOAST weather file") if comm.world_rank == 0: log.info("\n") log.info("All parameters:") for ag in vars(args): log.info("{} = {}".format(ag, getattr(args, ag))) log.info("\n") if args.group_size: comm = Comm(groupsize=args.group_size) if comm.world_rank == 0: if not os.path.isdir(args.outdir): try: os.makedirs(args.outdir) except FileExistsError: pass timer.report_clear("Parse arguments") return args, comm
def parse_arguments(comm): timer = Timer() log = Logger.get() parser = argparse.ArgumentParser( description="Simulate ground-based boresight pointing. Simulate " "and map astrophysical signal.", fromfile_prefix_chars="@", ) add_dist_args(parser) add_debug_args(parser) add_todground_args(parser) add_pointing_args(parser) add_polyfilter_args(parser) add_groundfilter_args(parser) add_gainscrambler_args(parser) add_noise_args(parser) add_sky_map_args(parser) add_tidas_args(parser) parser.add_argument("--outdir", required=False, default="out", help="Output directory") add_madam_args(parser) add_binner_args(parser) parser.add_argument( "--madam", required=False, action="store_true", help="Use libmadam for map-making", dest="use_madam", ) parser.add_argument( "--no-madam", required=False, action="store_false", help="Do not use libmadam for map-making [default]", dest="use_madam", ) parser.set_defaults(use_madam=False) parser.add_argument( "--focalplane", required=False, default=None, help="Pickle file containing a dictionary of detector " "properties. The keys of this dict are the detector " "names, and each value is also a dictionary with keys " '"quat" (4 element ndarray), "fwhm" (float, arcmin), ' '"fknee" (float, Hz), "alpha" (float), and ' '"NET" (float). For optional plotting, the key "color"' " can specify a valid matplotlib color string.", ) try: args = parser.parse_args() except SystemExit: sys.exit(0) if args.tidas is not None: if not tidas_available: raise RuntimeError("TIDAS not found- cannot export") if comm.comm_world is None or comm.world_rank == 0: log.info("All parameters:") for ag in vars(args): log.info("{} = {}".format(ag, getattr(args, ag))) if args.group_size: comm = Comm(groupsize=args.group_size) if comm.comm_world is None or comm.comm_world.rank == 0: os.makedirs(args.outdir, exist_ok=True) if comm.comm_world is None or comm.world_rank == 0: timer.report_clear("Parsed parameters") return args, comm
def parse_arguments(comm): timer = Timer() timer.start() log = Logger.get() parser = argparse.ArgumentParser( description="Simulate ground-based boresight pointing. Simulate " "atmosphere and make maps for some number of noise Monte Carlos.", fromfile_prefix_chars="@", ) add_dist_args(parser) add_debug_args(parser) add_todground_args(parser) add_pointing_args(parser) add_polyfilter_args(parser) add_groundfilter_args(parser) add_atmosphere_args(parser) add_noise_args(parser) add_gainscrambler_args(parser) add_madam_args(parser) add_sky_map_args(parser) add_pysm_args(parser) add_sss_args(parser) add_tidas_args(parser) add_spt3g_args(parser) add_mc_args(parser) parser.add_argument("--outdir", required=False, default="out", help="Output directory") parser.add_argument( "--focalplane", required=False, default=None, help="Pickle file containing a dictionary of detector " "properties. The keys of this dict are the detector " "names, and each value is also a dictionary with keys " '"quat" (4 element ndarray), "fwhm" (float, arcmin), ' '"fknee" (float, Hz), "alpha" (float), and ' '"NET" (float).', ) parser.add_argument( "--freq", required=True, help="Comma-separated list of frequencies with identical focal planes." " They override the bandpasses in the focalplane for the purpose of" " scaling the atmospheric signal but not for simulating the sky signal.", ) try: args = parser.parse_args() except SystemExit: sys.exit(0) if args.tidas is not None: if not tidas_available: raise RuntimeError("TIDAS not found- cannot export") if args.spt3g is not None: if not spt3g_available: raise RuntimeError("SPT3G not found- cannot export") if len(args.freq.split(",")) != 1: # Multi frequency run. We don't support multiple copies of # scanned signal. if args.input_map: raise RuntimeError( "Multiple frequencies are not supported when scanning from a map" ) if args.simulate_atmosphere and args.weather is None: raise RuntimeError( "Cannot simulate atmosphere without a TOAST weather file") if comm.world_rank == 0: log.info("All parameters:") for ag in vars(args): log.info("{} = {}".format(ag, getattr(args, ag))) if args.group_size: comm = Comm(groupsize=args.group_size) if comm.world_rank == 0: os.makedirs(args.outdir, exist_ok=True) timer.stop() if comm.world_rank == 0: timer.report("Parsed parameters") return args, comm
def main(): # Our toast communicator- use the default for now, which is one # process group spanning all processes. comm = toast.Comm() parser = argparse.ArgumentParser( description="Make a Healpix map of a given observation ", fromfile_prefix_chars="@", ) parser.add_argument("obsdir", help="Input directory for all observations") parser.add_argument("--obs", required=False, help="Comma-separated list of observations") parser.add_argument( "--nside", required=False, type=np.int, default=1024, help="Map resolution", ) toast_tools.add_polyfilter_args(parser) args = parser.parse_args() print("Loading data from {}".format(args.obsdir), flush=True) if args.obs is None: paths = glob.glob(args.obsdir + "/*") obs = [os.path.basename(path) for path in paths] print("Found {} observations: {}".format(len(obs), obs)) else: obs = [] for path in args.obs.split(","): obs.append(path) print("Mapping {} observations: {}".format(len(obs), obs)) if comm.world_rank == 0: print("Loading data from disk...", flush=True) # Load our selected data data = load_data(args.obsdir, obs=obs, comm=comm) # Everybody look at their data my_world_rank = data.comm.world_rank my_group_rank = data.comm.group_rank for ob in data.obs: tod = ob["tod"] my_dets = tod.local_dets my_first_samp, my_nsamp = tod.local_samples msg = "proc {} with group rank {} has {} dets for samples {} - {}".format( my_world_rank, my_group_rank, len(my_dets), my_first_samp, my_first_samp + my_nsamp - 1) print(msg, flush=True) if comm.world_rank == 0: # Plot some local data from the first observation import matplotlib.pyplot as plt ob = data.obs[0] tod = ob["tod"] boloname = tod.local_dets[0] bolodata = tod.cache.reference("signal_{}".format(boloname)) fig = plt.figure() plt.plot(np.arange(len(bolodata)), bolodata) plt.savefig("bolo_{}.png".format(boloname)) del bolodata # Construct a pointing matrix pointing = toast.todmap.OpPointingHpix(nside=args.nside, nest=True, mode="IQU", pixels="pixels", weights="weights") pointing.exec(data) # Filter signal if args.apply_polyfilter: toast_tools.apply_polyfilter(args, comm, data, "signal") # Bin the TOD to a map mapmaker = toast.todmap.OpMapMaker( nside=args.nside, nnz=3, name="signal", pixels="pixels", intervals=None, baseline_length=None, use_noise_prior=False, outdir=".", ) mapmaker.exec(data) # Plot if comm.world_rank == 0: # Plot the hit map import healpy as hp import matplotlib.pyplot as plt plt.figure(figsize=[18, 12]) hits = hp.read_map("hits.fits") imax = np.argmax(hits) lon, lat = hp.pix2ang(hp.get_nside(hits), imax, lonlat=True) hits[hits == 0] = hp.UNSEEN hp.mollview(hits, xsize=1200, sub=[2, 2, 1], title="hits") hp.gnomview( hits, rot=(lon, lat), xsize=800, reso=1.0, sub=[2, 2, 2], title="hits, lon={:.2f}deg, lat={:.2f}deg".format(lon, lat), ) binned = hp.read_map("binned.fits") binned[binned == 0] = hp.UNSEEN plt.savefig("binned.png") hp.mollview(binned, xsize=1200, sub=[2, 2, 3], title="binned") hp.gnomview( binned, rot=(lon, lat), xsize=800, reso=1.0, sub=[2, 2, 4], title="binned, lon={:.2f}deg, lat={:.2f}deg".format(lon, lat), ) fname = "{}.png".format(os.path.basename(args.obsdir)) plt.savefig(fname) print("Plot saved in", fname)
def parse_arguments(comm): timer = Timer() timer.start() log = Logger.get() parser = argparse.ArgumentParser( description="Simulate ground-based boresight pointing. Simulate " "atmosphere and make maps for some number of noise Monte Carlos.", fromfile_prefix_chars="@", ) toast_tools.add_dist_args(parser) toast_tools.add_todground_args(parser) toast_tools.add_pointing_args(parser) toast_tools.add_polyfilter_args(parser) toast_tools.add_polyfilter2D_args(parser) toast_tools.add_common_mode_filter_args(parser) toast_tools.add_groundfilter_args(parser) toast_tools.add_atmosphere_args(parser) toast_tools.add_noise_args(parser) toast_tools.add_gainscrambler_args(parser) toast_tools.add_madam_args(parser) toast_tools.add_filterbin_args(parser) toast_tools.add_sky_map_args(parser) toast_tools.add_sss_args(parser) toast_tools.add_tidas_args(parser) toast_tools.add_mc_args(parser) s4_tools.add_hw_args(parser) s4_tools.add_s4_noise_args(parser) s4_tools.add_pysm_args(parser) toast_tools.add_debug_args(parser) parser.add_argument( "--no-maps", required=False, default=False, action="store_true", help="Disable all mapmaking.", ) parser.add_argument( "--skip-madam", required=False, default=False, action="store_true", help="Skip the first Madam call.", ) parser.add_argument( "--pairdiff", required=False, default=False, action="store_true", help="Pair-difference TOD and pointing.", ) parser.add_argument("--outdir", required=False, default="out", help="Output directory") try: args = parser.parse_args() except SystemExit as e: sys.exit() if len(args.bands.split(",")) != 1: # Multi frequency run. We don't support multiple copies of # scanned signal. if args.input_map: raise RuntimeError( "Multiple frequencies are not supported when scanning from a map" ) if args.simulate_atmosphere and args.weather is None: raise RuntimeError( "Cannot simulate atmosphere without a TOAST weather file") if comm.world_rank == 0: log.info("\n") log.info("All parameters:") for ag in vars(args): log.info("{} = {}".format(ag, getattr(args, ag))) log.info("\n") if args.group_size: comm = Comm(groupsize=args.group_size) if comm.world_rank == 0: os.makedirs(args.outdir, exist_ok=True) timer.report_clear("Parse arguments") return args, comm
def parse_arguments(comm): timer = Timer() timer.start() log = Logger.get() parser = argparse.ArgumentParser( description="Simulate ground-based boresight pointing. Simulate " "atmosphere and make maps for some number of noise Monte Carlos.", fromfile_prefix_chars="@", ) toast_tools.add_dist_args(parser) toast_tools.add_todground_args(parser) toast_tools.add_pointing_args(parser) toast_tools.add_polyfilter_args(parser) toast_tools.add_groundfilter_args(parser) toast_tools.add_noise_args(parser) toast_tools.add_sky_map_args(parser) toast_tools.add_mc_args(parser) so_tools.add_hw_args(parser) so_tools.add_so_noise_args(parser) so_tools.add_pysm_args(parser) so_tools.add_export_args(parser) toast_tools.add_debug_args(parser) parser.add_argument("--outdir", required=False, default="out", help="Output directory") parser.add_argument("--map-prefix", required=False, default="toast", help="Output map prefix") parser.add_argument( "--madam", required=False, action="store_true", help="Use libmadam to bin the signal", dest="madam", ) parser.add_argument( "--no-madam", required=False, action="store_false", help="Do not use libMadam to bin the signal", dest="madam", ) parser.set_defaults(madam=False) parser.add_argument( "--madam-conserve-memory", required=False, action="store_true", help="Stage the Madam buffer packing", dest="madam_conserve_memory", ) parser.add_argument( "--no-madam-conserve-memory", required=False, action="store_false", help="Do not stage the Madam buffer packing", dest="madam_conserve_memory", ) parser.set_defaults(madam_conserve_memory=True) parser.add_argument( "--madam-allreduce", required=False, action="store_true", help="Use the allreduce communication pattern in Madam", dest="madam_allreduce", ) parser.add_argument( "--no-madam-allreduce", required=False, action="store_false", help="Do not use the allreduce communication pattern in Madam", dest="madam_allreduce", ) parser.set_defaults(madam_allreduce=False) parser.add_argument( "--madam-concatenate-messages", required=False, action="store_true", help="Use the alltoallv commucation pattern in Madam", dest="madam_concatenate_messages", ) parser.add_argument( "--no-madam-concatenate-messages", required=False, action="store_false", help="Use the point-to-point communication pattern in Madam", dest="madam_concatenate_messages", ) parser.set_defaults(madam_concatenate_messages=True) try: args = parser.parse_args() except SystemExit as e: sys.exit() if len(args.bands.split(",")) != 1: # Multi frequency run. We don't support multiple copies of # scanned signal. if args.input_map: raise RuntimeError( "Multiple frequencies are not supported when scanning from a map" ) if comm.world_rank == 0: log.info("\n") log.info("All parameters:") for ag in vars(args): log.info("{} = {}".format(ag, getattr(args, ag))) log.info("\n") if args.group_size: comm = Comm(groupsize=args.group_size) if comm.world_rank == 0: if not os.path.isdir(args.outdir): try: os.makedirs(args.outdir) except FileExistsError: pass timer.report_clear("Parse arguments") return args, comm
from scipy import signal parser = argparse.ArgumentParser( description= "SA + TOAST simulations example pipeline. Run with python3 pipeline.py @pars", fromfile_prefix_chars="@", ) sa_tpt.add_general_args(parser) tpt.add_noise_args(parser) tpt.add_atmosphere_args(parser) tpt.add_sss_args(parser) tpt.add_sky_map_args(parser) tpt.add_pointing_args(parser) tpt.add_mapmaker_args(parser) tpt.add_polyfilter_args(parser) tpt.add_groundfilter_args(parser) args = parser.parse_args() data_prefix = 'data' run_id = args.run_id subrun_id = args.subrun_id obs = sa_ob.Observation((run_id, subrun_id)) #obs.detectors = ['13.10_112.90B', '13.10_112.90T'] obs.detectors = [ '13.13_135.150T', '13.13_135.150B', '13.13_155.150T', '13.13_155.150B' ] obs.load_metadata()