Load Kp from Multiple Sources

Following from the previous F10.7example, Load F10.7from Multiple Sources, pysatSpaceWeather has a routine to combine several sources of Kp over different time periods. This may be done using the combine_kp() function.

import datetime as dt
import matplotlib as mpl
import matplotlib.pyplot as plt

import pysat
import pysatSpaceWeather as py_sw

kp_his = pysat.Instrument(inst_module=py_sw.instruments.sw_kp,
                          tag='def', update_files=True)
kp_rec = pysat.Instrument(inst_module=py_sw.instruments.sw_kp,
                          tag='recent', update_files=True)
kp_for = pysat.Instrument(inst_module=py_sw.instruments.sw_kp,
                          tag='forecast', update_files=True)

# Set the time range
stime = dt.datetime(1999, 1, 1)
etime = kp_for.today()

# If needed, download the data
kp_his.download(start=stime, stop=etime)
kp_rec.download(start=stime, stop=etime)
kp_for.download(start=etime)

# Combine the Kp sources for all available times
kp = py_sw.instruments.methods.kp_ap.combine_kp(kp_his, kp_rec, kp_for,
                                                stime, etime)

# Check the combined Instrument index
print(kp.index[0], kp.index[-1])

This yields 1999-01-01 00:00:00 2022-08-23 21:00:00, where the last date is your current date (not the date that I created this example). Now, we can take the combined pysat.Instrument can be used to plot the Kp over time.

fig = plt.figure()
ax = fig.add_subplot(111)

# Color code data by activity level
ax.bar(kp.data.loc[kp['Kp'] < 4, 'Kp'].index,
       kp.data.loc[kp['Kp'] < 4, 'Kp'], color='green', label='Quiet')
ax.bar(kp.data.loc[(kp['Kp'] >= 4) & (kp['Kp'] < 7), 'Kp'].index,
       kp.data.loc[(kp['Kp'] >= 4) & (kp['Kp'] < 7), 'Kp'], color='orange',
       label='Active')
ax.bar(kp.data.loc[kp['Kp'] >= 7, 'Kp'].index,
       kp.data.loc[kp['Kp'] >= 7, 'Kp'], color='firebrick', label='Storm')

# Format the figure
ax.set_xlim(stime, etime)
ax.set_ylim(0, 9)
ax.xaxis.set_major_formatter(mpl.dates.DateFormatter('%Y'))
ax.set_xlabel('Universal Time (Year C.E.)')
ax.set_ylabel(r'Kp')
ax.legend(loc=1, fontsize='medium')

# If not running in interactive mode
plt.show()
../_images/ex_kp_all.png

Convert Kp to ap

The Kp and ap have a well established relationship, which takes the logarithmic Kp index and converts it to a linear scale that is easier to handle numerically. The convert_3hr_kp_to_ap() converts Kp to ap, as shown below.

py_sw.instruments.methods.kp_ap.convert_3hr_kp_to_ap(kp)

print("Max: {:.1f} -> {:.1f}, Min: {:.1f} -> {:.1f}".format(
    kp['Kp'].max(), kp['3hr_ap'].max(), kp['Kp'].min(), kp['3hr_ap'].min()))

This yields Max: 9.0 -> 400.0, Min: 0.0 -> 0.0.