def make_image(): table = Table.read('acceptance_curve.fits') table.pprint() center = SkyCoord(83.63, 22.01, unit='deg').galactic counts_image = make_empty_image(nxpix=1000, nypix=1000, binsz=0.01, xref=center.l.deg, yref=center.b.deg, proj='TAN') bkg_image = counts_image.copy() data_store = DataStore.from_dir('$GAMMAPY_EXTRA/datasets/hess-crab4-hd-hap-prod2') for events in data_store.load_all("events"): center = events.pointing_radec.galactic livetime = events.observation_live_time_duration solid_angle = Angle(0.01, "deg") ** 2 counts_image.data += bin_events_in_image(events, counts_image).data #interp_param = dict(bounds_error=False, fill_value=None) acc_hdu = fill_acceptance_image(bkg_image.header, center, table["offset"], table["Acceptance"]) acc = Quantity(acc_hdu.data, table["Acceptance"].unit) * solid_angle * livetime bkg_image.data += acc.decompose() print(acc.decompose().sum()) counts_image.writeto("counts_image.fits", clobber=True) bkg_image.writeto("bkg_image.fits", clobber=True)
def make_image(): table = Table.read('acceptance_curve.fits') table.pprint() center = SkyCoord(83.63, 22.01, unit='deg').galactic counts_image = SkyMap.empty(nxpix=1000, nypix=1000, binsz=0.01, xref=center.l.deg, yref=center.b.deg, proj='TAN').to_image_hdu() bkg_image = counts_image.copy() data_store = DataStore.from_dir( '$GAMMAPY_EXTRA/datasets/hess-crab4-hd-hap-prod2') for events in data_store.load_all("events"): center = events.pointing_radec.galactic livetime = events.observation_live_time_duration solid_angle = Angle(0.01, "deg")**2 counts_image.data += bin_events_in_image(events, counts_image).data # interp_param = dict(bounds_error=False, fill_value=None) acc_hdu = fill_acceptance_image(bkg_image.header, center, table["offset"], table["Acceptance"]) acc = Quantity(acc_hdu.data, table["Acceptance"].unit) * solid_angle * livetime bkg_image.data += acc.decompose() print(acc.decompose().sum()) counts_image.writeto("counts_image_save.fits", clobber=True) bkg_image.writeto("bkg_image_save.fits", clobber=True)
def make_bkg_cube(self, bkg_norm=True): """ Make the background image for one observation from a bkg model. Parameters ---------- bkg_norm : bool If true, apply the scaling factor from the number of counts outside the exclusion region to the bkg image """ for i_E in range(len(self.energy_reco) - 1): energy_band = Energy( [self.energy_reco[i_E].value, self.energy_reco[i_E + 1].value], self.energy_reco.unit) table = self.bkg.acceptance_curve_in_energy_band( energy_band=energy_band) center = self.obs_center.galactic bkg_hdu = fill_acceptance_image(self.header, center, table["offset"], table["Acceptance"], self.offset_band[1]) bkg_image = Quantity( bkg_hdu.data, table["Acceptance"].unit ) * self.bkg_cube.sky_image_ref.solid_angle() * self.livetime self.bkg_cube.data[i_E, :, :] = bkg_image.decompose().value if bkg_norm: scale = self.background_norm_factor() self.bkg_cube.data = scale * self.bkg_cube.data if self.save_bkg_scale: self.table_bkg_scale.add_row([self.obs_id, scale])
def make_bkg_cube(self, bkg_norm=True): """ Make the background image for one observation from a bkg model. Parameters ---------- bkg_norm : bool If true, apply the scaling factor from the number of counts outside the exclusion region to the bkg image """ for i_E in range(len(self.energy_reco) - 1): energy_band = Energy( [self.energy_reco[i_E].value, self.energy_reco[i_E + 1].value], self.energy_reco.unit) table = self.bkg.acceptance_curve_in_energy_band( energy_band=energy_band) center = self.obs_center.galactic bkg_hdu = fill_acceptance_image(self.header, center, table["offset"], table["Acceptance"], self.offset_band[1]) bkg_image = Quantity(bkg_hdu.data, table[ "Acceptance"].unit) * self.bkg_cube.sky_image_ref.solid_angle() * self.livetime self.bkg_cube.data[i_E, :, :] = bkg_image.decompose().value if bkg_norm: scale = self.background_norm_factor() self.bkg_cube.data = scale * self.bkg_cube.data if self.save_bkg_scale: self.table_bkg_scale.add_row([self.obs_id, scale])
def _mags_to_flux(mag, zpt_flux: units.Quantity = 3630.7805 * units.Jy, mag_err=None): """ Convert a magnitude to mJy Args: mag (column): magnitude zpt_flux (Quantity, optional): Zero point flux for the magnitude. Assumes AB mags by default (i.e. zpt_flux = 3630.7805 Jy). mag_err (float, optional): uncertainty in magnitude Returns: flux (column): flux in mJy flux_err (column): if mag_err is given, a corresponding flux_err is returned. """ # Data validation -- check for Jy assert (type(zpt_flux) == units.Quantity) * ( zpt_flux.decompose().unit == units.kg / units.s**2), "zpt_flux units should be Jy or with dimensions kg/s^2." # Prepare output column flux = mag.copy() # Convert fluxes badmags = mag < -10 flux[badmags] = -99. flux[~badmags] = zpt_flux.value * 10**(-mag[~badmags] / 2.5) if mag_err is not None: flux_err = mag_err.copy() baderrs = (mag_err < 0) | (mag_err == 999.) flux_err[baderrs] = -99. flux_err[~baderrs] = flux[~baderrs] * (10**(mag_err[~baderrs] / 2.5) - 1) return flux, flux_err else: return flux