In [35]:
from tkp.db.model import Image
from sqlalchemy import create_engine, not_
from sqlalchemy.orm import sessionmaker
from scipy.stats import norm
from tkp.db.quality import reject, reject_reasons
In [36]:
host = 'localhost'
user = 'gijs'
password = 'gijs'
database = 'gijs'
dataset_id = 1
print_query = False
est_sigma = 4
In [40]:
param = ('postgresql', user, password, host, 5432, database)
alchemy_engine = create_engine('%s://%s:%s@%s:%s/%s' % param, echo=print_query)
Session = sessionmaker(bind=alchemy_engine)
session = Session()
In [37]:
def reject_bad_rms(session, dataset_id, est_sigma):
images = session.query(Image.rms_qc).filter(Image.dataset_id == dataset_id).all()
mu, sigma = norm.fit(images)
t_low = mu - sigma * est_sigma
t_high = mu + sigma * est_sigma
bad_images = session.query(Image).filter(not_(Image.rms_qc.between(t_low, t_high))).all()
reason = reject_reasons['rms']
for b in bad_images:
comment = "RMS of {} is outside range of ({:.3f}, {:.3f}), est_sigma={}".format(b.rms_qc, t_low, t_high, est_sigma)
reject(b.id, reason, comment, session)
reject_bad_rms(session, dataset_id, est_sigma)
session.commit()