Exemplo n.º 1
0
    def run_on_single_catalog(self, catalog_instance, catalog_name, output_dir):
        prepared = self.prepare_galaxy_catalog(catalog_instance)
        if prepared is None:
            return TestResult(skipped=True)

        if self.use_redmapper:
            try:
                redmapper = GCRCatalogs.load_catalog(catalog_name+'_redmapper')
            except:
                return TestResult(skipped=True)
            
            redmapper = redmapper.get_quantities(['galaxy_id'])
            
        absolute_magnitude_field, mag_fields, quantities_needed = prepared
        bins     = (self.z_bins, self.c_bins, self.mass_bins)
        hist_cen = np.zeros((self.n_z_bins, self.n_c_bins, self.n_mass_bins, self.n_bands-1))
        hist_sat = np.zeros_like(hist_cen)
        hist_mem_cen = np.zeros_like(hist_cen)
        hist_mem_sat = np.zeros_like(hist_cen)
        
        print(absolute_magnitude_field)
        cen_query = GCRQuery('is_central & ({} < -19)'.format(absolute_magnitude_field))
        sat_query = GCRQuery('(~is_central) & ({} < -19)'.format(absolute_magnitude_field))
        
        if 'r_host' in quantities_needed and 'r_vir' in quantities_needed:
            sat_query &= GCRQuery('r_host < r_vir')


        for data in catalog_instance.get_quantities(quantities_needed, return_iterator=True):
            cen_mask = cen_query.mask(data)
            sat_mask = sat_query.mask(data)
            if self.use_redmapper:
                mem_mask = np.in1d(data['galaxy_id'], redmapper['galaxy_id'])

            for i in range(self.n_bands-1):
                color = data[mag_fields[i]] - data[mag_fields[i+1]]

                hdata = np.stack([data['redshift_true'], color, data['halo_mass']]).T            
                hist_cen[:,:,:,i] += np.histogramdd(hdata[cen_mask], bins)[0]
                hist_sat[:,:,:,i] += np.histogramdd(hdata[sat_mask], bins)[0]
                if self.use_redmapper:
                    hist_mem_cen[:,:,:,i] += np.histogramdd(hdata[mem_mask & cen_mask], bins)[0]
                    hist_mem_sat[:,:,:,i] += np.histogramdd(hdata[mem_mask & sat_mask], bins)[0]

        data = cen_mask = sat_mask = mem_mask = None
        
        rs_mean, rs_scat, red_frac_sat, red_frac_cen = self.compute_summary_statistics(hist_sat, hist_cen,
                                                                                    hist_mem_sat, hist_mem_cen)

        red_seq = {'rs_mean':rs_mean,
                   'rs_scat':rs_scat,
                   'red_frac_sat':red_frac_sat,
                   'red_frac_cen':red_frac_cen}
        
        self.make_plot(red_seq, hist_cen, hist_sat, hist_mem_cen, hist_mem_sat, catalog_name, os.path.join(output_dir, 'red_sequence.png'))

        return TestResult(inspect_only=True)
Exemplo n.º 2
0
    def run_on_single_catalog(self, catalog_instance, catalog_name,
                              output_dir):
        prepared = self.prepare_galaxy_catalog(catalog_instance)
        if prepared is None:
            return TestResult(skipped=True)

        absolute_magnitude1_field, absolute_magnitude2_field, quantities_needed = prepared
        colnames = [absolute_magnitude2_field, 'halo_mass', 'redshift_true']
        bins = (self.magnitude_bins, self.mass_bins, self.z_bins)
        hist_cen = np.zeros(
            (self.n_magnitude_bins, self.n_mass_bins, self.n_z_bins))
        hist_sat = np.zeros_like(hist_cen)

        red_query = GCRQuery((self.color_cut, absolute_magnitude1_field,
                              absolute_magnitude2_field, 'redshift_true'))

        cen_query = GCRQuery('is_central') & red_query
        sat_query = ~GCRQuery('is_central') & red_query

        if 'r_host' in quantities_needed and 'r_vir' in quantities_needed:
            sat_query &= GCRQuery('r_host < r_vir')

        for data in catalog_instance.get_quantities(quantities_needed,
                                                    return_iterator=True):
            cen_mask = cen_query.mask(data)
            sat_mask = sat_query.mask(data)

            data = np.stack((data[k] for k in colnames)).T
            hist_cen += np.histogramdd(data[cen_mask], bins)[0]
            hist_sat += np.histogramdd(data[sat_mask], bins)[0]

        data = cen_mask = sat_mask = None

        halo_counts = hist_cen.sum(axis=0)
        clf = dict()
        clf['sat'] = hist_sat / halo_counts
        clf['cen'] = hist_cen / halo_counts
        clf['tot'] = clf['sat'] + clf['cen']

        self.make_plot(clf, catalog_name, os.path.join(output_dir, 'clf.png'))

        return TestResult(passed=True, score=0)
Exemplo n.º 3
0
    def run_on_single_catalog(self, catalog_instance, catalog_name,
                              output_dir):
        prepared = self.prepare_galaxy_catalog(catalog_instance)
        if prepared is None:
            return TestResult(skipped=True)

        absolute_magnitude1_field, absolute_magnitude2_field, quantities_needed = prepared

        # find out color cut threshold
        color = []
        for data in catalog_instance.get_quantities(
            [
                absolute_magnitude1_field, absolute_magnitude2_field,
                'redshift_true'
            ],
                filters=['redshift_true < 0.2'],
                return_iterator=True,
        ):
            color.append(data[absolute_magnitude1_field] -
                         data[absolute_magnitude2_field])

        color_cut_percentile_at = 100.0 * (1 - self.color_cut_fraction)
        color_cut_thres = np.percentile(np.concatenate(color),
                                        color_cut_percentile_at)
        del color

        colnames = [absolute_magnitude2_field, 'halo_mass', 'redshift_true']
        bins = (self.magnitude_bins, self.mass_bins, self.z_bins)
        hist_cen = np.zeros(
            (self.n_magnitude_bins, self.n_mass_bins, self.n_z_bins))
        hist_sat = np.zeros_like(hist_cen)

        cen_query = GCRQuery('is_central')
        sat_query = ~GCRQuery('is_central')

        if 'r_host' in quantities_needed and 'r_vir' in quantities_needed:
            sat_query &= GCRQuery('r_host < r_vir')

        for data in catalog_instance.get_quantities(
                quantities_needed,
                filters=[
                    '{} - {} > {}'.format(absolute_magnitude1_field,
                                          absolute_magnitude2_field,
                                          color_cut_thres)
                ],
                return_iterator=True,
        ):
            cen_mask = cen_query.mask(data)
            sat_mask = sat_query.mask(data)

            data = np.stack((data[k] for k in colnames)).T
            hist_cen += np.histogramdd(data[cen_mask], bins)[0]
            hist_sat += np.histogramdd(data[sat_mask], bins)[0]

        data = cen_mask = sat_mask = None

        halo_counts = hist_cen.sum(axis=0)
        clf = dict()
        clf['sat'] = hist_sat / halo_counts
        clf['cen'] = hist_cen / halo_counts
        clf['tot'] = clf['sat'] + clf['cen']

        self.make_plot(clf, catalog_name, os.path.join(output_dir, 'clf.png'))

        return TestResult(inspect_only=True)