def METHOD_NAME(args):
    log = get_logger()
    if args.expfile is None:
        args.expfile = io.findfile('exposures')
        if not os.path.exists(args.expfile):
            msg = f'Missing {args.expfile}; please create or specify --expfile'
            log.critical(msg)
            sys.exit(1)
    exppix = get_exp2healpix_map(args.expfile, survey=args.survey, program=args.program)
    reduxdir = io.specprod_root()
    if args.healpix is not None:
        allpixels = [int(p) for p in args.healpix.split(',')]
    else:
        allpixels = np.unique(exppix['HEALPIX'])
    npix = len(allpixels)
    log.info(f'Submitting jobs for {npix} healpix')
    for i in range(0, len(allpixels), args.bundle_healpix):
        healpixels = allpixels[i:i+args.bundle_healpix]
        hpixexpfiles = list()
        ntilepetals = 0
        for healpix in healpixels:
            #- outdir is relative to specprod
            rrfile = io.findfile('redrock', healpix=healpix, survey=args.survey, faprogram=args.program)
            outdir = os.path.dirname(rrfile)
            os.makedirs(outdir, exist_ok=True)
            ii = exppix['HEALPIX'] == healpix
            hpixexpfile = f'{outdir}/hpixexp-{args.survey}-{args.program}-{healpix}.csv'
            exppix[ii].write(hpixexpfile, overwrite=True)
            ntilepetals += len(set(list(zip(exppix['TILEID'][ii], exppix['SPECTRO'][ii]))))
            hpixexpfiles.append(hpixexpfile)
        cmdline = [
            'desi_zproc',
            '--groupname', 'healpix',
            '--survey', args.survey,
            '--program', args.program,
            ]
        cmdline.append('--healpix')
        cmdline.extend( [str(hp) for hp in healpixels] )
        cmdline.append('--expfiles')
        cmdline.extend(hpixexpfiles)
        #- very roughly, one minute per input tile-petal with min/max applied
        runtime = max(20, min(ntilepetals, 120))
        batchscript = create_desi_zproc_batch_script(
                group='healpix',
                healpix=healpixels,
                survey=args.survey,
                program=args.program,
                queue=args.batch_queue,
                system_name=args.system_name,
                cmdline=cmdline,
                runtime=runtime,
                )
        if not args.nosubmit:
            cmd = ['sbatch' ,]
            if args.batch_reservation:
                cmd.extend(['--reservation', args.batch_reservation])
            if args.batch_dependency:
                cmd.extend(['--dependency', args.batch_dependency])
            # - sbatch requires the script to be last, after all options
            cmd.append(batchscript)
            err = subprocess.call(cmd)
            basename = os.path.basename(batchscript)
            if err == 0:
                log.info(f'submitted {basename}')
            else:
                log.error(f'Error {err} submitting {basename}')
            time.sleep(0.1)