22 __all__ = (
'InitialSkyWcsError',
'createInitialSkyWcs',
'bboxFromIraf')
25 import lsst.geom
as geom
27 from .
import Instrument
28 from lsst.afw.cameraGeom
import PIXELS, FIELD_ANGLE
29 from lsst.afw.image
import RotType
30 from lsst.afw.geom.skyWcs
import makeSkyWcs
36 """For handling failures when creating a SkyWcs from a camera geometry and
39 Typically used as a chained exception from a lower level exception.
45 """Create a SkyWcs from the telescope boresight and detector geometry.
47 A typical usecase for this is to create the initial WCS for a newly-read
53 visitInfo : `lsst.afw.image.VisitInfo`
54 Where to get the telescope boresight and rotator angle from.
55 detector : `lsst.afw.cameraGeom.Detector`
56 Where to get the camera geomtry from.
57 flipX : `bool`, optional
58 If False, +X is along W, if True +X is along E.
62 skyWcs : `lsst.afw.geom.SkyWcs`
68 Raised if there is an error generating the SkyWcs, chained from the
69 lower-level exception if available.
71 if visitInfo.getRotType() != RotType.SKY:
72 msg = (f
"Cannot create SkyWcs from camera geometry: rotator angle defined using "
73 f
"RotType={visitInfo.getRotType()} instead of SKY.")
75 orientation = visitInfo.getBoresightRotAngle()
76 boresight = visitInfo.getBoresightRaDec()
78 pixelsToFieldAngle = detector.getTransform(detector.makeCameraSys(PIXELS),
79 detector.makeCameraSys(FIELD_ANGLE))
82 return makeSkyWcs(pixelsToFieldAngle, orientation, flipX, boresight)
86 """Return a Box2I corresponding to an IRAF-style BBOX
88 [x0:x1,y0:y1] where x0 and x1 are the one-indexed start and end columns, and correspondingly
89 y0 and y1 are the start and end rows.
92 mat = re.search(
r"^\[([-\d]+):([-\d]+),([-\d]+):([-\d]+)\]$", irafBBoxStr)
94 raise RuntimeError(
"Unable to parse IRAF-style bbox \"%s\"" % irafBBoxStr)
95 x0, x1, y0, y1 = [int(_)
for _
in mat.groups()]
97 return geom.BoxI(geom.PointI(x0 - 1, y0 - 1), geom.PointI(x1 - 1, y1 - 1))
101 """Return an instance of a named instrument.
103 If the instrument name not is qualified (does not contain a '.') and a
104 butler registry is provided, this will attempt to load the instrument using
105 Instrument.fromName. Otherwise the instrument will be imported and
110 instrumentName : string
111 The name or fully-qualified class name of an instrument.
112 registry : `lsst.daf.butler.Registry`, optional
113 Butler registry to query to find information about the instrument, by
118 Instrument subclass instance
119 The instantiated instrument.
124 If the instrument can not be imported, instantiated, or obtained from
127 If the instrument is not a subclass of lsst.obs.base.Instrument.
129 if "." not in instrumentName
and registry
is not None:
131 instr = Instrument.fromName(instrumentName, registry)
132 except Exception
as err:
134 f
"Could not get instrument from name: {instrumentName}. Failed with exception: {err}")
137 instr = doImport(instrumentName)
138 except Exception
as err:
139 raise RuntimeError(f
"Could not import instrument: {instrumentName}. Failed with exception: {err}")
141 if not isinstance(instr, Instrument):
142 raise TypeError(f
"{instrumentName} is not an Instrument subclass.")