예제 #1
0
    def APASS_get_calib(self, rad_min = 5):
        '''
        adapted from code originally written by K. Zhang

        Parameters
        ----------
        rad_min (optional, int or float) : search radius in decimal arcminutes

        Output
        ------
        file : writes processed calibration file and sets member variables
        '''

        if not apass:
            print('APASS not supported due to missing package')
            return

        # connect to APASS database
        connection = connect()
        db = AstroSQL(connection)
        table = db.get_table('apass')

        # search and format results
        dict_lst = db.get_by_radec(table, self.targetra, self.targetdec, rad_min)
        df = pd.DataFrame(data=dict_lst, columns=dict_lst[0].keys())
        df = df[['RA', 'DEC', 'V', 'Verr', 'B', 'Berr', 'g', 'gerr', 'r', 'rerr', 'i', 'ierr']]
        df = df.replace([99.9990], [np.nan])
        df.rename(columns = {'RA' : 'ra'}, inplace = True)
        df.rename(columns = {'DEC': 'dec'}, inplace = True)
        df = df.dropna()

        self.cal_source = 'APASS'
        self.cal_filename = 'cal_{}_{}.dat'.format(self.targetname, self.cal_source)
        df.to_csv(os.path.join(self.relative_path, self.cal_filename), sep = '\t', index=False, header = True, float_format='%9.4f')
예제 #2
0
def addgalaxyintodatabase(data, galaxy):
    #add 1500 galaxies at most into database
    if len(galaxy) > 1500:
        print('galaxy is longer than 1500 items, truncate to 1500')
        galaxy = galaxy[0:1500]
    db = AstroSQL(database='observation')
    table2 = db.get_table("voevents_galaxy")
    print('Adding galaxyies into voeventsgalaxy table')
    g = galaxy.to_pandas().astype(object)
    g['TriggerNumber'] = data['TriggerNumber']
    g['TriggerSequence'] = data['TriggerSequence']
    #g['Kait_observable'] = 'N'
    g['Kait_observed'] = 'N'
    #g['Time_observed'] = None
    #g['Limit_mag'] = 0
    #g['Comment'] = None
    data = g.to_dict('records')
    query = table2.insert(data)
    query.execute()
예제 #3
0
def test_constructor():
    db = AstroSQL("test")
    assert db
예제 #4
0
def test_bad_login_cnf():
    with pytest.raises(peewee.OperationalError):
        db = AstroSQL("test", read_default_file="/path/to/fake/my.cnf")
예제 #5
0
def test_bad_login_manual():
    with pytest.raises(peewee.OperationalError):
        db = AstroSQL("test", user="******", password="******")
예제 #6
0
import sys
import pprint
from lxml import etree
from pathlib import Path
from astrosql import AstroSQL

PROJECT_PATH = Path(__file__).resolve().parents[1]
sys.path.append(str(PROJECT_PATH))
from gcn.handlers import followupkait
from gcn import voeventparser

pprint = pprint.PrettyPrinter().pprint
DB = AstroSQL(database='observation')
voevents_table = DB.get_table('voevents')

DATAPATH = PROJECT_PATH / 'test/gcn_output'
fname = "ivo%3A%2F%2Fnasa.gsfc.gcn%2FFermi%23GBM_Gnd_Pos_2018-04-16T08%3A09%3A26.47_545558971_1-990"
event = etree.parse(str(DATAPATH / fname))
root = event.getroot()
pprint(voeventparser.parse(root))
# trigger_number = root.find("./What/Param[@name='TrigID']").attrib['value']
# voevents_table.delete().where(voevents_table.TriggerNumber == trigger_number).execute()
# followupkait(str(DATAPATH/fname), root)
예제 #7
0
import re
import requests
import astropy.units as u
from astropy.time import Time
from astrosql import AstroSQL
from astrosql.sqlconnector import connect
from warnings import warn

PROJECT_PATH = Path(__file__).resolve().parents[1]
sys.path.append(str(PROJECT_PATH))

import gcn
from gcn import voeventparser
from gcn.gcnfollowup import *

db = AstroSQL(database='observation')
voevents_table = db.get_table("voevents")
galaxy_table = db.get_table("voevents_galaxy")


########################################
# FILTERS
########################################
# TODO Deprecate the gcn filtering to use XML parsing instead.
@gcn.include_notice_types(
    gcn.notice_types.FERMI_GBM_FLT_POS, gcn.notice_types.FERMI_GBM_GND_POS,
    gcn.notice_types.FERMI_GBM_FIN_POS, gcn.notice_types.SWIFT_BAT_GRB_POS_ACK,
    gcn.notice_types.AGILE_GRB_WAKEUP, gcn.notice_types.AGILE_GRB_GROUND,
    gcn.notice_types.AGILE_GRB_REFINED, gcn.notice_types.FERMI_LAT_POS_INI,
    gcn.notice_types.FERMI_LAT_GND, gcn.notice_types.MAXI_UNKNOWN,
    gcn.notice_types.MAXI_TEST, gcn.notice_types.LVC_PRELIM,
예제 #8
0
import pandas as pd
import re
import sys
from pathlib import Path
sys.path.append(str(Path(__file__).absolute().parents[1]/'src'))
import peeweedb
from sqlconnector import connect
from astrosql import AstroSQL

connection = connect()
imagedb = AstroSQL(connection)

images = imagedb.get_table('images')

print("This may take a while ... ")
# get rows where objname update is needed
basenames = list(images.select(images.basename).where(images.objname.is_null(False).dicts())
df = pd.DataFrame(basenames)
df['objname'] = [re.findall('^[^_]+', d['basename'])[0] for d in basenames]

print("This may take a while")
with connection.atomic():
    for i,basename in enumerate(df['basename']):      
        if i % 10000 == 0:
            print(i)

        query = (images
                 .update(objname = df[df['basename'] == basename]['objname'].iloc[0])
                 .where(images.basename == basename)
                 )
        query.execute()
예제 #9
0
from peewee import *
from astrosql import AstroSQL
from astrosql.sqlconnector import connect

db = AstroSQL(database='observation')


class VOEvent(Model):
    TriggerNumber = BigIntegerField()
    TriggerSequence = IntegerField()
    TriggerType = TextField()
    Time = DateTimeField()
    RA = DecimalField(null=True)
    Dec = DecimalField(null=True)
    ErrorRadius = DecimalField(null=True)
    Comments = CharField(null=True)

    class Meta:
        database = db.database
        table_name = 'voevents'
        primary_key = CompositeKey('TriggerNumber', 'TriggerSequence')


if __name__ == "__main__":
    if not VOEvent.table_exists():
        VOEvent.create_table()
예제 #10
0
def addtriggersintodatabase(data):
    db = AstroSQL(database='observation')
    table1 = db.get_table("voevents")

    query = table1.insert(data)
    query.execute()