Example #1
0
    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
Example #2
0
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)
Example #4
0
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,
Example #6
0
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()
Example #7
0
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()
Example #8
0
    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 = []