def METHOD_NAME():
    p = argparse.ArgumentParser()
    p.add_argument('--reduxdir', type=str, help='spectro redux base dir overrides $DESI_SPECTRO_REDUX/$SPECPROD')
    p.add_argument('--mp', type=int, default=1, help='number of multiprocessing cores')
    p.add_argument('--validate-zpix', action='store_true', help='Validate the zpix- catalogs.')
    p.add_argument('--validate-ztile', action='store_true', help='Validate the ztile- catalogs.')
    args = p.parse_args()
    log = get_logger()
    if args.reduxdir is None:
        args.reduxdir = specprod_root()
    if args.validate_zpix:
        zprefix = 'zpix'
        columns = ['TARGETID', 'HEALPIX', 'TARGET_RA', 'TARGET_DEC']
        zcatfiles = sorted(set(glob(os.path.join(args.reduxdir, 'zcatalog', '{}-*.fits'.format(zprefix)))))
        for zcatfile in zcatfiles:
            log.info('Working on redshift catalog {}'.format(zcatfile))            
            zcat = Table(fitsio.read(zcatfile, 'ZCATALOG', columns=columns))
            tileids = np.unique(fitsio.read(zcatfile, 'EXP_FIBERMAP', columns='TILEID'))
            hdr = fitsio.read_header(zcatfile, ext='ZCATALOG')
            survey, program = hdr['SURVEY'], hdr['PROGRAM']
            # multiprocess over healpixels
            mpargs = [[healpix, survey, program, args.reduxdir] for healpix in set(zcat['HEALPIX'])]
            if args.mp > 1:
                with multiprocessing.Pool(args.mp) as P:
                    P.map(_one_healpix, mpargs)
            else:
                [one_healpix(*mparg) for mparg in mpargs]
    if args.validate_ztile:
        zprefix = 'ztile'
        basecolumns = ['TARGETID', 'TILEID', 'PETAL_LOC', 'TARGET_RA', 'TARGET_DEC']
        for coadd_type in ['cumulative', 'perexp', 'pernight', '1x_depth', '4x_depth', 'lowspeed']:
            log.info('Working on coadd type {}'.format(coadd_type))
            zcatfiles = sorted(set(glob(os.path.join(args.reduxdir, 'zcatalog', '{}-*{}.fits'.format(zprefix, coadd_type)))))
            for zcatfile in zcatfiles:
                log.info('Working on redshift catalog {}'.format(zcatfile))
                if coadd_type == 'cumulative':
                    columns = basecolumns + ['LASTNIGHT']
                elif coadd_type == 'perexp':
                    columns = basecolumns + ['NIGHT', 'EXPID']
                elif coadd_type == 'pernight':
                    columns = basecolumns + ['NIGHT']
                elif coadd_type == '1x_depth' or coadd_type == '4x_depth' or coadd_type == 'lowspeed':
                    columns = basecolumns + ['SPGRPVAL']
                zcat = Table(fitsio.read(zcatfile, 'ZCATALOG', columns=columns))
                # multiprocess over tiles
                mpargs = [[tileid, zcat[tileid == zcat['TILEID']], coadd_type, args.reduxdir]
                          for tileid in set(zcat['TILEID'])]
                if args.mp > 1:
                    with multiprocessing.Pool(args.mp) as P:
                        P.map(_one_tile, mpargs)
                else:
                    [one_tile(*mparg) for mparg in mpargs]