From 7548f72c83d60ddacae54a504303c163124cab68 Mon Sep 17 00:00:00 2001 From: Anders Henja Date: Tue, 17 Nov 2015 13:03:40 +0100 Subject: [PATCH] Ticket 504: How attributes should be copied from volume to profile --- lib/wrwp.c | 52 ++++++++++++++++ test/pytest/WrwpTest.py | 68 +++++++++++++++++++++ test/pytest/fixtures/selul_pvol_20151114T1615Z.h5 | Bin 0 -> 77686 bytes 3 files changed, 120 insertions(+), 0 deletions(-) create mode 100644 test/pytest/fixtures/selul_pvol_20151114T1615Z.h5 diff --git a/lib/wrwp.c b/lib/wrwp.c index 7f831f4..c7f0c5a 100644 --- a/lib/wrwp.c +++ b/lib/wrwp.c @@ -63,6 +63,35 @@ static void Wrwp_destructor(RaveCoreObject* obj) { } +static int WrwpInternal_findAndAddAttribute(VerticalProfile_t* vp, PolarVolume_t* pvol, const char* name) +{ + int nscans = PolarVolume_getNumberOfScans(pvol); + int i = 0; + int found = 0; + for (i = 0; i < nscans && found == 0; i++) { + PolarScan_t* scan = PolarVolume_getScan(pvol, i); + if (scan != NULL && PolarScan_hasAttribute(scan, name)) { + RaveAttribute_t* attr = PolarScan_getAttribute(scan, name); + VerticalProfile_addAttribute(vp, attr); + found = 1; + RAVE_OBJECT_RELEASE(attr); + } + RAVE_OBJECT_RELEASE(scan); + } + return found; +} + +static int WrwpInternal_addIntAttribute(VerticalProfile_t* vp, const char* name, int value) +{ + RaveAttribute_t* attr = RaveAttributeHelp_createLong(name, value); + int result = 0; + if (attr != NULL) { + result = VerticalProfile_addAttribute(vp, attr); + } + RAVE_OBJECT_RELEASE(attr); + return result; +} + /*@} End of Private functions */ /*@{ Interface functions */ @@ -387,6 +416,29 @@ VerticalProfile_t* Wrwp_generate(Wrwp_t* self, PolarVolume_t* inobj) { VerticalProfile_setDate(result, PolarVolume_getDate(inobj)); VerticalProfile_setTime(result, PolarVolume_getTime(inobj)); + WrwpInternal_findAndAddAttribute(result, inobj, "how/highprf"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/lowprf"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/pulsewidth"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/wavelength"); + + WrwpInternal_findAndAddAttribute(result, inobj, "how/RXbandwidth"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/RXloss"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/TXloss"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/antgain"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/azmethod"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/binmethod"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/malfunc"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/nomTXpower"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/radar_msg"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/radconstH"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/radomeloss"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/rpm"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/software"); + WrwpInternal_findAndAddAttribute(result, inobj, "how/system"); + + WrwpInternal_addIntAttribute(result, "how/minrange", Wrwp_getDMIN(self)); + WrwpInternal_addIntAttribute(result, "how/maxrange", Wrwp_getDMAX(self)); + done: RAVE_OBJECT_RELEASE(polnav); RAVE_OBJECT_RELEASE(ff_field); diff --git a/test/pytest/WrwpTest.py b/test/pytest/WrwpTest.py index bff9532..bf412d8 100644 --- a/test/pytest/WrwpTest.py +++ b/test/pytest/WrwpTest.py @@ -32,6 +32,7 @@ import _raveio, _rave class WrwpTest(unittest.TestCase): FIXTURE = "fixtures/pvol_seang_20090501T120000Z.h5" + FIXTURE2 = "fixtures/selul_pvol_20151114T1615Z.h5" def setUp(self): _helpers.triggerMemoryStatus() @@ -160,6 +161,73 @@ class WrwpTest(unittest.TestCase): robj = _raveio.new() robj.object = vp robj.save("slask.h5") + + def test_generate_with_several_howattributes(self): + pvol = _raveio.open(self.FIXTURE2).object + generator = _wrwp.new() + generator.hmax = 2000 + generator.dz = 200 + + vp = generator.generate(pvol) + + ff = vp.getFF() + ff_dev = vp.getFFDev() + dd = vp.getDD() + dbz = vp.getDBZ() + dbz_dev = vp.getDBZDev() + + self.assertEquals(1, ff.xsize) + self.assertEquals(10, ff.ysize) + self.assertEquals("ff", ff.getAttribute("what/quantity")) + + self.assertEquals(1, ff_dev.xsize) + self.assertEquals(10, ff_dev.ysize) + self.assertEquals("ff_dev", ff_dev.getAttribute("what/quantity")) + + self.assertEquals(1, dd.xsize) + self.assertEquals(10, dd.ysize) + self.assertEquals("dd", dd.getAttribute("what/quantity")) + + self.assertEquals(1, dbz.xsize) + self.assertEquals(10, dbz.ysize) + self.assertEquals("dbz", dbz.getAttribute("what/quantity")) + + self.assertEquals(1, dbz_dev.xsize) + self.assertEquals(10, dbz_dev.ysize) + self.assertEquals("dbz_dev", dbz_dev.getAttribute("what/quantity")) + + self.assertEquals(10, vp.getLevels()) + self.assertEquals(200, vp.interval) + self.assertEquals(100, vp.minheight) + self.assertEquals(2000, vp.maxheight) + self.assertEquals(pvol.source, vp.source) + self.assertEquals(pvol.date, vp.date) + self.assertEquals(pvol.time, vp.time) + + self.assertEquals(900, vp.getAttribute("how/lowprf")) + self.assertEquals(1200, vp.getAttribute("how/highprf")) + self.assertAlmostEqual(0.61, vp.getAttribute("how/pulsewidth"), 4) + self.assertAlmostEqual(5.35, vp.getAttribute("how/wavelength"), 4) + self.assertAlmostEqual(0.8, vp.getAttribute("how/RXbandwidth"), 4) + self.assertAlmostEqual(3.1, vp.getAttribute("how/RXloss"), 4) + self.assertAlmostEqual(1.9, vp.getAttribute("how/TXloss"), 4) + self.assertAlmostEqual(44.9, vp.getAttribute("how/antgain"), 4) + self.assertEquals("AVERAGE", vp.getAttribute("how/azmethod")) + self.assertEquals("AVERAGE", vp.getAttribute("how/binmethod")) + self.assertEquals("False", vp.getAttribute("how/malfunc")) + self.assertAlmostEqual(277.4, vp.getAttribute("how/nomTXpower"), 4) + self.assertEquals("b94 3dd 000 000 000:", vp.getAttribute("how/radar_msg"), 4) + self.assertAlmostEqual(73.101, vp.getAttribute("how/radconstH"), 4) + self.assertAlmostEqual(0.2, vp.getAttribute("how/radomeloss"), 4) + self.assertAlmostEqual(2.0, vp.getAttribute("how/rpm"), 4) + self.assertEquals("PARTEC2", vp.getAttribute("how/software")) + self.assertEquals("ERIC", vp.getAttribute("how/system")) + self.assertEquals(4000, vp.getAttribute("how/minrange")) + self.assertEquals(40000, vp.getAttribute("how/maxrange")) + + robj = _raveio.new() + robj.object = vp + robj.save("slask.h5") if __name__ == "__main__": unittest.main() \ No newline at end of file diff --git a/test/pytest/fixtures/selul_pvol_20151114T1615Z.h5 b/test/pytest/fixtures/selul_pvol_20151114T1615Z.h5 new file mode 100644 index 0000000000000000000000000000000000000000..c26252a8e6a52feddae7fc3be14ff11416320f19 GIT binary patch literal 77686 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