class_docstr: Base file handler for HDF EOS data for both L1b and L2 products.
class_docstr_tok: ["Base","file","handler","for","HDF","EOS","data","for","both","L1b","and","L2","products","."]
code: def _get_good_data_mask(self, data_arr, is_category=False):
      try:
          fill_value = data_arr.attrs["_FillValue"]
      except KeyError:
          return None, None
  
      # preserve integer data types if possible
      if is_category and np.issubdtype(data_arr.dtype, np.integer):
          # no need to mask, the fill value is already what it needs to be
          return None, None
      fill_type = (
          data_arr.dtype.type
          if np.issubdtype(data_arr.dtype, np.floating)
          else np.float32
      )
      new_fill = fill_type(np.nan)
      data_arr.attrs.pop("_FillValue", None)
      good_mask = data_arr != fill_value
      return good_mask, new_fill
  
imports: from __future__ import annotations
  import logging
  import re
  from ast import literal_eval
  from contextlib import suppress
  from datetime import datetime
  import numpy
  import xarray
  from pyhdf.error import HDF4Error
  from pyhdf.SD import SD
  from satpy import DataID
  from satpy.readers.file_handlers import BaseFileHandler
  from satpy.utils import normalize_low_res_chunks
label_desc: Use image node_id 16 for calling the HDFEOSBaseFileReader obj's underlying member method code with example usage: obj._get_good_data_mask(data_arr, is_category) and returns: good_mask,  new_fill, None,  None, None,  None