def _check_cache_state(self): """ advance or step back the cache if needed, and adjust the index """ filename = self._filenames[self._currIndex] # are we on the right edge of the cache? if self._cacheIndex >= len(self._cacher): # is the cache at the maximum size? if len(self._cacher) >= self._cachewidth: self._cacher.pop(0) self._cacheIndex -= 1 # add an item to the right edge of the cache self._cacher.append(LoadRastRadar(filename)) # are we on the left edge of the cache? elif self._cacheIndex < 0: # is the cache at the maximum size? if len(self._cacher) >= self._cachewidth: self._cacher.pop() # add an item to the left edge of the cache self._cacher.insert(0, LoadRastRadar(filename)) self._cacheIndex += 1
def ConsistentDomain(radarFiles): minLat = None minLon = None maxLat = None maxLon = None volTimes = [] for fname in radarFiles: data = LoadRastRadar(fname) volTimes.append(datetime.utcfromtimestamp(data['scan_time'])) if minLat is not None: minLat = min(data['lats'].min(), minLat) minLon = min(data['lons'].min(), minLon) maxLat = max(data['lats'].max(), maxLat) maxLon = max(data['lons'].max(), maxLon) else: minLat = data['lats'].min() minLon = data['lons'].min() maxLat = data['lats'].max() maxLon = data['lons'].max() return (minLat, minLon, maxLat, maxLon, volTimes)
def ConsistentDomain(fileList, filepath): minLat = None minLon = None maxLat = None maxLon = None for filename in fileList: dataSource = GetClustDataSource(filename) rastData = LoadRastRadar(os.path.join(filepath, dataSource)) (lons, lats) = np.meshgrid(rastData['lons'], rastData['lats']) bounds = TightBounds(lons, lats, np.squeeze(rastData['vals'])) if minLat is not None: minLat = min(bounds['minLat'], minLat) minLon = min(bounds['minLon'], minLon) maxLat = max(bounds['maxLat'], maxLat) maxLon = max(bounds['maxLon'], maxLon) else: minLat = bounds['minLat'] minLon = bounds['minLon'] maxLat = bounds['maxLat'] maxLon = bounds['maxLon'] return (minLat, minLon, maxLat, maxLon)
def main(args): if args.bw_mode: BW_mode() if len(args.trackFiles) == 0: print "WARNING: No trackFiles given!" if args.trackTitles is None: args.trackTitles = args.trackFiles else: if len(args.trackTitles) != len(args.trackFiles): raise ValueError("The number of TITLEs do not match the" " number of TRACKFILEs.") if args.statName is not None and args.statLonLat is None: statData = ByName(args.statName)[0] args.statLonLat = (statData['LON'], statData['LAT']) if args.layout is None: args.layout = (1, len(args.trackFiles)) if args.figsize is None: args.figsize = plt.figaspect(float(args.layout[0]) / args.layout[1]) trackerData = [ FilterMHTTracks(*ReadTracks(trackFile)) for trackFile in args.trackFiles ] polyData = [ _load_verts(f, tracks + falarms) for f, (tracks, falarms) in zip(polyfiles, trackerData) ] if args.statLonLat is not None: for aTracker in trackerData: CoordinateTransform(aTracker[0] + aTracker[1], args.statLonLat[0], args.statLonLat[1]) for polys in polyData: CoordinateTrans_lists(polys, args.statLonLat[0], args.statLonLat[1]) if args.simTagFiles is None: args.simTagFiles = [None] multiTags = [ ReadSimTagFile(fname) if fname is not None else None for fname in args.simTagFiles ] if len(trackerData) > len(multiTags): # Very rudimentary broadcasting of multiTags to match trackerData tagMult = max(int(len(trackerData) // len(multiTags)), 1) multiTags = multiTags * tagMult theFig = plt.figure(figsize=args.figsize) grid = AxesGrid(theFig, 111, nrows_ncols=args.layout, aspect=False, share_all=True, axes_pad=0.45) showMap = (args.statLonLat is not None and args.displayMap) # Can only do this if all other data being displayed will be in # lon/lat coordinates if args.radarFile is not None and args.statLonLat is not None: if len(args.radarFile) > 1 and args.endFrame is not None: args.radarFile = args.radarFile[args.endFrame] else: args.radarFile = args.radarFile[-1] data = LoadRastRadar(args.radarFile) for ax in grid: MakeReflectPPI(data['vals'][0], data['lats'], data['lons'], meth='pcmesh', ax=ax, colorbar=False, axis_labels=False, zorder=0, alpha=0.6) MakeTrackPlots(grid, trackerData, args.trackTitles, showMap, endFrame=args.endFrame, tail=args.tail, fade=args.fade, multiTags=multiTags, tag_filters=args.filters) for ax, verts in zip(grid, polyData): _to_polygons(verts[args.endFrame:args.endFrame + 1], ax) if args.xlims is not None and np.prod(grid.get_geometry()) > 0: grid[0].set_xlim(args.xlims) if args.ylims is not None and np.prod(grid.get_geometry()) > 0: grid[0].set_ylim(args.ylims) if args.saveImgFile is not None: theFig.savefig(args.saveImgFile) if args.doShow: plt.show()
if os.path.exists(outfile): continue fig = plt.figure() grid = AxesGrid(fig, 111, nrows_ncols=(1, 1), axes_pad=0.22, cbar_mode='single', cbar_pad=0.05, cbar_size=0.08) ax = grid[0] PlotMapLayers(map, mapLayers, ax) (clustParams, clusters) = LoadClustFile(filename) rastData = LoadRastRadar( os.path.join(options.pathName, clustParams['dataSource'])) #print type(rastData['vals']) #rastData['vals'][rastData['vals'] < 0.0] = np.nan # Plotting the full reflectivity image, with significant transparency (alpha=0.25). # This plot will get 'dimmed' by the later ClusterMap(). # zorder=1 so that it is above the Map Layers. # MakeReflectPPI(np.squeeze(rastData['vals']), rastData['lats'], rastData['lons'], # alpha=0.15, axis=ax, zorder=1, titlestr=rastData['title'], colorbar=False, axis_labels=False) clustCnt, clustSizes, sortedIndices = GetClusterSizeInfo(clusters) ClusterMap( clusters, np.squeeze(rastData['vals']), sortedIndices,
def main(args): import os.path import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import AxesGrid if args.bw_mode: BW_mode() # from TrackPlot module # FIXME: Currently, the code allows for trackFiles to be listed as well # as providing a simulation (which trackfiles are automatically # grabbed). Both situations can not be handled right now, though. trackFiles = [] trackTitles = [] if args.simName is not None: dirName = os.path.join(args.directory, args.simName) simParams = ParamUtils.ReadSimulationParams( os.path.join(dirName, "simParams.conf")) if args.trackRuns is not None: simParams['trackers'] = ExpandTrackRuns(simParams['trackers'], args.trackRuns) trackFiles = [ os.path.join(dirName, simParams['result_file'] + '_' + aTracker) for aTracker in simParams['trackers'] ] if args.trackTitles is None: trackTitles = simParams['trackers'] else: trackTitles = args.trackTitles if args.truthTrackFile is None: args.truthTrackFile = os.path.join(dirName, simParams['noisyTrackFile']) if args.simTagFile is None: args.simTagFile = os.path.join(dirName, simParams['simTagFile']) trackFiles += args.trackFiles if args.trackTitles is None: trackTitles += args.trackFiles else: trackTitles += args.trackTitles if len(trackFiles) == 0: print "WARNING: No trackFiles given or found!" if len(trackTitles) != len(trackFiles): raise ValueError("The number of TITLEs do not match the" " number of TRACKFILEs.") if args.statName is not None and args.statLonLat is None: statData = ByName(args.statName)[0] args.statLonLat = (statData['LON'], statData['LAT']) if args.layout is None: args.layout = (1, len(trackFiles)) if args.figsize is None: args.figsize = plt.figaspect(float(args.layout[0]) / args.layout[1]) polyfiles = args.polys trackerData = [ FilterMHTTracks(*ReadTracks(trackFile)) for trackFile in trackFiles ] polyData = [ _load_verts(f, tracks + falarms) for f, (tracks, falarms) in zip(polyfiles, trackerData) ] keeperIDs = None if args.simTagFile is not None: simTags = ParamUtils.ReadSimTagFile(args.simTagFile) keeperIDs = ParamUtils.process_tag_filters(simTags, args.filters) if args.statLonLat is not None: for aTracker in trackerData: CoordinateTransform(aTracker[0] + aTracker[1], args.statLonLat[0], args.statLonLat[1]) for polys in polyData: CoordinateTrans_lists(polys, args.statLonLat[0], args.statLonLat[1]) theFig = plt.figure(figsize=args.figsize) grid = AxesGrid(theFig, 111, nrows_ncols=args.layout, aspect=False, share_all=True, axes_pad=0.35) if args.truthTrackFile is not None: (true_tracks, true_falarms) = FilterMHTTracks(*ReadTracks(args.truthTrackFile)) if args.statLonLat is not None: CoordinateTransform(true_tracks + true_falarms, args.statLonLat[0], args.statLonLat[1]) true_AssocSegs = CreateSegments(true_tracks) true_FAlarmSegs = CreateSegments(true_falarms) if keeperIDs is not None: true_AssocSegs = FilterSegments(keeperIDs, true_AssocSegs) true_FAlarmSegs = FilterSegments(keeperIDs, true_FAlarmSegs) (xLims, yLims, frameLims) = DomainFromTracks(true_tracks + true_falarms) else: true_AssocSegs = None true_FAlarmSegs = None stackedTracks = [] for aTracker in trackerData: stackedTracks += aTracker[0] + aTracker[1] (xLims, yLims, frameLims) = DomainFromTracks(stackedTracks) endFrame = args.endFrame tail = args.tail if endFrame is None: endFrame = frameLims[1] if tail is None: tail = endFrame - frameLims[0] startFrame = endFrame - tail showMap = (args.statLonLat is not None and args.displayMap) if args.radarFile is not None and args.statLonLat is not None: if len(args.radarFile) > 1 and args.endFrame is not None: args.radarFile = args.radarFile[args.endFrame] else: args.radarFile = args.radarFile[-1] raddata = LoadRastRadar(args.radarFile) else: raddata = None if showMap: bmap = Basemap(projection='cyl', resolution='i', suppress_ticks=False, llcrnrlat=yLims[0], llcrnrlon=xLims[0], urcrnrlat=yLims[1], urcrnrlon=xLims[1]) for index, (tracks, falarms) in enumerate(trackerData): curAxis = grid[index] if raddata is not None: MakeReflectPPI(raddata['vals'][0], raddata['lats'], raddata['lons'], meth='pcmesh', ax=curAxis, colorbar=False, axis_labels=False, zorder=0, alpha=0.6) if showMap: PlotMapLayers(bmap, mapLayers, curAxis) if true_AssocSegs is not None and true_FAlarmSegs is not None: trackAssocSegs = CreateSegments(tracks) trackFAlarmSegs = CreateSegments(falarms) if keeperIDs is not None: trackAssocSegs = FilterSegments(keeperIDs, trackAssocSegs) trackFAlarmSegs = FilterSegments(keeperIDs, trackFAlarmSegs) truthtable = CompareSegments(true_AssocSegs, true_FAlarmSegs, trackAssocSegs, trackFAlarmSegs) PlotSegments(truthtable, (startFrame, endFrame), axis=curAxis, fade=args.fade) else: if keeperIDs is not None: filtFunc = lambda trk: FilterTrack(trk, cornerIDs=keeperIDs) tracks = map(filtFunc, tracks) falarms = map(filtFunc, falarms) CleanupTracks(tracks, falarms) PlotPlainTracks(tracks, falarms, startFrame, endFrame, axis=curAxis, fade=args.fade) #curAxis.set_xlim(xLims) #curAxis.set_ylim(yLims) #curAxis.set_aspect("equal", 'datalim') #curAxis.set_aspect("equal") curAxis.set_title(trackTitles[index]) if not showMap: curAxis.set_xlabel("X") curAxis.set_ylabel("Y") else: curAxis.set_xlabel("Longitude") curAxis.set_ylabel("Latitude") for ax, verts in zip(grid, polyData): _to_polygons(verts[endFrame:endFrame + 1], ax) if args.xlims is not None and np.prod(grid.get_geometry()) > 0: grid[0].set_xlim(args.xlims) if args.ylims is not None and np.prod(grid.get_geometry()) > 0: grid[0].set_ylim(args.ylims) if args.saveImgFile is not None: theFig.savefig(args.saveImgFile, bbox_inches='tight') if args.doShow: plt.show()
def main(args): if args.bw_mode: BW_mode() if len(args.trackFiles) == 0: print "WARNING: No trackFiles given!" if len(args.truthTrackFile) == 0: print "WARNING: No truth trackFiles given!" if args.trackTitles is None: args.trackTitles = args.trackFiles else: if len(args.trackTitles) != len(args.trackFiles): raise ValueError("The number of TITLEs does not match the number" " of TRACKFILEs") if args.statName is not None and args.statLonLat is None: statData = ByName(args.statName)[0] args.statLonLat = (statData['LON'], statData['LAT']) if args.layout is None: args.layout = (1, max(len(args.trackFiles), len(args.truthTrackFile))) if args.figsize is None: args.figsize = plt.figaspect(float(args.layout[0]) / args.layout[1]) if args.simTagFiles is None: args.simTagFiles = [] trackerData = [ FilterMHTTracks(*ReadTracks(trackFile)) for trackFile in args.trackFiles ] truthData = [ FilterMHTTracks(*ReadTracks(trackFile)) for trackFile in args.truthTrackFile ] multiTags = [ReadSimTagFile(fname) for fname in args.simTagFiles] if len(multiTags) == 0: multiTags = [None] if args.statLonLat is not None: for aTracker in trackerData + truthData: CoordinateTransform(aTracker[0] + aTracker[1], args.statLonLat[0], args.statLonLat[1]) if len(trackerData) != len(truthData): # Basic broadcasting needed! if len(truthData) > len(trackerData): # Need to extend track data to match with the number of truth sets if len(truthData) % len(trackerData) != 0: raise ValueError("Can't extend TRACKFILE list to match with" " the TRUTHFILE list!") else: # Need to extend truth sets to match with the number of track data if len(trackerData) % len(truthData) != 0: raise ValueError("Can't extend TRUTHFILE list to match with" " the TRACKFILE list!") trkMult = max(int(len(truthData) // len(trackerData)), 1) trthMult = max(int(len(trackerData) // len(truthData)), 1) trackerData = trackerData * trkMult truthData = truthData * trthMult tagMult = max(int(len(truthData) // len(multiTags)), 1) multiTags = multiTags * tagMult args.trackTitles = args.trackTitles * trkMult theFig = plt.figure(figsize=args.figsize) grid = AxesGrid(theFig, 111, nrows_ncols=args.layout, aspect=False, share_all=True, axes_pad=0.45) showMap = (args.statLonLat is not None and args.displayMap) if args.radarFile is not None and args.statLonLat is not None: if len(args.radarFile) > 1 and args.endFrame is not None: args.radarFile = args.radarFile[args.endFrame] else: args.radarFile = args.radarFile[-1] data = LoadRastRadar(args.radarFile) for ax in grid: MakeReflectPPI(data['vals'][0], data['lats'], data['lons'], meth='pcmesh', ax=ax, colorbar=False, axis_labels=False, zorder=0, alpha=0.6) MakeComparePlots(grid, trackerData, truthData, args.trackTitles, showMap, endFrame=args.endFrame, tail=args.tail, fade=args.fade, multiTags=multiTags, tag_filters=args.filters) if args.xlims is not None and np.prod(grid.get_geometry()) > 0: grid[0].set_xlim(args.xlims) if args.ylims is not None and np.prod(grid.get_geometry()) > 0: grid[0].set_ylim(args.ylims) if args.saveImgFile is not None: theFig.savefig(args.saveImgFile) if args.doShow: plt.show()
if args.savePolys : from cPickle import dump # Dictionary containing (cornerID, x-y vertices) key-value pairs polygons = {} volume_data = [] cornerID = 0 startTime = None for frameNum, filename in enumerate(fileList) : (clustParams, clusters) = LoadClustFile(filename) # Get rasterized reflectivity data radData = LoadRastRadar(os.path.join(args.pathName, clustParams['dataSource'])) radarName = radData['station'] if radarName == 'NWRT' : radarName = 'PAR' rastData = np.squeeze(radData['vals']) # Get site info radarSite = radar.ByName(radarName, radar.Sites)[0] # Get cluster info clustMembers = [np.nonzero(clusters['clusterIndicies'] == clustIndx) for clustIndx in np.unique(clusters['clusterIndicies'])] if startTime is None : startTime = clustParams['scantime'] xCentroids = []