code: def _get_invalid_info(granule_data):
      """Get a detailed report of the missing data.
  
      N/A: not applicable
      MISS: required value missing at time of processing
      OBPT: onboard pixel trim (overlapping/bow-tie pixel removed during SDR processing)
      OGPT: on-ground pixel trim (overlapping/bow-tie pixel removed during EDR processing)
      ERR: error occurred during processing / non-convergence
      ELINT: ellipsoid intersect failed / instrument line-of-sight does not intersect the Earth’s surface
      VDNE: value does not exist / processing algorithm did not execute
      SOUB: scaled out-of-bounds / solution not within allowed range
      """
      msg = None
      if issubclass(granule_data.dtype.type, np.integer):
          msg = (
              "na:"
              + str((granule_data == 65535).sum())
              + " miss:"
              + str((granule_data == 65534).sum())
              + " obpt:"
              + str((granule_data == 65533).sum())
              + " ogpt:"
              + str((granule_data == 65532).sum())
              + " err:"
              + str((granule_data == 65531).sum())
              + " elint:"
              + str((granule_data == 65530).sum())
              + " vdne:"
              + str((granule_data == 65529).sum())
              + " soub:"
              + str((granule_data == 65528).sum())
          )
      elif issubclass(granule_data.dtype.type, np.floating):
          msg = (
              "na:"
              + str((granule_data == -999.9).sum())
              + " miss:"
              + str((granule_data == -999.8).sum())
              + " obpt:"
              + str((granule_data == -999.7).sum())
              + " ogpt:"
              + str((granule_data == -999.6).sum())
              + " err:"
              + str((granule_data == -999.5).sum())
              + " elint:"
              + str((granule_data == -999.4).sum())
              + " vdne:"
              + str((granule_data == -999.3).sum())
              + " soub:"
              + str((granule_data == -999.2).sum())
          )
      return msg
  
imports: import logging
  import os.path
  from contextlib import suppress
  from datetime import datetime, timedelta
  from glob import glob
  import numpy
  from satpy.readers.viirs_atms_sdr_base import ATMS_DATASET_KEYS, DATASET_KEYS, VIIRS_DATASET_KEYS, JPSS_SDR_FileHandler
  from satpy.readers.yaml_reader import FileYAMLReader
label_desc: Use image node_id 1 for calling a global function with example usage: _get_invalid_info(granule_data) and returns: msg