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
def validateSatellite ( config , isochrone , kernel , stellar_mass , distance_modulus , trials = 1 , debug = False , seed = 0 ) : logger . info ( '=== Validate Satellite ===' ) config . params [ 'kernel' ] [ 'params' ] = [ kernel . r_h ] 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 ) catalog_satellite = simulator . satellite ( isochrone , kernel , stellar_mass , distance_modulus , mc_source_id = 1 ) catalog_background = simulator . satellite ( mc_source_id = 1 ) catalog_merge = ugali . observation . catalog . mergeCatalogs ( [ catalog_background , catalog_satellite ] ) 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
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.