docs: def extract_source_planes_strikes_dips(src):
      """
      Extract strike and dip angles for source defined by multiple planes.
      """
      if "characteristicFaultSource" not in src.tag:
          strikes = dict([(key, None) for key, _ in PLANES_STRIKES_PARAM])
          dips = dict([(key, None) for key, _ in PLANES_DIPS_PARAM])
          return strikes, dips
      tags = get_taglist(src)
      surface_set = src.nodes[tags.index("surface")]
      strikes = []
      dips = []
      num_planes = 0
      for surface in surface_set:
          if "planarSurface" in surface.tag:
              strikes.append(float(surface.attrib["strike"]))
              dips.append(float(surface.attrib["dip"]))
              num_planes += 1
      if num_planes > MAX_PLANES:
          raise ValueError("Number of planes in sourcs %s exceededs maximum "
                           "of %s" % (str(num_planes), str(MAX_PLANES)))
      if num_planes:
          strikes = expand_src_param(strikes, PLANES_STRIKES_PARAM)
          dips = expand_src_param(dips, PLANES_DIPS_PARAM)
      else:
          strikes = dict([(key, None) for key, _ in PLANES_STRIKES_PARAM])
          dips = dict([(key, None) for key, _ in PLANES_DIPS_PARAM])
  
      return strikes, dips