def plot_point_mags(output_data, visits, outfile, dataId): # get a butler butler = dp.Butler(output_data) # The following value for refcatId is "mandatory, but meaningless", # so we won't try to generalize it. refcatId = {'tract':0, 'patch':'0,0'} ref = butler.get('deepCoadd_ref', dataId=refcatId) # visits to use for lightcurves visit_list = [int(x) for x in visits.split('^')] # get the sources and calib objects for each single epoch visit forced_srcs = {} calibs = {} for visit in visit_list: dataId['visit'] = visit forced_srcs[visit] = butler.get('forced_src', dataId=dataId) calexp = butler.get('calexp', dataId=dataId) calibs[visit] = calexp.getCalib() del calexp # initialize dictionaries to hold lightcurve arrays. Get # extendedness from the coadd catalog. lightcurve_fluxes = {} extendedness = {} for idx, ext in zip(ref.get('id'), ref.get('base_ClassificationExtendedness_value')): lightcurve_fluxes[idx] = [] extendedness[idx] = ext # pivot the source tables to assemble lightcurves for visit, forced_src in forced_srcs.iteritems(): calib = calibs[visit] for idx, flux in zip(forced_src.get('objectId'), forced_src.get('base_PsfFlux_flux')): if extendedness[idx] > 0.5: continue if flux <= 0.: continue lightcurve_fluxes[idx].append(afw_image.fluxFromABMag(calib.getMagnitude(flux))) # compute aggregate quantities for each object and plot for lightcurve in lightcurve_fluxes.values(): if len(lightcurve) == len(visit_list): plt.scatter(afw_image.abMagFromFlux(numpy.median(lightcurve)), numpy.std(lightcurve)/numpy.median(lightcurve), alpha=0.5) mags, invsnrs = make_invsnr_arr() plt.plot(mags, invsnrs, color='red', linewidth=2, alpha=0.75) plt.xlabel("Calibrated magnitude of median flux") plt.ylabel("stdev(flux)/median(flux)") plt.xlim(15.5, 25) plt.ylim(0., 0.5) plt.savefig(outfile)
# initialize dictionaries to hold lightcurve arrays. Get extendedness from the coadd catalog. lightcurve_fluxes = {} extendedness = {} for idx, ext in zip(ref.get('id'), ref.get('base_ClassificationExtendedness_value')): lightcurve_fluxes[idx] = [] extendedness[idx] = ext # pivot the source tables to assemble lightcurves for visit, forced_src in forced_srcs.iteritems(): calib = calibs[visit] for idx, flux in zip(forced_src.get('objectId'), forced_src.get('base_PsfFlux_flux')): if extendedness[idx] > 0.5: continue if flux <= 0.: continue lightcurve_fluxes[idx].append(afw_image.fluxFromABMag(calib.getMagnitude(flux))) # compute aggregate quantities for each object and plot for lightcurve in lightcurve_fluxes.values(): if len(lightcurve) == 9: plt.scatter(afw_image.abMagFromFlux(numpy.median(lightcurve)), numpy.std(lightcurve)/numpy.median(lightcurve), alpha=0.5) mags, invsnrs = make_invsnr_arr() plt.plot(mags, invsnrs, color='red', linewidth=2, alpha=0.75) plt.xlabel("Calibrated magnitude of median flux") plt.ylabel("stdev(flux)/median(flux)") plt.xlim(15.5, 25) plt.ylim(0., 0.5) plt.show()
# compute aggregate quantities for each object and plot med_mags = [] med_err = [] for lightcurve in lightcurve_fluxes.values(): if len(lightcurve) == 10: med_mags.append(afw_image.abMagFromFlux(numpy.median(lightcurve))) med_err.append(numpy.std(lightcurve)/numpy.median(lightcurve)) fit_func = partial(fit_invsnr, bandpass_name=bandpass_name) minMag=17. mid_cut=20. maxMag=26. med_mags = numpy.array(med_mags) med_err = numpy.array(med_err) idxs = numpy.where((med_mags<mid_cut)&(med_mags>minMag)) sys_floor = numpy.median(med_err[idxs]) idxs = numpy.where((med_mags<maxMag)&(med_mags>mid_cut)) popt, pcov = curve_fit(fit_invsnr, med_mags[idxs], med_err[idxs], p0=[0.01, 24.5]) scatter = plt.scatter(med_mags, med_err, alpha=0.3, color=bandpass_color_map[bandpass_name], marker=bandpass_symbol_map[bandpass_name], label="filter=%s, Floor=%.1f%%, m_5=%0.2f"%(bandpass_name,sys_floor*100.,popt[1])) scatters.append(scatter) mags, invsnrs = make_invsnr_arr(floor=sys_floor, m5=popt[1]) plt.plot(mags, invsnrs, color='black', linewidth=3, alpha=0.75) print bandpass_name plt.legend(handles=scatters, scatterpoints=1, loc=2) plt.xlabel("Calibrated magnitude of median flux") plt.ylabel("stdev(flux)/median(flux)") plt.xlim(15.5, 25) plt.ylim(0., 0.5) plt.show()