def image_coordinates(infile, outfile, make_coordinate_maps, make_distance_map, overwrite): """Make maps that can be used to create profiles. The following images can be created: * LON -- Longitude coordinate * LAT -- Latitude coordinate * DIST -- Distance to mask * SOLID_ANGLE -- Solid angle """ from astropy.io import fits from gammapy.utils.fits import get_hdu from gammapy.image import SkyMap, ExclusionMask log.info('Reading {0}'.format(infile)) hdu = get_hdu(infile) out_hdus = fits.HDUList() if make_coordinate_maps: skymap = SkyMap.empty_like(hdu) log.info('Computing LON and LAT maps') lon, lat = skymap.coordinates() out_hdus.append(fits.ImageHDU(lon, hdu.header, 'LON')) out_hdus.append(fits.ImageHDU(lat, hdu.header, 'LAT')) if make_distance_map: excl = ExclusionMask.from_image_hdu(hdu) log.info('Computing DIST map') dist = excl.exclusion_distance out_hdus.append(fits.ImageHDU(dist, hdu.header, 'DIST')) log.info('Writing {0}'.format(outfile)) out_hdus.writeto(outfile, clobber=overwrite)
def make_image_from_2d_bg(): center = SkyCoord(83.63, 22.01, unit='deg').galactic energy_band = Energy([1, 10], 'TeV') offset_band = Angle([0, 2.49], 'deg') data_store = DataStore.from_dir( '/Users/jouvin/Desktop/these/temp/bg_model_image/') # TODO: fix `binarize` implementation # exclusion_mask = exclusion_mask.binarize() image = SkyMap.empty(nxpix=250, nypix=250, binsz=0.02, xref=center.l.deg, yref=center.b.deg, proj='TAN', coordsys='GAL') refheader = image.to_image_hdu().header exclusion_mask = ExclusionMask.read( '$GAMMAPY_EXTRA/datasets/exclusion_masks/tevcat_exclusion.fits') exclusion_mask = exclusion_mask.reproject(reference=refheader) mosaic_images = MosaicImage(image, energy_band=energy_band, offset_band=offset_band, data_store=data_store, obs_table=data_store.obs_table, exclusion_mask=exclusion_mask) mosaic_images.make_images(make_background_image=True, for_integral_flux=True, radius=10.) filename = 'fov_bg_maps_test.fits' log.info('Writing {}'.format(filename)) mosaic_images.maps.write(filename, clobber=True)
def test_image_pipe(tmpdir): tmpdir = str(tmpdir) from subprocess import call outdir = tmpdir outdir2 = outdir + '/background' cmd = 'mkdir -p {}'.format(outdir2) print('Executing: {}'.format(cmd)) call(cmd, shell=True) ds = DataStore.from_dir("$GAMMAPY_EXTRA/datasets/hess-crab4-hd-hap-prod2") ds.copy_obs(ds.obs_table, tmpdir) data_store = DataStore.from_dir(tmpdir) bgmaker = OffDataBackgroundMaker(data_store, outdir=outdir2) bgmaker.select_observations(selection='all') bgmaker.group_observations() bgmaker.make_model("2D") bgmaker.save_models("2D") fn = outdir2 + '/group-def.fits' hdu_index_table = bgmaker.make_total_index_table( data_store=data_store, modeltype='2D', out_dir_background_model=outdir2, filename_obs_group_table=fn ) fn = outdir + '/hdu-index.fits.gz' hdu_index_table.write(fn, overwrite=True) tmpdir = str(tmpdir) center = SkyCoord(83.63, 22.01, unit='deg').galactic energy_band = Energy([1, 10], 'TeV') offset_band = Angle([0, 2.49], 'deg') data_store = DataStore.from_dir(tmpdir) # TODO: fix `binarize` implementation # exclusion_mask = exclusion_mask.binarize() image = SkyMap.empty(nxpix=250, nypix=250, binsz=0.02, xref=center.l.deg, yref=center.b.deg, proj='TAN', coordsys='GAL') refheader = image.to_image_hdu().header exclusion_mask = ExclusionMask.read('$GAMMAPY_EXTRA/datasets/exclusion_masks/tevcat_exclusion.fits') exclusion_mask = exclusion_mask.reproject(reference=refheader) images = ImageAnalysis(image, energy_band=energy_band, offset_band=offset_band, data_store=data_store, obs_table=data_store.obs_table, exclusion_mask=exclusion_mask) images.make_maps(radius=10., bkg_norm=True, spectral_index=2.3, for_integral_flux=True)
def plot_exclusion_mask(**kwargs): """Plot exclusion mask The plot will be centered at the pointing position Parameters ---------- size : `~astropy.coordinates.Angle` Edge length of the plot """ from gammapy.image import ExclusionMask from gammapy.spectrum import SpectrumExtraction # Todo: plot exclusion mask as contours with skymap class exclusion = ExclusionMask.from_fits(SpectrumExtraction.EXCLUDEDREGIONS_FILE) ax = exclusion.plot(**kwargs) return ax
def make_image_from_2d_bg(): center = SkyCoord(83.63, 22.01, unit='deg').galactic energy_band = Energy([1, 10], 'TeV') offset_band = Angle([0, 2.49], 'deg') data_store = DataStore.from_dir('/Users/jouvin/Desktop/these/temp/bg_model_image/') # TODO: fix `binarize` implementation # exclusion_mask = exclusion_mask.binarize() image = SkyMap.empty(nxpix=250, nypix=250, binsz=0.02, xref=center.l.deg, yref=center.b.deg, proj='TAN', coordsys='GAL') refheader = image.to_image_hdu().header exclusion_mask = ExclusionMask.read('$GAMMAPY_EXTRA/datasets/exclusion_masks/tevcat_exclusion.fits') exclusion_mask = exclusion_mask.reproject(reference=refheader) images = ImageAnalysis(image, energy_band=energy_band, offset_band=offset_band, data_store=data_store, obs_table=data_store.obs_table, exclusion_mask=exclusion_mask) images.make_maps(radius=10., bkg_norm=True, spectral_index=2.3, for_integral_flux = True) # images.make_total_exposure() filename = 'fov_bg_maps.fits' log.info('Writing {}'.format(filename)) images.maps.write(filename, clobber=True)
def image_coordinates(infile, outfile, make_coordinate_maps, make_distance_map, overwrite): """Make maps that can be used to create profiles. The following images can be created: * LON -- Longitude coordinate * LAT -- Latitude coordinate * DIST -- Distance to mask * SOLID_ANGLE -- Solid angle """ from astropy.io import fits from gammapy.utils.fits import get_hdu from gammapy.image import SkyMap, ExclusionMask log.info('Reading {0}'.format(infile)) hdu = get_hdu(infile) out_hdus = fits.HDUList() if make_coordinate_maps: skymap = SkyMap.empty_like(hdu) log.info('Computing LON and LAT maps') lon, lat = skymap.coordinates() out_hdus.append(fits.ImageHDU(lon, hdu.header, 'LON')) out_hdus.append(fits.ImageHDU(lat, hdu.header, 'LAT')) if make_distance_map: excl = ExclusionMask.read(hdu) log.info('Computing DIST map') dist = excl.exclusion_distance out_hdus.append(fits.ImageHDU(dist, hdu.header, 'DIST')) log.info('Writing {0}'.format(outfile)) out_hdus.writeto(outfile, clobber=overwrite)
def test_image_pipe(tmpdir): tmpdir = str(tmpdir) from subprocess import call outdir = tmpdir outdir2 = outdir + '/background' cmd = 'mkdir -p {}'.format(outdir2) print('Executing: {}'.format(cmd)) call(cmd, shell=True) ds = DataStore.from_dir("$GAMMAPY_EXTRA/datasets/hess-crab4-hd-hap-prod2") ds.copy_obs(ds.obs_table, tmpdir) data_store = DataStore.from_dir(tmpdir) bgmaker = OffDataBackgroundMaker(data_store, outdir=outdir2) bgmaker.select_observations(selection='all') bgmaker.group_observations() bgmaker.make_model("2D") bgmaker.save_models("2D") fn = outdir2 + '/group-def.fits' hdu_index_table = bgmaker.make_total_index_table( data_store=data_store, modeltype='2D', out_dir_background_model=outdir2, filename_obs_group_table=fn) fn = outdir + '/hdu-index.fits.gz' hdu_index_table.write(fn, overwrite=True) tmpdir = str(tmpdir) center = SkyCoord(83.63, 22.01, unit='deg').galactic energy_band = Energy([1, 10], 'TeV') offset_band = Angle([0, 2.49], 'deg') data_store = DataStore.from_dir(tmpdir) # TODO: fix `binarize` implementation # exclusion_mask = exclusion_mask.binarize() image = SkyMap.empty(nxpix=250, nypix=250, binsz=0.02, xref=center.l.deg, yref=center.b.deg, proj='TAN', coordsys='GAL') refheader = image.to_image_hdu().header exclusion_mask = ExclusionMask.read( '$GAMMAPY_EXTRA/datasets/exclusion_masks/tevcat_exclusion.fits') exclusion_mask = exclusion_mask.reproject(reference=refheader) images = ImageAnalysis(image, energy_band=energy_band, offset_band=offset_band, data_store=data_store, obs_table=data_store.obs_table, exclusion_mask=exclusion_mask) images.make_maps(radius=10., bkg_norm=True, spectral_index=2.3, for_integral_flux=True)
""" from astropy.coordinates import SkyCoord, Angle from gammapy.datasets import gammapy_extra from gammapy.image import ExclusionMask from gammapy.data import DataStore from gammapy.region import SkyCircleRegion from gammapy.spectrum import SpectrumAnalysis from gammapy.utils.energy import EnergyBounds center = SkyCoord(83.63, 22.01, unit='deg', frame='icrs') radius = Angle('0.3 deg') on_region = SkyCircleRegion(pos=center, radius=radius) bkg_method = dict(type='reflected', n_min=3) exclusion_file = gammapy_extra.filename("datasets/exclusion_masks/" "tevcat_exclusion.fits") excl = ExclusionMask.from_fits(exclusion_file) bounds = EnergyBounds.equal_log_spacing(1, 10, 40, unit='TeV') store = gammapy_extra.filename("datasets/hess-crab4") ds = DataStore.from_dir(store) obs = [23523, 23559] ana = SpectrumAnalysis(datastore=ds, obs=obs, on_region=on_region, bkg_method=bkg_method, exclusion=excl, ebounds=bounds) ana.write_ogip_data(outdir='ogip_data')
def run_spectrum_analysis_using_config(config): """Wrapper function to run a 1D spectral analysis using a config dict Parameters ---------- config : dict config Returns ------- analysis : `~gammapy.spectrum.SpectrumAnalysis` Spectrum analysis instance """ # Observations obs = config['general']['runlist'] store = config['general']['datastore'] nobs = config['general']['nruns'] # Binning sec = config['binning'] if sec['equal_log_spacing']: emin = Energy(sec['emin']) emax = Energy(sec['emax']) nbins = sec['nbins'] ebounds = EnergyBounds.equal_log_spacing( emin, emax, nbins) else: if sec['binning'] is None: raise ValueError("No binning specified") log.debug('Binning: {}'.format(ebounds)) # ON region radius = Angle(config['on_region']['radius']) x = config['on_region']['center_x'] y = config['on_region']['center_y'] frame = config['on_region']['system'] center = SkyCoord(x, y, frame=frame) on_region = SkyCircleRegion(center, radius) # OFF region off_type = config['off_region']['type'] if off_type == 'ring': irad = Angle(config['off_region']['inner_radius']) orad = Angle(config['off_region']['outer_radius']) bkg_method = dict(type='ring', inner_radius=irad, outer_radius=orad) elif off_type == 'reflected': bkg_method = dict(type='reflected') # Exclusion excl_file = config['excluded_regions']['file'] exclusion = ExclusionMask.from_fits(excl_file) analysis = SpectrumAnalysis(datastore=store, obs=obs, on_region=on_region, bkg_method=bkg_method, exclusion=exclusion, nobs=nobs, ebounds=ebounds) if config['general']['create_ogip']: outdir = config['general']['outdir'] analysis.write_ogip_data(outdir) if config['general']['run_fit']: model = config['model']['type'] thres_low = Energy(config['model']['threshold_low']) thres_high = Energy(config['model']['threshold_high']) fit = analysis.run_hspec_fit(model, thres_low, thres_high) return analysis
from astropy.coordinates import SkyCoord, Angle from astropy.wcs import WCS from gammapy.region import find_reflected_regions from gammapy.extern.regions.shapes import CircleSkyRegion from gammapy.image import ExclusionMask from gammapy.utils.testing import requires_data mask = ExclusionMask.empty(name='Exclusion Mask', nxpix=801, nypix=701, binsz=0.01, coordsys='CEL', xref=83.2, yref=22.7) mask.fill_random_circles(n=8, min_rad=30, max_rad=80) pos = SkyCoord(80.2, 23.5, unit='deg', frame='icrs') radius = Angle(0.4, 'deg') test_region = CircleSkyRegion(pos, radius) center = SkyCoord(82.8, 22.5, unit='deg', frame='icrs') regions = find_reflected_regions(test_region, center, mask) import matplotlib.pyplot as plt fig = plt.figure(figsize=(8, 5), dpi=80) ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], projection=mask.wcs) mask.plot(ax, fig) for reg in regions: reg.plot(ax, facecolor='red') test_region.plot(ax, facecolor='blue') plt.show()
from astropy.coordinates import SkyCoord, Angle from astropy.wcs import WCS from gammapy.region import find_reflected_regions from gammapy.extern.regions.shapes import CircleSkyRegion from gammapy.image import ExclusionMask from gammapy.utils.testing import requires_data mask = ExclusionMask.empty(name='Exclusion Mask', nxpix=801, nypix=701, binsz=0.01, coordsys='CEL', xref=83.2, yref=22.7) mask.fill_random_circles(n=8, min_rad=30, max_rad=80) pos = SkyCoord(80.2, 23.5, unit='deg', frame='icrs') radius = Angle(0.4, 'deg') test_region = CircleSkyRegion(pos, radius) center = SkyCoord(82.8, 22.5, unit='deg', frame='icrs') regions = find_reflected_regions(test_region, center, mask) import matplotlib.pyplot as plt fig = plt.figure(figsize=(8, 5), dpi=80) ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], projection=mask.wcs) mask.plot(ax, fig) for reg in regions: reg.plot(ax, facecolor='red') test_region.plot(ax, facecolor='blue')
from astropy.coordinates import SkyCoord, Angle from astropy.wcs import WCS from gammapy.region import find_reflected_regions, SkyCircleRegion from gammapy.image import ExclusionMask, make_empty_image from gammapy.utils.testing import requires_data hdu = make_empty_image(nxpix=801, nypix=701, binsz=0.01, coordsys='CEL', xref=83.2, yref=22.7) mask = ExclusionMask.create_random(hdu, n=8, min_rad=30, max_rad=80) pos = SkyCoord(80.2, 23.5, unit='deg', frame='icrs') radius = Angle(0.4, 'deg') test_region = SkyCircleRegion(pos=pos, radius=radius) center = SkyCoord(82.8, 22.5, unit='deg', frame='icrs') regions = find_reflected_regions(test_region, center, mask) import matplotlib.pyplot as plt wcs = WCS(hdu.header) fig = plt.figure(figsize=(8, 5), dpi=80) ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], projection=wcs) mask.plot(ax) for reg in regions: patch = reg.plot(ax, facecolor='red') ax.add_patch(patch) patch2 = test_region.plot(ax, facecolor='blue') ax.add_patch(patch2) plt.show()