@@ -15,6 +15,49 @@ def test_jkmap(jk_maps, njk):
1515 assert np .all (np .unique (jk_maps [key ]) == np .arange (1 , njk + 1 ))
1616
1717
18+ def _remove_regions (maps , jk_maps , regions ):
19+ """Reference: explicitly zero out the given regions in each map."""
20+ from copy import deepcopy
21+
22+ _maps = deepcopy (maps )
23+ for key_data , key_mask in zip (maps .keys (), jk_maps .keys ()):
24+ _jkmap = jk_maps [key_mask ]
25+ if _jkmap is None :
26+ continue
27+ mask = (_jkmap > 0 ).astype (int )
28+ for r in regions :
29+ mask [_jkmap == float (r )] = 0
30+ _maps [key_data ] *= mask
31+ return _maps
32+
33+
34+ def test_region_alm_cls (fields , data_maps , jk_maps , njk ):
35+ """ALM-subtraction and map-masking must give identical Cls."""
36+ from itertools import combinations
37+
38+ from heracles import angular_power_spectra , transform
39+ from heracles .dices .jackknife import _get_region_maps , _sum_alms_except
40+
41+ alms_regions = {
42+ k : transform (fields , _get_region_maps (data_maps , jk_maps , k ))
43+ for k in range (1 , njk + 1 )
44+ }
45+
46+ for nd in (0 , 1 , 2 ):
47+ for regions in combinations (range (1 , njk + 1 ), nd ):
48+ cls_new = angular_power_spectra (_sum_alms_except (alms_regions , regions ))
49+ cls_ref = angular_power_spectra (
50+ transform (fields , _remove_regions (data_maps , jk_maps , regions ))
51+ )
52+ for key in cls_ref :
53+ np .testing .assert_allclose (
54+ cls_new [key ].array ,
55+ cls_ref [key ].array ,
56+ rtol = 1e-7 ,
57+ atol = 1e-10 ,
58+ err_msg = f"nd={ nd } , regions={ regions } , key={ key } " ,
59+ )
60+
1861
1962def test_cls (nside , cls0 , fields , data_maps , vis_maps , jk_maps ):
2063 _cls0 = dices .jackknife_cls (data_maps , vis_maps , jk_maps , fields , nd = 0 )[()]
0 commit comments