Skip to content
Snippets Groups Projects
radiometric_checks.py 1.54 KiB
Newer Older
from util import BaseCheckList, annotate_all, _compute_robust_zscore, invalidate_records, update_variable_qc
import pandas as pd
import numpy as np

def imaginary_radiance_check(frame, parameters):
    if 'skyViewImaginaryRadiance2510_2515' not in frame.columns:
        return frame
    threshold = parameters.get('imaginary_radiance_threshold', 1)
    imaginary_radiance_problem = abs(frame.skyViewImaginaryRadiance2510_2515) > threshold
    frame['imaginary_radiance_check'] = imaginary_radiance_problem * 1
    annotate_all(frame, imaginary_radiance_problem, 'sky view imaginary radiance out of range')
    frame = invalidate_records(frame, 'imaginary_radiance_check')
    return frame

def hbb_radiance_check(frame, parameters):
    # Std dev, nen, lw, sw
    return frame

def responsivity_check(frame, parameters):
    # lw, sw
    if not np.in1d(['LWresponsivity','SWresponsivity'], frame.columns).all():
        return frame
    lw_zscore = _compute_robust_zscore(frame['LWresponsivity'], 50)
    sw_zscore = _compute_robust_zscore(frame['SWresponsivity'], 50)
    lw_problem = abs(lw_zscore) > 6
    sw_problem = abs(sw_zscore) > 6
    variable_qcs = pd.DataFrame({
        'qc_LWresponsivity':lw_problem * 1,
        'qc_SWresponsivity':sw_problem * 1
    })
    frame['responsivity_check'] = (lw_problem | sw_problem) * 1
    frame = update_variable_qc(frame, variable_qcs)
    frame = invalidate_records(frame, 'responsivity_check')
    return frame

class CheckList(BaseCheckList):
    checks = [ imaginary_radiance_check, hbb_radiance_check, responsivity_check ]