Example #1
0
        (parser.parse(d) + timedelta(days=1)).strftime("%m%d"),
        parser.parse(d).strftime("%m%d"))

fnscint = folder + 'ix_{}_{}T0000-{}T0000_reduced{}_d1_r2_yaml_30el_1s_350km.h5'.format(
    parser.parse(d).year,
    parser.parse(d).strftime("%m%d"),
    (parser.parse(d) + timedelta(days=1)).strftime("%m%d"),
    parser.parse(d).strftime("%m%d"))

tlim = [parser.parse(d), parser.parse(d) + timedelta(hours=10)]
Xt = -80
Yt = [10, 60]

dtec_clim = [-0.1, 0.1]

TEC = gpstec.readFromHDF(fn)
xgrid = TEC['xgrid']
ygrid = TEC['ygrid']
im = TEC['tecim']

D = dm.keogram(time=TEC['time'],
               xgrid=xgrid,
               ygrid=ygrid,
               im=im,
               tlim=tlim,
               Xt=Xt,
               Yt=Yt,
               Xn=2,
               fillPixel=2)

fig = plt.figure(figsize=[10, 5])
Example #2
0
assert os.path.isfile(TECFN), TECFN
if scintfn is None:
    if platform.system() == 'Windows':
        scint_root = root + '\\hdf\\{}\\'.format(datedt[0].year)

    else:
        scint_root = root + '/hdf/'
    scint_fn_list = sorted(
        glob.glob(scint_root + "ix_{}_{}T*.h5".format(
            datedt[0].year, datedt[0].strftime("%m%d"))))
    assert len(scint_fn_list) > 0
    scintfn = scint_fn_list[0]
assert os.path.isfile(scintfn)

#TEC
TEC = gpstec.readFromHDF(TECFN)
tectime = TEC['time']
xgrid = TEC['xgrid']
ygrid = TEC['ygrid']
#SCINT DATA
scintdata = h5py.File(scintfn, 'r')
scint_time = scintdata['data/time'][:]
scint_dt = np.array([datetime.utcfromtimestamp(t) for t in scint_time])

if tlim is None:
    tlim = [parser.parse(date), parser.parse(date) + timedelta(days=1)]
if isinstance(tlim[0], str):
    dirnametime = scint_dt[0].strftime('%Y%m%d')
    if dirnametime != parser.parse(tlim[0]).strftime('%Y%m%d'):
        t0 = parser.parse(dirnametime + 'T' + tlim[0])
        t1 = parser.parse(dirnametime + 'T' + tlim[1])
Example #3
0
def main(date='',
         root=None,
         scintfn=None,
         clim=None,
         tlim=None,
         trange=None,
         odir=None,
         latlim=None,
         lonlim=None,
         terminator=False,
         nightshade=False,
         cmap='gray',
         SAVE=1,
         resolution=5):
    DPI = 150

    datedt = [parser.parse(date), parser.parse(date) + timedelta(days=1)]

    if trange is None:
        trange = resolution / 2
    if latlim is None:
        latlim = [-10, 75]
    if lonlim is None:
        lonlim = [-160, -50]
    if clim is None:
        tecclim = [0, 20]
    else:
        tecclim = clim
    if root is None:
        if platform.system() == 'Windows':
            root = 'G:\\My Drive\\scintillation_data\\'
        else:
            root = '/home/smrak/Documents/scintillation/'
    if odir is None:
        if platform.system() == 'Windows':
            odir = root + '{}\\{}-{}-{}\\'.format(
                parser.parse(date).strftime("%Y%m%d"), cmap, tecclim[0],
                tecclim[1])
        else:
            odir = root + '/maps/{}/{}-{}-{}/'.format(
                parser.parse(date).strftime("%Y%m%d"), cmap, tecclim[0],
                tecclim[1])

    if platform.system() == 'Windows':
        TECFN = root + 'tid\\{}\\conv_{}T0000-{}T0000.h5'.format(
            parser.parse(date).strftime("%Y%m%d"),
            datedt[0].strftime("%Y%m%d"), datedt[1].strftime("%Y%m%d"))
    else:
        TECFN = '/media/smrak/figures/gpstec/{}/{}/conv_{}T0000-{}T0000.h5'.format(
            parser.parse(date).year,
            parser.parse(date).strftime("%m%d"), datedt[0].strftime("%Y%m%d"),
            datedt[1].strftime("%Y%m%d"))
    assert os.path.isfile(TECFN), TECFN
    if scintfn is None:
        if platform.system() == 'Windows':
            scint_root = root + '\\hdf\\{}\\'.format(datedt[0].year)

        else:
            scint_root = root + '/hdf/'
        scint_fn_list = sorted(
            glob.glob(scint_root + "ix_{}_{}T*.h5".format(
                datedt[0].year, datedt[0].strftime("%m%d"))))
        assert len(scint_fn_list) > 0
        scintfn = scint_fn_list[0]
    assert os.path.isfile(scintfn)

    #TEC
    TEC = gpstec.readFromHDF(TECFN)
    tectime = TEC['time']
    xgrid = TEC['xgrid']
    ygrid = TEC['ygrid']
    #SCINT DATA
    scintdata = h5py.File(scintfn, 'r')
    scint_time = scintdata['data/time'][:]
    scint_dt = np.array([datetime.utcfromtimestamp(t) for t in scint_time])

    if tlim is None:
        tlim = [parser.parse(date), parser.parse(date) + timedelta(days=1)]
    if isinstance(tlim[0], str):
        dirnametime = scint_dt[0].strftime('%Y%m%d')
        if dirnametime != parser.parse(P.tlim[0]).strftime('%Y%m%d'):
            t0 = parser.parse(dirnametime + 'T' + P.tlim[0])
            t1 = parser.parse(dirnametime + 'T' + P.tlim[1])
        else:
            t0 = parser.parse(P.tlim[0])
            t1 = parser.parse(P.tlim[0])
        tlim = [t0, t1]
    assert isinstance(tlim[0], datetime) and isinstance(tlim[1], datetime)
    obstimes = []
    t = tlim[0]
    while t <= tlim[1]:
        obstimes.append(t)
        t += timedelta(minutes=resolution)


# --------------------------------------------------------------------------- #
    for ii, it in enumerate(obstimes):
        # TEC data
        idt_tec = abs(tectime - it).argmin()
        if idt_tec < tectime.size - 2:
            tecim = np.nanmean(TEC['tecim'][idt_tec:idt_tec + 2], axis=0)
        else:
            tecim = TEC['tecim'][idt_tec]
        # Scintillation data
        # Filter out time range of interest
        scint_idt = np.zeros(scint_dt.size, dtype=bool)
        time_range = np.where((scint_dt >= it - timedelta(minutes=trange)) &
                              (scint_dt <= it + timedelta(minutes=trange)))[0]
        scint_idt[time_range[0]:time_range[-1] + 1] = True
        #    scint_idt[time_range[0]] = True
        # Read in data
        ipp_lat = scintdata['data/ipp'][scint_idt, :, :, 0]
        ipp_lon = scintdata['data/ipp'][scint_idt, :, :, 1]
        sigma_tec = scintdata['data/sigma_tec'][scint_idt, :, :]
        snr4 = scintdata['data/snr4'][scint_idt, :, :]
        roti = scintdata['data/roti'][scint_idt, :, :]
        # Plot
        fig = plt.figure(figsize=[15, 6])
        ax0 = plt.subplot(
            121,
            projection=ccrs.Stereographic(central_longitude=(sum(lonlim) / 2)))
        ax1 = plt.subplot(
            122,
            projection=ccrs.Stereographic(central_longitude=(sum(lonlim) / 2)))

        ax0 = cm.plotCartoMap(latlim=latlim,
                              lonlim=lonlim,
                              projection='stereo',
                              meridians=None,
                              parallels=None,
                              ax=ax0,
                              grid_linewidth=1,
                              states=False,
                              title=it,
                              background_color='grey',
                              apex=True,
                              mlat_levels=[-40, -20, 0, 20, 40, 60, 80, 90],
                              mlat_colors='w',
                              mgrid_width=1,
                              mgrid_style='--',
                              nightshade=nightshade,
                              terminator=terminator,
                              terminator_altkm=350,
                              ter_color='r',
                              ter_style='-',
                              ter_width=2,
                              mlon_cs='mlt',
                              date=it,
                              mlon_levels=np.arange(0, 24.1, 4),
                              mlat_labels=False,
                              mlon_colors='w',
                              mlon_labels=False)

        ax1 = cm.plotCartoMap(latlim=latlim,
                              lonlim=lonlim,
                              projection='stereo',
                              meridians=None,
                              parallels=None,
                              ax=ax1,
                              grid_linewidth=1,
                              states=False,
                              title=it,
                              background_color='grey',
                              apex=True,
                              mlat_levels=[-40, -20, 0, 20, 40, 60, 80, 90],
                              nightshade=nightshade,
                              terminator=terminator,
                              terminator_altkm=350,
                              ter_color='r',
                              ter_style='-',
                              ter_width=2,
                              mlon_cs='mlt',
                              date=it,
                              mlat_colors='w',
                              mgrid_width=1,
                              mgrid_style='--',
                              mlon_levels=np.arange(0, 24.1, 4),
                              mlat_labels=False,
                              mlon_colors='w',
                              mlon_labels=False)

        glon_ter, glat_ter = ter.get_terminator(it, alt_km=350)
        idlon = (glon_ter > -160) & (glon_ter < 0)
        mlat_ter, mlon_ter = A.convert(glat_ter[idlon],
                                       glon_ter[idlon],
                                       'geo',
                                       'apex',
                                       height=350)
        mlat_south = (mlat_ter < 0)
        glat_ter_conj, glon_ter_conj = A.convert(-mlat_ter[mlat_south],
                                                 mlon_ter[mlat_south],
                                                 'apex',
                                                 'geo',
                                                 height=350)
        ax0.plot(np.unwrap(glon_ter_conj, 180),
                 glat_ter_conj,
                 '--r',
                 lw=2,
                 transform=ccrs.PlateCarree())
        # ------------------------------------------------------------------------- - #
        ax0.pcolormesh(xgrid,
                       ygrid,
                       tecim.T,
                       cmap=cmap,
                       vmin=tecclim[0],
                       vmax=tecclim[1],
                       transform=ccrs.PlateCarree())
        im1 = ax1.pcolormesh(
            xgrid,
            ygrid,
            tecim.T,
            cmap=cmap,  #'nipy_spectral'
            vmin=tecclim[0],
            vmax=tecclim[1],
            transform=ccrs.PlateCarree())
        # Scint with amplitude
        #        if np.sum(np.isfinite(sigma_tec)) > 0:
        if trange >= 1:
            idf0 = np.isfinite(sigma_tec)
            if np.sum(np.isfinite(idf0)) == 0:
                idf0[0] = True
            imst = ax0.scatter(
                ipp_lon[idf0],
                ipp_lat[idf0],
                c=sigma_tec[idf0],
                s=30,  #(sigma_tec)**2 * 1000000,
                marker='o',
                cmap='Reds',
                alpha=0.8,
                vmin=0,
                vmax=0.05,
                #                    facecolors = 'none',
                transform=ccrs.PlateCarree())
            idf0 = np.isfinite(snr4)
            if np.sum(np.isfinite(idf0)) == 0:
                idf0[0] = True
    #        if np.sum(np.isfinite(snr4)) > 0:
            imsnr4 = ax0.scatter(
                ipp_lon[idf0],
                ipp_lat[idf0],
                c=snr4[idf0],
                s=30,  #np.square(snr4) * 1000,
                #                    linewidth = 0.8,
                marker='o',
                alpha=0.8,
                cmap='Blues',
                vmin=0,
                vmax=1.2,
                #                    facecolors = 'none',
                transform=ccrs.PlateCarree())
            # Scint locations
            if np.sum(np.isfinite(roti)) > 0:
                idf0 = np.isfinite(roti)
                imroti = ax1.scatter(ipp_lon[idf0],
                                     ipp_lat[idf0],
                                     c=roti[idf0],
                                     s=15,
                                     marker='o',
                                     alpha=0.8,
                                     vmin=0,
                                     vmax=0.02,
                                     cmap='jet',
                                     transform=ccrs.PlateCarree())

            posn0 = ax0.get_position()
            cax = fig.add_axes([posn0.x0, posn0.y0 - 0.03, posn0.width, 0.02])
            fig.colorbar(imsnr4,
                         cax=cax,
                         label='$SNR_4$',
                         orientation='horizontal')
            posn1 = ax1.get_position()
            cax = fig.add_axes([posn1.x0, posn1.y0 - 0.03, posn1.width, 0.02])
            fig.colorbar(imroti,
                         cax=cax,
                         label='ROTI [TECu]',
                         orientation='horizontal')
            cax = fig.add_axes(
                [posn1.x0 + posn1.width + 0.01, posn1.y0, 0.02, posn1.height])
            fig.colorbar(im1, cax=cax, label='TEC [TECu]')
            posn0 = ax0.get_position()
            cax = fig.add_axes(
                [posn0.x0 + posn0.width + 0.01, posn0.y0, 0.02, posn0.height])
            fig.colorbar(imst, cax=cax, label='$\sigma_{TEC}$ [TECu]')
        else:
            posn0 = ax0.get_position()
            cax = fig.add_axes(
                [posn0.x0 + posn0.width + 0.01, posn0.y0, 0.02, posn0.height])
            fig.colorbar(im1, cax=cax, label='$\sigma_{TEC}$ [TECu]')

        if SAVE:
            #            plt.tight_layout()
            if not os.path.exists(odir):
                import subprocess
                if platform.system() == 'Linux':
                    subprocess.call('mkdir -p "{}"'.format(odir),
                                    shell=True,
                                    timeout=2)
                elif platform.system() == 'Windows':
                    subprocess.call('mkdir "{}"'.format(odir),
                                    shell=True,
                                    timeout=2)
            print("Plotting {}/{} - {}".format(ii + 1, len(obstimes), it))
            fig.savefig(odir + '{}.png'.format(it.strftime('%m%d_%H%M')),
                        dpi=DPI)
            plt.close(fig)

            del fig
            del sigma_tec
            del snr4
Example #4
0
def main(date='', root=None, scintfn=None, 
         clim=None, tlim=None, trange=2.5, 
         odir=None,
         SAVE=1, resolution=5):
    if tlim is None:
        tlim = [parser.parse(date), parser.parse(date) + timedelta(days=1)]
    if isinstance(tlim[0], str):
        tlim = [parser.parse(tlim[0]), parser.parse(tlim[1])]
    assert isinstance(tlim[0], datetime) and isinstance(tlim[1], datetime)
    obstimes = []
    t = tlim[0]
    while t <= tlim[1]:
        obstimes.append(t)
        t += timedelta(minutes=resolution)
    
    latlim=[-10, 75]
    lonlim=[-160, -50]
    DPI = 100
    if clim is None:
        tecclim = [0, 20]
    else:
        tecclim = clim
    if root is None:
        if platform.system() == 'Windows':
            root = os.getcwd()
        else:
            root = '/home/smrak/Documents/scintillation/'
    if odir is None:
        if platform.system() == 'Windows':
            odir = root + '\\maps\\{}\\{}\\bw-{}-{}\\'.format(tlim[0].year, parser.parse(date).strftime("%Y%m%d"), tecclim[0], tecclim[1])
            TECFN = root + '\\maps\\{}\\{}\\conv_{}T0000-{}T0000.h5'.format(tlim[0].year, parser.parse(date).strftime("%Y%m%d"), 
                                                                           tlim[0].strftime("%m%d"), tlim[1].strftime("%m%d"))
        else:
            odir =  root + '/maps/{}/bw-{}-{}/'.format(parser.parse(date).strftime("%Y%m%d"), tecclim[0], tecclim[1])
            TECFN = '/media/smrak/figures/gpstec/{}/{}/conv_{}T0000-{}T0000.h5'.format(parser.parse(date).year, 
                                                 parser.parse(date).strftime("%m%d"),
                                                 tlim[0].strftime("%Y%m%d"), tlim[1].strftime("%Y%m%d"))
    if platform.system() == 'Windows':
        TECFN = root + '\\maps\\{}\\{}\\conv_{}T0000-{}T0000.h5'.format(tlim[0].year, parser.parse(date).strftime("%Y%m%d"), 
                                                                           tlim[0].strftime("%m%d"), (tlim[0]+timedelta(days=1)).strftime("%m%d"))
    else:
        TECFN = '/media/smrak/figures/gpstec/{}/{}/conv_{}T0000-{}T0000.h5'.format(parser.parse(date).year, 
                                                 parser.parse(date).strftime("%m%d"),
                                                 tlim[0].strftime("%Y%m%d"), (tlim[0]+timedelta(days=1)).strftime("%Y%m%d"))
    assert os.path.isfile(TECFN), TECFN
    if scintfn is None:
        if platform.system() == 'Windows':
            scint_root = root + '\\hdf\\{}\\'.format(tlim[0].year)
            
        else:
            scint_root = root + '/hdf/'
        scint_fn_list = sorted(glob.glob(scint_root + "ix_{}_{}T*.h5".format(tlim[0].year, tlim[0].strftime("%m%d"))))
        assert len(scint_fn_list) > 0
        scintfn = scint_fn_list[0]
    assert os.path.isfile(scintfn)

# --------------------------------------------------------------------------- #
    for ii, it in enumerate(obstimes):
        # TEC data
        D = gpstec.readFromHDF(TECFN)
        tectime = D['time']
        xgrid = D['xgrid']
        ygrid = D['ygrid']
        idt_tec = abs(tectime - it).argmin()
        tecim = D['tecim'][idt_tec]
        # Scintillation data
        scintdata = h5py.File(scintfn, 'r')
        scint_time = scintdata['data/time'][:]
        scint_dt = np.array([datetime.utcfromtimestamp(t) for t in scint_time])
        # Filter out time range of interest
        scint_idt = np.zeros(scint_dt.size, dtype=bool)
        time_range = np.where( (scint_dt >= it-timedelta(minutes=trange)) & (scint_dt <= it+timedelta(minutes=trange)) )[0]
        scint_idt[time_range[0]:time_range[-1]+1] = True
    #    scint_idt[time_range[0]] = True
        # Read in data
        ipp_lat = scintdata['data/ipp'][scint_idt, :, :, 0]
        ipp_lon = scintdata['data/ipp'][scint_idt, :, :, 1]
        sigma_tec = scintdata['data/sigma_tec'][scint_idt, :, :]
        snr4 = scintdata['data/snr4'][scint_idt, :, :]
        # Plot
        fig = plt.figure(figsize=[12,6])
        ax0 = plt.subplot(121, projection=ccrs.Stereographic(central_longitude=(sum(lonlim)/2)))
        ax1 = plt.subplot(122, projection=ccrs.Stereographic(central_longitude=(sum(lonlim)/2)))
    
        ax0 = cm.plotCartoMap(latlim=latlim, lonlim=lonlim, projection='stereo',
                              meridians=None, parallels=None, ax=ax0,
                              grid_linewidth=1, states = False,
                              title=it, background_color='grey',
                              apex=True, mlat_levels=[-20,0,20,40,60,80,90],
                              mlat_colors='w', mgrid_width=1, mgrid_style='--',
                              mlon_levels=np.arange(0,361,40), mlat_labels=False,
                              mlon_colors='w', mlon_labels=False)
        
        ax1 = cm.plotCartoMap(latlim=latlim, lonlim=lonlim, projection='stereo',
                              meridians=None, parallels=None, ax=ax1,
                              grid_linewidth=1, states = False,
                              title=it, background_color='grey',
                              apex=True, mlat_levels=[-20,0,20,40,60,80,90],
                              mlat_colors='w', mgrid_width=1, mgrid_style='--',
                              mlon_levels=np.arange(0,361,40), mlat_labels=False,
                              mlon_colors='w', mlon_labels=False)
        # ------------------------------------------------------------------------- - #
        im0 = ax0.pcolormesh(xgrid, ygrid, tecim.T, cmap='gray', 
                             vmin = tecclim[0], vmax = tecclim[1], 
                            transform=ccrs.PlateCarree())
        im1 = ax1.pcolormesh(xgrid, ygrid, tecim.T, cmap='gray', #'nipy_spectral'
                             vmin = tecclim[0], vmax = tecclim[1], 
                            transform=ccrs.PlateCarree())
        # Scint with amplitude
        if np.sum(np.isfinite(sigma_tec)) > 0:
            ax0.scatter(ipp_lon, ipp_lat,
                        c = 'r',
                        s = (sigma_tec)**2 * 1000000,
                        marker = '+',
                        alpha=0.2,
    #                    facecolors = 'none',
                        transform = ccrs.PlateCarree())
        if np.sum(np.isfinite(snr4)) > 0:
            ax0.scatter(ipp_lon, ipp_lat,
                        c = 'b',
                        s = np.square(snr4) * 1000,
                        linewidth = 0.8,
                        marker = 'x',
                        alpha = 1,
    #                    facecolors = 'none',
                        transform = ccrs.PlateCarree())
        # Scint locations
        if np.sum(np.isfinite(sigma_tec)) > 0:
            maskst = np.isfinite(sigma_tec)
            ax1.scatter(ipp_lon[maskst], ipp_lat[maskst],
                        c = 'r',
                        s = 2,
                        marker = '.',
                        alpha=0.5,
                        transform = ccrs.PlateCarree())
        if np.sum(np.isfinite(snr4)) > 0:
            masks4 = np.isfinite(snr4)
            ax1.scatter(ipp_lon[masks4], ipp_lat[masks4],
                        c = 'b',
                        s = 10,
                        lw = 0.2,
                        marker = 'x',
                        alpha = 0.5,
                        transform = ccrs.PlateCarree())
            
        posn = ax1.get_position()
        cax = fig.add_axes([posn.x0+posn.width+0.01, posn.y0, 0.02, posn.height])
        fig.colorbar(im1, cax=cax, label='TEC [TECu]')
        
        if SAVE:
            if not os.path.exists(odir):
                import subprocess
                if platform.system() == 'Linux':
                    subprocess.call('mkdir -p "{}"'.format(odir), shell=True, timeout=2)
                elif platform.system() == 'Windows':
                    subprocess.call('mkdir "{}"'.format(odir), shell=True, timeout=2)
            print ("Plotting {}/{} - {}".format(ii+1, len(obstimes), it))
            fig.savefig(odir+'{}.png'.format(it.strftime('%m%d_%H%M')), dpi=DPI)
            plt.close(fig)
            
            del fig
            del sigma_tec
            del snr4
Example #5
0
    bary = np.einsum('njk,nk->nj', temp[:, :d, :], delta)
    return vertices, np.hstack((bary, 1 - bary.sum(axis=1, keepdims=True)))

def _interpolate(values, vtx, wts, fill_value=np.nan):
        ret = np.einsum('nj,nj->n', np.take(values, vtx), wts)
        ret[np.any(wts < 0, axis=1)] = fill_value
        return ret

tlim = [datetime(2016,5,8,0), datetime(2016,5,8,5)]
lonlim = [-140, -55]
latlim = [0, 60]
res = 0.3

fnhdf = 'G:\\My Drive\\scintillation_data\\tid\\20160508\\conv_20160508T0000-20160509T0000.h5'

D = gpstec.readFromHDF(fnhdf)
idt = (D['time'] >= tlim[0]) & (D['time'] <= tlim[1])
idx = (D['xgrid'] >= lonlim[0]) & (D['xgrid'] <= lonlim[1])
idy = (D['ygrid'] >= latlim[0]) & (D['ygrid'] <= latlim[1])

xgt, ygt = np.meshgrid(np.arange(D['xgrid'][idx][0], D['xgrid'][idx][-1]+0.1, 1),
                       np.arange(D['ygrid'][idy][0], D['ygrid'][idy][-1]+0.1, 1))

T0t = D['tecim'][idt]
T0x = T0t[:, idx, :]
T0 = T0x[:, :, idy]

xg, yg = np.meshgrid(np.arange(D['xgrid'][idx][0], D['xgrid'][idx][-1]+0.1, res),
                       np.arange(D['ygrid'][idy][0], D['ygrid'][idy][-1]+0.1, res))

z = T0[0].T
Example #6
0
def plot(fnhdf: str = None,
         show: bool = False,
         odir: str = None,
         cfg: str = None,
         clim: list = None,
         mode: str = None):
    C0 = clim
    fnhdf = os.path.expanduser(fnhdf.strip())
    assert fnhdf is not None
    assert os.path.splitext(fnhdf)[1] in ['.h5', '.hdf5']
    # Converted file
    D = gpstec.readFromHDF(fnhdf)
    if cfg is None:
        folder = os.path.expanduser(os.path.join(os.getcwd(), 'map'))

        mcfg = sorted(glob(os.path.join(folder, '*.yaml')))[0]
    else:
        assert os.path.splitext(cfg)[1] in ['.yaml', 'yml']
        mcfg = cfg

    # Map
    mst = yaml.load(open(mcfg, 'r'))
    projection = mst.get('projection')
    cmap = mst.get('cmap')
    nightshade = mst.get('nightshade')
    latlim = mst.get('latlim')
    lonlim = mst.get('lonlim')
    paralim = mst.get('parallels')
    meridilim = mst.get('meridians')
    parallels = np.arange(paralim[0], paralim[1], paralim[2])
    meridians = np.arange(meridilim[0], meridilim[1], meridilim[2])
    if mode is None:
        mode = mst.get('mode') if mst.get('mode') is not None else 'lin'
    if isinstance(mode, str):
        mode = [mode]
    colorbar = mst.get('colorbar')
    cbar_label = mst.get('cbar_label') if mst.get(
        'cbar_label') is not None else 'TEC [TECu]'
    if clim is None:
        clim = mst.get('clim')

    if clim is None:
        vmax = 3 * _round(np.nanmedian(D['tecim']), base=5)
        vmin = 0
        clim = [vmin, vmax]
    else:
        vmax = float(clim[1])
        vmin = float(clim[0])
        clim = [vmin, vmax]

    figsize = mst.get('figsize') if mst.get('figsize') is not None else [12, 8]
    background_color = mst.get('background_color') if mst.get(
        'background_color') is not None else 'grey'
    grid_color = mst.get('grid_color') if mst.get(
        'grid_color') is not None else 'white'
    grid_linewidth = mst.get('grid_linewidth') if mst.get(
        'grid_linewidth') is not None else 1
    grid_linestyle = mst.get('grid_linestyle') if mst.get(
        'grid_linestyle') is not None else '--'

    dpi = mst.get('dpi') if mst.get('dpi') is not None else 50

    # Plot
    for mode in mode:
        if mode == 'log': clim[1] = np.log10(vmax)
        else: clim[1] = vmax
        for i in range(D['time'].shape[0]):
            z = np.log10(D['tecim'][i]) if mode == 'log' else D['tecim'][i]
            fig, ax = gm.plotCartoMap(figsize=figsize,
                                      projection=projection,
                                      title=D['time'][i],
                                      latlim=latlim,
                                      lonlim=lonlim,
                                      meridians=meridians,
                                      parallels=parallels,
                                      background_color=background_color,
                                      grid_color=grid_color,
                                      grid_linewidth=grid_linewidth,
                                      grid_linestyle=grid_linestyle,
                                      figure=True,
                                      nightshade=nightshade,
                                      ns_dt=D['time'][i])
            im = plt.pcolormesh(D['xgrid'],
                                D['ygrid'],
                                z.T,
                                cmap=cmap,
                                transform=ccrs.PlateCarree())
            plt.clim(clim)

            if colorbar:
                cax = fig.add_axes([0, 0, 0.1, 0.1])
                plt.colorbar(im, cax=cax, label=cbar_label)

                axp = fig.gca()
                posn = ax.get_position()
                axp.set_position(
                    [posn.x0 + posn.width + 0.01, posn.y0, 0.02, posn.height])
                fig.canvas.draw()
            if show:
                plt.show()
            else:
                if odir is None:
                    odir = os.path.split(fnhdf)[0]
                assert os.path.isdir(odir)
                if C0 is not None:
                    svdir = mode + str(int(clim[0])) + '-' + str(int(clim[1]))
                else:
                    svdir = mode
                figdir = os.path.expanduser(os.path.join(odir, svdir))
                if not os.path.exists(figdir):
                    print('Creating a new directory: ', figdir)
                    subprocess.call('mkdir -p {}'.format(figdir),
                                    shell=True,
                                    timeout=5)
                fn = D['time'][i].strftime('%m%d_%H%M')
                figname = fn + str('.png')
                plt.savefig(os.path.join(figdir, figname), dpi=dpi)
                plt.close(fig=fig)
Example #7
0
def plot(fnhdf: str = None,
         odir: str = None,
         cfg: str = None,
         clim: list = None,
         mode: str = None,
         average: int = None,
         cmap=None,
         projection=None,
         lonlim=None,
         latlim=None,
         terminator=None):
    C0 = clim
    fnhdf = os.path.expanduser(fnhdf.strip())
    assert fnhdf is not None
    assert os.path.splitext(fnhdf)[1] in ['.h5', '.hdf5']
    # Converted file
    D = gpstec.readFromHDF(fnhdf)
    if cfg is None:
        folder = os.path.expanduser(os.path.join(os.getcwd(), 'map'))

        mcfg = sorted(glob(os.path.join(folder, '*.yaml')))[0]
    else:
        assert os.path.splitext(cfg)[1] in ['.yaml', 'yml']
        mcfg = cfg

    # Map
    mst = yaml.load(open(mcfg, 'r'))
    if projection is None:
        projection = mst.get('projection')
    if cmap is None:
        cmap = mst.get('cmap')
    if lonlim is None:
        lonlim = mst.get('lonlim')
    if latlim is None:
        latlim = mst.get('latlim')
    try:
        nightshade = mst.get('nightshade')
    except:
        pass
    try:
        paralim = mst.get('parallels')
        meridilim = mst.get('meridians')
        parallels = np.arange(paralim[0], paralim[1], paralim[2])
        meridians = np.arange(meridilim[0], meridilim[1], meridilim[2])
    except:
        parallels = []
        meridians = []

    try:
        apex = True
        mlatlim = mst.get('mlat')
        mltlim = mst.get('mlt')
        mlat_levels = np.arange(mlatlim[0], mlatlim[1] + .1, mlatlim[2])
        mlon_levels = np.arange(mltlim[0], mltlim[1] + .1, mltlim[2])
    except:
        apex = False
        mlat_levels = None
        mlon_levels = None

    if mode is None:
        mode = 'lin'
    if isinstance(mode, str):
        mode = [mode]

    colorbar = mst.get('colorbar')
    cbar_label = mst.get('cbar_label') if mst.get(
        'cbar_label') is not None else 'TEC [TECu]'
    if clim is None:
        clim = mst.get('clim')

    if clim is None:
        vmax = 3 * _round(np.nanmedian(D['tecim']), base=5)
        vmin = 0
        clim = [vmin, vmax]
    else:
        vmax = float(clim[1])
        vmin = float(clim[0])
        clim = [vmin, vmax]

    figsize = mst.get('figsize') if mst.get('figsize') is not None else [12, 8]
    background_color = mst.get('background_color') if mst.get(
        'background_color') is not None else 'grey'
    grid_color = mst.get('grid_color') if mst.get(
        'grid_color') is not None else 'white'
    grid_linewidth = mst.get('grid_linewidth') if mst.get(
        'grid_linewidth') is not None else 1
    grid_linestyle = mst.get('grid_linestyle') if mst.get(
        'grid_linestyle') is not None else '--'

    dpi = int(mst.get('DPI')) if mst.get('DPI') is not None else 50

    # Plot
    for mode in mode:
        if mode == 'log': clim[1] = np.log10(vmax)
        else: clim[1] = vmax
        iterate = np.arange(0, D['time'].size, average)
        for i in iterate:  #range(D['time'].shape[0]):
            t0 = D['time'][i]
            z = np.log10(np.nanmean(D['tecim'][i:i + average],
                                    axis=0)) if mode == 'log' else np.nanmean(
                                        D['tecim'][i:i + average], axis=0)
            fig, ax = gm.plotCartoMap(
                latlim=latlim,
                lonlim=lonlim,
                projection='merc',  #lon0 = -90,#glons[idmidnight],
                title=t0,
                #lat0 = 40,
                meridians=None,
                parallels=None,
                figsize=figsize,
                background_color='gray',
                border_color='k',
                states=0,
                apex=True,
                mlat_labels=0,
                mlon_labels=0,
                mlat_levels=mlat_levels,
                mlon_levels=mlon_levels,
                date=t0,
                mlon_colors='w',
                mlat_colors='w',
                mlon_cs='mlt',
                terminator=True,
                ter_color='r',
                terminator_altkm=350)

            print("Plotting {}".format(D['time'][i]))
            im = plt.pcolormesh(D['xgrid'],
                                D['ygrid'],
                                z.T,
                                cmap=cmap,
                                transform=ccrs.PlateCarree())
            plt.clim(clim)

            if colorbar:
                posn = ax.get_position()
                cax = fig.add_axes(
                    [posn.x0 + posn.width + 0.01, posn.y0, 0.02, posn.height])
                fig.colorbar(im, cax=cax, label='TEC [TECu]')

            if odir is None:
                odir = os.path.join(
                    os.path.split(fnhdf)[0], D['time'][i].strftime("%Y%m%d"))
            svdir = projection + '_' + mode + '_' + str(int(
                clim[0])) + '-' + str(int(clim[1]))
            figdir = os.path.expanduser(os.path.join(odir, svdir))
            if not os.path.exists(figdir):
                print('Creating a new directory: ', figdir)
                if platform.system == 'Linux':
                    subprocess.call('mkdir -p {}'.format(figdir),
                                    shell=True,
                                    timeout=5)
                else:
                    subprocess.call('mkdir "{}"'.format(figdir),
                                    shell=True,
                                    timeout=5)
            fn = D['time'][i].strftime('%m%d_%H%M')
            figname = fn + str('.png')
            plt.savefig(os.path.join(figdir, figname), dpi=dpi)
            plt.close(fig=fig)