def plotHazardCurves(self, inputFile, plotPath): """ Plot the hazard values stored in hazardFile, at the stns stored in stnFile. """ log.info(("Plotting return period curves for locations within the " "model domain")) # Open data file try: ncobj = nctools.ncLoadFile(inputFile) lon = nctools.ncGetDims(ncobj, 'lon') lat = nctools.ncGetDims(ncobj, 'lat') years = nctools.ncGetDims(ncobj, 'years') except (IOError, RuntimeError, KeyError): log.critical("Cannot load input file: %s"%inputFile) raise # Load data wspd = nctools.ncGetData(ncobj, 'wspd') try: wLower = nctools.ncGetData(ncobj, 'wspdlower') wUpper = nctools.ncGetData(ncobj, 'wspdupper') ciBounds = True except KeyError: ciBounds = False ncobj.close() minLon = min(lon) maxLon = max(lon) minLat = min(lat) maxLat = max(lat) # Use the same maximum value for all localities to simplify # intercomparisons: defaultMax = np.ceil(metutils.convert(100.0, 'mps', self.plotUnits.units)/10.0)*10.0 placeNames, parentCountries, placeLats, placeLons = \ self.getLocations(minLon, maxLon, minLat, maxLat) for name, plat, plon, country in zip(placeNames, placeLats, placeLons, parentCountries): log.debug("Plotting return period curve for %s"%name) i = find_index(lon, plon) j = find_index(lat, plat) xlabel = 'Average recurrence interval (years)' ylabel = 'Wind speed (%s)'%self.plotUnits.label title = "Return period wind speeds at " + name + ", " \ + country + "\n(%5.1f,%5.1f)"%(plon, plat) name = unicodedata.normalize('NFKD', name).encode('ascii', 'ignore') name.replace(' ', '') filename = pjoin(plotPath, 'ARI_curve_%s.%s'%(name,"png")) log.debug("Saving hazard curve for %s to %s"%(name, filename)) placeWspd = metutils.convert(wspd[:, j, i], 'mps', self.plotUnits.units) maxWspd = placeWspd.max() if ciBounds: placeWspdLower = metutils.convert(wLower[:,j,i], 'mps', self.plotUnits.units) placeWspdUpper = metutils.convert(wUpper[:,j,i], 'mps', self.plotUnits.units) saveHazardCurve(years, placeWspd, placeWspdUpper, placeWspdLower, xlabel, ylabel, title, filename)
def plotHazardCurves(self, inputFile, plotPath): """ Plot the hazard values stored in hazardFile, at the stns stored in stnFile. """ log.info(("Plotting return period curves for locations within the " "model domain")) # Open data file try: ncobj = nctools.ncLoadFile(inputFile) lon = nctools.ncGetDims(ncobj, 'lon') lat = nctools.ncGetDims(ncobj, 'lat') years = nctools.ncGetDims(ncobj, 'ari') except (IOError, RuntimeError, KeyError): log.critical("Cannot load input file: %s"%inputFile) raise placeNames, placeID, placeLats, placeLons, locations = self.getLocations() for name, plat, plon, pID in zip(placeNames, placeLats, placeLons, placeID): pID = int(pID) log.debug("Plotting return period curve for %s"%name) i = find_index(lon, plon) j = find_index(lat, plat) xlabel = 'Average recurrence interval (years)' ylabel = 'Wind speed (%s)'%self.plotUnits.label title = "Return period wind speeds at " + name + ", \n(%5.1f,%5.1f)"%(plon, plat) name.replace(' ', '') log.debug("Working on {0}".format(name)) filename = pjoin(plotPath, 'ARI_curve_%s.%s'%(pID, "png")) log.debug("Saving hazard curve for %s to %s"%(name, filename)) wspd = ncobj.variables['wspd'][:, j, i] recs = database.queries.locationRecords(self.db, pID) data = np.zeros(int(self.numsimulations * 365.25)) if len(recs) > 0: data[-len(recs):] = recs['wspd'] allevents = np.sort(data) log.debug("allevents length = {0}".format(len(allevents))) placeWspd = metutils.convert(wspd, 'mps', self.plotUnits.units) if np.all(placeWspd.mask): log.debug("All values for {0} are null".format(name)) continue if self.ciBounds: wspdLower = ncobj.variables['wspdlower'][:, j, i] wspdUpper = ncobj.variables['wspdupper'][:, j, i] placeWspdLower = metutils.convert(wspdLower, 'mps', self.plotUnits.units) placeWspdUpper = metutils.convert(wspdUpper, 'mps', self.plotUnits.units) else: placeWspdUpper = np.zeros(len(placeWspd)) placeWspdLower = np.zeros(len(placeWspd)) saveHazardCurve(years, allevents, placeWspd, placeWspdUpper, placeWspdLower, xlabel, ylabel, title, filename, self.fit) ncobj.close()
def plotHazardCurves(self, inputFile, plotPath): """ Plot the hazard values stored in hazardFile, at the stns stored in stnFile. """ log.info(("Plotting return period curves for locations within the " "model domain")) # Open data file try: ncobj = nctools.ncLoadFile(inputFile) lon = nctools.ncGetDims(ncobj, 'lon') lat = nctools.ncGetDims(ncobj, 'lat') years = nctools.ncGetDims(ncobj, 'years') except (IOError, RuntimeError, KeyError): log.critical("Cannot load input file: %s"%inputFile) raise # Load data #wspd = nctools.ncGetData(ncobj, 'wspd') #try: # wLower = nctools.ncGetData(ncobj, 'wspdlower') # wUpper = nctools.ncGetData(ncobj, 'wspdupper') ciBounds = True #except KeyError: # ciBounds = False #ncobj.close() minLon = min(lon) maxLon = max(lon) minLat = min(lat) maxLat = max(lat) # Use the same maximum value for all localities to simplify # intercomparisons: #defaultMax = np.ceil(metutils.convert(100.0, 'mps', # self.plotUnits.units)/10.0)*10.0 placeNames, parentCountries, placeLats, placeLons = \ self.getLocations(minLon, maxLon, minLat, maxLat) for name, plat, plon, country in zip(placeNames, placeLats, placeLons, parentCountries): log.debug("Plotting return period curve for %s"%name) i = find_index(lon, plon) j = find_index(lat, plat) xlabel = 'Average recurrence interval (years)' ylabel = 'Wind speed (%s)'%self.plotUnits.label title = "Return period wind speeds at " + name + ", " \ + country + "\n(%5.1f,%5.1f)"%(plon, plat) name = unicodedata.normalize('NFKD', name).encode('ascii', 'ignore') name.replace(' ', '') filename = pjoin(plotPath, 'ARI_curve_%s.%s'%(name, "png")) log.debug("Saving hazard curve for %s to %s"%(name, filename)) wspd = ncobj.variables['wspd'][:, j, i] placeWspd = metutils.convert(wspd, 'mps', self.plotUnits.units) if np.all(placeWspd.mask): log.debug("All values for {0} are null".format(name)) continue if ciBounds: wspdLower = ncobj.variables['wspdlower'][:, j, i] wspdUpper = ncobj.variables['wspdupper'][:, j, i] placeWspdLower = metutils.convert(wspdLower, 'mps', self.plotUnits.units) placeWspdUpper = metutils.convert(wspdUpper, 'mps', self.plotUnits.units) saveHazardCurve(years, placeWspd, placeWspdUpper, placeWspdLower, xlabel, ylabel, title, filename) ncobj.close()