Source code for fact.qla
import numpy as np
from .factdb import (
read_into_dataframe,
AnalysisResultsRunLP as QLA,
RunInfo,
Source
)
[docs]def get_qla_data(
first_night=None,
last_night=None,
sources=None,
database_engine=None
):
'''
Request QLA results from our database
first_night: int or None
If given, first night to query as FACT night integer.
last_night: int or None
If given, last night to query as FACT night integer.
sources: iterable[str]
If given, only these sources will be requested.
Names have to match Source.fSourceName in our db.
database_engine: sqlalchmey.Engine
If given, the connection to use for the query.
Else, `fact.credentials.create_factdb_engine` will be used to create it.
'''
query = QLA.select(
QLA.frunid.alias('run_id'),
QLA.fnight.alias('night'),
QLA.fnumexcevts.alias('n_excess'),
QLA.fnumsigevts.alias('n_on'),
(QLA.fnumbgevts * 5).alias('n_off'),
QLA.fontimeaftercuts.alias('ontime'),
RunInfo.frunstart.alias('run_start'),
RunInfo.frunstop.alias('run_stop'),
Source.fsourcename.alias('source'),
Source.fsourcekey.alias('source_key'),
)
on = (RunInfo.fnight == QLA.fnight) & (RunInfo.frunid == QLA.frunid)
query = query.join(RunInfo, on=on)
query = query.join(Source, on=RunInfo.fsourcekey == Source.fsourcekey)
if first_night is not None:
query = query.where(QLA.fnight >= first_night)
if last_night is not None:
query = query.where(QLA.fnight <= last_night)
if sources is not None:
query = query.where(Source.fsourcename.in_(sources))
runs = read_into_dataframe(query, engine=database_engine)
# drop rows with NaNs from the table, these are unfinished qla results
runs.dropna(inplace=True)
runs.sort_values('run_start', inplace=True)
return runs