docs: def validateSatellite(config, isochrone, kernel, stellar_mass, distance_modulus, trials=1, debug=False, seed=0):
      """
      Tool for simple MC validation studies -- specifically to create multiple realizations of
      a satellite given an CompositeIsochrone object, Kernel object, stellar mass (M_sol) for normalization,
      and distance_modulus.
      """
      logger.info('=== Validate Satellite ===')
  
      config.params['kernel']['params'] = [kernel.r_h] # TODO: Need better solution to update size??
      logger.debug('Using Plummer profile spatial model with half-light radius %.2f deg'%(config.params['kernel']['params'][0]))
      roi = ugali.observation.roi.ROI(config, kernel.lon, kernel.lat)
      simulator = ugali.simulation.simulator.Simulator(config, roi=roi)
      catalog_base = ugali.observation.catalog.Catalog(config,roi=roi)
      mask = ugali.observation.mask.Mask(config, roi)
  
      coords = (kernel.lon, kernel.lat)
      
      results = {'mc_lon': [],
                 'mc_lat': [],
                 'mc_distance_modulus': [],
                 'mc_stellar_mass': [],
                 'mc_radius': [],
                 'richness': [],
                 'log_likelihood': [],
                 'richness_lower': [],
                 'richness_upper': [],
                 'richness_limit': [],
                 'f': [],
                 'stellar_mass': []}
  
      numpy.random.seed(seed)
  
      for ii in range(0, trials):
          logger.info('=== Running Satellite %i ==='%ii)
  
          # Simulate
          catalog_satellite = simulator.satellite(isochrone, kernel, stellar_mass, distance_modulus, mc_source_id=1)
          #catalog_bootstrap = catalog_base.bootstrap()
          #catalog_merge = ugali.observation.catalog.mergeCatalogs([catalog_bootstrap, catalog_satellite])
          catalog_background = simulator.satellite(mc_source_id=1)
          catalog_merge = ugali.observation.catalog.mergeCatalogs([catalog_background, catalog_satellite])
  
          # Analyze
          likelihood = ugali.analysis.likelihood.Likelihood(config, roi, mask, catalog_merge, isochrone, kernel)
                                                                 
          likelihood.precomputeGridSearch([distance_modulus])
          richness, log_likelihood, richness_lower, richness_upper, richness_upper_limit, richness_raw, log_likelihood_raw, p, f = likelihood.gridSearch(coords=coords, distance_modulus_index=0)
  
          results['mc_lon'].append(kernel.lon)
          results['mc_lat'].append(kernel.lat)
          results['mc_distance_modulus'].append(distance_modulus)
          results['mc_stellar_mass'].append(stellar_mass)
          results['mc_radius'].append(kernel.r_h)
          results['richness'].append(richness)
          results['log_likelihood'].append(log_likelihood)
          results['richness_lower'].append(richness_lower)
          results['richness_upper'].append(richness_upper)
          results['richness_limit'].append(richness_upper_limit)
          results['f'].append(f)
          results['stellar_mass'].append(richness * isochrone.stellarMass())
  
          logger.info('MC Stellar Mass = %.2f, Measured Stellar Mass = %.2f'%(stellar_mass,richness * isochrone.stellarMass()))
          if debug:
              return likelihood, richness, log_likelihood, richness_lower, richness_upper, richness_upper_limit, richness_raw, log_likelihood_raw, p, f
  
      return results