Ticket 329: Revert quality field, Ticket 333: add default restore to quality plugin jenkins-beamb-53
authorDaniel Michelson <dbm@baltrad.eu>
Wed, 5 Mar 2014 12:56:25 +0000 (13:56 +0100)
committerDaniel Michelson <dbm@baltrad.eu>
Wed, 5 Mar 2014 12:56:25 +0000 (13:56 +0100)
Makefile
bin/beamb
data/Makefile
lib/beamblockage.c
pybeamb/beamb_quality_plugin.py

index 0a7da45..077f7bf 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -55,6 +55,10 @@ test: def.mk
        @chmod +x ./tools/test_beamb.sh
        @./tools/test_beamb.sh
 
+.PHONY:clean_cache
+clean_cache:
+       $(MAKE) -C data clean_cache
+
 .PHONY:clean
 clean:
        $(MAKE) -C lib clean
index abe7a7e..541fab5 100755 (executable)
--- a/bin/beamb
+++ b/bin/beamb
@@ -87,7 +87,7 @@ if __name__ == "__main__":
                       help="Specifies the limit of the Gaussian approximation of the beamwidth (in dB) to apply when analyzing the degree of beam blockage. NOTE that this does not have to be the radar's half-power beamwidth. Defaults to -6.0 dB.")
 
     parser.add_option("-r", "--restore", dest="restore", default=0.7, type="float",
-                      help="Specifies the upper threshold on how much beam blockage is accepted to be corrected. Sectors blocked more than this value are blocked out by assigning them the 'nodata' value. Defaults to 0.7 (70 %).")
+                      help="Specifies the upper threshold on how much beam blockage is accepted to be corrected. Sectors blocked more than this value are blocked out by assigning them the 'nodata' value. Defaults to 0.7 (70 %). Values above 1 will correct all data and mask none.")
     
     parser.add_option("-q", "--quantity", dest="quantity", default="DBZH",
                       help="Specifies the quantity to work with, default 'DBZH'.")
index f84332e..0e85ff7 100644 (file)
@@ -46,6 +46,10 @@ clean:
 distclean:     clean
        @\rm -fr gtopo30
 
+.PHONY=clean_cache
+clean_cache:
+       @\rm -f ${prefix}/var/cache/beamb/*
+
 # --------------------------------------------------------------------
 # Rules
 
index a8bcbe0..f4bfd54 100644 (file)
@@ -577,7 +577,8 @@ RaveField_t* BeamBlockage_getBlockage(BeamBlockage_t* self, PolarScan_t* scan, d
       } else if (bbval > 1.0) {
         bbval = 1.0;
       }
-      bbval = (bbval - offset) / gain;
+      /* ODIM's rule for representing quality is that 0=lowest, 1=highest quality. Therefore invert. */
+      bbval = ((1.0-bbval) - offset) / gain;
       RaveField_setValue(field, bi, ri, bbval);
     }
   }
@@ -646,7 +647,8 @@ int BeamBlockage_restore(PolarScan_t* scan, RaveField_t* blockage, const char* q
       rvt = PolarScanParam_getConvertedValue(parameter, bi, ri, &iv);
       if ((rvt == RaveValueType_DATA) || (rvt == RaveValueType_UNDETECT)) {
         RaveField_getValue(blockage, bi, ri, &bbraw);
-        bbpercent = bbgain * bbraw + bboffset;
+        /* ODIM's rule for representing quality is that 0=lowest, 1=highest quality. Therefore revert. */
+        bbpercent = 1.0 - (bbgain * bbraw + bboffset);
         if (bbpercent < 0.0 || bbpercent > 1.0) {
           RAVE_ERROR0("beamb values are out of bounds, check scaling");
           goto done;
index 370d8e2..192901e 100644 (file)
@@ -33,6 +33,7 @@ import _beamblockage
 # The limit of the Gaussian approximation of main lobe
 #
 BEAMBLOCKAGE_DBLIMIT=-6.0
+BEAMBLOCKAGE_BBLIMIT= 1.1
 
 ##
 # The beam blockage quality plugin
@@ -51,10 +52,16 @@ class beamb_quality_plugin(rave_quality_plugin):
   _cachedir = None
   
   ##
-  # The default beamblockage gaussian approximation main lobe. Defaults to BEAMBLOCKAGE_DBLIMIT
+  # The default beam blockage Gaussian approximation main lobe. Defaults to BEAMBLOCKAGE_DBLIMIT
   #
   _dblimit = BEAMBLOCKAGE_DBLIMIT
-  
+
+  ##
+  # The default percent beam blockage (divided by 100). Defaults to BEAMBLOCKAGE_BBLIMIT which 
+  # is set to 110% so that no radar data will be masked to NODATA.
+  #
+  _bblimit = BEAMBLOCKAGE_BBLIMIT
+    
   ##
   # Default constructor
   def __init__(self):
@@ -81,6 +88,7 @@ class beamb_quality_plugin(rave_quality_plugin):
             bb = self._create_bb()
             scan = obj.getScan(i)
             result = bb.getBlockage(scan, self._dblimit)
+            restored = _beamblockage.restore(scan, result, "DBZH", self._bblimit)
             scan.addQualityField(result)
       except Exception,e:
         pass