griffingoodwin04 commited on
Commit
e1af142
·
1 Parent(s): 93cb69b

bug fixes and added iti_data_processing.py

Browse files
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
- }