def manual_probe_rejection(data_df, row_metadata_df, manual_rejection_field):
    """Remove probes that were manually selected for rejection.

    Args:
        data_df (pandas df)
        row_metadata_df (pandas df)
        manual_rejection_field (string): row metadata field
    Returns:
        out_df (pandas df): potentially smaller than input
    """
    # Extract manual_rejection_field
    keep_probe_str = row_metadata_df.loc[:, manual_rejection_field]

    # Convert strings to booleans
    keep_probe_bool = (keep_probe_str == "TRUE")

    # Check that the list of good probes is not empty
    assert keep_probe_bool.any(), (
        "No probes were marked TRUE (i.e. suitable).\n" +
        "row_metadata_df.loc[:, '{}']: \n{}").format(manual_rejection_field, keep_probe_str)

    # Return the good probes
    out_df = data_df[keep_probe_bool.values]
    assert not out_df.empty, "All probes were filtered out!"
    return out_df