-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathQ0_calc.py
83 lines (63 loc) · 3.53 KB
/
Q0_calc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import numpy as np
from astropy.table import Table
from astropy import units as u
from astropy.coordinates import SkyCoord, search_around_sky
from IPython.display import clear_output
from pymoc import MOC
from pymoc.util.catalog import catalog_to_moc
from mltier import Field, Q_0, parallel_process, describe, gen_rand_cat_inMOC
'''
Finds Q0 (see Flueren et al 2012 for a definition of this parameter and the method used to calculate it) for the given catalogues as well as the optimum radius for crossmatching
INPUTS
------------
cat1 - the radio catalogue
cat2 - the masterlist
cat1ra - column name of the ra column for cat1
cat1dec - column name of the dec column for cat1
cat2ra - column name of the ra column for cat2
cat2dec - column name of the dec column for cat2
cat2flux - column name of the flux of the sources in cat2 in the band that is being used for the crossmatching
ra_down - the ra that defines the left side of a rectangle encompasing the area the crossmatching will be done in (this parameter is redundant if a moc is provided)
ra_up - the ra that defines the right side of a rectangle encompasing the area the crossmatching will be done in (this parameter is redundant if a moc is provided)
dec_down - the dec that defines the bottom side of a rectangle encompasing the area the crossmatching will be done in (this parameter is redundant if a moc is provided)
dec_up - the dec that defines the upper side of a rectangle encompassing the area the crossmatching will be done in (this parameter is redundant if a moc is provided)
radius_low - lower radius that Q0 is computed for in arcseconds. Value given must be >0 and if too small may cause the code to crash (would advise >=0.01)
radius_high - upper radius that Q0 is computed forcin arcseconds
steps - the number of intermediate radii that Q0 is computed for
moc - a moc defining the area the crossmatching will be done in
OUTPUTS
------------
Q0 - the maximum value of Q0
rads - the radius at which the maximum value of Q0 is found in arcseconds
'''
def Q0_calc(cat1,cat2,cat1ra,cat1dec,cat2ra,cat2dec,cat2flux,ra_down,ra_up,dec_down,dec_up,radius_low,radius_up,steps,moc=None):
field = Field(ra_down, ra_up, dec_down, dec_up, moc)
radio = cat1
masterlist_data = cat2
radio = field.filter_catalogue(radio, colnames=(cat1ra,cat1dec))
masterlist = field.filter_catalogue(masterlist_data, colnames=(cat2ra,cat2dec))
coords_masterlist = SkyCoord(masterlist[cat2ra],
masterlist[cat2dec],
unit=(u.deg, u.deg),
frame='icrs')
coords_radio = SkyCoord(radio[cat1ra],
radio[cat1dec],
unit=(u.deg, u.deg),
frame='icrs')
n_iter = 10
rads = np.linspace(radius_low,radius_up,steps)
q_0_comp_i = Q_0(coords_radio, coords_masterlist, field)
q_0_rad_i = []
print('starting to find Q0. This will take a while')
for radius in rads:
print('finding Q0 with radius = {} arcseconds'.format(radius))
q_0_rad_aux = []
for i in range(n_iter):
out = q_0_comp_i(radius=radius)
q_0_rad_aux.append(out)
q_0_rad_i.append(np.mean(q_0_rad_aux))
#print("{:7.5f} {:7.5f} +/- {:7.5f} [{:7.5f} {:7.5f}]".format(radius,
# np.mean(q_0_rad_aux), np.std(q_0_rad_aux),
# np.min(q_0_rad_aux), np.max(q_0_rad_aux)))
mask = q_0_rad_i == max(q_0_rad_i)
return(q_0_rad_i,rads)