Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1#!/usr/local/bin/python
2# encoding: utf-8
3"""
4*The HTML template module for the `models_transients_context_get.py` resource*
6:Author:
7 David Young
8"""
9from __future__ import division
10from future import standard_library
11standard_library.install_aliases()
12from builtins import zip
13from builtins import object
14from past.utils import old_div
15import sys
16import os
17import khufu
18import collections
19import urllib.request
20import urllib.parse
21import urllib.error
22import re
23from dryxPyramid.models.models_base import base_model
26class models_transients_context_get(base_model):
27 """
28 The worker class for the models_transients_context_get module
30 **Key Arguments**
32 - ``log`` -- logger
33 - ``request`` -- the pyramid request
34 - ``elementId`` -- the specific element id requests (or False)
36 """
38 def __init__(self, log, request, elementId=False, search=False):
39 super().__init__(log, request, elementId, search)
40 self.resourceName = "transients_context"
41 self._set_default_parameters()
43 log.debug(
44 "instansiating a new 'models_transients_context_get' object")
45 return None
47 def get(self):
48 """execute the get method on the models_transients_context_get object
50 **Return**
52 - ``responseContent`` -- the reponse to send to the browser
54 """
55 self.log.debug('starting the ``get`` method')
57 transientBucketId = self.elementId
59 # GRAB THE LIGHTCURVE DATA FOR THE OBJECT
60 sqlQuery = """
61 select * from sherlock_crossmatches where transient_object_id in (select transientBucketId from transientBucket where replacedByRowId = 0 and transientBucketId = %(transientBucketId)s) and rank is not null;
62 """ % locals()
64 context = self.request.db.execute(sqlQuery).fetchall()
66 aladinFOV = 50.
67 snCat = []
68 agnCat = []
69 ntCat = []
70 starCat = []
71 cvCat = []
72 otherCat = []
73 bsCat = []
75 transTypes = ["sn", "nt", "cv", "agn",
76 "variablestar", "vs", "?", "unclear", "bs"]
77 cats = [snCat, ntCat, cvCat, agnCat,
78 starCat, starCat, otherCat, otherCat, bsCat]
79 colors = ["#268bd2", "#d33682", "#859900",
80 "#b58900", "#cb4b16", "#cb4b16", "#6c71c4", "#6c71c4", "#A0A0A0"]
81 # blue #268bd2
82 # magenta #d33682
83 # green #859900
84 # yellow #b58900
85 # orange #cb4b16
86 # violet #6c71c4
88 sourceType = ["galaxy", "agn/qso", "star", "cv/cb", "other"]
89 icons = ["spinner5", "target3", "star3", "sun6", "help2"]
90 iconsUnicode = [u"", u"", u"", u"", u""]
91 # iconsUnicode = [u"a", u"a", u"a", u"a", u"a"]
93 from astrocalc.coords import unit_conversion
94 # ASTROCALC UNIT CONVERTER OBJECT
95 converter = unit_conversion(
96 log=self.log
97 )
99 for c in context:
100 c = dict(c)
102 # UPDATE ALADIN FOV
103 if c["original_search_radius_arcsec"] * 6.0 > aladinFOV:
104 aladinFOV = c["original_search_radius_arcsec"] * 6.0
106 c["object_link"] = None
107 objectName = urllib.parse.quote(c["catalogue_object_id"])
109 if "ned" in c["catalogue_table_name"].lower():
110 c[
111 "object_link"] = "https://ned.ipac.caltech.edu/cgi-bin/objsearch?objname=%(objectName)s&extend=no&hconst=73&omegam=0.27&omegav=0.73&corr_z=1&out_csys=Equatorial&out_equinox=J2000.0&obj_sort=RA+or+Longitude&of=pre_text&zv_breaker=30000.0&list_limit=5&img_stamp=YES" % locals()
113 elif "sdss" in c["catalogue_table_name"].lower():
114 c[
115 "object_link"] = "http://skyserver.sdss.org/dr12/en/tools/explore/Summary.aspx?id=%(objectName)s" % locals()
117 ra = converter.ra_decimal_to_sexegesimal(
118 ra=c["raDeg"],
119 delimiter=""
120 )
121 dec = converter.dec_decimal_to_sexegesimal(
122 dec=c["decDeg"],
123 delimiter=""
124 )
125 c["catalogue_object_id"] = "SDSS J" + ra[0:9] + dec[0:9]
126 elif "milliquas" in c["catalogue_table_name"].lower():
127 c[
128 "object_link"] = "https://heasarc.gsfc.nasa.gov/db-perl/W3Browse/w3query.pl?bparam_name=%(objectName)s&navtrail=%%3Ca+class%%3D%%27navpast%%27+href%%3D%%27https%%3A%%2F%%2Fheasarc.gsfc.nasa.gov%%2FW3Browse%%2Fall%%2Fmilliquas.html%%27%%3E+Choose+Tables%%3C%%2Fa%%3E+%%3E+%%3Ca+class%%3D%%27navpast%%27+href%%3D%%27%%2Fcgi-bin%%2FW3Browse%%2Fw3table.pl%%3FREAL_REMOTE_HOST%%3D143.117.37.81%%26tablehead%%3Dname%%253Dmilliquas%%26Action%%3DMore%%2BOptions%%26REAL_REMOTE_HOST%%3D143%%252E117%%252E37%%252E81%%26Equinox%%3D2000%%26Action%%3DMore%%2BOptions%%26sortby%%3Dpriority%%26ResultMax%%3D1000%%26maxpriority%%3D99%%26Coordinates%%3DEquatorial%%26tablehead%%3Dname%%253Dmilliquas%%26Action%%3DParameter%%2BSearch%%27%%3EParameter+Search%%3C%%2Fa%%3E&popupFrom=Query+Results&tablehead=name%%3Dheasarc_milliquas%%26description%%3DMillion+Quasars+Catalog+%%28MILLIQUAS%%29%%2C+Version+4.5+%%2810+May+2015%%29%%26url%%3Dhttp%%3A%%2F%%2Fheasarc.gsfc.nasa.gov%%2FW3Browse%%2Fgalaxy-catalog%%2Fmilliquas.html%%26archive%%3DN%%26radius%%3D1%%26mission%%3DGALAXY+CATALOG%%26priority%%3D5%%26tabletype%%3DObject&dummy=Examples+of+query+constraints%%3A&varon=name&bparam_name%%3A%%3Aunit=+&bparam_name%%3A%%3Aformat=char25&varon=ra&bparam_ra=&bparam_ra%%3A%%3Aunit=degree&bparam_ra%%3A%%3Aformat=float8%%3A.5f&varon=dec&bparam_dec=&bparam_dec%%3A%%3Aunit=degree&bparam_dec%%3A%%3Aformat=float8%%3A.5f&varon=bmag&bparam_bmag=&bparam_bmag%%3A%%3Aunit=mag&bparam_bmag%%3A%%3Aformat=float8%%3A4.1f&varon=rmag&bparam_rmag=&bparam_rmag%%3A%%3Aunit=mag&bparam_rmag%%3A%%3Aformat=float8%%3A4.1f&varon=redshift&bparam_redshift=&bparam_redshift%%3A%%3Aunit=+&bparam_redshift%%3A%%3Aformat=float8%%3A6.3f&varon=radio_name&bparam_radio_name=&bparam_radio_name%%3A%%3Aunit=+&bparam_radio_name%%3A%%3Aformat=char22&varon=xray_name&bparam_xray_name=&bparam_xray_name%%3A%%3Aunit=+&bparam_xray_name%%3A%%3Aformat=char22&bparam_lii=&bparam_lii%%3A%%3Aunit=degree&bparam_lii%%3A%%3Aformat=float8%%3A.5f&bparam_bii=&bparam_bii%%3A%%3Aunit=degree&bparam_bii%%3A%%3Aformat=float8%%3A.5f&bparam_broad_type=&bparam_broad_type%%3A%%3Aunit=+&bparam_broad_type%%3A%%3Aformat=char4&bparam_optical_flag=&bparam_optical_flag%%3A%%3Aunit=+&bparam_optical_flag%%3A%%3Aformat=char3&bparam_red_psf_flag=&bparam_red_psf_flag%%3A%%3Aunit=+&bparam_red_psf_flag%%3A%%3Aformat=char1&bparam_blue_psf_flag=&bparam_blue_psf_flag%%3A%%3Aunit=+&bparam_blue_psf_flag%%3A%%3Aformat=char1&bparam_ref_name=&bparam_ref_name%%3A%%3Aunit=+&bparam_ref_name%%3A%%3Aformat=char6&bparam_ref_redshift=&bparam_ref_redshift%%3A%%3Aunit=+&bparam_ref_redshift%%3A%%3Aformat=char6&bparam_qso_prob=&bparam_qso_prob%%3A%%3Aunit=percent&bparam_qso_prob%%3A%%3Aformat=int2%%3A3d&bparam_alt_name_1=&bparam_alt_name_1%%3A%%3Aunit=+&bparam_alt_name_1%%3A%%3Aformat=char22&bparam_alt_name_2=&bparam_alt_name_2%%3A%%3Aunit=+&bparam_alt_name_2%%3A%%3Aformat=char22&Entry=&Coordinates=J2000&Radius=Default&Radius_unit=arcsec&NR=CheckCaches%%2FGRB%%2FSIMBAD%%2FNED&Time=&ResultMax=10&displaymode=Display&Action=Start+Search&table=heasarc_milliquas" % locals()
129 elif ("ps1" not in c["catalogue_table_name"].lower()) and ("ritter" not in c["catalogue_table_name"].lower()) and ("down" not in c["catalogue_table_name"].lower()) and ("guide_star" not in c["catalogue_table_name"].lower()) and ("kepler" not in c["catalogue_table_name"].lower()):
130 c[
131 "object_link"] = "http://simbad.u-strasbg.fr/simbad/sim-id?Ident=%(objectName)s&NbIdent=1&Radius=2&Radius.unit=arcmin&submit=submit+id" % locals()
133 if c["object_link"]:
134 c["catalogue_object_id"] = khufu.a(
135 content=c["catalogue_object_id"],
136 href=c["object_link"],
137 openInNewTab=True
138 )
140 if c["catalogue_object_type"].lower() == "other":
141 c["catalogue_object_type"] = c["catalogue_object_subtype"]
143 # transient_object_id': 871327L,
144 # distance_modulus': None,
145 # association_type': 'SN',
146 # rank': 9L,
147 # original_search_radius_arcsec': 20.0,
148 # catalogue_object_dec': 6.09801031993,
149 # catalogue_view_name': 'tcs_view_galaxy_sdss_photo_stars_galaxies_dr12',
150 # id': 129686L,
151 # direct_distance_modulus': None,
152 # scale': None,
153 # direct_distance': None,
154 # catalogue_object_subtype': '3',
155 # catalogue_object_ra': 31.3035672863,
156 # catalogue_object_type': 'galaxy',
157 # catalogue_table_name': 'tcs_cat_sdss_photo_stars_galaxies_dr12',
158 # catalogue_object_id': '1237667227685224623',
159 # search_name': 'sdss phot sn angular',
160 # separation': 17.031327044,
161 # catalogue_table_id': 47,
162 # date_added': datetime.datetime(2015, 9, 22, 16, 28, 37),
163 # major_axis_arcsec': None,
164 # physical_separation_kpc': None,
165 # distance': None, 'radius_color': '#268bd2',
166 # direct_distance_scale': None,
167 # association_rank': None,
168 # z': None}
170 other = True
171 for s, i in zip(sourceType, iconsUnicode):
173 if c["catalogue_object_type"].lower() in s:
174 rank = c["rank"]
175 c[
176 "label"] = """%(i)s%(rank)s""" % locals()
177 other = False
179 if other == True:
180 rank = c["rank"]
181 c[
182 "label"] = u"""%(rank)s""" % locals()
184 c["radius_color"] = None
185 for tt, cat, col in zip(transTypes, cats, colors):
186 if c["association_type"].lower() == tt:
187 c["radius_color"] = col
188 cat.append(c)
190 dist = c["distance"]
191 if not dist:
192 dist = "-"
193 else:
194 dist = "%(dist)0.1f Mpc" % locals()
196 asep = c["separationArcsec"]
197 dsep = c["physical_separation_kpc"]
199 if dsep:
200 sep = "%(asep)0.1f\" / %(dsep)0.1f Kpc" % locals()
201 else:
202 sep = "%(asep)0.1f\"" % locals()
204 c["details"] = "<em>source type: </em>" + \
205 c["catalogue_object_type"]
206 c["details"] += "<br/><em>transient association: </em>" + \
207 c["association_type"]
208 c["details"] += "<br/><em>catalogue: </em>" + \
209 c["catalogue_table_name"].replace(
210 "tcs_cat", "").replace("_", " ")
211 c[
212 "details"] += "<br/><em>distance to source: </em>%(dist)s" % locals()
213 c[
214 "details"] += "<br/><em>separation: </em>%(sep)s" % locals()
216 regex = re.compile(r'(v\d{1,3}) (\d{1,3})( (\d{1,3}))?')
217 c["catalogue_table_name"] = regex.sub(
218 "\g<1>.\g<2>", c["catalogue_table_name"])
220 catalogues = {
221 "nt": {
222 "color": "#859900",
223 "data": ntCat
224 },
225 "agn": {
226 "color": "#dc322f",
227 "data": agnCat
228 },
229 "star": {
230 "color": "#b58900",
231 "data": starCat
232 },
233 "cv": {
234 "color": "#cb4b16",
235 "data": cvCat
236 },
237 "other": {
238 "color": "#6c71c4",
239 "data": otherCat
240 },
241 "sn": {
242 "color": "#268bd2",
243 "data": snCat
244 },
245 "bs": {
246 "color": "#A0A0A0",
247 "data": bsCat
248 }
249 }
251 aladinParameters = {}
252 aladinFOV = old_div(aladinFOV, 3600.)
253 aladinParameters["FOV"] = float("""%(aladinFOV)0.3f""" % locals())
254 aladinParameters["search_perimeter_width"] = 0.9
256 json = {
257 "aladin_parameters": aladinParameters,
258 "catalogues": catalogues,
259 "catalogueOrder": ["sn", "other", "star", "cv", "agn", "nt", "bs"]
260 }
262 self.log.debug('completed the ``get`` method')
263 return json
265 def get_metadata(
266 self):
267 """ extra metadata
268 """
269 self.log.debug('starting the ``get_metadata`` method')
271 transientBucketId = self.elementId
273 sqlQuery = u"""
274 select * from transientBucketSummaries where transientBucketId = %(transientBucketId)s
275 """ % locals()
276 extraMetadataTmp = self.request.db.execute(sqlQuery).fetchall()
277 extraMetadata = []
278 extraMetadata[:] = [dict(list(zip(list(row.keys()), row)))
279 for row in extraMetadataTmp]
281 self.log.debug('completed the ``get_metadata`` method')
282 return extraMetadata
284 # xt-class-method