class_docstr: SEVIRI native format reader.
  
  **Calibration**
  
  See :mod:`satpy.readers.seviri_base`.
  
  **Padding channel data to full disk**
  
  By providing the `fill_disk` as True in the `reader_kwargs`, the channel is loaded
  as full disk, padded with no-data where necessary. This is especially useful for the
  HRV channel, but can also be used for RSS and ROI data. By default, the original,
  unpadded, data are loaded::
  
      scene = satpy.Scene(filenames,
                          reader='seviri_l1b_native',
                          reader_kwargs={'fill_disk': False})
  
  **Metadata**
  
  See :mod:`satpy.readers.seviri_base`.
docstr: Read the header info.
docstr_tok: ["Read","the","header","info","."]
code: def _read_header(self):
      """Read the header info."""
      self.header.update(read_header(self.filename))
  
      if "15_SECONDARY_PRODUCT_HEADER" not in self.header:
          # No archive header, that means we have a complete file
          # including all channels.
          self.header[
              "15_SECONDARY_PRODUCT_HEADER"
          ] = DEFAULT_15_SECONDARY_PRODUCT_HEADER
  
      data15hd = self.header["15_DATA_HEADER"]
      sec15hd = self.header["15_SECONDARY_PRODUCT_HEADER"]
  
      # Set the list of available channels:
      self.mda["available_channels"] = get_available_channels(
          self.header
      )
      self.mda["channel_list"] = [
          i
          for i in CHANNEL_NAMES.values()
          if self.mda["available_channels"][i]
      ]
  
      self.platform_id = data15hd["SatelliteStatus"][
          "SatelliteDefinition"
      ]["SatelliteId"]
      self.mda["platform_name"] = "Meteosat-" + SATNUM[self.platform_id]
      self.mda["offset_corrected"] = (
          data15hd["GeometricProcessing"]["EarthModel"][
              "TypeOfEarthModel"
          ]
          == 2
      )
  
      equator_radius = (
          data15hd["GeometricProcessing"]["EarthModel"][
              "EquatorialRadius"
          ]
          * 1000.0
      )
      north_polar_radius = (
          data15hd["GeometricProcessing"]["EarthModel"][
              "NorthPolarRadius"
          ]
          * 1000.0
      )
      south_polar_radius = (
          data15hd["GeometricProcessing"]["EarthModel"][
              "SouthPolarRadius"
          ]
          * 1000.0
      )
      polar_radius = (north_polar_radius + south_polar_radius) * 0.5
      ssp_lon = data15hd["ImageDescription"]["ProjectionDescription"][
          "LongitudeOfSSP"
      ]
  
      self.mda["projection_parameters"] = {
          "a": equator_radius,
          "b": polar_radius,
          "h": 35785831.00,
          "ssp_longitude": ssp_lon,
      }
  
      north = int(sec15hd["NorthLineSelectedRectangle"]["Value"])
      east = int(sec15hd["EastColumnSelectedRectangle"]["Value"])
      south = int(sec15hd["SouthLineSelectedRectangle"]["Value"])
      west = int(sec15hd["WestColumnSelectedRectangle"]["Value"])
  
      ncolumns = west - east + 1
      nrows = north - south + 1
  
      # check if the file has less rows or columns than
      # the maximum, if so it is a rapid scanning service
      # or region of interest file
      if (nrows < VISIR_NUM_LINES) or (ncolumns < VISIR_NUM_COLUMNS):
          self.mda["is_full_disk"] = False
      else:
          self.mda["is_full_disk"] = True
  
      # If the number of columns in the file is not divisible by 4,
      # UMARF will add extra columns to the file
      modulo = ncolumns % 4
      padding = 0
      if modulo > 0:
          padding = 4 - modulo
      cols_visir = ncolumns + padding
  
      # Check the VISIR calculated column dimension against
      # the header information
      cols_visir_hdr = int(sec15hd["NumberColumnsVISIR"]["Value"])
      if cols_visir_hdr != cols_visir:
          logger.warning(
              "Number of VISIR columns from the header is incorrect!"
          )
          logger.warning("Header: %d", cols_visir_hdr)
          logger.warning("Calculated: = %d", cols_visir)
  
      # HRV Channel - check if the area is reduced in east west
      # direction as this affects the number of columns in the file
      cols_hrv_hdr = int(sec15hd["NumberColumnsHRV"]["Value"])
      if ncolumns < VISIR_NUM_COLUMNS:
          cols_hrv = cols_hrv_hdr
      else:
          cols_hrv = int(cols_hrv_hdr / 2)
  
      # self.mda represents the 16bit dimensions not 10bit
      self.mda["number_of_lines"] = int(
          sec15hd["NumberLinesVISIR"]["Value"]
      )
      self.mda["number_of_columns"] = cols_visir
      self.mda["hrv_number_of_lines"] = int(
          sec15hd["NumberLinesHRV"]["Value"]
      )
      self.mda["hrv_number_of_columns"] = cols_hrv
  
      if "15_MAIN_PRODUCT_HEADER" not in self.header:
          logger.info(
              "Quality flag check was not possible due to missing 15_MAIN_PRODUCT_HEADER."
          )
      elif (
          self.header["15_MAIN_PRODUCT_HEADER"]["QQOV"]["Value"]
          == "NOK"
      ):
          warnings.warn(
              "The quality flag for this file indicates not OK. "
              "Use this data with caution!",
              UserWarning,
              stacklevel=2,
          )
  
imports: import logging
  import warnings
  from datetime import datetime, timedelta
  import dask.array
  import numpy
  import xarray
  from pyresample import geometry
  from satpy._compat import cached_property
  from satpy.readers._geos_area import get_area_definition, get_geos_area_naming
  from satpy.readers.eum_base import get_service_mode, recarray2dict, time_cds_short
  from satpy.readers.file_handlers import BaseFileHandler
  from satpy.readers.seviri_base import CHANNEL_NAMES, HRV_NUM_COLUMNS, HRV_NUM_LINES, REPEAT_CYCLE_DURATION, SATNUM, VISIR_NUM_COLUMNS, VISIR_NUM_LINES, NoValidOrbitParams, OrbitPolynomialFinder, SEVIRICalibrationHandler, add_scanline_acq_time, calculate_area_extent, create_coef_dict, dec10216, get_cds_time, get_satpos, pad_data_horizontally, pad_data_vertically, round_nom_time
  from satpy.readers.seviri_l1b_native_hdr import DEFAULT_15_SECONDARY_PRODUCT_HEADER, GSDTRecords, get_native_header, native_trailer
  from satpy.readers.utils import reduce_mda
  from satpy.utils import get_legacy_chunk_size
label_desc: Use image node_id 11 for calling the NativeMSGFileHandler obj's underlying member method code with example usage: obj._read_header() without return types