3 p_geom = wao.config.p_geom
10 import matplotlib.pyplot
as plt
13 cent = p_geom.pupdiam / 2. + 0.5
15 p_tel = wao.config.p_tel
17 p_tel.t_spiders = 0.51
18 spup = mkP.make_pupil(p_geom.pupdiam, p_geom.pupdiam, p_tel, cent,
19 cent).astype(np.float32)
22 spup2 = mkP.make_pupil(p_geom.pupdiam, p_geom.pupdiam, p_tel, cent,
23 cent).astype(np.float32)
25 spiders = spup2 - spup
27 (spidersID, k) = scipy.ndimage.label(spiders)
28 spidersi = util.pad_array(spidersID, p_geom.ssize).astype(np.float32)
29 pxListSpider = [np.where(spidersi == i)
for i
in range(1, k + 1)]
32 dmposx = wao.config.p_dm0._xpos - 0.5
33 dmposy = wao.config.p_dm0._ypos - 0.5
34 dmposMat = np.c_[dmposx, dmposy].T
36 pitch = wao.config.p_dm0._pitch
39 plt.scatter(*dmposMat)
40 discard = np.zeros(len(dmposx), dtype=np.bool)
44 for k, pxList
in enumerate(pxListSpider):
45 pts = np.c_[pxList[1], pxList[0]]
48 lineEq = np.linalg.pinv(pts).dot(np.ones(pts.shape[0]))
49 aa, bb = lineEq[0], lineEq[1]
53 if np.abs(bb) < np.abs(aa):
54 onePoint = np.array([1 / aa, 0.])
56 onePoint = np.array([0., 1 / bb])
58 y = -aa / bb * x + 1 / bb
59 plt.plot(x, y, color=
'C%u' % (4 + k), label=
'%u' % k)
63 rotation = np.array([[-bb, aa], [-aa, -bb]]) / (aa**2 + bb**2)**.5
66 rotatedPx = rotation.dot(pts.T - onePoint[:,
None])
69 minU, maxU = rotatedPx[0].min() - 5. * pitch, rotatedPx[0].max() + 5. * pitch
72 rotatedActus = rotation.dot(dmposMat - onePoint[:,
None])
73 selGoodSide = (rotatedActus[0] > minU) & (rotatedActus[0] < maxU)
76 selDiscard = (np.abs(rotatedActus[1]) < 0.5 * pitch) & selGoodSide
80 selPairable = (np.abs(rotatedActus[1]) > 0.5 * pitch) & \
81 (np.abs(rotatedActus[1]) < 1.5 * pitch) & \
84 pairableIdx = np.where(selPairable)[0]
85 uCoord = rotatedActus[0,
88 order = np.sort(uCoord)
89 orderIdx = pairableIdx[np.argsort(uCoord)]
91 for i
in range(0, len(order) - 1):
94 if np.abs(order[i] - order[i + 1]) < .2 * pitch:
95 pairs += [(orderIdx[i], orderIdx[i + 1])]
97 plt.scatter(*dmposMat[:, selDiscard], color=
'C1')
98 plt.scatter(*dmposMat[:, selPairable], color=
'C2')
102 plt.scatter(*dmposMat[:, [p, q]])
104 print(
'To discard: %u actu' % np.sum(discard))
105 print(
'%u pairs to slave' % len(pairs))