Skip to content

Commit d4c18d2

Browse files
Merge pull request #59 from CosmoStat/develop
v0.1.9
2 parents 415c0dc + 1f2c9cb commit d4c18d2

4 files changed

Lines changed: 708 additions & 74 deletions

File tree

cs_util/cat.py

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import os
1212
from datetime import datetime
1313
from importlib.metadata import version
14+
import numpy as np
15+
import healpy as hp
1416

1517
from astropy.io import fits
1618
from astropy.io import ascii
@@ -267,3 +269,102 @@ def read_dndz(file_path):
267269
z_centers = bin_edges2centers(z_edges)
268270

269271
return z_centers, nz, z_edges
272+
273+
274+
def read_hp_mask(input_name, verbose=False):
275+
"""Read Hp Mask.
276+
277+
Read healpy mask.
278+
279+
Parameters
280+
----------
281+
input_name : str
282+
input file name
283+
verbose : bool, optional
284+
verbose output if ``True``;; default is ``False``
285+
286+
Returns
287+
-------
288+
array
289+
mask values
290+
bool
291+
nest value (always ``False``)
292+
int
293+
nside
294+
295+
"""
296+
if verbose:
297+
print(f'Reading mask {input_name}...')
298+
299+
nest = False
300+
301+
# Open input mask
302+
mask, header= hp.read_map(
303+
input_name,
304+
h=True,
305+
nest=nest,
306+
)
307+
for (key, value) in header:
308+
if key == 'ORDERING':
309+
if value == 'RING':
310+
if nest:
311+
raise ValueError(
312+
'input mask has ORDENING=RING, set nest to False'
313+
)
314+
elif value == 'NEST':
315+
if not nest:
316+
raise ValueError(
317+
'input mask has ORDENING=NEST, set nest to True'
318+
)
319+
320+
# Get nside from header
321+
nside = None
322+
for key, value in header:
323+
if key == 'NSIDE':
324+
nside = int(value)
325+
if not nside:
326+
raise KeyError('NSIDE not found in FITS mask header')
327+
328+
return mask, nest, nside
329+
330+
331+
def get_binned_area(ra, dec, nside=512, return_pix=False):
332+
"""Get Binned Area.
333+
334+
Return sky area corresponding to occupied pixels of binned catalogue.
335+
336+
Parameters
337+
----------
338+
ra : np.ndarray
339+
Right Ascension coordinates
340+
dec : np.ndarray
341+
Declination coordinates
342+
nside : int, optional
343+
nside for binning; default is 512
344+
return_pix: bool, optional
345+
return valid pixel list if ``True``; default is ``False``
346+
347+
Returns
348+
-------
349+
float
350+
area in square degrees
351+
list
352+
pixels of input data positions
353+
354+
"""
355+
# Pixel list of input data
356+
pix = hp.ang2pix(nside, ra, dec, lonlat=True)
357+
358+
# Number of occupied pixels
359+
Nocc = np.unique(pix).size
360+
361+
# Pixel area in square degrees
362+
pix_area_deg2 = hp.nside2pixarea(nside, degrees=True)
363+
364+
# Footprint area in square degrees
365+
area_deg2 = Nocc * pix_area_deg2
366+
367+
if return_pix:
368+
return area_deg2, pix
369+
else:
370+
return area_deg2

0 commit comments

Comments
 (0)