def testChainCompare_8bit_and_32bit_Restore(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) result8bit = b.speckNormOld(-20, 24, 8).emitter2(-30, 3, 3).softcut( 5, 170, 180).ship(20, 8).speck( -30, 12).restore(108).toPolarScan().getParameter("DBZH").getData() # Adjust the 8 bit data to be 16 bit instead p = a.getParameter("DBZH") d = p.getData().astype(numpy.int32) p.setData(d) p.undetect = 0.0 p.nodata = 255.0 a.addParameter(p) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) result32bit = b.speckNormOld(-20, 24, 8).emitter2(-30, 3, 3).softcut( 5, 170, 180).ship(20, 8).speck( -30, 12).restore(108).toPolarScan().getParameter("DBZH").getData() self.assertEqual( numpy.int32, result32bit.dtype) # Result should be same type as when created result32bit = result32bit.astype(numpy.uint8) self.assertTrue( numpy.array_equal(result8bit.astype(numpy.int32), result32bit.astype(numpy.int32)))
def testSetImage(self): volume = _raveio.open(self.PVOL_TESTFILE).object image = _fmiimage.fromRave(volume.getScan(0), "DBZH") image2 = _fmiimage.fromRave(volume.getScan(1), "DBZH") a = _ropogenerator.new() a.setImage(image) self.assertTrue(image == a.getImage()) a.setImage(image2) self.assertTrue(image2 == a.getImage())
def testClassify_reclassification(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) b.speck(-20, 5).emitter(3, 6).classify() self.assertEqual("fi.fmi.ropo.detector.classification", b.classification.getAttribute("how/task")) self.assertTrue( b.classification.getAttribute("how/task_args").find("SPECK:") >= 0) self.assertTrue( b.classification.getAttribute("how/task_args").find("EMITTER:") >= 0) self.assertEqual("fi.fmi.ropo.detector.classification_marker", b.markers.getAttribute("how/task")) self.assertTrue( b.markers.getAttribute("how/task_args").find("SPECK:") >= 0) self.assertTrue( b.markers.getAttribute("how/task_args").find("EMITTER:") >= 0) b.clutter(-5, 5).classify() self.assertEqual("fi.fmi.ropo.detector.classification", b.classification.getAttribute("how/task")) self.assertTrue( b.classification.getAttribute("how/task_args").find("SPECK:") >= 0) self.assertTrue( b.classification.getAttribute("how/task_args").find("EMITTER:") >= 0) self.assertTrue( b.classification.getAttribute("how/task_args").find("CLUTTER:") >= 0)
def testToRaveField_datatype2(self): a = _raveio.open(self.SCAN16_TESTFILE).object b = _fmiimage.fromRave(a, "DBZH") b.setValue(1, 1, 10) b.setOriginalValue(1, 1, 20) c = b.toRaveField(2) self.assertNotEqual(-1, str(type(c)).find("RaveFieldCore")) self.assertEqual(numpy.uint8, c.getData().dtype) self.assertAlmostEqual(20.0, c.getValue(1, 1)[1], 4)
def testFromRave_scan(self): a = _raveio.open(self.PVOL_TESTFILE) scan = a.object.getScan(0) b = _fmiimage.fromRave(scan) self.assertNotEqual(-1, str(type(b)).find("FmiImageCore")) self.assertAlmostEqual(scan.getParameter("DBZH").offset, b.offset, 4) self.assertAlmostEqual(scan.getParameter("DBZH").gain, b.gain, 4) self.assertAlmostEqual(scan.getParameter("DBZH").nodata, b.nodata, 4) self.assertAlmostEqual( scan.getParameter("DBZH").undetect, b.undetect, 4)
def testGeneratorSequence_generateClassification(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) c = b.speck(-20, 5).emitter(3, 6).classify().classification output = _raveio.new() output.object = c.toPolarScan("DBZH") output.filename = self.TEMPORARY_FILE output.save()
def testCompare_8bit_and_16bit_Classification(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) result8bit = b.speckNormOld( -20, 24, 8).classify().classification.toRaveField().getData() self.assertEqual(numpy.uint8, result8bit.dtype) a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) # Adjust the 8 bit data to be 16 bit instead p = a.getParameter("DBZH") p.setData(p.getData().astype(numpy.int16)) c = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) result16bit = c.speckNormOld( -20, 24, 8).classify().classification.toRaveField().getData() self.assertEqual(numpy.uint8, result16bit.dtype) self.assertTrue(numpy.array_equal(result8bit, result16bit))
def testToPolarScan_datatype1(self): a = _raveio.open(self.SCAN16_TESTFILE).object b = _fmiimage.fromRave(a, "DBZH") b.setValue(1, 1, 10) b.setOriginalValue(1, 1, 20) c = b.toPolarScan("DBZH", 1) self.assertAlmostEqual(a.elangle, c.elangle, 4) self.assertTrue(c.hasParameter("DBZH")) self.assertEqual(numpy.uint8, c.getParameter("DBZH").getData().dtype) self.assertAlmostEqual(10.0, c.getParameter("DBZH").getValue(1, 1)[1], 4)
def testRestoreSelf(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) oldimg = b.getImage() b.speck(-20, 5).restoreSelf(50) result = b.getImage() self.assertTrue(result != oldimg) self.assertEqual("fi.fmi.ropo.restore", result.getAttribute("how/task")) self.assertTrue( result.getAttribute("how/task_args").find("SPECK:") >= 0)
def testGetProbabilityFieldCount(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) self.assertEqual(0, b.getProbabilityFieldCount()) b.speck(-20, 5).emitter(-20, 4) self.assertEqual(2, b.getProbabilityFieldCount()) c = b.getProbabilityField(0) d = b.getProbabilityField(1) self.assertTrue(c.getAttribute("how/task_args").find("SPECK:") >= 0) self.assertTrue(c.getAttribute("how/task_args").find("EMITTER:") == -1) self.assertTrue(d.getAttribute("how/task_args").find("EMITTER:") >= 0) self.assertTrue(d.getAttribute("how/task_args").find("SPECK:") == -1)
def testFromRave_scan_different_nodataUndetect(self): a = _raveio.open(self.PVOL_TESTFILE) scan = a.object.getScan(0) p = scan.getParameter("DBZH") p.offset = 1.0 p.gain = 2.0 p.nodata = 3.0 p.undetect = 4.0 b = _fmiimage.fromRave(scan) self.assertNotEqual(-1, str(type(b)).find("FmiImageCore")) self.assertAlmostEqual(1.0, b.offset, 4) self.assertAlmostEqual(2.0, b.gain, 4) self.assertAlmostEqual(3.0, b.nodata, 4) self.assertAlmostEqual(4.0, b.undetect, 4)
def XtestChainCompare_8bit_and_16bit_Restore2(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) result8bit = b.speckNormOld(-20, 24, 8).emitter2(-30, 3, 3).softcut( 5, 170, 180).ship(20, 8).speck( -30, 12).restore2(108).toPolarScan().getParameter("DBZH").getData() # Adjust the 8 bit data to be 16 bit instead p = a.getParameter("DBZH") d = p.getData().astype(numpy.int16) p.setData(d) p.undetect = 0.0 p.nodata = 255.0 a.addParameter(p) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) result16bit = b.speckNormOld(-20, 24, 8).emitter2(-30, 3, 3).softcut( 5, 170, 180).ship(20, 8).speck( -30, 12).restore2(108).toPolarScan().getParameter("DBZH").getData() self.assertEqual( numpy.int16, result16bit.dtype) # Result should be same type as when created #result16bit=result16bit.astype(numpy.uint8) # Averaging might be different since the procedure is different for determining mean. atol means that avg different should be max 3 # Verifications is done as absolute(a - b) <= (atol + rtol * absolute(b)) which means that this verifies that # abs(8bit - 16bit) is < 3 self.assertTrue( numpy.allclose(result8bit.astype(numpy.int16), result16bit, atol=3.0, rtol=0.0) ) # If not having values in short range, there might be wrap around. E.g. -1 => 255 which is out of range 3
def testGeneratorSequence_fullExample(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) b.speck(-20, 5).speckNormOld(-20, 5, 16).emitter(-20, 4).emitter2(-10, 4, 2) classification = b.classify().classification.toRaveField() restored = b.restore(50).toRaveField() a.addQualityField(classification) a.addQualityField(restored) output = _raveio.new() output.object = a output.filename = self.TEMPORARY_FILE self.exportFile(output)
def process_scan(scan, options, quality_control_mode=QUALITY_CONTROL_MODE_ANALYZE_AND_APPLY): newscan, gates = PadNrays(scan, options) image = _fmiimage.fromRave(newscan, options.params) param = newscan.getParameter(options.params) rg = _ropogenerator.new(image) if options.threshold: raw_thresh = int((options.threshold - image.offset) / image.gain) rg.threshold(raw_thresh) if options.speck: a, b = options.speck rg.speck(a, b) if scan.elangle * rd < options.elev: if options.speckNormOld: a, b, c = options.speckNormOld rg.speckNormOld(a, b, c) if options.softcut: a, b, c = options.softcut rg.softcut(a, b, c) if options.ship: a, b = options.ship rg.ship(a, b) if options.emitter2: a, b, c = options.emitter2 rg.emitter2(a, b, c) classification = rg.classify().classification.toRaveField() if options.restore: restored = rg.restore(int(options.restore_thresh)).toPolarScan() elif options.restore2: restored = rg.restore2(int(options.restore_thresh)).toPolarScan() restored, classification = UnpadNrays(restored, classification, gates) dbzh = scan.getParameter("DBZH") if quality_control_mode != QUALITY_CONTROL_MODE_ANALYZE: dbzh.setData(restored.getParameter("DBZH").getData()) scan.addParameter(dbzh) scan.addOrReplaceQualityField(classification) return scan
def testThreshold(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) b.threshold(80)
def testToRaveField(self): a = _raveio.open(self.PVOL_TESTFILE).object b = _fmiimage.fromRave(a.getScan(0), "DBZH") c = b.toRaveField() self.assertNotEqual(-1, str(type(c)).find("RaveFieldCore"))
def testNew_withImage(self): image = _fmiimage.fromRave( _raveio.open(self.PVOL_TESTFILE).object.getScan(0), "DBZH") a = _ropogenerator.new(image) self.assertNotEqual(-1, str(type(a)).find("RopoGeneratorCore")) self.assertTrue(image == a.getImage())
def testBiomet(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) b.biomet(-10, 5, 5000, 1)
def testSoftcut(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) b.softcut(-10, 250, 100)
def testShip(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) b.ship(15, 8)
def testSpeck_16bit(self): a = _raveio.open(self.SCAN16_TESTFILE).object b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) c = b.speck(-30, 12).restore(108).toRaveField().getData() self.assertEqual(numpy.int16, c.dtype)
def testFromRave_volume(self): a = _raveio.open(self.PVOL_TESTFILE) b = _fmiimage.fromRave(a.object) self.assertNotEqual(-1, str(type(b)).find("FmiImageCore"))
def testSpeck_differentUndetect_restore(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) a.getParameter("DBZH").undetect = 254.0 b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) c = b.speck(-20, 5).restore(50).toPolarScan().getParameter("DBZH") self.assertAlmostEqual(254.0, c.undetect, 4)
def testRestore2(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) b.sun2(-10, 32, 3, 45, 2).restore2(50)
def testEmitter2(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) b.emitter2(-10, 4, 2)
def testChaining_speckEmitterEmitter2Clutter(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) b.speck(-20, 5).emitter(-10, 4).emitter2(-10, 4, 2).clutter(-5, 5)
def testSpeckNormOld(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) b.speckNormOld(-20, 5, 16)
def testFromRave_withQuantity_scan(self): a = _raveio.open(self.PVOL_TESTFILE) b = _fmiimage.fromRave(a.object.getScan(0), "DBZH") self.assertNotEqual(-1, str(type(b)).find("FmiImageCore"))
def testClutter2(self): a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0) b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH")) b.clutter(-5, 60)
def testToPolarScan(self): a = _raveio.open(self.PVOL_TESTFILE).object b = _fmiimage.fromRave(a.getScan(0), "DBZH") c = b.toPolarScan("DBZH") self.assertAlmostEqual(a.getScan(0).elangle, c.elangle, 4) self.assertTrue(c.hasParameter("DBZH"))