Exemplo n.º 1
0
def main(args):

    from desispec.io import meta
    from desispec.qa.qa_plots import exposure_fiberflat, exposure_s2n
    from desispec.qa.qa_exposure import QA_Exposure
    from desispec.io.meta import find_exposure_night

    log = get_logger()

    log.info("starting")

    # Setup
    if args.specprod_dir is None:
        specprod_dir = meta.specprod_root()
    else:
        specprod_dir = args.specprod_dir
    if args.qaprod_dir is None:
        qaprod_dir = meta.qaprod_root(specprod_dir=specprod_dir)
    else:
        qaprod_dir = args.qaprod_dir
    if args.channels is None:
        channels = ['b', 'r', 'z']
    else:
        channels = [iarg for iarg in args.channels.split(',')]

    # Find night
    night = find_exposure_night(args.expid, specprod_dir=specprod_dir)

    # Instantiate
    qa_exp = QA_Exposure(args.expid,
                         night,
                         specprod_dir=specprod_dir,
                         qaprod_dir=qaprod_dir,
                         no_load=args.rebuild,
                         multi_root=args.qamulti_root)
    # Rebuild?
    if args.rebuild:
        qa_exp.build_qa_data(rebuild=True)

    # Fiber QA
    if args.qatype == 'fiberflat':
        for channel in channels:
            exposure_fiberflat(channel, args.expid, 'meanflux')

    # S/N
    if args.qatype == 's2n':
        # S2N table
        qa_exp.s2n_table()
        # Figure time
        exposure_s2n(qa_exp, 'resid', specprod_dir=specprod_dir)

    # Slurp into a file?
    if args.slurp is not None:
        qa_exp.slurp_into_file(args.slurp)
Exemplo n.º 2
0
def main(args):

    from desispec.qa import QA_Night
    from desiutil.log import get_logger
    from desispec.io import meta
    from desispec.qa import qa_plots as dqqp

    log = get_logger()

    log.info("starting")
    # Initialize
    if args.specprod_dir is None:
        specprod_dir = meta.specprod_root()
    else:
        specprod_dir = args.specprod_dir
    if args.qaprod_dir is None:
        qaprod_dir = meta.qaprod_root(specprod_dir=specprod_dir)
    else:
        qaprod_dir = args.qaprod_dir

    qa_prod = QA_Night(args.night,
                       specprod_dir=specprod_dir,
                       qaprod_dir=qaprod_dir)

    # Exposure plots
    if args.expid_series:
        # QATYPE-METRIC
        qa_prod.load_data()
        # SKYSUB RESID
        qatype, metric = 'SKYSUB', 'RESID'  #args.expid_series.split('-')
        outfile = qaprod_dir + '/QA_{:s}_expid_{:s}-{:s}.png'.format(
            args.night, qatype, metric)
        dqqp.prod_time_series(qa_prod,
                              qatype,
                              metric,
                              outfile=outfile,
                              bright_dark=args.bright_dark,
                              exposures=True,
                              night=args.night,
                              horiz_line=0.)
        # FLUXCALIB ZP
        qatype, metric = 'FLUXCALIB', 'ZP'  #args.expid_series.split('-')
        outfile = qaprod_dir + '/QA_{:s}_expid_{:s}-{:s}.png'.format(
            args.night, qatype, metric)
        dqqp.prod_time_series(qa_prod,
                              qatype,
                              metric,
                              outfile=outfile,
                              bright_dark=args.bright_dark,
                              exposures=True,
                              night=args.night)
    ''' The stuff down here does not work, or has not been tested on Night QA
Exemplo n.º 3
0
def main(args) :

    from desispec.io import meta
    from desispec.qa.qa_frame import qaframe_from_frame
    log=get_logger()

    log.info("starting")
    if args.specprod_dir is None:
        specprod_dir = meta.specprod_root()
    else:
        specprod_dir = args.specprod_dir

    # Generate qaframe (and figures?)
    qaframe = qaframe_from_frame(args.frame_file, specprod_dir=specprod_dir, make_plots=args.make_plots,
                           output_dir=args.output_dir)
Exemplo n.º 4
0
def main(args):

    from desispec.io import meta
    from desispec.qa.qa_frame import qaframe_from_frame
    log = get_logger()

    log.info("starting")
    if args.specprod_dir is None:
        specprod_dir = meta.specprod_root()
    else:
        specprod_dir = args.specprod_dir

    # Generate qaframe (and figures?)
    _ = qaframe_from_frame(args.frame_file,
                           specprod_dir=specprod_dir,
                           make_plots=args.make_plots,
                           output_dir=args.output_dir)
Exemplo n.º 5
0
def main(args) :

    from desispec.io import meta
    from desispec.qa.qa_plots import exposure_fiberflat, exposure_s2n
    from desispec.qa.qa_exposure import QA_Exposure
    from desispec.io.meta import find_exposure_night

    log=get_logger()

    log.info("starting")

    # Setup
    if args.reduxdir is None:
        specprod_dir = meta.specprod_root()
    else:
        specprod_dir = args.reduxdir
    if args.channels is None:
        channels = ['b','r','z']
    else:
        channels = [iarg for iarg in args.channels.split(',')]

    # Find night
    night = find_exposure_night(args.expid)

    # Instantiate
    qa_exp = QA_Exposure(args.expid, night, specprod_dir=specprod_dir,
                         no_load=args.rebuild, multi_root=args.qamulti_root)
    # Rebuild?
    if args.rebuild:
        qa_exp.build_qa_data(rebuild=True)

    # Fiber QA
    if args.qatype == 'fiberflat':
        for channel in channels:
            exposure_fiberflat(channel, args.expid, 'meanflux')

    # S/N
    if args.qatype == 's2n':
        # S2N table
        qa_exp.s2n_table()
        # Figure time
        exposure_s2n(qa_exp, 'resid')

    # Slurp into a file?
    if args.slurp is not None:
        qa_exp.slurp_into_file(args.slurp)
Exemplo n.º 6
0
def main(args):

    from desispec.io import meta
    from desispec.qa.qa_plots import exposure_fiberflat
    log = get_logger()

    log.info("starting")
    if args.reduxdir is None:
        specprod_dir = meta.specprod_root()
    else:
        specprod_dir = args.reduxdir
    if args.channels is None:
        channels = ['b', 'r', 'z']
    else:
        channels = [iarg for iarg in args.channels.split(',')]

    # Fiber QA
    if args.qatype == 'fibermap':
        for channel in channels:
            exposure_fiberflat(channel, args.expid, 'meanflux')
Exemplo n.º 7
0
def main(args):

    from desispec.qa import QA_Prod
    from desispec.qa import html
    from desiutil.log import get_logger
    from desispec.io import meta

    log = get_logger()

    log.info("starting")
    # Initialize
    specprod_dir = meta.specprod_root()
    if args.qaprod_dir is None:
        qaprod_dir = meta.qaprod_root()
    else:
        qaprod_dir = args.qaprod_dir

    qa_prod = QA_Prod(specprod_dir, qaprod_dir=qaprod_dir)

    # Remake Frame QA?
    if args.make_frameqa > 0:
        log.info("(re)generating QA related to frames")
        if (args.make_frameqa % 4) >= 2:
            make_frame_plots = True
        else:
            make_frame_plots = False
        # Run
        if (args.make_frameqa & 2**0) or (args.make_frameqa & 2**1):
            qa_prod.make_frameqa(make_plots=make_frame_plots,
                                 clobber=args.clobber)

    # Slurp and write?
    if args.slurp:
        qa_prod.slurp(make=(args.make_frameqa > 0), remove=args.remove)
        qa_prod.write_qa_exposures()

    # Channel histograms
    if args.channel_hist is not None:
        # imports
        from matplotlib.backends.backend_pdf import PdfPages
        from desispec.qa import qa_plots as dqqp
        #
        qa_prod.load_data()
        outfile = qa_prod.prod_name + '_chist.pdf'
        pp = PdfPages(outfile)
        # Default?
        if args.channel_hist == 'default':
            dqqp.prod_channel_hist(qa_prod,
                                   'FIBERFLAT',
                                   'MAX_RMS',
                                   pp=pp,
                                   close=False)
            dqqp.prod_channel_hist(qa_prod,
                                   'SKYSUB',
                                   'MED_RESID',
                                   xlim=(-15, 15),
                                   pp=pp,
                                   close=False)
            dqqp.prod_channel_hist(qa_prod,
                                   'FLUXCALIB',
                                   'MAX_ZP_OFF',
                                   pp=pp,
                                   close=False)
        # Finish
        print("Writing {:s}".format(outfile))
        pp.close()

    # Time plots
    if args.time_series is not None:
        # QATYPE-METRIC
        from desispec.qa import qa_plots as dqqp
        qa_prod.load_data()
        # Run
        qatype, metric = args.time_series.split('-')
        outfile = qaprod_dir + '/QA_time_{:s}.png'.format(args.time_series)
        dqqp.prod_time_series(qa_prod,
                              qatype,
                              metric,
                              outfile=outfile,
                              bright_dark=args.bright_dark)

    # HTML
    if args.html:
        html.calib(qaprod_dir=qaprod_dir)
        html.make_exposures(qaprod_dir=qaprod_dir)
        html.toplevel(qaprod_dir=qaprod_dir)
Exemplo n.º 8
0
def main():
    '''Runs the process
    '''
    # Check environmental variables are set
    assert 'DESI_SPECTRO_DATA' in os.environ, 'Missing $DESI_SPECTRO_DATA environment variable'
    assert 'PRODNAME' in os.environ, 'Missing $PRODNAME environment variable'
    assert 'DESI_SPECTRO_REDUX' in os.environ, 'Missing $DESI_SPECTRO_REDUX environment variable'

    # Grab nights in data redux
    nights = glob.glob(dio_meta.specprod_root() + '/exposures/*')
    if len(nights) == 0:
        raise ValueError('No nights in exposures!')

    # Build up list of fibermap files
    fibermap_files = []
    for night in nights:
        onight = night[night.rfind('/'):]
        files = glob.glob(dio_meta.rawdata_root() + '/' + onight +
                          '/fibermap*')
        #
        fibermap_files += files

    # Get list of zbest files
    zbest_files = glob.glob(dio_meta.specprod_root() + '/bricks/*/zbest*')
    if len(zbest_files) == 0:
        raise ValueError('No redshifts?!')

    # Meta
    meta = get_meta()

    # Load+write table
    simtab_fil = dio_meta.specprod_root() + '/QA/sim_z_table.fits'
    dio_util.makepath(simtab_fil)
    simz_tab = dsqa_z.load_z(fibermap_files, zbest_files)
    simz_tab.meta = meta
    simz_tab.write(simtab_fil, overwrite=True)

    # Summary stats
    summ_file = dio_meta.specprod_root() + '/QA/sim_z_summ.yaml'
    dio_util.makepath(summ_file)
    summ_dict = dsqa_z.summ_stats(simz_tab)
    # Write
    with open(summ_file, 'w') as outfile:
        outfile.write(yaml.dump(meta))  #, default_flow_style=True) )
        outfile.write(yaml.dump(summ_dict, default_flow_style=False))
    #import pdb
    #pdb.set_trace()
    '''
    # Reorder + cut
    summ_tab=full_summ_tab['OBJTYPE', 'NTARG', 'N_SURVEY', 'EFF', 'MED_DZ', 'CAT_RATE', 'REQ_FINAL']
    # Write
    summ_tab.meta = meta
    summ_tab.write(summ_file,format='ascii.ecsv', 
        formats=dict(MED_DZ='%8.6f',EFF='%5.3f',CAT_RATE='%6.4f'))#,clobber=True)
    '''

    # QA Figures
    fig_file = dio_meta.specprod_root() + '/QA/sim_z.pdf'
    dio_util.makepath(fig_file)
    pp = PdfPages(fig_file)
    # Summ
    dsqa_z.summ_fig(simz_tab, summ_dict, meta, pp=pp)
    for objtype in ['ELG', 'LRG', 'QSO_T', 'QSO_L']:
        dsqa_z.obj_fig(simz_tab, objtype, summ_dict, pp=pp)
    # All done
    pp.close()
Exemplo n.º 9
0
def main(args) :

    from desispec.qa import QA_Prod
    from desispec.qa import html
    from desiutil.log import get_logger
    from desispec.io import meta
    from desispec.qa import qa_plots as dqqp

    log=get_logger()

    log.info("starting")
    # Initialize
    if args.specprod_dir is None:
        specprod_dir = meta.specprod_root()
    else:
        specprod_dir = args.specprod_dir
    if args.qaprod_dir is None:
        qaprod_dir = meta.qaprod_root(specprod_dir=specprod_dir)
    else:
        qaprod_dir = args.qaprod_dir

    qa_prod = QA_Prod(specprod_dir, qaprod_dir=qaprod_dir)

    # Restrict to a nights
    restrict_nights = [args.night] if args.night is not None else None

    # Remake Frame QA?
    if args.make_frameqa > 0:
        log.info("(re)generating QA related to frames")
        if (args.make_frameqa % 4) >= 2:
            make_frame_plots = True
        else:
            make_frame_plots = False
        # Run
        if (args.make_frameqa & 2**0) or (args.make_frameqa & 2**1):
            # Allow for restricted nights
            qa_prod.make_frameqa(make_plots=make_frame_plots, clobber=args.clobber,
                                 restrict_nights=restrict_nights)

    # Slurp and write?
    if args.slurp:
        qa_prod.qaexp_outroot = qaprod_dir 
        qa_prod.slurp_nights(make=(args.make_frameqa > 0), remove=args.remove, write_nights=True,
                             restrict_nights=restrict_nights)

    # Channel histograms
    if args.channel_hist is not None:
        # imports
        from matplotlib.backends.backend_pdf import PdfPages
        #
        qa_prod.load_data()
        outfile = qa_prod.prod_name+'_chist.pdf'
        pp = PdfPages(outfile)
        # Default?
        if args.channel_hist == 'default':
            dqqp.prod_channel_hist(qa_prod, 'FIBERFLAT', 'MAX_RMS', pp=pp, close=False)
            dqqp.prod_channel_hist(qa_prod, 'SKYSUB', 'MED_RESID', xlim=(-15,15), pp=pp, close=False)
            dqqp.prod_channel_hist(qa_prod, 'FLUXCALIB', 'MAX_ZP_OFF', pp=pp, close=False)
        # Finish
        print("Writing {:s}".format(outfile))
        pp.close()

    # Time plots
    if args.time_series is not None:
        # QATYPE-METRIC
        qa_prod.load_data()
        # Run
        qatype, metric = args.time_series.split('-')
        outfile= qaprod_dir+'/QA_time_{:s}.png'.format(args.time_series)
        dqqp.prod_time_series(qa_prod, qatype, metric, outfile=outfile, bright_dark=args.bright_dark)

    # <S/N> plot
    if args.S2N_plot:
        # Load up
        qa_prod.load_data()
        qa_prod.load_exposure_s2n()
        # Plot
        outfile= qaprod_dir+'/QA_S2N_{:s}.png'.format(args.xaxis)
        dqqp.prod_avg_s2n(qa_prod, optypes=['ELG', 'LRG', 'QSO'], xaxis=args.xaxis, outfile=outfile)

    # ZP plot
    if args.ZP_plot:
        # Load up
        qa_prod.load_data()
        # Plot
        outfile= qaprod_dir+'/QA_ZP_{:s}.png'.format(args.xaxis)
        dqqp.prod_ZP(qa_prod, xaxis=args.xaxis, outfile=outfile)

    # HTML
    if args.html:
        html.calib(qaprod_dir=qaprod_dir, specprod_dir=specprod_dir)
        html.make_exposures(qaprod_dir=qaprod_dir)
        html.toplevel(qaprod_dir=qaprod_dir)
Exemplo n.º 10
0
def main():
    '''Runs the process
    '''
    # Check environmental variables are set
    assert 'DESI_SPECTRO_DATA' in os.environ, 'Missing $DESI_SPECTRO_DATA environment variable'
    assert 'SPECPROD' in os.environ, 'Missing $SPECPROD environment variable'
    assert 'DESI_SPECTRO_REDUX' in os.environ, 'Missing $DESI_SPECTRO_REDUX environment variable'

    # Grab nights in data redux
    nights = glob.glob(dio_meta.specprod_root()+'/exposures/*')
    if len(nights) == 0:
        raise ValueError('No nights in exposures!')

    # Build up list of fibermap files
    fibermap_files = []
    for night in nights:
        onight = night[night.rfind('/'):]
        files = glob.glob(dio_meta.rawdata_root()+'/'+onight+'/fibermap*')
        #
        fibermap_files += files

    # Get list of zbest files
    zbest_files = glob.glob(dio_meta.specprod_root()+'/bricks/*/zbest*')
    if len(zbest_files) == 0:
        raise ValueError('No redshifts?!')

    # Meta
    meta = get_meta()

    # Load+write table
    simtab_fil = dio_meta.specprod_root()+'/QA/sim_z_table.fits'
    dio_util.makepath(simtab_fil)
    simz_tab = dsqa_z.load_z(fibermap_files, zbest_files)
    simz_tab.meta = meta
    simz_tab.write(simtab_fil,overwrite=True)

    # Summary stats
    summ_file = dio_meta.specprod_root()+'/QA/sim_z_summ.yaml'
    dio_util.makepath(summ_file)
    summ_dict = dsqa_z.summ_stats(simz_tab)
    # Write
    with open(summ_file, 'w') as outfile:
        outfile.write( yaml.dump(meta))#, default_flow_style=True) )
        outfile.write( yaml.dump(summ_dict, default_flow_style=False) )
    #import pdb
    #pdb.set_trace()


    '''
    # Reorder + cut
    summ_tab=full_summ_tab['OBJTYPE', 'NTARG', 'N_SURVEY', 'EFF', 'MED_DZ', 'CAT_RATE', 'REQ_FINAL']
    # Write
    summ_tab.meta = meta
    summ_tab.write(summ_file,format='ascii.ecsv',
        formats=dict(MED_DZ='%8.6f',EFF='%5.3f',CAT_RATE='%6.4f'))#,overwrite=True)
    '''

    # QA Figures
    fig_file = dio_meta.specprod_root()+'/QA/sim_z.pdf'
    dio_util.makepath(fig_file)
    pp = PdfPages(fig_file)
    # Summ
    dsqa_z.summ_fig(simz_tab, summ_dict, meta, pp=pp)
    for objtype in ['ELG','LRG', 'QSO_T', 'QSO_L']:
        dsqa_z.obj_fig(simz_tab, objtype, summ_dict, pp=pp)
    # All done
    pp.close()
Exemplo n.º 11
0
def main(args) :

    from desispec.qa import QA_Prod
    from desispec.qa import html
    from desiutil.log import get_logger
    from desispec.io import meta
    from desispec.qa import qa_plots as dqqp

    log=get_logger()

    log.info("starting")
    # Initialize
    specprod_dir = meta.specprod_root()
    if args.qaprod_dir is None:
        qaprod_dir = meta.qaprod_root()
    else:
        qaprod_dir = args.qaprod_dir

    qa_prod = QA_Prod(specprod_dir, qaprod_dir=qaprod_dir)

    # Remake Frame QA?
    if args.make_frameqa > 0:
        log.info("(re)generating QA related to frames")
        if (args.make_frameqa % 4) >= 2:
            make_frame_plots = True
        else:
            make_frame_plots = False
        # Run
        if (args.make_frameqa & 2**0) or (args.make_frameqa & 2**1):
            qa_prod.make_frameqa(make_plots=make_frame_plots, clobber=args.clobber)

    # Slurp and write?
    if args.slurp:
        qa_prod.slurp_nights(make=(args.make_frameqa > 0), remove=args.remove, write_nights=True)

    # Channel histograms
    if args.channel_hist is not None:
        # imports
        from matplotlib.backends.backend_pdf import PdfPages
        #
        qa_prod.load_data()
        outfile = qa_prod.prod_name+'_chist.pdf'
        pp = PdfPages(outfile)
        # Default?
        if args.channel_hist == 'default':
            dqqp.prod_channel_hist(qa_prod, 'FIBERFLAT', 'MAX_RMS', pp=pp, close=False)
            dqqp.prod_channel_hist(qa_prod, 'SKYSUB', 'MED_RESID', xlim=(-15,15), pp=pp, close=False)
            dqqp.prod_channel_hist(qa_prod, 'FLUXCALIB', 'MAX_ZP_OFF', pp=pp, close=False)
        # Finish
        print("Writing {:s}".format(outfile))
        pp.close()

    # Time plots
    if args.time_series is not None:
        # QATYPE-METRIC
        qa_prod.load_data()
        # Run
        qatype, metric = args.time_series.split('-')
        outfile= qaprod_dir+'/QA_time_{:s}.png'.format(args.time_series)
        dqqp.prod_time_series(qa_prod, qatype, metric, outfile=outfile, bright_dark=args.bright_dark)

    # <S/N> plot
    if args.S2N_plot:
        # Load up
        qa_prod.load_data()
        qa_prod.load_exposure_s2n()
        # Plot
        outfile= qaprod_dir+'/QA_S2N_{:s}.png'.format(args.xaxis)
        dqqp.prod_avg_s2n(qa_prod, optypes=['ELG', 'LRG', 'QSO'], xaxis=args.xaxis, outfile=outfile)

    # ZP plot
    if args.ZP_plot:
        # Load up
        qa_prod.load_data()
        # Plot
        outfile= qaprod_dir+'/QA_ZP_{:s}.png'.format(args.xaxis)
        dqqp.prod_ZP(qa_prod, xaxis=args.xaxis, outfile=outfile)

    # HTML
    if args.html:
        html.calib(qaprod_dir=qaprod_dir)
        html.make_exposures(qaprod_dir=qaprod_dir)
        html.toplevel(qaprod_dir=qaprod_dir)
Exemplo n.º 12
0
def main():
    """Runs the process
    """
    # Check environmental variables are set
    assert "DESI_SPECTRO_DATA" in os.environ, "Missing $DESI_SPECTRO_DATA environment variable"
    assert "PRODNAME" in os.environ, "Missing $PRODNAME environment variable"
    assert "DESI_SPECTRO_REDUX" in os.environ, "Missing $DESI_SPECTRO_REDUX environment variable"

    # Grab nights in data redux
    nights = glob.glob(dio_meta.specprod_root() + "/exposures/*")
    if len(nights) == 0:
        raise ValueError("No nights in exposures!")

    # Build up list of fibermap files
    fibermap_files = []
    for night in nights:
        onight = night[night.rfind("/") :]
        files = glob.glob(dio_meta.data_root() + "/" + onight + "/fibermap*")
        #
        fibermap_files += files

    # Get list of zbest files
    zbest_files = glob.glob(dio_meta.specprod_root() + "/bricks/*/zbest*")
    if len(zbest_files) == 0:
        raise ValueError("No redshifts?!")

    # Meta
    meta = get_meta()

    # Load+write table
    simtab_fil = dio_meta.specprod_root() + "/QA/sim_z_table.fits"
    dio_util.makepath(simtab_fil)
    simz_tab = dsqa_z.load_z(fibermap_files, zbest_files)
    simz_tab.meta = meta
    simz_tab.write(simtab_fil, overwrite=True)

    # Summary stats
    summ_file = dio_meta.specprod_root() + "/QA/sim_z_summ.yaml"
    dio_util.makepath(summ_file)
    summ_dict = dsqa_z.summ_stats(simz_tab)
    # Write
    with open(summ_file, "w") as outfile:
        outfile.write(yaml.dump(meta))  # , default_flow_style=True) )
        outfile.write(yaml.dump(summ_dict, default_flow_style=False))
    # import pdb
    # pdb.set_trace()

    """
    # Reorder + cut
    summ_tab=full_summ_tab['OBJTYPE', 'NTARG', 'N_SURVEY', 'EFF', 'MED_DZ', 'CAT_RATE', 'REQ_FINAL']
    # Write
    summ_tab.meta = meta
    summ_tab.write(summ_file,format='ascii.ecsv', 
        formats=dict(MED_DZ='%8.6f',EFF='%5.3f',CAT_RATE='%6.4f'))#,clobber=True)
    """

    # QA Figures
    fig_file = dio_meta.specprod_root() + "/QA/sim_z.pdf"
    dio_util.makepath(fig_file)
    pp = PdfPages(fig_file)
    # Summ
    dsqa_z.summ_fig(simz_tab, summ_dict, meta, pp=pp)
    for objtype in ["ELG", "LRG", "QSO_T", "QSO_L"]:
        dsqa_z.obj_fig(simz_tab, objtype, summ_dict, pp=pp)
    # All done
    pp.close()