def METHOD_NAME(filename):
    """Read fiberflat from filename
    Args:
        filename (str): Name of fiberflat file, or (night, expid, camera) tuple
    Returns:
        FiberFlat object with attributes
            fiberflat, ivar, mask, meanspec, wave, header
    Notes:
        fiberflat, ivar, mask are 2D [nspec, nwave]
        meanspec and wave are 1D [nwave]
    """
    #- check if outfile is (night, expid, camera) tuple instead
    if isinstance(filename, (tuple, list)) and len(filename) == 3:
        night, expid, camera = filename
        filename = findfile('fiberflat', night, expid, camera)
    log = get_logger()
    t0 = time.time()
    filename = checkgzip(filename)
    with fits.open(filename, uint=True, memmap=False) as fx:
        header    = fx[0].header
        fiberflat = native_endian(fx[0].data.astype('f8'))
        ivar      = native_endian(fx["IVAR"].data.astype('f8'))
        mask      = native_endian(fx["MASK"].data)
        meanspec  = native_endian(fx["MEANSPEC"].data.astype('f8'))
        wave      = native_endian(fx["WAVELENGTH"].data.astype('f8'))
        if 'FIBERMAP' in fx:
            fibermap = fx['FIBERMAP'].data
        else:
            fibermap = None
    duration = time.time() - t0
    log.info(iotime.format('read', filename, duration))
    return FiberFlat(wave, fiberflat, ivar, mask, meanspec, header=header, fibermap=fibermap)