docs: def satellite(self,stellar_mass,distance_modulus,mc_source_id=1,seed=None,**kwargs):
          """
          Create a simulated satellite. Returns a catalog object.
          """
          if seed is not None: np.random.seed(seed)
  
          isochrone = kwargs.pop('isochrone',self.isochrone)
          kernel    = kwargs.pop('kernel',self.kernel)
  
          for k,v in kwargs.items():
              if k in kernel.params.keys(): setattr(kernel,k,v)
  
          mag_1, mag_2 = isochrone.simulate(stellar_mass, distance_modulus)
          lon, lat     = kernel.simulate(len(mag_1))
   
          logger.info("Simulating %i satellite stars..."%len(mag_1))
          pix = ang2pix(self.config['coords']['nside_pixel'], lon, lat)
  
          # There is probably a better way to do this step without creating the full HEALPix map
          mask = -1. * np.ones(hp.nside2npix(self.config['coords']['nside_pixel']))
          mask[self.roi.pixels] = self.mask.mask_1.mask_roi_sparse
          mag_lim_1 = mask[pix]
          mask = -1. * np.ones(hp.nside2npix(self.config['coords']['nside_pixel']))
          mask[self.roi.pixels] = self.mask.mask_2.mask_roi_sparse
          mag_lim_2 = mask[pix]
  
          mag_err_1 = self.photo_err_1(mag_lim_1 - mag_1)
          mag_err_2 = self.photo_err_2(mag_lim_2 - mag_2)
  
          # Randomize magnitudes by their errors
          mag_obs_1 = mag_1+np.random.normal(size=len(mag_1))*mag_err_1
          mag_obs_2 = mag_2+np.random.normal(size=len(mag_2))*mag_err_2
          #mag_obs_1 = mag_1
          #mag_obs_2 = mag_2
  
          #select = np.logical_and(mag_obs_1 < mag_lim_1, mag_obs_2 < mag_lim_2)
          select = (mag_lim_1>mag_obs_1)&(mag_lim_2>mag_obs_2)
  
          # Make sure objects lie within the original cmd (should also be done later...)
          #select &= (ugali.utils.binning.take2D(self.mask.solid_angle_cmd, mag_obs_1 - mag_obs_2, mag_obs_1,self.roi.bins_color, self.roi.bins_mag) > 0)
  
          #return mag_1_obs[cut], mag_2_obs[cut], lon[cut], lat[cut]
          logger.info("Clipping %i simulated satellite stars..."%(~select).sum())
          mc_source_id = mc_source_id * np.ones(len(mag_1))
          
          hdu = ugali.observation.catalog.makeHDU(self.config,mag_obs_1[select],mag_err_1[select],
                                                  mag_obs_2[select],mag_err_2[select], 
                                                  lon[select],lat[select],mc_source_id[select])
          catalog = ugali.observation.catalog.Catalog(self.config, data=hdu.data)
          return catalog