Commit 71125392 authored by Wei Shoulin's avatar Wei Shoulin
Browse files

C9

parent a64fbab9
......@@ -48,24 +48,39 @@ def get_raw_header(filepath, **keys):
return union
def heapix_sql_condition(ra, dec, radius, ra_col = 'ra', dec_col = 'dec', nside = DEFAULT_NSIDE):
"""
生成用于筛选特定天区范围内数据的SQL条件语句(大圆公式)。
Args:
ra (float): 天区中心的赤经值,单位为度。
dec (float): 天区中心的赤纬值,单位为度。
radius (float): 天区的半径,单位为度。
ra_col (str, optional): 数据表中赤经值的列名,默认为'ra'。
dec_col (str, optional): 数据表中赤纬值的列名,默认为'dec'。
nside (int, optional): Healpix像素化的nside参数,默认为DEFAULT_NSIDE。
Returns:
str: 用于筛选特定天区范围内数据的SQL条件语句。
"""
arcDec = (PI / 180) * dec
whereSql = f"abs((180./{PI}) * ACOS(SIN({PI} * {dec_col}/180) * SIN({arcDec}) + COS({PI} * {dec_col}/180) * COS({arcDec}) * COS(({PI}/180) * ({ra_col} - {ra})))) < {radius}"
whereSql = f"abs((180./pi()) * ACOS(SIN(pi() * {dec_col}/180) * SIN({arcDec}) + COS(pi() * {dec_col}/180) * COS({arcDec}) * COS(pi()* ({ra_col} - {ra})/180))) < {radius}"
heapix_ids = get_healpix_ids(ra, dec, radius, nside)
nside_column = "NS%dHIdx" % (nside,)
whereZoneSql = "%s in (%s)" % \
(nside_column, ','.join([str(i) for i in heapix_ids]))
return whereZoneSql, whereSql
return f"{whereSql} and {whereZoneSql}"
def catalog_heapix_sql_condition(ra, dec, radius, ra_col = 'ra', dec_col = 'dec', nside = DEFAULT_NSIDE):
x2 = f"cos({dec_col})*cos({ra_col})"
y2 = f"cos({dec_col})*sin({ra_col})"
z2 = f"sin({dec_col})"
x2 = f"cos(pi()*{dec_col}/180.0)*cos(pi()*{ra_col}/180.0)"
y2 = f"cos(pi()*{dec_col}/180.0)*sin(pi()*{ra_col}/180.0)"
z2 = f"sin(pi()*{dec_col}/180.0)"
x1 = f"cos({dec})*cos({ra})"
y1 = f"cos({dec})*sin({ra})"
z1 = f"sin({dec})"
x1 = f"cos(pi()*{dec}/180.0)*cos(pi()*{ra}/180.0)"
y1 = f"cos(pi()*{dec}/180.0)*sin(pi()*{ra}/180.0)"
z1 = f"sin(pi()*{dec}/180.0)"
distance = f"pow(({x2}-{x1}),2)+pow(({y2}-{y1}),2)+pow(({z2}-{z1}),2)"
......@@ -73,18 +88,18 @@ def catalog_heapix_sql_condition(ra, dec, radius, ra_col = 'ra', dec_col = 'dec'
nside_column = "NS%dHIdx" % (nside,)
whereZoneSql = "%s in (%s)" % \
(nside_column, ','.join([str(i) for i in heapix_ids]))
whereSql = f"{distance} <= 4*pow({radius}/2, 2) and {whereZoneSql}"
whereSql = f"{distance} <= 4*pow(pi()*{radius}/180.0/2, 2) and {whereZoneSql}"
return whereSql
def level2_heapix_sql_condition(ra, dec, radius, ra_col = 'ra', dec_col = 'dec', nside = DEFAULT_NSIDE):
x2 = f"cos({dec_col})*cos({ra_col})"
y2 = f"cos({dec_col})*sin({ra_col})"
z2 = f"sin({dec_col})"
x2 = f"cos(pi()*{dec_col}/180.0)*cos(pi()*{ra_col}/180.0)"
y2 = f"cos(pi()*{dec_col}/180.0)*sin(pi()*{ra_col}/180.0)"
z2 = f"sin(pi()*{dec_col}/180.0)"
x1 = f"cos({dec})*cos({ra})"
y1 = f"cos({dec})*sin({ra})"
z1 = f"sin({dec})"
x1 = f"cos(pi()*{dec}/180.0)*cos(pi()*{ra}/180.0)"
y1 = f"cos(pi()*{dec}/180.0)*sin(pi()*{ra}/180.0)"
z1 = f"sin(pi()*{dec}/180.0)"
distance = f"pow(({x2}-{x1}),2)+pow(({y2}-{y1}),2)+pow(({z2}-{z1}),2)"
......@@ -93,6 +108,6 @@ def level2_heapix_sql_condition(ra, dec, radius, ra_col = 'ra', dec_col = 'dec',
whereZoneSql = "%s in (%s)" % \
(nside_column, ','.join([str(i) for i in heapix_ids]))
whereSql = f"{distance} <= 4*pow({radius}/2, 2) and {whereZoneSql}"
whereSql = f"{distance} <= 4*pow(pi()*{radius}/180.0/2, 2) and {whereZoneSql}"
return whereSql
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment