From 1da9e96761d2c59afa47a8b094a5644d18a2d072 Mon Sep 17 00:00:00 2001
From: Coda Phillips <cphillips@sean.ssec.wisc.edu>
Date: Thu, 25 Aug 2016 15:45:00 -0500
Subject: [PATCH] Invalidate records based on calibration

---
 main.py | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/main.py b/main.py
index 6c719b6..f2aec36 100644
--- a/main.py
+++ b/main.py
@@ -1,6 +1,7 @@
 import os
 from glob import glob
 import re
+from collections import defaultdict
 import netCDF4
 from aeri_tools.io.dmv.housekeeping import get_all_housekeeping
 import pandas as pd
@@ -39,7 +40,17 @@ def save_quality(frame, qc_path):
     ncdf.close()
     move(temp,qc_path)
     
-    
+
+def compute_calibration_graph(sceneMirrorPosition):
+    affected_records = defaultdict(set)
+    scene_regex = '(?<=(HA|AH))([^HA]+)(?=(HA|AH))'
+    for scene in re.finditer(scene_regex, ''.join(sceneMirrorPosition.fillna(ord('?')).apply(int).apply(chr))):
+        blackbody_indices = set(range(*scene.span(1)))
+        blackbody_indices.update(range(*scene.span(3)))
+        sky_view_indices = range(*scene.span(2))
+        for blackbody_index in blackbody_indices:
+            affected_records[blackbody_index].update(sky_view_indices)
+    return affected_records
 
 def read_frame(cxs_file, sum_file):
     """
@@ -62,7 +73,9 @@ def read_frame(cxs_file, sum_file):
     # Combine extra data from SUM into CXS, many columns will have during calibration views
     hk = cxs.combine_first(sum_)
     hk.index.name = 'datetime'
-    return hk.reset_index()
+    hk = hk.reset_index()
+    hk.calibration_graph = compute_calibration_graph(hk.sceneMirrorPosition)
+    return hk
 
 def read_igms(spc_zip_path):
     """
@@ -128,6 +141,7 @@ def update_all(ftp_dir, sci_dir, checklist, parameters=None):
         frame_with_spikes['spike_check'] = frame_with_spikes.spike_check.ffill(limit=1).bfill(limit=1)
         # Reindex back to housekeeping frame (union of sum and cxs records), removing interleaved spike data
         frame_with_spikes = frame_with_spikes.ix[frame.index]
+        frame_with_spikes.calibration_graph = frame.calibration_graph
         # Perform qc on housekeeping frame
         frame_with_spikes = check_frame(frame_with_spikes, parameters, checklist)
 
-- 
GitLab