80 assert version
in (0, 1),
"Unrecognised version: %s" % (version,)
86 for i
in range(config.numRings):
87 startDec = self.
_ringSize*(i + 0.5) - 0.5*math.pi
89 dec = min(math.fabs(startDec), math.fabs(stopDec))
92 super(RingsSkyMap, self).
__init__(numTracts, config, version)
127 """Generate TractInfo for the specified tract index."""
130 ra, dec = 0, -0.5*math.pi
131 elif ringNum == self.
config.numRings:
132 ra, dec = 0, 0.5*math.pi
134 dec = self.
_ringSize*(ringNum + 1) - 0.5*math.pi
135 ra = ((2*math.pi*tractNum/self.
_ringNums[ringNum])*geom.radians
153 self.
config.tractOverlap*geom.degrees,
155 innerBoxCorners=innerBoxCorners,
159 """Get the ra and dec ranges for the inner region of a
160 specified tract index.
169 raMin, raMax, decMin, decMax : `lsst.geom.Angle`
170 RA/Dec boundaries of the inner region.
176 decMin = (-np.pi/2.)*geom.radians
177 decMax = (-np.pi/2. + (ringNum + 1.5)*self.
_ringSize)*geom.radians
178 raMin = 0.0*geom.radians
179 raMax = 2.*np.pi*geom.radians
180 elif ringNum == self.
config.numRings:
182 decMin = (-np.pi/2. + (ringNum + 0.5)*self.
_ringSize)*geom.radians
183 decMax = (np.pi/2.)*geom.radians
184 raMin = 0.0*geom.radians
185 raMax = 2.*np.pi*geom.radians
187 decMin = (-np.pi/2. + (ringNum + 0.5)*self.
_ringSize)*geom.radians
188 decMax = (-np.pi/2. + (ringNum + 1.5)*self.
_ringSize)*geom.radians
190 deltaStart = ((tractNum - 0.5)*2.*np.pi/self.
_ringNums[ringNum])*geom.radians
191 deltaStop = ((tractNum + 0.5)*2.*np.pi/self.
_ringNums[ringNum])*geom.radians
193 raMin = (self.
_raStart + deltaStart).wrap()
194 raMax = (self.
_raStart + deltaStop).wrap()
196 return raMin, raMax, decMin, decMax
265 _dec = np.deg2rad(dec)
267 _ra = np.atleast_1d(ra)
268 _dec = np.atleast_1d(dec)
271 indexes = np.full(_ra.size, -1, dtype=np.int32)
274 firstRingStart = self.
_ringSize*0.5 - 0.5*np.pi
275 ringNums = np.zeros(len(_dec), dtype=np.int32)
277 ringNums[_dec < firstRingStart] = -1
278 ringNums[_dec > -1*firstRingStart] = self.
config.numRings
280 mid = (_dec >= firstRingStart) & (_dec <= -1*firstRingStart)
281 ringNums[mid] = ((_dec[mid] - firstRingStart)/self.
_ringSize).astype(np.int32)
283 indexes[ringNums == -1] = 0
288 inRange, = np.where(indexes < 0)
292 _ringCumulative = np.cumsum(np.insert(_ringNumArray, 0, 0))
294 deltaWrap = (_ra[inRange] - self.
_raStart.asRadians()) % (2.*np.pi)
295 tractNum = (deltaWrap/(2.*np.pi/_ringNumArray[ringNums[inRange]]) + 0.5).astype(np.int32)
297 tractNum[tractNum == _ringNumArray[ringNums[inRange]]] = 0
302 offByOne, = np.where((tractNum == 0)
303 & (ringNums[inRange] != 0))
304 ringNums[inRange[offByOne]] += 1
306 indexes[inRange] = _ringCumulative[ringNums[inRange]] + tractNum + 1
311 """Find all tracts which include the specified coord.
315 coord : `lsst.geom.SpherePoint`
316 ICRS sky coordinate to search for.
320 tractList : `list` of `TractInfo`
321 The tracts which include the specified coord.
328 for r
in [ringNum - 1, ringNum, ringNum + 1]:
329 if r < 0
or r >= self.
config.numRings:
334 for t
in [tractNum - 1, tractNum, tractNum + 1]:
342 if self.
_version == 0
and t == 0
and r != 0:
347 index = sum(self.
_ringNums[:r + extra], t + 1)
349 if tract.contains(coord):
350 tractList.append(tract)
354 for entry
in [0, len(self)-1]:
356 if tract.contains(coord):
357 tractList.append(tract)