def singleRundBdt(runname, searchpatt='mag_grid_e20100405-0[89][0-5][0-9][03]0.out', outdir='dBdt_maps', links=True): useProject = ccrs.PlateCarree #Projection to use for plotting, e.g., ccrs.AlbersEqualArea plotprojection = useProject(central_longitude=-90.0) pdata = { 'plotvar': 'dBdth', 'dataprojection': ccrs.PlateCarree(), 'plotprojection': plotprojection, } #add transmission lines from ArcGIS shapefile #fname = 'txlines/Transmission_lines.shp' #txshapes = list(shapereader.Reader(fname).geometries()) #albers = ccrs.AlbersEqualArea(central_longitude=-96.0, # central_latitude=23.0, # standard_parallels=(29.5,45.5)) #txinpc = [plotprojection.project_geometry(ii, albers) for ii in txshapes] pdata['shapes'] = None #txinpc rundir = runname[4:] globterm = os.path.join(runname, 'RESULTS', rundir, 'GM', searchpatt) globterm = os.path.join(runname, searchpatt) tstep = 60 #30 #diff between subsequent files in seconds allfiles = sorted(glob.glob(globterm)) #startpoint, forward diff. infiles = allfiles #all except endpoints, central diff for idx, fname in enumerate(infiles[1:-1], start=1): minusone = bats.MagGridFile(infiles[idx - 1]) #, format='ascii') mdata = bats.MagGridFile(fname) #, format='ascii') plusone = bats.MagGridFile(infiles[idx + 1]) #, format='ascii') mdata['dBdtn'] = dm.dmarray(gmdtools.centralDiff( minusone['dBn'], plusone['dBn'], tstep), attrs={'units': 'nT/s'}) mdata['dBdte'] = dm.dmarray(gmdtools.centralDiff( minusone['dBe'], plusone['dBe'], tstep), attrs={'units': 'nT/s'}) mdata['dBdth'] = dm.dmarray(np.sqrt(mdata['dBdtn']**2 + mdata['dBdte']**2), attrs={'units': 'nT/s'}) ax = gmdtools.plotFilledContours(mdata, pdata, addTo=None) #windows can't handle colons in filenames... isotime = mdata.attrs['time'].isoformat() plt.savefig(os.path.join( outdir, r'{0}_{1}.png'.format(pdata['plotvar'], isotime.replace(':', ''))), dpi=300) plt.close() if links: gmdtools.makeSymlinks(outdir, kind='dBdt')
def testOpen(self): # Open both binary and ascii versions of same data. # Ensure expected values are loaded. m1 = pbs.MagGridFile('data/pybats_test/mag_grid_ascii.out', format='ascii') m2 = pbs.MagGridFile('data/pybats_test/mag_grid_binary.out') self.assertAlmostEqual(self.knownDbnMax, m1['dBn'].max()) self.assertAlmostEqual(self.knownPedMax, m1['dBnPed'].max()) self.assertAlmostEqual(self.knownDbnMax, m2['dBn'].max()) self.assertAlmostEqual(self.knownPedMax, m2['dBnPed'].max())
def testOpenTypeGuess(self): # Open both binary and ascii versions of same data # without specifying the type. # Ensure expected values are loaded. m1 = pbs.MagGridFile('data/pybats_test/mag_grid_ascii.out') m2 = pbs.MagGridFile('data/pybats_test/mag_grid_binary.out') self.assertAlmostEqual(self.knownDbnMax, m1['dBn'].max()) self.assertAlmostEqual(self.knownPedMax, m1['dBnPed'].max()) self.assertAlmostEqual(self.knownDbnMax, m2['dBn'].max()) self.assertAlmostEqual(self.knownPedMax, m2['dBnPed'].max())
def testCalc(self): # Open both binary and ascii versions of same data. # Ensure calculations give expected values. m1 = pbs.MagGridFile('data/pybats_test/mag_grid_ascii.out', format='ascii') m2 = pbs.MagGridFile('data/pybats_test/mag_grid_binary.out') # Calculation of H-component: m1.calc_h() m2.calc_h() self.assertAlmostEqual(self.knownDbhMax, m1['dBh'].max()) self.assertAlmostEqual(self.knownDbhMax, m2['dBh'].max())
def testCalc(self): # Open both binary and ascii versions of same data. # Ensure calculations give expected values. m1 = pbs.MagGridFile( os.path.join(spacepy_testing.datadir, 'pybats_test', 'mag_grid_ascii.out')) m2 = pbs.MagGridFile( os.path.join(spacepy_testing.datadir, 'pybats_test', 'mag_grid_binary.out')) # Calculation of H-component: m1.calc_h() m2.calc_h() self.assertAlmostEqual(self.knownDbhMax, m1['dBh'].max()) self.assertAlmostEqual(self.knownDbhMax, m2['dBh'].max())
def testOpen(self): # Open both binary and ascii versions of same data. # Ensure expected values are loaded. m1 = pbs.MagGridFile( os.path.join(spacepy_testing.datadir, 'pybats_test', 'mag_grid_ascii.out')) m2 = pbs.MagGridFile( os.path.join(spacepy_testing.datadir, 'pybats_test', 'mag_grid_binary.out')) self.assertAlmostEqual(self.knownDbnMax, m1['dBn'].max()) self.assertAlmostEqual(self.knownPedMax, m1['dBnPed'].max()) self.assertAlmostEqual(self.knownDbnMax, m2['dBn'].max()) self.assertAlmostEqual(self.knownPedMax, m2['dBnPed'].max())
def ensembleThresh(searchpatt='mag_grid_e20100405-083[12][0-5]0.out', outdir='dBdt_images'): useProject = ccrs.PlateCarree #Projection to use for plotting, e.g., ccrs.AlbersEqualArea plotprojection = useProject(central_longitude=-90.0) pdata = { 'thresh': 2.0, #nT/s 'plotvar': 'dBdth', 'dataprojection': ccrs.PlateCarree(), 'plotprojection': plotprojection, } #add transmission lines from ArcGIS shapefile fname = 'txlines/Transmission_lines.shp' txshapes = list(shapereader.Reader(fname).geometries()) albers = ccrs.AlbersEqualArea(central_longitude=-96.0, central_latitude=23.0, standard_parallels=(29.5, 45.5)) txinpc = [plotprojection.project_geometry(ii, albers) for ii in txshapes] pdata['shapes'] = txinpc members = { 'run_fullmag_001': [], 'run_fullmag_002': [], 'run_fullmag_030': [], 'run_fullmag_042': [], #'run_fullmag_043': [], 'run_fullmag_044': [], } colors = { 'run_fullmag_001': 'firebrick', 'run_fullmag_002': 'goldenrod', 'run_fullmag_030': 'olive', 'run_fullmag_042': 'skyblue', #'run_fullmag_043': 'slateblue', 'run_fullmag_044': 'brown', } for key in members.keys(): rundir = key[4:] globterm = os.path.join(key, 'RESULTS', rundir, 'GM', searchpatt) members[key] = sorted(glob.glob(globterm)) tstep = 10 #diff between subsequent files in seconds allruns = list(members.keys()) #following code assumes that same files are found by glob for each ensemble #member, so we'll check that here to avoid mixing timesteps tmplist = [os.path.basename(fn) for fn in members[allruns[0]]] for memb in allruns[1:]: complist = [os.path.basename(fn) for fn in members[memb]] try: assert tmplist == complist except AssertionError: print(memb) raise AssertionError #startpoint, forward diff. baseline = allruns.pop() infiles = members[baseline] pdata['ccolor'] = colors[baseline] mdata = bats.MagGridFile(infiles[0]) plusone = bats.MagGridFile(infiles[1]) plustwo = bats.MagGridFile(infiles[2]) mdata['dBdtn'] = dm.dmarray(forwardDiff(mdata['dBn'], plusone['dBn'], plustwo['dBn'], tstep), attrs={'units': 'nT/s'}) mdata['dBdte'] = dm.dmarray(forwardDiff(mdata['dBe'], plusone['dBe'], plustwo['dBe'], tstep), attrs={'units': 'nT/s'}) mdata['dBdth'] = dm.dmarray(np.sqrt(mdata['dBdtn']**2 + mdata['dBdte']**2), attrs={'units': 'nT/s'}) ax = gmdtools.plotContour(mdata, pdata, addTo=None) for memb in allruns: mfiles = members[memb] pdata['ccolor'] = colors[memb] mdata = bats.MagGridFile(mfiles[0]) plusone = bats.MagGridFile(mfiles[1]) plustwo = bats.MagGridFile(mfiles[2]) mdata['dBdtn'] = dm.dmarray(forwardDiff(mdata['dBn'], plusone['dBn'], plustwo['dBn'], tstep), attrs={'units': 'nT/s'}) mdata['dBdte'] = dm.dmarray(forwardDiff(mdata['dBe'], plusone['dBe'], plustwo['dBe'], tstep), attrs={'units': 'nT/s'}) mdata['dBdth'] = dm.dmarray(np.sqrt(mdata['dBdtn']**2 + mdata['dBdte']**2), attrs={'units': 'nT/s'}) ax = gmdtools.plotContour(mdata, pdata, addTo=ax) #windows can't handle colons in filenames... isotime = mdata.attrs['time'].isoformat() plt.savefig(os.path.join( outdir, r'{0}_{1}.png'.format(pdata['plotvar'], isotime.replace(':', ''))), dpi=300) plt.close() #all except endpoints, central diff for idx, fname in enumerate(infiles[1:-1], start=1): pdata['ccolor'] = colors[baseline] minusone = bats.MagGridFile(infiles[idx - 1]) mdata = bats.MagGridFile(fname) plusone = bats.MagGridFile(infiles[idx + 1]) mdata['dBdtn'] = dm.dmarray(centralDiff(minusone['dBn'], plusone['dBn'], tstep), attrs={'units': 'nT/s'}) mdata['dBdte'] = dm.dmarray(centralDiff(minusone['dBe'], plusone['dBe'], tstep), attrs={'units': 'nT/s'}) mdata['dBdth'] = dm.dmarray(np.sqrt(mdata['dBdtn']**2 + mdata['dBdte']**2), attrs={'units': 'nT/s'}) ax = plotContour(mdata, pdata, addTo=None) for memb in allruns: mfiles = members[memb] pdata['ccolor'] = colors[memb] minusone = bats.MagGridFile(mfiles[idx - 1]) mdata = bats.MagGridFile(mfiles[idx]) plusone = bats.MagGridFile(mfiles[idx + 1]) mdata['dBdtn'] = dm.dmarray(centralDiff(minusone['dBn'], plusone['dBn'], tstep), attrs={'units': 'nT/s'}) mdata['dBdte'] = dm.dmarray(centralDiff(minusone['dBe'], plusone['dBe'], tstep), attrs={'units': 'nT/s'}) mdata['dBdth'] = dm.dmarray(np.sqrt(mdata['dBdtn']**2 + mdata['dBdte']**2), attrs={'units': 'nT/s'}) ax = gmdtools.plotContour(mdata, pdata, addTo=ax) #windows can't handle colons in filenames... isotime = mdata.attrs['time'].isoformat() plt.savefig(os.path.join( outdir, r'{0}_{1}.png'.format(pdata['plotvar'], isotime.replace(':', ''))), dpi=300) plt.close() #final point, backwards diff. pdata['ccolor'] = colors[baseline] minustwo = bats.MagGridFile(infiles[-3]) minusone = bats.MagGridFile(infiles[-2]) mdata = bats.MagGridFile(infiles[-1]) mdata['dBdtn'] = dm.dmarray(backwardsDiff(minustwo['dBn'], minusone['dBn'], mdata['dBn'], tstep), attrs={'units': 'nT/s'}) mdata['dBdte'] = dm.dmarray(backwardsDiff(minustwo['dBn'], minusone['dBe'], mdata['dBe'], tstep), attrs={'units': 'nT/s'}) mdata['dBdth'] = dm.dmarray(np.sqrt(mdata['dBdtn']**2 + mdata['dBdte']**2), attrs={'units': 'nT/s'}) ax = gmdtools.plotContour(mdata, pdata, addTo=None) for memb in allruns: mfiles = members[memb] pdata['ccolor'] = colors[memb] minustwo = bats.MagGridFile(mfiles[-3]) minusone = bats.MagGridFile(mfiles[-2]) mdata = bats.MagGridFile(mfiles[-1]) mdata['dBdtn'] = dm.dmarray(backwardsDiff(minustwo['dBn'], minusone['dBn'], mdata['dBn'], tstep), attrs={'units': 'nT/s'}) mdata['dBdte'] = dm.dmarray(backwardsDiff(minustwo['dBe'], minusone['dBe'], mdata['dBn'], tstep), attrs={'units': 'nT/s'}) mdata['dBdth'] = dm.dmarray(np.sqrt(mdata['dBdtn']**2 + mdata['dBdte']**2), attrs={'units': 'nT/s'}) ax = gmdtools.plotContour(mdata, pdata, addTo=ax) #windows can't handle colons in filenames... isotime = mdata.attrs['time'].isoformat() plt.savefig(os.path.join( outdir, r'{0}_{1}.png'.format(pdata['plotvar'], isotime.replace(':', ''))), dpi=300) plt.close() #make symlinks to images with numeric naming so it can be easily passed to ffmpeg gmdtools.makeSymlinks(outdir, kind='dBdt')
# looping through thousands of files takes a loooooong time # for the debug case, specify small subset of magnetometer files to use if debug: mag_files = [ f'./{args.magdir}/mag_grid_e20170906-180250.out', f'./{args.magdir}/mag_grid_e20170907-210350.out', f'./{args.magdir}/mag_grid_e20170908-170530.out' ] # create dict with empty arrays for calculated values and time ae_dict = {'epochs': [], 'al': [], 'au': [], 'ae': [], 'ao': []} # loop through all mag files and calculate AL, AU, AE, and AO for mag_file in mag_files: # use spacepy to open mag file mag = pbs.MagGridFile(mag_file) # get file time from attributes epoch = mag.attrs['time'] # more debugging print statements if debug: print(epoch) print(mag['Lat'][0], mag['Lat'][-1]) # get dBn array for selected latitudes only dBn = mag['dBn'][:, lower_lat:upper_lat + 1] # resample data to specific number of magnetometers dBn = resample(dBn, resample_rate) total_mags = resample_rate * (upper_lat - lower_lat + 1) if debug: print(f'resample rate = {resample_rate}') print(f'total mags = {total_mags}') # more debugging print statements