Source code for tkp.db.quality

"""
check image quality
"""
import logging
from tkp.db.model import Rejectreason, Rejection

logger = logging.getLogger(__name__)

reject_reasons = {
    'rms': Rejectreason(id=0, description='RMS invalid'),
    'beam': Rejectreason(id=1, description='beam invalid'),
    'bright_source': Rejectreason(id=2, description='bright source near'),
    'tau_time': Rejectreason(id=3, description='tau_time invalid'),
    'nan': Rejectreason(id=4, description='contains NaN'),
    'flat': Rejectreason(id=5, description='data is flat'),
}


[docs]def sync_rejectreasons(session): """ Check if rejectreasons are in sync. If not, insert as needed and commit. Args: session (sqlalchemy.orm.session.Session): Database session. """ if session.query(Rejectreason).count() != len(reject_reasons): dbreason_id_rows = session.query(Rejectreason.id).all() dbreason_ids = [row[0] for row in dbreason_id_rows] for r in reject_reasons.values(): if r.id not in dbreason_ids: logger.info("Added to database Rejectreason {}:'{}'".format( r.id, r.description )) session.add(r) session.commit()
[docs]def reject(imageid, reason, comment, session): """ Add a reject reason to the db for a given image. Args: imageid (int): The image ID of the image to reject reason (tkp.db.model.Rejectreason): Why is the image rejected comment (str): An optional comment with details about the reason session (sqlalchemy.orm.session.Session): Database session. """ r = Rejection(image_id=imageid, rejectreason_id=reason.id, comment=comment, ) session.add(r)
[docs]def unreject(imageid, session): """ Remove any rejections of a given imageid Args: imageid: The image ID session (sqlalchemy.orm.session.Session): Database session. """ session.query(Rejection).filter( Rejection.image_id == imageid).delete()
[docs]def isrejected(imageid, session): """ Find out if an image is rejected or not Args: imageid: The image ID session (sqlalchemy.orm.session.Session): Database session. Returns: tuple: Empty if not rejected, a list of strings formatted as '{description}: {comment}' if rejected. """ image_rejections = session.query(Rejection).filter( Rejection.image_id == imageid).all() return ["{}: {}".format(ir.rejectreason.description, ir.comment) for ir in image_rejections]