74 def __init__(self, resolution, paddingRad):
75 """Creates a new quad-sphere sky pixelisation.
77 resolution: the number of pixels along the x and y axes of each root
80 paddingRad: the angular separation (rad) by which fiducial sky-pixels
83 if not isinstance(resolution, (int, long)):
85 'Quad-sphere resolution parameter must be an int or long')
86 if resolution < 3
or resolution > 16384:
88 'Quad-sphere resolution must be in range [3, 16384]')
89 if not isinstance(paddingRad, float):
91 'Quad-sphere pixel padding angle must be a float')
92 if paddingRad < 0.0
or paddingRad >= math.pi * 0.25:
94 'Quad-sphere pixel padding radius must be in range [0, 45) deg')
98 x, y, z = (1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0)
99 nx, ny, nz = (-1.0, 0.0, 0.0), (0.0, -1.0, 0.0), (0.0, 0.0, -1.0)
101 self.
center = [z, x, y, nx, ny, nz]
103 self.
x = [ny, y, nx, ny, x, ny]
105 self.
y = [x, z, z, z, z, nx]
107 self.
xrot = [_rotX, _rotZ, _rotZ, _rotZ, _rotZ, _rotNX]
109 self.
yrot = [_rotY, _rotNY, _rotX, _rotY, _rotNX, _rotY]
114 for root
in xrange(6):
117 c, x, y = self.
center[root], self.
x[root], self.
y[root]
118 for i
in xrange(R + 1):
121 f = 2.0 * float(i) / float(R) - 1.0
122 thetaX = math.radians(0.5 * geom.cartesianAngularSep(
123 (c[0] + f * x[0] + y[0],
124 c[1] + f * x[1] + y[1],
125 c[2] + f * x[2] + y[2]),
126 (c[0] + f * x[0] - y[0],
127 c[1] + f * x[1] - y[1],
128 c[2] + f * x[2] - y[2])))
129 thetaY = math.radians(0.5 * geom.cartesianAngularSep(
130 (c[0] + x[0] + f * y[0],
131 c[1] + x[1] + f * y[1],
132 c[2] + x[2] + f * y[2]),
133 (c[0] - x[0] + f * y[0],
134 c[1] - x[1] + f * y[1],
135 c[2] - x[2] + f * y[2])))
136 sinrx = sp / math.cos(thetaX)
137 sinry = sp / math.cos(thetaY)
138 cosrx = math.sqrt(1.0 - sinrx * sinrx)
139 cosry = math.sqrt(1.0 - sinry * sinry)
144 xlp = self.
xrot[root](xfp, sinrx, cosrx)
145 ybp = self.
yrot[root](yfp, sinry, cosry)
146 xlp = (-xlp[0], -xlp[1], -xlp[2])
147 ybp = (-ybp[0], -ybp[1], -ybp[2])
152 xrp = self.
xrot[root](xfp, -sinrx, cosrx)
153 ytp = self.
yrot[root](yfp, -sinry, cosry)
154 xplanes.append((xfp, xlp, xrp))
155 yplanes.append((yfp, ybp, ytp))
156 self.xplane.append(xplanes)
157 self.yplane.append(yplanes)
166 self.
id(2, R - 1, R - 1),
167 self.
id(2, R - 2, R - 1),
168 self.
id(3, 0, R - 1),
169 self.
id(3, 1, R - 1)),
171 (self.
id(0, 1, R - 1),
172 self.
id(0, 1, R - 2),
173 self.
id(0, 0, R - 2),
174 self.
id(1, R - 1, R - 1),
175 self.
id(1, R - 2, R - 1),
176 self.
id(2, 0, R - 1),
177 self.
id(2, 1, R - 1)),
179 (self.
id(0, R - 2, 0),
180 self.
id(0, R - 2, 1),
181 self.
id(0, R - 1, 1),
182 self.
id(3, R - 2, R - 1),
183 self.
id(3, R - 1, R - 1),
184 self.
id(4, 0, R - 1),
185 self.
id(4, 1, R - 1)),
187 (self.
id(0, R - 2, R - 1),
188 self.
id(0, R - 2, R - 2),
189 self.
id(0, R - 1, R - 2),
190 self.
id(1, 0, R - 1),
191 self.
id(1, 1, R - 1),
192 self.
id(4, R - 2, R - 1),
193 self.
id(4, R - 1, R - 1))
201 self.
id(4, R - 1, 0),
202 self.
id(4, R - 1, 1),
203 self.
id(5, R - 2, 0),
204 self.
id(5, R - 1, 0)),
206 (self.
id(1, 1, R - 1),
207 self.
id(1, 1, R - 2),
208 self.
id(1, 0, R - 2),
209 self.
id(4, R - 1, R - 2),
210 self.
id(4, R - 1, R - 1),
211 self.
id(0, R - 2, R - 1),
212 self.
id(0, R - 1, R - 1)),
214 (self.
id(1, R - 2, 0),
215 self.
id(1, R - 2, 1),
216 self.
id(1, R - 1, 1),
222 (self.
id(1, R - 2, R - 1),
223 self.
id(1, R - 2, R - 2),
224 self.
id(1, R - 1, R - 2),
225 self.
id(2, 0, R - 2),
226 self.
id(2, 0, R - 1),
227 self.
id(0, 0, R - 1),
228 self.
id(0, 1, R - 1))
236 self.
id(1, R - 1, 0),
237 self.
id(1, R - 1, 1),
241 (self.
id(2, 1, R - 1),
242 self.
id(2, 1, R - 2),
243 self.
id(2, 0, R - 2),
244 self.
id(1, R - 1, R - 2),
245 self.
id(1, R - 1, R - 1),
246 self.
id(0, 0, R - 2),
247 self.
id(0, 0, R - 1)),
249 (self.
id(2, R - 2, 0),
250 self.
id(2, R - 2, 1),
251 self.
id(2, R - 1, 1),
254 self.
id(5, 0, R - 2),
255 self.
id(5, 0, R - 1)),
257 (self.
id(2, R - 2, R - 1),
258 self.
id(2, R - 2, R - 2),
259 self.
id(2, R - 1, R - 2),
260 self.
id(3, 0, R - 2),
261 self.
id(3, 0, R - 1),
271 self.
id(2, R - 1, 0),
272 self.
id(2, R - 1, 1),
273 self.
id(5, 0, R - 1),
274 self.
id(5, 1, R - 1)),
276 (self.
id(3, 1, R - 1),
277 self.
id(3, 1, R - 2),
278 self.
id(3, 0, R - 2),
279 self.
id(2, R - 1, R - 2),
280 self.
id(2, R - 1, R - 1),
284 (self.
id(3, R - 2, 0),
285 self.
id(3, R - 2, 1),
286 self.
id(3, R - 1, 1),
289 self.
id(5, R - 2, R - 1),
290 self.
id(5, R - 1, R - 1)),
292 (self.
id(3, R - 2, R - 1),
293 self.
id(3, R - 2, R - 2),
294 self.
id(3, R - 1, R - 2),
295 self.
id(4, 0, R - 2),
296 self.
id(4, 0, R - 1),
297 self.
id(0, R - 2, 0),
298 self.
id(0, R - 1, 0))
306 self.
id(3, R - 1, 0),
307 self.
id(3, R - 1, 1),
308 self.
id(5, R - 1, R - 2),
309 self.
id(5, R - 1, R - 1)),
311 (self.
id(4, 1, R - 1),
312 self.
id(4, 1, R - 2),
313 self.
id(4, 0, R - 2),
314 self.
id(3, R - 1, R - 2),
315 self.
id(3, R - 1, R - 1),
316 self.
id(0, R - 1, 0),
317 self.
id(0, R - 1, 1)),
319 (self.
id(4, R - 2, 0),
320 self.
id(4, R - 2, 1),
321 self.
id(4, R - 1, 1),
324 self.
id(5, R - 1, 0),
325 self.
id(5, R - 1, 1)),
327 (self.
id(4, R - 2, R - 1),
328 self.
id(4, R - 2, R - 2),
329 self.
id(4, R - 1, R - 2),
330 self.
id(1, 0, R - 2),
331 self.
id(1, 0, R - 1),
332 self.
id(0, R - 1, R - 2),
333 self.
id(0, R - 1, R - 1))
341 self.
id(1, R - 2, 0),
342 self.
id(1, R - 1, 0),
346 (self.
id(5, 1, R - 1),
347 self.
id(5, 1, R - 2),
348 self.
id(5, 0, R - 2),
349 self.
id(2, R - 2, 0),
350 self.
id(2, R - 1, 0),
354 (self.
id(5, R - 2, 0),
355 self.
id(5, R - 2, 1),
356 self.
id(5, R - 1, 1),
359 self.
id(4, R - 2, 0),
360 self.
id(4, R - 1, 0)),
362 (self.
id(5, R - 2, R - 1),
363 self.
id(5, R - 2, R - 2),
364 self.
id(5, R - 1, R - 2),
365 self.
id(3, R - 2, 0),
366 self.
id(3, R - 1, 0),