from aeri_qc.util import _compute_robust_zscore import pandas as pd import numpy as np import scipy.stats from aeri_qc.all_checks import checklist hide_data_if_invalid = [ 'hbb_temp_outlier_check', 'abb_temp_outlier_check', 'hatch_check', 'safing_check', 'detector_check', 'hbb_thermistor_check', 'abb_thermistor_check', 'hbb_stable_check', 'hbb_covariance_check' ] @checklist.add_check(depends=['skyViewImaginaryRadiance2510_2515'], affects_calibration=False, description='sky view imaginary radiance is out of range', hides=hide_data_if_invalid) def imaginary_radiance_check(frame, parameters): threshold = parameters.get('imaginary_radiance_threshold', 1) return abs(frame.skyViewImaginaryRadiance2510_2515) > threshold @checklist.add_check(depends=['HBBviewStdDevRadiance985_990'], affects_calibration=True, description='HBB radiance has too much variance', hides=hide_data_if_invalid) def hbb_std_dev_check(frame, parameters): hbb_std_dist = scipy.stats.chi2.fit(frame.HBBviewStdDevRadiance985_990) _, hbb_std_dist_hi = scipy.stats.chi2.interval(.995, *hbb_std_dist) return frame.HBBviewStdDevRadiance985_990 > hbb_std_dist_hi @checklist.add_check(depends=['LW_HBB_NEN'], affects_calibration=True, description='Longwave HBB radiance NEN too high', hides=hide_data_if_invalid) def hbb_lw_nen_check(frame, parameters): lw_hbb_nen_dist = scipy.stats.chi2.fit(frame.LW_HBB_NEN) _, lw_hbb_nen_hi = scipy.stats.chi2.interval(.995, *lw_hbb_nen_dist) return frame.LW_HBB_NEN > lw_hbb_nen_hi @checklist.add_check(depends=['SW_HBB_NEN'], affects_calibration=True, description='Shortwave HBB radiance NEN too high', hides=hide_data_if_invalid) def hbb_sw_nen_check(frame, parameters): sw_hbb_nen_dist = scipy.stats.chi2.fit(frame.SW_HBB_NEN) _, sw_hbb_nen_hi = scipy.stats.chi2.interval(.995, *sw_hbb_nen_dist) return frame.SW_HBB_NEN > sw_hbb_nen_hi @checklist.add_check(depends=['LWresponsivity'], affects_calibration=False, description='Longwave responsivity outlier', hides=hide_data_if_invalid) def lw_responsivity_check(frame, parameters): lw_zscore = _compute_robust_zscore(frame['LWresponsivity'], 50) return abs(lw_zscore) > 6 @checklist.add_check(depends=['SWresponsivity'], affects_calibration=False, description='Shortwave responsivity outlier', hides=hide_data_if_invalid) def sw_responsivity_check(frame, parameters): sw_zscore = _compute_robust_zscore(frame['SWresponsivity'], 50) return abs(sw_zscore) > 6