Exemple #1
0
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
Exemple #3
0
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
Exemple #4
0
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)
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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()