|
117 | 117 | bls = [] |
118 | 118 | for task in subtasks: |
119 | 119 | sv1, m1, sv2, m2 = sv1_list[task], m1_list[task], sv2_list[task], m2_list[task] |
120 | | - mapnames = ((sv1, m1), (sv2, m2)) |
121 | 120 | pols = ('T', 'pol') |
122 | 121 |
|
123 | 122 | log.info(f"[Rank {so_mpi.rank}, {task:02d}]: Preparing data for {sv1}_{m1} x {sv2}_{m2}") |
124 | 123 |
|
125 | 124 | # only calculate the stuff we need to avoid numerical differences |
126 | 125 | m2win_fn = {} |
127 | | - for (sv, m) in mapnames: |
128 | | - for pol in pols: |
129 | | - m2win_fn[sv, m, pol] = d[f"window_{pol}_{sv}_{m}"] # no repeated keys |
| 126 | + for pol in pols: |
| 127 | + m2win_fn[sv1, m1, pol] = d[f"window_{pol}_{sv1}_{m1}"] |
| 128 | + m2win_fn[sv2, m2, pol] = d[f"window_{pol}_{sv2}_{m2}"] # no repeated keys |
130 | 129 |
|
131 | 130 | win_fn2win = {} |
132 | 131 | for win_fn in m2win_fn.values(): |
|
149 | 148 | win_fn2walm[win_fn] = sph_tools.map2alm(win, niter=niter, lmax=maxl, dtype=np.complex128) # no repeated computation (or keys) |
150 | 149 |
|
151 | 150 | can_win_fn_2pt2cl = {} |
152 | | - for win_fn1, walm1 in win_fn2walm.items(): |
153 | | - for win_fn2, walm2 in win_fn2walm.items(): |
154 | | - can_win_fn_2pt = pspipe_list.canonize_connected_2pt(win_fn1, win_fn2) |
155 | | - if can_win_fn_2pt not in can_win_fn_2pt2cl: |
156 | | - can_win_fn_2pt2cl[can_win_fn_2pt] = curvedsky.alm2cl(walm1, walm2, dtype=np.float64) # no repeated computation (or keys) |
| 151 | + for poli in pols: |
| 152 | + win_fni = m2win_fn[sv1, m1, poli] |
| 153 | + walmi = win_fn2walm[win_fni] |
| 154 | + for polj in pols: |
| 155 | + win_fnj = m2win_fn[sv2, m2, polj] |
| 156 | + walmj = win_fn2walm[win_fnj] |
157 | 157 |
|
| 158 | + can_win_fn_2pt_ij = pspipe_list.canonize_connected_2pt(win_fni, win_fnj) |
| 159 | + if can_win_fn_2pt_ij not in can_win_fn_2pt2cl: |
| 160 | + can_win_fn_2pt2cl[can_win_fn_2pt_ij] = curvedsky.alm2cl(walmi, walmj, dtype=np.float64) # no repeated computation (or keys) |
| 161 | + |
158 | 162 | # beams have no numerical differences due to multithreading |
159 | 163 | _, bl1 = misc.read_beams(d[f"beam_T_{sv1}_{m1}"], d[f"beam_pol_{sv1}_{m1}"]) |
160 | 164 | _, bl2 = misc.read_beams(d[f"beam_T_{sv2}_{m2}"], d[f"beam_pol_{sv2}_{m2}"]) |
|
167 | 171 | bl = [] |
168 | 172 | for i in range(2): |
169 | 173 | for j in range(2): |
170 | | - (svi, mi), (svj, mj) = mapnames[i], mapnames[j] |
171 | 174 | poli, polj = pols[i], pols[j] |
172 | | - win_fni, win_fnj = m2win_fn[svi, mi, poli], m2win_fn[svj, mj, polj] |
| 175 | + win_fni, win_fnj = m2win_fn[sv1, m1, poli], m2win_fn[sv2, m2, polj] |
173 | 176 | can_win_fn_2pt_ij = pspipe_list.canonize_connected_2pt(win_fni, win_fnj) |
174 | | - spec_for_ducc.append(can_win_fn_2pt2cl[can_win_fn_2pt]) |
| 177 | + spec_for_ducc.append(can_win_fn_2pt2cl[can_win_fn_2pt_ij]) |
175 | 178 | bl.append(bl1[i][2:lmax] * bl2[j][2:lmax]) # TODO: reconsider pspipe conventions |
176 | 179 | specs_for_ducc.append(spec_for_ducc) |
177 | 180 | bls.append(bl) |
|
0 commit comments