You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@climate.apache.org by ah...@apache.org on 2013/08/19 23:58:23 UTC
svn commit: r1515627 -
/incubator/climate/branches/RefactorPlots/rcmet/src/main/python/rcmes/utils/misc.py
Author: ahart
Date: Mon Aug 19 21:58:23 2013
New Revision: 1515627
URL: http://svn.apache.org/r1515627
Log:
CLIMATE-259: update misc.py to represent parsed subregion data as numpy masked arrays, provide clean message output
Modified:
incubator/climate/branches/RefactorPlots/rcmet/src/main/python/rcmes/utils/misc.py
Modified: incubator/climate/branches/RefactorPlots/rcmet/src/main/python/rcmes/utils/misc.py
URL: http://svn.apache.org/viewvc/incubator/climate/branches/RefactorPlots/rcmet/src/main/python/rcmes/utils/misc.py?rev=1515627&r1=1515626&r2=1515627&view=diff
==============================================================================
--- incubator/climate/branches/RefactorPlots/rcmet/src/main/python/rcmes/utils/misc.py (original)
+++ incubator/climate/branches/RefactorPlots/rcmet/src/main/python/rcmes/utils/misc.py Mon Aug 19 21:58:23 2013
@@ -1002,39 +1002,45 @@ def make_list_of_era_surf_files(firstTim
return filenamelist
-#
-
def assign_subRgns_from_a_text_file(infile):
- # Read pre-fabricated sugregion information from a text file
- # Note: python indexing includes the beginning point but excludes the ending point
- f = open(infile, 'r')
- for i in np.arange(8):
- string = f.readline()
- print 'Line ', i, ': Content ', string
- string = f.readline()
- numSubRgn = int(string[20:22])
- print 'numSubRgn = ', numSubRgn
- for i in np.arange(3):
- string = f.readline()
- # Read input string and extract subRegion info (name, longs, lats) from the string
+ '''
+ Extract subregion definitions from a text file
+
+ Input:
+ infile - string representing the path to the subregion definition config file
+
+ Output:
+ numSubRgn - the number of subregion definitions extracted from the input file
+ subRgnName - a Numpy masked array of subregion names
+ subRgnLon0 - a Numpy masked array of subregion "Degrees East" values
+ subRgnLon1 - a Numpy masked array of subregion "Degrees West" values
+ subRgnLat0 - a Numpy masked array of subregion "Degrees North" values
+ subRgnLat1 - a Numpy masked array of subregion "Degrees South" values
+ '''
+
+ # Parse subregions from provided file
+ subregions = readSubRegionsFile(infile)
+ numSubRgn = len(subregions)
+
+ print subregions
+
+ # Define Numpy masked arrays to hold the subregion definition data
subRgnName = []
subRgnLon0 = ma.zeros((numSubRgn))
subRgnLon1 = ma.zeros((numSubRgn))
subRgnLat0 = ma.zeros((numSubRgn))
subRgnLat1 = ma.zeros((numSubRgn))
+
+ # Populate the arrays with the data extracted from the file
for i in np.arange(numSubRgn):
- string = f.readline()
- subRgnName.append(string[0:19])
- subRgnLon0[i] = float(string[30:37])
- subRgnLon1[i] = float(string[40:47])
- subRgnLat0[i] = float(string[50:55])
- subRgnLat1[i] = float(string[60:65])
- f.close()
- print 'subRgnName: ', subRgnName
- print 'subRgnLon0: ', subRgnLon0
- print 'subRgnLon1: ', subRgnLon1
- print 'subRgnLat0: ', subRgnLat0
- print 'subRgnLat1: ', subRgnLat1
+ parts = region_parts[i]
+ subRgnName.append(parts[0].strip('"'))
+ subRgnLon0[i] = float(parts[1])
+ subRgnLon1[i] = float(parts[2])
+ subRgnLat0[i] = float(parts[3])
+ subRgnLat1[i] = float(parts[4])
+
+ # Return the computed arrays
return numSubRgn, subRgnName, subRgnLon0, subRgnLon1, subRgnLat0, subRgnLat1
def createSubRegionObjectInteractively():
@@ -1379,3 +1385,29 @@ def select_metrics():
return metricOption
+
+def msg(key=None, val=None, indent=0, returnResult=False):
+ ''' Output formatted messages to stdout, with support for indentation
+ and nicer printing of lists and dicts
+ '''
+ if key == None:
+ message = ' '*indent
+ else:
+ message = ' '*indent + (key if val == None else key + ':\t')
+ if isinstance(val, dict):
+ values = ['{0}: {1}'.format(' '*(indent+2) + str(k),
+ msg(val=v, indent=indent+2, returnResult=True))
+ for k,v in val.items()]
+ message += '\n' + '\n'.join(values)
+ elif isinstance(val, (list, tuple)):
+ values = [' '*(indent+2) +
+ msg(val=v, indent=indent+2, returnResult=True)
+ for v in val]
+ message += '\n' + '\n'.join(values)
+ else:
+ if val != None:
+ message += str(val)
+ if returnResult:
+ return message
+ else:
+ print message