def test_sum_different_quantity(self): p1 = _cartesianparam.new() p1.quantity = "DBZH" p1.setData(reshape(array((NO_DATA, 111, 0, 111), uint8), (2, 2))) p1.nodata, p1.undetect, p1.gain, p1.offset = NO_DATA, UNDETECT, 0.5, -32.5 d1 = _ravefield.new() d1.addAttribute("what/gain", DEFAULT_DISTANCE_GAIN) d1.setData(reshape(array((0, 100, 75, 50), uint8), (2, 2))) d1.addAttribute("how/task", "se.smhi.composite.distance.radar") p1.addQualityField(d1) p2 = _cartesianparam.new() p2.quantity = "TH" p2.setData(reshape(array((NO_DATA, 111, 0, 111), uint8), (2, 2))) p2.nodata, p2.undetect, p2.gain, p2.offset = NO_DATA, UNDETECT, 0.5, -32.5 d2 = _ravefield.new() d2.addAttribute("what/gain", DEFAULT_DISTANCE_GAIN) d2.setData(reshape(array((0, 100, 75, 50), uint8), (2, 2))) d2.addAttribute("how/task", "se.smhi.composite.distance.radar") p2.addQualityField(d2) obj = _acrr.new() obj.sum(p1, 200.0, 1.6) try: obj.sum(p2, 200.0, 1.6) self.fail("Expected IOError") except IOError: pass self.assertEqual(True, obj.isInitialized()) self.assertEqual("DBZH", obj.getQuantity())
def test_concatx(self): obj = _ravefield.new() obj.setData(numpy.zeros((10,10), numpy.uint8)) obj.setValue(0,1,10.0) obj.setValue(5,4,20.0) obj.setValue(9,4,35.0) obj2 = _ravefield.new() obj2.setData(numpy.zeros((10,6), numpy.uint8)) obj2.setValue(0,1,15.0) obj2.setValue(5,4,25.0) obj2.setValue(0,4,36.0) obj2.setValue(1,4,37.0) result = obj.concatx(obj2) self.assertEqual(16, result.xsize) self.assertEqual(10, result.ysize) self.assertAlmostEqual(10.0, result.getValue(0,1)[1], 4) self.assertAlmostEqual(20.0, result.getValue(5,4)[1], 4) self.assertAlmostEqual(15.0, result.getValue(10,1)[1], 4) self.assertAlmostEqual(25.0, result.getValue(15,4)[1], 4) self.assertAlmostEqual(35.0, result.getValue(9,4)[1], 4) self.assertAlmostEqual(36.0, result.getValue(10,4)[1], 4) self.assertAlmostEqual(37.0, result.getValue(11,4)[1], 4)
def test_shiftData_neg(self): obj = _polarscanparam.new() f1 = _ravefield.new() f2 = _ravefield.new() obj.setData( numpy.array( [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]], numpy.uint8)) f1.setData( numpy.array( [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]], numpy.uint8)) f2.setData( numpy.array( [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]], numpy.uint8)) obj.addQualityField(f1) obj.addQualityField(f2) obj.shiftData(-1) self.assertTrue((numpy.array( [[4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [0, 1, 2, 3]], numpy.uint8) == obj.getData()).all()) self.assertTrue((numpy.array( [[4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [0, 1, 2, 3]], numpy.uint8) == obj.getQualityField(0).getData()).all()) self.assertTrue((numpy.array( [[4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [0, 1, 2, 3]], numpy.uint8) == obj.getQualityField(1).getData()).all())
def test_accumulate_distfield_nodata(self): distance_field1 = (10, 20, 30, ACRR_NO_DATA) distance_field2 = (10, 20, 30, ACRR_NO_DATA) p1 = _cartesianparam.new() p1.quantity = "DBZH" p1.setData(reshape(array((111, 111, UNDETECT, NO_DATA), uint8), (2, 2))) p1.nodata, p1.undetect, p1.gain, p1.offset = NO_DATA, UNDETECT, 0.5, -32.5 d1 = _ravefield.new() d1.addAttribute("what/gain", DEFAULT_DISTANCE_GAIN) d1.setData(reshape(array(distance_field1, uint8), (2, 2))) d1.addAttribute("how/task", "se.smhi.composite.distance.radar") p1.addQualityField(d1) p2 = _cartesianparam.new() p2.quantity = "DBZH" p2.setData(reshape(array((111, 111, 111, NO_DATA), uint8), (2, 2))) p2.nodata, p2.undetect, p2.gain, p2.offset = NO_DATA, UNDETECT, 0.5, -32.5 d2 = _ravefield.new() d2.addAttribute("what/gain", DEFAULT_DISTANCE_GAIN) d2.setData(reshape(array(distance_field2, uint8), (2, 2))) d2.addAttribute("how/task", "se.smhi.composite.distance.radar") p2.addQualityField(d2) obj = _acrr.new() obj.nodata = ACRR_NO_DATA obj.undetect = UNDETECT obj.sum(p1, 200.0, 1.6) obj.sum(p2, 200.0, 1.6) result = obj.accumulate(0.0, 2, 1.0) self.assertAlmostEqual(1.0, result.getAttribute("what/prodpar"), 4) self.assertEqual("ACRR", result.quantity) self.assertAlmostEqual(ACRR_NO_DATA, result.nodata, 4) self.assertAlmostEqual(UNDETECT, result.undetect, 4) refAcrr = [1.0, 1.0, 0.5, ACRR_NO_DATA] refDist = self.calculateAvgDistanceField( [distance_field1, distance_field2], DEFAULT_DISTANCE_GAIN) Acrr = result.getData().flatten() qfield = result.getQualityFieldByHowTask( "se.smhi.composite.distance.radar") self.assertAlmostEqual(0.0, qfield.getAttribute("what/offset"), 4) self.assertAlmostEqual(1000.0, qfield.getAttribute("what/gain"), 4) Dist = qfield.getData().flatten() for i in range(len(refAcrr)): self.assertAlmostEqual(Acrr[i], refAcrr[i], 2) self.assertAlmostEqual(Dist[i], refDist[i], 2)
def test_getConvertedQualityValueAtLonLat(self): obj = _cartesian.new() obj.projection = _rave.projection( "gnom", "gnom", "+proj=gnom +R=6371000.0 +lat_0=56.3675 +lon_0=12.8544") obj.xscale = 100.0 obj.yscale = 100.0 xy = obj.projection.fwd(deg2rad((12.8544, 56.3675))) obj.areaextent = (xy[0] - 4 * 100.0, xy[1] - 5 * 100.0, xy[0] + 6 * 100.0, xy[1] + 5 * 100.0) param = _cartesianparam.new() param.quantity = "DBZH" param.nodata = 255.0 param.undetect = 0.0 a = numpy.zeros((11, 9)) a = numpy.array(a.astype(numpy.float64), numpy.float64) a = numpy.reshape(a, (11, 9)).astype(numpy.float64) param.setData(a) qf = numpy.arange(99) qf = numpy.array(qf.astype(numpy.float64), numpy.float64) qf = numpy.reshape(qf, (11, 9)).astype(numpy.float64) qf2 = numpy.arange(99) qf2 = numpy.array(qf.astype(numpy.float64), numpy.float64) qf2 = numpy.reshape(qf, (11, 9)).astype(numpy.float64) qf2[5][4] = 199.0 field1 = _ravefield.new() field1.addAttribute("how/task", "se.task.1") field1.addAttribute("what/offset", 10.0) field1.addAttribute("what/gain", 2.0) field1.setData(qf) param.addQualityField(field1) field2 = _ravefield.new() field2.addAttribute("how/task", "se.task.2") field2.addAttribute("what/gain", 3.0) field2.setData(qf2) param.addQualityField(field2) obj.addParameter(param) obj.defaultParameter = "DBZH" #expected = obj.getConvertedValue((4,5)) result = obj.getConvertedQualityValueAtLonLat( deg2rad((12.8544, 56.3675)), "se.task.1") self.assertAlmostEqual(10.0 + 2.0 * 49.0, result, 4) result = obj.getConvertedQualityValueAtLonLat( deg2rad((12.8544, 56.3675)), "se.task.2") self.assertAlmostEqual(3.0 * 199.0, result, 4)
def test_multiplicative_wGainOffsetAndDatatype(self): obj = _qitotal.new() obj.gain = 0.001 obj.offset = -0.01 obj.datatype = _rave.RaveDataType_UCHAR f1 = _ravefield.new() f1.setData(numpy.zeros((2, 2), numpy.float64)) f1.setValue(0, 0, 0.1) f1.setValue(0, 1, 0.2) f1.setValue(1, 0, 0.3) f1.setValue(1, 1, 0.4) f2 = _ravefield.new() f2.setData(numpy.zeros((2, 2), numpy.float64)) f2.setValue(0, 0, 0.1) f2.setValue(0, 1, 0.2) f2.setValue(1, 0, 0.5) f2.setValue(1, 1, 1.0) f3 = _ravefield.new() f3.setData(numpy.zeros((2, 2), numpy.uint8)) f3.addAttribute("what/gain", 0.1) f3.addAttribute("what/offset", 0.2) f3.setValue(0, 0, 1) #0.2 + 1*0.1 = 0.3 f3.setValue(0, 1, 2) #0.2 + 2*0.1 = 0.4 f3.setValue(1, 0, 3) #0.2 + 3*0.1 = 0.5 f3.setValue(1, 1, 4) #0.2 + 4*0.1 = 0.6 result = obj.multiplicative([f1, f2, f3]) self.assertEqual(_rave.RaveDataType_UCHAR, result.datatype) self.assertAlmostEqual(0.001, result.getAttribute("what/gain")) self.assertAlmostEqual(-0.01, result.getAttribute("what/offset")) # Due to the conversion errors, we can not check on more than 2 decimals #0,0 = 0.1 * 0.1 * 0.3 = 0.003 self.assertAlmostEqual(0.003, result.getValue(0, 0)[1] * 0.001 - 0.01, 2) #0,1 = 0.2 * 0.2 * 0.4 = 0.016 self.assertAlmostEqual(0.016, result.getValue(0, 1)[1] * 0.001 - 0.01, 2) #1,0 = 0.3 * 0.5 * 0.5 = 0.075 self.assertAlmostEqual(0.075, result.getValue(1, 0)[1] * 0.001 - 0.01, 2) #1,1 = 0.4 * 1.0 * 0.6 = 0.24 self.assertAlmostEqual(0.24, result.getValue(1, 1)[1] * 0.001 - 0.01, 2)
def test_minimum_with_weights(self): obj = _qitotal.new() f1 = _ravefield.new() f1.setData(numpy.zeros((2, 2), numpy.float64)) f1.addAttribute("how/task", "se.smhi.f1") f1.setValue(0, 0, 0.1) # 0.1 * 0.5 = 0.05 f1.setValue(0, 1, 0.2) # 0.2 * 0.5 = 0.10 f1.setValue(1, 0, 0.3) # 0.3 * 0.5 = 0.15 f1.setValue(1, 1, 0.4) # 0.4 * 0.5 = 0.2 f2 = _ravefield.new() f2.setData(numpy.zeros((2, 2), numpy.float64)) f2.addAttribute("how/task", "se.smhi.f2") f2.setValue(0, 0, 0.1) # 0.1 * 0.75 = 0.075 f2.setValue(0, 1, 0.1) # 0.1 * 0.75 = 0.075 f2.setValue(1, 0, 0.5) # 0.5 * 0.75 = 0.375 f2.setValue(1, 1, 1.0) # 1.0 * 0.75 = 0.75 f3 = _ravefield.new() f3.setData(numpy.zeros((2, 2), numpy.uint8)) f3.addAttribute("how/task", "se.smhi.f3") f3.addAttribute("what/gain", 0.1) f3.addAttribute("what/offset", 0.2) f3.setValue(0, 0, 1) # (0.2 + 1*0.1) * 0.9 = 0.27 f3.setValue(0, 1, 2) # (0.2 + 2*0.1) * 0.9 = 0.36 f3.setValue(1, 0, 3) # (0.2 + 3*0.1) * 0.9 = 0.45 f3.setValue(1, 1, 4) # (0.2 + 4*0.1) * 0.9 = 0.54 obj.setWeight("se.smhi.f1", 0.5) obj.setWeight("se.smhi.f2", 0.25) obj.setWeight("se.smhi.f3", 0.25) result = obj.minimum([f1, f2, f3]) self.assertEqual("pl.imgw.quality.qi_total", result.getAttribute("how/task")) self.assertEqual("method:minimum", result.getAttribute("how/task_args")) #0,0 = min(0.05, 0.075, 0.27) = 0.05 => 0.1 self.assertAlmostEqual(0.1, result.getValue(0, 0)[1], 4) #0,1 = min(0.1, 0.075, 0.36) = 0.075 => 0.1 self.assertAlmostEqual(0.1, result.getValue(0, 1)[1], 4) #1,0 = min(0.15, 0.375, 0.45) = 0.15 => 0.3 self.assertAlmostEqual(0.3, result.getValue(1, 0)[1], 4) #1,1 = min(0.2, 0.75, 0.54) = 0.2 => 0.4 self.assertAlmostEqual(0.4, result.getValue(1, 1)[1], 4)
def test_additive_with_weights(self): obj = _qitotal.new() f1 = _ravefield.new() f1.setData(numpy.zeros((2, 2), numpy.float64)) f1.addAttribute("how/task", "se.smhi.f1") f1.setValue(0, 0, 0.1) f1.setValue(0, 1, 0.2) f1.setValue(1, 0, 0.3) f1.setValue(1, 1, 0.4) f2 = _ravefield.new() f2.setData(numpy.zeros((2, 2), numpy.float64)) f2.addAttribute("how/task", "se.smhi.f2") f2.setValue(0, 0, 0.1) f2.setValue(0, 1, 0.2) f2.setValue(1, 0, 0.5) f2.setValue(1, 1, 1.0) f3 = _ravefield.new() f3.setData(numpy.zeros((2, 2), numpy.uint8)) f3.addAttribute("how/task", "se.smhi.f3") f3.addAttribute("what/gain", 0.1) f3.addAttribute("what/offset", 0.2) f3.setValue(0, 0, 1) #0.2 + 1*0.1 = 0.3 f3.setValue(0, 1, 2) #0.2 + 2*0.1 = 0.4 f3.setValue(1, 0, 3) #0.2 + 3*0.1 = 0.5 f3.setValue(1, 1, 4) #0.2 + 4*0.1 = 0.6 obj.setWeight("se.smhi.f1", 0.5) obj.setWeight("se.smhi.f2", 0.25) obj.setWeight("se.smhi.f3", 0.25) result = obj.additive([f1, f2, f3]) self.assertEqual("pl.imgw.quality.qi_total", result.getAttribute("how/task")) self.assertEqual("method:additive", result.getAttribute("how/task_args")) #0,0 = (0.1*0.5 + 0.1*0.25 + 0.3*0.25) = 0.15 self.assertAlmostEqual(0.15, result.getValue(0, 0)[1], 4) #0,1 = (0.2*0.5 + 0.2*0.25 + 0.4*0.25) = 0.25 self.assertAlmostEqual(0.25, result.getValue(0, 1)[1], 4) #1,0 = (0.3*0.5 + 0.5*0.25 + 0.5*0.25) = 0.4 self.assertAlmostEqual(0.4, result.getValue(1, 0)[1], 4) #1,1 = (0.4*0.5 + 1.0*0.25 + 0.6*0.25) = 0.6 self.assertAlmostEqual(0.6, result.getValue(1, 1)[1], 4)
def Xtest_multiplicative_weighted_fields(self): obj = _qitotal.new() f1 = _ravefield.new() f1.addAttribute("how/task", "se.smhi.f1") f1.setData(numpy.zeros((2, 2), numpy.float64)) f1.setValue(0, 0, 0.1) f1.setValue(0, 1, 0.2) f1.setValue(1, 0, 0.3) f1.setValue(1, 1, 0.4) f2 = _ravefield.new() f1.addAttribute("how/task", "se.smhi.f2") f2.setData(numpy.zeros((2, 2), numpy.float64)) f2.setValue(0, 0, 0.1) f2.setValue(0, 1, 0.2) f2.setValue(1, 0, 0.5) f2.setValue(1, 1, 1.0) f3 = _ravefield.new() f3.setData(numpy.zeros((2, 2), numpy.uint8)) f3.addAttribute("how/task", "se.smhi.f3") f3.addAttribute("what/gain", 0.1) f3.addAttribute("what/offset", 0.2) f3.setValue(0, 0, 1) #0.2 + 1*0.1 = 0.3 f3.setValue(0, 1, 2) #0.2 + 2*0.1 = 0.4 f3.setValue(1, 0, 3) #0.2 + 3*0.1 = 0.5 f3.setValue(1, 1, 4) #0.2 + 4*0.1 = 0.6 obj.setWeight("se.smhi.f1", 10.0) obj.setWeight("se.smhi.f2", 5.0) result = obj.multiplicative([f1, f2, f3]) self.assertEqual("pl.imgw.quality.qi_total", result.getAttribute("how/task")) self.assertEqual("method:multiplicative", result.getAttribute("how/task_args")) #0,0 = 0.1 * 0.1 * 0.3 = 0.003 self.assertAlmostEqual(0.003, result.getValue(0, 0)[1], 4) #0,1 = 0.2 * 0.2 * 0.4 = 0.016 self.assertAlmostEqual(0.016, result.getValue(0, 1)[1], 4) #1,0 = 0.3 * 0.5 * 0.5 = 0.075 self.assertAlmostEqual(0.075, result.getValue(1, 0)[1], 4) #1,1 = 0.4 * 1.0 * 0.6 = 0.24 self.assertAlmostEqual(0.24, result.getValue(1, 1)[1], 4)
def create_quality_field(self, xsize, ysize, dtype, value, howtask): obj = _ravefield.new() data = numpy.zeros((ysize, xsize), dtype) data = data + value obj.setData(data) obj.addAttribute("how/task", howtask) return obj
def lonlats(self, name=None, level=None): self.grbs.seek(0) try: if name != None and level != None: latlons = self.grbs.select(name=name, level=level)[0].latlons() elif name != None and level == None: latlons = self.grbs.select(name=name)[0].latlons() else: latlons = self.grbs.readline().latlons() lats = _ravefield.new() lats.setData(latlons[0]) lons = _ravefield.new() lons.setData(latlons[1]) return (lons, lats) except ValueError, e: raise IOError(e)
def testPadding(self): import numpy scan = _polarscan.new() dbzh = _polarscanparam.new() dbzh.quantity = "DBZH" l = [] for i in range(360): l.append([i, i, i]) data = numpy.array(l).astype(numpy.uint16) dbzh.setData(data) scan.addParameter(dbzh) dbzh.quantity = "TH" scan.addParameter(dbzh) options = ropo_realtime.options() options.emitter2 = (-10, 3, 3) # default newscan, gates = ropo_realtime.PadNrays(scan, options) newdata = newscan.getParameter("DBZH").getData() # Test data wrapping self.assertEqual(newdata[:4].tolist(), data[356:, ].tolist()) self.assertEqual(newdata[364:, ].tolist(), data[:4, ].tolist()) classification = _ravefield.new() classification.setData(newdata) # bogus probability of anomaly array unwrapped, classification = ropo_realtime.UnpadNrays( newscan, classification, gates) # Test data unwrapping self.assertEqual( unwrapped.getParameter("DBZH").getData().tolist(), data.tolist())
def test_apply(self): distance = _ravefield.new() distance.setData(numpy.zeros((2, 2), numpy.float64)) distance.setValue(0, 0, 0.1) distance.setValue(0, 1, 0.2) distance.setValue(1, 0, 0.3) distance.setValue(1, 1, 0.4) distance.addAttribute("what/gain", 10000.0) distance.addAttribute("what/offset", 0.0) param = _cartesianparam.new() param.setData(numpy.zeros((2, 2), numpy.float64)) param.setValue((0, 0), 1) param.setValue((0, 1), 2) param.setValue((1, 0), 3) param.setValue((1, 1), 4) param.quantity = "ACRR" param.gain = 10.0 param.offset = 2.0 gra = _gra.new() gra.A = 1.0 gra.B = 2.0 gra.C = 3.0 result = gra.apply(distance, param) self.assertAlmostEqual(47.77, result.getConvertedValue((0, 0))[1], 2) self.assertAlmostEqual(1102.61, result.getConvertedValue((0, 1))[1], 2) self.assertAlmostEqual(3200.0, result.getConvertedValue((1, 0))[1], 4) self.assertAlmostEqual(4200.0, result.getConvertedValue((1, 1))[1], 4)
def hacFilter(self, scan, quant="DBZH", enough=100): NOD = odim_source.NODfromSource(scan) # If HAC files are missing, then this method will passively fail. try: self.readHac(hacFile(scan, lastmonth=True)) if self.hac.getAttribute("how/count") < enough: raise ValueError, "Not enough hits in climatology for %s" % NOD hac_data = self.hac.getData() if hac_data.shape != (scan.nrays, scan.nbins): print hac_data.shape, (scan.nrays, scan.nbins) raise IOError, "Scan and HAC have different geometries for %s" % NOD ## Get site-specific threshold! try: self.thresh = ARGS[NOD].thresh except KeyError: self.thresh = ARGS["default"].thresh ## Got site-specific threshold? qind = _ravefield.new() qind.setData(zeros(hac_data.shape, uint8)) qind.addAttribute("how/task", "eu.opera.odc.hac") qind.addAttribute("how/task_args", self.thresh) scan.addQualityField(qind) _odc_hac.hacFilter(scan, self.hac, quant) except Exception, e: print traceback.format_exc()
def makeHac(self, fstr, nrays, nbins): if not os.path.isfile(fstr): self.hac = _ravefield.new() self.hac.addAttribute("how/count", 0) self.hac.setData(zeros((nrays, nbins), uint32)) else: raise IOError, "HAC file already exists: %s" % fstr
def test_concatx_differentY(self): obj = _ravefield.new() obj.setData(numpy.zeros((10,10), numpy.uint8)) obj.setValue(0,1,10.0) obj.setValue(5,4,20.0) obj2 = _ravefield.new() obj2.setData(numpy.zeros((9,6), numpy.uint8)) obj2.setValue(0,1,15.0) obj2.setValue(5,4,25.0) try: obj.concatx(obj2) self.fail("Expected ValueError") except ValueError: pass
def test_minimum_inconsistent_dimensions(self): obj = _qitotal.new() f1 = _ravefield.new() f1.setData(numpy.zeros((2, 2), numpy.float64)) f2 = _ravefield.new() f2.setData(numpy.zeros((2, 2), numpy.float64)) f3 = _ravefield.new() f3.setData(numpy.zeros((3, 2), numpy.uint8)) try: obj.minimum([f1, f2, f3]) self.fail("Expected AttributeError") except AttributeError: pass
def test_qualityfields(self): obj = _cartesianparam.new() field1 = _ravefield.new() field2 = _ravefield.new() field1.addAttribute("what/name", "field1") field2.addAttribute("what/name", "field2") obj.addQualityField(field1) obj.addQualityField(field2) self.assertEqual(2, obj.getNumberOfQualityFields()) self.assertEqual("field1", obj.getQualityField(0).getAttribute("what/name")) obj.removeQualityField(0) self.assertEqual(1, obj.getNumberOfQualityFields()) self.assertEqual("field2", obj.getQualityField(0).getAttribute("what/name"))
def createQualityField(self, nrays, nbins, zv, howtask): qfdata = numpy.zeros((nrays, nbins), numpy.int8) qfdata = qfdata + zv qf = _ravefield.new() qf.setData(qfdata) qf.addAttribute("how/task", howtask) return qf
def test_bad_names(self): obj = _ravefield.new() BAD_NAMES = ["xyz/is", "what", "is"] for n in BAD_NAMES: try: obj.addAttribute(n, 5) self.fail("Expected AttributeError") except AttributeError: pass
def test_getQualityFieldByHowTask(self): param = _cartesianparam.new() param.quantity = "DBZH" data = numpy.zeros((4, 5), numpy.int8) param.setData(data) field1 = _ravefield.new() field2 = _ravefield.new() field1.addAttribute("how/task", "se.smhi.f1") field1.addAttribute("what/value", "f1") field2.addAttribute("how/task", "se.smhi.f2") field2.addAttribute("what/value", "f2") param.addQualityField(field1) param.addQualityField(field2) result = param.getQualityFieldByHowTask("se.smhi.f2") self.assertEqual("f2", result.getAttribute("what/value"))
def test_removeAttributes(self): obj = _ravefield.new() obj.addAttribute("what/is", 10.0) obj.addAttribute("where/is", "that") obj.addAttribute("how/are", 5) obj.removeAttributes() names = obj.getAttributeNames() self.assertEqual(0, len(names))
def test_findQualityFieldByHowTask(self): obj = _cartesian.new() param = _cartesianparam.new() field1 = _ravefield.new() field2 = _ravefield.new() field3 = _ravefield.new() field1.addAttribute("how/task", "se.task.1") field1.addAttribute("how/some", "should not be found") field2.addAttribute("how/task", "se.task.2") field3.addAttribute("how/notask", "abc") obj.addQualityField(field1) obj.addQualityField(field2) obj.addQualityField(field3) field4 = _ravefield.new() field5 = _ravefield.new() field4.addAttribute("how/task", "se.task.1") field4.addAttribute("how/some", "should be found") field5.addAttribute("how/task", "se.task.3") param.addQualityField(field4) param.addQualityField(field5) param.quantity = "DBZH" param.setData(numpy.zeros((240, 240), numpy.uint8)) obj.addParameter(param) self.assertEqual( "should be found", obj.findQualityFieldByHowTask("se.task.1").getAttribute( "how/some")) self.assertEqual( "se.task.2", obj.findQualityFieldByHowTask("se.task.2").getAttribute( "how/task")) self.assertEqual( "se.task.3", obj.findQualityFieldByHowTask("se.task.3").getAttribute( "how/task")) self.assertEqual(None, obj.findQualityFieldByHowTask("abc"))
def test_additive(self): obj = _qitotal.new() f1 = _ravefield.new() f1.setData(numpy.zeros((2, 2), numpy.float64)) f1.setValue(0, 0, 0.1) f1.setValue(0, 1, 0.2) f1.setValue(1, 0, 0.3) f1.setValue(1, 1, 0.4) f2 = _ravefield.new() f2.setData(numpy.zeros((2, 2), numpy.float64)) f2.setValue(0, 0, 0.1) f2.setValue(0, 1, 0.2) f2.setValue(1, 0, 0.5) f2.setValue(1, 1, 1.0) f3 = _ravefield.new() f3.setData(numpy.zeros((2, 2), numpy.uint8)) f3.addAttribute("what/gain", 0.1) f3.addAttribute("what/offset", 0.2) f3.setValue(0, 0, 1) #0.2 + 1*0.1 = 0.3 f3.setValue(0, 1, 2) #0.2 + 2*0.1 = 0.4 f3.setValue(1, 0, 3) #0.2 + 3*0.1 = 0.5 f3.setValue(1, 1, 4) #0.2 + 4*0.1 = 0.6 result = obj.additive([f1, f2, f3]) self.assertEqual("pl.imgw.quality.qi_total", result.getAttribute("how/task")) self.assertEqual("method:additive", result.getAttribute("how/task_args")) #0,0 = (0.1 + 0.1 + 0.3)/3 = 0.1667 self.assertAlmostEqual(0.1667, result.getValue(0, 0)[1], 4) #0,1 = (0.2 + 0.2 + 0.4)/3 = 0.2667 self.assertAlmostEqual(0.2667, result.getValue(0, 1)[1], 4) #1,0 = (0.3 + 0.5 + 0.5)/3 = 0.4333 self.assertAlmostEqual(0.4333, result.getValue(1, 0)[1], 4) #1,1 = (0.4 + 1.0 + 0.6)/3 = 0.6667 self.assertAlmostEqual(0.6667, result.getValue(1, 1)[1], 4)
def test_addField_no_quantity(self): obj = _verticalprofile.new() f = _ravefield.new() f.setData(numpy.zeros((10, 1), numpy.uint8)) f.addAttribute("how/this", 1.0) try: obj.addField(f) self.fail("Expected AttributeError") except AttributeError: pass
def test_setGetNZ(self): obj = _verticalprofile.new() self.assertTrue(None == obj.getNZ()) f = _ravefield.new() f.setData(numpy.zeros((10, 1), numpy.uint8)) f.addAttribute("how/this", 1.0) obj.setNZ(f) result = obj.getNZ() self.assertAlmostEqual(1.0, result.getAttribute("how/this"), 4) self.assertEqual("nz", result.getAttribute("what/quantity"))
def test_minimum(self): obj = _qitotal.new() f1 = _ravefield.new() f1.setData(numpy.zeros((2, 2), numpy.float64)) f1.setValue(0, 0, 0.1) f1.setValue(0, 1, 0.2) f1.setValue(1, 0, 0.3) f1.setValue(1, 1, 0.4) f2 = _ravefield.new() f2.setData(numpy.zeros((2, 2), numpy.float64)) f2.setValue(0, 0, 0.1) f2.setValue(0, 1, 0.1) f2.setValue(1, 0, 0.5) f2.setValue(1, 1, 1.0) f3 = _ravefield.new() f3.setData(numpy.zeros((2, 2), numpy.uint8)) f3.addAttribute("what/gain", 0.1) f3.addAttribute("what/offset", 0.2) f3.setValue(0, 0, 1) #0.2 + 1*0.1 = 0.3 f3.setValue(0, 1, 2) #0.2 + 2*0.1 = 0.4 f3.setValue(1, 0, 3) #0.2 + 3*0.1 = 0.5 f3.setValue(1, 1, 4) #0.2 + 4*0.1 = 0.6 result = obj.minimum([f1, f2, f3]) self.assertEqual("pl.imgw.quality.qi_total", result.getAttribute("how/task")) self.assertEqual("method:minimum", result.getAttribute("how/task_args")) #0,0 = min(0.1, 0.1, 0.3) = 0.1 self.assertAlmostEqual(0.1, result.getValue(0, 0)[1], 4) #0,1 = min(0.2, 0.1, 0.4) = 0.1 self.assertAlmostEqual(0.1, result.getValue(0, 1)[1], 4) #1,0 = min(0.3, 0.5, 0.5) = 0.3 self.assertAlmostEqual(0.3, result.getValue(1, 0)[1], 4) #1,1 = min(0.4, 1.0, 0.6) = 0.4 self.assertAlmostEqual(0.4, result.getValue(1, 1)[1], 4)
def test_getConvertedValue_with_default_values(self): obj = _ravefield.new() obj.setData(numpy.zeros((10,10), numpy.uint8)) obj.setValue(0,1,1.0) obj.setValue(0,2,2.0) obj.setValue(0,3,3.0) obj.setValue(0,4,4.0) self.assertAlmostEqual(1.0, obj.getConvertedValue(0,1)[1], 4) self.assertAlmostEqual(2.0, obj.getConvertedValue(0,2)[1], 4) self.assertAlmostEqual(3.0, obj.getConvertedValue(0,3)[1], 4) self.assertAlmostEqual(4.0, obj.getConvertedValue(0,4)[1], 4)
def test_getQualityFieldByHowTask(self): obj = _cartesian.new() field1 = _ravefield.new() field2 = _ravefield.new() field3 = _ravefield.new() field1.addAttribute("how/task", "se.task.1") field2.addAttribute("how/task", "se.task.2") field3.addAttribute("how/notask", "abc") obj.addQualityField(field1) obj.addQualityField(field2) obj.addQualityField(field3) self.assertEqual( "se.task.1", obj.getQualityFieldByHowTask("se.task.1").getAttribute("how/task")) self.assertEqual( "se.task.2", obj.getQualityFieldByHowTask("se.task.2").getAttribute("how/task")) self.assertEqual(None, obj.getQualityFieldByHowTask("abc"))
def test_addField_dev_bird(self): obj = _verticalprofile.new() f = _ravefield.new() f.setData(numpy.zeros((10, 1), numpy.uint8)) f.addAttribute("how/this", 1.0) f.addAttribute("what/quantity", "dev_bird") obj.addField(f) result = obj.getField("dev_bird") self.assertAlmostEqual(1.0, result.getAttribute("how/this"), 4) self.assertEqual("dev_bird", result.getAttribute("what/quantity")) self.assertEqual(10, obj.getLevels())