Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
wcs = pywcs.WCS(naxis=2)
wcs.wcs.crpix = [5.5, 5.5]
wcs.wcs.cdelt = [0.1, -0.1]
wcs.wcs.crval = [l, b]
wcs.wcs.ctype = ["GLON-ZEA".encode("ascii"), "GLAT-ZEA".encode("ascii")]
import pyregion.wcs_helper as wcs_helper
proj = wcs_helper.get_kapteyn_projection(wcs)
cdelt = wcs_helper.estimate_cdelt(proj, 5.5, 5.5)
assert np.allclose([cdelt], [0.1])
region_string="fk5; circle(%s, %s, 0.5000)" % (ra,dec)
reg = pyregion.parse(region_string).as_imagecoord(wcs)
assert np.allclose([reg[0].coord_list[-1]], [0.5/0.1])
-28.694332 266.555234 -28.687069 266.543232 -28.681216 266.536058
-28.681414 266.530644 -28.685630 266.521788 -28.689453 266.519784
-28.694332 266.521332 -28.699778'
Some of them have *additional* polygons
"""
if footprint[:7] != 'Polygon':
raise ValueError("Unrecognized footprint type")
from pyregion.parser_helper import Shape
entries = footprint.split()
polygons = [ii for ii, xx in enumerate(entries) if xx == 'Polygon']
reglist = []
for start, stop in zip(polygons, polygons[1:]+[None]):
reg = Shape('polygon', [float(x) for x in entries[start+2:stop]])
reg.coord_format = footprint.split()[1].lower()
reg.coord_list = reg.params # the coord_list attribute is needed somewhere
reg.attr = ([], {'color': 'green', 'dash': '0 ', 'dashlist': '8 3',
'delete': '1 ', 'edit': '1 ', 'fixed': '0 ', 'font':
'"helvetica 10 normal roman"', 'highlite': '1 ',
'include': '1 ', 'move': '1 ', 'select': '1',
'source': '1', 'text': '', 'width': '1 '})
reglist.append(reg)
return reglist
"""
This function ...
:param path:
:param only:
:param ignore:
:param color:
:param ignore_color:
:return:
"""
# Create a new sky region
region = cls()
# Open the region file with pyregion and check if its in sky coordinates
_region = pyregion.open(path)
def check_sky_coord(_region):
if [s for s in _region if s.coord_format != "fk5"]: return False
else: return True
if not check_sky_coord(_region): raise ValueError("Region is not in sky coordinates")
# Loop over all shapes in the region
for shape in _region:
# Meta information
meta = {}
if "text" in shape.attr[1]: meta["text"] = shape.attr[1]["text"]
if "color" in shape.attr[1]: meta["color"] = shape.attr[1]["color"]
if "point" in shape.attr[1]: meta["point"] = shape.attr[1]["point"]
# Check the color of the shape
if color is not None and shape.attr[1]["color"] != color: continue
The data container that will be used to create the new region.
Defaults to ds.all_data.
field_parameters : dictionary, optional
A set of field parameters to apply to the region.
Examples
--------
>>> ds = yt.load("m33_hi.fits")
>>> circle_region = ds9_region(ds, "circle.reg")
>>> print circle_region.quantities.extrema("flux")
"""
import pyregion
from yt.frontends.fits.api import EventsFITSDataset
if os.path.exists(reg):
r = pyregion.open(reg)
else:
r = pyregion.parse(reg)
reg_name = reg
filter = r.get_filter(header=ds.wcs_2d.to_header())
nx = ds.domain_dimensions[ds.lon_axis]
ny = ds.domain_dimensions[ds.lat_axis]
mask = filter.mask((ny, nx)).transpose()
if isinstance(ds, EventsFITSDataset):
prefix = "event_"
else:
prefix = ""
def _reg_field(field, data):
i = data[prefix+"xyz"[ds.lon_axis]].d.astype("int")-1
j = data[prefix+"xyz"[ds.lat_axis]].d.astype("int")-1
new_mask = mask[i,j]
ret = np.zeros(data[prefix+"x"].shape)
# Check if galaxy catalogue file has any row sin before continuing
if sum(1 for line in open(os.path.join(temp_dir_path, 'AstroMagic', band_dict['band_name'],'Galaxies.cat'))) <= 1:
shutil.copy2(sat_path, sat_path.replace('.reg','_revised.reg'))
shutil.copy2(star_path, star_path.replace('.reg','_revised.reg'))
return star_segments
# Open galaxy catalogue file, and determine the "primary" name of the one that has been deemed principal
gal_cat = astropy.table.Table.read(os.path.join(temp_dir_path, 'AstroMagic', band_dict['band_name'], 'Galaxies.cat'), format='ascii')
where_principal = np.where( np.array([ gal_cat['Name'][i].replace(' ','')==source_dict['name'] for i in range(0,len(gal_cat)) ])==True )
if where_principal[0].shape[0]==0:
gal_principal = 'NULL'
else:
gal_principal = gal_cat['Name'][where_principal][0].replace(' ','')
# Loop over galaxy region file, identify region corresponding to target galaxy, and create mask array of it
gal_regions = pyregion.open(gal_path)
gal_found = False
for gal_region in gal_regions:
if 'text' in gal_region.attr[1].keys():
gal_name = gal_region.attr[1]['text'].replace(' ','').replace(' (principal)','')
if gal_name==gal_principal:
gal_found = True
break
if gal_found==False:
shutil.copy2(sat_path, sat_path.replace('.reg','_revised.reg'))
shutil.copy2(star_path, star_path.replace('.reg','_revised.reg'))
return star_segments
# Loop back over the saturation regions, not keeping those that aren't being retained, or which wholly encompass target galaxy, or are too lose to galaxy centre
sat_regions_out = pyregion.ShapeList([])
nrows_ncols = (ny, nx)
grid= ImageGrid(fig, 111, nrows_ncols,
ngrids=n, add_all=True, share_all=True,
axes_class=(pywcsgrid2.Axes, dict(header=h)))
ax = grid[0]
ax.set_xlim(300, 1300)
ax.set_ylim(300, 1300)
ax.set_aspect(1)
#plt.imshow(d, origin="lower", cmap=plt.cm.gray_r)
from mpl_toolkits.axes_grid.anchored_artists import AnchoredText
for ax, reg_name in zip(grid, region_list):
r = pyregion.open(reg_name).as_imagecoord(h)
patch_list, text_list = r.get_mpl_patches_texts()
for p in patch_list:
ax.add_patch(p)
for t in text_list:
ax.add_artist(t)
atext = AnchoredText(reg_name.replace("_", r"\_"),
loc=2)
ax.add_artist(atext)
plt.draw()
plt.show()
# Create axes
ax1 = WCSAxes(fig, [0.1, 0.1, 0.4, 0.8], wcs=wcs)
fig.add_axes(ax1)
ax2 = WCSAxes(fig, [0.5, 0.1, 0.4, 0.8], wcs=wcs)
fig.add_axes(ax2)
# Hide labels on y axis
ax2.coords[1].set_ticklabel_position('')
for ax, reg_name in zip([ax1, ax2], region_list):
ax.set_xlim(300, 1300)
ax.set_ylim(300, 1300)
ax.set_aspect(1)
r = pyregion.open(reg_name).as_imagecoord(header)
patch_list, text_list = r.get_mpl_patches_texts()
for p in patch_list:
ax.add_patch(p)
for t in text_list:
ax.add_artist(t)
atext = AnchoredText(reg_name, loc=2)
ax.add_artist(atext)
plt.draw()
plt.show()
try:
from astropy.wcs import WCS
from astropy.visualization.wcsaxes import WCSAxes
wcs = WCS(f_xray[0].header)
fig = plt.figure()
ax = WCSAxes(fig, [0.1, 0.1, 0.8, 0.8], wcs=wcs)
fig.add_axes(ax)
except ImportError:
ax = plt.subplot(111)
ax.imshow(f_xray[0].data,
cmap=cm.gray, vmin=0., vmax=0.00038, origin="lower")
reg_name = "test.reg"
r = pyregion.open(reg_name).as_imagecoord(f_xray[0].header)
patch_list, text_list = r.get_mpl_patches_texts()
for p in patch_list:
ax.add_patch(p)
for t in text_list:
ax.add_artist(t)
plt.show()
def ds9(region_file, header, zorder=3, **kwargs):
"""
Wrapper to return a PatchCollection given a ds9 region file
and a fits header.
zorder - defaults to 3 so that regions are on top of contours
"""
try:
import pyregion
except Exception:
raise ImportError("The pyregion package is required to load region files")
# read region file
if isinstance(region_file, str):
rr = pyregion.open(region_file)
elif isinstance(region_file, pyregion.ShapeList):
rr = region_file
else:
raise Exception("Invalid type for region_file: %s - should be string or pyregion.ShapeList" % type(region_file))
if isinstance(header, wcs.WCS):
header = header.to_header()
# convert coordinates to image coordinates
rrim = rr.as_imagecoord(header)
# pyregion and aplpy both correct for the FITS standard origin=1,1
# need to avoid double-correcting. Also, only some items in `coord_list`
# are pixel coordinates, so which ones should be corrected depends on the
# shape.
for r in rrim:
def show_region(fig, region_list):
h = demo_header()
n = len(region_list)
nx = int(math.ceil(n ** .5))
ny = int(math.ceil(1. * n / nx))
nrows_ncols = (ny, nx)
grid = [plt.subplot(ny, nx, i + 1) for i in range(n)]
for ax, reg_name in zip(grid, region_list):
ax.set_aspect(1)
r = pyregion.open(reg_name).as_imagecoord(h)
patch_list, text_list = r.get_mpl_patches_texts()
for p in patch_list:
ax.add_patch(p)
for t in text_list:
ax.add_artist(t)
if plt.rcParams["text.usetex"]:
reg_name = reg_name.replace("_", r"\_")
ax.set_title(reg_name, size=10)
for t in ax.get_xticklabels() + ax.get_yticklabels():
t.set_visible(False)
return grid