From 3a836df5889e88c43044c06c9a4fc954670480b9 Mon Sep 17 00:00:00 2001
From: weihe <amvdw95@gmail.com>
Date: Wed, 22 Jul 2015 09:04:28 +0000
Subject: [PATCH] update obspack_geocarbon.py for dealing with mismatched
 footprint issue

---
 da/stilt/obspack_geocarbon.py | 52 ++++++++++++++++++++++++++++++-----
 1 file changed, 45 insertions(+), 7 deletions(-)

diff --git a/da/stilt/obspack_geocarbon.py b/da/stilt/obspack_geocarbon.py
index bba8054..9eb204c 100755
--- a/da/stilt/obspack_geocarbon.py
+++ b/da/stilt/obspack_geocarbon.py
@@ -109,17 +109,45 @@ class ObsPackObservations(Observations):
             flags = ncf.get_variable('obs_flag').take(subselect, axis=0)
             ncf.close()
 
+            pathfoot="/Storage/ctdas-wrfstilt/stilt_footprints/"
+
+            ccgg_evn_foot=[]
+            dates_foot=[]
+            obs_foot=[]
+            flags_foot=[]
+            alts_foot=[]
+            lats_foot=[]
+            lons_foot=[]
+            obspackid_foot=[]
+
             for n in range(len(dates)):
-		used_ids = self.getvalues('id',list)
-		if ccgg_evn[n] in used_ids:
-		    ii = used_ids.index(ccgg_evn[n])
+
+                dir_foot=os.path.join(pathfoot,"%s"%dates[n].year,"%02d"%dates[n].month)
+                list_files=os.listdir(dir_foot)
+                str_id="%s"%ccgg_evn[n]
+
+                for i in list_files:
+                    if str_id in i:
+                        ccgg_evn_foot.append(ccgg_evn[n])
+                        dates_foot.append(dates[n])
+                        obs_foot.append(obs[n])
+                        flags_foot.append(flags[n])
+                        alts_foot.append(alts[n])
+                        lats_foot.append(lats[n])
+                        lons_foot.append(lons[n])
+                        obspackid_foot.append(obspackid[n])
+
+            for n in range(len(dates_foot)):
+                used_ids = self.getvalues('id',list)
+                if ccgg_evn_foot[n] in used_ids:
+                    ii = used_ids.index(ccgg_evn_foot[n])
                     logging.error("Error when reading from file: %s"%ncfile)
-                    logging.error("This sample ID (%d) is not unique"%ccgg_evn[n])
+                    logging.error("This sample ID (%d) is not unique"%ccgg_evn_foot[n])
                     logging.error("Previously used from file: %s"%self.datalist[ii].fromfile)
                     logging.error("...skipping")
                     raise IOError
                 else:
-               	    self.datalist.append(MoleFractionSample(ccgg_evn[n], dates[n], datasetname, obs[n], 0.0, 0.0, 0.0, 0.0, flags[n], alts[n], lats[n], lons[n], obspackid[n], species, 1, 0.0, infile))
+               	    self.datalist.append(MoleFractionSample(ccgg_evn_foot[n], dates_foot[n], datasetname, obs_foot[n], 0.0, 0.0, 0.0, 0.0, flags_foot[n], alts_foot[n], lats_foot[n], lons_foot[n], obspackid_foot[n], species, 1, 0.0, infile))
 
 
         logging.info("Observations list now holds %d values" % len(self.datalist))
@@ -347,7 +375,12 @@ class ObsPackObservations(Observations):
                 identifier, incalt = value.split(';')
                 site_incalt[identifier.strip()] = (int(incalt))
 
+        print "XXX before pop: %d" %(len(self.datalist))
         for s_index,obs in enumerate(self.datalist):  # loop over all available data points
+        #for obs in self.datalist:
+
+           # s_index = self.datalist.index(obs)
+            #print s_index
 
             obs.mdm = 1000.0  # default is very high model-data-mismatch, until explicitly set by script
             obs.flag = 99  # default is do-not-use , until explicitly set by script
@@ -368,8 +401,12 @@ class ObsPackObservations(Observations):
                 if site_info[identifier]['category'] == 'do-not-use' or exclude_hourly:
                     logging.warning("Site found (%s, %d), but data point not used in assimilation !!!" % (identifier, obs.id))
                     logging.warning("     .... removing data point from Observation List!!!")
-		            removed = self.datalist.pop(s_index)
-		            continue
+                    #print s_index
+                    #self.datalist.remove(self.datalist[s_index])
+                    #del self.datalist[s_index]
+                   # removed = self.datalist.pop(s_index)
+
+                   #continue
                 else:
                     logging.debug("Site found (%s, %d)" % (identifier, obs.id))
                     obs.mdm = site_info[identifier]['error'] * self.global_R_scaling
@@ -395,6 +432,7 @@ class ObsPackObservations(Observations):
 
                 logging.warning("Observation location for (%s, %d), is moved by %3.2f meters in altitude" % (identifier, obs.id, incalt))
 
+        print "XXX after pop: %d" %(len(self.datalist))
 
         # Add site_info dictionary to the Observations object for future use
 
-- 
GitLab