예제 #1
0
    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)))
예제 #2
0
 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())
예제 #3
0
    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)
예제 #4
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)
예제 #5
0
 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)
예제 #6
0
    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()
예제 #7
0
    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))
예제 #8
0
 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)
예제 #9
0
 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)
예제 #10
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)
예제 #11
0
 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)
예제 #12
0
    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
예제 #13
0
    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)
예제 #14
0
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
예제 #15
0
 def testThreshold(self):
     a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0)
     b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH"))
     b.threshold(80)
예제 #16
0
 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"))
예제 #17
0
 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())
예제 #18
0
 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)
예제 #19
0
 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)
예제 #20
0
 def testShip(self):
     a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0)
     b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH"))
     b.ship(15, 8)
예제 #21
0
 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)
예제 #22
0
 def testFromRave_volume(self):
     a = _raveio.open(self.PVOL_TESTFILE)
     b = _fmiimage.fromRave(a.object)
     self.assertNotEqual(-1, str(type(b)).find("FmiImageCore"))
예제 #23
0
 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)
예제 #24
0
 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)
예제 #25
0
 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)
예제 #26
0
 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)
예제 #27
0
 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)
예제 #28
0
 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"))
예제 #29
0
 def testClutter2(self):
     a = _raveio.open(self.PVOL_RIX_TESTFILE).object.getScan(0)
     b = _ropogenerator.new(_fmiimage.fromRave(a, "DBZH"))
     b.clutter(-5, 60)
예제 #30
0
 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"))