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)
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)
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)