def METHOD_NAME(fibermapfile):
    fm = fitsio.read(fibermapfile, 'FIBERMAP', columns=['PETAL_LOC', 'DELTA_X', 'DELTA_Y'])
    night, expid = np.array(fibermapfile.split('/')[-3:-1]).astype(int) # fragile...
    inan = np.logical_or(np.isnan(fm['DELTA_X']), np.isnan(fm['DELTA_Y']))
    ibig = fm['DELTA_X']**2 + fm['DELTA_Y']**2 > 0.030**2
    ibad = np.logical_or(inan, ibig)
    # get the per-petal fraction of bad positioners
    petals = set(fm['PETAL_LOC'])
    rows = list()
    for petal in petals:
        npos = np.sum(fm['PETAL_LOC'] == petal) # should always be 500
        fbad = np.sum((fm['PETAL_LOC'] == petal) * ibad) / npos
        rows.append((night, expid, petal, fbad))
    out = Table(rows=rows, names=('NIGHT', 'EXPID', 'PETAL_LOC', 'FBAD'),
                dtype=(np.int32, np.int32, np.int16, np.float32))
    return out