docs: def appraise_source_model(self):
          """
          Identify parameters defined in NRML source model file, so that
          shapefile contains only source model specific fields.
          """
          for src in self.sources:
              # source params
              src_taglist = get_taglist(src)
              if "areaSource" in src.tag:
                  self.has_area_source = True
                  npd_node = src.nodes[src_taglist.index("nodalPlaneDist")]
                  npd_size = len(npd_node)
                  hdd_node = src.nodes[src_taglist.index("hypoDepthDist")]
                  hdd_size = len(hdd_node)
                  self.num_np = (npd_size if npd_size > self.num_np
                                 else self.num_np)
                  self.num_hd = (hdd_size if hdd_size > self.num_hd
                                 else self.num_hd)
              elif "pointSource" in src.tag:
                  self.has_point_source = True
                  npd_node = src.nodes[src_taglist.index("nodalPlaneDist")]
                  npd_size = len(npd_node)
                  hdd_node = src.nodes[src_taglist.index("hypoDepthDist")]
                  hdd_size = len(hdd_node)
                  self.num_np = (npd_size if npd_size > self.num_np
                                 else self.num_np)
                  self.num_hd = (hdd_size if hdd_size > self.num_hd
                                 else self.num_hd)
              elif "simpleFaultSource" in src.tag:
                  self.has_simple_fault_geometry = True
              elif "complexFaultSource" in src.tag:
                  self.has_complex_fault_geometry = True
              elif "characteristicFaultSource" in src.tag:
                  # Get the surface node
                  surface_node = src.nodes[src_taglist.index("surface")]
                  p_size = 0
                  for surface in surface_node.nodes:
                      if "simpleFaultGeometry" in surface.tag:
                          self.has_simple_fault_geometry = True
                      elif "complexFaultGeometry" in surface.tag:
                          self.has_complex_fault_geometry = True
                      elif "planarSurface" in surface.tag:
                          self.has_planar_geometry = True
                          p_size += 1
                  self.num_p = p_size if p_size > self.num_p else self.num_p
              else:
                  pass
  
              # MFD params
              if "truncGutenbergRichterMFD" in src_taglist:
                  self.has_mfd_gr = True
              elif "incrementalMFD" in src_taglist:
                  self.has_mfd_incremental = True
                  # Get rate size
                  mfd_node = src.nodes[src_taglist.index("incrementalMFD")]
                  r_size = len(mfd_node.nodes[0].text)
                  self.num_r = r_size if r_size > self.num_r else self.num_r
              else:
                  pass