diff --git a/des_y6utils/mdet.py b/des_y6utils/mdet.py index 5c57e4a..a522d9e 100644 --- a/des_y6utils/mdet.py +++ b/des_y6utils/mdet.py @@ -36,6 +36,8 @@ def make_mdet_cuts(data, version, verbose=False): return _make_mdet_cuts_v2(data, verbose=verbose) elif str(version) == "3": return _make_mdet_cuts_v3(data, verbose=verbose) + elif str(version) == "4": + return _make_mdet_cuts_v4(data, verbose=verbose) else: raise ValueError("the mdet cut version '%r' is not recognized!" % version) @@ -57,7 +59,7 @@ def _make_mdet_cuts_gauss( msk : np.ndarray of bool A boolean array with the cuts. To cut the data, use `data[msk]`. """ - msk = _make_mdet_cuts_raw_v3( + msk = _make_mdet_cuts_raw_v34( data, verbose=verbose, min_s2n=min_s2n, @@ -172,7 +174,7 @@ def _make_mdet_cuts_v2(d, verbose=False): def _make_mdet_cuts_v3(d, verbose=False): - msk = _make_mdet_cuts_raw_v3( + msk = _make_mdet_cuts_raw_v34( d, verbose=verbose, min_s2n=10, @@ -195,6 +197,36 @@ def _make_mdet_cuts_v3(d, verbose=False): return msk +def _make_mdet_cuts_v4(d, verbose=False): + + msk = _make_mdet_cuts_raw_v34( + d, + verbose=verbose, + min_s2n=10, + n_terr=0, + min_t_ratio=0.5, + max_mfrac=0.1, + max_s2n=np.inf, + max_t=np.inf, + ) + + size_sizeerr = (d['gauss_T_ratio']*d['gauss_psf_T']) * d['gauss_T_err'] + size_s2n = (d['gauss_T_ratio']*d['gauss_psf_T']) / d['gauss_T_err'] + msk_superspreader = ((size_sizeerr > 1) & (size_s2n < 10)) + msk &= ~msk_superspreader + + # apply the mask + hmap = _read_hsp_mask( + "y6-combined-hleda-gaiafull-des-stars-hsmap16384-nomdet-v2.fits" + ) + in_footprint = hmap.get_values_pos(d["ra"], d["dec"], valid_mask=True) + msk &= in_footprint + if verbose: + print("did mask cuts", np.sum(msk)) + + return msk + + def _compute_asinh_mags(flux, i): """This function and coefficients are from from Eli. Ask him. @@ -381,7 +413,7 @@ def _make_mdet_cuts_raw_v12( return msk -def _make_mdet_cuts_raw_v3( +def _make_mdet_cuts_raw_v34( d, *, min_s2n, @@ -459,6 +491,7 @@ def _make_mdet_cuts_raw_v3( ) & ((d["gauss_T_ratio"] * d["gauss_psf_T"]) < max_t) ) + if verbose: print("did mdet cuts", np.sum(msk))