Exemplo n.º 1
0
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()
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
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]
Exemplo n.º 4
0
    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()
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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()
Exemplo n.º 8
0
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
Exemplo n.º 9
0
def coord_cone_search_clause(ra, dec, radius):
    cone_search = func.q3c_radial_query(
                Coord.ra, Coord.dec,
                ra, dec, radius
            )
    return cone_search
Exemplo n.º 10
0
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
Exemplo n.º 11
0
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()
Exemplo n.º 12
0
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
Exemplo n.º 13
0
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