Compare commits
2 commits
3f645143cd
...
40145bc055
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
40145bc055 | ||
|
|
72a7e0cf84 |
4 changed files with 272 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
data/
|
||||||
|
|
||||||
BIN
.swa.py.swp
Normal file
BIN
.swa.py.swp
Normal file
Binary file not shown.
134
swa.py
134
swa.py
|
|
@ -1,2 +1,136 @@
|
||||||
#! /usr/bin/python3
|
#! /usr/bin/python3
|
||||||
|
|
||||||
|
from spacepy import pycdf
|
||||||
|
import numpy as np
|
||||||
|
import datetime
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import matplotlib.dates as mdates
|
||||||
|
from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable
|
||||||
|
|
||||||
|
# Data directory
|
||||||
|
datadir = '/home/nicolassurface/ET-U2-SWA/data'
|
||||||
|
# EAS1 filename
|
||||||
|
fname_1 = 'solo_L1_swa-eas1-NM3D_20220407T000004-20220407T060504_V01.cdf'
|
||||||
|
# EAS2 filename
|
||||||
|
fname_2 = 'solo_L1_swa-eas2-NM3D_20220407T000004-20220407T060504_V01.cdf'
|
||||||
|
|
||||||
|
# EAS1
|
||||||
|
file_1 = pycdf.CDF(datadir+fname_1)
|
||||||
|
time_1 = file_1['EPOCH'][...]
|
||||||
|
counts_1 = file_1['SWA_EAS1_Data'][...]
|
||||||
|
elev_1 = file_1['SWA_EAS_ELEVATION'][...]
|
||||||
|
azim_1 = file_1['SWA_EAS_AZIMUTH'][...]
|
||||||
|
energy_1 = file_1['SWA_EAS1_ENERGY'][...]
|
||||||
|
file_1.close()
|
||||||
|
|
||||||
|
# EAS2
|
||||||
|
file_2 = pycdf.CDF(datadir+fname_2)
|
||||||
|
time_2 = file_2['EPOCH'][...]
|
||||||
|
counts_2 = file_2['SWA_EAS2_Data'][...]
|
||||||
|
elev_2 = file_2['SWA_EAS_ELEVATION'][...]
|
||||||
|
azim_2 = file_2['SWA_EAS_AZIMUTH'][...]
|
||||||
|
energy_2 = file_2['SWA_EAS2_ENERGY'][...]
|
||||||
|
file_2.close()
|
||||||
|
|
||||||
|
# Sum over energy, azimuth and elevation:
|
||||||
|
def sum3d(counts, dimA, dimB, dimC):
|
||||||
|
sum3d_counts = np.sum(np.sum(np.sum(counts, axis=dimA), axis=dimB), axis=dimC)
|
||||||
|
return sum3d_counts.T
|
||||||
|
counts_tot_1 = sum3d(counts_1, 3, 2, 1) # EAS1
|
||||||
|
counts_tot_2 = sum3d(counts_2, 3, 2, 1) # EAS2
|
||||||
|
|
||||||
|
def sum2d(counts, dimA, dimB):
|
||||||
|
sum2d_counts = np.sum(np.sum(counts, axis=dimA), axis=dimB)
|
||||||
|
return sum2d_counts.T
|
||||||
|
# Sum over azimuth and elevation:
|
||||||
|
counts_energy_spectro_1 = sum2d(counts_1, 3, 1) # EAS1
|
||||||
|
counts_energy_spectro_2 = sum2d(counts_2, 3, 1) # EAS2
|
||||||
|
# Sum over energy and elevtion
|
||||||
|
counts_azim_spectro_1 = sum2d(counts_1, 2, 1) # EAS1
|
||||||
|
counts_azim_spectro_2 = sum2d(counts_2, 2, 1) # EAS2
|
||||||
|
# Sum over energy and azimuth
|
||||||
|
counts_elev_spectro_1 = sum2d(counts_1, 3, 2) # EAS1
|
||||||
|
counts_elev_spectro_2 = sum2d(counts_2, 3, 2) # EAS2
|
||||||
|
|
||||||
|
def make_plots(fname, time, counts_tot, energy, azim, elev, counts_energy_spectro, counts_azim_spectro, counts_elev_spectro):
|
||||||
|
# Set figure size
|
||||||
|
fig = plt.figure(figsize=(15,10))
|
||||||
|
fig.subplots_adjust(hspace=0.25)
|
||||||
|
# Set time range
|
||||||
|
t1 = datetime.datetime(year=int(fname[22:26]), month=int(fname[26:28]), day=int(fname[28:30]), \
|
||||||
|
hour=int(fname[31:33]), minute=int(fname[33:35])) # set start time
|
||||||
|
t2 = datetime.datetime(year=int(fname[38:42]), month=int(fname[42:44]), day=int(fname[44:46]), \
|
||||||
|
hour=int(fname[47:49]), minute=int(fname[49:51])) # set end time
|
||||||
|
xfmt = mdates.DateFormatter('%H:%M')
|
||||||
|
# Line plot
|
||||||
|
x = time
|
||||||
|
y = counts_tot
|
||||||
|
ax1 = fig.add_subplot(411)
|
||||||
|
ax1.plot(x, y, linewidth=0.5, color='k')
|
||||||
|
ax1.xaxis.set_major_formatter(xfmt)
|
||||||
|
ax1.set_xlim(t1, t2)
|
||||||
|
ax1.ticklabel_format(axis='y', style='sci', scilimits=(0,0))
|
||||||
|
ax1.set_xlabel('Time (HH:MM)')
|
||||||
|
ax1.set_ylabel('Total counts')
|
||||||
|
ax1.grid(linestyle=':', linewidth=0.5)
|
||||||
|
ax1.set_title('SWA-EAS%s Nominal Mode 3D Data: %s %s-%s\n' %(str(fname)[15:16], str(t1)[0:10], str(t1)[11:16], str(t2)[11:16]))
|
||||||
|
ax1_divider = make_axes_locatable(ax1)
|
||||||
|
ax1.tick_params(width=0.5, length=1.5)
|
||||||
|
cax1 = ax1_divider.append_axes('right', size='2%', pad='2%')
|
||||||
|
cax1.axis('off')
|
||||||
|
cax1.tick_params(width=0.5, length=1.5)
|
||||||
|
# Energy spectrogram
|
||||||
|
x, y = np.meshgrid(time, energy[1,:])
|
||||||
|
ax2 = fig.add_subplot(412)
|
||||||
|
CS2 = ax2.pcolormesh(x[:,:], y[:,:], np.log10(counts_energy_spectro[:,:]), cmap='jet') # plot spectrogram
|
||||||
|
ax2.set_yscale('log')
|
||||||
|
ax2.xaxis.set_major_formatter(xfmt)
|
||||||
|
ax2.set_xlim(t1, t2)
|
||||||
|
ax2.tick_params(labelbottom=True)
|
||||||
|
ax2.set_xlabel('Time (HH:MM)')
|
||||||
|
ax2.set_ylabel('Energy (eV)')
|
||||||
|
ax2.grid(linestyle=':', linewidth=0.5)
|
||||||
|
ax2_divider = make_axes_locatable(ax2)
|
||||||
|
ax2.tick_params(width=0.5, length=1.5)
|
||||||
|
cax2 = ax2_divider.append_axes('right', size='2%', pad='2%')
|
||||||
|
cax2.tick_params(width=0.5, length=1.5)
|
||||||
|
cbar2 = plt.colorbar(CS2, cax=cax2, label='$\mathregular{log_{10}}$(Counts)')
|
||||||
|
cbar2.minorticks_off()
|
||||||
|
# Azimuth spectrogram
|
||||||
|
x, y = np.meshgrid(time, azim)
|
||||||
|
ax3 = fig.add_subplot(413)
|
||||||
|
CS3 = ax3.pcolormesh(x[:,:], y[:,:], counts_azim_spectro[:,:], cmap='jet')
|
||||||
|
ax3.xaxis.set_major_formatter(xfmt)
|
||||||
|
ax3.set_xlim(t1, t2)
|
||||||
|
ax3.tick_params(labelbottom=True)
|
||||||
|
ax3.set_xlabel('Time (HH:MM)')
|
||||||
|
ax3.set_ylabel('Azimuth ($^\circ$)')
|
||||||
|
ax3.grid(linestyle=':', linewidth=0.5)
|
||||||
|
ax3_divider = make_axes_locatable(ax3)
|
||||||
|
ax3.tick_params(width=0.5, length=1.5)
|
||||||
|
cax3 = ax3_divider.append_axes('right', size='2%', pad='2%')
|
||||||
|
cax3.tick_params(width=0.5, length=1.5)
|
||||||
|
cbar3 = plt.colorbar(CS3, cax=cax3, label='Counts')
|
||||||
|
cbar3.formatter.set_powerlimits((0,0))
|
||||||
|
cbar3.minorticks_off()
|
||||||
|
# Elevation spectrogram
|
||||||
|
x, y = np.meshgrid(time, elev)
|
||||||
|
ax4 = fig.add_subplot(414)
|
||||||
|
CS4 = ax4.pcolormesh(x[:,:], y[:,:], counts_elev_spectro[:,:][::-1], cmap='jet')
|
||||||
|
ax4.xaxis.set_major_formatter(xfmt)
|
||||||
|
ax4.set_xlim(t1, t2)
|
||||||
|
ax4.set_xlabel('Time (HH:MM)')
|
||||||
|
ax4.set_ylabel('Elevation ($^\circ$)')
|
||||||
|
ax4.grid(linestyle=':', linewidth=0.5)
|
||||||
|
ax4_divider = make_axes_locatable(ax4)
|
||||||
|
ax4.tick_params(width=0.5, length=1.5)
|
||||||
|
cax4 = ax4_divider.append_axes('right', size='2%', pad='2%')
|
||||||
|
cax4.tick_params(width=0.5, length=1.5)
|
||||||
|
cbar4 = plt.colorbar(CS4, cax=cax4, label='Counts')
|
||||||
|
cbar4.formatter.set_powerlimits((0,0))
|
||||||
|
cbar4.minorticks_off()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
make_plots(fname_1, time_1, counts_tot_1, energy_1, azim_1, elev_1, counts_energy_spectro_1, counts_azim_spectro_1, counts_elev_spectro_1)
|
||||||
|
|
|
||||||
136
swa_eas.py
Normal file
136
swa_eas.py
Normal file
|
|
@ -0,0 +1,136 @@
|
||||||
|
#! /usr/bin/python3
|
||||||
|
|
||||||
|
from spacepy import pycdf
|
||||||
|
import numpy as np
|
||||||
|
import datetime
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import matplotlib.dates as mdates
|
||||||
|
from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable
|
||||||
|
|
||||||
|
# Data directory
|
||||||
|
datadir = '/home/nicolassurface/ET-U2-SWA/data'
|
||||||
|
# EAS1 filename
|
||||||
|
fname_1 = 'solo_L1_swa-eas1-NM3D_20220407T000004-20220407T060504_V01.cdf'
|
||||||
|
# EAS2 filename
|
||||||
|
fname_2 = 'solo_L1_swa-eas2-NM3D_20220407T000004-20220407T060504_V01.cdf'
|
||||||
|
|
||||||
|
# EAS1
|
||||||
|
file_1 = pycdf.CDF(datadir+fname_1)
|
||||||
|
time_1 = file_1['EPOCH'][...]
|
||||||
|
counts_1 = file_1['SWA_EAS1_Data'][...]
|
||||||
|
elev_1 = file_1['SWA_EAS_ELEVATION'][...]
|
||||||
|
azim_1 = file_1['SWA_EAS_AZIMUTH'][...]
|
||||||
|
energy_1 = file_1['SWA_EAS1_ENERGY'][...]
|
||||||
|
file_1.close()
|
||||||
|
|
||||||
|
# EAS2
|
||||||
|
file_2 = pycdf.CDF(datadir+fname_2)
|
||||||
|
time_2 = file_2['EPOCH'][...]
|
||||||
|
counts_2 = file_2['SWA_EAS2_Data'][...]
|
||||||
|
elev_2 = file_2['SWA_EAS_ELEVATION'][...]
|
||||||
|
azim_2 = file_2['SWA_EAS_AZIMUTH'][...]
|
||||||
|
energy_2 = file_2['SWA_EAS2_ENERGY'][...]
|
||||||
|
file_2.close()
|
||||||
|
|
||||||
|
# Sum over energy, azimuth and elevation:
|
||||||
|
def sum3d(counts, dimA, dimB, dimC):
|
||||||
|
sum3d_counts = np.sum(np.sum(np.sum(counts, axis=dimA), axis=dimB), axis=dimC)
|
||||||
|
return sum3d_counts.T
|
||||||
|
counts_tot_1 = sum3d(counts_1, 3, 2, 1) # EAS1
|
||||||
|
counts_tot_2 = sum3d(counts_2, 3, 2, 1) # EAS2
|
||||||
|
|
||||||
|
def sum2d(counts, dimA, dimB):
|
||||||
|
sum2d_counts = np.sum(np.sum(counts, axis=dimA), axis=dimB)
|
||||||
|
return sum2d_counts.T
|
||||||
|
# Sum over azimuth and elevation:
|
||||||
|
counts_energy_spectro_1 = sum2d(counts_1, 3, 1) # EAS1
|
||||||
|
counts_energy_spectro_2 = sum2d(counts_2, 3, 1) # EAS2
|
||||||
|
# Sum over energy and elevtion
|
||||||
|
counts_azim_spectro_1 = sum2d(counts_1, 2, 1) # EAS1
|
||||||
|
counts_azim_spectro_2 = sum2d(counts_2, 2, 1) # EAS2
|
||||||
|
# Sum over energy and azimuth
|
||||||
|
counts_elev_spectro_1 = sum2d(counts_1, 3, 2) # EAS1
|
||||||
|
counts_elev_spectro_2 = sum2d(counts_2, 3, 2) # EAS2
|
||||||
|
|
||||||
|
def make_plots(fname, time, counts_tot, energy, azim, elev, counts_energy_spectro, counts_azim_spectro, counts_elev_spectro):
|
||||||
|
# Set figure size
|
||||||
|
fig = plt.figure(figsize=(15,10))
|
||||||
|
fig.subplots_adjust(hspace=0.25)
|
||||||
|
# Set time range
|
||||||
|
t1 = datetime.datetime(year=int(fname[22:26]), month=int(fname[26:28]), day=int(fname[28:30]), \
|
||||||
|
hour=int(fname[31:33]), minute=int(fname[33:35])) # set start time
|
||||||
|
t2 = datetime.datetime(year=int(fname[38:42]), month=int(fname[42:44]), day=int(fname[44:46]), \
|
||||||
|
hour=int(fname[47:49]), minute=int(fname[49:51])) # set end time
|
||||||
|
xfmt = mdates.DateFormatter('%H:%M')
|
||||||
|
# Line plot
|
||||||
|
x = time
|
||||||
|
y = counts_tot
|
||||||
|
ax1 = fig.add_subplot(411)
|
||||||
|
ax1.plot(x, y, linewidth=0.5, color='k')
|
||||||
|
ax1.xaxis.set_major_formatter(xfmt)
|
||||||
|
ax1.set_xlim(t1, t2)
|
||||||
|
ax1.ticklabel_format(axis='y', style='sci', scilimits=(0,0))
|
||||||
|
ax1.set_xlabel('Time (HH:MM)')
|
||||||
|
ax1.set_ylabel('Total counts')
|
||||||
|
ax1.grid(linestyle=':', linewidth=0.5)
|
||||||
|
ax1.set_title('SWA-EAS%s Nominal Mode 3D Data: %s %s-%s\n' %(str(fname)[15:16], str(t1)[0:10], str(t1)[11:16], str(t2)[11:16]))
|
||||||
|
ax1_divider = make_axes_locatable(ax1)
|
||||||
|
ax1.tick_params(width=0.5, length=1.5)
|
||||||
|
cax1 = ax1_divider.append_axes('right', size='2%', pad='2%')
|
||||||
|
cax1.axis('off')
|
||||||
|
cax1.tick_params(width=0.5, length=1.5)
|
||||||
|
# Energy spectrogram
|
||||||
|
x, y = np.meshgrid(time, energy[1,:])
|
||||||
|
ax2 = fig.add_subplot(412)
|
||||||
|
CS2 = ax2.pcolormesh(x[:,:], y[:,:], np.log10(counts_energy_spectro[:,:]), cmap='jet') # plot spectrogram
|
||||||
|
ax2.set_yscale('log')
|
||||||
|
ax2.xaxis.set_major_formatter(xfmt)
|
||||||
|
ax2.set_xlim(t1, t2)
|
||||||
|
ax2.tick_params(labelbottom=True)
|
||||||
|
ax2.set_xlabel('Time (HH:MM)')
|
||||||
|
ax2.set_ylabel('Energy (eV)')
|
||||||
|
ax2.grid(linestyle=':', linewidth=0.5)
|
||||||
|
ax2_divider = make_axes_locatable(ax2)
|
||||||
|
ax2.tick_params(width=0.5, length=1.5)
|
||||||
|
cax2 = ax2_divider.append_axes('right', size='2%', pad='2%')
|
||||||
|
cax2.tick_params(width=0.5, length=1.5)
|
||||||
|
cbar2 = plt.colorbar(CS2, cax=cax2, label='$\mathregular{log_{10}}$(Counts)')
|
||||||
|
cbar2.minorticks_off()
|
||||||
|
# Azimuth spectrogram
|
||||||
|
x, y = np.meshgrid(time, azim)
|
||||||
|
ax3 = fig.add_subplot(413)
|
||||||
|
CS3 = ax3.pcolormesh(x[:,:], y[:,:], counts_azim_spectro[:,:], cmap='jet')
|
||||||
|
ax3.xaxis.set_major_formatter(xfmt)
|
||||||
|
ax3.set_xlim(t1, t2)
|
||||||
|
ax3.tick_params(labelbottom=True)
|
||||||
|
ax3.set_xlabel('Time (HH:MM)')
|
||||||
|
ax3.set_ylabel('Azimuth ($^\circ$)')
|
||||||
|
ax3.grid(linestyle=':', linewidth=0.5)
|
||||||
|
ax3_divider = make_axes_locatable(ax3)
|
||||||
|
ax3.tick_params(width=0.5, length=1.5)
|
||||||
|
cax3 = ax3_divider.append_axes('right', size='2%', pad='2%')
|
||||||
|
cax3.tick_params(width=0.5, length=1.5)
|
||||||
|
cbar3 = plt.colorbar(CS3, cax=cax3, label='Counts')
|
||||||
|
cbar3.formatter.set_powerlimits((0,0))
|
||||||
|
cbar3.minorticks_off()
|
||||||
|
# Elevation spectrogram
|
||||||
|
x, y = np.meshgrid(time, elev)
|
||||||
|
ax4 = fig.add_subplot(414)
|
||||||
|
CS4 = ax4.pcolormesh(x[:,:], y[:,:], counts_elev_spectro[:,:][::-1], cmap='jet')
|
||||||
|
ax4.xaxis.set_major_formatter(xfmt)
|
||||||
|
ax4.set_xlim(t1, t2)
|
||||||
|
ax4.set_xlabel('Time (HH:MM)')
|
||||||
|
ax4.set_ylabel('Elevation ($^\circ$)')
|
||||||
|
ax4.grid(linestyle=':', linewidth=0.5)
|
||||||
|
ax4_divider = make_axes_locatable(ax4)
|
||||||
|
ax4.tick_params(width=0.5, length=1.5)
|
||||||
|
cax4 = ax4_divider.append_axes('right', size='2%', pad='2%')
|
||||||
|
cax4.tick_params(width=0.5, length=1.5)
|
||||||
|
cbar4 = plt.colorbar(CS4, cax=cax4, label='Counts')
|
||||||
|
cbar4.formatter.set_powerlimits((0,0))
|
||||||
|
cbar4.minorticks_off()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
make_plots(fname_1, time_1, counts_tot_1, energy_1, azim_1, elev_1, counts_energy_spectro_1, counts_azim_spectro_1, counts_elev_spectro_1)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue