Hide keyboard shortcuts

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* 

5 

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 

24 

25 

26class models_transients_context_get(base_model): 

27 """ 

28 The worker class for the models_transients_context_get module 

29 

30 **Key Arguments** 

31 

32 - ``log`` -- logger 

33 - ``request`` -- the pyramid request 

34 - ``elementId`` -- the specific element id requests (or False) 

35 

36 """ 

37 

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() 

42 

43 log.debug( 

44 "instansiating a new 'models_transients_context_get' object") 

45 return None 

46 

47 def get(self): 

48 """execute the get method on the models_transients_context_get object 

49 

50 **Return** 

51 

52 - ``responseContent`` -- the reponse to send to the browser 

53 

54 """ 

55 self.log.debug('starting the ``get`` method') 

56 

57 transientBucketId = self.elementId 

58 

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() 

63 

64 context = self.request.db.execute(sqlQuery).fetchall() 

65 

66 aladinFOV = 50. 

67 snCat = [] 

68 agnCat = [] 

69 ntCat = [] 

70 starCat = [] 

71 cvCat = [] 

72 otherCat = [] 

73 bsCat = [] 

74 

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 

87 

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"] 

92 

93 from astrocalc.coords import unit_conversion 

94 # ASTROCALC UNIT CONVERTER OBJECT 

95 converter = unit_conversion( 

96 log=self.log 

97 ) 

98 

99 for c in context: 

100 c = dict(c) 

101 

102 # UPDATE ALADIN FOV 

103 if c["original_search_radius_arcsec"] * 6.0 > aladinFOV: 

104 aladinFOV = c["original_search_radius_arcsec"] * 6.0 

105 

106 c["object_link"] = None 

107 objectName = urllib.parse.quote(c["catalogue_object_id"]) 

108 

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() 

112 

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() 

116 

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() 

132 

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 ) 

139 

140 if c["catalogue_object_type"].lower() == "other": 

141 c["catalogue_object_type"] = c["catalogue_object_subtype"] 

142 

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} 

169 

170 other = True 

171 for s, i in zip(sourceType, iconsUnicode): 

172 

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 

178 

179 if other == True: 

180 rank = c["rank"] 

181 c[ 

182 "label"] = u"""%(rank)s""" % locals() 

183 

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) 

189 

190 dist = c["distance"] 

191 if not dist: 

192 dist = "-" 

193 else: 

194 dist = "%(dist)0.1f Mpc" % locals() 

195 

196 asep = c["separationArcsec"] 

197 dsep = c["physical_separation_kpc"] 

198 

199 if dsep: 

200 sep = "%(asep)0.1f\" / %(dsep)0.1f Kpc" % locals() 

201 else: 

202 sep = "%(asep)0.1f\"" % locals() 

203 

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() 

215 

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"]) 

219 

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 } 

250 

251 aladinParameters = {} 

252 aladinFOV = old_div(aladinFOV, 3600.) 

253 aladinParameters["FOV"] = float("""%(aladinFOV)0.3f""" % locals()) 

254 aladinParameters["search_perimeter_width"] = 0.9 

255 

256 json = { 

257 "aladin_parameters": aladinParameters, 

258 "catalogues": catalogues, 

259 "catalogueOrder": ["sn", "other", "star", "cv", "agn", "nt", "bs"] 

260 } 

261 

262 self.log.debug('completed the ``get`` method') 

263 return json 

264 

265 def get_metadata( 

266 self): 

267 """ extra metadata 

268 """ 

269 self.log.debug('starting the ``get_metadata`` method') 

270 

271 transientBucketId = self.elementId 

272 

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] 

280 

281 self.log.debug('completed the ``get_metadata`` method') 

282 return extraMetadata 

283 

284 # xt-class-method