import datetime
import matplotlib.pyplot as plt
import pyaurorax
aurorax = pyaurorax.PyAuroraX()
# set up our request
#
# just like the forward function, outputs are toggled on/off using a flag object.
timestamp = datetime.datetime(2021, 10, 12, 6, 0, 0)
latitude = 58.227808
longitude = -103.680631
intensity_4278 = 2302.6
intensity_5577 = 11339.5
intensity_6300 = 528.3
intensity_8446 = 427.4
output = pyaurorax.models.ATMInverseOutputFlags()
output.energy_flux = True
output.characteristic_energy = True
output.oxygen_correction_factor = True
# perform the calculation
result = aurorax.models.atm.inverse(timestamp, latitude, longitude, intensity_4278, intensity_5577, intensity_6300, intensity_8446, output)
# let's view the output values we asked for
print("Energy Flux: %.03f erg/cm2/s" % (result.energy_flux))
print("Characteristic Energy: %.03f eV" % (result.characteristic_energy))
print("Oxygen Correction Factor: %.03f" % (result.oxygen_correction_factor))
Energy Flux: 9.026 erg/cm2/s Characteristic Energy: 4659.787 eV Oxygen Correction Factor: 0.529
# let's view the result object like we did for the forward calculation
result.pretty_print()
ATMInverseResult: altitudes : None characteristic_energy : 4659.787109 emission_4278 : None emission_5577 : None emission_6300 : None emission_8446 : None energy_flux : 9.026382 height_integrated_rayleighs_4278 : None height_integrated_rayleighs_5577 : None height_integrated_rayleighs_6300 : None height_integrated_rayleighs_8446 : None neutral_n2_density : None neutral_n_density : None neutral_o2_density : None neutral_o_density : None neutral_temperature : None oxygen_correction_factor : 0.528542 plasma_electron_density : None plasma_electron_temperature : None plasma_hall_conductivity : None plasma_ion_temperature : None plasma_ionisation_rate : None plasma_noplus_density : None plasma_o2plus_density : None plasma_oplus_density : None plasma_pederson_conductivity : None request_info : ATMInverseResultRequestInfo(...)
# set up parameters
timestamp = datetime.datetime(2021, 10, 12, 6, 0, 0)
latitude = 58.227808
longitude = -103.680631
intensity_4278 = 2302.6
intensity_5577 = 11339.5
intensity_6300 = 528.3
intensity_8446 = 427.4
# set output flags
output = pyaurorax.models.ATMInverseOutputFlags()
output.set_all_true()
# perform calculation
result = aurorax.models.atm.inverse(timestamp, latitude, longitude, intensity_4278, intensity_5577, intensity_6300, intensity_8446, output)
# show result object
result.pretty_print()
ATMInverseResult: altitudes : array([ 80. , 81. , 82. , 83. , 84. , 85. , 86. , 87. ...]) characteristic_energy : 4659.787109 emission_4278 : array([2.72207130e-02, 1.98840480e-02, 8.12471956e-02, 2.463 ...]) emission_5577 : array([4.56640155e-05, 1.07151980e-04, 1.17979804e-03, 1.164 ...]) emission_6300 : array([2.99086111e-07, 2.84780157e-07, 1.29080900e-06, 4.833 ...]) emission_8446 : array([3.73318443e-07, 7.31990951e-07, 7.80932351e-06, 6.263 ...]) energy_flux : 9.026382 height_integrated_rayleighs_4278 : 4852.901765 height_integrated_rayleighs_5577 : 23481.846674 height_integrated_rayleighs_6300 : 717.117399 height_integrated_rayleighs_8446 : 713.716041 neutral_n2_density : array([2.30522907e+14, 1.94753648e+14, 1.63702091e+14, 1.372 ...]) neutral_n_density : array([3.08412380e+01, 2.58515224e+01, 8.36461716e+01, 2.640 ...]) neutral_o2_density : array([6.18164157e+13, 5.22246255e+13, 4.38980932e+13, 3.679 ...]) neutral_o_density : array([1.82350080e+09, 3.74317926e+09, 8.21722266e+09, 1.821 ...]) neutral_temperature : array([197.2300415 , 197.10696411, 198.06799316, 199.8513641 ...]) oxygen_correction_factor : 0.528542 plasma_electron_density : array([ 1943.39050293, 1802.48510742, 3186.04394531, ...]) plasma_electron_temperature : array([ 197.23718262, 197.65853882, 198.07987976, 199.865 ...]) plasma_hall_conductivity : array([4.38688767e-06, 4.32827710e-06, 8.02784143e-06, 1.494 ...]) plasma_ion_temperature : array([ 197.23718262, 197.11628723, 198.07987976, 199.865 ...]) plasma_ionisation_rate : array([3.77502346e+00, 3.43870878e+00, 7.14459562e+00, 1.695 ...]) plasma_noplus_density : array([1.93684558e+03, 1.79731689e+03, 3.16330884e+03, 5.653 ...]) plasma_o2plus_density : array([6.54466009e+00, 5.16791010e+00, 2.27339478e+01, 7.359 ...]) plasma_oplus_density : array([2.69306674e-05, 2.30580172e-05, 1.12241127e-04, 4.074 ...]) plasma_pederson_conductivity : array([2.27234227e-06, 1.90083313e-06, 2.97542738e-06, 4.694 ...]) request_info : ATMInverseResultRequestInfo(...)
# print the energy flux, characteristic energy, and oxygen correction factor
print("Energy Flux: %.03f erg/cm2/s" % (result.energy_flux))
print("Characteristic Energy: %.03f eV" % (result.characteristic_energy))
print("Oxygen Correction Factor: %.03f\n" % (result.oxygen_correction_factor))
# print all height-integrated Rayleighs data
print("""Height-integrated Rayleighs:
427.8nm: %.02f R
557.7nm: %.02f R
630.0nm: %.02f R
844.6nm: %.02f R""" % (result.height_integrated_rayleighs_4278,
result.height_integrated_rayleighs_5577,
result.height_integrated_rayleighs_6300,
result.height_integrated_rayleighs_8446))
# plot the emission, plasma, and neutral data
#
# we'll do this all in one plot, but made up from many subplots
alt = result.altitudes
fig = plt.figure(figsize=(8,8))
# plot all the emissions as a column of subplots
#
# blueline emission
ax1 = fig.add_subplot(4,2,1)
ax1.plot(alt, result.emission_4278, label=r"4278 $\AA$", color="dodgerblue")
ax1.legend()
ax1.set_xlim(80,500)
ax1.set_ylim(bottom=0)
ax1.grid(axis="x")
ax1.tick_params(axis="x", bottom=True, top=True, labeltop=True, labelbottom=False)
ax1.xaxis.set_label_position("top")
ax1.set_xlabel("Altitude (km)")
ax1.xaxis.set_label_position("top")
# greenline emission
ax2 = fig.add_subplot(4,2,3)
ax2.plot(alt, result.emission_5577, label=r"5577 $\AA$", color="green")
ax2.legend()
ax2.set_xlim(80,500)
ax2.set_ylim(bottom=0)
ax2.grid(axis="x")
ax2.set_ylabel("Volume Emission Rate\n(cm$^{-3} \cdot $s$^{-1}$)")
ax2.tick_params(axis="x", bottom=True, top=True, labelbottom=False)
# redline emission
ax3 = fig.add_subplot(4,2,5)
ax3.plot(alt, result.emission_6300, label=r"6300 $\AA$", color="red")
ax3.legend()
ax3.set_xlim(80,500)
ax3.set_ylim(bottom=0)
ax3.grid(axis="x")
ax3.tick_params(axis="x", bottom=True, top=True, labelbottom=False)
# near-infrared 8446 A emission
ax4 = fig.add_subplot(4,2,7)
ax4.plot(alt, result.emission_8446, label=r"8446 $\AA$", color="blueviolet")
ax4.legend()
ax4.set_xlim(80,500)
ax4.set_ylim(bottom=0)
ax4.grid(axis="x")
ax4.tick_params(axis="x", bottom=True, top=True, labelbottom=False)
# plot the plasma data as a second column of subplots
#
# plasma density
ax5 = fig.add_subplot(4,2,2)
ax5.plot(alt, result.plasma_electron_density, label="Electron", color="green")
ax5.plot(alt, result.plasma_o2plus_density, label="O$^{2+}$", color="black")
ax5.plot(alt, result.plasma_noplus_density, label="NO$^{+}$", color="blue")
ax5.plot(alt, result.plasma_oplus_density, label="O$^{+}$", color="red")
ax5.grid()
ax5.set_ylabel("Plasma Density\n(cm$^{-3}$)")
ax5.legend(fontsize=9)
ax5.set_xlim(80,700)
ax5.set_ylim(bottom=0)
ax5.tick_params(axis="x", bottom=True, top=True, labeltop=True, labelbottom=False)
ax5.set_xlabel("Altitude (km)")
ax5.xaxis.set_label_position("top")
ax5.yaxis.set_label_position("right")
ax5.tick_params(axis="y", left=False, right=True, labelleft=False, labelright=True)
# plasma ionisation rate
ax6 = fig.add_subplot(4,2,4)
ax6.plot(alt, result.plasma_ionisation_rate, color="black")
ax6.grid()
ax6.set_ylabel("Ionization Rate\n(cm$^{-3} \cdot $s$^{-1}$)")
ax6.set_xlim(80,250)
ax6.set_ylim(bottom=0)
ax6.yaxis.set_label_position("right")
ax6.tick_params(axis="y", left=False, right=True, labelleft=False, labelright=True)
# plasma temperatures
ax7 = fig.add_subplot(4,2,6)
ax7.plot(alt, result.plasma_electron_temperature, label="Electron Plasma", color="blue")
ax7.plot(alt, result.plasma_ion_temperature, label="Ion Plasma", color="red")
ax7.grid()
ax7.legend(fontsize=9)
ax7.set_ylabel("Temperature\n(K)")
ax7.set_xlim(80,800)
ax7.set_ylim(bottom=0)
ax7.yaxis.set_label_position("right")
ax7.tick_params(axis="y", left=False, right=True, labelleft=False, labelright=True)
# plasma conductivities
ax8 = fig.add_subplot(4,2,8)
ax8.plot(alt, result.plasma_pederson_conductivity, label="Pederson Conductivity", color="green")
ax8.plot(alt, result.plasma_hall_conductivity, label="Hall Conductivity", color="black")
ax8.grid()
ax8.legend(fontsize=9)
ax8.set_ylabel("Conductivity\n(S/m)")
ax8.set_xlim(80,250)
ax8.set_ylim(bottom=0)
ax8.set_xlabel("Altitude (km)")
ax8.yaxis.set_label_position("right")
ax8.tick_params(axis="y", left=False, right=True, labelleft=False, labelright=True)
# render the plot
plt.show()
Energy Flux: 9.026 erg/cm2/s Characteristic Energy: 4659.787 eV Oxygen Correction Factor: 0.529 Height-integrated Rayleighs: 427.8nm: 4852.90 R 557.7nm: 23481.85 R 630.0nm: 717.12 R 844.6nm: 713.72 R