Ticket 400: remove logger from PGF plugin
[baltrad-wrwp.git] / pywrwp / baltrad_wrwp_pgf_plugin.py
1 '''
2 Copyright (C) 2010- Swedish Meteorological and Hydrological Institute (SMHI)
3
4 This file is part of RAVE.
5
6 RAVE is free software: you can redistribute it and/or modify
7 it under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 RAVE is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 See the GNU Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public License
17 along with RAVE.  If not, see <http://www.gnu.org/licenses/>.
18
19 '''
20 ## Plugin for generating the wrwp product generation that is initiated from the beast
21 ## framework.
22 ## Register in pgf with
23 ## --name=eu.baltrad.beast.GenerateAcrr
24 ## --floats=minelevationangle,velocitythreshold --ints=interval,maxheight,mindistance,maxdistance -m baltrad_wrwp_pgf_plugin -f generate
25 ##
26 ## The WRWP generation is executed by providing a polar volume that a wind profile is calculated on
27 ##
28 ## wrwp = _wrwp.new()
29 ## wrwp.interval = ...
30 ## wrwp.maxheight = ...
31 ## ...
32 ## result = wrwp.generate(pvol)
33 ## 
34 ## @file
35 ## @author Anders Henja, SMHI
36 ## @date 2013-09-25
37
38 import _wrwp
39 import _rave
40 import _raveio
41 import _polarvolume
42 import string
43 import rave_tempfile
44 import odim_source
45 import math
46 import logging
47
48 from rave_defines import CENTER_ID, GAIN, OFFSET
49
50 ravebdb = None
51 try:
52   import rave_bdb
53   ravebdb = rave_bdb.rave_bdb()
54 except:
55   pass
56
57 ## Creates a dictionary from a rave argument list
58 #@param arglist the argument list
59 #@return a dictionary
60 def arglist2dict(arglist):
61   result={}
62   for i in range(0, len(arglist), 2):
63     result[arglist[i]] = arglist[i+1]
64   return result
65
66 ##
67 # Converts a string into a number, either int or float
68 # @param sval the string to translate
69 # @return the translated value
70 # @throws ValueError if value not could be translated
71 #
72 def strToNumber(sval):
73   try:
74     return int(sval)
75   except ValueError, e:
76     return float(sval)
77
78 ## Creates a composite
79 #@param files the list of files to be used for generating the composite
80 #@param arguments the arguments defining the composite
81 #@return a temporary h5 file with the composite
82 def generate(files, arguments):
83   args = arglist2dict(arguments)
84   wrwp = _wrwp.new()
85   
86   if "interval" in args.keys():
87     wrwp.dz = strToNumber(args["interval"])
88   if "maxheight" in args.keys():
89     wrwp.hmax = strToNumber(args["maxheight"])
90   if "mindistance" in args.keys():
91     wrwp.dmin = args["mindistance"]
92   if "maxdistance" in args.keys():
93     wrwp.dmax = strToNumber(args["maxdistance"]) 
94   if "minelevationangle" in args.keys():
95     wrwp.emin = strToNumber(args["minelevationangle"])
96   if "velocitythreshold" in args.keys():
97     wrwp.vmin = strToNumber(args["velocitythreshold"])
98
99   if len(files) != 1:
100     raise AttributeError, "Must call plugin with _one_ polar volume"
101
102   obj = None
103   if ravebdb != None:
104     obj = ravebdb.get_rave_object(files[0])
105   else:
106     rio = _raveio.open(files[0])
107     obj = rio.object
108
109   if not _polarvolume.isPolarVolume(obj):
110     raise AttributeError, "Must call plugin with a polar volume"
111
112   profile = wrwp.generate(obj)
113   
114   fileno, outfile = rave_tempfile.mktemp(suffix='.h5', close="True")
115   
116   ios = _raveio.new()
117   ios.object = profile
118   ios.filename = outfile
119   ios.save()
120
121   return outfile