def systematics_552(): # Bad1 http://kanaloa.ipac.caltech.edu/ibe/data/ptf/dev/process/proc/2010/04/17/f2/c6/p13/v1/PTF_201004172696_i_p_scie_t062817_u011575385_f02_p110002_c06.fits?center=127.403,19.6476deg&size=100px # Bad2 http://kanaloa.ipac.caltech.edu/ibe/data/ptf/dev/process/proc/2010/04/17/f2/c6/p13/v1/PTF_201004173180_i_p_scie_t073759_u011575280_f02_p110002_c06.fits?center=127.403,19.6476deg&size=100px # Good http://kanaloa.ipac.caltech.edu/ibe/data/ptf/dev/process/proc/2010/04/07/f2/c6/p13/v1/PTF_201004071439_i_p_scie_t032714_u011539562_f02_p110002_c06.fits?center=127.403,19.6476deg&size=100px mjd_offset = 54832 lc1 = session.query(LightCurve).filter(LightCurve.objid == 552).one() bad_light_curve = PTFLightCurve.fromDBLightCurve(lc1) light_curves = session.query(LightCurve).filter(func.q3c_radial_query(LightCurve.ra, LightCurve.dec, lc1.ra, lc1.dec,30/3600.)).all() bad_obs1 = 55303.26964 bad_obs2 = 55303.31804 good_obs = 55293.14391 # seeing, airmass, filename, mjd imlist = np.genfromtxt("data/aas_552_imagelist.txt", skiprows=4, usecols=[11,12,20,25], dtype=[("seeing", float), ("airmass", float), ("filename", "|S100"), ("mjd", float)]) idx_sort = np.argsort(imlist["mjd"]) imlist = imlist[idx_sort] print "Bad1:", imlist["filename"][imlist["mjd"] == 55303.26964] print "Bad2:", imlist["filename"][imlist["mjd"] == 55303.31804] print "Good:", imlist["filename"][imlist["mjd"] == 55293.14391] return plt.plot(imlist["mjd"], imlist["seeing"], "r.") plt.show()
def images(self, type=CalibratableImage): candidates = DBSession().query(type).filter( func.q3c_radial_query( type.ra, type.dec, self.ra, self.dec, 0.64)).filter(func.q3c_poly_query(self.ra, self.dec, type.poly)) return candidates.all()
def systematics_9347(): # http://kanaloa.ipac.caltech.edu/ibe/search/ptf/dev/process?POS=129.568,19.6232 # one http://kanaloa.ipac.caltech.edu/ibe/data/ptf/dev/process/proc/2010/05/15/f2/c6/p13/v1/PTF_201005152355_i_p_scie_t053906_u011486277_f02_p110004_c06.fits?center=129.568,19.6232deg&size=150px # two http://kanaloa.ipac.caltech.edu/ibe/data/ptf/dev/process/proc/2010/04/25/f2/c6/p13/v1/PTF_201004251929_i_p_scie_t043750_u011578017_f02_p110004_c06.fits?center=129.568,19.6232deg&size=150px mjd_offset = 54832 lc1 = session.query(LightCurve).filter(LightCurve.objid == 9347).one() bad_light_curve = PTFLightCurve.fromDBLightCurve(lc1) light_curves = session.query(LightCurve).filter(func.q3c_radial_query(LightCurve.ra, LightCurve.dec, lc1.ra, lc1.dec,30/3600.)).all() bad_light_curve.plot() print [x.ra for x in light_curves]
def unphotometered_images(self): subq = DBSession().query( ForcedPhotometry.id, ForcedPhotometry.image_id).filter( ForcedPhotometry.source_id == self.id).subquery() q = DBSession().query(SingleEpochSubtraction).filter( func.q3c_radial_query( SingleEpochSubtraction.ra, SingleEpochSubtraction.dec, self.ra, self.dec, 0.64)).filter( func.q3c_poly_query( self.ra, self.dec, SingleEpochSubtraction.poly)).outerjoin( subq, subq.c.image_id == SingleEpochSubtraction.id ).filter(subq.c.id == None) return q.all()
def systematics_9347(): # http://kanaloa.ipac.caltech.edu/ibe/search/ptf/dev/process?POS=129.568,19.6232 # one http://kanaloa.ipac.caltech.edu/ibe/data/ptf/dev/process/proc/2010/05/15/f2/c6/p13/v1/PTF_201005152355_i_p_scie_t053906_u011486277_f02_p110004_c06.fits?center=129.568,19.6232deg&size=150px # two http://kanaloa.ipac.caltech.edu/ibe/data/ptf/dev/process/proc/2010/04/25/f2/c6/p13/v1/PTF_201004251929_i_p_scie_t043750_u011578017_f02_p110004_c06.fits?center=129.568,19.6232deg&size=150px mjd_offset = 54832 lc1 = session.query(LightCurve).filter(LightCurve.objid == 9347).one() bad_light_curve = PTFLightCurve.fromDBLightCurve(lc1) light_curves = session.query(LightCurve).filter(func.q3c_radial_query(LightCurve.ra, LightCurve.dec, lc1.ra, lc1.dec,30/3600.)).all() bad_light_curve.plot() print [x.ra for x in light_curves] print [x.dec for x in light_curves] print lc1.ra, lc1.dec return
def gwgc_q3c_filters(query, request_args): # return records within astrocone search (API: ?cone=NGC1365,5.0) if request_args.get('astrocone'): try: _nam, _rad = request_args['astrocone'].split(',') _ra, _dec = _get_astropy_coords(_nam.strip().upper()) query = query.filter( func.q3c_radial_query(GwgcQ3cRecord.ra, GwgcQ3cRecord.dec, _ra, _dec, _rad)) except Exception: pass # return records within cone search (API: ?cone=23.5,29.2,5.0) if request_args.get('cone'): try: _ra, _dec, _rad = request_args['cone'].split(',') query = query.filter( func.q3c_radial_query(GwgcQ3cRecord.ra, GwgcQ3cRecord.dec, _ra, _dec, _rad)) except Exception: pass # return records within ellipse search (API: ?ellipse=202.1,47.2,5.0,0.5,25.0) if request_args.get('ellipse'): try: _ra, _dec, _maj, _rat, _pos = request_args['ellipse'].split(',') query = query.filter( func.q3c_ellipse_query(GwgcQ3cRecord.ra, GwgcQ3cRecord.dec, _ra, _dec, _maj, _rat, _pos)) except Exception: pass # return records with major axis >= value (API: ?a__gte=0.3) if request_args.get('a__gte'): query = query.filter(GwgcQ3cRecord.a >= float(request_args['a__gte'])) # return records with major axis <= value (API: ?a__lte=0.3) if request_args.get('a__lte'): query = query.filter(GwgcQ3cRecord.a <= float(request_args['a__lte'])) # return records with absolute B magnitude >= value (API: ?b_abs__gte=15.0) if request_args.get('b_abs__gte'): query = query.filter(GwgcQ3cRecord.b_abs >= request_args['b_abs__gte']) # return records with absolute B magnitude <= value (API: ?b_abs__lte=15.0) if request_args.get('b_abs__lte'): query = query.filter(GwgcQ3cRecord.b_abs <= request_args['b_abs__lte']) # return records with apparent B magnitude >= value (API: ?b_app__gte=15.0) if request_args.get('b_app__gte'): query = query.filter(GwgcQ3cRecord.b_app >= request_args['b_app__gte']) # return records with apparent B magnitude <= value (API: ?b_app__lte=15.0) if request_args.get('b_app__lte'): query = query.filter(GwgcQ3cRecord.b_app <= request_args['b_app__lte']) # return records with minor axis >= value (API: ?b__gte=0.3) if request_args.get('b__gte'): query = query.filter(GwgcQ3cRecord.b >= float(request_args['b__gte'])) # return records with minor axis <= value (API: ?b__lte=0.3) if request_args.get('b__lte'): query = query.filter(GwgcQ3cRecord.b <= float(request_args['b__lte'])) # return records with axis ratio >= value (API: ?b_div_a__gte=0.3) if request_args.get('b_div_a__gte'): query = query.filter( GwgcQ3cRecord.b_div_a >= float(request_args['b_div_a__gte'])) # return records with a axis ratio <= value (API: ?b_div_a__lte=0.3) if request_args.get('b_div_a__lte'): query = query.filter( GwgcQ3cRecord.b_div_a <= float(request_args['b_div_a__lte'])) # return records with an Dec >= value in degrees (API: ?dec__gte=20.0) if request_args.get('dec__gte'): query = query.filter( GwgcQ3cRecord.dec >= float(request_args['dec__gte'])) # return records with an Dec <= value in degrees (API: ?dec__lte=20.0) if request_args.get('dec__lte'): query = query.filter( GwgcQ3cRecord.dec <= float(request_args['dec__lte'])) # return records where the distance to the nearest source >= value (API: ?dist__gte=1.0) if request_args.get('dist__gte'): query = query.filter( GwgcQ3cRecord.dist >= float(request_args['dist__gte'])) # return records where the distance to the nearest source <= value (API: ?dist__lte=1.0) if request_args.get('dist__lte'): query = query.filter( GwgcQ3cRecord.dist <= float(request_args['dist__lte'])) # return records with an error in major axis >= value (API: ?e_a__gte=0.3) if request_args.get('e_a__gte'): query = query.filter( GwgcQ3cRecord.e_a >= float(request_args['e_a__gte'])) # return records with an error in major axis <= value (API: ?e_a__lte=0.3) if request_args.get('e_a__lte'): query = query.filter( GwgcQ3cRecord.e_a <= float(request_args['e_a__lte'])) # return records where the error in the distance to the nearest source >= value (API: ?e_dist__gte=1.0) if request_args.get('e_dist__gte'): query = query.filter( GwgcQ3cRecord.e_dist >= float(request_args['e_dist__gte'])) # return records where the error in the distance to the nearest source <= value (API: ?e_dist__lte=1.0) if request_args.get('e_dist__lte'): query = query.filter( GwgcQ3cRecord.e_dist <= float(request_args['e_dist__lte'])) # return records with error in absolute B magnitude >= value (API: ?e_b_abs__gte=15.0) if request_args.get('e_b_abs__gte'): query = query.filter( GwgcQ3cRecord.e_b_abs >= request_args['e_b_abs__gte']) # return records with error in absolute B magnitude <= value (API: ?e_b_abs__lte=15.0) if request_args.get('e_b_abs__lte'): query = query.filter( GwgcQ3cRecord.e_b_abs <= request_args['e_b_abs__lte']) # return records with error in apparent B magnitude >= value (API: ?e_b_app__gte=15.0) if request_args.get('e_b_app__gte'): query = query.filter( GwgcQ3cRecord.e_b_app >= request_args['e_b_app__gte']) # return records with error in apparent B magnitude <= value (API: ?e_b_app__lte=15.0) if request_args.get('e_b_app__lte'): query = query.filter( GwgcQ3cRecord.e_b_app <= request_args['e_b_app__lte']) # return records with an error in minor axis >= value (API: ?e_b__gte=0.3) if request_args.get('e_b__gte'): query = query.filter( GwgcQ3cRecord.e_b >= float(request_args['e_b__gte'])) # return records with an error in minor axis <= value (API: ?e_b__lte=0.3) if request_args.get('e_b__lte'): query = query.filter( GwgcQ3cRecord.e_b <= float(request_args['e_b__lte'])) # return records with an error in axis ratio >= value (API: ?e_b_div_a__gte=0.3) if request_args.get('e_b_div_a__gte'): query = query.filter( GwgcQ3cRecord.e_b_div_a >= float(request_args['e_b_div_a__gte'])) # return records with an error in minor ratio <= value (API: ?e_b_div_a__lte=0.3) if request_args.get('e_b_div_a__lte'): query = query.filter( GwgcQ3cRecord.e_b_div_a <= float(request_args['e_b_div_a__lte'])) # return records with id = value (API: ?id=20) if request_args.get('id'): query = query.filter(GwgcQ3cRecord.id == int(request_args['id'])) # return records with name = value (API: ?name=20) if request_args.get('name'): query = query.filter(GwgcQ3cRecord.name == request_args['name']) # return records with objectName = value (API: ?objectName=20) if request_args.get('objectName'): query = query.filter(GwgcQ3cRecord.name == request_args['objectName']) # return records with a position angle >= value (API: ?pa__gte=1.0) if request_args.get('pa__gte'): query = query.filter( GwgcQ3cRecord.pa >= float(request_args['pa__gte'])) # return records with a position angle <= value (API: ?pa__lte=1.0) if request_args.get('pa__lte'): query = query.filter( GwgcQ3cRecord.pa <= float(request_args['pa__lte'])) # return records with pgc = value (API: ?pgc=20) if request_args.get('pgc'): query = query.filter(GwgcQ3cRecord.pgc == int(request_args['pgc'])) # return records with an RA >= value in degrees (API: ?ra__gte=12.0) if request_args.get('ra__gte'): query = query.filter( GwgcQ3cRecord.ra >= float(request_args['ra__gte'])) # return records with an RA <= value in degrees (API: ?ra__lte=12.0) if request_args.get('ra__lte'): query = query.filter( GwgcQ3cRecord.ra <= float(request_args['ra__lte'])) # return records with morphological type = value (API: ?tt=1.0) if request_args.get('tt'): query = query.filter(GwgcQ3cRecord.tt == float(request_args['tt'])) # return records with morphological type >= value (API: ?tt__gte=1.0) if request_args.get('tt__gte'): query = query.filter( GwgcQ3cRecord.tt >= float(request_args['tt__gte'])) # return records with morphological type <= value (API: ?tt__lte=1.0) if request_args.get('tt__lte'): query = query.filter( GwgcQ3cRecord.tt <= float(request_args['tt__lte'])) # sort results sort_value = request_args.get('sort_value', SORT_VALUE[0]).lower() sort_order = request_args.get('sort_order', SORT_ORDER[0]).lower() if sort_order in SORT_ORDER: if sort_order.startswith(SORT_ORDER[0]): query = query.order_by(getattr(GwgcQ3cRecord, sort_value).asc()) elif sort_order.startswith(SORT_ORDER[1]): query = query.order_by(getattr(GwgcQ3cRecord, sort_value).desc()) # return query return query
def bad_data_figure(prefix="plots"): matplotlib.rcParams["axes.titlesize"] = 40 matplotlib.rcParams["axes.labelsize"] = 40 matplotlib.rcParams["xtick.labelsize"] = 20 matplotlib.rcParams["ytick.labelsize"] = 20 lightCurve1 = session.query(LightCurve).filter(LightCurve.objid == 14688560553413090141).one() lightCurve2 = session.query(LightCurve).filter(LightCurve.objid == 14688560553413090134).one() print "Distance between objects: {0}\"".format(g.subtends(lightCurve1.ra, lightCurve1.dec, lightCurve2.ra, lightCurve2.dec, units="degrees")*3600.) medMag1 = np.median(lightCurve1.mag) medMag2 = np.median(lightCurve2.mag) fig = plt.figure(figsize=(20,25)) fig.subplots_adjust(hspace=0.2, left=0.1) ax1 = fig.add_subplot(211) ax1.errorbar(lightCurve1.mjd, lightCurve1.mag, lightCurve1.error, ls='none', marker='o', ecolor='0.7', capsize=0) ax2 = fig.add_subplot(212) ax2.errorbar(lightCurve2.mjd, lightCurve2.mag, lightCurve2.error, ls='none', marker='o', ecolor='0.7', capsize=0) ax1.set_ylim(medMag1-0.5,medMag1+0.5) ax1.set_ylim(ax1.get_ylim()[::-1]) ax1.set_xlim(55000, 56000) ax1.set_ylabel(r"$R$") ax1.set_xticklabels([]) ax1.set_title("objid: {0}".format(lightCurve1.objid)) ax2.set_ylim(medMag2-0.5,medMag2+0.5) ax2.set_ylim(ax2.get_ylim()[::-1]) ax2.set_xlim(55000, 56000) ax2.set_ylabel(r"$R$") ax2.set_xlabel("MJD") ax2.set_title("objid: {0}".format(lightCurve2.objid)) plt.savefig(os.path.join(prefix, "bad_data_figure.pdf")) return # Code below is to search for light curves that are similar while True: lightCurve1 = session.query(LightCurve).filter(func.array_length(LightCurve.mjd, 1) > 200).order_by(func.random()).limit(1).one() lightCurve2 = session.query(LightCurve).filter(func.array_length(LightCurve.mjd, 1) > 200).\ filter(func.q3c_radial_query(LightCurve.ra, LightCurve.dec, lightCurve1.ra, lightCurve1.dec, 60./3600.)).\ order_by(func.random()).limit(1).one() medMag1 = np.median(lightCurve1.mag) medMag2 = np.median(lightCurve2.mag) if medMag1 > 17 or medMag2 > 17: continue fig = plt.figure(figsize=(20,25)) fig.subplots_adjust(hspace=0.3, left=0.1) ax1 = fig.add_subplot(211) ax1.errorbar(lightCurve1.mjd, lightCurve1.mag, lightCurve1.error, ls='none', marker='o', ecolor='0.7', capsize=0) ax2 = fig.add_subplot(212) ax2.errorbar(lightCurve2.mjd, lightCurve2.mag, lightCurve2.error, ls='none', marker='o', ecolor='0.7', capsize=0) ax1.set_ylim(medMag1-0.5,medMag1+0.5) ax1.set_ylim(ax1.get_ylim()[::-1]) ax1.set_xlim(55000, 56000) ax1.set_ylabel(r"$R$") ax1.set_xticklabels([]) ax1.set_title("objid: {0}".format(lightCurve1.objid)) ax2.set_ylim(medMag2-0.5,medMag2+0.5) ax2.set_ylim(ax2.get_ylim()[::-1]) ax2.set_xlim(55000, 56000) ax2.set_ylabel(r"$R$") ax2.set_xlabel("MJD") ax2.set_title("objid: {0}".format(lightCurve2.objid)) plt.show()
def glade_q3c_filters(query, request_args): # return records within astrocone search (API: ?cone=M51,25.0) if request_args.get('astrocone'): try: _nam, _rad = request_args['astrocone'].split(',') _ra, _dec = _get_astropy_coords(_nam.strip().upper()) query = query.filter( func.q3c_radial_query(GladeQ3cRecord.ra, GladeQ3cRecord.dec, _ra, _dec, _rad)) except Exception: pass # return records within cone search (API: ?cone=23.5,29.2,5.0) if request_args.get('cone'): # noinspection PyBroadException try: _ra, _dec, _rad = request_args['cone'].split(',') query = query.filter( func.q3c_radial_query(GladeQ3cRecord.ra, GladeQ3cRecord.dec, _ra, _dec, _rad)) except Exception: pass # return records within ellipse search (API: ?ellipse=202.1,47.2,5.0,0.5,25.0) if request_args.get('ellipse'): try: _ra, _dec, _maj, _rat, _pos = request_args['ellipse'].split(',') query = query.filter( func.q3c_ellipse_query(GladeQ3cRecord.ra, GladeQ3cRecord.dec, _ra, _dec, _maj, _rat, _pos)) except Exception: pass # return records with b >= value (API: ?b__gte=12.5) if request_args.get('b__gte'): query = query.filter(GladeQ3cRecord.b >= float(request_args['b__gte'])) # return records with b <= value (API: ?b__lte=12.5) if request_args.get('b__lte'): query = query.filter(GladeQ3cRecord.b <= float(request_args['b__lte'])) # return records with b_abs >= value (API: ?b_abs__gte=12.5) if request_args.get('b_abs__gte'): query = query.filter( GladeQ3cRecord.b_abs >= float(request_args['b_abs__gte'])) # return records with b_abs <= value (API: ?b_abs__lte=12.5) if request_args.get('b_abs__lte'): query = query.filter( GladeQ3cRecord.b_abs <= float(request_args['b_abs__lte'])) # return records with b_err >= value (API: ?b_err__gte=12.5) if request_args.get('b_err__gte'): query = query.filter( GladeQ3cRecord.b_err >= float(request_args['b_err__gte'])) # return records with b_err <= value (API: ?b_err__lte=12.5) if request_args.get('b_err__lte'): query = query.filter( GladeQ3cRecord.b_err <= float(request_args['b_err__lte'])) # return records with dec >= value (API: ?dec__gte=-90.0) if request_args.get('dec__gte'): query = query.filter( GladeQ3cRecord.dec >= float(request_args['dec__gte'])) # return records with dec <= value (API: ?dec__lte=90.0) if request_args.get('dec__lte'): query = query.filter( GladeQ3cRecord.dec <= float(request_args['dec__lte'])) # return records with dist >= value (API: ?dist__gte=0.0) if request_args.get('dist__gte'): query = query.filter( GladeQ3cRecord.dist >= float(request_args['dist__gte'])) # return records with dist <= value (API: ?dist__lte=10.0) if request_args.get('dist__lte'): query = query.filter( GladeQ3cRecord.dist <= float(request_args['dist__lte'])) # return records with disterr >= value (API: ?disterr__gte=0.5) if request_args.get('disterr__gte'): query = query.filter( GladeQ3cRecord.disterr >= float(request_args['disterr__gte'])) # return records with disterr <= value (API: ?disterr__lte=0.5) if request_args.get('disterr__lte'): query = query.filter( GladeQ3cRecord.disterr <= float(request_args['disterr__lte'])) # return records with flag1 like value (API: ?flag1=Q) if request_args.get('flag1'): query = query.filter( GladeQ3cRecord.flag1.ilike(f"%{request_args['flag1']}%")) # return records with flag2 >= value (API: ?flag2__gte=3) if request_args.get('flag2__gte'): query = query.filter( GladeQ3cRecord.flag2 >= int(request_args['flag2__gte'])) # return records with flag2 <= value (API: ?flag2__lte=1) if request_args.get('flag2__lte'): query = query.filter( GladeQ3cRecord.flag2 <= int(request_args['flag2__lte'])) # return records with flag3 >= value (API: ?flag3__gte=3) if request_args.get('flag3__gte'): query = query.filter( GladeQ3cRecord.flag3 >= int(request_args['flag3__gte'])) # return records with flag3 <= value (API: ?flag3__lte=1) if request_args.get('flag3__lte'): query = query.filter( GladeQ3cRecord.flag3 <= int(request_args['flag3__lte'])) # return records with gwgc name like value (API: ?gwgc=demo) if request_args.get('gwgc'): query = query.filter( GladeQ3cRecord.gwgc.ilike(f"%{request_args['gwgc']}%")) # return records with h >= value (API: ?h__gte=12.5) if request_args.get('h__gte'): query = query.filter(GladeQ3cRecord.h >= float(request_args['h__gte'])) # return records with h <= value (API: ?h__lte=12.5) if request_args.get('h__lte'): query = query.filter(GladeQ3cRecord.h <= float(request_args['h__lte'])) # return records with h_err >= value (API: ?h_err__gte=0.5) if request_args.get('h_err__gte'): query = query.filter( GladeQ3cRecord.h_err >= float(request_args['h_err__gte'])) # return records with h_err <= value (API: ?h_err__lte=0.5) if request_args.get('h_err__lte'): query = query.filter( GladeQ3cRecord.h_err <= float(request_args['h_err__lte'])) # return records with hyperleda name like value (API: ?hyperleda=demo) if request_args.get('hyperleda'): query = query.filter( GladeQ3cRecord.hyperleda.ilike(f"%{request_args['hyperleda']}%")) # return records with id = value (API: ?id=20) if request_args.get('id'): query = query.filter(GladeQ3cRecord.id == int(request_args['id'])) # return records with id >= value (API: ?id__gte=20) if request_args.get('id__gte'): query = query.filter(GladeQ3cRecord.id >= int(request_args['id__gte'])) # return records with id <= value (API: ?id__lte=20) if request_args.get('id__lte'): query = query.filter(GladeQ3cRecord.id <= int(request_args['id__lte'])) # return records with j >= value (API: ?j__gte=13.5) if request_args.get('j__gte'): query = query.filter(GladeQ3cRecord.j >= float(request_args['j__gte'])) # return records with j <= value (API: ?j__lte=13.5) if request_args.get('j__lte'): query = query.filter(GladeQ3cRecord.j <= float(request_args['j__lte'])) # return records with j_err >= value (API: ?j_err__gte=0.5) if request_args.get('j_err__gte'): query = query.filter( GladeQ3cRecord.j_err >= float(request_args['j_err__gte'])) # return records with j_err <= value (API: ?j_err__lte=0.5) if request_args.get('j_err__lte'): query = query.filter( GladeQ3cRecord.j_err <= float(request_args['j_err__lte'])) # return records with k >= value (API: ?k__gte=14.5) if request_args.get('k__gte'): query = query.filter(GladeQ3cRecord.k >= float(request_args['k__gte'])) # return records with k <= value (API: ?k__lte=14.5) if request_args.get('k__lte'): query = query.filter(GladeQ3cRecord.k <= float(request_args['k__lte'])) # return records with k_err >= value (API: ?k_err__gte=0.5) if request_args.get('k_err__gte'): query = query.filter( GladeQ3cRecord.k_err >= float(request_args['k_err__gte'])) # return records with k_err <= value (API: ?k_err__lte=0.5) if request_args.get('k_err__lte'): query = query.filter( GladeQ3cRecord.k_err <= float(request_args['k_err__lte'])) # return records with id = value (API: ?pgc=20) if request_args.get('pgc'): query = query.filter(GladeQ3cRecord.pgc == int(request_args['pgc'])) # return records with pgc >= value (API: ?pgc__gte=20) if request_args.get('pgc__gte'): query = query.filter( GladeQ3cRecord.pgc >= int(request_args['pgc__gte'])) # return records with pgc <= value (API: ?pgc__lte=20) if request_args.get('pgc__lte'): query = query.filter( GladeQ3cRecord.pgc <= int(request_args['pgc__lte'])) # return records with ra >= value (API: ?ra__gte=0.0) if request_args.get('ra__gte'): query = query.filter( GladeQ3cRecord.ra >= float(request_args['ra__gte'])) # return records with ra <= value (API: ?ra__lte=360.0) if request_args.get('ra__lte'): query = query.filter( GladeQ3cRecord.ra <= float(request_args['ra__lte'])) # return records with sdss name like value (API: ?sdss=demo) if request_args.get('sdss'): query = query.filter( GladeQ3cRecord.sdss.ilike(f"%{request_args['sdss']}%")) # return records with twomass name like value (API: ?twomass=demo) if request_args.get('twomass'): query = query.filter( GladeQ3cRecord.twomass.ilike(f"%{request_args['twomass']}%")) # return records with z >= value (API: ?z__gte=0.5) if request_args.get('z__gte'): query = query.filter(GladeQ3cRecord.z >= float(request_args['z__gte'])) # return records with z >= value (API: ?z__lte=3.5) if request_args.get('z__lte'): query = query.filter(GladeQ3cRecord.z <= float(request_args['z__lte'])) # sort results sort_value = request_args.get('sort_value', SORT_VALUE[0]).lower() sort_order = request_args.get('sort_order', SORT_ORDER[0]).lower() if sort_order in SORT_ORDER: if sort_order.startswith(SORT_ORDER[0]): query = query.order_by(getattr(GladeQ3cRecord, sort_value).asc()) elif sort_order.startswith(SORT_ORDER[1]): query = query.order_by(getattr(GladeQ3cRecord, sort_value).desc()) # return query return query
def coord_cone_search_clause(ra, dec, radius): cone_search = func.q3c_radial_query( Coord.ra, Coord.dec, ra, dec, radius ) return cone_search
def ligo_q3c_filters(query, request_args): # return records within astrocone search (API: ?cone=M51,25.0) if request_args.get('astrocone'): try: _nam, _rad = request_args['astrocone'].split(',') _ra, _dec = _get_astropy_coords(_nam.strip().upper()) query = query.filter( func.q3c_radial_query(LigoQ3cRecord.ra, LigoQ3cRecord.dec, _ra, _dec, _rad)) except Exception: pass # return records within cone search (API: ?cone=23.5,29.2,5.0) if request_args.get('cone'): try: _ra, _dec, _rad = request_args['cone'].split(',') query = query.filter( func.q3c_radial_query(LigoQ3cRecord.ra, LigoQ3cRecord.dec, _ra, _dec, _rad)) except Exception: pass # return records within ellipse search (API: ?ellipse=202.1,47.2,5.0,0.5,25.0) if request_args.get('ellipse'): try: _ra, _dec, _maj, _rat, _pos = request_args['ellipse'].split(',') query = query.filter( func.q3c_ellipse_query(LigoQ3cRecord.ra, LigoQ3cRecord.dec, _ra, _dec, _maj, _rat, _pos)) except Exception: pass # return records with before = boolean (API: ?before=True) if request_args.get('before'): query = query.filter(LigoQ3cRecord.before == request_args.get( 'before').lower() in TRUE_VALUES) # return records with an dec >= value in degrees (API: ?dec__gte=20.0) if request_args.get('dec__gte'): query = query.filter( LigoQ3cRecord.dec >= float(request_args['dec__gte'])) # return records with an dec <= value in degrees (API: ?dec__lte=20.0) if request_args.get('dec__lte'): query = query.filter( LigoQ3cRecord.dec <= float(request_args['dec__lte'])) # return records with discovery_date like value (API: ?discovery_date=2019-07-15) if request_args.get('discovery_date'): _date = datetime.strptime(request_args['discovery_date'], '%Y-%m-%d') query = query.filter(LigoQ3cRecord.discovery_date >= _date) # return records with discovery_mag >= value (API: ?discovery_mag__gte=15.0) if request_args.get('discovery_mag__gte'): query = query.filter( LigoQ3cRecord.discovery_mag >= request_args['discovery_mag__gte']) # return records with discovery_mag <= value (API: ?discovery_mag__lte=15.0) if request_args.get('discovery_mag__lte'): query = query.filter( LigoQ3cRecord.discovery_mag <= request_args['discovery_mag__lte']) # return records with filter_name like value (API: ?filter_name=U) if request_args.get('filter_name'): query = query.filter( LigoQ3cRecord.filter_name.ilike( f"%{request_args['filter_name']}%")) # return records with gw_aka like value (API: ?gw_aka=GW20190817_051234) if request_args.get('gw_aka'): query = query.filter( LigoQ3cRecord.gw_aka.ilike(f"%{request_args['gw_aka']}%")) # return records with gw_date like value (API: ?gw_date=2019-07-15) if request_args.get('gw_date'): _date = datetime.strptime(request_args['gw_date'], '%Y-%m-%d') query = query.filter(LigoQ3cRecord.discovery_date >= _date) # return records with gw_event like value (API: ?gw_event=G339873) if request_args.get('gw_event'): query = query.filter( LigoQ3cRecord.gw_event.ilike(f"%{request_args['gw_event']}%")) # return records with id = value (API: ?id=20) if request_args.get('id'): query = query.filter(LigoQ3cRecord.id == int(request_args['id'])) # return records with id >= value (API: ?id__gte=20) if request_args.get('id__gte'): query = query.filter(LigoQ3cRecord.id >= int(request_args['id__gte'])) # return records with id <= value (API: ?id__lte=20) if request_args.get('id__lte'): query = query.filter(LigoQ3cRecord.id <= int(request_args['id__lte'])) # return records with name like value (API: ?name=2019xyz) if request_args.get('name'): query = query.filter( LigoQ3cRecord.name.ilike(f"%{request_args['name']}%")) # return records with name_prefix like value (API: ?name_prefix=SN) if request_args.get('name_prefix'): query = query.filter( LigoQ3cRecord.name_prefix.ilike( f"%{request_args['name_prefix']}%")) # return records with name_suffix like value (API: ?name_suffix=xyz) if request_args.get('name_suffix'): query = query.filter( LigoQ3cRecord.name_suffix.ilike( f"%{request_args['name_suffix']}%")) # return records with a probability >= value (API: ?probability__gte=0.0) if request_args.get('probability__gte'): query = query.filter(LigoQ3cRecord.probability >= float( request_args['probability__gte'])) # return records with a position angle <= value (API: ?probability__lte=1.0) if request_args.get('probability__lte'): query = query.filter(LigoQ3cRecord.probability <= float( request_args['probability__lte'])) # return records with an ra >= value in degrees (API: ?ra__gte=12.0) if request_args.get('ra__gte'): query = query.filter( LigoQ3cRecord.ra >= float(request_args['ra__gte'])) # return records with an ra <= value in degrees (API: ?ra__lte=12.0) if request_args.get('ra__lte'): query = query.filter( LigoQ3cRecord.ra <= float(request_args['ra__lte'])) # return records with an sigma >= value in degrees (API: ?sigma__gte=12.0) if request_args.get('sigma__gte'): query = query.filter( LigoQ3cRecord.sigma >= float(request_args['sigma__gte'])) # return records with an sigma <= value in degrees (API: ?sigma__lte=12.0) if request_args.get('sigma__lte'): query = query.filter( LigoQ3cRecord.sigma <= float(request_args['sigma__lte'])) # return records with source_group like value (API: ?source_group=ZTF) if request_args.get('source_group'): query = query.filter( LigoQ3cRecord.source_group.ilike( f"%{request_args['source_group']}%")) # return records with transient_type like value (API: ?transient_type=ZTF) if request_args.get('transient_type'): query = query.filter( LigoQ3cRecord.transient_type.ilike( f"%{request_args['transient_type']}%")) # sort results sort_value = request_args.get('sort_value', SORT_VALUE[0]).lower() sort_order = request_args.get('sort_order', SORT_ORDER[0]).lower() if sort_order in SORT_ORDER: if sort_order.startswith(SORT_ORDER[0]): query = query.order_by(getattr(LigoQ3cRecord, sort_value).asc()) elif sort_order.startswith(SORT_ORDER[1]): query = query.order_by(getattr(LigoQ3cRecord, sort_value).desc()) # return query return query
def bad_data_figure(prefix="plots"): matplotlib.rcParams["axes.titlesize"] = 40 matplotlib.rcParams["axes.labelsize"] = 40 matplotlib.rcParams["xtick.labelsize"] = 20 matplotlib.rcParams["ytick.labelsize"] = 20 lightCurve1 = session.query(LightCurve).filter( LightCurve.objid == 14688560553413090141).one() lightCurve2 = session.query(LightCurve).filter( LightCurve.objid == 14688560553413090134).one() print "Distance between objects: {0}\"".format( g.subtends(lightCurve1.ra, lightCurve1.dec, lightCurve2.ra, lightCurve2.dec, units="degrees") * 3600.) medMag1 = np.median(lightCurve1.mag) medMag2 = np.median(lightCurve2.mag) fig = plt.figure(figsize=(20, 25)) fig.subplots_adjust(hspace=0.2, left=0.1) ax1 = fig.add_subplot(211) ax1.errorbar(lightCurve1.mjd, lightCurve1.mag, lightCurve1.error, ls='none', marker='o', ecolor='0.7', capsize=0) ax2 = fig.add_subplot(212) ax2.errorbar(lightCurve2.mjd, lightCurve2.mag, lightCurve2.error, ls='none', marker='o', ecolor='0.7', capsize=0) ax1.set_ylim(medMag1 - 0.5, medMag1 + 0.5) ax1.set_ylim(ax1.get_ylim()[::-1]) ax1.set_xlim(55000, 56000) ax1.set_ylabel(r"$R$") ax1.set_xticklabels([]) ax1.set_title("objid: {0}".format(lightCurve1.objid)) ax2.set_ylim(medMag2 - 0.5, medMag2 + 0.5) ax2.set_ylim(ax2.get_ylim()[::-1]) ax2.set_xlim(55000, 56000) ax2.set_ylabel(r"$R$") ax2.set_xlabel("MJD") ax2.set_title("objid: {0}".format(lightCurve2.objid)) plt.savefig(os.path.join(prefix, "bad_data_figure.pdf")) return # Code below is to search for light curves that are similar while True: lightCurve1 = session.query(LightCurve).filter( func.array_length(LightCurve.mjd, 1) > 200).order_by( func.random()).limit(1).one() lightCurve2 = session.query(LightCurve).filter(func.array_length(LightCurve.mjd, 1) > 200).\ filter(func.q3c_radial_query(LightCurve.ra, LightCurve.dec, lightCurve1.ra, lightCurve1.dec, 60./3600.)).\ order_by(func.random()).limit(1).one() medMag1 = np.median(lightCurve1.mag) medMag2 = np.median(lightCurve2.mag) if medMag1 > 17 or medMag2 > 17: continue fig = plt.figure(figsize=(20, 25)) fig.subplots_adjust(hspace=0.3, left=0.1) ax1 = fig.add_subplot(211) ax1.errorbar(lightCurve1.mjd, lightCurve1.mag, lightCurve1.error, ls='none', marker='o', ecolor='0.7', capsize=0) ax2 = fig.add_subplot(212) ax2.errorbar(lightCurve2.mjd, lightCurve2.mag, lightCurve2.error, ls='none', marker='o', ecolor='0.7', capsize=0) ax1.set_ylim(medMag1 - 0.5, medMag1 + 0.5) ax1.set_ylim(ax1.get_ylim()[::-1]) ax1.set_xlim(55000, 56000) ax1.set_ylabel(r"$R$") ax1.set_xticklabels([]) ax1.set_title("objid: {0}".format(lightCurve1.objid)) ax2.set_ylim(medMag2 - 0.5, medMag2 + 0.5) ax2.set_ylim(ax2.get_ylim()[::-1]) ax2.set_xlim(55000, 56000) ax2.set_ylabel(r"$R$") ax2.set_xlabel("MJD") ax2.set_title("objid: {0}".format(lightCurve2.objid)) plt.show()
def tns_q3c_filters(query, request_args): # return records within astrocone search (API: ?cone=M51,25.0) if request_args.get('astrocone'): try: _nam, _rad = request_args['astrocone'].split(',') _ra, _dec = _get_astropy_coords(_nam.strip().upper()) query = query.filter( func.q3c_radial_query(TnsQ3cRecord.ra, TnsQ3cRecord.dec, _ra, _dec, _rad)) except Exception: pass # return records within cone search (API: ?cone=23.5,29.2,5.0) if request_args.get('cone'): try: _ra, _dec, _rad = request_args['cone'].split(',') query = query.filter( func.q3c_radial_query(TnsQ3cRecord.ra, TnsQ3cRecord.dec, _ra, _dec, _rad)) except Exception: pass # return records within ellipse search (API: ?ellipse=202.1,47.2,5.0,0.5,25.0) if request_args.get('ellipse'): try: _ra, _dec, _maj, _rat, _pos = request_args['ellipse'].split(',') query = query.filter( func.q3c_ellipse_query(TnsQ3cRecord.ra, TnsQ3cRecord.dec, _ra, _dec, _maj, _rat, _pos)) except Exception: pass # return records with alias like value (API: ?alias=GW20190817_051234) if request_args.get('alias'): query = query.filter( TnsQ3cRecord.alias.ilike(f"%{request_args['alias']}%")) # return records with an dec >= value in degrees (API: ?dec__gte=20.0) if request_args.get('dec__gte'): query = query.filter( TnsQ3cRecord.dec >= float(request_args['dec__gte'])) # return records with an dec <= value in degrees (API: ?dec__lte=20.0) if request_args.get('dec__lte'): query = query.filter( TnsQ3cRecord.dec <= float(request_args['dec__lte'])) # return records with discovery_date like value (API: ?discovery_date=2019-07-15) if request_args.get('discovery_date'): _date = datetime.strptime(request_args['discovery_date'], '%Y-%m-%d') query = query.filter(TnsQ3cRecord.discovery_date >= _date) # return records with discovery_instrument like value (API: ?discovery_instrument=ATLAS) if request_args.get('discovery_instrument'): query = query.filter( TnsQ3cRecord.discovery_instrument.ilike( f"%{request_args['discovery_instrument']}%")) # return records with discovery_mag >= value (API: ?discovery_mag__gte=15.0) if request_args.get('discovery_mag__gte'): query = query.filter( TnsQ3cRecord.discovery_mag >= request_args['discovery_mag__gte']) # return records with discovery_mag <= value (API: ?discovery_mag__lte=15.0) if request_args.get('discovery_mag__lte'): query = query.filter( TnsQ3cRecord.discovery_mag <= request_args['discovery_mag__lte']) # return records with filter_name like value (API: ?filter_name=U) if request_args.get('filter_name'): query = query.filter( TnsQ3cRecord.filter_name.ilike(f"%{request_args['filter_name']}%")) # return records with host like value (API: ?host=NGC1365) if request_args.get('host'): query = query.filter( TnsQ3cRecord.host.ilike(f"%{request_args['host']}%")) # return records with host_z >= value (API: ?host_z=1.0) if request_args.get('host_z__gte'): query = query.filter( TnsQ3cRecord.host_z >= request_args['host_z__gte']) # return records with host_z <= value (API: ?host_z=1.0) if request_args.get('host_z__lte'): query = query.filter( TnsQ3cRecord.host_z <= request_args['host_z__lte']) # return records with id = value (API: ?id=20) if request_args.get('id'): query = query.filter(TnsQ3cRecord.id == int(request_args['id'])) # return records with id >= value (API: ?id__gte=20) if request_args.get('id__gte'): query = query.filter(TnsQ3cRecord.id >= int(request_args['id__gte'])) # return records with id <= value (API: ?id__lte=20) if request_args.get('id__lte'): query = query.filter(TnsQ3cRecord.id <= int(request_args['id__lte'])) # return records with an ra >= value in degrees (API: ?ra__gte=12.0) if request_args.get('ra__gte'): query = query.filter(TnsQ3cRecord.ra >= float(request_args['ra__gte'])) # return records with an ra <= value in degrees (API: ?ra__lte=12.0) if request_args.get('ra__lte'): query = query.filter(TnsQ3cRecord.ra <= float(request_args['ra__lte'])) # return records with an redshift >= value in degrees (API: ?redshift__gte=1.0) if request_args.get('redshift__gte'): query = query.filter( TnsQ3cRecord.redshift >= float(request_args['redshift__gte'])) # return records with an redshift <= value in degrees (API: ?redshift__lte=1.0) if request_args.get('redshift__lte'): query = query.filter( TnsQ3cRecord.redshift <= float(request_args['redshift__lte'])) # return records with source_group like value (API: ?source_group=ZTF) if request_args.get('source_group'): query = query.filter( TnsQ3cRecord.source_group.ilike( f"%{request_args['source_group']}%")) # return records with tns_class like value (API: ?tns_class=ZTF) if request_args.get('tns_class'): query = query.filter( TnsQ3cRecord.tns_class.ilike(f"%{request_args['tns_class']}%")) # return records with tns_id = value (API: ?tns_id=20) if request_args.get('tns_id'): query = query.filter( TnsQ3cRecord.tns_id == int(request_args['tns_id'])) # return records with tns_id >= value (API: ?tns_id__gte=20) if request_args.get('tns_id__gte'): query = query.filter( TnsQ3cRecord.tns_id >= int(request_args['tns_id__gte'])) # return records with tns_id <= value (API: ?tns_id__lte=20) if request_args.get('tns_id__lte'): query = query.filter( TnsQ3cRecord.tns_id <= int(request_args['tns_id__lte'])) # return records with tns_link like value (API: ?tns_link=2019xyz) if request_args.get('tns_link'): query = query.filter( TnsQ3cRecord.tns_link.ilike(f"%{request_args['tns_link']}%")) # return records with tns_name like value (API: ?tns_name=2019xyz) if request_args.get('tns_name'): query = query.filter( TnsQ3cRecord.tns_name.ilike(f"%{request_args['tns_name']}%")) # sort results sort_value = request_args.get('sort_value', SORT_VALUE[0]).lower() sort_order = request_args.get('sort_order', SORT_ORDER[0]).lower() if sort_order in SORT_ORDER: if sort_order.startswith(SORT_ORDER[0]): query = query.order_by(getattr(TnsQ3cRecord, sort_value).asc()) elif sort_order.startswith(SORT_ORDER[1]): query = query.order_by(getattr(TnsQ3cRecord, sort_value).desc()) # return query return query
def obsreq_filters(query=None, request_args=None): # check input(s) if query is None or not isinstance(query, sqlalchemy.orm.query.Query): raise Exception(f'invalid input, query={query}') if request_args is None or not isinstance(request_args, dict) or request_args is {}: raise Exception(f'invalid input, request_args={request_args}') # obsreq records with id = value (API: ?id=20) if request_args.get('id'): query = query.filter(ObsReq.id == int(request_args['id'])) # obsreq records with id <= value (API: ?id__lte=20) if request_args.get('id__lte'): query = query.filter(ObsReq.id <= int(request_args['id__lte'])) # obsreq records with id >= value (API: ?id__gte=20) if request_args.get('id__gte'): query = query.filter(ObsReq.id >= int(request_args['id__gte'])) # obsreq records with username like value (API: ?username=demo) if request_args.get('username'): query = query.filter(ObsReq.username.ilike(f"%{request_args['username']}%")) # obsreq records with username not like value (API: ?exclude_username=demo) if request_args.get('exclude_username'): query = query.filter(not_(ObsReq.username.ilike(f"%{request_args['exclude_username']}%"))) # obsreq records with pi like value (API: ?pi=demo) if request_args.get('pi'): query = query.filter(ObsReq.pi.ilike(f"%{request_args['pi']}%")) # obsreq records with a created_iso >= date (API: ?created_iso__gte=2018-07-17) if request_args.get('created_iso__gte'): a_time = Time(request_args['created_iso__gte'], format='isot') query = query.filter(ObsReq.created_mjd >= float(a_time.mjd)) # obsreq records with a created_iso <= date (API: ?created_iso__lte=2018-07-17) if request_args.get('created_iso__lte'): a_time = Time(request_args['created_iso__lte'], format='isot') query = query.filter(ObsReq.created_mjd <= float(a_time.mjd)) # obsreq records with created_mjd >= value (API: ?created_mjd__gte=58526.54609935184998903) if request_args.get('created_mjd__gte'): query = query.filter(ObsReq.created_mjd >= float(request_args['created_mjd__gte'])) # obsreq records with created_mjd <= value (API: ?created_mjd__lte=58526.54609935184998903) if request_args.get('created_mjd__lte'): query = query.filter(ObsReq.created_mjd <= float(request_args['created_mjd__lte'])) # obsreq records with group_id like value (API: ?group_id=abcd) if request_args.get('group_id'): query = query.filter(ObsReq.group_id.ilike(f"%{request_args['group_id']}%")) # obsreq records with observation_id like value (API: ?observation_id=abcd) if request_args.get('observation_id'): query = query.filter(ObsReq.observation_id.ilike(f"%{request_args['observation_id']}%")) # obsreq records with priority like value (API: ?priority=Routine) if request_args.get('priority'): query = query.filter(ObsReq.priority.ilike(f"%{request_args['priority']}%")) # obsreq records with priority_value >= value (API: ?priority_value__gte=58526.54609935184998903) if request_args.get('priority_value__gte'): query = query.filter(ObsReq.priority_value >= float(request_args['priority_value__gte'])) # obsreq records with priority_value <= value (API: ?priority_value__lte=58526.54609935184998903) if request_args.get('priority_value__lte'): query = query.filter(ObsReq.priority_value <= float(request_args['priority_value__lte'])) # obsreq records with object_name like value (API: ?object_name=abcd) if request_args.get('object_name'): query = query.filter(ObsReq.object_name.ilike(f"%{request_args['object_name']}%")) # obsreq records with ra_hms like value (API: ?ra_hms=12:12:12) if request_args.get('ra_hms'): query = query.filter(ObsReq.ra_hms.ilike(f"%{request_args['ra_hms']}%")) # obsreq records with ra_deg >= value (API: ?ra_deg__gte=58526.54609935184998903) if request_args.get('ra_deg__gte'): query = query.filter(ObsReq.ra_deg >= float(request_args['ra_deg__gte'])) # obsreq records with ra_deg <= value (API: ?ra_deg__lte=58526.54609935184998903) if request_args.get('ra_deg__lte'): query = query.filter(ObsReq.ra_deg <= float(request_args['ra_deg__lte'])) # obsreq records with dec_dms like value (API: ?dec_dms=30:30:30) if request_args.get('dec_dms'): query = query.filter(ObsReq.dec_dms.ilike(f"%{request_args['dec_dms']}%")) # obsreq records with dec_deg >= value (API: ?dec_deg__gte=58526.54609935184998903) if request_args.get('dec_deg__gte'): query = query.filter(ObsReq.dec_deg >= float(request_args['dec_deg__gte'])) # obsreq records with dec_deg >= value (API: ?dec_deg__lte=58526.54609935184998903) if request_args.get('dec_deg__lte'): query = query.filter(ObsReq.dec_deg <= float(request_args['dec_deg__lte'])) # obsreq records with a begin_iso >= date (API: ?begin_iso__gte=2018-07-17) if request_args.get('begin_iso__gte'): a_time = Time(request_args['begin_iso__gte'], format='isot') query = query.filter(ObsReq.begin_mjd >= float(a_time.mjd)) # obsreq records with a begin_iso <= date (API: ?begin_iso__lte=2018-07-17) if request_args.get('begin_iso__lte'): a_time = Time(request_args['begin_iso__lte'], format='isot') query = query.filter(ObsReq.begin_mjd <= float(a_time.mjd)) # obsreq records with begin_mjd >= value (API: ?begin_mjd__gte=58526.54609935184998903) if request_args.get('begin_mjd__gte'): query = query.filter(ObsReq.begin_mjd >= float(request_args['begin_mjd__gte'])) # obsreq records with begin_mjd <= value (API: ?begin_mjd__lte=58526.54609935184998903) if request_args.get('begin_mjd__lte'): query = query.filter(ObsReq.begin_mjd <= float(request_args['begin_mjd__lte'])) # obsreq records with a end_iso >= date (API: ?end_iso__gte=2018-07-17) if request_args.get('end_iso__gte'): a_time = Time(request_args['end_iso__gte'], format='isot') query = query.filter(ObsReq.end_mjd >= float(a_time.mjd)) # obsreq records with a end_iso <= date (API: ?end_iso__lte=2018-07-17) if request_args.get('end_iso__lte'): a_time = Time(request_args['end_iso__lte'], format='isot') query = query.filter(ObsReq.end_mjd <= float(a_time.mjd)) # obsreq records with end_mjd >= value (API: ?end_mjd__gte=58526.54609935184998903) if request_args.get('end_mjd__gte'): query = query.filter(ObsReq.end_mjd >= float(request_args['end_mjd__gte'])) # obsreq records with end_mjd <= value (API: ?end_mjd__lte=58526.54609935184998903) if request_args.get('end_mjd__lte'): query = query.filter(ObsReq.end_mjd <= float(request_args['end_mjd__lte'])) # obsreq records with airmass >= value (API: ?airmass__gte=58526.54609935184998903) if request_args.get('airmass__gte'): query = query.filter(ObsReq.airmass >= float(request_args['airmass__gte'])) # obsreq records with airmass <= value (API: ?airmass__lte=58526.54609935184998903) if request_args.get('airmass__lte'): query = query.filter(ObsReq.airmass <= float(request_args['airmass__lte'])) # obsreq records with lunarphase like value (API: ?lunarphase=Dark) if request_args.get('lunarphase'): query = query.filter(ObsReq.lunarphase.ilike(f"%{request_args['lunarphase']}%")) # obsreq records with moonphase >= value (API: ?moonphase__gte=58526.54609935184998903) if request_args.get('moonphase__gte'): query = query.filter(ObsReq.moonphase >= float(request_args['moonphase__gte'])) # obsreq records with moonphase <= value (API: ?moonphase__lte=58526.54609935184998903) if request_args.get('moonphase__lte'): query = query.filter(ObsReq.moonphase <= float(request_args['moonphase__lte'])) # obsreq records with photometric = boolean (API: ?photometric=True) if request_args.get('photometric'): query = query.filter(ObsReq.photometric == request_args.get('photometric').lower() in OBS_TRUE_VALUES) # obsreq records with guiding = boolean (API: ?guiding=True) if request_args.get('guiding'): query = query.filter(ObsReq.guiding == request_args.get('guiding').lower() in OBS_TRUE_VALUES) # obsreq records with non_sidereal = boolean (API: ?non_sidereal=True) if request_args.get('non_sidereal'): query = query.filter(ObsReq.non_sidereal == request_args.get('non_sidereal').lower() in OBS_TRUE_VALUES) # obsreq records with filter_name like value (API: ?filter=V) if request_args.get('filter_name'): query = query.filter(ObsReq.filter_name.ilike(f"%{request_args['filter_name']}%")) # obsreq records with exp_time >= value (API: ?exp_time__gte=58526.54609935184998903) if request_args.get('exp_time__gte'): query = query.filter(ObsReq.exp_time >= float(request_args['exp_time__gte'])) # obsreq records with exp_time <= value (API: ?exp_time__lte=58526.54609935184998903) if request_args.get('exp_time__lte'): query = query.filter(ObsReq.exp_time <= float(request_args['exp_time__lte'])) # obsreq records with num_exp >= value (API: ?num_exp__gte=20) if request_args.get('num_exp__gte'): query = query.filter(ObsReq.num_exp >= int(request_args['num_exp__gte'])) # obsreq records with num_exp <= value (API: ?num_exp__lte=20) if request_args.get('num_exp__lte'): query = query.filter(ObsReq.num_exp <= int(request_args['num_exp__lte'])) # obsreq records with binning like value (API: ?binning=1x1) if request_args.get('binning'): query = query.filter(ObsReq.binning.ilike(f"%{request_args['binning']}%")) # obsreq records with dither like value (API: ?dither=1x1) if request_args.get('dither'): query = query.filter(ObsReq.dither.ilike(f"%{request_args['dither']}%")) # obsreq records with cadence like value (API: ?cadence=Once) if request_args.get('cadence'): query = query.filter(ObsReq.cadence.ilike(f"%{request_args['cadence']}%")) # obsreq records with telescope like value (API: ?telescope=Kuiper) if request_args.get('telescope'): query = query.filter(ObsReq.telescope.ilike(f"%{request_args['telescope']}%")) # obsreq records with instrument like value (API: ?instrument=Mont4k) if request_args.get('instrument'): query = query.filter(ObsReq.instrument.ilike(f"%{request_args['instrument']}%")) # obsreq records with queued = boolean (API: ?queued=True) if request_args.get('queued'): query = query.filter(ObsReq.queued == request_args.get('queued').lower() in OBS_TRUE_VALUES) # obsreq records with a queued_iso >= date (API: ?queued_iso__gte=2018-07-17) if request_args.get('queued_iso__gte'): a_time = Time(request_args['queued_iso__gte'], format='isot') query = query.filter(ObsReq.queued_mjd >= float(a_time.mjd)) # obsreq records with a queued_iso <= date (API: ?queued_iso__lte=2018-07-17) if request_args.get('queued_iso__lte'): a_time = Time(request_args['queued_iso__lte'], format='isot') query = query.filter(ObsReq.queued_mjd <= float(a_time.mjd)) # obsreq records with queued_mjd >= value (API: ?queued_mjd__gte=58526.54609935184998903) if request_args.get('queued_mjd__gte'): query = query.filter(ObsReq.queued_mjd >= float(request_args['queued_mjd__gte'])) # obsreq records with queued_mjd <= value (API: ?queued_mjd__lte=58526.54609935184998903) if request_args.get('queued_mjd__lte'): query = query.filter(ObsReq.queued_mjd <= float(request_args['queued_mjd__lte'])) # obsreq records with completed = boolean (API: ?completed=True) if request_args.get('completed'): query = query.filter(ObsReq.completed == request_args.get('completed').lower() in OBS_TRUE_VALUES) # obsreq records with a completed_iso >= date (API: ?completed_iso__gte=2018-07-17) if request_args.get('completed_iso__gte'): a_time = Time(request_args['completed_iso__gte'], format='isot') query = query.filter(ObsReq.completed_mjd >= float(a_time.mjd)) # obsreq records with a completed_iso <= date (API: ?completed_iso__lte=2018-07-17) if request_args.get('completed_iso__lte'): a_time = Time(request_args['completed_iso__lte'], format='isot') query = query.filter(ObsReq.completed_mjd <= float(a_time.mjd)) # obsreq records with completed_mjd >= value (API: ?completed_mjd__gte=58526.54609935184998903) if request_args.get('completed_mjd__gte'): query = query.filter(ObsReq.completed_mjd >= float(request_args['completed_mjd__gte'])) # obsreq records with completed_mjd <= value (API: ?completed_mjd__lte=58526.54609935184998903) if request_args.get('completed_mjd__lte'): query = query.filter(ObsReq.completed_mjd <= float(request_args['completed_mjd__lte'])) # obsreq records with rts2_doc__key (API: ?rts2_doc__key=obs_info) if request_args.get('rts2_doc__key'): query = query.filter(ObsReq.rts2_doc[f"{request_args['rts2_doc__key']}"].astext != '') # obsreq records with rts2_id = value (API: ?rts2_id=20) if request_args.get('rts2_id'): query = query.filter(ObsReq.rts2_id == int(request_args['rts2_id'])) # obsreq records with rts2_id <= value (API: ?rts2_id__lte=20) if request_args.get('rts2_id__lte'): query = query.filter(ObsReq.rts2_id <= int(request_args['rts2_id__lte'])) # obsreq records with rts2_id >= value (API: ?rts2_id__gte=20) if request_args.get('rts2_id__gte'): query = query.filter(ObsReq.rts2_id >= int(request_args['rts2_id__gte'])) # obsreq records with non_sidereal__key (API: ?non_sidereal__key=RA_BiasRate) if request_args.get('non_sidereal__key'): query = query.filter(ObsReq.non_sidereal_json[f"{request_args['non_sidereal__key']}"].astext != '') # obsreq records with user_id = value (API: ?user_id=20) if request_args.get('user_id'): query = query.filter(ObsReq.user_id == int(request_args['user_id'])) # obsreq records with user_id <= value (API: ?user_id__lte=20) if request_args.get('user_id__lte'): query = query.filter(ObsReq.user_id <= int(request_args['user_id__lte'])) # obsreq records with user_id >= value (API: ?user_id__gte=20) if request_args.get('user_id__gte'): query = query.filter(ObsReq.user_id >= int(request_args['user_id__gte'])) # return records with astronomical cone search (API: ?astro=M51,25.0) if request_args.get('astro'): try: _nam, _rad = request_args['astro'].split(',') _ra, _dec = get_astropy_coords(_nam.strip().upper()) query = query.filter(func.q3c_radial_query(ObsReq.ra_deg, ObsReq.dec_deg, _ra, _dec, float(_rad))) except Exception: pass # return records with cone search (API: ?cone=23.5,29.2,5.0) if request_args.get('cone'): try: _ra, _dec, _rad = map(float, request_args['cone'].split(',')) query = query.filter(func.q3c_radial_query(ObsReq.ra_deg, ObsReq.dec_deg, _ra, _dec, _rad)) except Exception: pass # return records with elliptical cone search (API: ?ellipse=202.1,47.2,5.0,0.5,25.0) if request_args.get('ellipse'): try: _ra, _dec, _maj, _rat, _pos = map(float, request_args['ellipse'].split(',')) query = query.filter( func.q3c_ellipse_query(ObsReq.ra_deg, ObsReq.dec_deg, _ra, _dec, _maj, _rat, _pos)) except Exception: pass # sort results if request_args.get('sort_field') and request_args.get('sort_order'): if request_args['sort_order'].lower() == 'descending': query = query.order_by(getattr(ObsReq, request_args['sort_field']).desc()) else: query = query.order_by(getattr(ObsReq, request_args['sort_field']).asc()) # return query return query