You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@climate.apache.org by jo...@apache.org on 2014/11/20 18:49:16 UTC
[1/4] climate git commit: CLIMATE-530 converted GrADS plots to
matplotlib and removed GrADs dependency in the preprocessing section
Repository: climate
Updated Branches:
refs/heads/master 1adafc136 -> 2b9e15294
CLIMATE-530 converted GrADS plots to matplotlib and removed GrADs dependency in the preprocessing section
Project: http://git-wip-us.apache.org/repos/asf/climate/repo
Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/d144a286
Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/d144a286
Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/d144a286
Branch: refs/heads/master
Commit: d144a286c541957605fcd5ac5e9bfad88272bee1
Parents: dd2d17a
Author: Kim Whitehall <k_...@yahoo.com>
Authored: Mon Nov 17 14:06:05 2014 -0800
Committer: Kim Whitehall <k_...@yahoo.com>
Committed: Mon Nov 17 14:06:05 2014 -0800
----------------------------------------------------------------------
mccsearch/code/mccSearch.py | 798 ++++++++++++-------------------------
mccsearch/code/mccSearchUI.py | 47 +--
2 files changed, 278 insertions(+), 567 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/climate/blob/d144a286/mccsearch/code/mccSearch.py
----------------------------------------------------------------------
diff --git a/mccsearch/code/mccSearch.py b/mccsearch/code/mccSearch.py
index 5484df1..15ce0c6 100644
--- a/mccsearch/code/mccSearch.py
+++ b/mccsearch/code/mccSearch.py
@@ -14,10 +14,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-'''
-# All the functions for the MCC search algorithm
-# Following RCMES dataformat in format (t,lat,lon), value
-'''
from datetime import timedelta, datetime
import glob
@@ -37,12 +33,15 @@ import time
import networkx as nx
import matplotlib.dates as mdates
from matplotlib.dates import DateFormatter,HourLocator
-
+from mpl_toolkits.basemap import Basemap
+from mpl_toolkits.basemap import cm as cmbm
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.colors as mcolors
from matplotlib.ticker import FuncFormatter, FormatStrFormatter
+import ocw.plotter as plotter
+
#----------------------- GLOBAL VARIABLES --------------------------
# --------------------- User defined variables ---------------------
#FYI the lat lon values are not necessarily inclusive of the points given. These are the limits
@@ -2061,332 +2060,64 @@ def find_nearest(thisArray,value):
idx = (np.abs(thisArray-value)).argmin()
return thisArray[idx]
#******************************************************************
-def preprocessingMERG(MERGdirname):
- '''
- Purpose::
- Utility script for unzipping and converting the merg*.Z files from Mirador to
- NETCDF format. The files end up in a folder called mergNETCDF in the directory
- where the raw MERG data is
- NOTE: VERY RAW AND DIRTY
-
- Input::
- Directory to the location of the raw MERG files, preferably zipped
-
- Output::
- none
- Assumptions::
- 1 GrADS (http://www.iges.org/grads/gadoc/) and lats4D (http://opengrads.org/doc/scripts/lats4d/)
- have been installed on the system and the user can access
- 2 User can write files in location where script is being called
- 3 the files havent been unzipped
- '''
-
- os.chdir((MERGdirname+'/'))
- imgFilename = ''
-
- #Just incase the X11 server is giving problems
- subprocess.call('export DISPLAY=:0.0', shell=True)
-
- for files in glob.glob("*-pixel"):
- #for files in glob.glob("*.Z"):
- fname = os.path.splitext(files)[0]
-
- #unzip it
- bash_cmd = 'gunzip ' + files
- subprocess.call(bash_cmd, shell=True)
-
- #determine the time from the filename
- ftime = re.search('\_(.*)\_',fname).group(1)
-
- yy = ftime[0:4]
- mm = ftime[4:6]
- day = ftime[6:8]
- hr = ftime [8:10]
-
- #TODO: must be something more efficient!
-
- if mm=='01':
- mth = 'Jan'
- if mm == '02':
- mth = 'Feb'
- if mm == '03':
- mth = 'Mar'
- if mm == '04':
- mth = 'Apr'
- if mm == '05':
- mth = 'May'
- if mm == '06':
- mth = 'Jun'
- if mm == '07':
- mth = 'Jul'
- if mm == '08':
- mth = 'Aug'
- if mm == '09':
- mth = 'Sep'
- if mm == '10':
- mth = 'Oct'
- if mm == '11':
- mth = 'Nov'
- if mm == '12':
- mth = 'Dec'
-
-
- subprocess.call('rm merg.ctl', shell=True)
- subprocess.call('touch merg.ctl', shell=True)
- replaceExpDset = 'echo DSET ' + fname +' >> merg.ctl'
- replaceExpTdef = 'echo TDEF 99999 LINEAR '+hr+'z'+day+mth+yy +' 30mn' +' >> merg.ctl'
- subprocess.call(replaceExpDset, shell=True)
- subprocess.call('echo "OPTIONS yrev little_endian template" >> merg.ctl', shell=True)
- subprocess.call('echo "UNDEF 330" >> merg.ctl', shell=True)
- subprocess.call('echo "TITLE globally merged IR data" >> merg.ctl', shell=True)
- subprocess.call('echo "XDEF 9896 LINEAR 0.0182 0.036378335" >> merg.ctl', shell=True)
- subprocess.call('echo "YDEF 3298 LINEAR -59.982 0.036383683" >> merg.ctl', shell=True)
- subprocess.call('echo "ZDEF 01 LEVELS 1" >> merg.ctl', shell=True)
- subprocess.call(replaceExpTdef, shell=True)
- subprocess.call('echo "VARS 1" >> merg.ctl', shell=True)
- subprocess.call('echo "ch4 1 -1,40,1,-1 IR BT (add "75" to this value)" >> merg.ctl', shell=True)
- subprocess.call('echo "ENDVARS" >> merg.ctl', shell=True)
-
- #generate the lats4D command for GrADS
- lats4D = 'lats4d -v -q -lat '+LATMIN + ' ' +LATMAX +' -lon ' +LONMIN +' ' +LONMAX +' -time '+hr+'Z'+day+mth+yy + ' -func @+75 ' + '-i merg.ctl' + ' -o ' + fname
-
- #lats4D = 'lats4d -v -q -lat -40 -15 -lon 10 40 -time '+hr+'Z'+day+mth+yy + ' -func @+75 ' + '-i merg.ctl' + ' -o ' + fname
- #lats4D = 'lats4d -v -q -lat -5 40 -lon -90 60 -func @+75 ' + '-i merg.ctl' + ' -o ' + fname
-
- gradscmd = 'grads -blc ' + '\'' +lats4D + '\''
- #run grads and lats4d command
- subprocess.call(gradscmd, shell=True)
- imgFilename = hr+'Z'+day+mth+yy+'.gif'
- tempMaskedImages(imgFilename)
-
- #when all the files have benn converted, mv the netcdf files
- subprocess.call('mkdir mergNETCDF', shell=True)
- subprocess.call('mv *.nc mergNETCDF', shell=True)
- #mv all images
- subprocess.call('mkdir mergImgs', shell=True)
- subprocess.call('mv *.gif mergImgs', shell=True)
- return
#******************************************************************
def postProcessingNetCDF(dataset, dirName = None):
'''
-
- TODO: UPDATE TO PICK UP LIMITS FROM FILE FOR THE GRADS SCRIPTS
-
Purpose::
- Utility script displaying the data in generated NETCDF4 files
- in GrADS
- NOTE: VERY RAW AND DIRTY
+ Utility script displaying the data in NETCDF4 files
Input::
- dataset: integer representing post-processed MERG (1) or TRMM data (2) or original MERG(3)
+ dataset: integer representing original MERG (1) or post-processed MERG data (2) or post-processed TRMM(3)
string: Directory to the location of the raw (MERG) files, preferably zipped
Output::
- images in location as specfied in the code
+ Generates 2D plots in location as specfied in the code
- Assumptions::
- 1 GrADS (http://www.iges.org/grads/gadoc/) and lats4D (http://opengrads.org/doc/scripts/lats4d/)
- have been installed on the system and the user can access
- 2 User can write files in location where script is being called
'''
-
coreDir = os.path.dirname(os.path.abspath(__file__))
- ImgFilename = ''
- frameList=[]
- fileList =[]
- lines =[]
- var =''
- firstTime = True
- printLine = 0
- lineNum = 1
- #Just incase the X11 server is giving problems
- subprocess.call('export DISPLAY=:0.0', shell=True)
-
- prevFrameNum = 0
-
- if dataset == 1:
- var = 'ch4'
- ctlTitle = 'TITLE MCC search Output Grid: Time lat lon'
- ctlLine = 'brightnesstemp=\>ch4 1 t,y,x brightnesstemperature'
- origsFile = coreDir+"/../GrADSscripts/cs1.gs"
- gsFile = coreDir+"/../GrADSscripts/cs2.gs"
- sologsFile = coreDir+"/../GrADSscripts/mergeCE.gs"
- lineNum = 50
-
- elif dataset ==2:
- var = 'precipAcc'
- ctlTitle ='TITLE TRMM MCS accumulated precipitation search Output Grid: Time lat lon '
- ctlLine = 'precipitation_Accumulation=\>precipAcc 1 t,y,x precipAccu'
- origsFile = coreDir+"/../GrADSscripts/cs3.gs"
- gsFile = coreDir+"/../GrADSscripts/cs4.gs"
- sologsFile = coreDir+"/../GrADSscripts/TRMMCE.gs"
- lineNum = 10
-
- elif dataset ==3:
+ imgFilename = ''
+
+ if dataset == 1:
var = 'ch4'
- ctlTitle = 'TITLE MERG DATA'
- ctlLine = 'ch4=\>ch4 1 t,y,x brightnesstemperature'
- origsFile = coreDir+"/../GrADSscripts/cs1.gs"
- sologsFile = coreDir+"/../GrADSscripts/infrared.gs"
- lineNum = 54
+ plotTitle = 'Original MERG data '
+ elif dataset == 2:
+ var = 'brightnesstemp'
+ plotTitle = 'MERG CE data'
+ elif dataset== 3:
+ var = 'precipitation_Accumulation'
+ plotTitle = 'TRMM CE data'
+
#sort files
- os.chdir((dirName+'/'))
- try:
- os.makedirs('ctlFiles')
- except:
- print "ctl file folder created already"
-
+ os.chdir((dirName+'/'))
files = filter(os.path.isfile, glob.glob("*.nc"))
files.sort(key=lambda x: os.path.getmtime(x))
+
for eachfile in files:
fullFname = os.path.splitext(eachfile)[0]
fnameNoExtension = fullFname.split('.nc')[0]
- if dataset == 2 and fnameNoExtension[:4] != "TRMM":
- continue
-
- if dataset == 1 or dataset == 2:
- frameNum = int((fnameNoExtension.split('CE')[0]).split('00F')[1])
-
- #create the ctlFile
- ctlFile1 = dirName+'/ctlFiles/'+fnameNoExtension + '.ctl'
- #the ctl file
- subprocessCall = 'rm ' +ctlFile1
- subprocess.call(subprocessCall, shell=True)
- subprocessCall = 'touch '+ctlFile1
- subprocess.call(subprocessCall, shell=True)
- lineToWrite = 'echo DSET ' + dirName+'/'+fnameNoExtension+'.nc' +' >>' + ctlFile1
- subprocess.call(lineToWrite, shell=True)
- lineToWrite = 'echo DTYPE netcdf >> '+ctlFile1
- subprocess.call(lineToWrite, shell=True)
- lineToWrite = 'echo UNDEF 0 >> '+ctlFile1
- subprocess.call(lineToWrite, shell=True)
- lineToWrite = 'echo '+ctlTitle+' >> '+ctlFile1
- subprocess.call(lineToWrite, shell=True)
fname = dirName+'/'+fnameNoExtension+'.nc'
+
if os.path.isfile(fname):
- #open NetCDF file add info to the accu
- print "opening file ", fname
fileData = Dataset(fname,'r',format='NETCDF4')
+ file_variable = fileData.variables[var][:]
lats = fileData.variables['latitude'][:]
lons = fileData.variables['longitude'][:]
LONDATA, LATDATA = np.meshgrid(lons,lats)
nygrd = len(LATDATA[:,0])
nxgrd = len(LONDATA[0,:])
fileData.close()
- lineToWrite = 'echo XDEF '+ str(nxgrd) + ' LINEAR ' + str(min(lons)) +' '+ str((max(lons)-min(lons))/nxgrd) +' >> ' +ctlFile1
- subprocess.call(lineToWrite, shell=True)
- lineToWrite = 'echo YDEF '+ str(nygrd)+' LINEAR ' + str(min(lats)) + ' ' + str((max(lats)-min(lats))/nygrd) +' >> '+ctlFile1
- subprocess.call(lineToWrite, shell=True)
- lineToWrite = 'echo ZDEF 01 LEVELS 1 >> '+ctlFile1
- subprocess.call(lineToWrite, shell=True)
- lineToWrite = 'echo TDEF 99999 linear 31aug2009 1hr >> '+ctlFile1
- subprocess.call(lineToWrite, shell=True)
- lineToWrite = 'echo VARS 1 >> '+ctlFile1
- subprocess.call(lineToWrite, shell=True)
- lineToWrite ='echo '+ctlLine+' >> '+ctlFile1
- subprocess.call(lineToWrite, shell=True)
- lineToWrite = 'echo ENDVARS >> '+ctlFile1
- subprocess.call(lineToWrite, shell=True)
- lineToWrite = 'echo >> '+ctlFile1
- subprocess.call(lineToWrite, shell=True)
-
- #create plot of just that data
- subprocessCall = 'cp '+ origsFile+' '+sologsFile
- subprocess.call(subprocessCall, shell=True)
-
- ImgFilename = fnameNoExtension + '.gif'
-
- displayCmd = '\''+'d '+ var+'\''+'\n'
- newFileCmd = '\''+'open '+ ctlFile1+'\''+'\n'
- colorbarCmd = '\''+'run cbarn'+'\''+'\n'
- printimCmd = '\''+'printim '+MAINDIRECTORY+'/images/'+ImgFilename+' x800 y600 white\''+'\n'
- quitCmd = '\''+'quit'+'\''+'\n'
-
- GrADSscript = open(sologsFile,'r+')
- lines1 = GrADSscript.readlines()
- GrADSscript.seek(0)
- lines1.insert((1),newFileCmd)
- lines1.insert((lineNum+1),displayCmd)
- lines1.insert((lineNum+2), colorbarCmd)
- lines1.insert((lineNum+3), printimCmd)
- lines1.insert((lineNum + 4), quitCmd)
- GrADSscript.writelines(lines1)
- GrADSscript.close()
- #run the script
- runGrads = 'run '+ sologsFile
- gradscmd = 'grads -blc ' + '\'' +runGrads + '\''+'\n'
- subprocess.call(gradscmd, shell=True)
-
- if dataset == 1 or dataset == 2:
-
- if prevFrameNum != frameNum and firstTime == False:
- #counter for number of files (and for appending info to lines)
- count = 0
- subprocessCall = 'cp '+ origsFile+ ' '+gsFile
- subprocess.call(subprocessCall, shell=True)
- for fileName in frameList:
- if count == 0:
- frame1 = int((fileName.split('.nc')[0].split('CE')[0]).split('00F')[1])
-
- fnameNoExtension = fileName.split('.nc')[0]
- frameNum = int((fnameNoExtension.split('CE')[0]).split('00F')[1])
-
- if frameNum == frame1:
- CE_num = fnameNoExtension.split('CE')[1]
- ImgFilename = fnameNoExtension.split('CE')[0] + '.gif'
- ctlFile1 = dirName+'/ctlFiles/'+fnameNoExtension + '.ctl'
-
- #build cs.gs script will all the CE ctl files and the appropriate display command
- newVar = var+'.'+CE_num
- newDisplayCmd = '\''+'d '+ newVar+'\''+'\n'
- newFileCmd = '\''+'open '+ ctlFile1+'\''+'\n'
- GrADSscript = open(gsFile,'r+')
- lines1 = GrADSscript.readlines()
- GrADSscript.seek(0)
- lines1.insert((1+count),newFileCmd)
- lines1.insert((lineNum+count+1),newDisplayCmd)
- GrADSscript.writelines(lines1)
- GrADSscript.close()
- count +=1
-
- colorbarCmd = '\''+'run cbarn'+'\''+'\n'
- printimCmd = '\''+'printim '+MAINDIRECTORY+'/images/'+ImgFilename+' x800 y600 white\''+'\n'
- quitCmd = '\''+'quit'+'\''+'\n'
- GrADSscript = open(gsFile,'r+')
- lines1 = GrADSscript.readlines()
- GrADSscript.seek(0)
- lines1.insert((lineNum+(count*2)+1), colorbarCmd)
- lines1.insert((lineNum + (count*2)+2), printimCmd)
- lines1.insert((lineNum + (count*2)+3), quitCmd)
- GrADSscript.writelines(lines1)
- GrADSscript.close()
-
- #run the script
- runGrads = 'run '+ gsFile
- gradscmd = 'grads -blc ' + '\'' +runGrads + '\''+'\n'
- subprocess.call(gradscmd, shell=True)
-
- #remove the file data stuff
- subprocessCall = 'cd '+dirName
-
- #reset the list for the next frame
- fileList = frameList
- frameList = []
- for thisFile in fileList:
- if int(((thisFile.split('.nc')[0]).split('CE')[0]).split('00F')[1]) == frameNum:
- frameList.append(thisFile)
- frameList.append(eachfile)
- prevFrameNum = frameNum
-
- else:
- frameList.append(eachfile)
- prevFrameNum = frameNum
- firstTime = False
-
- return
+
+ imgFilename = MAINDIRECTORY+'/images/'+fnameNoExtension + '.gif'
+
+ if dataset == 3:
+ createPrecipPlot(np.squeeze(file_variable, axis=0), LATDATA[:,0], LONDATA[0,:], plotTitle,imgFilename)
+ else:
+ plotter.draw_contour_map(file_variable, LATDATA[:,0], LONDATA[0,:], imgFilename, ptitle=plotTitle)
+
+ return
#******************************************************************
def drawGraph (thisGraph, graphTitle, edgeWeight=None):
'''
@@ -2427,41 +2158,6 @@ def drawGraph (thisGraph, graphTitle, edgeWeight=None):
os.chdir((MAINDIRECTORY+'/'))
subprocess.call('rm test.dot', shell=True)
#******************************************************************
-def tempMaskedImages(imgFilename):
- '''
- Purpose::
- To generate temperature-masked images for a first pass verification
-
- Input::
- imgFilename: filename for the gif file
-
- Output::
- None - Gif images for each file of T_bb less than 250K are generated in folder called mergImgs
-
- Assumptions::
- Same as for preprocessingMERG
- 1 GrADS (http://www.iges.org/grads/gadoc/) and lats4D (http://opengrads.org/doc/scripts/lats4d/)
- have been installed on the system and the user can access
- 2 User can write files in location where script is being called
- 3 the files havent been unzipped
- '''
-
- subprocess.call('rm tempMaskedImages.gs', shell=True)
- subprocess.call('touch tempMaskedImages.gs', shell=True)
- subprocess.call('echo "''\'open merg.ctl''\'" >> tempMaskedImages.gs', shell=True)
- subprocess.call('echo "''\'set mpdset hires''\'" >> tempMaskedImages.gs', shell=True)
- subprocess.call('echo "''\'set lat -5 30''\'" >> tempMaskedImages.gs', shell=True)
- subprocess.call('echo "''\'set lon -40 30''\'" >> tempMaskedImages.gs', shell=True)
- subprocess.call('echo "''\'set cint 10''\'" >> tempMaskedImages.gs', shell=True)
- subprocess.call('echo "''\'set clevs 190 200 210 220 230 240 250''\'" >> tempMaskedImages.gs', shell=True)
- subprocess.call('echo "''\'d ch4+75''\'" >> tempMaskedImages.gs', shell=True)
- subprocess.call('echo "''\'draw title Masked Temp @ '+imgFilename +'\'" >> tempMaskedImages.gs', shell=True)
- subprocess.call('echo "''\'printim '+imgFilename +' x1000 y800''\'" >> tempMaskedImages.gs', shell=True)
- subprocess.call('echo "''\'quit''\'" >> tempMaskedImages.gs', shell=True)
- gradscmd = 'grads -blc ' + '\'run tempMaskedImages.gs''\''
- subprocess.call(gradscmd, shell=True)
- return
-#******************************************************************
def getModelTimes(xtimes, timeVarName):
'''
Taken from process.py, removed the file opening at the beginning
@@ -3158,18 +2854,18 @@ def displayPrecip(finalMCCList):
firstTime = True
return
#******************************************************************
-def plotPrecipHistograms(finalMCCList):
+def plotPrecipHistograms(finalMCCList, num_bins=5):
'''
Purpose::
To create plots (histograms) of the each TRMMnetcdfCEs files
Input::
finalMCCList: a list of dictionaries representing a list of nodes representing a MCC
-
+ num_bins: an integer representing the number of bins
Output::
plots
'''
- num_bins = 5
+
precip =[]
imgFilename = " "
lastTime =" "
@@ -3199,28 +2895,30 @@ def plotPrecipHistograms(finalMCCList):
if eachNode['cloudElementArea'] >= 2400.0:
if (str(thisTime) != lastTime and lastTime != " ") or thisCount == MCSlen:
- plt.close('all')
- title = 'TRMM precipitation distribution for '+ str(thisTime)
+ # plt.close('all')
+ # title = 'TRMM precipitation distribution for '+ str(thisTime)
- fig,ax = plt.subplots(1, facecolor='white', figsize=(7,5))
+ # fig,ax = plt.subplots(1, facecolor='white', figsize=(7,5))
- n,binsdg = np.histogram(precip, num_bins)
- wid = binsdg[1:] - binsdg[:-1]
- plt.bar(binsdg[:-1], n/float(len(precip)), width=wid)
-
- #make percentage plot
- formatter = FuncFormatter(to_percent)
- plt.xlim(min(binsdg), max(binsdg))
- ax.set_xticks(binsdg)
- ax.set_xlabel('Precipitation [mm]', fontsize=12)
- ax.set_ylabel('Area', fontsize=12)
- ax.set_title(title)
- # Set the formatter
- plt.gca().yaxis.set_major_formatter(formatter)
- plt.gca().xaxis.set_major_formatter(FormatStrFormatter('%0.0f'))
- imgFilename = MAINDIRECTORY+'/images/'+str(thisTime)+eachNode['uniqueID']+'TRMMMCS.gif'
+ # n,binsdg = np.histogram(precip, num_bins)
+ # wid = binsdg[1:] - binsdg[:-1]
+ # plt.bar(binsdg[:-1], n/float(len(precip)), width=wid)
+
+ # #make percentage plot
+ # formatter = FuncFormatter(to_percent)
+ # plt.xlim(min(binsdg), max(binsdg))
+ # ax.set_xticks(binsdg)
+ # ax.set_xlabel('Precipitation [mm]', fontsize=12)
+ # ax.set_ylabel('Area', fontsize=12)
+ # ax.set_title(title)
+ # # Set the formatter
+ # plt.gca().yaxis.set_major_formatter(formatter)
+ # plt.gca().xaxis.set_major_formatter(FormatStrFormatter('%0.0f'))
+ # imgFilename = MAINDIRECTORY+'/images/'+str(thisTime)+eachNode['uniqueID']+'TRMMMCS.gif'
- plt.savefig(imgFilename, transparent=True)
+ # plt.savefig(imgFilename, transparent=True)
+ data_names =['Precipitation [mm]','Area']
+ plotter.draw_histogram(precip,data_names,imgFilename, num_bins)
precip =[]
# ------ NETCDF File get info ------------------------------------
@@ -3245,57 +2943,6 @@ def plotPrecipHistograms(finalMCCList):
firstTime = False
return
#******************************************************************
-def plotHistogram(aList, aTitle, aLabel):
- '''
- Purpose::
- To create plots (histograms) of the data entered in aList
-
- Input::
- aList: the list of floating points representing values for e.g. averageArea, averageDuration, etc.
- aTitle: a string representing the title and the name of the plot e.g. "Average area [km^2]"
- aLabel: a string representing the x axis info i.e. the data that is being passed and the units e.g. "Area km^2"
-
- Output::
- plots (gif files)
- '''
- num_bins = 10
- precip =[]
- imgFilename = " "
- lastTime =" "
- firstTime = True
- MCScount = 0
- MSClen =0
- thisCount = 0
-
- #TODO: use try except block instead
- if aList:
-
- fig,ax = plt.subplots(1, facecolor='white', figsize=(7,5))
-
- n,binsdg = np.histogram(aList, num_bins, density=True)
- wid = binsdg[1:] - binsdg[:-1]
- #plt.bar(binsdg[:-1], n/float(len(aList)), width=wid)
- plt.bar(binsdg[:-1], n, width=wid)
- # plt.hist(aList, num_bins, width=wid )
-
-
- #make percentage plot
- #formatter = FuncFormatter(to_percent)
- plt.xlim(min(binsdg), max(binsdg))
- ax.set_xticks(binsdg)#, rotation=45)
- ax.set_xlabel(aLabel, fontsize=12)
- ax.set_title(aTitle)
-
- plt.xticks(rotation =45)
- # Set the formatter
- plt.gca().xaxis.set_major_formatter(FormatStrFormatter('%0.0f'))
- plt.subplots_adjust(bottom=0.2)
-
- imgFilename = MAINDIRECTORY+'/images/'+aTitle.replace(" ","_")+'.gif'
- plt.savefig(imgFilename, facecolor=fig.get_facecolor(), transparent=True)
-
- return
-#******************************************************************
def plotAccTRMM (finalMCCList):
'''
Purpose::
@@ -3309,7 +2956,7 @@ def plotAccTRMM (finalMCCList):
Output::
a netcdf file containing the accumulated precip
- a gif (generated in Grads)
+ a 2D matlablibplot
'''
os.chdir((MAINDIRECTORY+'/TRMMnetcdfCEs'))
fname =''
@@ -3318,9 +2965,6 @@ def plotAccTRMM (finalMCCList):
firstTime = True
replaceExpXDef = ''
- #Just incase the X11 server is giving problems
- subprocess.call('export DISPLAY=:0.0', shell=True)
-
#generate the file name using MCCTimes
#if the file name exists, add it to the accTRMM file
for path in finalMCCList:
@@ -3349,85 +2993,44 @@ def plotAccTRMM (finalMCCList):
accuPrecipRate += precipRate
imgFilename = MAINDIRECTORY+'/images/MCSaccu'+firstPartName+str(thisNode['cloudElementTime']).replace(" ", "_")+'.gif'
- #create new netCDF file
- accuTRMMFile = MAINDIRECTORY+'/TRMMnetcdfCEs/accu'+firstPartName+str(thisNode['cloudElementTime']).replace(" ", "_")+'.nc'
- #write the file
- accuTRMMData = Dataset(accuTRMMFile, 'w', format='NETCDF4')
- accuTRMMData.description = 'Accumulated precipitation data'
- accuTRMMData.calendar = 'standard'
- accuTRMMData.conventions = 'COARDS'
- # dimensions
- accuTRMMData.createDimension('time', None)
- accuTRMMData.createDimension('lat', nygrdTRMM)
- accuTRMMData.createDimension('lon', nxgrdTRMM)
- # variables
- TRMMprecip = ('time','lat', 'lon',)
- times = accuTRMMData.createVariable('time', 'f8', ('time',))
- times.units = 'hours since '+ str(thisNode['cloudElementTime']).replace(" ", "_")[:-6]
- latitude = accuTRMMData.createVariable('latitude', 'f8', ('lat',))
- longitude = accuTRMMData.createVariable('longitude', 'f8', ('lon',))
- rainFallacc = accuTRMMData.createVariable('precipitation_Accumulation', 'f8',TRMMprecip)
- rainFallacc.units = 'mm'
+ #create new netCDF file
+ accuTRMMFile = MAINDIRECTORY+'/TRMMnetcdfCEs/accu'+firstPartName+str(thisNode['cloudElementTime']).replace(" ", "_")+'.nc'
+ #write the file
+ accuTRMMData = Dataset(accuTRMMFile, 'w', format='NETCDF4')
+ accuTRMMData.description = 'Accumulated precipitation data'
+ accuTRMMData.calendar = 'standard'
+ accuTRMMData.conventions = 'COARDS'
+ # dimensions
+ accuTRMMData.createDimension('time', None)
+ accuTRMMData.createDimension('lat', nygrdTRMM)
+ accuTRMMData.createDimension('lon', nxgrdTRMM)
+
+ # variables
+ TRMMprecip = ('time','lat', 'lon',)
+ times = accuTRMMData.createVariable('time', 'f8', ('time',))
+ times.units = 'hours since '+ str(thisNode['cloudElementTime']).replace(" ", "_")[:-6]
+ latitude = accuTRMMData.createVariable('latitude', 'f8', ('lat',))
+ longitude = accuTRMMData.createVariable('longitude', 'f8', ('lon',))
+ rainFallacc = accuTRMMData.createVariable('precipitation_Accumulation', 'f8',TRMMprecip)
+ rainFallacc.units = 'mm'
- longitude[:] = LONTRMM[0,:]
- longitude.units = "degrees_east"
- longitude.long_name = "Longitude"
+ longitude[:] = LONTRMM[0,:]
+ longitude.units = "degrees_east"
+ longitude.long_name = "Longitude"
- latitude[:] = LATTRMM[:,0]
- latitude.units = "degrees_north"
- latitude.long_name ="Latitude"
+ latitude[:] = LATTRMM[:,0]
+ latitude.units = "degrees_north"
+ latitude.long_name ="Latitude"
- rainFallacc[:] = accuPrecipRate[:]
-
- accuTRMMData.close()
-
- #generate the image with GrADS
- #print "ny,nx ", nygrdTRMM, nxgrdTRMM, min(lats), max(lats)
- #the ctl file
- subprocess.call('rm acc.ctl', shell=True)
- subprocess.call('touch acc.ctl', shell=True)
- replaceExpDset = 'echo DSET ' + accuTRMMFile +' >> acc.ctl'
- subprocess.call(replaceExpDset, shell=True)
- subprocess.call('echo "OPTIONS yrev little_endian template" >> acc.ctl', shell=True)
- subprocess.call('echo "DTYPE netcdf" >> acc.ctl', shell=True)
- subprocess.call('echo "UNDEF 0" >> acc.ctl', shell=True)
- subprocess.call('echo "TITLE TRMM MCS accumulated precipitation" >> acc.ctl', shell=True)
- replaceExpXDef = 'echo XDEF '+ str(nxgrdTRMM) + ' LINEAR ' + str(min(lons)) +' '+ str((max(lons)-min(lons))/nxgrdTRMM) +' >> acc.ctl'
- subprocess.call(replaceExpXDef, shell=True)
- #subprocess.call('echo "XDEF 413 LINEAR -9.984375 0.036378335 " >> acc.ctl', shell=True)
- #subprocess.call('echo "YDEF 412 LINEAR 5.03515625 0.036378335 " >> acc.ctl', shell=True)
- replaceExpYDef = 'echo YDEF '+str(nygrdTRMM)+' LINEAR '+str(min(lats))+ ' '+str((max(lats)-min(lats))/nygrdTRMM)+' >>acc.ctl'
- subprocess.call(replaceExpYDef, shell=True)
- subprocess.call('echo "ZDEF 01 LEVELS 1" >> acc.ctl', shell=True)
- subprocess.call('echo "TDEF 99999 linear 31aug2009 1hr" >> acc.ctl', shell=True)
- #subprocess.call(replaceExpTdef, shell=True)
- subprocess.call('echo "VARS 1" >> acc.ctl', shell=True)
- subprocess.call('echo "precipitation_Accumulation=>precipAcc 1 t,y,x precipAccu" >> acc.ctl', shell=True)
- subprocess.call('echo "ENDVARS" >> acc.ctl', shell=True)
-
- #generate GrADS script
- subprocess.call('rm accuTRMM1.gs', shell=True)
- subprocess.call('touch accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'reinit''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'open acc.ctl ''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'set grads off''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'set mpdset hires''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'set gxout shaded''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'set datawarn off''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'d precipacc''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'draw title TRMM Accumulated Precipitation [mm]''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'run cbarn''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'printim '+imgFilename +' x1000 y800 white''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'quit''\'" >> accuTRMM1.gs', shell=True)
- gradscmd = 'grads -blc ' + '\'run accuTRMM1.gs''\''
- subprocess.call(gradscmd, shell=True)
- sys.exit()
+ rainFallacc[:] = accuPrecipRate[:]
- #clean up
- subprocess.call('rm accuTRMM1.gs', shell=True)
- subprocess.call('rm acc.ctl', shell=True)
-
+ accuTRMMData.close()
+
+ #do plot
+ plotTitle = 'TRMM Accumulated [mm]'
+ createPrecipPlot(np.squeeze(accuPrecipRate, axis=0), LATTRMM[:,0], LONTRMM[0,:], plotTitle,imgFilename)
+
return
#******************************************************************
def plotAccuInTimeRange(starttime, endtime):
@@ -3441,15 +3044,12 @@ def plotAccuInTimeRange(starttime, endtime):
Output::
a netcdf file containing the accumulated precip for specified times
- a gif (generated in Grads)
+ a 2D matlablibplot
- TODO: pass of pick up from the NETCDF file the lat, lon and resolution for generating the ctl file
'''
os.chdir((MAINDIRECTORY+'/TRMMnetcdfCEs/'))
- #Just incase the X11 server is giving problems
- subprocess.call('export DISPLAY=:0.0', shell=True)
-
+
imgFilename = ''
firstPartName = ''
firstTime = True
@@ -3515,49 +3115,63 @@ def plotAccuInTimeRange(starttime, endtime):
accuTRMMData.close()
- #generate the image with GrADS
- #the ctl file
- subprocess.call('rm acc.ctl', shell=True)
- subprocess.call('touch acc.ctl', shell=True)
- replaceExpDset = 'echo DSET ' + accuTRMMFile +' >> acc.ctl'
- subprocess.call(replaceExpDset, shell=True)
- subprocess.call('echo "OPTIONS yrev little_endian template" >> acc.ctl', shell=True)
- subprocess.call('echo "DTYPE netcdf" >> acc.ctl', shell=True)
- subprocess.call('echo "UNDEF 0" >> acc.ctl', shell=True)
- subprocess.call('echo "TITLE TRMM MCS accumulated precipitation" >> acc.ctl', shell=True)
- replaceExpXDef = 'echo XDEF '+ str(nxgrdTRMM) + ' LINEAR ' + str(min(lons)) +' '+ str((max(lons)-min(lons))/nxgrdTRMM) +' >> acc.ctl'
- subprocess.call(replaceExpXDef, shell=True)
- replaceExpYDef = 'echo YDEF '+str(nygrdTRMM)+' LINEAR '+str(min(lats))+ ' '+str((max(lats)-min(lats))/nygrdTRMM)+' >>acc.ctl'
- subprocess.call(replaceExpYDef, shell=True)
- #subprocess.call('echo "XDEF 384 LINEAR -8.96875 0.036378335 " >> acc.ctl', shell=True)
- #subprocess.call('echo "YDEF 384 LINEAR 5.03515625 0.036378335 " >> acc.ctl', shell=True)
- subprocess.call('echo "ZDEF 01 LEVELS 1" >> acc.ctl', shell=True)
- subprocess.call('echo "TDEF 99999 linear 31aug2009 1hr" >> acc.ctl', shell=True)
- subprocess.call('echo "VARS 1" >> acc.ctl', shell=True)
- subprocess.call('echo "precipitation_Accumulation=>precipAcc 1 t,y,x precipAccu" >> acc.ctl', shell=True)
- subprocess.call('echo "ENDVARS" >> acc.ctl', shell=True)
- #generate GrADS script
- imgFilename = MAINDIRECTORY+'/images/accu'+starttime+'-'+endtime+'.gif'
- subprocess.call('rm accuTRMM1.gs', shell=True)
- subprocess.call('touch accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'reinit''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'open acc.ctl ''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'set grads off''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'set mpdset hires''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'set gxout shaded''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'set datawarn off''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'d precipacc''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'draw title TRMM Accumulated Precipitation [mm]''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'run cbarn''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'printim '+imgFilename +' x1000 y800 white''\'" >> accuTRMM1.gs', shell=True)
- subprocess.call('echo "''\'quit''\'" >> accuTRMM1.gs', shell=True)
- gradscmd = 'grads -blc ' + '\'run accuTRMM1.gs''\''
- subprocess.call(gradscmd, shell=True)
-
- #clean up
- subprocess.call('rm accuTRMM1.gs', shell=True)
- subprocess.call('rm acc.ctl', shell=True)
+ #plot the stuff
+ imgFilename = MAINDIRECTORY+'/images/accu'+starttime+'-'+endtime+'.gif'
+ plotTitle = "TRMM Accumulated Precipitation [mm] "+starttime+'-'+endtime
+ createPrecipPlot(np.squeeze(accuPrecipRate, axis=0), LATTRMM[:,0], LONTRMM[0,:], plotTitle,imgFilename)
+
+ return
+#******************************************************************
+def createPrecipPlot(dataset, lats, lons, plotTitle,imgFilename):
+ '''
+ Purpose::
+ To create the actual plots for precip data only
+
+ Input::
+ dataset: a 2d numpy (lon,lat) dataset of the precip data to be plotted
+ domainDict: a dictionary with the domain (lons and lats) details required
+ plotTitle: a string representing the title for the plot
+ imgFilename: a string representing the string (including path) of where the plot is to be showed
+
+ Output::
+ A 2D plot with precipitation using the NWS precipitation colormap (from matlplotlib Basemap)
+
+ '''
+
+ fig,ax = plt.subplots(1, facecolor='white', figsize=(8.5,11.)) #, dpi=300)
+ latmin = np.min(lats)
+ latmax = np.max(lats)
+ lonmin = np.min(lons)
+ lonmax = np.max(lons)
+
+ m = Basemap(projection = 'merc', llcrnrlon = lonmin, urcrnrlon = lonmax, llcrnrlat = latmin, urcrnrlat = latmax, resolution = 'l', ax=ax)
+ m.drawcoastlines(linewidth = 1)
+ m.drawcountries(linewidth = 0.75)
+ #draw meridians
+ meridians = np.arange(180.,360.,5.)
+ m.drawmeridians(meridians, labels=[0,0,0,1], linewidth=0.75, fontsize=10)
+ #draw parallels
+ parallels = np.arange(0.,90,5.)
+ m.drawparallels(parallels, labels=[1,0,0,0], linewidth=0.75, fontsize=10)
+
+ #projecting on to the correct map grid
+ longitudes, latitudes = m.makegrid(lons.shape[0],lats.shape[0])
+ x,y = m(longitudes, latitudes)
+
+ # draw filled contours.
+ clevs = [0,1,2.5,5,7.5,10,15,20,30,40,50,70,100,150,200,250,300,400,500,600,750]
+
+ #actually print the map
+ cs = m.contourf(x,y,dataset,clevs,cmap=cmbm.s3pcpn)
+
+ #add colorbar
+ cbar = m.colorbar(cs, location = 'bottom', pad = "10%")
+ cbar.set_label('mm')
+
+ plt.title(plotTitle)
+
+ plt.savefig(imgFilename, facecolor=fig.get_facecolor(), transparent=True)
return
#******************************************************************
def createTextFile(finalMCCList, identifier):
@@ -3827,15 +3441,17 @@ def createTextFile(finalMCCList, identifier):
areaAvg = sum(averageAreas)/ len(finalMCCList)
#create histogram plot here
if len(averageAreas) > 1:
- plotHistogram(averageAreas, "Average Area [km^2]", "Area [km^2]")
+ imgFilename = MAINDIRECTORY+'/images/averageAreas.gif'
+ plotter.draw_histogram(averageAreas, ["Average Area [km^2]", "Area [km^2]"],imgFilename,10)
#Amax: average maximum area
if maxAreaCounter > 0.0: #and avgMaxArea > 0.0 :
amax = sum(avgMaxArea)/ maxAreaCounter
#create histogram plot here
if len(avgMaxArea) > 1:
- plotHistogram(avgMaxArea, "Maximum Area [km^2]", "Area [km^2]")
-
+ imgFilename = MAINDIRECTORY+'/images/avgMaxArea.gif'
+ plotter.draw_histogram(avgMaxArea, ["Maximum Area [km^2]", "Area [km^2]"], imgFilename,10)
+
#v_avg: calculate the average propagation speed
if speedCounter > 0 : # and averagePropagationSpeed > 0.0
averagePropagationSpeed /= speedCounter
@@ -3864,7 +3480,8 @@ def createTextFile(finalMCCList, identifier):
if len(avgPrecipArea) > 0:
precipAreaAvg = sum(avgPrecipArea)/len(avgPrecipArea)
if len(avgPrecipArea) > 1:
- plotHistogram(avgPrecipArea, "Average Rainfall Area [km^2]", "Area [km^2]")
+ imgFilename = MAINDIRECTORY+'/images/avgPrecipArea.gif'
+ plotter.draw_histogram(avgPrecipArea, ["Average Rainfall Area [km^2]", "Area [km^2]"],imgFilename,10)
sTime = str(averageTime(startTimes))
@@ -3947,6 +3564,111 @@ def cmap_discretize(cmap, N):
# Return colormap object.
return mcolors.LinearSegmentedColormap(cmap.name + "_%d"%N, cdict, 1024)
#******************************************************************
-
+# def preprocessingMERG(MERGdirname):
+# '''
+# Purpose::
+# Utility script for unzipping and converting the merg*.Z files from Mirador to
+# NETCDF format. The files end up in a folder called mergNETCDF in the directory
+# where the raw MERG data is
+# NOTE: VERY RAW AND DIRTY
+
+# Input::
+# Directory to the location of the raw MERG files, preferably zipped
+
+# Output::
+# none
+
+# Assumptions::
+# 1 GrADS (http://www.iges.org/grads/gadoc/) and lats4D (http://opengrads.org/doc/scripts/lats4d/)
+# have been installed on the system and the user can access
+# 2 User can write files in location where script is being called
+# 3 the files havent been unzipped
+# '''
+
+# os.chdir((MERGdirname+'/'))
+# imgFilename = ''
+
+# #Just incase the X11 server is giving problems
+# subprocess.call('export DISPLAY=:0.0', shell=True)
+
+# for files in glob.glob("*-pixel"):
+# #for files in glob.glob("*.Z"):
+# fname = os.path.splitext(files)[0]
+
+# #unzip it
+# bash_cmd = 'gunzip ' + files
+# subprocess.call(bash_cmd, shell=True)
+
+# #determine the time from the filename
+# ftime = re.search('\_(.*)\_',fname).group(1)
+
+# yy = ftime[0:4]
+# mm = ftime[4:6]
+# day = ftime[6:8]
+# hr = ftime [8:10]
+
+# #TODO: must be something more efficient!
+
+# if mm=='01':
+# mth = 'Jan'
+# if mm == '02':
+# mth = 'Feb'
+# if mm == '03':
+# mth = 'Mar'
+# if mm == '04':
+# mth = 'Apr'
+# if mm == '05':
+# mth = 'May'
+# if mm == '06':
+# mth = 'Jun'
+# if mm == '07':
+# mth = 'Jul'
+# if mm == '08':
+# mth = 'Aug'
+# if mm == '09':
+# mth = 'Sep'
+# if mm == '10':
+# mth = 'Oct'
+# if mm == '11':
+# mth = 'Nov'
+# if mm == '12':
+# mth = 'Dec'
+
+
+# subprocess.call('rm merg.ctl', shell=True)
+# subprocess.call('touch merg.ctl', shell=True)
+# replaceExpDset = 'echo DSET ' + fname +' >> merg.ctl'
+# replaceExpTdef = 'echo TDEF 99999 LINEAR '+hr+'z'+day+mth+yy +' 30mn' +' >> merg.ctl'
+# subprocess.call(replaceExpDset, shell=True)
+# subprocess.call('echo "OPTIONS yrev little_endian template" >> merg.ctl', shell=True)
+# subprocess.call('echo "UNDEF 330" >> merg.ctl', shell=True)
+# subprocess.call('echo "TITLE globally merged IR data" >> merg.ctl', shell=True)
+# subprocess.call('echo "XDEF 9896 LINEAR 0.0182 0.036378335" >> merg.ctl', shell=True)
+# subprocess.call('echo "YDEF 3298 LINEAR -59.982 0.036383683" >> merg.ctl', shell=True)
+# subprocess.call('echo "ZDEF 01 LEVELS 1" >> merg.ctl', shell=True)
+# subprocess.call(replaceExpTdef, shell=True)
+# subprocess.call('echo "VARS 1" >> merg.ctl', shell=True)
+# subprocess.call('echo "ch4 1 -1,40,1,-1 IR BT (add "75" to this value)" >> merg.ctl', shell=True)
+# subprocess.call('echo "ENDVARS" >> merg.ctl', shell=True)
+
+# #generate the lats4D command for GrADS
+# lats4D = 'lats4d -v -q -lat '+LATMIN + ' ' +LATMAX +' -lon ' +LONMIN +' ' +LONMAX +' -time '+hr+'Z'+day+mth+yy + ' -func @+75 ' + '-i merg.ctl' + ' -o ' + fname
+
+# #lats4D = 'lats4d -v -q -lat -40 -15 -lon 10 40 -time '+hr+'Z'+day+mth+yy + ' -func @+75 ' + '-i merg.ctl' + ' -o ' + fname
+# #lats4D = 'lats4d -v -q -lat -5 40 -lon -90 60 -func @+75 ' + '-i merg.ctl' + ' -o ' + fname
+
+# gradscmd = 'grads -blc ' + '\'' +lats4D + '\''
+# #run grads and lats4d command
+# subprocess.call(gradscmd, shell=True)
+# imgFilename = hr+'Z'+day+mth+yy+'.gif'
+# tempMaskedImages(imgFilename)
+
+# #when all the files have benn converted, mv the netcdf files
+# subprocess.call('mkdir mergNETCDF', shell=True)
+# subprocess.call('mv *.nc mergNETCDF', shell=True)
+# #mv all images
+# subprocess.call('mkdir mergImgs', shell=True)
+# subprocess.call('mv *.gif mergImgs', shell=True)
+# return
http://git-wip-us.apache.org/repos/asf/climate/blob/d144a286/mccsearch/code/mccSearchUI.py
----------------------------------------------------------------------
diff --git a/mccsearch/code/mccSearchUI.py b/mccsearch/code/mccSearchUI.py
index 91670e4..0794fd2 100644
--- a/mccsearch/code/mccSearchUI.py
+++ b/mccsearch/code/mccSearchUI.py
@@ -18,17 +18,9 @@
# Wizard for running the mccSearch program
'''
-import sys
import networkx as nx
-import numpy as np
-import numpy.ma as ma
-import os
-import matplotlib.pyplot as plt
-import subprocess
-
#mccSearch modules
import mccSearch
-#import files
def main():
CEGraph = nx.DiGraph()
@@ -47,26 +39,23 @@ def main():
preprocessing = ''
rawMERG = ''
- #for GrADs
- subprocess.call('export DISPLAY=:0.0', shell=True)
-
-
+
print "Running MCCSearch ..... \n"
DIRS['mainDirStr'] = raw_input("> Please enter working directory: \n" ) # This is where data created will be stored
- preprocessing = raw_input ("> Do you need to preprocess the MERG files? [y/n]: \n")
- while preprocessing.lower() != 'n':
- if preprocessing.lower() == 'y':
- #get location for raw files
- rawMERG = raw_input("> Please enter the directory to the RAW MERG (.Z) files: \n")
- #run preprocessing
- mccSearch.preprocessingMERG(rawMERG)
- continue
- elif preprocessing.lower() == 'n' :
- pass
- else:
- print "Error! Invalid choice "
- preprocessing = raw_input ("> Do you need to preprocess the MERG files? [y/n]: \n")
+ # preprocessing = raw_input ("> Do you need to preprocess the MERG files? [y/n]: \n")
+ # while preprocessing.lower() != 'n':
+ # if preprocessing.lower() == 'y':
+ # #get location for raw files
+ # rawMERG = raw_input("> Please enter the directory to the RAW MERG (.Z) files: \n")
+ # #run preprocessing
+ # mccSearch.preprocessingMERG(rawMERG)
+ # continue
+ # elif preprocessing.lower() == 'n' :
+ # pass
+ # else:
+ # print "Error! Invalid choice "
+ # preprocessing = raw_input ("> Do you need to preprocess the MERG files? [y/n]: \n")
#get the location of the MERG and TRMM data
@@ -169,7 +158,7 @@ def plotMenu(MCCList, MCSList):
try:
if option == 1:
print "Generating Accumulated Rainfall from TRMM for the entire period ...\n"
- mccSearch.plotAccTRMM(MCCList)
+ mccSearch.plotAccTRMM(MCSList)
if option == 2:
startDateTime = raw_input("> Please enter the start date and time yyyy-mm-dd_hr:mm:ss format: \n")
endDateTime = raw_input("> Please enter the end date and time yyyy-mm-dd_hr:mm:ss format: \n")
@@ -251,13 +240,13 @@ def postProcessingplotMenu(DIRS):
try:
if option == 1:
print "Generating images from the original MERG dataset ... \n"
- mccSearch.postProcessingNetCDF(3, DIRS['CEoriDirName'])
+ mccSearch.postProcessingNetCDF(1, DIRS['CEoriDirName'])
if option == 2:
print "Generating images from the cloud elements using MERG IR data ... \n"
- mccSearch.postProcessingNetCDF(1, CEdirName)
+ mccSearch.postProcessingNetCDF(2, CEdirName)
if option == 3:
print "Generating precipitation accumulation images from the cloud elements using TRMM data ... \n"
- mccSearch.postProcessingNetCDF(2, TRMMCEdirName)
+ mccSearch.postProcessingNetCDF(3, TRMMCEdirName)
# if option == 4:
# print "Generating Accumulated TRMM rainfall from cloud elements for each MCS ... \n"
# featureType = int(raw_input("> Please enter type of MCS MCC-1 or MCS-2: \n"))
[4/4] climate git commit: Resolve CLIMATE-530. Merge PR #141.
Posted by jo...@apache.org.
Resolve CLIMATE-530. Merge PR #141.
Project: http://git-wip-us.apache.org/repos/asf/climate/repo
Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/2b9e1529
Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/2b9e1529
Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/2b9e1529
Branch: refs/heads/master
Commit: 2b9e15294f6c3eca21f82bc601f7b141bdbe8b57
Parents: bacdd2d f2da047
Author: Michael Joyce <jo...@apache.org>
Authored: Thu Nov 20 09:48:21 2014 -0800
Committer: Michael Joyce <jo...@apache.org>
Committed: Thu Nov 20 09:48:21 2014 -0800
----------------------------------------------------------------------
mccsearch/docs/mccsearch.md | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
[2/4] climate git commit: CLIMATE-530 - updated documentation
Posted by jo...@apache.org.
CLIMATE-530 - updated documentation
- reflecting the removal of the GrADS dependency
Project: http://git-wip-us.apache.org/repos/asf/climate/repo
Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/f2da0476
Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/f2da0476
Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/f2da0476
Branch: refs/heads/master
Commit: f2da04768ea477713daada7a80ae5a473f3cb5ed
Parents: d56dff1
Author: Kim Whitehall <kw...@users.noreply.github.com>
Authored: Mon Nov 17 15:18:51 2014 -0800
Committer: Kim Whitehall <kw...@users.noreply.github.com>
Committed: Mon Nov 17 15:18:51 2014 -0800
----------------------------------------------------------------------
mccsearch/docs/mccsearch.md | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/climate/blob/f2da0476/mccsearch/docs/mccsearch.md
----------------------------------------------------------------------
diff --git a/mccsearch/docs/mccsearch.md b/mccsearch/docs/mccsearch.md
index 22b9fdc..a879093 100644
--- a/mccsearch/docs/mccsearch.md
+++ b/mccsearch/docs/mccsearch.md
@@ -2,7 +2,7 @@
##Introduction and Context
This program searches for a weather feature known as a Mesoscale Convective Complex (MCC) in gridded infrared and precipitation rate satellite data (MERG and TRMM datasets have been tested).
-The work is direct output from [Dr. Kim Whitehall's](http://www.kimwhitehall.com/) Ph.D. thesis which acts as the basis and driver for inclusion in OCW.
+The work is direct output from [Kim Whitehall's](http://www.kimwhitehall.com/) Ph.D. thesis which acts as the basis and driver for inclusion in OCW.
Data from MERG and TRMM datasets is read from netCDF files into arrays with the dimensions time, latitude, longitude, value. From the data we can then infer and generate a number of things:
* a graph representing Cloud Elements (CE)
@@ -19,7 +19,7 @@ If you are still reading this file it means that you wish to use the mccsearch p
* NumPy (verified with 1.9.0)- http://www.scipy.org/scipylib/download.html
* Networkx (verified with 3.4.0) - https://networkx.github.io/download.html
* matplotlib (verified with 1.4.0)- http://matplotlib.org/downloads.html
- * GrADS (verified against OpenGrADS grads2 Version 2.0.1.oga.1) - http://sourceforge.net/projects/opengrads/files/
+ Optional if preprocessing of raw MERG files is required
* LATS4D - http://sourceforge.net/projects/opengrads/files/
So, without further a-do, lets progress with using mccsearch.
@@ -27,18 +27,15 @@ So, without further a-do, lets progress with using mccsearch.
##Source Code
* [mccSearch.py](../code/mccSearch.py) contains the primary MCC functionality
* [mccSearchUI.py](../code/mccSearchUI.py) contains a wizard type Q&A for running the mccSearch program
- * [process.py](../code/process.py) currently contains some required functions from older version of OCW. This code will most likely be factored out by the release of OCW 0.5.
- * [file.py](../code/files.py) currently contains some required functions from older version of OCW. This code will most likely be factored out by the release of OCW 0.5.
* [mainProg.py](../code/mainProg.py) contains a sample of the general workflow of the order the modules should be called. You will have to supply three main input arguments:
* mainDirStr : a directory where you wish all the output files –images, textfiles, clipped netCDF files- to be stored
* TRMMdirName : a directory containing the original TRMM data in netCDF format
* CEoriDirName : a directory containing the original MERG data in netCDF format
- * a [GrADsScripts](../GrADsScripts/) folder containing templating and configuration files used within the execution of mccsearch.
-
+
##Download MERG and TRMM data
The following assumptions are made:
* Input data are in one folder. mainProg.py looks for MERG data as a single directory 'CEoriDirName' and TRMM data as a single directory 'TRMMdirName', just as described above. These directories cannot be the same and the data all needs to be of type netCDF data files only.
- * THERE IS NO FILE CHECKING. So please ensure ALL your files are there in netCDF format.
+ * There is RUDIMENTARY FILE checking that ensures ALL files between the times requested are in the folder requested in netCDF format.
* THERE IS NO FILE ERROR HANDLING. Please ensure that the MERG data and the TRMM data files are correlated temporally and spatially
##Run mccSearchUI.py
[3/4] climate git commit: Partially resolve CLIMATE-530-p1. Merge PR
#140.
Posted by jo...@apache.org.
Partially resolve CLIMATE-530-p1. Merge PR #140.
Project: http://git-wip-us.apache.org/repos/asf/climate/repo
Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/bacdd2de
Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/bacdd2de
Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/bacdd2de
Branch: refs/heads/master
Commit: bacdd2dea83ba96497f933340aef438673d24e31
Parents: 1adafc1 d144a28
Author: Michael Joyce <jo...@apache.org>
Authored: Thu Nov 20 09:47:18 2014 -0800
Committer: Michael Joyce <jo...@apache.org>
Committed: Thu Nov 20 09:47:18 2014 -0800
----------------------------------------------------------------------
mccsearch/code/mccSearch.py | 798 ++++++++++++-------------------------
mccsearch/code/mccSearchUI.py | 47 +--
2 files changed, 278 insertions(+), 567 deletions(-)
----------------------------------------------------------------------