89 def __init__(self, resolution, paddingRad):
90 """Creates a new quad-sphere sky pixelisation. 92 resolution: the number of pixels along the x and y axes of each root 95 paddingRad: the angular separation (rad) by which fiducial sky-pixels 98 if not isinstance(resolution, numbers.Integral):
100 'Quad-sphere resolution parameter must be an integer')
101 if resolution < 3
or resolution > 16384:
103 'Quad-sphere resolution must be in range [3, 16384]')
104 if not isinstance(paddingRad, float):
106 'Quad-sphere pixel padding angle must be a float')
107 if paddingRad < 0.0
or paddingRad >= math.pi * 0.25:
109 'Quad-sphere pixel padding radius must be in range [0, 45) deg')
112 self.padding = paddingRad
113 x, y, z = (1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0)
114 nx, ny, nz = (-1.0, 0.0, 0.0), (0.0, -1.0, 0.0), (0.0, 0.0, -1.0)
116 self.center = [z, x, y, nx, ny, nz]
118 self.x = [ny, y, nx, ny, x, ny]
120 self.y = [x, z, z, z, z, nx]
122 self.xrot = [_rotX, _rotZ, _rotZ, _rotZ, _rotZ, _rotNX]
124 self.yrot = [_rotY, _rotNY, _rotX, _rotY, _rotNX, _rotY]
128 sp = math.sin(self.padding)
129 for root
in range(6):
132 c, x, y = self.center[root], self.x[root], self.y[root]
133 for i
in range(R + 1):
134 xfp = self._fiducialXPlane(root, i)
135 yfp = self._fiducialYPlane(root, i)
136 f = 2.0 * float(i) / float(R) - 1.0
137 thetaX = math.radians(0.5 * geom.cartesianAngularSep(
138 (c[0] + f * x[0] + y[0],
139 c[1] + f * x[1] + y[1],
140 c[2] + f * x[2] + y[2]),
141 (c[0] + f * x[0] - y[0],
142 c[1] + f * x[1] - y[1],
143 c[2] + f * x[2] - y[2])))
144 thetaY = math.radians(0.5 * geom.cartesianAngularSep(
145 (c[0] + x[0] + f * y[0],
146 c[1] + x[1] + f * y[1],
147 c[2] + x[2] + f * y[2]),
148 (c[0] - x[0] + f * y[0],
149 c[1] - x[1] + f * y[1],
150 c[2] - x[2] + f * y[2])))
151 sinrx = sp / math.cos(thetaX)
152 sinry = sp / math.cos(thetaY)
153 cosrx = math.sqrt(1.0 - sinrx * sinrx)
154 cosry = math.sqrt(1.0 - sinry * sinry)
159 xlp = self.xrot[root](xfp, sinrx, cosrx)
160 ybp = self.yrot[root](yfp, sinry, cosry)
161 xlp = (-xlp[0], -xlp[1], -xlp[2])
162 ybp = (-ybp[0], -ybp[1], -ybp[2])
167 xrp = self.xrot[root](xfp, -sinrx, cosrx)
168 ytp = self.yrot[root](yfp, -sinry, cosry)
169 xplanes.append((xfp, xlp, xrp))
170 yplanes.append((yfp, ybp, ytp))
171 self.xplane.
append(xplanes)
172 self.yplane.
append(yplanes)
174 self.cornerNeighbors = (
181 self.id(2, R - 1, R - 1),
182 self.id(2, R - 2, R - 1),
183 self.id(3, 0, R - 1),
184 self.id(3, 1, R - 1)),
186 (self.id(0, 1, R - 1),
187 self.id(0, 1, R - 2),
188 self.id(0, 0, R - 2),
189 self.id(1, R - 1, R - 1),
190 self.id(1, R - 2, R - 1),
191 self.id(2, 0, R - 1),
192 self.id(2, 1, R - 1)),
194 (self.id(0, R - 2, 0),
195 self.id(0, R - 2, 1),
196 self.id(0, R - 1, 1),
197 self.id(3, R - 2, R - 1),
198 self.id(3, R - 1, R - 1),
199 self.id(4, 0, R - 1),
200 self.id(4, 1, R - 1)),
202 (self.id(0, R - 2, R - 1),
203 self.id(0, R - 2, R - 2),
204 self.id(0, R - 1, R - 2),
205 self.id(1, 0, R - 1),
206 self.id(1, 1, R - 1),
207 self.id(4, R - 2, R - 1),
208 self.id(4, R - 1, R - 1))
216 self.id(4, R - 1, 0),
217 self.id(4, R - 1, 1),
218 self.id(5, R - 2, 0),
219 self.id(5, R - 1, 0)),
221 (self.id(1, 1, R - 1),
222 self.id(1, 1, R - 2),
223 self.id(1, 0, R - 2),
224 self.id(4, R - 1, R - 2),
225 self.id(4, R - 1, R - 1),
226 self.id(0, R - 2, R - 1),
227 self.id(0, R - 1, R - 1)),
229 (self.id(1, R - 2, 0),
230 self.id(1, R - 2, 1),
231 self.id(1, R - 1, 1),
237 (self.id(1, R - 2, R - 1),
238 self.id(1, R - 2, R - 2),
239 self.id(1, R - 1, R - 2),
240 self.id(2, 0, R - 2),
241 self.id(2, 0, R - 1),
242 self.id(0, 0, R - 1),
243 self.id(0, 1, R - 1))
251 self.id(1, R - 1, 0),
252 self.id(1, R - 1, 1),
256 (self.id(2, 1, R - 1),
257 self.id(2, 1, R - 2),
258 self.id(2, 0, R - 2),
259 self.id(1, R - 1, R - 2),
260 self.id(1, R - 1, R - 1),
261 self.id(0, 0, R - 2),
262 self.id(0, 0, R - 1)),
264 (self.id(2, R - 2, 0),
265 self.id(2, R - 2, 1),
266 self.id(2, R - 1, 1),
269 self.id(5, 0, R - 2),
270 self.id(5, 0, R - 1)),
272 (self.id(2, R - 2, R - 1),
273 self.id(2, R - 2, R - 2),
274 self.id(2, R - 1, R - 2),
275 self.id(3, 0, R - 2),
276 self.id(3, 0, R - 1),
286 self.id(2, R - 1, 0),
287 self.id(2, R - 1, 1),
288 self.id(5, 0, R - 1),
289 self.id(5, 1, R - 1)),
291 (self.id(3, 1, R - 1),
292 self.id(3, 1, R - 2),
293 self.id(3, 0, R - 2),
294 self.id(2, R - 1, R - 2),
295 self.id(2, R - 1, R - 1),
299 (self.id(3, R - 2, 0),
300 self.id(3, R - 2, 1),
301 self.id(3, R - 1, 1),
304 self.id(5, R - 2, R - 1),
305 self.id(5, R - 1, R - 1)),
307 (self.id(3, R - 2, R - 1),
308 self.id(3, R - 2, R - 2),
309 self.id(3, R - 1, R - 2),
310 self.id(4, 0, R - 2),
311 self.id(4, 0, R - 1),
312 self.id(0, R - 2, 0),
313 self.id(0, R - 1, 0))
321 self.id(3, R - 1, 0),
322 self.id(3, R - 1, 1),
323 self.id(5, R - 1, R - 2),
324 self.id(5, R - 1, R - 1)),
326 (self.id(4, 1, R - 1),
327 self.id(4, 1, R - 2),
328 self.id(4, 0, R - 2),
329 self.id(3, R - 1, R - 2),
330 self.id(3, R - 1, R - 1),
331 self.id(0, R - 1, 0),
332 self.id(0, R - 1, 1)),
334 (self.id(4, R - 2, 0),
335 self.id(4, R - 2, 1),
336 self.id(4, R - 1, 1),
339 self.id(5, R - 1, 0),
340 self.id(5, R - 1, 1)),
342 (self.id(4, R - 2, R - 1),
343 self.id(4, R - 2, R - 2),
344 self.id(4, R - 1, R - 2),
345 self.id(1, 0, R - 2),
346 self.id(1, 0, R - 1),
347 self.id(0, R - 1, R - 2),
348 self.id(0, R - 1, R - 1))
356 self.id(1, R - 2, 0),
357 self.id(1, R - 1, 0),
361 (self.id(5, 1, R - 1),
362 self.id(5, 1, R - 2),
363 self.id(5, 0, R - 2),
364 self.id(2, R - 2, 0),
365 self.id(2, R - 1, 0),
369 (self.id(5, R - 2, 0),
370 self.id(5, R - 2, 1),
371 self.id(5, R - 1, 1),
374 self.id(4, R - 2, 0),
375 self.id(4, R - 1, 0)),
377 (self.id(5, R - 2, R - 1),
378 self.id(5, R - 2, R - 2),
379 self.id(5, R - 1, R - 2),
380 self.id(3, R - 2, 0),
381 self.id(3, R - 1, 0),
std::shared_ptr< FrameSet > append(FrameSet const &first, FrameSet const &second)
Construct a FrameSet that performs two transformations in series.
def __init__(self, needLockOnRead=True, data=None, cond=None)