Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
else:
# combine old and new corrections into a single one and replace
# old transformation with the combined correction transformation:
JWSTgWCS._tpcorr_combine_affines(
self._tpcorr,
matrix,
_ARCSEC2RAD * np.asarray(shift)
)
self._partial_tpcorr = JWSTgWCS._v2v3_to_tpcorr_from_full(self._tpcorr)
idx_v2v3 = frms.index(self._v23name)
pipeline = deepcopy(self._wcs.pipeline)
pipeline[idx_v2v3 - 1] = (pipeline[idx_v2v3 - 1][0],
deepcopy(self._tpcorr))
self._wcs = gwcs.WCS(pipeline, name=self._owcs.name)
# reset definitions of the transformations from detector/world
# coordinates to the tangent plane:
self._update_transformations()
# save linear transformation info to the meta attribute:
super().set_correction(matrix=matrix, shift=shift, meta=meta, **kwargs)
axes_type=('SPECTRAL',),
axes_order=(0,))
spec_frame = cf.SpectralFrame(unit=array.unit, axes_order=(0,))
# In order for the world_to_pixel transformation to automatically convert
# input units, the equivalencies in the look up table have to be extended
# with spectral unit information.
SpectralTabular1D = type("SpectralTabular1D", (Tabular1D,),
{'input_units_equivalencies': {'x0': u.spectral()}})
forward_transform = SpectralTabular1D(np.arange(len(array)),
lookup_table=array)
forward_transform.inverse = SpectralTabular1D(
array, lookup_table=np.arange(len(array)))
class SpectralGWCS(GWCS):
def pixel_to_world(self, *args, **kwargs):
return super().pixel_to_world(*args, **kwargs).to(
orig_array.unit, equivalencies=u.spectral())
tabular_gwcs = SpectralGWCS(forward_transform=forward_transform,
input_frame=coord_frame,
output_frame=spec_frame)
# Store the intended unit from the origin input array
# tabular_gwcs._input_unit = orig_array.unit
return tabular_gwcs
JWSTgWCS._tpcorr_combine_affines(
self._tpcorr,
matrix,
_ARCSEC2RAD * np.asarray(shift)
)
self._partial_tpcorr = JWSTgWCS._v2v3_to_tpcorr_from_full(self._tpcorr)
idx_v2v3 = frms.index(self._v23name)
pipeline = deepcopy(self._wcs.pipeline)
pf, pt = pipeline[idx_v2v3]
pipeline[idx_v2v3] = (pf, deepcopy(self._tpcorr))
frm_v2v3corr = deepcopy(pf)
frm_v2v3corr.name = 'v2v3corr'
pipeline.insert(idx_v2v3 + 1, (frm_v2v3corr, pt))
self._wcs = gwcs.WCS(pipeline, name=self._owcs.name)
self._v23name = 'v2v3corr'
else:
# combine old and new corrections into a single one and replace
# old transformation with the combined correction transformation:
JWSTgWCS._tpcorr_combine_affines(
self._tpcorr,
matrix,
_ARCSEC2RAD * np.asarray(shift)
)
self._partial_tpcorr = JWSTgWCS._v2v3_to_tpcorr_from_full(self._tpcorr)
idx_v2v3 = frms.index(self._v23name)
pipeline = deepcopy(self._wcs.pipeline)
pipeline[idx_v2v3 - 1] = (pipeline[idx_v2v3 - 1][0],
def from_tree(cls, node, ctx):
import gwcs
steps = [(x['frame'], x.get('transform')) for x in node['steps']]
name = node['name']
return gwcs.WCS(steps, name=name)
def load_nddata(self, ndd):
try:
# reconstruct a pyfits header, because otherwise we take an
# incredible performance hit in astropy.wcs
self.logger.debug("Reconstructing astropy.io.fits header")
self.header = fits.Header(ndd.meta)
if ndd.wcs is None:
self.logger.debug("Trying to make astropy FITS WCS object")
self.wcs = wcs.WCS(self.header, relax=True)
self.logger.debug("made astropy wcs object")
else:
self.logger.debug("reused nddata wcs object")
self.wcs = ndd.wcs
if HAVE_GWCS and isinstance(self.wcs, gwcs.WCS):
self.coordsys = self.wcs.output_frame.name
else: # FITS WCS
self.coordsys = common.get_coord_system_name(self.header)
self.logger.debug("Coordinate system is: {}".format(self.coordsys))
except Exception as e:
self.logger.error("Error making WCS object: {}".format(str(e)))
self.wcs = None
from jwst.datamodels import util
import gwcs
hdu = ImageHDU(data=in_hdu.data, header=in_hdu.header)
new_header = strip_telescope_header(hdu.header)
hdu.header = new_header
# Initialize data model
img = util.open(HDUList([hdu]))
# Initialize GWCS
tform = gwcs.wcs.utils.make_fitswcs_transform(new_header)
hwcs = gwcs.WCS(forward_transform=tform, output_frame=ICRS()) # gwcs.CelestialFrame())
sh = hdu.data.shape
hwcs.bounding_box = ((-0.5, sh[0]-0.5), (-0.5, sh[1]-0.5))
# Put gWCS in meta, where blot/drizzle expect to find it
img.meta.wcs = hwcs
return img