class_docstr: L15 Data Header handler.
  
  Reference Document (EUM/MSG/ICD/105):
  MSG Level 1.5 Image Data Format Description
docstr: Get celestial events data.
code: def celestial_events(self):
      """Get celestial events data."""
      earth_moon_sun_coeff = [
          ("StartTime", time_cds_short),
          ("EndTime", time_cds_short),
          ("AlphaCoef", (np.float64, 8)),
          ("BetaCoef", (np.float64, 8)),
      ]
  
      star_coeff = [
          ("StarId", np.uint16),
          ("StartTime", time_cds_short),
          ("EndTime", time_cds_short),
          ("AlphaCoef", (np.float64, 8)),
          ("BetaCoef", (np.float64, 8)),
      ]
  
      ephemeris = [
          ("PeriodTimeStart", time_cds_short),
          ("PeriodTimeEnd", time_cds_short),
          ("RelatedOrbitFileTime", "S15"),
          ("RelatedAttitudeFileTime", "S15"),
          ("EarthEphemeris", (earth_moon_sun_coeff, 100)),
          ("MoonEphemeris", (earth_moon_sun_coeff, 100)),
          ("SunEphemeris", (earth_moon_sun_coeff, 100)),
          ("StarEphemeris", (star_coeff, (20, 100))),
      ]
  
      relation_to_image = [
          ("TypeOfEclipse", np.uint8),
          ("EclipseStartTime", time_cds_short),
          ("EclipseEndTime", time_cds_short),
          ("VisibleBodiesInImage", np.uint8),
          ("BodiesCloseToFOV", np.uint8),
          ("ImpactOnImageQuality", np.uint8),
      ]
  
      record = [
          ("CelestialBodiesPosition", ephemeris),
          ("RelationToImage", relation_to_image),
      ]
  
      return record
  
imports: import numpy
  from satpy.readers.eum_base import time_cds, time_cds_expanded, time_cds_short
  from satpy.readers.seviri_base import HRV_NUM_COLUMNS, HRV_NUM_LINES, VISIR_NUM_COLUMNS, VISIR_NUM_LINES
label_desc: Use image node_id 4 for calling the L15DataHeaderRecord obj's underlying member method code with example usage: obj.celestial_events() and returns: record