Commit ·
e1af142
1
Parent(s): 93cb69b
bug fixes and added iti_data_processing.py
Browse files- flaring/iti_data_processing.py +93 -0
- flaring/testing_processor.ipynb +0 -474
flaring/iti_data_processing.py
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from itipy.data.dataset import BaseDataset
|
| 2 |
+
from itipy.data.editor import LoadMapEditor, NormalizeRadiusEditor, MapToDataEditor, AIAPrepEditor
|
| 3 |
+
import os
|
| 4 |
+
import glob
|
| 5 |
+
from astropy.io import fits
|
| 6 |
+
from astropy.io.fits import Header, PrimaryHDU
|
| 7 |
+
import tqdm as tqdm
|
| 8 |
+
import multiprocessing as mp
|
| 9 |
+
from functools import partial
|
| 10 |
+
|
| 11 |
+
# Configuration for all wavelengths to process
|
| 12 |
+
wavelengths = [94, 131, 171, 193, 211, 335]
|
| 13 |
+
base_input_folder = '/mnt/data/SDO-AIA'
|
| 14 |
+
output_folder = '/mnt/data2/AIA_processed_data'
|
| 15 |
+
os.makedirs(output_folder, exist_ok=True)
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
def process_file(fits_file, wavelength, resolution=512):
|
| 19 |
+
"""Process a single FITS file with the specified wavelength and resolution."""
|
| 20 |
+
try:
|
| 21 |
+
editors = [
|
| 22 |
+
LoadMapEditor(),
|
| 23 |
+
NormalizeRadiusEditor(resolution),
|
| 24 |
+
AIAPrepEditor(calibration='auto'),
|
| 25 |
+
MapToDataEditor()
|
| 26 |
+
]
|
| 27 |
+
|
| 28 |
+
dataset = BaseDataset([fits_file], editors=editors, ext='.fits',
|
| 29 |
+
wavelength=wavelength, resolution=resolution)
|
| 30 |
+
|
| 31 |
+
data, meta = dataset.convertData([fits_file])
|
| 32 |
+
meta_header = meta['header']
|
| 33 |
+
del meta_header['keycomments']
|
| 34 |
+
|
| 35 |
+
# Create wavelength subfolder
|
| 36 |
+
wavelength_folder = os.path.join(output_folder, str(wavelength))
|
| 37 |
+
os.makedirs(wavelength_folder, exist_ok=True)
|
| 38 |
+
|
| 39 |
+
output_file = os.path.join(wavelength_folder, os.path.basename(fits_file))
|
| 40 |
+
fits.writeto(output_file, data, header=Header(meta_header), overwrite=True)
|
| 41 |
+
return output_file
|
| 42 |
+
except Exception as e:
|
| 43 |
+
pass
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def process_wavelength(wavelength):
|
| 47 |
+
"""Process files for a specific wavelength."""
|
| 48 |
+
input_folder = os.path.join(base_input_folder, str(wavelength))
|
| 49 |
+
|
| 50 |
+
# 🔎 Collect all .fits files
|
| 51 |
+
fits_files = glob.glob(os.path.join(input_folder, '*.fits'))
|
| 52 |
+
|
| 53 |
+
files_to_process = []
|
| 54 |
+
skipped_count = 0
|
| 55 |
+
|
| 56 |
+
for fits_file in fits_files:
|
| 57 |
+
# Generate expected output filename (adjust this logic based on your process_file function)
|
| 58 |
+
base_name = os.path.splitext(os.path.basename(fits_file))[0]
|
| 59 |
+
output_file = os.path.join(output_folder, str(wavelength), f"{base_name}.fits")
|
| 60 |
+
|
| 61 |
+
# Check if output file already exists
|
| 62 |
+
if os.path.exists(output_file):
|
| 63 |
+
skipped_count += 1
|
| 64 |
+
else:
|
| 65 |
+
files_to_process.append(fits_file)
|
| 66 |
+
|
| 67 |
+
print(f"Found {len(files_to_process)} files for wavelength {wavelength}")
|
| 68 |
+
print(f"Skipping {skipped_count} already processed files")
|
| 69 |
+
print(f"Processing {len(files_to_process)} remaining files...")
|
| 70 |
+
|
| 71 |
+
if not files_to_process:
|
| 72 |
+
print("All files already processed!")
|
| 73 |
+
return []
|
| 74 |
+
|
| 75 |
+
print(f"Processing {len(fits_files)} files for wavelength {wavelength}...")
|
| 76 |
+
|
| 77 |
+
# Create partial function with wavelength parameter fixed
|
| 78 |
+
process_func = partial(process_file, wavelength=wavelength)
|
| 79 |
+
|
| 80 |
+
# Process files with multiprocessing
|
| 81 |
+
with mp.Pool(processes=mp.cpu_count()) as pool:
|
| 82 |
+
results = list(tqdm.tqdm(
|
| 83 |
+
pool.imap(process_func, files_to_process),
|
| 84 |
+
total=len(files_to_process),
|
| 85 |
+
desc=f"Processing {wavelength}Å files"
|
| 86 |
+
))
|
| 87 |
+
|
| 88 |
+
return results
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
# Process all wavelengths
|
| 92 |
+
for wavelength in wavelengths:
|
| 93 |
+
process_wavelength(wavelength)
|
flaring/testing_processor.ipynb
DELETED
|
@@ -1,474 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"cells": [
|
| 3 |
-
{
|
| 4 |
-
"metadata": {
|
| 5 |
-
"ExecuteTime": {
|
| 6 |
-
"end_time": "2025-07-10T02:27:56.829115Z",
|
| 7 |
-
"start_time": "2025-07-10T02:27:55.772298Z"
|
| 8 |
-
}
|
| 9 |
-
},
|
| 10 |
-
"cell_type": "code",
|
| 11 |
-
"source": [
|
| 12 |
-
"import argparse\n",
|
| 13 |
-
"import logging\n",
|
| 14 |
-
"import os\n",
|
| 15 |
-
"from datetime import datetime, timedelta\n",
|
| 16 |
-
"from os import cpu_count\n",
|
| 17 |
-
"\n",
|
| 18 |
-
"from download import download_sdo as sdo\n",
|
| 19 |
-
"import flare_event_downloader as fed\n",
|
| 20 |
-
"import sxr_downloader as sxr"
|
| 21 |
-
],
|
| 22 |
-
"id": "2a9ae4f9eb7d6981",
|
| 23 |
-
"outputs": [
|
| 24 |
-
{
|
| 25 |
-
"name": "stderr",
|
| 26 |
-
"output_type": "stream",
|
| 27 |
-
"text": [
|
| 28 |
-
"/home/griffingoodwin/anaconda3/envs/down/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
|
| 29 |
-
" from .autonotebook import tqdm as notebook_tqdm\n"
|
| 30 |
-
]
|
| 31 |
-
}
|
| 32 |
-
],
|
| 33 |
-
"execution_count": 1
|
| 34 |
-
},
|
| 35 |
-
{
|
| 36 |
-
"cell_type": "code",
|
| 37 |
-
"id": "initial_id",
|
| 38 |
-
"metadata": {
|
| 39 |
-
"collapsed": true
|
| 40 |
-
},
|
| 41 |
-
"source": [
|
| 42 |
-
"import argparse\n",
|
| 43 |
-
"import logging\n",
|
| 44 |
-
"import os\n",
|
| 45 |
-
"from datetime import datetime, timedelta\n",
|
| 46 |
-
"from os import cpu_count\n",
|
| 47 |
-
"\n",
|
| 48 |
-
"from download import download_sdo as sdo\n",
|
| 49 |
-
"import flare_event_downloader as fed\n",
|
| 50 |
-
"import sxr_downloader as sxr\n",
|
| 51 |
-
"\n",
|
| 52 |
-
"class FlareDownloadProcessor:\n",
|
| 53 |
-
" def __init__(self, FlareEventDownloader, SDODownloader, SXRDownloader):\n",
|
| 54 |
-
" \"\"\"\n",
|
| 55 |
-
" Initialize the FlareDownloadProcessor.\n",
|
| 56 |
-
" This class is responsible for processing AIA flare downloads.\n",
|
| 57 |
-
" \"\"\"\n",
|
| 58 |
-
" self.FlareEventDownloader = FlareEventDownloader\n",
|
| 59 |
-
" self.SDODownloader = SDODownloader\n",
|
| 60 |
-
" self.SXRDownloader = SXRDownloader\n",
|
| 61 |
-
"\n",
|
| 62 |
-
" def process_download(self, time_before_start=timedelta(minutes=60), time_after_end=timedelta(minutes=0)):\n",
|
| 63 |
-
"\n",
|
| 64 |
-
" fl_events = self.FlareEventDownloader.download_events()\n",
|
| 65 |
-
" print(fl_events)\n",
|
| 66 |
-
" [os.makedirs(os.path.join(self.SDODownloader.ds_path, str(c)), exist_ok=True) for c in\n",
|
| 67 |
-
" [94, 131, 171, 193, 211, 304]]\n",
|
| 68 |
-
" for i, events in enumerate(fl_events.iterrows()):\n",
|
| 69 |
-
" event = events[1]\n",
|
| 70 |
-
" start_time = event['event_starttime'] - time_before_start\n",
|
| 71 |
-
" end_time = event['event_endtime'] + time_after_end\n",
|
| 72 |
-
" self.SXRDownloader.download_and_save_goes_data(start_time.strftime('%Y-%m-%d'),\n",
|
| 73 |
-
" end_time.strftime('%Y-%m-%d'), max_workers= os.cpu_count())\n",
|
| 74 |
-
" processed_dates = set()\n",
|
| 75 |
-
" for d in [start_time + i * timedelta(minutes=1) for i in\n",
|
| 76 |
-
" range((end_time - start_time) // timedelta(minutes=1))]:\n",
|
| 77 |
-
" # Only download if we haven't processed this date yet\n",
|
| 78 |
-
" if d.isoformat() not in processed_dates:\n",
|
| 79 |
-
" self.SDODownloader.downloadDate(d)\n",
|
| 80 |
-
" processed_dates.add(d.isoformat())\n",
|
| 81 |
-
" logging.info(f\"Processed flare event {i + 1}/{len(fl_events)}: {event['event_starttime']} to {event['event_endtime']}\")\n",
|
| 82 |
-
"\n",
|
| 83 |
-
"\n",
|
| 84 |
-
"if __name__ == '__main__':\n",
|
| 85 |
-
" # parser = argparse.ArgumentParser(description='Download SDO data from JSOC with quality check and fallback for flare data')\n",
|
| 86 |
-
" # parser.add_argument('--download_dir', type=str, help='path to the download directory.')\n",
|
| 87 |
-
" # parser.add_argument('--email', type=str, help='registered email address for JSOC.')\n",
|
| 88 |
-
" # parser.add_argument('--start_date', type=str, help='start date in format YYYY-MM-DD.')\n",
|
| 89 |
-
" # parser.add_argument('--end_date', type=str, help='end date in format YYYY-MM-DD.', required=False,\n",
|
| 90 |
-
" # default=str(datetime.now()).split(' ')[0])\n",
|
| 91 |
-
" # parser.add_argument('--time_before_start', type=int, help='', required=False)\n",
|
| 92 |
-
" #\n",
|
| 93 |
-
" # args = parser.parse_args()\n",
|
| 94 |
-
" # download_dir = args.download_dir\n",
|
| 95 |
-
" # start_date = args.start_date\n",
|
| 96 |
-
" # end_date = args.end_date\n",
|
| 97 |
-
" # cadence = args.cadence\n",
|
| 98 |
-
"\n",
|
| 99 |
-
" sxr_downloader = sxr.SXRDownloader(\"/mnt/data/GOES-additional\", \"/mnt/data/GOES-additional/combined\")\n",
|
| 100 |
-
" flare_event = fed.FlareEventDownloader(\"2012-01-01\", \"2020-01-01\", event_type=\"FL\", GOESCls=\"M1.0\", directory=\"/mnt/data/SDO-AIA-additional/FlareEvents\")\n",
|
| 101 |
-
" sdo_downloader = sdo.SDODownloader(\"/mnt/data/SDO-AIA-additional\",\"ggoodwin5@gsu.edu\")\n",
|
| 102 |
-
" FlareDownloadProcessor(flare_event, sdo_downloader,sxr_downloader).process_download()"
|
| 103 |
-
],
|
| 104 |
-
"outputs": [],
|
| 105 |
-
"execution_count": null
|
| 106 |
-
},
|
| 107 |
-
{
|
| 108 |
-
"metadata": {
|
| 109 |
-
"ExecuteTime": {
|
| 110 |
-
"end_time": "2025-07-10T02:28:05.533750Z",
|
| 111 |
-
"start_time": "2025-07-10T02:28:05.530956Z"
|
| 112 |
-
}
|
| 113 |
-
},
|
| 114 |
-
"cell_type": "code",
|
| 115 |
-
"source": "flare_event2 = fed.FlareEventDownloader(\"2024-01-01\", \"2024-03-01\", event_type=\"FL\", GOESCls=\"M1.0\", directory=\"/mnt/data/SDO-AIA-additional/FlareEvents\")",
|
| 116 |
-
"id": "7a4f2fea0fa1acc0",
|
| 117 |
-
"outputs": [],
|
| 118 |
-
"execution_count": 2
|
| 119 |
-
},
|
| 120 |
-
{
|
| 121 |
-
"metadata": {
|
| 122 |
-
"ExecuteTime": {
|
| 123 |
-
"end_time": "2025-07-10T02:28:12.942794Z",
|
| 124 |
-
"start_time": "2025-07-10T02:28:06.789778Z"
|
| 125 |
-
}
|
| 126 |
-
},
|
| 127 |
-
"cell_type": "code",
|
| 128 |
-
"source": "flare_event2.download_events()",
|
| 129 |
-
"id": "26b32a7936d7dda3",
|
| 130 |
-
"outputs": [
|
| 131 |
-
{
|
| 132 |
-
"name": "stdout",
|
| 133 |
-
"output_type": "stream",
|
| 134 |
-
"text": [
|
| 135 |
-
"Available columns: ['gs_thumburl', 'comment_count', 'hpc_bbox', 'frm_humanflag', 'hgc_coord', 'obs_levelnum', 'hpc_coord', 'event_npixels', 'gs_imageurl', 'ar_polarity', 'frm_paramset', 'hrc_coord', 'event_starttime', 'ar_mtwilsoncls', 'event_type', 'intensmin', 'fl_fluence', 'obs_meanwavel', 'frm_url', 'skel_chaincode', 'bound_chaincode', 'noposition', 'active', 'intensmax', 'frm_versionnumber', 'fl_halphaclass', 'area_uncert', 'obs_dataprepurl', 'hpc_geom', 'hgc_bbox', 'intensmedian', 'chaincodetype', 'obs_channelid', 'event_clippedspatial', 'ar_noaaclass', 'SOL_standard', 'event_avg_rating', 'eventtype', 'hpc_boundcc', 'event_mapurl', 'frm_contact', 'ar_penumbracls', 'intensmean', 'bound_ccstartc1', 'frm_name', 'area_atdiskcenter', 'frm_identifier', 'obs_observatory', 'event_description', 'boundbox_c2ur', 'obs_firstprocessingdate', 'boundbox_c2ll', 'frm_institute', 'hrc_bbox', 'refs_orig', 'ar_mcintoshcls', 'event_maskurl', 'bound_ccstartc2', 'gs_movieurl', 'event_score', 'skel_startc2', 'skel_startc1', 'fl_efoldtime', 'event_expires', 'hrc_boundcc', 'event_probability', 'intensvar', 'frm_daterun', 'hpc_y', 'hpc_x', 'search_instrument', 'ar_numspots', 'kb_archivdate', 'kb_archivist', 'intenstotal', 'sum_overlap_scores', 'hgs_boundcc', 'intensskew', 'obs_includesnrt', 'rasterscan', 'kb_archivid', 'search_frm_name', 'boundbox_c1ur', 'ar_noaanum', 'area_atdiskcenteruncert', 'boundbox_c1ll', 'event_importance_num_ratings', 'ar_compactnesscls', 'skel_curvature', 'event_testflag', 'event_c2error', 'hrc_r', 'skel_nsteps', 'hgs_y', 'obs_title', 'hgs_x', 'hcr_checked', 'frm_specificid', 'event_title', 'obs_instrument', 'event_c1error', 'revision', 'hpc_radius', 'event_endtime', 'event_importance', 'search_observatory', 'area_raw', 'concept', 'solar_object_locator', 'hgc_boundcc', 'fl_peakflux', 'hgc_x', 'hrc_a', 'event_peaktime', 'hgc_y', 'gs_galleryid', 'fl_goescls', 'hgs_coord', 'ar_zurichcls', 'bound_ccnsteps', 'intenskurt', 'event_clippedtemporal', 'fl_peakem', 'rasterscantype', 'search_channelid', 'fl_peaktemp', 'hgs_bbox', 'obs_lastprocessingdate', 'refs', 'event_coord']\n"
|
| 136 |
-
]
|
| 137 |
-
},
|
| 138 |
-
{
|
| 139 |
-
"data": {
|
| 140 |
-
"text/plain": [
|
| 141 |
-
" event_starttime event_peaktime event_endtime fl_goescls \\\n",
|
| 142 |
-
"0 2024-01-01 08:33:00 2024-01-01 08:54:00 2024-01-01 09:04:00 M2.3 \n",
|
| 143 |
-
"1 2024-01-01 11:54:00 2024-01-01 12:25:00 2024-01-01 12:35:00 M4.7 \n",
|
| 144 |
-
"2 2024-01-02 18:02:00 2024-01-02 18:30:00 2024-01-02 18:56:00 M1.1 \n",
|
| 145 |
-
"3 2024-01-04 01:08:00 2024-01-04 01:16:00 2024-01-04 01:22:00 M1.1 \n",
|
| 146 |
-
"4 2024-01-04 01:22:00 2024-01-04 01:55:00 2024-01-04 02:12:00 M3.8 \n",
|
| 147 |
-
".. ... ... ... ... \n",
|
| 148 |
-
"77 2024-02-24 10:32:00 2024-02-24 10:57:00 2024-02-24 11:03:00 M2.2 \n",
|
| 149 |
-
"78 2024-02-24 11:03:00 2024-02-24 11:18:00 2024-02-24 11:25:00 M3.6 \n",
|
| 150 |
-
"79 2024-02-24 11:54:00 2024-02-24 11:59:00 2024-02-24 12:04:00 M1.0 \n",
|
| 151 |
-
"80 2024-02-25 16:47:00 2024-02-25 17:22:00 2024-02-25 17:47:00 M2.0 \n",
|
| 152 |
-
"81 2024-02-28 16:24:00 2024-02-28 18:54:00 2024-02-28 21:15:00 M1.5 \n",
|
| 153 |
-
"\n",
|
| 154 |
-
" ar_noaanum hgc_coord.lon hgc_coord.lat hgc_coord.obstime.jd1 \\\n",
|
| 155 |
-
"0 13536 222.77349 0.0 2460311.0 \n",
|
| 156 |
-
"1 13536 220.93509 0.0 2460311.0 \n",
|
| 157 |
-
"2 13536 204.39887 0.0 2460312.0 \n",
|
| 158 |
-
"3 13536 187.33258 0.0 2460314.0 \n",
|
| 159 |
-
"4 13536 187.20454 0.0 2460314.0 \n",
|
| 160 |
-
".. ... ... ... ... \n",
|
| 161 |
-
"77 13590 230.62775 0.0 2460365.0 \n",
|
| 162 |
-
"78 13590 230.34422 0.0 2460365.0 \n",
|
| 163 |
-
"79 13590 229.87776 0.0 2460365.0 \n",
|
| 164 |
-
"80 13590 214.02721 0.0 2460366.0 \n",
|
| 165 |
-
"81 13590 174.72312 0.0 2460369.0 \n",
|
| 166 |
-
"\n",
|
| 167 |
-
" hgc_coord.obstime.jd2 hgc_coord.observer.lon hgc_coord.observer.lat \\\n",
|
| 168 |
-
"0 -0.143750 0.0 -2.981678 \n",
|
| 169 |
-
"1 -0.004167 0.0 -2.998047 \n",
|
| 170 |
-
"2 0.251389 0.0 -3.144465 \n",
|
| 171 |
-
"3 -0.452778 0.0 -3.293964 \n",
|
| 172 |
-
"4 -0.443056 0.0 -3.295080 \n",
|
| 173 |
-
".. ... ... ... \n",
|
| 174 |
-
"77 -0.061111 0.0 -7.123890 \n",
|
| 175 |
-
"78 -0.039583 0.0 -7.124404 \n",
|
| 176 |
-
"79 -0.004167 0.0 -7.125247 \n",
|
| 177 |
-
"80 0.199306 0.0 -7.152234 \n",
|
| 178 |
-
"81 0.183333 0.0 -7.205238 \n",
|
| 179 |
-
"\n",
|
| 180 |
-
" hgc_coord.observer.radius hgc_coord.observer.obstime.jd1 \\\n",
|
| 181 |
-
"0 0.983315 2460311.0 \n",
|
| 182 |
-
"1 0.983313 2460311.0 \n",
|
| 183 |
-
"2 0.983307 2460312.0 \n",
|
| 184 |
-
"3 0.983310 2460314.0 \n",
|
| 185 |
-
"4 0.983310 2460314.0 \n",
|
| 186 |
-
".. ... ... \n",
|
| 187 |
-
"77 0.989512 2460365.0 \n",
|
| 188 |
-
"78 0.989516 2460365.0 \n",
|
| 189 |
-
"79 0.989524 2460365.0 \n",
|
| 190 |
-
"80 0.989800 2460366.0 \n",
|
| 191 |
-
"81 0.990508 2460369.0 \n",
|
| 192 |
-
"\n",
|
| 193 |
-
" hgc_coord.observer.obstime.jd2 \n",
|
| 194 |
-
"0 -0.143750 \n",
|
| 195 |
-
"1 -0.004167 \n",
|
| 196 |
-
"2 0.251389 \n",
|
| 197 |
-
"3 -0.452778 \n",
|
| 198 |
-
"4 -0.443056 \n",
|
| 199 |
-
".. ... \n",
|
| 200 |
-
"77 -0.061111 \n",
|
| 201 |
-
"78 -0.039583 \n",
|
| 202 |
-
"79 -0.004167 \n",
|
| 203 |
-
"80 0.199306 \n",
|
| 204 |
-
"81 0.183333 \n",
|
| 205 |
-
"\n",
|
| 206 |
-
"[82 rows x 14 columns]"
|
| 207 |
-
],
|
| 208 |
-
"text/html": [
|
| 209 |
-
"<div>\n",
|
| 210 |
-
"<style scoped>\n",
|
| 211 |
-
" .dataframe tbody tr th:only-of-type {\n",
|
| 212 |
-
" vertical-align: middle;\n",
|
| 213 |
-
" }\n",
|
| 214 |
-
"\n",
|
| 215 |
-
" .dataframe tbody tr th {\n",
|
| 216 |
-
" vertical-align: top;\n",
|
| 217 |
-
" }\n",
|
| 218 |
-
"\n",
|
| 219 |
-
" .dataframe thead th {\n",
|
| 220 |
-
" text-align: right;\n",
|
| 221 |
-
" }\n",
|
| 222 |
-
"</style>\n",
|
| 223 |
-
"<table border=\"1\" class=\"dataframe\">\n",
|
| 224 |
-
" <thead>\n",
|
| 225 |
-
" <tr style=\"text-align: right;\">\n",
|
| 226 |
-
" <th></th>\n",
|
| 227 |
-
" <th>event_starttime</th>\n",
|
| 228 |
-
" <th>event_peaktime</th>\n",
|
| 229 |
-
" <th>event_endtime</th>\n",
|
| 230 |
-
" <th>fl_goescls</th>\n",
|
| 231 |
-
" <th>ar_noaanum</th>\n",
|
| 232 |
-
" <th>hgc_coord.lon</th>\n",
|
| 233 |
-
" <th>hgc_coord.lat</th>\n",
|
| 234 |
-
" <th>hgc_coord.obstime.jd1</th>\n",
|
| 235 |
-
" <th>hgc_coord.obstime.jd2</th>\n",
|
| 236 |
-
" <th>hgc_coord.observer.lon</th>\n",
|
| 237 |
-
" <th>hgc_coord.observer.lat</th>\n",
|
| 238 |
-
" <th>hgc_coord.observer.radius</th>\n",
|
| 239 |
-
" <th>hgc_coord.observer.obstime.jd1</th>\n",
|
| 240 |
-
" <th>hgc_coord.observer.obstime.jd2</th>\n",
|
| 241 |
-
" </tr>\n",
|
| 242 |
-
" </thead>\n",
|
| 243 |
-
" <tbody>\n",
|
| 244 |
-
" <tr>\n",
|
| 245 |
-
" <th>0</th>\n",
|
| 246 |
-
" <td>2024-01-01 08:33:00</td>\n",
|
| 247 |
-
" <td>2024-01-01 08:54:00</td>\n",
|
| 248 |
-
" <td>2024-01-01 09:04:00</td>\n",
|
| 249 |
-
" <td>M2.3</td>\n",
|
| 250 |
-
" <td>13536</td>\n",
|
| 251 |
-
" <td>222.77349</td>\n",
|
| 252 |
-
" <td>0.0</td>\n",
|
| 253 |
-
" <td>2460311.0</td>\n",
|
| 254 |
-
" <td>-0.143750</td>\n",
|
| 255 |
-
" <td>0.0</td>\n",
|
| 256 |
-
" <td>-2.981678</td>\n",
|
| 257 |
-
" <td>0.983315</td>\n",
|
| 258 |
-
" <td>2460311.0</td>\n",
|
| 259 |
-
" <td>-0.143750</td>\n",
|
| 260 |
-
" </tr>\n",
|
| 261 |
-
" <tr>\n",
|
| 262 |
-
" <th>1</th>\n",
|
| 263 |
-
" <td>2024-01-01 11:54:00</td>\n",
|
| 264 |
-
" <td>2024-01-01 12:25:00</td>\n",
|
| 265 |
-
" <td>2024-01-01 12:35:00</td>\n",
|
| 266 |
-
" <td>M4.7</td>\n",
|
| 267 |
-
" <td>13536</td>\n",
|
| 268 |
-
" <td>220.93509</td>\n",
|
| 269 |
-
" <td>0.0</td>\n",
|
| 270 |
-
" <td>2460311.0</td>\n",
|
| 271 |
-
" <td>-0.004167</td>\n",
|
| 272 |
-
" <td>0.0</td>\n",
|
| 273 |
-
" <td>-2.998047</td>\n",
|
| 274 |
-
" <td>0.983313</td>\n",
|
| 275 |
-
" <td>2460311.0</td>\n",
|
| 276 |
-
" <td>-0.004167</td>\n",
|
| 277 |
-
" </tr>\n",
|
| 278 |
-
" <tr>\n",
|
| 279 |
-
" <th>2</th>\n",
|
| 280 |
-
" <td>2024-01-02 18:02:00</td>\n",
|
| 281 |
-
" <td>2024-01-02 18:30:00</td>\n",
|
| 282 |
-
" <td>2024-01-02 18:56:00</td>\n",
|
| 283 |
-
" <td>M1.1</td>\n",
|
| 284 |
-
" <td>13536</td>\n",
|
| 285 |
-
" <td>204.39887</td>\n",
|
| 286 |
-
" <td>0.0</td>\n",
|
| 287 |
-
" <td>2460312.0</td>\n",
|
| 288 |
-
" <td>0.251389</td>\n",
|
| 289 |
-
" <td>0.0</td>\n",
|
| 290 |
-
" <td>-3.144465</td>\n",
|
| 291 |
-
" <td>0.983307</td>\n",
|
| 292 |
-
" <td>2460312.0</td>\n",
|
| 293 |
-
" <td>0.251389</td>\n",
|
| 294 |
-
" </tr>\n",
|
| 295 |
-
" <tr>\n",
|
| 296 |
-
" <th>3</th>\n",
|
| 297 |
-
" <td>2024-01-04 01:08:00</td>\n",
|
| 298 |
-
" <td>2024-01-04 01:16:00</td>\n",
|
| 299 |
-
" <td>2024-01-04 01:22:00</td>\n",
|
| 300 |
-
" <td>M1.1</td>\n",
|
| 301 |
-
" <td>13536</td>\n",
|
| 302 |
-
" <td>187.33258</td>\n",
|
| 303 |
-
" <td>0.0</td>\n",
|
| 304 |
-
" <td>2460314.0</td>\n",
|
| 305 |
-
" <td>-0.452778</td>\n",
|
| 306 |
-
" <td>0.0</td>\n",
|
| 307 |
-
" <td>-3.293964</td>\n",
|
| 308 |
-
" <td>0.983310</td>\n",
|
| 309 |
-
" <td>2460314.0</td>\n",
|
| 310 |
-
" <td>-0.452778</td>\n",
|
| 311 |
-
" </tr>\n",
|
| 312 |
-
" <tr>\n",
|
| 313 |
-
" <th>4</th>\n",
|
| 314 |
-
" <td>2024-01-04 01:22:00</td>\n",
|
| 315 |
-
" <td>2024-01-04 01:55:00</td>\n",
|
| 316 |
-
" <td>2024-01-04 02:12:00</td>\n",
|
| 317 |
-
" <td>M3.8</td>\n",
|
| 318 |
-
" <td>13536</td>\n",
|
| 319 |
-
" <td>187.20454</td>\n",
|
| 320 |
-
" <td>0.0</td>\n",
|
| 321 |
-
" <td>2460314.0</td>\n",
|
| 322 |
-
" <td>-0.443056</td>\n",
|
| 323 |
-
" <td>0.0</td>\n",
|
| 324 |
-
" <td>-3.295080</td>\n",
|
| 325 |
-
" <td>0.983310</td>\n",
|
| 326 |
-
" <td>2460314.0</td>\n",
|
| 327 |
-
" <td>-0.443056</td>\n",
|
| 328 |
-
" </tr>\n",
|
| 329 |
-
" <tr>\n",
|
| 330 |
-
" <th>...</th>\n",
|
| 331 |
-
" <td>...</td>\n",
|
| 332 |
-
" <td>...</td>\n",
|
| 333 |
-
" <td>...</td>\n",
|
| 334 |
-
" <td>...</td>\n",
|
| 335 |
-
" <td>...</td>\n",
|
| 336 |
-
" <td>...</td>\n",
|
| 337 |
-
" <td>...</td>\n",
|
| 338 |
-
" <td>...</td>\n",
|
| 339 |
-
" <td>...</td>\n",
|
| 340 |
-
" <td>...</td>\n",
|
| 341 |
-
" <td>...</td>\n",
|
| 342 |
-
" <td>...</td>\n",
|
| 343 |
-
" <td>...</td>\n",
|
| 344 |
-
" <td>...</td>\n",
|
| 345 |
-
" </tr>\n",
|
| 346 |
-
" <tr>\n",
|
| 347 |
-
" <th>77</th>\n",
|
| 348 |
-
" <td>2024-02-24 10:32:00</td>\n",
|
| 349 |
-
" <td>2024-02-24 10:57:00</td>\n",
|
| 350 |
-
" <td>2024-02-24 11:03:00</td>\n",
|
| 351 |
-
" <td>M2.2</td>\n",
|
| 352 |
-
" <td>13590</td>\n",
|
| 353 |
-
" <td>230.62775</td>\n",
|
| 354 |
-
" <td>0.0</td>\n",
|
| 355 |
-
" <td>2460365.0</td>\n",
|
| 356 |
-
" <td>-0.061111</td>\n",
|
| 357 |
-
" <td>0.0</td>\n",
|
| 358 |
-
" <td>-7.123890</td>\n",
|
| 359 |
-
" <td>0.989512</td>\n",
|
| 360 |
-
" <td>2460365.0</td>\n",
|
| 361 |
-
" <td>-0.061111</td>\n",
|
| 362 |
-
" </tr>\n",
|
| 363 |
-
" <tr>\n",
|
| 364 |
-
" <th>78</th>\n",
|
| 365 |
-
" <td>2024-02-24 11:03:00</td>\n",
|
| 366 |
-
" <td>2024-02-24 11:18:00</td>\n",
|
| 367 |
-
" <td>2024-02-24 11:25:00</td>\n",
|
| 368 |
-
" <td>M3.6</td>\n",
|
| 369 |
-
" <td>13590</td>\n",
|
| 370 |
-
" <td>230.34422</td>\n",
|
| 371 |
-
" <td>0.0</td>\n",
|
| 372 |
-
" <td>2460365.0</td>\n",
|
| 373 |
-
" <td>-0.039583</td>\n",
|
| 374 |
-
" <td>0.0</td>\n",
|
| 375 |
-
" <td>-7.124404</td>\n",
|
| 376 |
-
" <td>0.989516</td>\n",
|
| 377 |
-
" <td>2460365.0</td>\n",
|
| 378 |
-
" <td>-0.039583</td>\n",
|
| 379 |
-
" </tr>\n",
|
| 380 |
-
" <tr>\n",
|
| 381 |
-
" <th>79</th>\n",
|
| 382 |
-
" <td>2024-02-24 11:54:00</td>\n",
|
| 383 |
-
" <td>2024-02-24 11:59:00</td>\n",
|
| 384 |
-
" <td>2024-02-24 12:04:00</td>\n",
|
| 385 |
-
" <td>M1.0</td>\n",
|
| 386 |
-
" <td>13590</td>\n",
|
| 387 |
-
" <td>229.87776</td>\n",
|
| 388 |
-
" <td>0.0</td>\n",
|
| 389 |
-
" <td>2460365.0</td>\n",
|
| 390 |
-
" <td>-0.004167</td>\n",
|
| 391 |
-
" <td>0.0</td>\n",
|
| 392 |
-
" <td>-7.125247</td>\n",
|
| 393 |
-
" <td>0.989524</td>\n",
|
| 394 |
-
" <td>2460365.0</td>\n",
|
| 395 |
-
" <td>-0.004167</td>\n",
|
| 396 |
-
" </tr>\n",
|
| 397 |
-
" <tr>\n",
|
| 398 |
-
" <th>80</th>\n",
|
| 399 |
-
" <td>2024-02-25 16:47:00</td>\n",
|
| 400 |
-
" <td>2024-02-25 17:22:00</td>\n",
|
| 401 |
-
" <td>2024-02-25 17:47:00</td>\n",
|
| 402 |
-
" <td>M2.0</td>\n",
|
| 403 |
-
" <td>13590</td>\n",
|
| 404 |
-
" <td>214.02721</td>\n",
|
| 405 |
-
" <td>0.0</td>\n",
|
| 406 |
-
" <td>2460366.0</td>\n",
|
| 407 |
-
" <td>0.199306</td>\n",
|
| 408 |
-
" <td>0.0</td>\n",
|
| 409 |
-
" <td>-7.152234</td>\n",
|
| 410 |
-
" <td>0.989800</td>\n",
|
| 411 |
-
" <td>2460366.0</td>\n",
|
| 412 |
-
" <td>0.199306</td>\n",
|
| 413 |
-
" </tr>\n",
|
| 414 |
-
" <tr>\n",
|
| 415 |
-
" <th>81</th>\n",
|
| 416 |
-
" <td>2024-02-28 16:24:00</td>\n",
|
| 417 |
-
" <td>2024-02-28 18:54:00</td>\n",
|
| 418 |
-
" <td>2024-02-28 21:15:00</td>\n",
|
| 419 |
-
" <td>M1.5</td>\n",
|
| 420 |
-
" <td>13590</td>\n",
|
| 421 |
-
" <td>174.72312</td>\n",
|
| 422 |
-
" <td>0.0</td>\n",
|
| 423 |
-
" <td>2460369.0</td>\n",
|
| 424 |
-
" <td>0.183333</td>\n",
|
| 425 |
-
" <td>0.0</td>\n",
|
| 426 |
-
" <td>-7.205238</td>\n",
|
| 427 |
-
" <td>0.990508</td>\n",
|
| 428 |
-
" <td>2460369.0</td>\n",
|
| 429 |
-
" <td>0.183333</td>\n",
|
| 430 |
-
" </tr>\n",
|
| 431 |
-
" </tbody>\n",
|
| 432 |
-
"</table>\n",
|
| 433 |
-
"<p>82 rows × 14 columns</p>\n",
|
| 434 |
-
"</div>"
|
| 435 |
-
]
|
| 436 |
-
},
|
| 437 |
-
"execution_count": 3,
|
| 438 |
-
"metadata": {},
|
| 439 |
-
"output_type": "execute_result"
|
| 440 |
-
}
|
| 441 |
-
],
|
| 442 |
-
"execution_count": 3
|
| 443 |
-
},
|
| 444 |
-
{
|
| 445 |
-
"metadata": {},
|
| 446 |
-
"cell_type": "code",
|
| 447 |
-
"source": "",
|
| 448 |
-
"id": "5c93e0282c782ec4",
|
| 449 |
-
"outputs": [],
|
| 450 |
-
"execution_count": null
|
| 451 |
-
}
|
| 452 |
-
],
|
| 453 |
-
"metadata": {
|
| 454 |
-
"kernelspec": {
|
| 455 |
-
"display_name": "Python 3",
|
| 456 |
-
"language": "python",
|
| 457 |
-
"name": "python3"
|
| 458 |
-
},
|
| 459 |
-
"language_info": {
|
| 460 |
-
"codemirror_mode": {
|
| 461 |
-
"name": "ipython",
|
| 462 |
-
"version": 2
|
| 463 |
-
},
|
| 464 |
-
"file_extension": ".py",
|
| 465 |
-
"mimetype": "text/x-python",
|
| 466 |
-
"name": "python",
|
| 467 |
-
"nbconvert_exporter": "python",
|
| 468 |
-
"pygments_lexer": "ipython2",
|
| 469 |
-
"version": "2.7.6"
|
| 470 |
-
}
|
| 471 |
-
},
|
| 472 |
-
"nbformat": 4,
|
| 473 |
-
"nbformat_minor": 5
|
| 474 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|