From febc7a22156d494de3483517ef580712a294f2f1 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 17 Nov 2022 17:36:32 -0500 Subject: [PATCH 001/171] ENH: partial separation of kp download Partial movement of the GFZ download to methods. --- .../instruments/methods/kp_ap.py | 98 +++++++++++++++++++ pysatSpaceWeather/instruments/sw_kp.py | 84 +--------------- 2 files changed, 99 insertions(+), 83 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/kp_ap.py b/pysatSpaceWeather/instruments/methods/kp_ap.py index c79b7217..4f792dd5 100644 --- a/pysatSpaceWeather/instruments/methods/kp_ap.py +++ b/pysatSpaceWeather/instruments/methods/kp_ap.py @@ -92,6 +92,104 @@ def references(name, tag): return refs[name][tag] +def gfz_kp_ap_cp_download(tag): + """Download Kp, ap, and Cp data from GFZ. + + Parameters + ---------- + tag : str + String specifying the database, expects 'def' (definitive) or 'now' + (nowcast) + + """ + # Set the page for the definitive or nowcast Kp + burl = ''.join(['https://datapub.gfz-potsdam.de/download/10.5880.Kp.0001', + '/Kp_', 'nowcast' if tag == 'now' else 'definitive', '/']) + data_cols = ['Bartels_solar_rotation_num', 'day_within_Bartels_rotation', + 'Kp', 'daily_Kp_sum', 'ap', 'daily_Ap', 'Cp', 'C9'] + hours = np.arange(0, 24, 3) + kp_translate = {'0': 0.0, '3': 1.0 / 3.0, '7': 2.0 / 3.0} + dnames = list() + + inst_cols = {'sw_kp': [0, 1, 2, 3], 'gfz_cp': [0, 1, 6, 7], + 'sw_ap': [0, 1, 4, 5]} + + # HERE + + for dl_date in date_array: + fname = 'Kp_{:s}{:04d}.wdc'.format(tag, dl_date.year) + if fname not in dnames: + pysat.logger.info(' '.join(('Downloading file for', + dl_date.strftime('%Y')))) + furl = ''.join([burl, fname]) + req = requests.get(furl) + + if req.ok: + # Split the file text into lines + lines = req.text.split('\n')[:-1] + + # Remove the header + while lines[0].find('#') == 0: + lines.pop(0) + + # Process the data lines + ddict = {dkey: list() for dkey in data_cols} + times = list() + for line in lines: + ldate = dt.datetime.strptime(' '.join([ + "{:02d}".format(int(dd)) for dd in + [line[:2], line[2:4], line[4:6]]]), "%y %m %d") + bsr_num = int(line[6:10]) + bsr_day = int(line[10:12]) + if line[28:30] == ' ': + kp_ones = 0.0 + else: + kp_ones = float(line[28:30]) + sum_kp = kp_ones + kp_translate[line[30]] + daily_ap = int(line[55:58]) + cp = float(line[58:61]) + c9 = int(line[61]) + + for i, hour in enumerate(hours): + # Set the time for this hour and day + times.append(ldate + dt.timedelta(hours=int(hour))) + + # Set the daily values for this hour + ddict['Bartels_solar_rotation_num'].append(bsr_num) + ddict['day_within_Bartels_rotation'].append(bsr_day) + ddict['daily_Kp_sum'].append(sum_kp) + ddict['daily_Ap'].append(daily_ap) + ddict['Cp'].append(cp) + ddict['C9'].append(c9) + + # Get the hourly-specific values + ikp = i * 2 + kp_ones = line[12 + ikp] + if kp_ones == ' ': + kp_ones = 0.0 + ddict['Kp'].append(float(kp_ones) + + kp_translate[line[13 + ikp]]) + iap = i * 3 + ddict['ap'].append(int(line[31 + iap:34 + iap])) + + # Put data into nicer DataFrame + data = pds.DataFrame(ddict, index=times, columns=data_cols) + + # Write out as a CSV file + saved_fname = os.path.join(data_path, fname).replace( + '.wdc', '.txt') + data.to_csv(saved_fname, header=True) + + # Record the filename so we don't download it twice + dnames.append(fname) + else: + pysat.logger.info("".join(["Unable to download data for ", + dl_date.strftime("%d %b %Y"), + ", date may be out of range ", + "for the database."])) + + + def initialize_kp_metadata(meta, data_key, fill_val=-1): """Initialize the Kp meta data using our knowledge of the index. diff --git a/pysatSpaceWeather/instruments/sw_kp.py b/pysatSpaceWeather/instruments/sw_kp.py index fb411bd9..08252953 100644 --- a/pysatSpaceWeather/instruments/sw_kp.py +++ b/pysatSpaceWeather/instruments/sw_kp.py @@ -472,89 +472,7 @@ def download(date_array, tag, inst_id, data_path): "supported by GFZ."]), DeprecationWarning, stacklevel=2) elif tag in ['def', 'now']: - # Set the page for the definitive or nowcast Kp - burl = ''.join(['https://datapub.gfz-potsdam.de/download/10.5880.Kp.', - '0001/Kp_', 'nowcast' if tag == 'now' else 'definitive', - '/']) - data_cols = ['Bartels_solar_rotation_num', - 'day_within_Bartels_rotation', 'Kp', 'daily_Kp_sum', 'ap', - 'daily_Ap', 'Cp', 'C9'] - hours = np.arange(0, 24, 3) - kp_translate = {'0': 0.0, '3': 1.0 / 3.0, '7': 2.0 / 3.0} - dnames = list() - - for dl_date in date_array: - fname = 'Kp_{:s}{:04d}.wdc'.format(tag, dl_date.year) - if fname not in dnames: - pysat.logger.info(' '.join(('Downloading file for', - dl_date.strftime('%Y')))) - furl = ''.join([burl, fname]) - req = requests.get(furl) - - if req.ok: - # Split the file text into lines - lines = req.text.split('\n')[:-1] - - # Remove the header - while lines[0].find('#') == 0: - lines.pop(0) - - # Process the data lines - ddict = {dkey: list() for dkey in data_cols} - times = list() - for line in lines: - ldate = dt.datetime.strptime(' '.join([ - "{:02d}".format(int(dd)) for dd in - [line[:2], line[2:4], line[4:6]]]), "%y %m %d") - bsr_num = int(line[6:10]) - bsr_day = int(line[10:12]) - if line[28:30] == ' ': - kp_ones = 0.0 - else: - kp_ones = float(line[28:30]) - sum_kp = kp_ones + kp_translate[line[30]] - daily_ap = int(line[55:58]) - cp = float(line[58:61]) - c9 = int(line[61]) - - for i, hour in enumerate(hours): - # Set the time for this hour and day - times.append(ldate + dt.timedelta(hours=int(hour))) - - # Set the daily values for this hour - ddict['Bartels_solar_rotation_num'].append(bsr_num) - ddict['day_within_Bartels_rotation'].append(bsr_day) - ddict['daily_Kp_sum'].append(sum_kp) - ddict['daily_Ap'].append(daily_ap) - ddict['Cp'].append(cp) - ddict['C9'].append(c9) - - # Get the hourly-specific values - ikp = i * 2 - kp_ones = line[12 + ikp] - if kp_ones == ' ': - kp_ones = 0.0 - ddict['Kp'].append(float(kp_ones) - + kp_translate[line[13 + ikp]]) - iap = i * 3 - ddict['ap'].append(int(line[31 + iap:34 + iap])) - - # Put data into nicer DataFrame - data = pds.DataFrame(ddict, index=times, columns=data_cols) - - # Write out as a CSV file - saved_fname = os.path.join(data_path, fname).replace( - '.wdc', '.txt') - data.to_csv(saved_fname, header=True) - - # Record the filename so we don't download it twice - dnames.append(fname) - else: - pysat.logger.info("".join(["Unable to download data for ", - dl_date.strftime("%d %b %Y"), - ", date may be out of range ", - "for the database."])) - + # HERE elif tag == 'forecast': pysat.logger.info(' '.join(('This routine can only download the ', 'current forecast, not archived ', From 70fcedf5aa058f1541092a8cbbadbb70eadfd3d6 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 22 Nov 2022 17:18:36 -0500 Subject: [PATCH 002/171] ENH: added general download and list functions Added general functions to download and list GFZ and SWPC recent data. --- .../instruments/methods/kp_ap.py | 326 ++++++++++++++---- 1 file changed, 257 insertions(+), 69 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/kp_ap.py b/pysatSpaceWeather/instruments/methods/kp_ap.py index 4f792dd5..b987ed80 100644 --- a/pysatSpaceWeather/instruments/methods/kp_ap.py +++ b/pysatSpaceWeather/instruments/methods/kp_ap.py @@ -92,14 +92,24 @@ def references(name, tag): return refs[name][tag] -def gfz_kp_ap_cp_download(tag): +def gfz_kp_ap_cp_download(platform, name, tag, inst_id, date_array, data_path): """Download Kp, ap, and Cp data from GFZ. Parameters ---------- + platform : str + Instrument platform. + name : str + Instrument name. tag : str String specifying the database, expects 'def' (definitive) or 'now' (nowcast) + inst_id : str + Specifies the instrument identification, not used. + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + data_path : str + Path to data directory. """ # Set the page for the definitive or nowcast Kp @@ -113,82 +123,260 @@ def gfz_kp_ap_cp_download(tag): inst_cols = {'sw_kp': [0, 1, 2, 3], 'gfz_cp': [0, 1, 6, 7], 'sw_ap': [0, 1, 4, 5]} - - # HERE - - for dl_date in date_array: - fname = 'Kp_{:s}{:04d}.wdc'.format(tag, dl_date.year) - if fname not in dnames: - pysat.logger.info(' '.join(('Downloading file for', - dl_date.strftime('%Y')))) - furl = ''.join([burl, fname]) - req = requests.get(furl) - - if req.ok: - # Split the file text into lines - lines = req.text.split('\n')[:-1] - - # Remove the header - while lines[0].find('#') == 0: - lines.pop(0) - - # Process the data lines - ddict = {dkey: list() for dkey in data_cols} - times = list() - for line in lines: - ldate = dt.datetime.strptime(' '.join([ - "{:02d}".format(int(dd)) for dd in - [line[:2], line[2:4], line[4:6]]]), "%y %m %d") - bsr_num = int(line[6:10]) - bsr_day = int(line[10:12]) - if line[28:30] == ' ': + + # Construct the Instrument module name from the platform and name + inst_mod_name = '_'.join([platform, name]) + if inst_mod_name not in inst_cols.keys(): + raise ValueError('Unknown Instrument module {:}, expected {:}'.format( + inst_mod_name, inst_cols.keys())) + + data_paths = {inst_mod: data_path if inst_mod == inst_mod_name else + get_instrument_data_path(inst_mod) + for inst_mod in inst_cols.keys()} + + # Cycle through all the times + for dl_date in date_array: + fname = 'Kp_{:s}{:04d}.wdc'.format(tag, dl_date.year) + if fname not in dnames: + pysat.logger.info(' '.join(('Downloading file for', + dl_date.strftime('%Y')))) + furl = ''.join([burl, fname]) + req = requests.get(furl) + + if req.ok: + # Split the file text into lines + lines = req.text.split('\n')[:-1] + + # Remove the header + while lines[0].find('#') == 0: + lines.pop(0) + + # Process the data lines + ddict = {dkey: list() for dkey in data_cols} + times = list() + for line in lines: + ldate = dt.datetime.strptime(' '.join([ + "{:02d}".format(int(dd)) for dd in + [line[:2], line[2:4], line[4:6]]]), "%y %m %d") + bsr_num = int(line[6:10]) + bsr_day = int(line[10:12]) + if line[28:30] == ' ': + kp_ones = 0.0 + else: + kp_ones = float(line[28:30]) + sum_kp = kp_ones + kp_translate[line[30]] + daily_ap = int(line[55:58]) + cp = float(line[58:61]) + c9 = int(line[61]) + + for i, hour in enumerate(hours): + # Set the time for this hour and day + times.append(ldate + dt.timedelta(hours=int(hour))) + + # Set the daily values for this hour + ddict['Bartels_solar_rotation_num'].append(bsr_num) + ddict['day_within_Bartels_rotation'].append(bsr_day) + ddict['daily_Kp_sum'].append(sum_kp) + ddict['daily_Ap'].append(daily_ap) + ddict['Cp'].append(cp) + ddict['C9'].append(c9) + + # Get the hourly-specific values + ikp = i * 2 + kp_ones = line[12 + ikp] + if kp_ones == ' ': kp_ones = 0.0 - else: - kp_ones = float(line[28:30]) - sum_kp = kp_ones + kp_translate[line[30]] - daily_ap = int(line[55:58]) - cp = float(line[58:61]) - c9 = int(line[61]) - - for i, hour in enumerate(hours): - # Set the time for this hour and day - times.append(ldate + dt.timedelta(hours=int(hour))) - - # Set the daily values for this hour - ddict['Bartels_solar_rotation_num'].append(bsr_num) - ddict['day_within_Bartels_rotation'].append(bsr_day) - ddict['daily_Kp_sum'].append(sum_kp) - ddict['daily_Ap'].append(daily_ap) - ddict['Cp'].append(cp) - ddict['C9'].append(c9) - - # Get the hourly-specific values - ikp = i * 2 - kp_ones = line[12 + ikp] - if kp_ones == ' ': - kp_ones = 0.0 - ddict['Kp'].append(float(kp_ones) - + kp_translate[line[13 + ikp]]) - iap = i * 3 - ddict['ap'].append(int(line[31 + iap:34 + iap])) - - # Put data into nicer DataFrame - data = pds.DataFrame(ddict, index=times, columns=data_cols) + ddict['Kp'].append(float(kp_ones) + + kp_translate[line[13 + ikp]]) + iap = i * 3 + ddict['ap'].append(int(line[31 + iap:34 + iap])) + + # Put data into nicer DataFrames + for inst_mod in inst_cols.keys(): + sel_cols = data_cols[inst_cols[inst_mod]] + sel_dict = {col: ddict[col] for col in sel_cols} + data = pds.DataFrame(sel_dict, index=times, + columns=sel_cols) # Write out as a CSV file - saved_fname = os.path.join(data_path, fname).replace( - '.wdc', '.txt') + sfname = fname.replace('Kp', inst_mod.split('_')[-1]) + saved_fname = os.path.join(data_paths[inst_mod], + sfname).replace('.wdc', '.txt') data.to_csv(saved_fname, header=True) - # Record the filename so we don't download it twice - dnames.append(fname) + # Record the filename so we don't download it twice + dnames.append(fname) + else: + pysat.logger.info("".join(["Unable to download data for ", + dl_date.strftime("%d %b %Y"), + ", date may be out of range for ", + "the database."])) + return + + +def swpc_kp_ap_recent_download(name, date_array, data_path): + """Download recent Kp and ap data from SWPC. + + Parameters + ---------- + name : str + Instrument name, expects 'kp' or 'ap'. + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + data_path : str + Path to data directory. + + """ + pysat.logger.info(' '.join(('This routine can only download the ', + 'current webpage, not archived forecasts'))) + + # Download webpage + rurl = ''.join(('https://services.swpc.noaa.gov/text/', + 'daily-geomagnetic-indices.txt')) + req = requests.get(rurl) + + # Parse text to get the date the prediction was generated + date_str = req.text.split(':Issued: ')[-1].split('\n')[0] + dl_date = dt.datetime.strptime(date_str, '%H%M UT %d %b %Y') + + # Data is the forecast value for the next three days + raw_data = req.text.split('# Date ')[-1] + + # Keep only the middle bits that matter + raw_data = raw_data.split('\n')[1:-1] + + # Hold times from the file + times = [] + + # Holds Kp and Ap values for each station + sub_kps = [[], [], []] + sub_aps = [[], [], []] + + # Iterate through file lines and parse out the info we want + for line in raw_data: + times.append(dt.datetime.strptime(line[0:10], '%Y %m %d')) + + # Pick out Kp values for each of the three columns. The columns + # used to all have integer values, but now some have floats. + kp_sub_lines = [line[17:33], line[40:56], line[63:]] + ap_sub_lines = [line[10:17], line[33:40], line[56:63]] + for i, sub_line in enumerate(kp_sub_lines): + # Process the Kp data, which has 3-hour values + split_sub = sub_line.split() + for ihr in np.arange(8): + if sub_line.find('.') < 0: + # These are integer values + sub_kps[i].append( + int(sub_line[(ihr * 2):((ihr + 1) * 2)])) else: - pysat.logger.info("".join(["Unable to download data for ", - dl_date.strftime("%d %b %Y"), - ", date may be out of range ", - "for the database."])) + # These are float values + sub_kps[i].append(float(split_sub[ihr])) + + # Process the Ap data, which has daily values + sub_aps[i].append(int(ap_sub_lines[i])) + + # Create times on 3 hour cadence + kp_times = pds.date_range(times[0], periods=(8 * 30), freq='3H') + + # Put Kp data into DataFrame + data = pds.DataFrame({'mid_lat_Kp': sub_kps[0], 'high_lat_Kp': sub_kps[1], + 'Kp': sub_kps[2]}, index=kp_times) + + # Write Kp out as a file + data_file = 'kp_recent_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) + kp_path = data_path if name == 'kp' else get_instrument_data_path('sw_kp') + data.to_csv(os.path.join(kp_path, data_file), header=True) + + # Put Ap data into a DataFrame + data = pds.DataFrame({'mid_lat_Ap': sub_aps[0], 'high_lat_Ap': sub_aps[1], + 'daily_Ap': sub_kps[2]}, index=times) + + # Write Kp out as a file + data_file = 'ap_recent_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) + ap_path = data_path if name == 'ap' else get_instrument_data_path('sw_ap') + data.to_csv(os.path.join(ap_path, data_file), header=True) + + return + + +def gfz_kp_ap_cp_list_files(name, tag, inst_id, data_path, format_str=None): + """List local files for Kp, ap, or Cp data obtained from GFZ. + + Parameters + ---------- + name : str + Instrument name. + tag : str + String specifying the database, expects 'def' (definitive) or 'now' + (nowcast) + inst_id : str + Specifies the instrument identification, not used. + data_path : str + Path to data directory. + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + files : pysat._files.Files + A class containing the verified available files + + """ + + if format_str is None: + format_str = ''.join(['_'.join([name, tag]), '{year:04d}.txt']) + + # Files are stored by year, going to add a date to the yearly filename for + # each month and day of month. The load routine will load the year and use + # the append date to select out approriate data. + files = pysat.Files.from_os(data_path=data_path, format_str=format_str) + if not files.empty: + files.loc[files.index[-1] + pds.DateOffset(years=1) + - pds.DateOffset(days=1)] = files.iloc[-1] + files = files.asfreq('D', 'pad') + files = files + '_' + files.index.strftime('%Y-%m-%d') + + return files + + +def swpc_list_files(name, tag, inst_id, data_path, format_str=None): + """List local files for Kp or ap data obtained from SWPC. + + Parameters + ---------- + name : str + Instrument name. + tag : str + String specifying the database, expects 'def' (definitive) or 'now' + (nowcast) + inst_id : str + Specifies the instrument identification, not used. + data_path : str + Path to data directory. + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + files : pysat._files.Files + A class containing the verified available files + + """ + + if format_str is None: + format_str = '_'.join([name, tag, + '{year:04d}-{month:02d}-{day:02d}.txt']) + files = pysat.Files.from_os(data_path=data_path, format_str=format_str) + # Pad list of files data to include most recent file under tomorrow + if not files.empty: + pds_offset = pds.DateOffset(days=1) + files.loc[files.index[-1] + pds_offset] = files.values[-1] + files.loc[files.index[-1] + pds_offset] = files.values[-1] + return files def initialize_kp_metadata(meta, data_key, fill_val=-1): """Initialize the Kp meta data using our knowledge of the index. From 1cf35e1bf1672e8c00f25c98663ed01dab665bf0 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 22 Nov 2022 17:19:10 -0500 Subject: [PATCH 003/171] ENH: added an Ap instrument Added a separate Instrument module for Ap data. --- pysatSpaceWeather/instruments/sw_ap.py | 274 +++++++++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 pysatSpaceWeather/instruments/sw_ap.py diff --git a/pysatSpaceWeather/instruments/sw_ap.py b/pysatSpaceWeather/instruments/sw_ap.py new file mode 100644 index 00000000..6d696506 --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_ap.py @@ -0,0 +1,274 @@ +# -*- coding: utf-8 -*- +"""Supports ap index values. + +Properties +---------- +platform + 'sw' +name + 'ap' +tag + - 'def' Definitive ap data from GFZ + - 'now' Nowcast ap data from GFZ + - 'recent' Grab last 30 days of Ap data from SWPC +inst_id + '' + +Note +---- +Downloads data from ftp.gfz-potsdam.de or SWPC. These files also contain Kp +data (with the GFZ data additionally containing Cp data), and so the additional +data files will be saved to the appropriate data directories to avoid multiple +downloads. + +The historic definitive and nowcast Kp files are stored in yearly files, with +the current year being updated remotely on a regular basis. If you are using +historic data for the current year, we recommend re-downloading it before +performing your data processing. + +Recent data is also stored by the generation date from the SWPC. Each file +contains 30 days of Ap measurements. The load date issued to pysat corresponds +to the generation date. + +Examples +-------- +:: + + ap = pysat.Instrument('sw', 'ap', tag='recent') + ap.download() + ap.load(date=ap.tomorrow()) + + +Warnings +-------- +The 'recent' tag loads Ap data for a specific period of time. Loading multiple +files, loading multiple days, the data padding feature, and multi_file_day +feature available from the pyast.Instrument object is not appropriate for this +tag data. + +""" + +import datetime as dt +import numpy as np +import pandas as pds + +import pysat + +from pysatSpaceWeather.instruments.methods import general +from pysatSpaceWeather.instruments.methods import kp_ap + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'ap' +tags = {'def': 'Definitive Kp data from GFZ', + 'now': 'Nowcast Kp data from GFZ', + 'recent': 'SWPC provided Kp for past 30 days'} +inst_ids = {'': list(tags.keys())} + +# Generate todays date to support loading forecast data +now = dt.datetime.utcnow() +today = dt.datetime(now.year, now.month, now.day) + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +# Set test dates +_test_dates = {'': {'def': dt.datetime(2009, 1, 1), + 'now': dt.datetime(2020, 1, 1), + 'recent': today}} + +# ---------------------------------------------------------------------------- +# Instrument methods + +preprocess = general.preprocess + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + self.acknowledgements = kp_ap.acknowledgements(self.name, self.tag) + self.references = kp_ap.references(self.name, self.tag) + pysat.logger.info(self.acknowledgements) + return + + +def clean(self): + """Clean the Kp, not required for this index (empty function).""" + + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + + +def load(fnames, tag='', inst_id=''): + """Load Ap index files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames + tag : str + Instrument tag (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + data : pandas.DataFrame + Object containing satellite data + meta : pysat.Meta + Object containing metadata such as column names and units + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + + meta = pysat.Meta() + if tag in ['def', 'now']: + # Load the definitive or nowcast data. The Ap data stored in yearly + # files, and we need to return data daily. The daily date is + # attached to filename. Parse off the last date, load month of data, + # and downselect to the desired day + unique_fnames = dict() + for filename in fnames: + fname = filename[0:-11] + fdate = dt.datetime.strptime(filename[-10:], '%Y-%m-%d') + if fname not in unique_fnames.keys(): + unique_fnames[fname] = [fdate] + else: + unique_fnames[fname].append(fdate) + + # Load the desired filenames + all_data = [] + for fname in unique_fnames.keys(): + # The daily date is attached to the filename. Parse off the last + # date, load the year of data, downselect to the desired day + fdate = min(unique_fnames[fname]) + temp = pds.read_csv(fname, index_col=0, parse_dates=True) + + if temp.empty: + pysat.logger.warn('Empty file: {:}'.format(fname)) + continue + + # Select the desired times and add to data list + all_data.append(pds.DataFrame(temp[fdate:max(unique_fnames[fname]) + + dt.timedelta(seconds=86399)])) + + # Combine data together + if len(all_data) > 0: + result = pds.concat(all_data, axis=0, sort=True) + else: + result = pds.DataFrame() + + # Initalize the meta data + fill_val = np.nan + for kk in result.keys(): + if kk.lower().find('ap') >= 0: + kp_ap.initialize_ap_metadata(meta, kk, fill_val) + + meta['Bartels_solar_rotation_num'] = { + meta.labels.units: '', + meta.labels.name: 'Bartels solar rotation number', + meta.labels.desc: ''.join(['A sequence of 27-day intervals counted', + ' from February 8, 1832']), + meta.labels.min_val: 1, + meta.labels.max_val: np.inf, + meta.labels.fill_val: -1} + meta['day_within_Bartels_rotation'] = { + meta.labels.units: 'days', + meta.labels.name: 'Bartels solar rotation number', + meta.labels.desc: ''.join(['Number of day within the Bartels solar', + ' rotation']), + meta.labels.min_val: 1, + meta.labels.max_val: 27, + meta.labels.fill_val: -1} + else: + # Load the recent data + all_data = [] + for fname in fnames: + result = pds.read_csv(fname, index_col=0, parse_dates=True) + all_data.append(result) + + result = pds.concat(all_data) + fill_val = -1 + + # Initalize the meta data + for kk in result.keys(): + kp_ap.initialize_kp_metadata(meta, kk, fill_val) + + return result, meta + + +def list_files(tag='', inst_id='', data_path='', format_str=None): + """List local files for the requested Instrument tag. + + Parameters + ----------- + tag : str + Instrument tag, accepts any value from `tags`. (default='') + inst_id : str + Instrument ID, not used. (default='') + data_path : str + Path to data directory. (default='') + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + files : pysat._files.Files + A class containing the verified available files + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + + if tag in ['def', 'now']: + files = kp_ap.gfz_kp_ap_cp_list_files(name, tag, inst_id, data_path, + format_str=format_str) + else: + files = kp_ap.swpc_list_files(name, tag, inst_id, data_path, + format_str=format_str) + + return files + + +def download(date_array, tag, inst_id, data_path): + """Download the Ap index data from the appropriate repository. + + Parameters + ---------- + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + tag : str + Denotes type of file to load. + inst_id : str + Specifies the instrument identification, not used. + data_path : str + Path to data directory. + + Note + ---- + Called by pysat. Not intended for direct use by user. + + Warnings + -------- + Only able to download current recent data, not archived forecasts. + + """ + + if tag in ['def', 'now']: + kp_ap.gfz_kp_ap_cp_download(platform, name, tag, inst_id, date_array, + data_path) + else: + kp_ap.swpc_kp_ap_recent_download(name, date_array, data_path) + + return From d7c736d514a41df59e1c0af7dd8fc853505427cb Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 22 Nov 2022 17:19:39 -0500 Subject: [PATCH 004/171] STY: updated to use common functions Updated to use the common listing and download functions. --- pysatSpaceWeather/instruments/sw_kp.py | 97 ++++---------------------- 1 file changed, 15 insertions(+), 82 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_kp.py b/pysatSpaceWeather/instruments/sw_kp.py index 08252953..226098ab 100644 --- a/pysatSpaceWeather/instruments/sw_kp.py +++ b/pysatSpaceWeather/instruments/sw_kp.py @@ -18,11 +18,15 @@ Note ---- -Downloads data from ftp.gfz-potsdam.de or SWPC. +Downloads data from ftp.gfz-potsdam.de or SWPC. These files also contain ap +data (with the GFZ data additionally containing Cp data), and so the additional +data files will be saved to the appropriate data directories to avoid multiple +downloads. -Standard Kp files are stored by the first day of each month. When downloading -use kp.download(start, stop, freq='MS') to only download days that could -possibly have data. 'MS' gives a monthly start frequency. +The historic definitive and nowcast Kp files are stored in yearly files, with +the current year being updated remotely on a regular basis. If you are using +historic data for the current year, we recommend re-downloading it before +performing your data processing. The forecast data is stored by generation date, where each file contains the forecast for the next three days. Forecast data downloads are only supported @@ -262,8 +266,6 @@ def load(fnames, tag='', inst_id=''): # files, and we need to return data daily. The daily date is # attached to filename. Parse off the last date, load month of data, # and downselect to the desired day - data = pds.DataFrame() - unique_fnames = dict() for filename in fnames: fname = filename[0:-11] @@ -408,29 +410,11 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): files = files.asfreq('D', 'pad') files = files + '_' + files.index.strftime('%Y-%m-%d') elif tag in ['def', 'now']: - if format_str is None: - format_str = ''.join(['Kp_{:s}'.format(tag), '{year:04d}.txt']) - - # Files are stored by year, going to add a date to the yearly - # filename for each month and day of month. The load routine will load - # the year and use the append date to select out approriate data. - files = pysat.Files.from_os(data_path=data_path, format_str=format_str) - if not files.empty: - files.loc[files.index[-1] + pds.DateOffset(years=1) - - pds.DateOffset(days=1)] = files.iloc[-1] - files = files.asfreq('D', 'pad') - files = files + '_' + files.index.strftime('%Y-%m-%d') + files = kp_ap.gfz_kp_ap_cp_list_files(name, tag, inst_id, data_path, + format_str=format_str) else: - if format_str is None: - format_str = '_'.join(['kp', tag, - '{year:04d}-{month:02d}-{day:02d}.txt']) - files = pysat.Files.from_os(data_path=data_path, format_str=format_str) - - # Pad list of files data to include most recent file under tomorrow - if not files.empty: - pds_offset = pds.DateOffset(days=1) - files.loc[files.index[-1] + pds_offset] = files.values[-1] - files.loc[files.index[-1] + pds_offset] = files.values[-1] + files = kp_ap.swpc_list_files(name, tag, inst_id, data_path, + format_str=format_str) return files @@ -472,7 +456,8 @@ def download(date_array, tag, inst_id, data_path): "supported by GFZ."]), DeprecationWarning, stacklevel=2) elif tag in ['def', 'now']: - # HERE + kp_ap.gfz_kp_ap_cp_download(platform, name, tag, inst_id, date_array, + data_path) elif tag == 'forecast': pysat.logger.info(' '.join(('This routine can only download the ', 'current forecast, not archived ', @@ -522,58 +507,6 @@ def download(date_array, tag, inst_id, data_path): data.to_csv(os.path.join(data_path, data_file), header=True) elif tag == 'recent': - pysat.logger.info(' '.join(('This routine can only download the ', - 'current webpage, not archived forecasts'))) - - # Download webpage - rurl = ''.join(('https://services.swpc.noaa.gov/text/', - 'daily-geomagnetic-indices.txt')) - req = requests.get(rurl) - - # Parse text to get the date the prediction was generated - date_str = req.text.split(':Issued: ')[-1].split('\n')[0] - dl_date = dt.datetime.strptime(date_str, '%H%M UT %d %b %Y') - - # Data is the forecast value for the next three days - raw_data = req.text.split('# Date ')[-1] - - # Keep only the middle bits that matter - raw_data = raw_data.split('\n')[1:-1] - - # Hold times from the file - kp_time = [] - - # Holds Kp value for each station - sub_kps = [[], [], []] - - # Iterate through file lines and parse out the info we want - for line in raw_data: - kp_time.append(dt.datetime.strptime(line[0:10], '%Y %m %d')) - - # Pick out Kp values for each of the three columns. The columns - # used to all have integer values, but now some have floats. - sub_lines = [line[17:33], line[40:56], line[63:]] - for i, sub_line in enumerate(sub_lines): - split_sub = sub_line.split() - for ihr in np.arange(8): - if sub_line.find('.') < 0: - # These are integer values - sub_kps[i].append( - int(sub_line[(ihr * 2):((ihr + 1) * 2)])) - else: - # These are float values - sub_kps[i].append(float(split_sub[ihr])) - - # Create times on 3 hour cadence - times = pds.date_range(kp_time[0], periods=(8 * 30), freq='3H') - - # Put into DataFrame - data = pds.DataFrame({'mid_lat_Kp': sub_kps[0], - 'high_lat_Kp': sub_kps[1], - 'Kp': sub_kps[2]}, index=times) - - # Write out as a file - data_file = 'kp_recent_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) - data.to_csv(os.path.join(data_path, data_file), header=True) + kp_ap.swpc_kp_ap_recent_download(name, date_array, data_path) return From 9b2f14e7b5cec100e2e2875b94e574435906247d Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 28 Nov 2022 15:09:00 -0500 Subject: [PATCH 005/171] ENH: added data_path function Added a function to find the correct data path for a given instrument. --- .../instruments/methods/general.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/pysatSpaceWeather/instruments/methods/general.py b/pysatSpaceWeather/instruments/methods/general.py index 3bf7729e..d40f5588 100644 --- a/pysatSpaceWeather/instruments/methods/general.py +++ b/pysatSpaceWeather/instruments/methods/general.py @@ -1,8 +1,11 @@ # -*- coding: utf-8 -*-. """Provides routines that support general space weather instruments.""" +import importlib import numpy as np +import pysat + def preprocess(inst): """Preprocess the meta data by replacing the file fill values with NaN. @@ -25,3 +28,41 @@ def preprocess(inst): inst.meta[col] = {inst.meta.labels.fill_val: np.nan} return + + +def get_instrument_data_path(inst_mod_name, tag='', inst_id='', **kwargs): + """Get the `data_path` attribute from an Instrument sub-module. + + Parameters + ---------- + inst_mod_name : str + pysatSpaceWeather Instrument module name + tag : str + String specifying the Instrument tag (default='') + inst_id : str + String specifying the instrument identification (default='') + kwargs : dict + Optional additional kwargs that may be used to initialize an Instrument + + Returns + ------- + data_path : str + Path where the Instrument data is stored + + """ + + # Import the desired instrument module by name + inst_mod = importlib.import_module(".".join(["pysatSpaceWeather", + "instruments", inst_mod_name])) + + # Initialize a temporary instrument to obtain pysat configuration + temp_inst = pysat.Instrument(inst_module=inst_mod, tag=tag, inst_id=inst_id, + **kwargs) + + # Save the data path for this Instrument down to the inst_id level + data_path = temp_inst.files.data_path + + # Delete the temporary instrument + del temp_inst + + return data_path From 12ee58f318ddc06e2a66c432e02420d3c98ed6f2 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 28 Nov 2022 15:09:24 -0500 Subject: [PATCH 006/171] ENH: grouped GFZ functions Grouped all the GFZ functions into their own method sub-module. --- pysatSpaceWeather/instruments/methods/gfz.py | 261 +++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 pysatSpaceWeather/instruments/methods/gfz.py diff --git a/pysatSpaceWeather/instruments/methods/gfz.py b/pysatSpaceWeather/instruments/methods/gfz.py new file mode 100644 index 00000000..f913db30 --- /dev/null +++ b/pysatSpaceWeather/instruments/methods/gfz.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# ---------------------------------------------------------------------------- +"""Provides routines that support GFZ space weather instruments.""" + +import datetime as dt +import numpy as np +import os +import pandas as pds +import requests + +import pysat + +from pysatSpaceWeather.instruments.methods import general + +# ---------------------------------------------------------------------------- +# Define the module variables + +ackn = ''.join(['CC BY 4.0, The Kp index was introduced by Bartels (1949) and ', + 'is produced, along with derivative indices, by the ', + 'Geomagnetic Observatory Niemegk, GFZ German Research Centre ', + 'for Geosciences. Please cite the references in the ', + "'references' attribute"]) +geoind_refs = '\n'.join([''.join(["Matzka, J., Bronkalla, O., Tornow, K., ", + "Elger, K. and Stolle, C., 2021. ", + "Geomagnetic Kp index. V. 1.0. GFZ Data ", + "Services, doi:10.5880/Kp.0001"]), + ''.join(["Matzka, J., Stolle, C., Yamazaki, Y., ", + "Bronkalla, O. and Morschhauser, A., 2021. ", + "The geomagnetic Kp index and derived ", + "indices of geomagnetic activity. Space ", + "Weather,doi:10.1029/2020SW002641"])]) + + +# ---------------------------------------------------------------------------- +# Define the module functions + +def kp_ap_cp_download(platform, name, tag, inst_id, date_array, data_path): + """Download Kp, ap, and Cp data from GFZ. + + Parameters + ---------- + platform : str + Instrument platform. + name : str + Instrument name. + tag : str + String specifying the database, expects 'def' (definitive) or 'now' + (nowcast) + inst_id : str + Specifies the instrument identification, not used. + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + data_path : str + Path to data directory. + + Note + ---- + Note that the download path for the complementary Instrument will use + the standard pysat data paths + + """ + # Set the page for the definitive or nowcast Kp + burl = ''.join(['https://datapub.gfz-potsdam.de/download/10.5880.Kp.0001', + '/Kp_', 'nowcast' if tag == 'now' else 'definitive', '/']) + data_cols = ['Bartels_solar_rotation_num', 'day_within_Bartels_rotation', + 'Kp', 'daily_Kp_sum', 'ap', 'daily_Ap', 'Cp', 'C9'] + hours = np.arange(0, 24, 3) + kp_translate = {'0': 0.0, '3': 1.0 / 3.0, '7': 2.0 / 3.0} + dnames = list() + + inst_cols = {'sw_kp': [0, 1, 2, 3], 'gfz_cp': [0, 1, 6, 7], + 'sw_ap': [0, 1, 4, 5]} + + # Construct the Instrument module name from the platform and name + inst_mod_name = '_'.join([platform, name]) + if inst_mod_name not in inst_cols.keys(): + raise ValueError('Unknown Instrument module {:}, expected {:}'.format( + inst_mod_name, inst_cols.keys())) + + data_paths = {inst_mod: data_path if inst_mod == inst_mod_name else + general.get_instrument_data_path(inst_mod, tag=tag, + inst_id=inst_id) + for inst_mod in inst_cols.keys()} + + # Cycle through all the times + for dl_date in date_array: + fname = 'Kp_{:s}{:04d}.wdc'.format(tag, dl_date.year) + if fname not in dnames: + pysat.logger.info(' '.join(('Downloading file for', + dl_date.strftime('%Y')))) + furl = ''.join([burl, fname]) + req = requests.get(furl) + + if req.ok: + # Split the file text into lines + lines = req.text.split('\n')[:-1] + + # Remove the header + while lines[0].find('#') == 0: + lines.pop(0) + + # Process the data lines + ddict = {dkey: list() for dkey in data_cols} + times = list() + for line in lines: + ldate = dt.datetime.strptime(' '.join([ + "{:02d}".format(int(dd)) for dd in + [line[:2], line[2:4], line[4:6]]]), "%y %m %d") + bsr_num = int(line[6:10]) + bsr_day = int(line[10:12]) + if line[28:30] == ' ': + kp_ones = 0.0 + else: + kp_ones = float(line[28:30]) + sum_kp = kp_ones + kp_translate[line[30]] + daily_ap = int(line[55:58]) + cp = float(line[58:61]) + c9 = int(line[61]) + + for i, hour in enumerate(hours): + # Set the time for this hour and day + times.append(ldate + dt.timedelta(hours=int(hour))) + + # Set the daily values for this hour + ddict['Bartels_solar_rotation_num'].append(bsr_num) + ddict['day_within_Bartels_rotation'].append(bsr_day) + ddict['daily_Kp_sum'].append(sum_kp) + ddict['daily_Ap'].append(daily_ap) + ddict['Cp'].append(cp) + ddict['C9'].append(c9) + + # Get the hourly-specific values + ikp = i * 2 + kp_ones = line[12 + ikp] + if kp_ones == ' ': + kp_ones = 0.0 + ddict['Kp'].append(float(kp_ones) + + kp_translate[line[13 + ikp]]) + iap = i * 3 + ddict['ap'].append(int(line[31 + iap:34 + iap])) + + # Put data into nicer DataFrames + for inst_mod in inst_cols.keys(): + sel_cols = data_cols[inst_cols[inst_mod]] + sel_dict = {col: ddict[col] for col in sel_cols} + data = pds.DataFrame(sel_dict, index=times, + columns=sel_cols) + + # Write out as a CSV file + sfname = fname.replace('Kp', inst_mod.split('_')[-1]) + saved_fname = os.path.join(data_paths[inst_mod], + sfname).replace('.wdc', '.txt') + data.to_csv(saved_fname, header=True) + + # Record the filename so we don't download it twice + dnames.append(fname) + else: + pysat.logger.info("".join(["Unable to download data for ", + dl_date.strftime("%d %b %Y"), + ", date may be out of range for ", + "the database."])) + return + + +def kp_ap_cp_list_files(name, tag, inst_id, data_path, format_str=None): + """List local files for Kp, ap, or Cp data obtained from GFZ. + + Parameters + ---------- + name : str + Instrument name. + tag : str + String specifying the database, expects 'def' (definitive) or 'now' + (nowcast) + inst_id : str + Specifies the instrument identification, not used. + data_path : str + Path to data directory. + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + files : pysat._files.Files + A class containing the verified available files + + """ + + if format_str is None: + format_str = ''.join(['_'.join([name, tag]), '{year:04d}.txt']) + + # Files are stored by year, going to add a date to the yearly filename for + # each month and day of month. The load routine will load the year and use + # the append date to select out approriate data. + files = pysat.Files.from_os(data_path=data_path, format_str=format_str) + if not files.empty: + files.loc[files.index[-1] + pds.DateOffset(years=1) + - pds.DateOffset(days=1)] = files.iloc[-1] + files = files.asfreq('D', 'pad') + files = files + '_' + files.index.strftime('%Y-%m-%d') + + return files + + +def load_def_now(fnames): + """Load GFZ yearly definitive or nowcast index data. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames + + Returns + ------- + data : pandas.DataFrame + Object containing satellite data + + """ + + # Load the definitive or nowcast data. The Kp, ap, and Cp data are stored + # together in yearly files that are separated by index on download. We + # need to return data daily. The daily date is attached to filename. + # Parse off the last date, load month of data, and downselect to the + # desired day + unique_fnames = dict() + for filename in fnames: + fname = filename[0:-11] + fdate = dt.datetime.strptime(filename[-10:], '%Y-%m-%d') + if fname not in unique_fnames.keys(): + unique_fnames[fname] = [fdate] + else: + unique_fnames[fname].append(fdate) + + # Load the desired filenames + all_data = [] + for fname in unique_fnames.keys(): + # The daily date is attached to the filename. Parse off the last + # date, load the year of data, downselect to the desired day + fdate = min(unique_fnames[fname]) + temp = pds.read_csv(fname, index_col=0, parse_dates=True) + + if temp.empty: + pysat.logger.warn('Empty file: {:}'.format(fname)) + continue + + # Select the desired times and add to data list + all_data.append(pds.DataFrame(temp[fdate:max(unique_fnames[fname]) + + dt.timedelta(seconds=86399)])) + + # Combine data together + if len(all_data) > 0: + data = pds.concat(all_data, axis=0, sort=True) + else: + data = pds.DataFrame() + + return data From 2dc0c4683ffe593354d971a0cd36dd22d8f6a710 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 28 Nov 2022 15:09:49 -0500 Subject: [PATCH 007/171] ENH: created a SWPC sub-module Grouped all the SWPC-specific functions into their own sub-module. --- pysatSpaceWeather/instruments/methods/swpc.py | 506 ++++++++++++++++++ 1 file changed, 506 insertions(+) create mode 100644 pysatSpaceWeather/instruments/methods/swpc.py diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py new file mode 100644 index 00000000..a40b09b7 --- /dev/null +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -0,0 +1,506 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# ---------------------------------------------------------------------------- +"""Provides routines that support SWPC space weather instruments.""" + +import datetime as dt +import numpy as np +import os +import pandas as pds +import requests + +import pysat + +from pysatSpaceWeather.instruments.methods import general +from pysatSpaceWeather.instruments.methods import f107 as mm_f107 + +# ---------------------------------------------------------------------------- +# Define the module variables + +ackn = ''.join(['Prepared by the U.S. Dept. of Commerce, NOAA, Space ', + 'Weather Prediction Center']) +forecast_warning = ''.join(['This routine can only download the current ', + 'forecast, not archived forecasts']) + + +# ---------------------------------------------------------------------------- +# Define the module functions + +def solar_geomag_predictions_download(name, date_array, data_path): + """Download the 3-day solar-geomagnetic predictions from SWPC. + + Parameters + ---------- + name : str + Instrument name, expects one of 'kp', 'ap', 'storm-prob', 'f107', + 'flare', or 'polar-cap'. + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + data_path : str + Path to data directory. + + Note + ---- + Note that the download path for the complementary Instrument will use + the standard pysat data paths + + """ + pysat.logger.info(forecast_warning) + + # Get the file paths + file_paths = {data_name: data_path if name == data_name else + general.get_instrument_data_path( + 'sw_{:s}'.format(data_name), + tag='forecast' if data_name == 'f107' else 'prediction') + for data_name in ['kp', 'ap', 'storm-prob', 'f107', 'flare', + 'polar-cap']} + + # Download webpage + furl = ''.join(['https://services.swpc.noaa.gov/text/', + '3-day-solar-geomag-predictions.txt']) + req = requests.get(furl) + + # Parse text to get the date the prediction was generated + date_str = req.text.split(':Issued: ')[-1].split(' UTC')[0] + dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') + + # Parse the data to get the prediction dates + date_strs = req.text.split(':Prediction_dates:')[-1].split('\n')[0] + pred_times = [dt.datetime.strptime(' '.join(date_str.split()), '%Y %b %d') + for date_str in date_strs.split(' ') if len(date_str) > 0] + + # Separate out the data by chunks + ap_raw = req.text.split(':Geomagnetic_A_indices:')[-1] + kp_raw = req.text.split(':Pred_Mid_k:')[-1] + storm_raw = req.text.split(':Prob_Mid:')[-1] + pc_raw = req.text.split(':Polar_cap:')[-1] + f107_raw = req.text.split(':10cm_flux:')[-1] + flare_raw = req.text.split(':Whole_Disk_Flare_Prob:')[-1] + + # Initalize the data for each data type + data_vals = {data_name: dict() for data_name in file_paths.keys()} + data_times = {data_name: pred_times for data_name in file_paths.keys()} + + # Process the ap data + for line in ap_raw.split('\n'): + if line.find(":") == 0: + break + elif line.find("A_") == 0: + split_line = line.split() + if split_line[0] == "A_Planetary": + dkey = "daily_Ap" + else: + dkey = split_line[0] + + data_vals['ap'][dkey] = [int(val) for val in split_line[1:]] + + # Process the Kp data + hr_strs = ['00-03UT', '03-06UT', '06-09UT', '09-12UT', '12-15UT', '15-18UT', + '18-21UT', '21-00UT'] + data_times['kp'] = pds.date_range(pred_times[0], periods=24, freq='3H') + + for line in kp_raw.split('\n'): + if line.find("Prob_Mid") >= 0: + break + elif line.find("UT") > 0: + split_line = line.split() + reg, hr = split_line[0].split('/') + dkey = '{:s}_lat_Kp'.format(reg) + + # Initalize the Kp data for this region + if dkey not in data_vals['kp'].keys(): + data_vals['kp'][dkey] = np.full(shape=(24,), fill_value=np.nan) + + # Save the Kp data into the correct day and hour index + hr_index = hr_strs.index(hr) + data_vals['kp'][dkey][hr_index] = float(split_line[1]) + data_vals['kp'][dkey][hr_index + 8] = float(split_line[2]) + data_vals['kp'][dkey][hr_index + 16] = float(split_line[3]) + + # Process the storm probabilities + for line in storm_raw.split('\n'): + if line.find("Polar_cap") >= 0: + break + elif len(line) > 0: + split_line = line.split() + if split_line[0].find('/') > 0: + dkey = split_line[0].replace('/', '-Lat_') + data_vals['storm-prob'][dkey] = [ + int(val) for val in split_line[1:]] + + # Process the polar cap prediction + data_vals['polar-cap']['absorption_forecast'] = [ + str_val for str_val in pc_raw.split('\n')[1].split()] + data_times['polar-cap'] = [ + ptimes for i, ptimes in enumerate(pred_times) + if i < len(data_vals['polar-cap']['absorption_forecast'])] + + # Process the F10.7 data + data_vals['f107']['f107'] = [ + int(val) for val in f107_raw.split('\n')[1].split()] + + # Process the flare data + dkey_root = 'Whole_Disk_Flare_Prob' + for line in flare_raw.split('\n'): + if len(line) > 0 and line.find("#") < 0: + if line.find(":") == 0: + dkey_root = line.split(":")[1] + else: + split_line = line.split() + + if len(split_line) == 4: + dkey = "_".join([dkey_root, split_line[0]]) + data_vals['flare'][dkey] = [ + int(val) for val in split_line[1:]] + else: + data_vals['flare']['{:s}_Region'.format(dkey_root)] = [ + int(split_line[0]), -1, -1] + data_vals['flare']['{:s}_Class_C'.format(dkey_root)] = [ + int(split_line[1]), -1, -1] + data_vals['flare']['{:s}_Class_M'.format(dkey_root)] = [ + int(split_line[2]), -1, -1] + data_vals['flare']['{:s}_Class_X'.format(dkey_root)] = [ + int(split_line[3]), -1, -1] + data_vals['flare']['{:s}_Class_P'.format(dkey_root)] = [ + int(split_line[4]), -1, -1] + + # Save the data by type into files + for data_name in data_vals.keys(): + # Put the data values into a nicer DataFrame + data = pds.DataFrame(data_vals[data_name], index=data_times[data_name]) + + # Save the data as a CSV file + data_file = '_'.join([data_name, 'prediction', + '{:s}.txt'.format(dl_date.strftime('%Y-%m-%d'))]) + data.to_csv(os.path.join(file_paths[data_name], data_file), header=True) + + return + + +def geomag_forecast_download(name, date_array, data_path): + """Download the 3-day geomagnetic Kp, ap, and storm data from SWPC. + + Parameters + ---------- + name : str + Instrument name, expects one of 'kp', 'ap', or 'storm-prob'. + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + data_path : str + Path to data directory. + + Note + ---- + Note that the download path for the complementary Instrument will use + the standard pysat data paths + + """ + pysat.logger.info(forecast_warning) + + # Get the file paths + if name == 'kp': + kp_path = data_path + ap_path = general.get_instrument_data_path('sw_ap', tag='forecast') + storm_path = general.get_instrument_data_path('sw_storm-prob', + tag='forecast') + elif name == 'ap': + ap_path = data_path + kp_path = general.get_instrument_data_path('sw_kp', tag='forecast') + storm_path = general.get_instrument_data_path('sw_storm-prob', + tag='forecast') + else: + storm_path = data_path + ap_path = general.get_instrument_data_path('sw_ap', tag='forecast') + kp_path = general.get_instrument_data_path('sw_kp', tag='forecast') + + # Download webpage + furl = 'https://services.swpc.noaa.gov/text/3-day-geomag-forecast.txt' + req = requests.get(furl) + + # Parse text to get the date the prediction was generated + date_str = req.text.split(':Issued: ')[-1].split(' UTC')[0] + dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') + + # Separate out the data by chunks + ap_raw = req.text.split('NOAA Ap Index Forecast')[-1] + kp_raw = req.text.split('NOAA Kp index forecast ')[-1] + storm_raw = req.text.split('NOAA Geomagnetic Activity Probabilities')[-1] + + # Get dates of the forecasts + date_str = kp_raw[0:6] + ' ' + str(dl_date.year) + forecast_date = dt.datetime.strptime(date_str, '%d %b %Y') + + # Strings we will use to parse the downloaded text for Kp + lines = ['00-03UT', '03-06UT', '06-09UT', '09-12UT', '12-15UT', '15-18UT', + '18-21UT', '21-00UT'] + + # Storage for daily Kp forecasts. Get values for each day, then combine + # them together + kp_day1 = [] + kp_day2 = [] + kp_day3 = [] + for line in lines: + raw = kp_raw.split(line)[-1].split('\n')[0] + cols = raw.split() + kp_day1.append(float(cols[-3])) + kp_day2.append(float(cols[-2])) + kp_day3.append(float(cols[-1])) + + kp_times = pds.date_range(forecast_date, periods=24, freq='3H') + kp_day = [] + for dd in [kp_day1, kp_day2, kp_day3]: + kp_day.extend(dd) + + # Put Kp data into nicer DataFrame + kp_data = pds.DataFrame(kp_day, index=kp_times, columns=['Kp']) + + # Save the Kp data + kp_file = 'kp_forecast_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) + kp_data.to_csv(os.path.join(kp_path, kp_file), header=True) + + # Parse the Ap data + ap_times = pds.date_range(dl_date - dt.timedelta(days=1), periods=5, + freq='1D') + obs_line = ap_raw.split('Observed Ap')[-1].split('\n')[0] + est_line = ap_raw.split('Estimated Ap')[-1].split('\n')[0] + pred_line = ap_raw.split('Predicted Ap')[-1].split('\n')[0] + ap_vals = [int(obs_line[-3:]), int(est_line[-3:])] + + for ap_val in pred_line.split()[-1].split('-'): + ap_vals.append(int(ap_val)) + + # Put the Ap data into a nicer DataFrame + ap_data = pds.DataFrame(ap_vals, index=ap_times, columns=['daily_Ap']) + + # Save the Ap data + ap_file = 'ap_forecast_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) + ap_data.to_csv(os.path.join(ap_path, ap_file), header=True) + + # Parse the storm probabilities + storm_dict = {} + for storm_line in storm_raw.split('\n')[1:5]: + storm_split = storm_line.split() + + # Build the storm data column name + dkey = '_'.join(storm_split[:-1]) + + # Assign the storm probabilities + storm_dict[dkey] = [int(sp) for sp in storm_split[-1].split('/')] + + # Put the storm probabilities into a nicer DataFrame + storm_times = pds.date_range(forecast_date, periods=3, freq='1D') + storm_data = pds.DataFrame(storm_dict, index=storm_times) + + # Save the storm probabilities + storm_file = 'storm-prob_forecast_{:s}.txt'.format(dl_date.strftime( + '%Y-%m-%d')) + storm_data.to_csv(os.path.join(storm_path, storm_file), header=True) + + return + + +def kp_ap_recent_download(name, date_array, data_path): + """Download recent Kp and ap data from SWPC. + + Parameters + ---------- + name : str + Instrument name, expects 'kp' or 'ap'. + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + data_path : str + Path to data directory. + + Note + ---- + Note that the download path for the complementary Instrument will use + the standard pysat data paths + + """ + pysat.logger.info(forecast_warning) + + # Download webpage + rurl = ''.join(('https://services.swpc.noaa.gov/text/', + 'daily-geomagnetic-indices.txt')) + req = requests.get(rurl) + + # Parse text to get the date the prediction was generated + date_str = req.text.split(':Issued: ')[-1].split('\n')[0] + dl_date = dt.datetime.strptime(date_str, '%H%M UT %d %b %Y') + + # Data is the forecast value for the next three days + raw_data = req.text.split('# Date ')[-1] + + # Keep only the middle bits that matter + raw_data = raw_data.split('\n')[1:-1] + + # Hold times from the file + times = [] + + # Holds Kp and Ap values for each station + sub_kps = [[], [], []] + sub_aps = [[], [], []] + + # Iterate through file lines and parse out the info we want + for line in raw_data: + times.append(dt.datetime.strptime(line[0:10], '%Y %m %d')) + + # Pick out Kp values for each of the three columns. The columns + # used to all have integer values, but now some have floats. + kp_sub_lines = [line[17:33], line[40:56], line[63:]] + ap_sub_lines = [line[10:17], line[33:40], line[56:63]] + for i, sub_line in enumerate(kp_sub_lines): + # Process the Kp data, which has 3-hour values + split_sub = sub_line.split() + for ihr in np.arange(8): + if sub_line.find('.') < 0: + # These are integer values + sub_kps[i].append( + int(sub_line[(ihr * 2):((ihr + 1) * 2)])) + else: + # These are float values + sub_kps[i].append(float(split_sub[ihr])) + + # Process the Ap data, which has daily values + sub_aps[i].append(int(ap_sub_lines[i])) + + # Create times on 3 hour cadence + kp_times = pds.date_range(times[0], periods=(8 * 30), freq='3H') + + # Put Kp data into DataFrame + data = pds.DataFrame({'mid_lat_Kp': sub_kps[0], 'high_lat_Kp': sub_kps[1], + 'Kp': sub_kps[2]}, index=kp_times) + + # Write Kp out as a file + data_file = 'kp_recent_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) + + if name == 'kp': + kp_path = data_path + else: + kp_path = general.get_instrument_data_path('sw_kp', tag='recent') + + data.to_csv(os.path.join(kp_path, data_file), header=True) + + # Put Ap data into a DataFrame + data = pds.DataFrame({'mid_lat_Ap': sub_aps[0], 'high_lat_Ap': sub_aps[1], + 'daily_Ap': sub_kps[2]}, index=times) + + # Write Kp out as a file + data_file = 'ap_recent_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) + + if name == 'ap': + ap_path = data_path + else: + ap_path = general.get_instrument_data_path('sw_ap', tag='recent') + + data.to_csv(os.path.join(ap_path, data_file), header=True) + + return + + +def recent_ap_f107_download(name, date_array, data_path): + """Download 45-day ap and F10.7 data from SWPC. + + Parameters + ---------- + name : str + Instrument name, expects 'f107' or 'ap'. + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + data_path : str + Path to data directory. + + Note + ---- + Note that the download path for the complementary Instrument will use + the standard pysat data paths + + """ + pysat.logger.info(forecast_warning) + + # Set the download webpage + furl = 'https://services.swpc.noaa.gov/text/45-day-ap-forecast.txt' + req = requests.get(furl) + + # Parse text to get the date the prediction was generated + date_str = req.text.split(':Issued: ')[-1].split(' UTC')[0] + dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') + + # Get to the forecast data + raw_data = req.text.split('45-DAY AP FORECAST')[-1] + + # Grab Ap part + raw_ap = raw_data.split('45-DAY F10.7 CM FLUX FORECAST')[0] + raw_ap = raw_ap.split('\n')[1:-1] + + # Get the F107 + raw_f107 = raw_data.split('45-DAY F10.7 CM FLUX FORECAST')[-1] + raw_f107 = raw_f107.split('\n')[1:-4] + + # Parse the Ap data + ap_times, ap = mm_f107.parse_45day_block(raw_ap) + ap_data = pds.DataFrame(ap, index=ap_times, columns=['daily_Ap']) + + # Parse the F10.7 data + f107_times, f107 = mm_f107.parse_45day_block(raw_f107) + f107_data = pds.DataFrame(f107, index=f107_times, columns=['f107']) + + # Get the data directories + if name == 'ap': + ap_path = data_path + f107_path = general.get_instrument_data_path('sw_f107', tag='45day') + else: + ap_path = general.get_instrument_data_path('sw_ap', tag='45day') + f107_path = data_path + + # Write out the Ap data file + ap_file = 'ap_45day_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) + ap_data.to_csv(os.path.join(ap_path, ap_file), header=True) + + # Write out the F107 data file + f107_file = 'f107_45day_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) + f107_data.to_csv(os.path.join(f107_path, f107_file), header=True) + + return + + +def list_files(name, tag, inst_id, data_path, format_str=None): + """List local files for Kp or ap data obtained from SWPC. + + Parameters + ---------- + name : str + Instrument name. + tag : str + String specifying the database, expects 'def' (definitive) or 'now' + (nowcast) + inst_id : str + Specifies the instrument identification, not used. + data_path : str + Path to data directory. + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + files : pysat._files.Files + A class containing the verified available files + + """ + + if format_str is None: + format_str = '_'.join([name, tag, + '{year:04d}-{month:02d}-{day:02d}.txt']) + files = pysat.Files.from_os(data_path=data_path, format_str=format_str) + + # Pad list of files data to include most recent file under tomorrow + if not files.empty: + pds_offset = pds.DateOffset(days=1) + files.loc[files.index[-1] + pds_offset] = files.values[-1] + files.loc[files.index[-1] + pds_offset] = files.values[-1] + + return files From d9aa09c329171ad0e27520d26393cb94ba280f3b Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 28 Nov 2022 15:10:39 -0500 Subject: [PATCH 008/171] MAINT: removed GFZ and SWPC functions Removed the GFZ and SWPC functions that were used to create their own sub-modules. --- .../instruments/methods/kp_ap.py | 353 +++--------------- 1 file changed, 49 insertions(+), 304 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/kp_ap.py b/pysatSpaceWeather/instruments/methods/kp_ap.py index b987ed80..56270571 100644 --- a/pysatSpaceWeather/instruments/methods/kp_ap.py +++ b/pysatSpaceWeather/instruments/methods/kp_ap.py @@ -4,7 +4,7 @@ # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 # ---------------------------------------------------------------------------- -"""Provides routines to support the geomagnetic indeces, Kp and Ap.""" +"""Provides routines to support the geomagnetic indices, Kp and Ap.""" import datetime as dt import numpy as np @@ -14,6 +14,8 @@ import pysat import pysatSpaceWeather as pysat_sw +from pysatSpaceWeather.instruments.methods import gfz +from pysatSpaceWeather.instruments.methods import swpc # -------------------------------------------------------------------------- @@ -30,15 +32,13 @@ def acknowledgements(name, tag): Instrument tag. """ - swpc = ''.join(['Prepared by the U.S. Dept. of Commerce, NOAA, Space ', - 'Weather Prediction Center']) - gfz = ''.join(['CC BY 4.0, The Kp index was introduced by Bartels (1949) ', - 'and is produced by Geomagnetic Observatory Niemegk, GFZ ', - 'German Research Centre for Geosciences. Please cite the', - " references in the 'references' attribute"]) ackn = {'kp': {'': 'Provided by GFZ German Research Centre for Geosciences', - 'forecast': swpc, 'recent': swpc, 'def': gfz, 'now': gfz}} + 'forecast': swpc.ackn, 'recent': swpc.ackn, 'def': gfz.ackn, + 'now': gfz.ackn}, + 'ap': {'forecast': swpc.ackn, 'recent': swpc.ackn, + '45day': swpc.ackn, 'def': gfz.ackn, 'now': gfz.ackn}, + 'cp': {'def': gfz.ackn, 'now': gfz.ackn}} return ackn[name][tag] @@ -76,308 +76,16 @@ def references(name, tag): "K-derived planetary indices: description ", "and availability, Rev. Geophys. 29, 3, ", "415-432, 1991."])]) - gfz_refs = '\n'.join([''.join(["Matzka, J., Bronkalla, O., Tornow, K., ", - "Elger, K. and Stolle, C., 2021. ", - "Geomagnetic Kp index. V. 1.0. GFZ Data ", - "Services, doi:10.5880/Kp.0001"]), - ''.join(["Matzka, J., Stolle, C., Yamazaki, Y., ", - "Bronkalla, O. and Morschhauser, A., 2021. ", - "The geomagnetic Kp index and derived ", - "indices of geomagnetic activity. Space ", - "Weather,doi:10.1029/2020SW002641"])]) refs = {'kp': {'': gen_refs, 'forecast': gen_refs, 'recent': gen_refs, - 'def': gfz_refs, 'now': gfz_refs}} + 'def': gfz.geoind_refs, 'now': gfz.geoind_refs}, + 'ap': {'recent': gen_refs, 'forecast': gen_refs, '45day': gen_refs, + 'def': gfz.geoind_refs, 'now': gfz.geoind_refs}, + 'cp': {'def': gfz.geoind_refs, 'now': gfz.geoind_refs}} return refs[name][tag] -def gfz_kp_ap_cp_download(platform, name, tag, inst_id, date_array, data_path): - """Download Kp, ap, and Cp data from GFZ. - - Parameters - ---------- - platform : str - Instrument platform. - name : str - Instrument name. - tag : str - String specifying the database, expects 'def' (definitive) or 'now' - (nowcast) - inst_id : str - Specifies the instrument identification, not used. - date_array : array-like or pandas.DatetimeIndex - Array-like or index of datetimes to be downloaded. - data_path : str - Path to data directory. - - """ - # Set the page for the definitive or nowcast Kp - burl = ''.join(['https://datapub.gfz-potsdam.de/download/10.5880.Kp.0001', - '/Kp_', 'nowcast' if tag == 'now' else 'definitive', '/']) - data_cols = ['Bartels_solar_rotation_num', 'day_within_Bartels_rotation', - 'Kp', 'daily_Kp_sum', 'ap', 'daily_Ap', 'Cp', 'C9'] - hours = np.arange(0, 24, 3) - kp_translate = {'0': 0.0, '3': 1.0 / 3.0, '7': 2.0 / 3.0} - dnames = list() - - inst_cols = {'sw_kp': [0, 1, 2, 3], 'gfz_cp': [0, 1, 6, 7], - 'sw_ap': [0, 1, 4, 5]} - - # Construct the Instrument module name from the platform and name - inst_mod_name = '_'.join([platform, name]) - if inst_mod_name not in inst_cols.keys(): - raise ValueError('Unknown Instrument module {:}, expected {:}'.format( - inst_mod_name, inst_cols.keys())) - - data_paths = {inst_mod: data_path if inst_mod == inst_mod_name else - get_instrument_data_path(inst_mod) - for inst_mod in inst_cols.keys()} - - # Cycle through all the times - for dl_date in date_array: - fname = 'Kp_{:s}{:04d}.wdc'.format(tag, dl_date.year) - if fname not in dnames: - pysat.logger.info(' '.join(('Downloading file for', - dl_date.strftime('%Y')))) - furl = ''.join([burl, fname]) - req = requests.get(furl) - - if req.ok: - # Split the file text into lines - lines = req.text.split('\n')[:-1] - - # Remove the header - while lines[0].find('#') == 0: - lines.pop(0) - - # Process the data lines - ddict = {dkey: list() for dkey in data_cols} - times = list() - for line in lines: - ldate = dt.datetime.strptime(' '.join([ - "{:02d}".format(int(dd)) for dd in - [line[:2], line[2:4], line[4:6]]]), "%y %m %d") - bsr_num = int(line[6:10]) - bsr_day = int(line[10:12]) - if line[28:30] == ' ': - kp_ones = 0.0 - else: - kp_ones = float(line[28:30]) - sum_kp = kp_ones + kp_translate[line[30]] - daily_ap = int(line[55:58]) - cp = float(line[58:61]) - c9 = int(line[61]) - - for i, hour in enumerate(hours): - # Set the time for this hour and day - times.append(ldate + dt.timedelta(hours=int(hour))) - - # Set the daily values for this hour - ddict['Bartels_solar_rotation_num'].append(bsr_num) - ddict['day_within_Bartels_rotation'].append(bsr_day) - ddict['daily_Kp_sum'].append(sum_kp) - ddict['daily_Ap'].append(daily_ap) - ddict['Cp'].append(cp) - ddict['C9'].append(c9) - - # Get the hourly-specific values - ikp = i * 2 - kp_ones = line[12 + ikp] - if kp_ones == ' ': - kp_ones = 0.0 - ddict['Kp'].append(float(kp_ones) - + kp_translate[line[13 + ikp]]) - iap = i * 3 - ddict['ap'].append(int(line[31 + iap:34 + iap])) - - # Put data into nicer DataFrames - for inst_mod in inst_cols.keys(): - sel_cols = data_cols[inst_cols[inst_mod]] - sel_dict = {col: ddict[col] for col in sel_cols} - data = pds.DataFrame(sel_dict, index=times, - columns=sel_cols) - - # Write out as a CSV file - sfname = fname.replace('Kp', inst_mod.split('_')[-1]) - saved_fname = os.path.join(data_paths[inst_mod], - sfname).replace('.wdc', '.txt') - data.to_csv(saved_fname, header=True) - - # Record the filename so we don't download it twice - dnames.append(fname) - else: - pysat.logger.info("".join(["Unable to download data for ", - dl_date.strftime("%d %b %Y"), - ", date may be out of range for ", - "the database."])) - return - - -def swpc_kp_ap_recent_download(name, date_array, data_path): - """Download recent Kp and ap data from SWPC. - - Parameters - ---------- - name : str - Instrument name, expects 'kp' or 'ap'. - date_array : array-like or pandas.DatetimeIndex - Array-like or index of datetimes to be downloaded. - data_path : str - Path to data directory. - - """ - pysat.logger.info(' '.join(('This routine can only download the ', - 'current webpage, not archived forecasts'))) - - # Download webpage - rurl = ''.join(('https://services.swpc.noaa.gov/text/', - 'daily-geomagnetic-indices.txt')) - req = requests.get(rurl) - - # Parse text to get the date the prediction was generated - date_str = req.text.split(':Issued: ')[-1].split('\n')[0] - dl_date = dt.datetime.strptime(date_str, '%H%M UT %d %b %Y') - - # Data is the forecast value for the next three days - raw_data = req.text.split('# Date ')[-1] - - # Keep only the middle bits that matter - raw_data = raw_data.split('\n')[1:-1] - - # Hold times from the file - times = [] - - # Holds Kp and Ap values for each station - sub_kps = [[], [], []] - sub_aps = [[], [], []] - - # Iterate through file lines and parse out the info we want - for line in raw_data: - times.append(dt.datetime.strptime(line[0:10], '%Y %m %d')) - - # Pick out Kp values for each of the three columns. The columns - # used to all have integer values, but now some have floats. - kp_sub_lines = [line[17:33], line[40:56], line[63:]] - ap_sub_lines = [line[10:17], line[33:40], line[56:63]] - for i, sub_line in enumerate(kp_sub_lines): - # Process the Kp data, which has 3-hour values - split_sub = sub_line.split() - for ihr in np.arange(8): - if sub_line.find('.') < 0: - # These are integer values - sub_kps[i].append( - int(sub_line[(ihr * 2):((ihr + 1) * 2)])) - else: - # These are float values - sub_kps[i].append(float(split_sub[ihr])) - - # Process the Ap data, which has daily values - sub_aps[i].append(int(ap_sub_lines[i])) - - # Create times on 3 hour cadence - kp_times = pds.date_range(times[0], periods=(8 * 30), freq='3H') - - # Put Kp data into DataFrame - data = pds.DataFrame({'mid_lat_Kp': sub_kps[0], 'high_lat_Kp': sub_kps[1], - 'Kp': sub_kps[2]}, index=kp_times) - - # Write Kp out as a file - data_file = 'kp_recent_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) - kp_path = data_path if name == 'kp' else get_instrument_data_path('sw_kp') - data.to_csv(os.path.join(kp_path, data_file), header=True) - - # Put Ap data into a DataFrame - data = pds.DataFrame({'mid_lat_Ap': sub_aps[0], 'high_lat_Ap': sub_aps[1], - 'daily_Ap': sub_kps[2]}, index=times) - - # Write Kp out as a file - data_file = 'ap_recent_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) - ap_path = data_path if name == 'ap' else get_instrument_data_path('sw_ap') - data.to_csv(os.path.join(ap_path, data_file), header=True) - - return - - -def gfz_kp_ap_cp_list_files(name, tag, inst_id, data_path, format_str=None): - """List local files for Kp, ap, or Cp data obtained from GFZ. - - Parameters - ---------- - name : str - Instrument name. - tag : str - String specifying the database, expects 'def' (definitive) or 'now' - (nowcast) - inst_id : str - Specifies the instrument identification, not used. - data_path : str - Path to data directory. - format_str : str or NoneType - User specified file format. If None is specified, the default - formats associated with the supplied tags are used. (default=None) - - Returns - ------- - files : pysat._files.Files - A class containing the verified available files - - """ - - if format_str is None: - format_str = ''.join(['_'.join([name, tag]), '{year:04d}.txt']) - - # Files are stored by year, going to add a date to the yearly filename for - # each month and day of month. The load routine will load the year and use - # the append date to select out approriate data. - files = pysat.Files.from_os(data_path=data_path, format_str=format_str) - if not files.empty: - files.loc[files.index[-1] + pds.DateOffset(years=1) - - pds.DateOffset(days=1)] = files.iloc[-1] - files = files.asfreq('D', 'pad') - files = files + '_' + files.index.strftime('%Y-%m-%d') - - return files - - -def swpc_list_files(name, tag, inst_id, data_path, format_str=None): - """List local files for Kp or ap data obtained from SWPC. - - Parameters - ---------- - name : str - Instrument name. - tag : str - String specifying the database, expects 'def' (definitive) or 'now' - (nowcast) - inst_id : str - Specifies the instrument identification, not used. - data_path : str - Path to data directory. - format_str : str or NoneType - User specified file format. If None is specified, the default - formats associated with the supplied tags are used. (default=None) - - Returns - ------- - files : pysat._files.Files - A class containing the verified available files - - """ - - if format_str is None: - format_str = '_'.join([name, tag, - '{year:04d}-{month:02d}-{day:02d}.txt']) - files = pysat.Files.from_os(data_path=data_path, format_str=format_str) - - # Pad list of files data to include most recent file under tomorrow - if not files.empty: - pds_offset = pds.DateOffset(days=1) - files.loc[files.index[-1] + pds_offset] = files.values[-1] - files.loc[files.index[-1] + pds_offset] = files.values[-1] - - return files - def initialize_kp_metadata(meta, data_key, fill_val=-1): """Initialize the Kp meta data using our knowledge of the index. @@ -425,6 +133,43 @@ def initialize_ap_metadata(meta, data_key, fill_val=-1): return + +def initialize_bartel_metadata(meta, data_key, fill_val=-1): + """Initialize the Bartel rotation meta data using our knowledge of the data. + + Parameters + ---------- + meta : pysat._meta.Meta + Pysat Metadata + data_key : str + String denoting the data key + fill_val : int or float + File-specific fill value (default=-1) + + """ + + if data_key.find('solar_rotation_num') >= 0: + units = '' + bname = 'Bartels solar rotation number' + desc = 'A sequence of 27-day intervals counted from February 8, 1832' + max_val = np.inf + elif data_key.find('day_within') >= 0: + units = 'day' + bname = 'Days within Bartels solar rotation' + desc = 'Number of day within the Bartels solar rotation', + max_val = 27 + else: + raise ValueError('unknown data key: {:}'.format(data_key)) + + meta[data_key] = {meta.labels.units: units, + meta.labels.name: bname, + meta.labels.desc: desc, + meta.labels.min_val: 1, + meta.labels.max_val: max_val, + meta.labels.fill_val: fill_val} + + return + # -------------------------------------------------------------------------- # Common custom functions From 82199f4f9f8cd941ef24bbb2e6f5eca62e72d59e Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 28 Nov 2022 15:11:48 -0500 Subject: [PATCH 009/171] ENH: added new tags Added new tags to the Kp, Ap, and F10.7 Instruments, using the new SWPC functions to handle downloading and listing the data files. --- pysatSpaceWeather/instruments/sw_ap.py | 120 +++++++--------- pysatSpaceWeather/instruments/sw_f107.py | 122 +++------------- pysatSpaceWeather/instruments/sw_kp.py | 172 +++++------------------ 3 files changed, 101 insertions(+), 313 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_ap.py b/pysatSpaceWeather/instruments/sw_ap.py index 6d696506..64001476 100644 --- a/pysatSpaceWeather/instruments/sw_ap.py +++ b/pysatSpaceWeather/instruments/sw_ap.py @@ -10,7 +10,10 @@ tag - 'def' Definitive ap data from GFZ - 'now' Nowcast ap data from GFZ - - 'recent' Grab last 30 days of Ap data from SWPC + - 'prediction' Predictions from SWPC for the next 3 days + - 'forecast' Forecast data from SWPC (next 3 days) + - 'recent' The last 30 days of Ap data from SWPC + - '45day' 45-Day forecast data from the Air Force inst_id '' @@ -26,6 +29,14 @@ historic data for the current year, we recommend re-downloading it before performing your data processing. +The forecast data is stored by generation date, where each file contains the +forecast for the next three days, the observed daily Ap from the prior day, and +the estimated Ap from the current day. Forecast data downloads are only +supported for the current day. When loading forecast data, the date specified +with the load command is the date the forecast was generated. The data loaded +will span three days. To always ensure you are loading the most recent data, +load the data with tomorrow's date. + Recent data is also stored by the generation date from the SWPC. Each file contains 30 days of Ap measurements. The load date issued to pysat corresponds to the generation date. @@ -41,10 +52,10 @@ Warnings -------- -The 'recent' tag loads Ap data for a specific period of time. Loading multiple -files, loading multiple days, the data padding feature, and multi_file_day -feature available from the pyast.Instrument object is not appropriate for this -tag data. +The 'forecast', 'recent', and '45day' tags load Ap data for a specific period of +time. Loading multiple files, loading multiple days, the data padding feature, +and multi_file_day feature available from the pyast.Instrument object is not +appropriate for this tag data. """ @@ -54,8 +65,7 @@ import pysat -from pysatSpaceWeather.instruments.methods import general -from pysatSpaceWeather.instruments.methods import kp_ap +from pysatSpaceWeather.instruments import methods # ---------------------------------------------------------------------------- # Instrument attributes @@ -64,12 +74,16 @@ name = 'ap' tags = {'def': 'Definitive Kp data from GFZ', 'now': 'Nowcast Kp data from GFZ', - 'recent': 'SWPC provided Kp for past 30 days'} + 'prediction': 'SWPC Predictions for the next three days', + 'forecast': 'SWPC Forecast data: prior day to three days hence', + 'recent': 'SWPC provided Kp for past 30 days', + '45day': 'Air Force 45-day Forecast'} inst_ids = {'': list(tags.keys())} # Generate todays date to support loading forecast data now = dt.datetime.utcnow() today = dt.datetime(now.year, now.month, now.day) +tomorrow = today + dt.timedelta(days=1) # ---------------------------------------------------------------------------- # Instrument test attributes @@ -77,19 +91,22 @@ # Set test dates _test_dates = {'': {'def': dt.datetime(2009, 1, 1), 'now': dt.datetime(2020, 1, 1), - 'recent': today}} + 'forecast': tomorrow, + 'prediction': tomorrow, + 'recent': today, + '45day': tomorrow}} # ---------------------------------------------------------------------------- # Instrument methods -preprocess = general.preprocess +preprocess = methods.general.preprocess def init(self): """Initialize the Instrument object with instrument specific values.""" - self.acknowledgements = kp_ap.acknowledgements(self.name, self.tag) - self.references = kp_ap.references(self.name, self.tag) + self.acknowledgements = methods.kp_ap.acknowledgements(self.name, self.tag) + self.references = methods.kp_ap.references(self.name, self.tag) pysat.logger.info(self.acknowledgements) return @@ -118,7 +135,7 @@ def load(fnames, tag='', inst_id=''): Returns ------- - data : pandas.DataFrame + result : pandas.DataFrame Object containing satellite data meta : pysat.Meta Object containing metadata such as column names and units @@ -135,61 +152,17 @@ def load(fnames, tag='', inst_id=''): # files, and we need to return data daily. The daily date is # attached to filename. Parse off the last date, load month of data, # and downselect to the desired day - unique_fnames = dict() - for filename in fnames: - fname = filename[0:-11] - fdate = dt.datetime.strptime(filename[-10:], '%Y-%m-%d') - if fname not in unique_fnames.keys(): - unique_fnames[fname] = [fdate] - else: - unique_fnames[fname].append(fdate) - - # Load the desired filenames - all_data = [] - for fname in unique_fnames.keys(): - # The daily date is attached to the filename. Parse off the last - # date, load the year of data, downselect to the desired day - fdate = min(unique_fnames[fname]) - temp = pds.read_csv(fname, index_col=0, parse_dates=True) - - if temp.empty: - pysat.logger.warn('Empty file: {:}'.format(fname)) - continue - - # Select the desired times and add to data list - all_data.append(pds.DataFrame(temp[fdate:max(unique_fnames[fname]) - + dt.timedelta(seconds=86399)])) - - # Combine data together - if len(all_data) > 0: - result = pds.concat(all_data, axis=0, sort=True) - else: - result = pds.DataFrame() + result = methods.gfz.load_def_now(fnames) # Initalize the meta data fill_val = np.nan for kk in result.keys(): if kk.lower().find('ap') >= 0: - kp_ap.initialize_ap_metadata(meta, kk, fill_val) - - meta['Bartels_solar_rotation_num'] = { - meta.labels.units: '', - meta.labels.name: 'Bartels solar rotation number', - meta.labels.desc: ''.join(['A sequence of 27-day intervals counted', - ' from February 8, 1832']), - meta.labels.min_val: 1, - meta.labels.max_val: np.inf, - meta.labels.fill_val: -1} - meta['day_within_Bartels_rotation'] = { - meta.labels.units: 'days', - meta.labels.name: 'Bartels solar rotation number', - meta.labels.desc: ''.join(['Number of day within the Bartels solar', - ' rotation']), - meta.labels.min_val: 1, - meta.labels.max_val: 27, - meta.labels.fill_val: -1} + methods.kp_ap.initialize_ap_metadata(meta, kk, fill_val) + elif kk.find('Bartels') >= 0: + methods.kp_ap.itialize_bartel_metadata(meta, kk) else: - # Load the recent data + # Load the forecast, recent, prediction, or 45day data all_data = [] for fname in fnames: result = pds.read_csv(fname, index_col=0, parse_dates=True) @@ -200,7 +173,7 @@ def load(fnames, tag='', inst_id=''): # Initalize the meta data for kk in result.keys(): - kp_ap.initialize_kp_metadata(meta, kk, fill_val) + methods.kp_ap.initialize_ap_metadata(meta, kk, fill_val) return result, meta @@ -232,11 +205,11 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): """ if tag in ['def', 'now']: - files = kp_ap.gfz_kp_ap_cp_list_files(name, tag, inst_id, data_path, - format_str=format_str) + files = methods.gfz.kp_ap_cp_list_files(name, tag, inst_id, data_path, + format_str=format_str) else: - files = kp_ap.swpc_list_files(name, tag, inst_id, data_path, - format_str=format_str) + files = methods.swpc.list_files(name, tag, inst_id, data_path, + format_str=format_str) return files @@ -266,9 +239,16 @@ def download(date_array, tag, inst_id, data_path): """ if tag in ['def', 'now']: - kp_ap.gfz_kp_ap_cp_download(platform, name, tag, inst_id, date_array, - data_path) + methods.gfz.kp_ap_cp_download(platform, name, tag, inst_id, date_array, + data_path) + elif tag == 'recent': + methods.swpc.kp_ap_recent_download(name, date_array, data_path) + elif tag == 'forecast': + methods.swpc.geomag_forecast_download(name, date_array, data_path) + elif tag == 'prediction': + methods.swpc.solar_geomag_predictions_download(name, date_array, + data_path) else: - kp_ap.swpc_kp_ap_recent_download(name, date_array, data_path) + methods.swpc.recent_ap_f107_download(name, date_array, data_path) return diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index 7e3b0481..a57c47b5 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -61,15 +61,13 @@ import numpy as np import os import pandas as pds -import pysat import requests import sys import warnings -from pysatSpaceWeather.instruments.methods import f107 as mm_f107 -from pysatSpaceWeather.instruments.methods import general +import pysat -logger = pysat.logger +from pysatSpaceWeather.instruments import methods # ---------------------------------------------------------------------------- # Instrument attributes @@ -109,16 +107,16 @@ # ---------------------------------------------------------------------------- # Instrument methods -preprocess = general.preprocess +preprocess = methods.general.preprocess def init(self): """Initialize the Instrument object with instrument specific values.""" # Set the required Instrument attributes - self.acknowledgements = mm_f107.acknowledgements(self.tag) - self.references = mm_f107.references(self.tag) - logger.info(self.acknowledgements) + self.acknowledgements = methods.f107.acknowledgements(self.tag) + self.references = methods.f107.references(self.tag) + pysat.logger.info(self.acknowledgements) # Define the historic F10.7 starting time if self.tag == 'historic': @@ -197,16 +195,7 @@ def load(fnames, tag='', inst_id=''): meta.labels.min_val: 0, meta.labels.max_val: np.inf} - if tag == '45day': - meta['ap'] = {meta.labels.units: '', - meta.labels.name: 'Daily Ap index', - meta.labels.notes: '', - meta.labels.desc: 'Daily average of 3-h ap indices', - meta.labels.fill_val: np.nan, - meta.labels.min_val: 0, - meta.labels.max_val: 400} - elif tag == 'historic': - + if tag == 'historic': # LASP updated file format in June, 2022. Minimize impact downstream by # continuing use of `f107` as primary data product. if 'f107_adjusted' in data.columns: @@ -405,16 +394,8 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): out_files = out_files + '_' + out_files.index.strftime('%Y-%m-%d') elif tag in ['daily', 'forecast', '45day']: - format_str = ''.join(['f107_', tag, - '_{year:04d}-{month:02d}-{day:02d}.txt']) - out_files = pysat.Files.from_os(data_path=data_path, - format_str=format_str) - - # Pad list of files data to include most recent file under tomorrow - if not out_files.empty: - pds_off = pds.DateOffset(days=1) - out_files.loc[out_files.index[-1] + pds_off] = out_files.values[-1] - out_files.loc[out_files.index[-1] + pds_off] = out_files.values[-1] + methods.swpc.list_files(name, tag, inst_id, data_path, + format_str=format_str) return out_files @@ -576,8 +557,8 @@ def download(date_array, tag, inst_id, data_path, update_files=False): ftp.retrbinary('RETR ' + fname, open(saved_fname, 'wb').write) downloaded = True - logger.info(' '.join(('Downloaded file for ', - dl_date.strftime('%x')))) + pysat.logger.info(' '.join(('Downloaded file for ', + dl_date.strftime('%x')))) except ftplib.error_perm as exception: # Could not fetch, so cannot rewrite @@ -601,13 +582,13 @@ def download(date_array, tag, inst_id, data_path, update_files=False): break if not downloaded: - logger.info(' '.join(('File not available for', - dl_date.strftime('%x')))) + pysat.logger.info(' '.join(('File not available for', + dl_date.strftime('%x')))) elif rewritten: with open(saved_fname, 'r') as fprelim: lines = fprelim.read() - mm_f107.rewrite_daily_file(dl_date.year, outfile, lines) + methods.f107.rewrite_daily_file(dl_date.year, outfile, lines) os.remove(saved_fname) # Cycle to the next date @@ -617,7 +598,7 @@ def download(date_array, tag, inst_id, data_path, update_files=False): ftp.close() elif tag == 'daily': - logger.info('This routine can only download the latest 30 day file') + pysat.logger.info('This routine only downloads the latest 30 day file') # Set the download webpage furl = 'https://services.swpc.noaa.gov/text/daily-solar-indices.txt' @@ -626,77 +607,12 @@ def download(date_array, tag, inst_id, data_path, update_files=False): # Save the output data_file = 'f107_daily_{:s}.txt'.format(today.strftime('%Y-%m-%d')) outfile = os.path.join(data_path, data_file) - mm_f107.rewrite_daily_file(today.year, outfile, req.text) + methods.f107.rewrite_daily_file(today.year, outfile, req.text) elif tag == 'forecast': - logger.info(' '.join(('This routine can only download the current', - 'forecast, not archived forecasts'))) - # Set the download webpage - furl = ''.join(('https://services.swpc.noaa.gov/text/', - '3-day-solar-geomag-predictions.txt')) - req = requests.get(furl) - - # Parse text to get the date the prediction was generated - date_str = req.text.split(':Issued: ')[-1].split(' UTC')[0] - dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') - - # Get starting date of the forecasts - raw_data = req.text.split(':Prediction_dates:')[-1] - forecast_date = dt.datetime.strptime(raw_data[3:14], '%Y %b %d') - - # Set the times for output data - times = pds.date_range(forecast_date, periods=3, freq='1D') - - # String data is the forecast value for the next three days - raw_data = req.text.split('10cm_flux:')[-1] - raw_data = raw_data.split('\n')[1] - val1 = int(raw_data[24:27]) - val2 = int(raw_data[38:41]) - val3 = int(raw_data[52:]) - - # Put data into nicer DataFrame - data = pds.DataFrame([val1, val2, val3], index=times, columns=['f107']) - - # Write out as a file - data_file = 'f107_forecast_{:s}.txt'.format( - dl_date.strftime('%Y-%m-%d')) - data.to_csv(os.path.join(data_path, data_file), header=True) - + methods.swpc.solar_geomag_predictions_download(name, date_array, + data_path) elif tag == '45day': - logger.info(' '.join(('This routine can only download the current', - 'forecast, not archived forecasts'))) - - # Set the download webpage - furl = 'https://services.swpc.noaa.gov/text/45-day-ap-forecast.txt' - req = requests.get(furl) - - # Parse text to get the date the prediction was generated - date_str = req.text.split(':Issued: ')[-1].split(' UTC')[0] - dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') - - # Get to the forecast data - raw_data = req.text.split('45-DAY AP FORECAST')[-1] - - # Grab AP part - raw_ap = raw_data.split('45-DAY F10.7 CM FLUX FORECAST')[0] - raw_ap = raw_ap.split('\n')[1:-1] - - # Get the F107 - raw_f107 = raw_data.split('45-DAY F10.7 CM FLUX FORECAST')[-1] - raw_f107 = raw_f107.split('\n')[1:-4] - - # Parse the AP data - ap_times, ap = mm_f107.parse_45day_block(raw_ap) - - # Parse the F10.7 data - f107_times, f107 = mm_f107.parse_45day_block(raw_f107) - - # Collect into DataFrame - data = pds.DataFrame(f107, index=f107_times, columns=['f107']) - data['ap'] = ap - - # Write out as a file - data_file = 'f107_45day_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) - data.to_csv(os.path.join(data_path, data_file), header=True) + methods.swpc.recent_ap_f107_download(name, date_array, data_path) return diff --git a/pysatSpaceWeather/instruments/sw_kp.py b/pysatSpaceWeather/instruments/sw_kp.py index 226098ab..ff2a85cd 100644 --- a/pysatSpaceWeather/instruments/sw_kp.py +++ b/pysatSpaceWeather/instruments/sw_kp.py @@ -11,8 +11,9 @@ - '' Deprecated, mixed definitive and nowcast Kp data from GFZ - 'def' Definitive Kp data from GFZ - 'now' Nowcast Kp data from GFZ - - 'forecast' Grab forecast data from SWPC (next 3 days) - - 'recent' Grab last 30 days of Kp data from SWPC + - 'prediction' Predictions from SWPC for the next 3 days + - 'forecast' Forecast data from SWPC (next 3 days) + - 'recent' The last 30 days of Kp data from SWPC inst_id '' @@ -50,10 +51,10 @@ Warnings -------- -The 'forecast' and 'recent' tags load Kp data for a specific period of time. -Loading multiple files, loading multiple days, the data padding feature, and -multi_file_day feature available from the pyast.Instrument object is not -appropriate for these tags data. +The 'forecast', 'prediction', and 'recent' tags load Kp data for a specific +period of time. Loading multiple files, loading multiple days, the data padding +feature, and multi_file_day feature available from the pyast.Instrument object +is not appropriate for these tags data. This material is based upon work supported by the National Science Foundation under Grant Number 1259508. @@ -66,15 +67,12 @@ import datetime as dt import numpy as np -import os import pandas as pds -import requests import warnings import pysat -from pysatSpaceWeather.instruments.methods import general -from pysatSpaceWeather.instruments.methods import kp_ap +from pysatSpaceWeather.instruments import methods # ---------------------------------------------------------------------------- # Instrument attributes @@ -84,6 +82,7 @@ tags = {'': 'Deprecated, mixed definitive and nowcast Kp data from GFZ', 'def': 'Definitive Kp data from GFZ', 'now': 'Nowcast Kp data from GFZ', + 'prediction': 'SWPC Predictions for the next three days', 'forecast': 'SWPC Forecast data next (3 days)', 'recent': 'SWPC provided Kp for past 30 days'} inst_ids = {'': list(tags.keys())} @@ -99,6 +98,7 @@ _test_dates = {'': {'def': dt.datetime(2009, 1, 1), 'now': dt.datetime(2020, 1, 1), 'forecast': today + dt.timedelta(days=1), + 'prediction': today + dt.timedelta(days=1), 'recent': today}} # Other tags assumed to be True @@ -107,14 +107,14 @@ # ---------------------------------------------------------------------------- # Instrument methods -preprocess = general.preprocess +preprocess = methods.general.preprocess def init(self): """Initialize the Instrument object with instrument specific values.""" - self.acknowledgements = kp_ap.acknowledgements(self.name, self.tag) - self.references = kp_ap.references(self.name, self.tag) + self.acknowledgements = methods.kp_ap.acknowledgements(self.name, self.tag) + self.references = methods.kp_ap.references(self.name, self.tag) pysat.logger.info(self.acknowledgements) return @@ -143,7 +143,7 @@ def load(fnames, tag='', inst_id=''): Returns ------- - data : pandas.DataFrame + result : pandas.DataFrame Object containing satellite data meta : pysat.Meta Object containing metadata such as column names and units @@ -266,40 +266,10 @@ def load(fnames, tag='', inst_id=''): # files, and we need to return data daily. The daily date is # attached to filename. Parse off the last date, load month of data, # and downselect to the desired day - unique_fnames = dict() - for filename in fnames: - fname = filename[0:-11] - fdate = dt.datetime.strptime(filename[-10:], '%Y-%m-%d') - if fname not in unique_fnames.keys(): - unique_fnames[fname] = [fdate] - else: - unique_fnames[fname].append(fdate) - - # Load the desired filenames - all_data = [] - for fname in unique_fnames.keys(): - # The daily date is attached to the filename. Parse off the last - # date, load the year of data, downselect to the desired day - fdate = min(unique_fnames[fname]) - temp = pds.read_csv(fname, index_col=0, parse_dates=True) - - if temp.empty: - pysat.logger.warn('Empty file: {:}'.format(fname)) - continue - - # Select the desired times and add to data list - all_data.append(pds.DataFrame(temp[fdate:max(unique_fnames[fname]) - + dt.timedelta(seconds=86399)])) - - # Combine data together - if len(all_data) > 0: - result = pds.concat(all_data, axis=0, sort=True) - else: - result = pds.DataFrame() - + result = methods.gfz.load_def_now(fnames) fill_val = np.nan else: - # Load the forecast or recent data + # Load the prediction, forecast or recent data all_data = [] for fname in fnames: result = pds.read_csv(fname, index_col=0, parse_dates=True) @@ -309,50 +279,15 @@ def load(fnames, tag='', inst_id=''): fill_val = -1 # Initalize the meta data - if tag in ['', 'forecast', 'recent']: + if tag in ['', 'forecast', 'recent', 'prediction']: for kk in result.keys(): - kp_ap.initialize_kp_metadata(meta, kk, fill_val) + methods.kp_ap.initialize_kp_metadata(meta, kk, fill_val) else: for kk in result.keys(): if kk.find('Kp') >= 0: - kp_ap.initialize_kp_metadata(meta, kk, fill_val) - elif kk.lower().find('ap') >= 0: - kp_ap.initialize_ap_metadata(meta, kk, fill_val) - - meta['Bartels_solar_rotation_num'] = { - meta.labels.units: '', - meta.labels.name: 'Bartels solar rotation number', - meta.labels.desc: ''.join(['A sequence of 27-day intervals counted', - ' from February 8, 1832']), - meta.labels.min_val: 1, - meta.labels.max_val: np.inf, - meta.labels.fill_val: -1} - meta['day_within_Bartels_rotation'] = { - meta.labels.units: 'days', - meta.labels.name: 'Bartels solar rotation number', - meta.labels.desc: ''.join(['Number of day within the Bartels solar', - ' rotation']), - meta.labels.min_val: 1, - meta.labels.max_val: 27, - meta.labels.fill_val: -1} - meta['Cp'] = { - meta.labels.units: '', - meta.labels.name: 'Cp index', - meta.labels.desc: ''.join(['the daily planetary character figure, ', - 'a qualitative estimate of the overall ', - 'level of geomagnetic activity for ', - 'this day determined from the sum of ', - 'the eight ap amplitudes']), - meta.labels.min_val: 0.0, - meta.labels.max_val: 2.5, - meta.labels.fill_val: np.nan} - meta['C9'] = { - meta.labels.units: '', - meta.labels.name: 'C9 index', - meta.labels.desc: ''.join(['the contracted scale for Cp']), - meta.labels.min_val: 0, - meta.labels.max_val: 9, - meta.labels.fill_val: -1} + methods.kp_ap.initialize_kp_metadata(meta, kk, fill_val) + elif kk.find('Bartels') >= 0: + methods.kp_ap.itialize_bartel_metadata(meta, kk) return result, meta @@ -410,11 +345,11 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): files = files.asfreq('D', 'pad') files = files + '_' + files.index.strftime('%Y-%m-%d') elif tag in ['def', 'now']: - files = kp_ap.gfz_kp_ap_cp_list_files(name, tag, inst_id, data_path, - format_str=format_str) + files = methods.gfz.kp_ap_cp_list_files(name, tag, inst_id, data_path, + format_str=format_str) else: - files = kp_ap.swpc_list_files(name, tag, inst_id, data_path, - format_str=format_str) + files = methods.swpc.list_files(name, tag, inst_id, data_path, + format_str=format_str) return files @@ -456,57 +391,14 @@ def download(date_array, tag, inst_id, data_path): "supported by GFZ."]), DeprecationWarning, stacklevel=2) elif tag in ['def', 'now']: - kp_ap.gfz_kp_ap_cp_download(platform, name, tag, inst_id, date_array, - data_path) + methods.gfz.kp_ap_cp_download(platform, name, tag, inst_id, date_array, + data_path) elif tag == 'forecast': - pysat.logger.info(' '.join(('This routine can only download the ', - 'current forecast, not archived ', - 'forecasts'))) - - # Download webpage - furl = 'https://services.swpc.noaa.gov/text/3-day-geomag-forecast.txt' - req = requests.get(furl) - - # Parse text to get the date the prediction was generated - date_str = req.text.split(':Issued: ')[-1].split(' UTC')[0] - dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') - - # Data is the forecast value for the next three days - raw_data = req.text.split('NOAA Kp index forecast ')[-1] - - # Get date of the forecasts - date_str = raw_data[0:6] + ' ' + str(dl_date.year) - forecast_date = dt.datetime.strptime(date_str, '%d %b %Y') - - # Strings we will use to parse the downloaded text - lines = ['00-03UT', '03-06UT', '06-09UT', '09-12UT', '12-15UT', - '15-18UT', '18-21UT', '21-00UT'] - - # Storage for daily forecasts. - # Get values for each day, then combine together - day1 = [] - day2 = [] - day3 = [] - for line in lines: - raw = raw_data.split(line)[-1].split('\n')[0] - cols = raw.split() - day1.append(float(cols[-3])) - day2.append(float(cols[-2])) - day3.append(float(cols[-1])) - - times = pds.date_range(forecast_date, periods=24, freq='3H') - day = [] - for dd in [day1, day2, day3]: - day.extend(dd) - - # Put data into nicer DataFrame - data = pds.DataFrame(day, index=times, columns=['Kp']) - - # Write out as a file - data_file = 'kp_forecast_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) - data.to_csv(os.path.join(data_path, data_file), header=True) - + methods.swpc.geomag_forecast_download(name, date_array, data_path) elif tag == 'recent': - kp_ap.swpc_kp_ap_recent_download(name, date_array, data_path) + methods.swpc.kp_ap_recent_download(name, date_array, data_path) + elif tag == 'prediction': + methods.swpc.solar_geomag_predictions_download(name, date_array, + data_path) return From 465bfa4d4f9a022773b486ea51b6032130fe1658 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 28 Nov 2022 15:12:39 -0500 Subject: [PATCH 010/171] ENH: added new Instruments Added new Instrument modules to hold the data that was formerly being stored in other Instruments or thrown away. --- pysatSpaceWeather/instruments/sw_cp.py | 144 ++++++ pysatSpaceWeather/instruments/sw_flare.py | 479 ++++++++++++++++++ pysatSpaceWeather/instruments/sw_polar-cap.py | 183 +++++++ .../instruments/sw_storm-prob.py | 186 +++++++ 4 files changed, 992 insertions(+) create mode 100644 pysatSpaceWeather/instruments/sw_cp.py create mode 100644 pysatSpaceWeather/instruments/sw_flare.py create mode 100644 pysatSpaceWeather/instruments/sw_polar-cap.py create mode 100644 pysatSpaceWeather/instruments/sw_storm-prob.py diff --git a/pysatSpaceWeather/instruments/sw_cp.py b/pysatSpaceWeather/instruments/sw_cp.py new file mode 100644 index 00000000..7a08a3dd --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_cp.py @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- +"""Supports Cp index values. + +Properties +---------- +platform + 'sw' +name + 'cp' +tag + - 'def' Definitive Cp data from GFZ + - 'now' Nowcast Cp data from GFZ +inst_id + '' + +Note +---- +Downloads data from ftp.gfz-potsdam.de (GFZ). These files also contain ap and Kp +data, and so the additional data files will be saved to the appropriate data +directories to avoid multiple downloads. + +The historic definitive and nowcast Cp files are stored in yearly files, with +the current year being updated remotely on a regular basis. If you are using +historic data for the current year, we recommend re-downloading it before +performing your data processing. + +Examples +-------- +:: + + cp_ind = pysat.Instrument('gfz', 'cp', tag='def') + cp_ind.download(start=dt.datetime(2010, 1, 1)) + cp_ind.load(2010, 1) + +""" + +import datetime as dt +import functools +import numpy as np + +import pysat + +from pysatSpaceWeather.instruments import methods + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'cp' +tags = {'def': 'Definitive Kp data from GFZ', + 'now': 'Nowcast Kp data from GFZ'} +inst_ids = {'': list(tags.keys())} + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +# Set test dates +_test_dates = {'': {'def': dt.datetime(2009, 1, 1), + 'now': dt.datetime(2020, 1, 1)}} + +# ---------------------------------------------------------------------------- +# Instrument methods + +preprocess = methods.general.preprocess + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + self.acknowledgements = methods.kp_ap.acknowledgements(self.name, self.tag) + self.references = methods.kp_ap.references(self.name, self.tag) + pysat.logger.info(self.acknowledgements) + return + + +def clean(self): + """Clean the Kp, not required for this index (empty function).""" + + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + +download = functools.partial(methods.gfz.kp_ap_cp_download, platform, name) +list_files = functools.partial(methods.gfz.kp_ap_cp_list_files, name) + + +def load(fnames, tag='', inst_id=''): + """Load Cp index files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames + tag : str + Instrument tag (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + data : pandas.DataFrame + Object containing satellite data + meta : pysat.Meta + Object containing metadata such as column names and units + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + + # Load the definitive or nowcast data. The Cp data stored in yearly + # files, and we need to return data daily. The daily date is + # attached to filename. Parse off the last date, load month of data, + # and downselect to the desired day + data = methods.gfz.load_def_now(fnames) + + # Initalize the meta data + meta = pysat.Meta() + methods.kp_ap.itialize_bartel_metadata(meta, 'Bartels_solar_rotation_num') + methods.kp_ap.itialize_bartel_metadata(meta, 'day_within_Bartels_rotation') + + meta['Cp'] = { + meta.labels.units: '', + meta.labels.name: 'Cp index', + meta.labels.desc: ''.join(['the daily planetary character figure, ', + 'a qualitative estimate of the overall ', + 'level of geomagnetic activity for ', + 'this day determined from the sum of ', + 'the eight ap amplitudes']), + meta.labels.min_val: 0.0, + meta.labels.max_val: 2.5, + meta.labels.fill_val: np.nan} + meta['C9'] = { + meta.labels.units: '', + meta.labels.name: 'C9 index', + meta.labels.desc: ''.join(['the contracted scale for Cp']), + meta.labels.min_val: 0, + meta.labels.max_val: 9, + meta.labels.fill_val: -1} + + return data, meta diff --git a/pysatSpaceWeather/instruments/sw_flare.py b/pysatSpaceWeather/instruments/sw_flare.py new file mode 100644 index 00000000..037ae54f --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_flare.py @@ -0,0 +1,479 @@ +# -*- coding: utf-8 -*- +"""Supports F10.7 index values. Downloads data from LASP and the SWPC. + +Properties +---------- +platform + 'sw' +name + 'flare' +tag + - 'prelim' Preliminary SWPC daily solar indices + - 'daily' Daily SWPC solar indices (contains last 30 days) + - 'prediction' Predictions from SWPC for the next 3 days + +Examples +-------- +Download and load the most recent flare predictions. To always ensure you are +loading the most recent data, load the data with tomorrow's date. +:: + + flare = pysat.Instrument('sw', 'flare', tag='prediction') + flare.download(start=flare.tomorrow()) + flare.load(date=flare.tomorrow()) + + +Note +---- +The forecast data is stored by generation date, where each file contains the +forecast for the next three days. Forecast data downloads are only supported +for the current day. When loading forecast data, the date specified with the +load command is the date the forecast was generated. The data loaded will span +three days. To always ensure you are loading the most recent data, load +the data with tomorrow's date. + + +Warnings +-------- +The 'prediction' F10.7 data loads three days at a time. Loading multiple files, +loading multiple days, the data padding feature, and multi_file_day feature +available from the pyast.Instrument object is not appropriate for 'prediction' +data. + +""" + +import datetime as dt +import ftplib +import numpy as np +import os +import pandas as pds +import pysat +import requests +import sys + +from pysatSpaceWeather.instruments import methods + +logger = pysat.logger + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'flare' +tags = {'prelim': 'Preliminary SWPC daily solar indices', + 'daily': 'Daily SWPC solar indices (contains last 30 days)', + 'prediction': 'Predictions from SWPC for the next 3 days'} + +# Dict keyed by inst_id that lists supported tags for each inst_id +inst_ids = {'': [tag for tag in tags.keys()]} + +# Dict keyed by inst_id that lists supported tags and a good day of test data +# generate todays date to support loading forecast data +now = dt.datetime.utcnow() +today = dt.datetime(now.year, now.month, now.day) +tomorrow = today + dt.datetime(days=1) + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +_test_dates = {'': {'prelim': dt.datetime(2009, 1, 1), + 'daily': tomorrow, + 'prediction': tomorrow}} + +# Other tags assumed to be True +_test_download_ci = {'': {'prelim': False}} + +# ---------------------------------------------------------------------------- +# Instrument methods + +preprocess = methods.general.preprocess + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + # Set the required Instrument attributes + self.acknowledgements = methods.swpc.ackn + self.references = "".join(["Check SWPC for appropriate references: ", + "https://www.swpc.noaa.gov/phenomena"]) + logger.info(self.acknowledgements) + + return + + +def clean(self): + """Clean the F10.7 data, empty function as this is not necessary.""" + + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + + +def load(fnames, tag='', inst_id=''): + """Load the solar flare files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames. + tag : str + Instrument tag. (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + data : pandas.DataFrame + Object containing satellite data. + meta : pysat.Meta + Object containing metadata such as column names and units. + + See Also + -------- + pysat.instruments.methods.general.load_csv_data + + """ + + # Get the desired file dates and file names from the daily indexed list + file_dates = list() + if tag in ['prelim']: + unique_files = list() + for fname in fnames: + file_dates.append(dt.datetime.strptime(fname[-10:], '%Y-%m-%d')) + if fname[0:-11] not in unique_files: + unique_files.append(fname[0:-11]) + fnames = unique_files + + # Load the CSV data files + data = pysat.instruments.methods.general.load_csv_data( + fnames, read_csv_kwargs={"index_col": 0, "parse_dates": True}) + + # If there is a date range, downselect here + if len(file_dates) > 0: + idx, = np.where((data.index >= min(file_dates)) + & (data.index < max(file_dates) + dt.timedelta(days=1))) + data = data.iloc[idx, :] + + # Initialize the metadata + meta = pysat.Meta() + if tag == 'daily' or tag == 'prelim': + meta['new_reg'] = {meta.labels.units: '', + meta.labels.name: 'New Regions', + meta.labels.notes: '', + meta.labels.desc: 'New active solar regions', + meta.labels.fill_val: -999, + meta.labels.min_val: 0, + meta.labels.max_val: np.inf} + meta['smf'] = {meta.labels.units: 'G', + meta.labels.name: 'Solar Mean Field', + meta.labels.notes: '', + meta.labels.desc: 'Standford Solar Mean Field', + meta.labels.fill_val: -999, + meta.labels.min_val: 0, + meta.labels.max_val: np.inf} + meta['goes_bgd_flux'] = {meta.labels.units: 'W/m^2', + meta.labels.name: 'X-ray Background Flux', + meta.labels.notes: '', + meta.labels.desc: + 'GOES15 X-ray Background Flux', + meta.labels.fill_val: '*', + meta.labels.min_val: -np.inf, + meta.labels.max_val: np.inf} + meta['c_flare'] = {meta.labels.units: '', + meta.labels.name: 'C X-Ray Flares', + meta.labels.notes: '', + meta.labels.desc: 'C-class X-Ray Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} + meta['m_flare'] = {meta.labels.units: '', + meta.labels.name: 'M X-Ray Flares', + meta.labels.notes: '', + meta.labels.desc: 'M-class X-Ray Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} + meta['x_flare'] = {meta.labels.units: '', + meta.labels.name: 'X X-Ray Flares', + meta.labels.notes: '', + meta.labels.desc: 'X-class X-Ray Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} + meta['o1_flare'] = {meta.labels.units: '', + meta.labels.name: '1 Optical Flares', + meta.labels.notes: '', + meta.labels.desc: '1-class Optical Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} + meta['o2_flare'] = {meta.labels.units: '', + meta.labels.name: '2 Optical Flares', + meta.labels.notes: '', + meta.labels.desc: '2-class Optical Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} + meta['o3_flare'] = {meta.labels.units: '', + meta.labels.name: '3 Optical Flares', + meta.labels.notes: '', + meta.labels.desc: '3-class Optical Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} + elif tag == 'prediction': + for dkey in data.columns: + if dkey.find('Region') < 0: + meta[dkey] = {meta.labels.units: '', + meta.labels.name: dkey, + meta.labels.notes: '', + meta.labels.desc: ''.join([dkey.replace('_', ' '), + ' Probabilities']), + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 100} + else: + meta[dkey] = {meta.labels.units: '', + meta.labels.name: dkey, + meta.labels.notes: '', + meta.labels.desc: 'SWPC Solar Region Number', + meta.labels.fill_val: -1, + meta.labels.min_val: 1, + meta.labels.max_val: 9999} + + return data, meta + + +def list_files(tag='', inst_id='', data_path='', format_str=None): + """List local solar flare data files. + + Parameters + ---------- + tag : str + Instrument tag, accepts any value from `tags`. (default='') + inst_id : str + Instrument ID, not used. (default='') + data_path : str + Path to data directory. (default='') + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + out_files : pysat._files.Files + A class containing the verified available files + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + + if tag == 'prelim': + # Files are by year (and quarter) + if format_str is None: + format_str = ''.join(['flare_prelim_{year:04d}_{month:02d}', + '_v{version:01d}.txt']) + out_files = pysat.Files.from_os(data_path=data_path, + format_str=format_str) + + if not out_files.empty: + # Set each file's valid length at a 1-day resolution + orig_files = out_files.sort_index().copy() + new_files = list() + + for orig in orig_files.items(): + # Version determines each file's valid length + version = int(orig[1].split("_v")[1][0]) + doff = pds.DateOffset(years=1) if version == 2 \ + else pds.DateOffset(months=3) + istart = orig[0] + iend = istart + doff - pds.DateOffset(days=1) + + # Ensure the end time does not extend past the number of + # possible days included based on the file's download time + fname = os.path.join(data_path, orig[1]) + dend = dt.datetime.utcfromtimestamp(os.path.getctime(fname)) + dend = dend - pds.DateOffset(days=1) + if dend < iend: + iend = dend + + # Pad the original file index + out_files.loc[iend] = orig[1] + out_files = out_files.sort_index() + + # Save the files at a daily cadence over the desired period + new_files.append(out_files.loc[istart: + iend].asfreq('D', 'pad')) + # Add the newly indexed files to the file output + out_files = pds.concat(new_files, sort=True) + out_files = out_files.dropna() + out_files = out_files.sort_index() + out_files = out_files + '_' + out_files.index.strftime('%Y-%m-%d') + + else: + methods.swpc.list_files(name, tag, inst_id, data_path, + format_str=format_str) + + return out_files + + +def download(date_array, tag, inst_id, data_path, update_files=False): + """Download solar flare data from the appropriate repository. + + Parameters + ---------- + date_array : array-like + Sequence of dates for which files will be downloaded. + tag : str + Denotes type of file to load. + inst_id : str + Specifies the satellite ID for a constellation. + data_path : str + Path to data directory. + update_files : bool + Re-download data for files that already exist if True (default=False) + + Raises + ------ + IOError + If a problem is encountered connecting to the gateway or retrieving + data from the repository. + + Warnings + -------- + Only able to download current forecast data, not archived forecasts. + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + if tag == 'prelim': + ftp = ftplib.FTP('ftp.swpc.noaa.gov') # Connect to host, default port + ftp.login() # User anonymous, passwd anonymous + ftp.cwd('/pub/indices/old_indices') + + bad_fname = list() + + # Get the local files, to ensure that the version 1 files are + # downloaded again if more data has been added + local_files = list_files(tag, inst_id, data_path) + + # To avoid downloading multiple files, cycle dates based on file length + dl_date = date_array[0] + while dl_date <= date_array[-1]: + # The file name changes, depending on how recent the requested + # data is + qnum = (dl_date.month - 1) // 3 + 1 # Integer floor division + qmonth = (qnum - 1) * 3 + 1 + quar = 'Q{:d}_'.format(qnum) + fnames = ['{:04d}{:s}DSD.txt'.format(dl_date.year, ss) + for ss in ['_', quar]] + versions = ["01_v2", "{:02d}_v1".format(qmonth)] + vend = [dt.datetime(dl_date.year, 12, 31), + dt.datetime(dl_date.year, qmonth, 1) + + pds.DateOffset(months=3) - pds.DateOffset(days=1)] + downloaded = False + rewritten = False + + # Attempt the download(s) + for iname, fname in enumerate(fnames): + # Test to see if we already tried this filename + if fname in bad_fname: + continue + + local_fname = fname + saved_fname = os.path.join(data_path, local_fname) + ofile = '_'.join(['f107', 'prelim', + '{:04d}'.format(dl_date.year), + '{:s}.txt'.format(versions[iname])]) + outfile = os.path.join(data_path, ofile) + + if os.path.isfile(outfile): + downloaded = True + + # Check the date to see if this should be rewritten + checkfile = os.path.split(outfile)[-1] + has_file = local_files == checkfile + if np.any(has_file): + if has_file[has_file].index[-1] < vend[iname]: + # This file will be updated again, but only attempt + # to do so if enough time has passed from the + # last time it was downloaded + yesterday = today - pds.DateOffset(days=1) + if has_file[has_file].index[-1] < yesterday: + rewritten = True + else: + # The file does not exist, if it can be downloaded, it + # should be 'rewritten' + rewritten = True + + # Attempt to download if the file does not exist or if the + # file has been updated + if rewritten or not downloaded: + try: + sys.stdout.flush() + ftp.retrbinary('RETR ' + fname, + open(saved_fname, 'wb').write) + downloaded = True + logger.info(' '.join(('Downloaded file for ', + dl_date.strftime('%x')))) + + except ftplib.error_perm as exception: + # Could not fetch, so cannot rewrite + rewritten = False + + # Test for an error + if str(exception.args[0]).split(" ", 1)[0] != '550': + raise IOError(exception) + else: + # file isn't actually there, try the next name + os.remove(saved_fname) + + # Save this so we don't try again + # Because there are two possible filenames for + # each time, it's ok if one isn't there. We just + # don't want to keep looking for it. + bad_fname.append(fname) + + # If the first file worked, don't try again + if downloaded: + break + + if not downloaded: + logger.info(' '.join(('File not available for', + dl_date.strftime('%x')))) + elif rewritten: + with open(saved_fname, 'r') as fprelim: + lines = fprelim.read() + + methods.f107.rewrite_daily_file(dl_date.year, outfile, lines) + os.remove(saved_fname) + + # Cycle to the next date + dl_date = vend[iname] + pds.DateOffset(days=1) + + # Close connection after downloading all dates + ftp.close() + + elif tag == 'daily': + logger.info('This routine can only download the latest 30 day file') + + # Set the download webpage + furl = 'https://services.swpc.noaa.gov/text/daily-solar-indices.txt' + req = requests.get(furl) + + # Save the output + data_file = 'f107_daily_{:s}.txt'.format(today.strftime('%Y-%m-%d')) + outfile = os.path.join(data_path, data_file) + methods.f107.rewrite_daily_file(today.year, outfile, req.text) + + elif tag == 'prediction': + methods.swpc.solar_geomag_predictions_download(name, date_array, + data_path) + + return diff --git a/pysatSpaceWeather/instruments/sw_polar-cap.py b/pysatSpaceWeather/instruments/sw_polar-cap.py new file mode 100644 index 00000000..fcad2f69 --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_polar-cap.py @@ -0,0 +1,183 @@ +# -*- coding: utf-8 -*- +"""Supports polar cap indexes. + +Properties +---------- +platform + 'sw' +name + 'polar-cap' +tag + - 'prediction' Predictions from SWPC for the next 3 days +inst_id + '' + +Note +---- +Downloads data from SWPC. These files also contain other data indices, and so +the additional data files will be saved to the appropriate data directories to +avoid multiple downloads. + +The forecast/prediction data is stored by generation date, where each file +contains the forecast for the next three days. Forecast data downloads are only +supported for the current day. When loading forecast data, the date specified +with the load command is the date the forecast was generated. The data loaded +will span three days. To always ensure you are loading the most recent data, +load the data with tomorrow's date. + +Examples +-------- +:: + + pc = pysat.Instrument('sw', 'polar-cap', tag='prediction') + pc.download() + pc.load(date=pc.tomorrow()) + + +Warnings +-------- +The 'prediction' tag loads polar cap absoprtion predictions for a specific +period of time. Loading multiple files, loading multiple days, the data padding +feature, and multi_file_day feature available from the pyast.Instrument object +is not appropriate for these tags data. + +""" + +import datetime as dt +import functools +import numpy as np +import pandas as pds + +import pysat + +from pysatSpaceWeather.instruments import methods + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'polar-cap' +tags = {'prediction': 'SWPC Predictions for the next three days'} +inst_ids = {'': list(tags.keys())} + +# Generate todays date to support loading forecast data +now = dt.datetime.utcnow() +today = dt.datetime(now.year, now.month, now.day) +tomorrow = today + dt.timedelta(days=1) + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +# Set test dates +_test_dates = {'': {'prediction': tomorrow}} + +# ---------------------------------------------------------------------------- +# Instrument methods + +preprocess = methods.general.preprocess + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + self.acknowledgements = methods.swpc.ackn + self.references = "".join(["Check SWPC for appropriate references: ", + "https://www.swpc.noaa.gov/phenomena"]) + pysat.logger.info(self.acknowledgements) + return + + +def clean(self): + """Clean the polar cap indexes, not required (empty function).""" + + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + +list_files = functools.partial(methods.swpc.list_files, name) + + +def load(fnames, tag='', inst_id=''): + """Load storm probability files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames + tag : str + Instrument tag (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + data : pandas.DataFrame + Object containing satellite data + meta : pysat.Meta + Object containing metadata such as column names and units + + Note + ---- + Called by pysat. Not intended for direct use by user. + + Warnings + -------- + tag '' has been deprecated, will be removed in version 0.2.0+ + + """ + + # Load the data + all_data = [] + for fname in fnames: + result = pds.read_csv(fname, index_col=0, parse_dates=True) + all_data.append(result) + + data = pds.concat(all_data) + + # Initialize the metadata + meta = pysat.Meta() + for lkey in ['fill_val', 'min_val', 'max_val']: + meta.labels.label_type[lkey] = (float, int, np.float64, np.int64, str) + + for dkey in data.columns: + meta[dkey] = {meta.labels.units: '', + meta.labels.name: dkey, + meta.labels.desc: dkey.replace('_', ' '), + meta.labels.min_val: 'green', + meta.labels.max_val: 'red', + meta.labels.fill_val: ''} + + return data, meta + + +def download(date_array, tag, inst_id, data_path): + """Download the polar cap indices from the appropriate repository. + + Parameters + ---------- + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + tag : str + Denotes type of file to load. + inst_id : str + Specifies the instrument identification, not used. + data_path : str + Path to data directory. + + Note + ---- + Called by pysat. Not intended for direct use by user. + + Warnings + -------- + Only able to download current recent data, not archived forecasts. + + """ + + if tag == 'prediction': + methods.swpc.solar_geomag_predictions_download(name, date_array, + data_path) + + return diff --git a/pysatSpaceWeather/instruments/sw_storm-prob.py b/pysatSpaceWeather/instruments/sw_storm-prob.py new file mode 100644 index 00000000..234dcc37 --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_storm-prob.py @@ -0,0 +1,186 @@ +# -*- coding: utf-8 -*- +"""Supports storm probabilities. + +Properties +---------- +platform + 'sw' +name + 'storm-prob' +tag + - 'prediction' Predictions from SWPC for the next 3 days + - 'forecast' Grab forecast data from SWPC (next 3 days) +inst_id + '' + +Note +---- +Downloads data from SWPC. These files also contain other data indices, and so +the additional data files will be saved to the appropriate data directories to +avoid multiple downloads. + +The forecast data is stored by generation date, where each file contains the +forecast for the next three days. Forecast data downloads are only supported +for the current day. When loading forecast data, the date specified with the +load command is the date the forecast was generated. The data loaded will span +three days. To always ensure you are loading the most recent data, load +the data with tomorrow's date. + +Examples +-------- +:: + + storm = pysat.Instrument('sw', 'storm-prob', tag='forecast') + storm.download() + storm.load(date=storm.tomorrow()) + + +Warnings +-------- +The 'forecast' tag loads storm probabilities for a specific period of time. +Loading multiple files, loading multiple days, the data padding feature, and +multi_file_day feature available from the pyast.Instrument object is not +appropriate for these tags data. + +""" + +import datetime as dt +import functools +import pandas as pds + +import pysat + +from pysatSpaceWeather.instruments import methods + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'storm-prob' +tags = {'forecast': 'SWPC Forecast data next (3 days)', + 'prediction': 'SWPC Predictions for the next three days'} +inst_ids = {'': list(tags.keys())} + +# Generate todays date to support loading forecast data +now = dt.datetime.utcnow() +today = dt.datetime(now.year, now.month, now.day) +tomorrow = today + dt.timedelta(days=1) + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +# Set test dates +_test_dates = {'': {'forecast': tomorrow, + 'prediction': tomorrow}} + +# ---------------------------------------------------------------------------- +# Instrument methods + +preprocess = methods.general.preprocess + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + self.acknowledgements = methods.swpc.ackn + self.references = "".join(["https://www.swpc.noaa.gov/sites/default/files", + "/images/NOAAscales.pdf"]) + pysat.logger.info(self.acknowledgements) + return + + +def clean(self): + """Clean the Kp, not required for this index (empty function).""" + + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + +list_files = functools.partial(methods.swpc.list_files, name) + + +def load(fnames, tag='', inst_id=''): + """Load storm probability files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames + tag : str + Instrument tag (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + data : pandas.DataFrame + Object containing satellite data + meta : pysat.Meta + Object containing metadata such as column names and units + + Note + ---- + Called by pysat. Not intended for direct use by user. + + Warnings + -------- + tag '' has been deprecated, will be removed in version 0.2.0+ + + """ + + # Load the data + all_data = [] + for fname in fnames: + result = pds.read_csv(fname, index_col=0, parse_dates=True) + all_data.append(result) + + data = pds.concat(all_data) + fill_val = -1 + + # Initialize the metadata + meta = pysat.Meta() + + for dkey in data.columns: + meta[dkey] = {meta.labels.units: '', + meta.labels.name: dkey, + meta.labels.desc: dkey.replace('_', ' '), + meta.labels.min_val: 0, + meta.labels.max_val: 100, + meta.labels.fill_val: fill_val} + + return data, meta + + +def download(date_array, tag, inst_id, data_path): + """Download the storm probabilities from the appropriate repository. + + Parameters + ---------- + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + tag : str + Denotes type of file to load. + inst_id : str + Specifies the instrument identification, not used. + data_path : str + Path to data directory. + + Note + ---- + Called by pysat. Not intended for direct use by user. + + Warnings + -------- + Only able to download current recent data, not archived forecasts. + + """ + + if tag == 'forecast': + methods.swpc.geomag_forecast_download(name, date_array, data_path) + elif tag == 'prediction': + methods.swpc.solar_geomag_predictions_download(name, date_array, + data_path) + + return From b56cc68fe8918aab6c5a6b46270b51e0e3abe2f3 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 28 Nov 2022 16:48:29 -0500 Subject: [PATCH 011/171] STY: moved SWPC F10.7 functions Moved the F10.7 methods for SWPC data to the SWPC method sub-module. --- pysatSpaceWeather/instruments/methods/f107.py | 139 -------- pysatSpaceWeather/instruments/methods/swpc.py | 332 +++++++++++++++++- 2 files changed, 329 insertions(+), 142 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/f107.py b/pysatSpaceWeather/instruments/methods/f107.py index 206f774b..244c9d9f 100644 --- a/pysatSpaceWeather/instruments/methods/f107.py +++ b/pysatSpaceWeather/instruments/methods/f107.py @@ -295,145 +295,6 @@ def combine_f107(standard_inst, forecast_inst, start=None, stop=None): return f107_inst -def parse_45day_block(block_lines): - """Parse the data blocks used in the 45-day Ap and F10.7 Flux Forecast file. - - Parameters - ---------- - block_lines : list - List of lines containing data in this data block - - Returns - ------- - dates : list - List of dates for each date/data pair in this block - values : list - List of values for each date/data pair in this block - - """ - - # Initialize the output - dates = list() - values = list() - - # Cycle through each line in this block - for line in block_lines: - # Split the line on whitespace - split_line = line.split() - - # Format the dates - dates.extend([dt.datetime.strptime(tt, "%d%b%y") - for tt in split_line[::2]]) - - # Format the data values - values.extend([int(vv) for vv in split_line[1::2]]) - - return dates, values - - -def rewrite_daily_file(year, outfile, lines): - """Rewrite the SWPC Daily Solar Data files. - - Parameters - ---------- - year : int - Year of data file (format changes based on date) - outfile : str - Output filename - lines : str - String containing all output data (result of 'read') - - """ - - # Get to the solar index data - if year > 2000: - raw_data = lines.split('#---------------------------------')[-1] - raw_data = raw_data.split('\n')[1:-1] - optical = True - else: - raw_data = lines.split('# ')[-1] - raw_data = raw_data.split('\n') - optical = False if raw_data[0].find('Not Available') or year == 1994 \ - else True - istart = 7 if year < 2000 else 1 - raw_data = raw_data[istart:-1] - - # Parse the data - solar_times, data_dict = parse_daily_solar_data(raw_data, year, optical) - - # Collect into DataFrame - data = pds.DataFrame(data_dict, index=solar_times, - columns=data_dict.keys()) - - # Write out as a file - data.to_csv(outfile, header=True) - - return - - -def parse_daily_solar_data(data_lines, year, optical): - """Parse the data in the SWPC daily solar index file. - - Parameters - ---------- - data_lines : list - List of lines containing data - year : list - Year of file - optical : boolean - Flag denoting whether or not optical data is available - - Returns - ------- - dates : list - List of dates for each date/data pair in this block - values : dict - Dict of lists of values, where each key is the value name - - """ - - # Initialize the output - dates = list() - val_keys = ['f107', 'ssn', 'ss_area', 'new_reg', 'smf', 'goes_bgd_flux', - 'c_flare', 'm_flare', 'x_flare', 'o1_flare', 'o2_flare', - 'o3_flare'] - optical_keys = ['o1_flare', 'o2_flare', 'o3_flare'] - xray_keys = ['c_flare', 'm_flare', 'x_flare'] - values = {kk: list() for kk in val_keys} - - # Cycle through each line in this file - for line in data_lines: - # Split the line on whitespace - split_line = line.split() - - # Format the date - dfmt = "%Y %m %d" if year > 1996 else "%d %b %y" - dates.append(dt.datetime.strptime(" ".join(split_line[0:3]), dfmt)) - - # Format the data values - j = 0 - for i, kk in enumerate(val_keys): - if year == 1994 and kk == 'new_reg': - # New regions only in files after 1994 - val = -999 - elif((year == 1994 and kk in xray_keys) - or (not optical and kk in optical_keys)): - # X-ray flares in files after 1994, optical flares come later - val = -1 - else: - val = split_line[j + 3] - j += 1 - - if kk != 'goes_bgd_flux': - if val == "*": - val = -999 if i < 5 else -1 - else: - val = int(val) - values[kk].append(val) - - return dates, values - - def calc_f107a(f107_inst, f107_name='f107', f107a_name='f107a', min_pnts=41): """Calculate the 81 day mean F10.7. diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index a40b09b7..70d285b8 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -7,15 +7,16 @@ """Provides routines that support SWPC space weather instruments.""" import datetime as dt +import ftplib import numpy as np import os import pandas as pds import requests +import sys import pysat from pysatSpaceWeather.instruments.methods import general -from pysatSpaceWeather.instruments.methods import f107 as mm_f107 # ---------------------------------------------------------------------------- # Define the module variables @@ -29,6 +30,295 @@ # ---------------------------------------------------------------------------- # Define the module functions +def daily_dsd_download(name, today, data_path): + """Download the daily NOAA Daily Solar Data indices. + + Parameters + ---------- + name : str + Instrument name, expects one of 'f107', 'flare', 'ssn', or 'sbfield'. + today : dt.datetime + Datetime for current day + data_path : str + Path to data directory. + + Note + ---- + Note that the download path for the complementary Instrument will use + the standard pysat data paths + + """ + pysat.logger.info('This routine only downloads the latest 30 day file') + + # Set the download webpage + furl = 'https://services.swpc.noaa.gov/text/daily-solar-indices.txt' + req = requests.get(furl) + + # Get the file paths and output names + file_paths = {data_name: data_path if name == data_name else + general.get_instrument_data_path('sw_{:s}'.format(data_name), + tag='daily') + for data_name in ['f107', 'flare', 'ssn', 'sbfield']} + outfiles = { + data_name: os.path.join(file_paths[data_name], '_'.join([ + data_name, 'daily', '{:04d}'.format(today.year), + '{:s}.txt'.format(today.strftime('%Y-%m-%d'))])) + for data_name in file_paths.keys()} + + # Save the output + rewrite_daily_solar_data_file(today.year, outfiles, req.text) + + return + + +def old_indices_dsd_download(name, date_array, data_path, local_files, today): + """Download the old NOAA Daily Solar Data indices. + + Parameters + ---------- + name : str + Instrument name, expects one of 'f107', 'flare', 'ssn', or 'sbfield'. + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + data_path : str + Path to data directory. + local_files : pds.Series + A Series containing the local filenames indexed by time. + today : dt.datetime + Datetime for current day + + Note + ---- + Note that the download path for the complementary Instrument will use + the standard pysat data paths + + """ + # Get the file paths + file_paths = {data_name: data_path if name == data_name else + general.get_instrument_data_path('sw_{:s}'.format(data_name), + tag='prelim') + for data_name in ['f107', 'flare', 'ssn', 'sbfield']} + + # Connect to the host, default port + ftp = ftplib.FTP('ftp.swpc.noaa.gov') + ftp.login() # User anonymous, passwd anonymous + ftp.cwd('/pub/indices/old_indices') + + bad_fname = list() + + # To avoid downloading multiple files, cycle dates based on file length + dl_date = date_array[0] + while dl_date <= date_array[-1]: + # The file name changes, depending on how recent the requested data is + qnum = (dl_date.month - 1) // 3 + 1 # Integer floor division + qmonth = (qnum - 1) * 3 + 1 + quar = 'Q{:d}_'.format(qnum) + fnames = ['{:04d}{:s}DSD.txt'.format(dl_date.year, ss) + for ss in ['_', quar]] + versions = ["01_v2", "{:02d}_v1".format(qmonth)] + vend = [dt.datetime(dl_date.year, 12, 31), + dt.datetime(dl_date.year, qmonth, 1) + + pds.DateOffset(months=3) - pds.DateOffset(days=1)] + downloaded = False + rewritten = False + + # Attempt the download(s) + for iname, fname in enumerate(fnames): + # Test to see if we already tried this filename + if fname in bad_fname: + continue + + local_fname = fname + saved_fname = os.path.join(data_path, local_fname) + outfiles = { + data_name: os.path.join(file_paths[data_name], '_'.join( + [data_name, 'prelim', '{:04d}'.format(dl_date.year), + '{:s}.txt'.format(versions[iname])])) + for data_name in file_paths.keys()} + + if os.path.isfile(outfiles[name]): + downloaded = True + + # Check the date to see if this should be rewritten + checkfile = os.path.split(outfiles[name])[-1] + has_file = local_files == checkfile + if np.any(has_file): + if has_file[has_file].index[-1] < vend[iname]: + # This file will be updated again, but only attempt to + # do so if enough time has passed from the last time it + # was downloaded + yesterday = today - pds.DateOffset(days=1) + if has_file[has_file].index[-1] < yesterday: + rewritten = True + else: + # The file does not exist, if it can be downloaded, it + # should be 'rewritten' + rewritten = True + + # Attempt to download if the file does not exist or if the + # file has been updated + if rewritten or not downloaded: + try: + sys.stdout.flush() + ftp.retrbinary('RETR ' + fname, + open(saved_fname, 'wb').write) + downloaded = True + pysat.logger.info(' '.join(('Downloaded file for ', + dl_date.strftime('%x')))) + + except ftplib.error_perm as exception: + # Could not fetch, so cannot rewrite + rewritten = False + + # Test for an error + if str(exception.args[0]).split(" ", 1)[0] != '550': + raise IOError(exception) + else: + # file isn't actually there, try the next name + os.remove(saved_fname) + + # Save this so we don't try again. Because there are two + # possible filenames for each time, it's ok if one isn't + # there. We just don't want to keep looking for it. + bad_fname.append(fname) + + # If the first file worked, don't try again + if downloaded: + break + + if not downloaded: + pysat.logger.info(' '.join(('File not available for', + dl_date.strftime('%x')))) + elif rewritten: + with open(saved_fname, 'r') as fprelim: + lines = fprelim.read() + + rewrite_daily_solar_data_file(dl_date.year, outfiles, lines) + os.remove(saved_fname) + + # Cycle to the next date + dl_date = vend[iname] + pds.DateOffset(days=1) + + # Close connection after downloading all dates + ftp.close() + return + + +def rewrite_daily_solar_data_file(year, outfiles, lines): + """Rewrite the SWPC Daily Solar Data files. + + Parameters + ---------- + year : int + Year of data file (format changes based on date) + outfiles : dict + Output filenames for all relevant Instruments + lines : str + String containing all output data (result of 'read') + + """ + + # Get to the solar index data + if year > 2000: + raw_data = lines.split('#---------------------------------')[-1] + raw_data = raw_data.split('\n')[1:-1] + optical = True + else: + raw_data = lines.split('# ')[-1] + raw_data = raw_data.split('\n') + optical = False if raw_data[0].find('Not Available') or year == 1994 \ + else True + istart = 7 if year < 2000 else 1 + raw_data = raw_data[istart:-1] + + # Parse the data + solar_times, data_dict = parse_daily_solar_data(raw_data, year, optical) + + # Separate data by Instrument name + data_cols = {'f107': ['f107'], + 'flare': ['goes_bgd_flux', 'c_flare', 'm_flare', 'x_flare', + 'o1_flare', 'o2_flare', 'o3_flare', 'o1_flare', + 'o2_flare', 'o3_flare', 'c_flare', 'm_flare', + 'x_flare'], + 'ssn': ['ssn', 'ss_area', 'new_reg'], + 'sbfield': ['smf']} + + for data_name in data_cols.keys(): + name_dict = {dkey: data_dict[dkey] for dkey in data_dict.keys() + if dkey in data_cols[data_name]} + + # Collect into DataFrame + data = pds.DataFrame(name_dict, index=solar_times) + + # Write out as a file + data.to_csv(outfiles[data_name], header=True) + + return + + +def parse_daily_solar_data(data_lines, year, optical): + """Parse the data in the SWPC daily solar index file. + + Parameters + ---------- + data_lines : list + List of lines containing data + year : list + Year of file + optical : boolean + Flag denoting whether or not optical data is available + + Returns + ------- + dates : list + List of dates for each date/data pair in this block + values : dict + Dict of lists of values, where each key is the value name + + """ + + # Initialize the output + dates = list() + val_keys = ['f107', 'ssn', 'ss_area', 'new_reg', 'smf', 'goes_bgd_flux', + 'c_flare', 'm_flare', 'x_flare', 'o1_flare', 'o2_flare', + 'o3_flare'] + optical_keys = ['o1_flare', 'o2_flare', 'o3_flare'] + xray_keys = ['c_flare', 'm_flare', 'x_flare'] + values = {kk: list() for kk in val_keys} + + # Cycle through each line in this file + for line in data_lines: + # Split the line on whitespace + split_line = line.split() + + # Format the date + dfmt = "%Y %m %d" if year > 1996 else "%d %b %y" + dates.append(dt.datetime.strptime(" ".join(split_line[0:3]), dfmt)) + + # Format the data values + j = 0 + for i, kk in enumerate(val_keys): + if year == 1994 and kk == 'new_reg': + # New regions only in files after 1994 + val = -999 + elif((year == 1994 and kk in xray_keys) + or (not optical and kk in optical_keys)): + # X-ray flares in files after 1994, optical flares come later + val = -1 + else: + val = split_line[j + 3] + j += 1 + + if kk != 'goes_bgd_flux': + if val == "*": + val = -999 if i < 5 else -1 + else: + val = int(val) + values[kk].append(val) + + return dates, values + + def solar_geomag_predictions_download(name, date_array, data_path): """Download the 3-day solar-geomagnetic predictions from SWPC. @@ -441,11 +731,11 @@ def recent_ap_f107_download(name, date_array, data_path): raw_f107 = raw_f107.split('\n')[1:-4] # Parse the Ap data - ap_times, ap = mm_f107.parse_45day_block(raw_ap) + ap_times, ap = parse_45day_block(raw_ap) ap_data = pds.DataFrame(ap, index=ap_times, columns=['daily_Ap']) # Parse the F10.7 data - f107_times, f107 = mm_f107.parse_45day_block(raw_f107) + f107_times, f107 = parse_45day_block(raw_f107) f107_data = pds.DataFrame(f107, index=f107_times, columns=['f107']) # Get the data directories @@ -467,6 +757,42 @@ def recent_ap_f107_download(name, date_array, data_path): return +def parse_45day_block(block_lines): + """Parse the data blocks used in the 45-day Ap and F10.7 Flux Forecast file. + + Parameters + ---------- + block_lines : list + List of lines containing data in this data block + + Returns + ------- + dates : list + List of dates for each date/data pair in this block + values : list + List of values for each date/data pair in this block + + """ + + # Initialize the output + dates = list() + values = list() + + # Cycle through each line in this block + for line in block_lines: + # Split the line on whitespace + split_line = line.split() + + # Format the dates + dates.extend([dt.datetime.strptime(tt, "%d%b%y") + for tt in split_line[::2]]) + + # Format the data values + values.extend([int(vv) for vv in split_line[1::2]]) + + return dates, values + + def list_files(name, tag, inst_id, data_path, format_str=None): """List local files for Kp or ap data obtained from SWPC. From 24f3451e577fb5bcb8f65a96416110c0e99f6168 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 28 Nov 2022 16:49:05 -0500 Subject: [PATCH 012/171] STY: removed non-F10.7 data Removed the non-F10.7 data from the daily and prelim files from the F10.7 Instrument. --- pysatSpaceWeather/instruments/sw_f107.py | 201 +---------------------- 1 file changed, 4 insertions(+), 197 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index a57c47b5..9d68fff6 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -"""Supports F10.7 index values. Downloads data from LASP and the SWPC. +"""Supports F10.7 index values. Properties ---------- @@ -56,13 +56,11 @@ """ import datetime as dt -import ftplib import json import numpy as np import os import pandas as pds import requests -import sys import warnings import pysat @@ -225,88 +223,6 @@ def load(fnames, tag='', inst_id=''): meta['f107'] = { meta.labels.desc: meta['f107_adjusted', meta.labels.desc]} - elif tag == 'daily' or tag == 'prelim': - meta['ssn'] = {meta.labels.units: '', - meta.labels.name: 'Sunspot Number', - meta.labels.notes: '', - meta.labels.desc: 'SESC Sunspot Number', - meta.labels.fill_val: -999, - meta.labels.min_val: 0, - meta.labels.max_val: np.inf} - meta['ss_area'] = {meta.labels.units: '10$^-6$ Solar Hemisphere', - meta.labels.name: 'Sunspot Area', - meta.labels.notes: '', - meta.labels.desc: - ''.join(['Sunspot Area in Millionths of the ', - 'Visible Hemisphere']), - meta.labels.fill_val: -999, - meta.labels.min_val: 0, - meta.labels.max_val: 1.0e6} - meta['new_reg'] = {meta.labels.units: '', - meta.labels.name: 'New Regions', - meta.labels.notes: '', - meta.labels.desc: 'New active solar regions', - meta.labels.fill_val: -999, - meta.labels.min_val: 0, - meta.labels.max_val: np.inf} - meta['smf'] = {meta.labels.units: 'G', - meta.labels.name: 'Solar Mean Field', - meta.labels.notes: '', - meta.labels.desc: 'Standford Solar Mean Field', - meta.labels.fill_val: -999, - meta.labels.min_val: 0, - meta.labels.max_val: np.inf} - meta['goes_bgd_flux'] = {meta.labels.units: 'W/m^2', - meta.labels.name: 'X-ray Background Flux', - meta.labels.notes: '', - meta.labels.desc: - 'GOES15 X-ray Background Flux', - meta.labels.fill_val: '*', - meta.labels.min_val: -np.inf, - meta.labels.max_val: np.inf} - meta['c_flare'] = {meta.labels.units: '', - meta.labels.name: 'C X-Ray Flares', - meta.labels.notes: '', - meta.labels.desc: 'C-class X-Ray Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} - meta['m_flare'] = {meta.labels.units: '', - meta.labels.name: 'M X-Ray Flares', - meta.labels.notes: '', - meta.labels.desc: 'M-class X-Ray Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} - meta['x_flare'] = {meta.labels.units: '', - meta.labels.name: 'X X-Ray Flares', - meta.labels.notes: '', - meta.labels.desc: 'X-class X-Ray Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} - meta['o1_flare'] = {meta.labels.units: '', - meta.labels.name: '1 Optical Flares', - meta.labels.notes: '', - meta.labels.desc: '1-class Optical Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} - meta['o2_flare'] = {meta.labels.units: '', - meta.labels.name: '2 Optical Flares', - meta.labels.notes: '', - meta.labels.desc: '2-class Optical Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} - meta['o3_flare'] = {meta.labels.units: '', - meta.labels.name: '3 Optical Flares', - meta.labels.notes: '', - meta.labels.desc: '3-class Optical Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} - return data, meta @@ -490,124 +406,15 @@ def download(date_array, tag, inst_id, data_path, update_files=False): # Create a local CSV file data.to_csv(data_file, header=True) elif tag == 'prelim': - ftp = ftplib.FTP('ftp.swpc.noaa.gov') # Connect to host, default port - ftp.login() # User anonymous, passwd anonymous - ftp.cwd('/pub/indices/old_indices') - - bad_fname = list() - # Get the local files, to ensure that the version 1 files are # downloaded again if more data has been added local_files = list_files(tag, inst_id, data_path) - # To avoid downloading multiple files, cycle dates based on file length - dl_date = date_array[0] - while dl_date <= date_array[-1]: - # The file name changes, depending on how recent the requested - # data is - qnum = (dl_date.month - 1) // 3 + 1 # Integer floor division - qmonth = (qnum - 1) * 3 + 1 - quar = 'Q{:d}_'.format(qnum) - fnames = ['{:04d}{:s}DSD.txt'.format(dl_date.year, ss) - for ss in ['_', quar]] - versions = ["01_v2", "{:02d}_v1".format(qmonth)] - vend = [dt.datetime(dl_date.year, 12, 31), - dt.datetime(dl_date.year, qmonth, 1) - + pds.DateOffset(months=3) - pds.DateOffset(days=1)] - downloaded = False - rewritten = False - - # Attempt the download(s) - for iname, fname in enumerate(fnames): - # Test to see if we already tried this filename - if fname in bad_fname: - continue - - local_fname = fname - saved_fname = os.path.join(data_path, local_fname) - ofile = '_'.join(['f107', 'prelim', - '{:04d}'.format(dl_date.year), - '{:s}.txt'.format(versions[iname])]) - outfile = os.path.join(data_path, ofile) - - if os.path.isfile(outfile): - downloaded = True - - # Check the date to see if this should be rewritten - checkfile = os.path.split(outfile)[-1] - has_file = local_files == checkfile - if np.any(has_file): - if has_file[has_file].index[-1] < vend[iname]: - # This file will be updated again, but only attempt - # to do so if enough time has passed from the - # last time it was downloaded - yesterday = today - pds.DateOffset(days=1) - if has_file[has_file].index[-1] < yesterday: - rewritten = True - else: - # The file does not exist, if it can be downloaded, it - # should be 'rewritten' - rewritten = True - - # Attempt to download if the file does not exist or if the - # file has been updated - if rewritten or not downloaded: - try: - sys.stdout.flush() - ftp.retrbinary('RETR ' + fname, - open(saved_fname, 'wb').write) - downloaded = True - pysat.logger.info(' '.join(('Downloaded file for ', - dl_date.strftime('%x')))) - - except ftplib.error_perm as exception: - # Could not fetch, so cannot rewrite - rewritten = False - - # Test for an error - if str(exception.args[0]).split(" ", 1)[0] != '550': - raise IOError(exception) - else: - # file isn't actually there, try the next name - os.remove(saved_fname) - - # Save this so we don't try again - # Because there are two possible filenames for - # each time, it's ok if one isn't there. We just - # don't want to keep looking for it. - bad_fname.append(fname) - - # If the first file worked, don't try again - if downloaded: - break - - if not downloaded: - pysat.logger.info(' '.join(('File not available for', - dl_date.strftime('%x')))) - elif rewritten: - with open(saved_fname, 'r') as fprelim: - lines = fprelim.read() - - methods.f107.rewrite_daily_file(dl_date.year, outfile, lines) - os.remove(saved_fname) - - # Cycle to the next date - dl_date = vend[iname] + pds.DateOffset(days=1) - - # Close connection after downloading all dates - ftp.close() + methods.swpc.old_indices_dsd_download(name, date_array, data_path, + local_files, today) elif tag == 'daily': - pysat.logger.info('This routine only downloads the latest 30 day file') - - # Set the download webpage - furl = 'https://services.swpc.noaa.gov/text/daily-solar-indices.txt' - req = requests.get(furl) - - # Save the output - data_file = 'f107_daily_{:s}.txt'.format(today.strftime('%Y-%m-%d')) - outfile = os.path.join(data_path, data_file) - methods.f107.rewrite_daily_file(today.year, outfile, req.text) + methods.f107.daily_dsd_download(name, today, data_path) elif tag == 'forecast': methods.swpc.solar_geomag_predictions_download(name, date_array, From fde2bd24252dae6686c5f1e615ebe1bbffe91db2 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 28 Nov 2022 16:49:30 -0500 Subject: [PATCH 013/171] ENH: created new solar Instruments Created new Instruments for the SSN and solar magnetic field data. --- pysatSpaceWeather/instruments/sw_sbfield.py | 265 +++++++++++++++++++ pysatSpaceWeather/instruments/sw_ssn.py | 277 ++++++++++++++++++++ 2 files changed, 542 insertions(+) create mode 100644 pysatSpaceWeather/instruments/sw_sbfield.py create mode 100644 pysatSpaceWeather/instruments/sw_ssn.py diff --git a/pysatSpaceWeather/instruments/sw_sbfield.py b/pysatSpaceWeather/instruments/sw_sbfield.py new file mode 100644 index 00000000..05ecfc34 --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_sbfield.py @@ -0,0 +1,265 @@ +# -*- coding: utf-8 -*- +"""Supports solar magnetic field values. + +Properties +---------- +platform + 'sw' +name + 'sbfield' +tag + - 'prelim' Preliminary SWPC daily solar indices + - 'daily' Daily SWPC solar indices (contains last 30 days) + +Examples +-------- +Download and load some preliminary solar magnetic field data. +:: + + smf = pysat.Instrument('sw', 'sbfield', tag='prelim') + smf.download(start=dt.datetime(2001, 1, 1)) + smf.load(date=dt.datetime(2001, 1, 1)) + +""" + +import datetime as dt +import numpy as np +import os +import pandas as pds + +import pysat + +from pysatSpaceWeather.instruments import methods + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'sbfield' +tags = {'prelim': 'Preliminary SWPC daily solar indices', + 'daily': 'Daily SWPC solar indices (contains last 30 days)'} + +# Dict keyed by inst_id that lists supported tags for each inst_id +inst_ids = {'': [tag for tag in tags.keys()]} + +# Dict keyed by inst_id that lists supported tags and a good day of test data +# generate todays date to support loading forecast data +now = dt.datetime.utcnow() +today = dt.datetime(now.year, now.month, now.day) +tomorrow = today + pds.DateOffset(days=1) + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +_test_dates = {'': {'prelim': dt.datetime(2009, 1, 1), + 'daily': tomorrow}} + +# Other tags assumed to be True +_test_download_ci = {'': {'prelim': False}} + +# ---------------------------------------------------------------------------- +# Instrument methods + +preprocess = methods.general.preprocess + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + # Set the required Instrument attributes + self.acknowledgements = methods.swpc.ackn + self.references = "".join(["Scherrer, P.H., Wilcox, J.M., Svalgaard, L. ", + "et al. The mean magnetic field of the Sun: ", + "Observations at Stanford. Sol Phys 54, 353–361", + " (1977). https://doi.org/10.1007/BF00159925"]) + pysat.logger.info(self.acknowledgements) + + return + + +def clean(self): + """Clean the data, empty function as this is not necessary.""" + + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + + +def load(fnames, tag='', inst_id=''): + """Load solar magnetic field files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames. + tag : str + Instrument tag. (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + data : pandas.DataFrame + Object containing satellite data. + meta : pysat.Meta + Object containing metadata such as column names and units. + + See Also + -------- + pysat.instruments.methods.general.load_csv_data + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + + # Get the desired file dates and file names from the daily indexed list + file_dates = list() + if tag == 'prelim': + unique_files = list() + for fname in fnames: + file_dates.append(dt.datetime.strptime(fname[-10:], '%Y-%m-%d')) + if fname[0:-11] not in unique_files: + unique_files.append(fname[0:-11]) + fnames = unique_files + + # Load the CSV data files + data = pysat.instruments.methods.general.load_csv_data( + fnames, read_csv_kwargs={"index_col": 0, "parse_dates": True}) + + # If there is a date range, downselect here + if len(file_dates) > 0: + idx, = np.where((data.index >= min(file_dates)) + & (data.index < max(file_dates) + dt.timedelta(days=1))) + data = data.iloc[idx, :] + + # Initialize the metadata + meta = pysat.Meta() + meta['smf'] = {meta.labels.units: 'G', + meta.labels.name: 'Solar Mean Field', + meta.labels.notes: '', + meta.labels.desc: 'Standford Solar Mean Field', + meta.labels.fill_val: -999, + meta.labels.min_val: 0, + meta.labels.max_val: np.inf} + + return data, meta + + +def list_files(tag='', inst_id='', data_path='', format_str=None): + """List local solar magnetic field data files. + + Parameters + ---------- + tag : str + Instrument tag, accepts any value from `tags`. (default='') + inst_id : str + Instrument ID, not used. (default='') + data_path : str + Path to data directory. (default='') + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + out_files : pysat._files.Files + A class containing the verified available files + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + + if tag == 'prelim': + # Files are by year (and quarter) + if format_str is None: + format_str = ''.join(['sbfield_prelim_{year:04d}_{month:02d}', + '_v{version:01d}.txt']) + out_files = pysat.Files.from_os(data_path=data_path, + format_str=format_str) + + if not out_files.empty: + # Set each file's valid length at a 1-day resolution + orig_files = out_files.sort_index().copy() + new_files = list() + + for orig in orig_files.items(): + # Version determines each file's valid length + version = int(orig[1].split("_v")[1][0]) + doff = pds.DateOffset(years=1) if version == 2 \ + else pds.DateOffset(months=3) + istart = orig[0] + iend = istart + doff - pds.DateOffset(days=1) + + # Ensure the end time does not extend past the number of + # possible days included based on the file's download time + fname = os.path.join(data_path, orig[1]) + dend = dt.datetime.utcfromtimestamp(os.path.getctime(fname)) + dend = dend - pds.DateOffset(days=1) + if dend < iend: + iend = dend + + # Pad the original file index + out_files.loc[iend] = orig[1] + out_files = out_files.sort_index() + + # Save the files at a daily cadence over the desired period + new_files.append(out_files.loc[istart: + iend].asfreq('D', 'pad')) + # Add the newly indexed files to the file output + out_files = pds.concat(new_files, sort=True) + out_files = out_files.dropna() + out_files = out_files.sort_index() + out_files = out_files + '_' + out_files.index.strftime('%Y-%m-%d') + + elif tag == 'daily': + methods.swpc.list_files(name, tag, inst_id, data_path, + format_str=format_str) + + return out_files + + +def download(date_array, tag, inst_id, data_path, update_files=False): + """Download solar magnetic field data from the appropriate repository. + + Parameters + ---------- + date_array : array-like + Sequence of dates for which files will be downloaded. + tag : str + Denotes type of file to load. + inst_id : str + Specifies the satellite ID for a constellation. + data_path : str + Path to data directory. + update_files : bool + Re-download data for files that already exist if True (default=False) + + Raises + ------ + IOError + If a problem is encountered connecting to the gateway or retrieving + data from the repository. + + Warnings + -------- + Only able to download current forecast data, not archived forecasts. + + """ + if tag == 'prelim': + # Get the local files, to ensure that the version 1 files are + # downloaded again if more data has been added + local_files = list_files(tag, inst_id, data_path) + + methods.swpc.old_indices_dsd_download(name, date_array, data_path, + local_files, today) + + elif tag == 'daily': + methods.f107.daily_dsd_download(name, today, data_path) + + return diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py new file mode 100644 index 00000000..0e7baadd --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -0,0 +1,277 @@ +# -*- coding: utf-8 -*- +"""Supports Sunspot Number (SSN) and related indices. + +Properties +---------- +platform + 'sw' +name + 'ssn' +tag + - 'prelim' Preliminary SWPC daily solar indices + - 'daily' Daily SWPC solar indices (contains last 30 days) + +Examples +-------- +Download and load some preliminary SSN data. +:: + + ssn = pysat.Instrument('sw', 'ssn', tag='prelim') + ssn.download(start=dt.datetime(2001, 1, 1)) + ssn.load(date=dt.datetime(2001, 1, 1)) + +""" + +import datetime as dt +import numpy as np +import os +import pandas as pds + +import pysat + +from pysatSpaceWeather.instruments import methods + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'ssn' +tags = {'prelim': 'Preliminary SWPC daily solar indices', + 'daily': 'Daily SWPC solar indices (contains last 30 days)'} + +# Dict keyed by inst_id that lists supported tags for each inst_id +inst_ids = {'': [tag for tag in tags.keys()]} + +# Dict keyed by inst_id that lists supported tags and a good day of test data +# generate todays date to support loading forecast data +now = dt.datetime.utcnow() +today = dt.datetime(now.year, now.month, now.day) +tomorrow = today + pds.DateOffset(days=1) + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +_test_dates = {'': {'prelim': dt.datetime(2009, 1, 1), + 'daily': tomorrow}} + +# Other tags assumed to be True +_test_download_ci = {'': {'prelim': False}} + +# ---------------------------------------------------------------------------- +# Instrument methods + +preprocess = methods.general.preprocess + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + # Set the required Instrument attributes + self.acknowledgements = methods.swpc.ackn + self.references = "".join(["E.g., Arlt, R., Vaquero, J.M. Historical ", + "sunspot records. Living Rev Sol Phys 17, 1 ", + '(2020). doi:10.1007/s41116-020-0023-y']) + pysat.logger.info(self.acknowledgements) + + return + + +def clean(self): + """Clean the data, empty function as this is not necessary.""" + + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + + +def load(fnames, tag='', inst_id=''): + """Load SSN files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames. + tag : str + Instrument tag. (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + data : pandas.DataFrame + Object containing satellite data. + meta : pysat.Meta + Object containing metadata such as column names and units. + + See Also + -------- + pysat.instruments.methods.general.load_csv_data + + """ + + # Get the desired file dates and file names from the daily indexed list + file_dates = list() + if tag == 'prelim': + unique_files = list() + for fname in fnames: + file_dates.append(dt.datetime.strptime(fname[-10:], '%Y-%m-%d')) + if fname[0:-11] not in unique_files: + unique_files.append(fname[0:-11]) + fnames = unique_files + + # Load the CSV data files + data = pysat.instruments.methods.general.load_csv_data( + fnames, read_csv_kwargs={"index_col": 0, "parse_dates": True}) + + # If there is a date range, downselect here + if len(file_dates) > 0: + idx, = np.where((data.index >= min(file_dates)) + & (data.index < max(file_dates) + dt.timedelta(days=1))) + data = data.iloc[idx, :] + + # Initialize the metadata + meta = pysat.Meta() + meta['ssn'] = {meta.labels.units: '', + meta.labels.name: 'Sunspot Number', + meta.labels.notes: '', + meta.labels.desc: 'SESC Sunspot Number', + meta.labels.fill_val: -999, + meta.labels.min_val: 0, + meta.labels.max_val: np.inf} + meta['ss_area'] = {meta.labels.units: '10$^-6$ Solar Hemisphere', + meta.labels.name: 'Sunspot Area', + meta.labels.notes: '', + meta.labels.desc: + ''.join(['Sunspot Area in Millionths of the ', + 'Visible Hemisphere']), + meta.labels.fill_val: -999, + meta.labels.min_val: 0, + meta.labels.max_val: 1.0e6} + if 'new_reg' in data.columns: + meta['new_reg'] = {meta.labels.units: '', + meta.labels.name: 'New Regions', + meta.labels.notes: '', + meta.labels.desc: 'New active solar regions', + meta.labels.fill_val: -999, + meta.labels.min_val: 0, + meta.labels.max_val: np.inf} + + return data, meta + + +def list_files(tag='', inst_id='', data_path='', format_str=None): + """List local solar magnetic field data files. + + Parameters + ---------- + tag : str + Instrument tag, accepts any value from `tags`. (default='') + inst_id : str + Instrument ID, not used. (default='') + data_path : str + Path to data directory. (default='') + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + out_files : pysat._files.Files + A class containing the verified available files + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + + if tag == 'prelim': + # Files are by year (and quarter) + if format_str is None: + format_str = ''.join(['ssn_prelim_{year:04d}_{month:02d}', + '_v{version:01d}.txt']) + out_files = pysat.Files.from_os(data_path=data_path, + format_str=format_str) + + if not out_files.empty: + # Set each file's valid length at a 1-day resolution + orig_files = out_files.sort_index().copy() + new_files = list() + + for orig in orig_files.items(): + # Version determines each file's valid length + version = int(orig[1].split("_v")[1][0]) + doff = pds.DateOffset(years=1) if version == 2 \ + else pds.DateOffset(months=3) + istart = orig[0] + iend = istart + doff - pds.DateOffset(days=1) + + # Ensure the end time does not extend past the number of + # possible days included based on the file's download time + fname = os.path.join(data_path, orig[1]) + dend = dt.datetime.utcfromtimestamp(os.path.getctime(fname)) + dend = dend - pds.DateOffset(days=1) + if dend < iend: + iend = dend + + # Pad the original file index + out_files.loc[iend] = orig[1] + out_files = out_files.sort_index() + + # Save the files at a daily cadence over the desired period + new_files.append(out_files.loc[istart: + iend].asfreq('D', 'pad')) + # Add the newly indexed files to the file output + out_files = pds.concat(new_files, sort=True) + out_files = out_files.dropna() + out_files = out_files.sort_index() + out_files = out_files + '_' + out_files.index.strftime('%Y-%m-%d') + + elif tag == 'daily': + methods.swpc.list_files(name, tag, inst_id, data_path, + format_str=format_str) + + return out_files + + +def download(date_array, tag, inst_id, data_path, update_files=False): + """Download solar magnetic field data from the appropriate repository. + + Parameters + ---------- + date_array : array-like + Sequence of dates for which files will be downloaded. + tag : str + Denotes type of file to load. + inst_id : str + Specifies the satellite ID for a constellation. + data_path : str + Path to data directory. + update_files : bool + Re-download data for files that already exist if True (default=False) + + Raises + ------ + IOError + If a problem is encountered connecting to the gateway or retrieving + data from the repository. + + Warnings + -------- + Only able to download current forecast data, not archived forecasts. + + """ + if tag == 'prelim': + # Get the local files, to ensure that the version 1 files are + # downloaded again if more data has been added + local_files = list_files(tag, inst_id, data_path) + + methods.swpc.old_indices_dsd_download(name, date_array, data_path, + local_files, today) + + elif tag == 'daily': + methods.f107.daily_dsd_download(name, today, data_path) + + return From 4829683e884a34adf70f4d41eb32dc85fed6e33c Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 28 Nov 2022 16:49:58 -0500 Subject: [PATCH 014/171] ENH: added more flare tags Added solar flare tags for the prelim and daily DSD files. --- pysatSpaceWeather/instruments/sw_flare.py | 228 +++++----------------- 1 file changed, 54 insertions(+), 174 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_flare.py b/pysatSpaceWeather/instruments/sw_flare.py index 037ae54f..78d5c931 100644 --- a/pysatSpaceWeather/instruments/sw_flare.py +++ b/pysatSpaceWeather/instruments/sw_flare.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -"""Supports F10.7 index values. Downloads data from LASP and the SWPC. +"""Supports solar flare values. Properties ---------- @@ -35,7 +35,7 @@ Warnings -------- -The 'prediction' F10.7 data loads three days at a time. Loading multiple files, +The 'prediction' flare data loads three days at a time. Loading multiple files, loading multiple days, the data padding feature, and multi_file_day feature available from the pyast.Instrument object is not appropriate for 'prediction' data. @@ -43,13 +43,10 @@ """ import datetime as dt -import ftplib import numpy as np import os import pandas as pds import pysat -import requests -import sys from pysatSpaceWeather.instruments import methods @@ -159,70 +156,62 @@ def load(fnames, tag='', inst_id=''): # Initialize the metadata meta = pysat.Meta() if tag == 'daily' or tag == 'prelim': - meta['new_reg'] = {meta.labels.units: '', - meta.labels.name: 'New Regions', - meta.labels.notes: '', - meta.labels.desc: 'New active solar regions', - meta.labels.fill_val: -999, - meta.labels.min_val: 0, - meta.labels.max_val: np.inf} - meta['smf'] = {meta.labels.units: 'G', - meta.labels.name: 'Solar Mean Field', - meta.labels.notes: '', - meta.labels.desc: 'Standford Solar Mean Field', - meta.labels.fill_val: -999, - meta.labels.min_val: 0, - meta.labels.max_val: np.inf} meta['goes_bgd_flux'] = {meta.labels.units: 'W/m^2', meta.labels.name: 'X-ray Background Flux', meta.labels.notes: '', meta.labels.desc: - 'GOES15 X-ray Background Flux', + 'GOES X-ray Background Flux', meta.labels.fill_val: '*', meta.labels.min_val: -np.inf, meta.labels.max_val: np.inf} - meta['c_flare'] = {meta.labels.units: '', - meta.labels.name: 'C X-Ray Flares', - meta.labels.notes: '', - meta.labels.desc: 'C-class X-Ray Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} - meta['m_flare'] = {meta.labels.units: '', - meta.labels.name: 'M X-Ray Flares', - meta.labels.notes: '', - meta.labels.desc: 'M-class X-Ray Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} - meta['x_flare'] = {meta.labels.units: '', - meta.labels.name: 'X X-Ray Flares', - meta.labels.notes: '', - meta.labels.desc: 'X-class X-Ray Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} - meta['o1_flare'] = {meta.labels.units: '', - meta.labels.name: '1 Optical Flares', - meta.labels.notes: '', - meta.labels.desc: '1-class Optical Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} - meta['o2_flare'] = {meta.labels.units: '', - meta.labels.name: '2 Optical Flares', - meta.labels.notes: '', - meta.labels.desc: '2-class Optical Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} - meta['o3_flare'] = {meta.labels.units: '', - meta.labels.name: '3 Optical Flares', - meta.labels.notes: '', - meta.labels.desc: '3-class Optical Flares', - meta.labels.fill_val: -1, - meta.labels.min_val: 0, - meta.labels.max_val: 9} + if 'c_flare' in data.columns: + meta['c_flare'] = {meta.labels.units: '', + meta.labels.name: 'C X-Ray Flares', + meta.labels.notes: '', + meta.labels.desc: 'C-class X-Ray Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} + if 'm_flare' in data.columns: + meta['m_flare'] = {meta.labels.units: '', + meta.labels.name: 'M X-Ray Flares', + meta.labels.notes: '', + meta.labels.desc: 'M-class X-Ray Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} + if 'x_flare' in data.columns: + meta['x_flare'] = {meta.labels.units: '', + meta.labels.name: 'X X-Ray Flares', + meta.labels.notes: '', + meta.labels.desc: 'X-class X-Ray Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} + if 'o1_flare' in data.columns: + meta['o1_flare'] = {meta.labels.units: '', + meta.labels.name: '1 Optical Flares', + meta.labels.notes: '', + meta.labels.desc: '1-class Optical Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} + if 'o2_flare' in data.columns: + meta['o2_flare'] = {meta.labels.units: '', + meta.labels.name: '2 Optical Flares', + meta.labels.notes: '', + meta.labels.desc: '2-class Optical Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} + if 'o3_flare' in data.columns: + meta['o3_flare'] = {meta.labels.units: '', + meta.labels.name: '3 Optical Flares', + meta.labels.notes: '', + meta.labels.desc: '3-class Optical Flares', + meta.labels.fill_val: -1, + meta.labels.min_val: 0, + meta.labels.max_val: 9} elif tag == 'prediction': for dkey in data.columns: if dkey.find('Region') < 0: @@ -353,124 +342,15 @@ def download(date_array, tag, inst_id, data_path, update_files=False): """ if tag == 'prelim': - ftp = ftplib.FTP('ftp.swpc.noaa.gov') # Connect to host, default port - ftp.login() # User anonymous, passwd anonymous - ftp.cwd('/pub/indices/old_indices') - - bad_fname = list() - # Get the local files, to ensure that the version 1 files are # downloaded again if more data has been added local_files = list_files(tag, inst_id, data_path) - # To avoid downloading multiple files, cycle dates based on file length - dl_date = date_array[0] - while dl_date <= date_array[-1]: - # The file name changes, depending on how recent the requested - # data is - qnum = (dl_date.month - 1) // 3 + 1 # Integer floor division - qmonth = (qnum - 1) * 3 + 1 - quar = 'Q{:d}_'.format(qnum) - fnames = ['{:04d}{:s}DSD.txt'.format(dl_date.year, ss) - for ss in ['_', quar]] - versions = ["01_v2", "{:02d}_v1".format(qmonth)] - vend = [dt.datetime(dl_date.year, 12, 31), - dt.datetime(dl_date.year, qmonth, 1) - + pds.DateOffset(months=3) - pds.DateOffset(days=1)] - downloaded = False - rewritten = False - - # Attempt the download(s) - for iname, fname in enumerate(fnames): - # Test to see if we already tried this filename - if fname in bad_fname: - continue - - local_fname = fname - saved_fname = os.path.join(data_path, local_fname) - ofile = '_'.join(['f107', 'prelim', - '{:04d}'.format(dl_date.year), - '{:s}.txt'.format(versions[iname])]) - outfile = os.path.join(data_path, ofile) - - if os.path.isfile(outfile): - downloaded = True - - # Check the date to see if this should be rewritten - checkfile = os.path.split(outfile)[-1] - has_file = local_files == checkfile - if np.any(has_file): - if has_file[has_file].index[-1] < vend[iname]: - # This file will be updated again, but only attempt - # to do so if enough time has passed from the - # last time it was downloaded - yesterday = today - pds.DateOffset(days=1) - if has_file[has_file].index[-1] < yesterday: - rewritten = True - else: - # The file does not exist, if it can be downloaded, it - # should be 'rewritten' - rewritten = True - - # Attempt to download if the file does not exist or if the - # file has been updated - if rewritten or not downloaded: - try: - sys.stdout.flush() - ftp.retrbinary('RETR ' + fname, - open(saved_fname, 'wb').write) - downloaded = True - logger.info(' '.join(('Downloaded file for ', - dl_date.strftime('%x')))) - - except ftplib.error_perm as exception: - # Could not fetch, so cannot rewrite - rewritten = False - - # Test for an error - if str(exception.args[0]).split(" ", 1)[0] != '550': - raise IOError(exception) - else: - # file isn't actually there, try the next name - os.remove(saved_fname) - - # Save this so we don't try again - # Because there are two possible filenames for - # each time, it's ok if one isn't there. We just - # don't want to keep looking for it. - bad_fname.append(fname) - - # If the first file worked, don't try again - if downloaded: - break - - if not downloaded: - logger.info(' '.join(('File not available for', - dl_date.strftime('%x')))) - elif rewritten: - with open(saved_fname, 'r') as fprelim: - lines = fprelim.read() - - methods.f107.rewrite_daily_file(dl_date.year, outfile, lines) - os.remove(saved_fname) - - # Cycle to the next date - dl_date = vend[iname] + pds.DateOffset(days=1) - - # Close connection after downloading all dates - ftp.close() + methods.swpc.old_indices_dsd_download(name, date_array, data_path, + local_files) elif tag == 'daily': - logger.info('This routine can only download the latest 30 day file') - - # Set the download webpage - furl = 'https://services.swpc.noaa.gov/text/daily-solar-indices.txt' - req = requests.get(furl) - - # Save the output - data_file = 'f107_daily_{:s}.txt'.format(today.strftime('%Y-%m-%d')) - outfile = os.path.join(data_path, data_file) - methods.f107.rewrite_daily_file(today.year, outfile, req.text) + methods.f107.daily_dsd_download(name, today, data_path) elif tag == 'prediction': methods.swpc.solar_geomag_predictions_download(name, date_array, From 879b48d150e1655334f45c64f1f041b9efba0383 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 29 Nov 2022 10:47:43 -0500 Subject: [PATCH 015/171] BUG: fixed bugs in updates Fixed bugs identified through unit testing including: - typos in function and module names, - incorrect output assignment, - added directory creation, - added missing tags in supporting functions, and - corrected filename construction. --- pysatSpaceWeather/instruments/methods/gfz.py | 18 +- .../instruments/methods/kp_ap.py | 13 +- pysatSpaceWeather/instruments/methods/swpc.py | 156 +++++++++--------- pysatSpaceWeather/instruments/sw_f107.py | 15 +- pysatSpaceWeather/instruments/sw_flare.py | 6 +- pysatSpaceWeather/instruments/sw_kp.py | 2 +- pysatSpaceWeather/instruments/sw_sbfield.py | 4 +- pysatSpaceWeather/instruments/sw_ssn.py | 4 +- 8 files changed, 116 insertions(+), 102 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/gfz.py b/pysatSpaceWeather/instruments/methods/gfz.py index f913db30..0cbde3d1 100644 --- a/pysatSpaceWeather/instruments/methods/gfz.py +++ b/pysatSpaceWeather/instruments/methods/gfz.py @@ -72,7 +72,7 @@ def kp_ap_cp_download(platform, name, tag, inst_id, date_array, data_path): kp_translate = {'0': 0.0, '3': 1.0 / 3.0, '7': 2.0 / 3.0} dnames = list() - inst_cols = {'sw_kp': [0, 1, 2, 3], 'gfz_cp': [0, 1, 6, 7], + inst_cols = {'sw_kp': [0, 1, 2, 3], 'sw_cp': [0, 1, 6, 7], 'sw_ap': [0, 1, 4, 5]} # Construct the Instrument module name from the platform and name @@ -86,6 +86,10 @@ def kp_ap_cp_download(platform, name, tag, inst_id, date_array, data_path): inst_id=inst_id) for inst_mod in inst_cols.keys()} + # Check that the directories exist + for data_path in data_paths.values(): + pysat.utils.files.check_and_make_path(data_path) + # Cycle through all the times for dl_date in date_array: fname = 'Kp_{:s}{:04d}.wdc'.format(tag, dl_date.year) @@ -138,20 +142,21 @@ def kp_ap_cp_download(platform, name, tag, inst_id, date_array, data_path): kp_ones = line[12 + ikp] if kp_ones == ' ': kp_ones = 0.0 - ddict['Kp'].append(float(kp_ones) + ddict['Kp'].append(np.float64(kp_ones) + kp_translate[line[13 + ikp]]) iap = i * 3 - ddict['ap'].append(int(line[31 + iap:34 + iap])) + ddict['ap'].append(np.int64(line[31 + iap:34 + iap])) # Put data into nicer DataFrames for inst_mod in inst_cols.keys(): - sel_cols = data_cols[inst_cols[inst_mod]] + sel_cols = np.array(data_cols)[inst_cols[inst_mod]] sel_dict = {col: ddict[col] for col in sel_cols} data = pds.DataFrame(sel_dict, index=times, columns=sel_cols) # Write out as a CSV file - sfname = fname.replace('Kp', inst_mod.split('_')[-1]) + sfname = fname.replace('Kp', + inst_mod.split('_')[-1].capitalize()) saved_fname = os.path.join(data_paths[inst_mod], sfname).replace('.wdc', '.txt') data.to_csv(saved_fname, header=True) @@ -192,7 +197,8 @@ def kp_ap_cp_list_files(name, tag, inst_id, data_path, format_str=None): """ if format_str is None: - format_str = ''.join(['_'.join([name, tag]), '{year:04d}.txt']) + format_str = ''.join(['_'.join([name.capitalize(), tag]), + '{year:04d}.txt']) # Files are stored by year, going to add a date to the yearly filename for # each month and day of month. The load routine will load the year and use diff --git a/pysatSpaceWeather/instruments/methods/kp_ap.py b/pysatSpaceWeather/instruments/methods/kp_ap.py index 56270571..39cb518d 100644 --- a/pysatSpaceWeather/instruments/methods/kp_ap.py +++ b/pysatSpaceWeather/instruments/methods/kp_ap.py @@ -35,9 +35,10 @@ def acknowledgements(name, tag): ackn = {'kp': {'': 'Provided by GFZ German Research Centre for Geosciences', 'forecast': swpc.ackn, 'recent': swpc.ackn, 'def': gfz.ackn, - 'now': gfz.ackn}, + 'now': gfz.ackn, 'prediction': swpc.ackn}, 'ap': {'forecast': swpc.ackn, 'recent': swpc.ackn, - '45day': swpc.ackn, 'def': gfz.ackn, 'now': gfz.ackn}, + 'prediction': swpc.ackn, '45day': swpc.ackn, + 'def': gfz.ackn, 'now': gfz.ackn}, 'cp': {'def': gfz.ackn, 'now': gfz.ackn}} return ackn[name][tag] @@ -78,9 +79,11 @@ def references(name, tag): "415-432, 1991."])]) refs = {'kp': {'': gen_refs, 'forecast': gen_refs, 'recent': gen_refs, - 'def': gfz.geoind_refs, 'now': gfz.geoind_refs}, + 'prediction': gen_refs, 'def': gfz.geoind_refs, + 'now': gfz.geoind_refs}, 'ap': {'recent': gen_refs, 'forecast': gen_refs, '45day': gen_refs, - 'def': gfz.geoind_refs, 'now': gfz.geoind_refs}, + 'prediction': gen_refs, 'def': gfz.geoind_refs, + 'now': gfz.geoind_refs}, 'cp': {'def': gfz.geoind_refs, 'now': gfz.geoind_refs}} return refs[name][tag] @@ -566,7 +569,7 @@ def combine_kp(standard_inst=None, recent_inst=None, forecast_inst=None, kp_inst.inst_module = pysat_sw.instruments.sw_kp kp_inst.tag = tag kp_inst.date = start - kp_inst.doy = int(start.strftime("%j")) + kp_inst.doy = np.int64(start.strftime("%j")) kp_inst.meta = pysat.Meta(labels=kp_inst.meta_labels) initialize_kp_metadata(kp_inst.meta, 'Kp', fill_val=fill_val) diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index 70d285b8..ff52ca7d 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -61,10 +61,13 @@ def daily_dsd_download(name, today, data_path): for data_name in ['f107', 'flare', 'ssn', 'sbfield']} outfiles = { data_name: os.path.join(file_paths[data_name], '_'.join([ - data_name, 'daily', '{:04d}'.format(today.year), - '{:s}.txt'.format(today.strftime('%Y-%m-%d'))])) + data_name, 'daily', '{:s}.txt'.format(today.strftime('%Y-%m-%d'))])) for data_name in file_paths.keys()} + # Check that the directories exist + for data_path in file_paths.values(): + pysat.utils.files.check_and_make_path(data_path) + # Save the output rewrite_daily_solar_data_file(today.year, outfiles, req.text) @@ -99,6 +102,10 @@ def old_indices_dsd_download(name, date_array, data_path, local_files, today): tag='prelim') for data_name in ['f107', 'flare', 'ssn', 'sbfield']} + # Check that the directories exist + for data_path in file_paths.values(): + pysat.utils.files.check_and_make_path(data_path) + # Connect to the host, default port ftp = ftplib.FTP('ftp.swpc.noaa.gov') ftp.login() # User anonymous, passwd anonymous @@ -348,6 +355,10 @@ def solar_geomag_predictions_download(name, date_array, data_path): for data_name in ['kp', 'ap', 'storm-prob', 'f107', 'flare', 'polar-cap']} + # Check that the directories exist + for data_path in file_paths.values(): + pysat.utils.files.check_and_make_path(data_path) + # Download webpage furl = ''.join(['https://services.swpc.noaa.gov/text/', '3-day-solar-geomag-predictions.txt']) @@ -463,7 +474,8 @@ def solar_geomag_predictions_download(name, date_array, data_path): data = pds.DataFrame(data_vals[data_name], index=data_times[data_name]) # Save the data as a CSV file - data_file = '_'.join([data_name, 'prediction', + data_tag = 'forecast' if data_name == 'f107' else 'prediction' + data_file = '_'.join([data_name, data_tag, '{:s}.txt'.format(dl_date.strftime('%Y-%m-%d'))]) data.to_csv(os.path.join(file_paths[data_name], data_file), header=True) @@ -491,20 +503,14 @@ def geomag_forecast_download(name, date_array, data_path): pysat.logger.info(forecast_warning) # Get the file paths - if name == 'kp': - kp_path = data_path - ap_path = general.get_instrument_data_path('sw_ap', tag='forecast') - storm_path = general.get_instrument_data_path('sw_storm-prob', - tag='forecast') - elif name == 'ap': - ap_path = data_path - kp_path = general.get_instrument_data_path('sw_kp', tag='forecast') - storm_path = general.get_instrument_data_path('sw_storm-prob', - tag='forecast') - else: - storm_path = data_path - ap_path = general.get_instrument_data_path('sw_ap', tag='forecast') - kp_path = general.get_instrument_data_path('sw_kp', tag='forecast') + file_paths = {data_name: data_path if name == data_name else + general.get_instrument_data_path( + 'sw_{:s}'.format(data_name), tag='forecast') + for data_name in ['kp', 'ap', 'storm-prob']} + + # Check that the directories exist + for data_path in file_paths.values(): + pysat.utils.files.check_and_make_path(data_path) # Download webpage furl = 'https://services.swpc.noaa.gov/text/3-day-geomag-forecast.txt' @@ -545,11 +551,7 @@ def geomag_forecast_download(name, date_array, data_path): kp_day.extend(dd) # Put Kp data into nicer DataFrame - kp_data = pds.DataFrame(kp_day, index=kp_times, columns=['Kp']) - - # Save the Kp data - kp_file = 'kp_forecast_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) - kp_data.to_csv(os.path.join(kp_path, kp_file), header=True) + data_frames = {'kp': pds.DataFrame(kp_day, index=kp_times, columns=['Kp'])} # Parse the Ap data ap_times = pds.date_range(dl_date - dt.timedelta(days=1), periods=5, @@ -563,11 +565,8 @@ def geomag_forecast_download(name, date_array, data_path): ap_vals.append(int(ap_val)) # Put the Ap data into a nicer DataFrame - ap_data = pds.DataFrame(ap_vals, index=ap_times, columns=['daily_Ap']) - - # Save the Ap data - ap_file = 'ap_forecast_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) - ap_data.to_csv(os.path.join(ap_path, ap_file), header=True) + data_frames['ap'] = pds.DataFrame(ap_vals, index=ap_times, + columns=['daily_Ap']) # Parse the storm probabilities storm_dict = {} @@ -582,12 +581,14 @@ def geomag_forecast_download(name, date_array, data_path): # Put the storm probabilities into a nicer DataFrame storm_times = pds.date_range(forecast_date, periods=3, freq='1D') - storm_data = pds.DataFrame(storm_dict, index=storm_times) + data_frames['storm-prob'] = pds.DataFrame(storm_dict, index=storm_times) - # Save the storm probabilities - storm_file = 'storm-prob_forecast_{:s}.txt'.format(dl_date.strftime( - '%Y-%m-%d')) - storm_data.to_csv(os.path.join(storm_path, storm_file), header=True) + # Save the data files + for data_name in data_frames.keys(): + filename = '{:s}_forecast_{:s}.txt'.format(data_name, dl_date.strftime( + '%Y-%m-%d')) + data_frames[data_name].to_csv(os.path.join( + file_paths[data_name], filename), header=True) return @@ -612,6 +613,16 @@ def kp_ap_recent_download(name, date_array, data_path): """ pysat.logger.info(forecast_warning) + # Get the file paths + file_paths = {data_name: data_path if name == data_name else + general.get_instrument_data_path( + 'sw_{:s}'.format(data_name), tag='recent') + for data_name in ['kp', 'ap']} + + # Check that the directories exist + for data_path in file_paths.values(): + pysat.utils.files.check_and_make_path(data_path) + # Download webpage rurl = ''.join(('https://services.swpc.noaa.gov/text/', 'daily-geomagnetic-indices.txt')) @@ -652,41 +663,29 @@ def kp_ap_recent_download(name, date_array, data_path): int(sub_line[(ihr * 2):((ihr + 1) * 2)])) else: # These are float values - sub_kps[i].append(float(split_sub[ihr])) + sub_kps[i].append(np.float64(split_sub[ihr])) # Process the Ap data, which has daily values - sub_aps[i].append(int(ap_sub_lines[i])) + sub_aps[i].append(np.int64(ap_sub_lines[i])) # Create times on 3 hour cadence kp_times = pds.date_range(times[0], periods=(8 * 30), freq='3H') - # Put Kp data into DataFrame - data = pds.DataFrame({'mid_lat_Kp': sub_kps[0], 'high_lat_Kp': sub_kps[1], - 'Kp': sub_kps[2]}, index=kp_times) + # Put both data sets into DataFrames + data = {'kp': pds.DataFrame({'mid_lat_Kp': sub_kps[0], + 'high_lat_Kp': sub_kps[1], + 'Kp': sub_kps[2]}, index=kp_times), + 'ap': pds.DataFrame({'mid_lat_Ap': sub_aps[0], + 'high_lat_Ap': sub_aps[1], + 'daily_Ap': sub_aps[2]}, index=times)} - # Write Kp out as a file - data_file = 'kp_recent_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) - - if name == 'kp': - kp_path = data_path - else: - kp_path = general.get_instrument_data_path('sw_kp', tag='recent') + # Write out the data sets as files + for dkey in data.keys(): + data_file = '{:s}_recent_{:s}.txt'.format(dkey, + dl_date.strftime('%Y-%m-%d')) - data.to_csv(os.path.join(kp_path, data_file), header=True) - - # Put Ap data into a DataFrame - data = pds.DataFrame({'mid_lat_Ap': sub_aps[0], 'high_lat_Ap': sub_aps[1], - 'daily_Ap': sub_kps[2]}, index=times) - - # Write Kp out as a file - data_file = 'ap_recent_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) - - if name == 'ap': - ap_path = data_path - else: - ap_path = general.get_instrument_data_path('sw_ap', tag='recent') - - data.to_csv(os.path.join(ap_path, data_file), header=True) + data[dkey].to_csv(os.path.join(file_paths[dkey], data_file), + header=True) return @@ -711,6 +710,16 @@ def recent_ap_f107_download(name, date_array, data_path): """ pysat.logger.info(forecast_warning) + # Get the file paths + file_paths = {data_name: data_path if name == data_name else + general.get_instrument_data_path( + 'sw_{:s}'.format(data_name), tag='45day') + for data_name in ['f107', 'ap']} + + # Check that the directories exist + for data_path in file_paths.values(): + pysat.utils.files.check_and_make_path(data_path) + # Set the download webpage furl = 'https://services.swpc.noaa.gov/text/45-day-ap-forecast.txt' req = requests.get(furl) @@ -730,29 +739,20 @@ def recent_ap_f107_download(name, date_array, data_path): raw_f107 = raw_data.split('45-DAY F10.7 CM FLUX FORECAST')[-1] raw_f107 = raw_f107.split('\n')[1:-4] - # Parse the Ap data + # Parse the data ap_times, ap = parse_45day_block(raw_ap) - ap_data = pds.DataFrame(ap, index=ap_times, columns=['daily_Ap']) - - # Parse the F10.7 data f107_times, f107 = parse_45day_block(raw_f107) - f107_data = pds.DataFrame(f107, index=f107_times, columns=['f107']) - - # Get the data directories - if name == 'ap': - ap_path = data_path - f107_path = general.get_instrument_data_path('sw_f107', tag='45day') - else: - ap_path = general.get_instrument_data_path('sw_ap', tag='45day') - f107_path = data_path - # Write out the Ap data file - ap_file = 'ap_45day_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) - ap_data.to_csv(os.path.join(ap_path, ap_file), header=True) + # Save the data in DataFrames + data = {'ap': pds.DataFrame(ap, index=ap_times, columns=['daily_Ap']), + 'f107': pds.DataFrame(f107, index=f107_times, columns=['f107'])} - # Write out the F107 data file - f107_file = 'f107_45day_{:s}.txt'.format(dl_date.strftime('%Y-%m-%d')) - f107_data.to_csv(os.path.join(f107_path, f107_file), header=True) + # Write out the data files + for data_name in data.keys(): + file_name = '{:s}_45day_{:s}.txt'.format(data_name, + dl_date.strftime('%Y-%m-%d')) + data[data_name].to_csv(os.path.join(file_paths[data_name], file_name), + header=True) return diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index 9d68fff6..4833f1c5 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -1,4 +1,9 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# ---------------------------------------------------------------------------- """Supports F10.7 index values. Properties @@ -85,7 +90,7 @@ # generate todays date to support loading forecast data now = dt.datetime.utcnow() today = dt.datetime(now.year, now.month, now.day) -tomorrow = today + pds.DateOffset(days=1) +tomorrow = today + dt.timedelta(days=1) # The LASP archive start day is also important lasp_stime = dt.datetime(1947, 2, 14) @@ -310,8 +315,8 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): out_files = out_files + '_' + out_files.index.strftime('%Y-%m-%d') elif tag in ['daily', 'forecast', '45day']: - methods.swpc.list_files(name, tag, inst_id, data_path, - format_str=format_str) + out_files = methods.swpc.list_files(name, tag, inst_id, data_path, + format_str=format_str) return out_files @@ -414,7 +419,7 @@ def download(date_array, tag, inst_id, data_path, update_files=False): local_files, today) elif tag == 'daily': - methods.f107.daily_dsd_download(name, today, data_path) + methods.swpc.daily_dsd_download(name, today, data_path) elif tag == 'forecast': methods.swpc.solar_geomag_predictions_download(name, date_array, diff --git a/pysatSpaceWeather/instruments/sw_flare.py b/pysatSpaceWeather/instruments/sw_flare.py index 78d5c931..057678ce 100644 --- a/pysatSpaceWeather/instruments/sw_flare.py +++ b/pysatSpaceWeather/instruments/sw_flare.py @@ -68,7 +68,7 @@ # generate todays date to support loading forecast data now = dt.datetime.utcnow() today = dt.datetime(now.year, now.month, now.day) -tomorrow = today + dt.datetime(days=1) +tomorrow = today + dt.timedelta(days=1) # ---------------------------------------------------------------------------- # Instrument test attributes @@ -304,8 +304,8 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): out_files = out_files + '_' + out_files.index.strftime('%Y-%m-%d') else: - methods.swpc.list_files(name, tag, inst_id, data_path, - format_str=format_str) + out_files = methods.swpc.list_files(name, tag, inst_id, data_path, + format_str=format_str) return out_files diff --git a/pysatSpaceWeather/instruments/sw_kp.py b/pysatSpaceWeather/instruments/sw_kp.py index ff2a85cd..239788e3 100644 --- a/pysatSpaceWeather/instruments/sw_kp.py +++ b/pysatSpaceWeather/instruments/sw_kp.py @@ -287,7 +287,7 @@ def load(fnames, tag='', inst_id=''): if kk.find('Kp') >= 0: methods.kp_ap.initialize_kp_metadata(meta, kk, fill_val) elif kk.find('Bartels') >= 0: - methods.kp_ap.itialize_bartel_metadata(meta, kk) + methods.kp_ap.initialize_bartel_metadata(meta, kk) return result, meta diff --git a/pysatSpaceWeather/instruments/sw_sbfield.py b/pysatSpaceWeather/instruments/sw_sbfield.py index 05ecfc34..e22bff63 100644 --- a/pysatSpaceWeather/instruments/sw_sbfield.py +++ b/pysatSpaceWeather/instruments/sw_sbfield.py @@ -218,8 +218,8 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): out_files = out_files + '_' + out_files.index.strftime('%Y-%m-%d') elif tag == 'daily': - methods.swpc.list_files(name, tag, inst_id, data_path, - format_str=format_str) + out_files = methods.swpc.list_files(name, tag, inst_id, data_path, + format_str=format_str) return out_files diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py index 0e7baadd..62b5f095 100644 --- a/pysatSpaceWeather/instruments/sw_ssn.py +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -230,8 +230,8 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): out_files = out_files + '_' + out_files.index.strftime('%Y-%m-%d') elif tag == 'daily': - methods.swpc.list_files(name, tag, inst_id, data_path, - format_str=format_str) + out_files = methods.swpc.list_files(name, tag, inst_id, data_path, + format_str=format_str) return out_files From c227936e875ccedf7eac068b7b8811195b56938b Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 29 Nov 2022 10:48:01 -0500 Subject: [PATCH 016/171] MAINT: updated test file Updated the format of the Kp definitive test file. --- .../tests/test_data/sw/kp/def/Kp_def2019.txt | 946 +++++++++--------- 1 file changed, 473 insertions(+), 473 deletions(-) diff --git a/pysatSpaceWeather/tests/test_data/sw/kp/def/Kp_def2019.txt b/pysatSpaceWeather/tests/test_data/sw/kp/def/Kp_def2019.txt index 6d93bfc5..55f2b964 100644 --- a/pysatSpaceWeather/tests/test_data/sw/kp/def/Kp_def2019.txt +++ b/pysatSpaceWeather/tests/test_data/sw/kp/def/Kp_def2019.txt @@ -1,473 +1,473 @@ -,Bartels_solar_rotation_num,day_within_Bartels_rotation,Kp,daily_Kp_sum,ap,daily_Ap,Cp,C9 -2019-01-01 00:00:00,2529,8,1.0,9.666666666666666,4,5,0.2,1 -2019-01-01 03:00:00,2529,8,1.3333333333333333,9.666666666666666,5,5,0.2,1 -2019-01-01 06:00:00,2529,8,2.6666666666666665,9.666666666666666,12,5,0.2,1 -2019-01-01 09:00:00,2529,8,1.6666666666666665,9.666666666666666,6,5,0.2,1 -2019-01-01 12:00:00,2529,8,2.0,9.666666666666666,7,5,0.2,1 -2019-01-01 15:00:00,2529,8,0.3333333333333333,9.666666666666666,2,5,0.2,1 -2019-01-01 18:00:00,2529,8,0.0,9.666666666666666,0,5,0.2,1 -2019-01-01 21:00:00,2529,8,0.6666666666666666,9.666666666666666,3,5,0.2,1 -2019-01-02 00:00:00,2529,9,0.0,0.6666666666666666,0,0,0.0,0 -2019-01-02 03:00:00,2529,9,0.0,0.6666666666666666,0,0,0.0,0 -2019-01-02 06:00:00,2529,9,0.0,0.6666666666666666,0,0,0.0,0 -2019-01-02 09:00:00,2529,9,0.0,0.6666666666666666,0,0,0.0,0 -2019-01-02 12:00:00,2529,9,0.3333333333333333,0.6666666666666666,2,0,0.0,0 -2019-01-02 15:00:00,2529,9,0.3333333333333333,0.6666666666666666,2,0,0.0,0 -2019-01-02 18:00:00,2529,9,0.0,0.6666666666666666,0,0,0.0,0 -2019-01-02 21:00:00,2529,9,0.0,0.6666666666666666,0,0,0.0,0 -2019-01-03 00:00:00,2529,10,1.0,2.0,4,1,0.0,0 -2019-01-03 03:00:00,2529,10,0.0,2.0,0,1,0.0,0 -2019-01-03 06:00:00,2529,10,0.0,2.0,0,1,0.0,0 -2019-01-03 09:00:00,2529,10,0.3333333333333333,2.0,2,1,0.0,0 -2019-01-03 12:00:00,2529,10,0.3333333333333333,2.0,2,1,0.0,0 -2019-01-03 15:00:00,2529,10,0.0,2.0,0,1,0.0,0 -2019-01-03 18:00:00,2529,10,0.0,2.0,0,1,0.0,0 -2019-01-03 21:00:00,2529,10,0.3333333333333333,2.0,2,1,0.0,0 -2019-01-04 00:00:00,2529,11,1.3333333333333333,15.333333333333334,5,9,0.5,2 -2019-01-04 03:00:00,2529,11,0.3333333333333333,15.333333333333334,2,9,0.5,2 -2019-01-04 06:00:00,2529,11,1.0,15.333333333333334,4,9,0.5,2 -2019-01-04 09:00:00,2529,11,1.6666666666666665,15.333333333333334,6,9,0.5,2 -2019-01-04 12:00:00,2529,11,2.0,15.333333333333334,7,9,0.5,2 -2019-01-04 15:00:00,2529,11,3.0,15.333333333333334,15,9,0.5,2 -2019-01-04 18:00:00,2529,11,2.6666666666666665,15.333333333333334,12,9,0.5,2 -2019-01-04 21:00:00,2529,11,3.3333333333333335,15.333333333333334,18,9,0.5,2 -2019-01-05 00:00:00,2529,12,5.0,22.666666666666668,48,16,0.9,4 -2019-01-05 03:00:00,2529,12,4.0,22.666666666666668,27,16,0.9,4 -2019-01-05 06:00:00,2529,12,2.3333333333333335,22.666666666666668,9,16,0.9,4 -2019-01-05 09:00:00,2529,12,2.3333333333333335,22.666666666666668,9,16,0.9,4 -2019-01-05 12:00:00,2529,12,1.6666666666666665,22.666666666666668,6,16,0.9,4 -2019-01-05 15:00:00,2529,12,2.3333333333333335,22.666666666666668,9,16,0.9,4 -2019-01-05 18:00:00,2529,12,2.0,22.666666666666668,7,16,0.9,4 -2019-01-05 21:00:00,2529,12,3.0,22.666666666666668,15,16,0.9,4 -2019-01-06 00:00:00,2529,13,1.6666666666666665,18.0,6,9,0.5,2 -2019-01-06 03:00:00,2529,13,2.6666666666666665,18.0,12,9,0.5,2 -2019-01-06 06:00:00,2529,13,2.3333333333333335,18.0,9,9,0.5,2 -2019-01-06 09:00:00,2529,13,1.6666666666666665,18.0,6,9,0.5,2 -2019-01-06 12:00:00,2529,13,2.0,18.0,7,9,0.5,2 -2019-01-06 15:00:00,2529,13,2.6666666666666665,18.0,12,9,0.5,2 -2019-01-06 18:00:00,2529,13,3.0,18.0,15,9,0.5,2 -2019-01-06 21:00:00,2529,13,2.0,18.0,7,9,0.5,2 -2019-01-07 00:00:00,2529,14,1.6666666666666665,12.0,6,6,0.3,1 -2019-01-07 03:00:00,2529,14,2.3333333333333335,12.0,9,6,0.3,1 -2019-01-07 06:00:00,2529,14,1.6666666666666665,12.0,6,6,0.3,1 -2019-01-07 09:00:00,2529,14,2.0,12.0,7,6,0.3,1 -2019-01-07 12:00:00,2529,14,1.6666666666666665,12.0,6,6,0.3,1 -2019-01-07 15:00:00,2529,14,0.3333333333333333,12.0,2,6,0.3,1 -2019-01-07 18:00:00,2529,14,0.3333333333333333,12.0,2,6,0.3,1 -2019-01-07 21:00:00,2529,14,2.0,12.0,7,6,0.3,1 -2019-01-08 00:00:00,2529,15,2.3333333333333335,11.333333333333334,9,6,0.2,1 -2019-01-08 03:00:00,2529,15,1.6666666666666665,11.333333333333334,6,6,0.2,1 -2019-01-08 06:00:00,2529,15,1.3333333333333333,11.333333333333334,5,6,0.2,1 -2019-01-08 09:00:00,2529,15,2.3333333333333335,11.333333333333334,9,6,0.2,1 -2019-01-08 12:00:00,2529,15,1.3333333333333333,11.333333333333334,5,6,0.2,1 -2019-01-08 15:00:00,2529,15,0.6666666666666666,11.333333333333334,3,6,0.2,1 -2019-01-08 18:00:00,2529,15,1.3333333333333333,11.333333333333334,5,6,0.2,1 -2019-01-08 21:00:00,2529,15,0.3333333333333333,11.333333333333334,2,6,0.2,1 -2019-01-09 00:00:00,2529,16,1.6666666666666665,7.666666666666667,6,4,0.1,0 -2019-01-09 03:00:00,2529,16,0.6666666666666666,7.666666666666667,3,4,0.1,0 -2019-01-09 06:00:00,2529,16,1.0,7.666666666666667,4,4,0.1,0 -2019-01-09 09:00:00,2529,16,1.3333333333333333,7.666666666666667,5,4,0.1,0 -2019-01-09 12:00:00,2529,16,0.6666666666666666,7.666666666666667,3,4,0.1,0 -2019-01-09 15:00:00,2529,16,0.3333333333333333,7.666666666666667,2,4,0.1,0 -2019-01-09 18:00:00,2529,16,1.0,7.666666666666667,4,4,0.1,0 -2019-01-09 21:00:00,2529,16,1.0,7.666666666666667,4,4,0.1,0 -2019-01-10 00:00:00,2529,17,1.0,6.0,4,3,0.1,0 -2019-01-10 03:00:00,2529,17,0.6666666666666666,6.0,3,3,0.1,0 -2019-01-10 06:00:00,2529,17,1.0,6.0,4,3,0.1,0 -2019-01-10 09:00:00,2529,17,1.0,6.0,4,3,0.1,0 -2019-01-10 12:00:00,2529,17,1.3333333333333333,6.0,5,3,0.1,0 -2019-01-10 15:00:00,2529,17,0.3333333333333333,6.0,2,3,0.1,0 -2019-01-10 18:00:00,2529,17,0.0,6.0,0,3,0.1,0 -2019-01-10 21:00:00,2529,17,0.6666666666666666,6.0,3,3,0.1,0 -2019-01-11 00:00:00,2529,18,1.3333333333333333,11.0,5,6,0.3,1 -2019-01-11 03:00:00,2529,18,1.6666666666666665,11.0,6,6,0.3,1 -2019-01-11 06:00:00,2529,18,3.3333333333333335,11.0,18,6,0.3,1 -2019-01-11 09:00:00,2529,18,1.3333333333333333,11.0,5,6,0.3,1 -2019-01-11 12:00:00,2529,18,1.3333333333333333,11.0,5,6,0.3,1 -2019-01-11 15:00:00,2529,18,0.3333333333333333,11.0,2,6,0.3,1 -2019-01-11 18:00:00,2529,18,1.3333333333333333,11.0,5,6,0.3,1 -2019-01-11 21:00:00,2529,18,0.3333333333333333,11.0,2,6,0.3,1 -2019-01-12 00:00:00,2529,19,0.6666666666666666,3.3333333333333335,3,2,0.0,0 -2019-01-12 03:00:00,2529,19,0.3333333333333333,3.3333333333333335,2,2,0.0,0 -2019-01-12 06:00:00,2529,19,0.0,3.3333333333333335,0,2,0.0,0 -2019-01-12 09:00:00,2529,19,0.0,3.3333333333333335,0,2,0.0,0 -2019-01-12 12:00:00,2529,19,1.0,3.3333333333333335,4,2,0.0,0 -2019-01-12 15:00:00,2529,19,0.6666666666666666,3.3333333333333335,3,2,0.0,0 -2019-01-12 18:00:00,2529,19,0.3333333333333333,3.3333333333333335,2,2,0.0,0 -2019-01-12 21:00:00,2529,19,0.3333333333333333,3.3333333333333335,2,2,0.0,0 -2019-01-13 00:00:00,2529,20,0.3333333333333333,4.333333333333333,2,2,0.0,0 -2019-01-13 03:00:00,2529,20,1.0,4.333333333333333,4,2,0.0,0 -2019-01-13 06:00:00,2529,20,0.6666666666666666,4.333333333333333,3,2,0.0,0 -2019-01-13 09:00:00,2529,20,0.6666666666666666,4.333333333333333,3,2,0.0,0 -2019-01-13 12:00:00,2529,20,0.0,4.333333333333333,0,2,0.0,0 -2019-01-13 15:00:00,2529,20,0.0,4.333333333333333,0,2,0.0,0 -2019-01-13 18:00:00,2529,20,0.6666666666666666,4.333333333333333,3,2,0.0,0 -2019-01-13 21:00:00,2529,20,1.0,4.333333333333333,4,2,0.0,0 -2019-01-14 00:00:00,2529,21,2.0,13.666666666666666,7,6,0.3,1 -2019-01-14 03:00:00,2529,21,1.6666666666666665,13.666666666666666,6,6,0.3,1 -2019-01-14 06:00:00,2529,21,2.0,13.666666666666666,7,6,0.3,1 -2019-01-14 09:00:00,2529,21,2.0,13.666666666666666,7,6,0.3,1 -2019-01-14 12:00:00,2529,21,0.6666666666666666,13.666666666666666,3,6,0.3,1 -2019-01-14 15:00:00,2529,21,1.6666666666666665,13.666666666666666,6,6,0.3,1 -2019-01-14 18:00:00,2529,21,1.0,13.666666666666666,4,6,0.3,1 -2019-01-14 21:00:00,2529,21,2.6666666666666665,13.666666666666666,12,6,0.3,1 -2019-01-15 00:00:00,2529,22,2.6666666666666665,9.333333333333334,12,5,0.2,1 -2019-01-15 03:00:00,2529,22,0.6666666666666666,9.333333333333334,3,5,0.2,1 -2019-01-15 06:00:00,2529,22,1.3333333333333333,9.333333333333334,5,5,0.2,1 -2019-01-15 09:00:00,2529,22,0.6666666666666666,9.333333333333334,3,5,0.2,1 -2019-01-15 12:00:00,2529,22,0.6666666666666666,9.333333333333334,3,5,0.2,1 -2019-01-15 15:00:00,2529,22,1.0,9.333333333333334,4,5,0.2,1 -2019-01-15 18:00:00,2529,22,1.3333333333333333,9.333333333333334,5,5,0.2,1 -2019-01-15 21:00:00,2529,22,1.0,9.333333333333334,4,5,0.2,1 -2019-01-16 00:00:00,2529,23,0.3333333333333333,10.0,2,5,0.2,1 -2019-01-16 03:00:00,2529,23,1.6666666666666665,10.0,6,5,0.2,1 -2019-01-16 06:00:00,2529,23,1.6666666666666665,10.0,6,5,0.2,1 -2019-01-16 09:00:00,2529,23,0.3333333333333333,10.0,2,5,0.2,1 -2019-01-16 12:00:00,2529,23,0.3333333333333333,10.0,2,5,0.2,1 -2019-01-16 15:00:00,2529,23,1.0,10.0,4,5,0.2,1 -2019-01-16 18:00:00,2529,23,2.0,10.0,7,5,0.2,1 -2019-01-16 21:00:00,2529,23,2.6666666666666665,10.0,12,5,0.2,1 -2019-01-17 00:00:00,2529,24,2.6666666666666665,13.333333333333334,12,6,0.3,1 -2019-01-17 03:00:00,2529,24,2.0,13.333333333333334,7,6,0.3,1 -2019-01-17 06:00:00,2529,24,0.6666666666666666,13.333333333333334,3,6,0.3,1 -2019-01-17 09:00:00,2529,24,1.3333333333333333,13.333333333333334,5,6,0.3,1 -2019-01-17 12:00:00,2529,24,1.0,13.333333333333334,4,6,0.3,1 -2019-01-17 15:00:00,2529,24,2.0,13.333333333333334,7,6,0.3,1 -2019-01-17 18:00:00,2529,24,2.0,13.333333333333334,7,6,0.3,1 -2019-01-17 21:00:00,2529,24,1.6666666666666665,13.333333333333334,6,6,0.3,1 -2019-01-18 00:00:00,2529,25,1.6666666666666665,10.333333333333334,6,5,0.2,1 -2019-01-18 03:00:00,2529,25,1.3333333333333333,10.333333333333334,5,5,0.2,1 -2019-01-18 06:00:00,2529,25,0.6666666666666666,10.333333333333334,3,5,0.2,1 -2019-01-18 09:00:00,2529,25,2.0,10.333333333333334,7,5,0.2,1 -2019-01-18 12:00:00,2529,25,1.3333333333333333,10.333333333333334,5,5,0.2,1 -2019-01-18 15:00:00,2529,25,1.6666666666666665,10.333333333333334,6,5,0.2,1 -2019-01-18 18:00:00,2529,25,1.0,10.333333333333334,4,5,0.2,1 -2019-01-18 21:00:00,2529,25,0.6666666666666666,10.333333333333334,3,5,0.2,1 -2019-01-19 00:00:00,2529,26,0.3333333333333333,7.333333333333333,2,4,0.1,0 -2019-01-19 03:00:00,2529,26,0.0,7.333333333333333,0,4,0.1,0 -2019-01-19 06:00:00,2529,26,0.6666666666666666,7.333333333333333,3,4,0.1,0 -2019-01-19 09:00:00,2529,26,1.6666666666666665,7.333333333333333,6,4,0.1,0 -2019-01-19 12:00:00,2529,26,0.0,7.333333333333333,0,4,0.1,0 -2019-01-19 15:00:00,2529,26,1.0,7.333333333333333,4,4,0.1,0 -2019-01-19 18:00:00,2529,26,1.0,7.333333333333333,4,4,0.1,0 -2019-01-19 21:00:00,2529,26,2.6666666666666665,7.333333333333333,12,4,0.1,0 -2019-01-20 00:00:00,2529,27,1.6666666666666665,6.333333333333333,6,3,0.1,0 -2019-01-20 03:00:00,2529,27,1.0,6.333333333333333,4,3,0.1,0 -2019-01-20 06:00:00,2529,27,0.6666666666666666,6.333333333333333,3,3,0.1,0 -2019-01-20 09:00:00,2529,27,0.3333333333333333,6.333333333333333,2,3,0.1,0 -2019-01-20 12:00:00,2529,27,0.6666666666666666,6.333333333333333,3,3,0.1,0 -2019-01-20 15:00:00,2529,27,0.6666666666666666,6.333333333333333,3,3,0.1,0 -2019-01-20 18:00:00,2529,27,0.6666666666666666,6.333333333333333,3,3,0.1,0 -2019-01-20 21:00:00,2529,27,0.6666666666666666,6.333333333333333,3,3,0.1,0 -2019-01-21 00:00:00,2530,1,1.0,5.666666666666667,4,3,0.1,0 -2019-01-21 03:00:00,2530,1,0.3333333333333333,5.666666666666667,2,3,0.1,0 -2019-01-21 06:00:00,2530,1,0.0,5.666666666666667,0,3,0.1,0 -2019-01-21 09:00:00,2530,1,0.3333333333333333,5.666666666666667,2,3,0.1,0 -2019-01-21 12:00:00,2530,1,0.3333333333333333,5.666666666666667,2,3,0.1,0 -2019-01-21 15:00:00,2530,1,0.6666666666666666,5.666666666666667,3,3,0.1,0 -2019-01-21 18:00:00,2530,1,1.3333333333333333,5.666666666666667,5,3,0.1,0 -2019-01-21 21:00:00,2530,1,1.6666666666666665,5.666666666666667,6,3,0.1,0 -2019-01-22 00:00:00,2530,2,0.0,5.333333333333333,0,3,0.0,0 -2019-01-22 03:00:00,2530,2,0.3333333333333333,5.333333333333333,2,3,0.0,0 -2019-01-22 06:00:00,2530,2,0.0,5.333333333333333,0,3,0.0,0 -2019-01-22 09:00:00,2530,2,0.0,5.333333333333333,0,3,0.0,0 -2019-01-22 12:00:00,2530,2,0.3333333333333333,5.333333333333333,2,3,0.0,0 -2019-01-22 15:00:00,2530,2,1.0,5.333333333333333,4,3,0.0,0 -2019-01-22 18:00:00,2530,2,1.6666666666666665,5.333333333333333,6,3,0.0,0 -2019-01-22 21:00:00,2530,2,2.0,5.333333333333333,7,3,0.0,0 -2019-01-23 00:00:00,2530,3,2.6666666666666665,21.333333333333332,12,12,0.7,3 -2019-01-23 03:00:00,2530,3,2.3333333333333335,21.333333333333332,9,12,0.7,3 -2019-01-23 06:00:00,2530,3,2.0,21.333333333333332,7,12,0.7,3 -2019-01-23 09:00:00,2530,3,2.6666666666666665,21.333333333333332,12,12,0.7,3 -2019-01-23 12:00:00,2530,3,3.0,21.333333333333332,15,12,0.7,3 -2019-01-23 15:00:00,2530,3,2.3333333333333335,21.333333333333332,9,12,0.7,3 -2019-01-23 18:00:00,2530,3,2.3333333333333335,21.333333333333332,9,12,0.7,3 -2019-01-23 21:00:00,2530,3,4.0,21.333333333333332,27,12,0.7,3 -2019-01-24 00:00:00,2530,4,3.6666666666666665,24.0,22,17,0.9,4 -2019-01-24 03:00:00,2530,4,3.3333333333333335,24.0,18,17,0.9,4 -2019-01-24 06:00:00,2530,4,3.6666666666666665,24.0,22,17,0.9,4 -2019-01-24 09:00:00,2530,4,1.3333333333333333,24.0,5,17,0.9,4 -2019-01-24 12:00:00,2530,4,1.3333333333333333,24.0,5,17,0.9,4 -2019-01-24 15:00:00,2530,4,2.6666666666666665,24.0,12,17,0.9,4 -2019-01-24 18:00:00,2530,4,3.6666666666666665,24.0,22,17,0.9,4 -2019-01-24 21:00:00,2530,4,4.333333333333333,24.0,32,17,0.9,4 -2019-01-25 00:00:00,2530,5,2.0,21.0,7,12,0.7,3 -2019-01-25 03:00:00,2530,5,2.6666666666666665,21.0,12,12,0.7,3 -2019-01-25 06:00:00,2530,5,3.3333333333333335,21.0,18,12,0.7,3 -2019-01-25 09:00:00,2530,5,2.6666666666666665,21.0,12,12,0.7,3 -2019-01-25 12:00:00,2530,5,3.3333333333333335,21.0,18,12,0.7,3 -2019-01-25 15:00:00,2530,5,3.0,21.0,15,12,0.7,3 -2019-01-25 18:00:00,2530,5,2.3333333333333335,21.0,9,12,0.7,3 -2019-01-25 21:00:00,2530,5,1.6666666666666665,21.0,6,12,0.7,3 -2019-01-26 00:00:00,2530,6,1.6666666666666665,12.666666666666666,6,7,0.3,1 -2019-01-26 03:00:00,2530,6,1.6666666666666665,12.666666666666666,6,7,0.3,1 -2019-01-26 06:00:00,2530,6,1.3333333333333333,12.666666666666666,5,7,0.3,1 -2019-01-26 09:00:00,2530,6,1.0,12.666666666666666,4,7,0.3,1 -2019-01-26 12:00:00,2530,6,3.0,12.666666666666666,15,7,0.3,1 -2019-01-26 15:00:00,2530,6,2.6666666666666665,12.666666666666666,12,7,0.3,1 -2019-01-26 18:00:00,2530,6,0.6666666666666666,12.666666666666666,3,7,0.3,1 -2019-01-26 21:00:00,2530,6,0.6666666666666666,12.666666666666666,3,7,0.3,1 -2019-01-27 00:00:00,2530,7,2.0,8.0,7,4,0.1,0 -2019-01-27 03:00:00,2530,7,1.3333333333333333,8.0,5,4,0.1,0 -2019-01-27 06:00:00,2530,7,1.3333333333333333,8.0,5,4,0.1,0 -2019-01-27 09:00:00,2530,7,1.0,8.0,4,4,0.1,0 -2019-01-27 12:00:00,2530,7,0.3333333333333333,8.0,2,4,0.1,0 -2019-01-27 15:00:00,2530,7,0.3333333333333333,8.0,2,4,0.1,0 -2019-01-27 18:00:00,2530,7,1.0,8.0,4,4,0.1,0 -2019-01-27 21:00:00,2530,7,0.6666666666666666,8.0,3,4,0.1,0 -2019-01-28 00:00:00,2530,8,0.6666666666666666,1.6666666666666665,3,1,0.0,0 -2019-01-28 03:00:00,2530,8,0.0,1.6666666666666665,0,1,0.0,0 -2019-01-28 06:00:00,2530,8,0.3333333333333333,1.6666666666666665,2,1,0.0,0 -2019-01-28 09:00:00,2530,8,0.0,1.6666666666666665,0,1,0.0,0 -2019-01-28 12:00:00,2530,8,0.0,1.6666666666666665,0,1,0.0,0 -2019-01-28 15:00:00,2530,8,0.3333333333333333,1.6666666666666665,2,1,0.0,0 -2019-01-28 18:00:00,2530,8,0.3333333333333333,1.6666666666666665,2,1,0.0,0 -2019-01-28 21:00:00,2530,8,0.0,1.6666666666666665,0,1,0.0,0 -2019-01-29 00:00:00,2530,9,1.6666666666666665,3.0,6,2,0.0,0 -2019-01-29 03:00:00,2530,9,0.0,3.0,0,2,0.0,0 -2019-01-29 06:00:00,2530,9,0.0,3.0,0,2,0.0,0 -2019-01-29 09:00:00,2530,9,0.3333333333333333,3.0,2,2,0.0,0 -2019-01-29 12:00:00,2530,9,0.6666666666666666,3.0,3,2,0.0,0 -2019-01-29 15:00:00,2530,9,0.3333333333333333,3.0,2,2,0.0,0 -2019-01-29 18:00:00,2530,9,0.0,3.0,0,2,0.0,0 -2019-01-29 21:00:00,2530,9,0.0,3.0,0,2,0.0,0 -2019-01-30 00:00:00,2530,10,0.0,2.0,0,1,0.0,0 -2019-01-30 03:00:00,2530,10,0.0,2.0,0,1,0.0,0 -2019-01-30 06:00:00,2530,10,0.0,2.0,0,1,0.0,0 -2019-01-30 09:00:00,2530,10,0.0,2.0,0,1,0.0,0 -2019-01-30 12:00:00,2530,10,0.0,2.0,0,1,0.0,0 -2019-01-30 15:00:00,2530,10,0.0,2.0,0,1,0.0,0 -2019-01-30 18:00:00,2530,10,1.0,2.0,4,1,0.0,0 -2019-01-30 21:00:00,2530,10,1.0,2.0,4,1,0.0,0 -2019-01-31 00:00:00,2530,11,1.0,17.666666666666668,4,14,0.8,4 -2019-01-31 03:00:00,2530,11,0.3333333333333333,17.666666666666668,2,14,0.8,4 -2019-01-31 06:00:00,2530,11,1.0,17.666666666666668,4,14,0.8,4 -2019-01-31 09:00:00,2530,11,1.0,17.666666666666668,4,14,0.8,4 -2019-01-31 12:00:00,2530,11,2.6666666666666665,17.666666666666668,12,14,0.8,4 -2019-01-31 15:00:00,2530,11,3.3333333333333335,17.666666666666668,18,14,0.8,4 -2019-01-31 18:00:00,2530,11,3.0,17.666666666666668,15,14,0.8,4 -2019-01-31 21:00:00,2530,11,5.333333333333333,17.666666666666668,56,14,0.8,4 -2019-02-01 00:00:00,2530,12,2.3333333333333335,24.0,9,15,0.9,4 -2019-02-01 03:00:00,2530,12,3.3333333333333335,24.0,18,15,0.9,4 -2019-02-01 06:00:00,2530,12,3.3333333333333335,24.0,18,15,0.9,4 -2019-02-01 09:00:00,2530,12,2.3333333333333335,24.0,9,15,0.9,4 -2019-02-01 12:00:00,2530,12,2.3333333333333335,24.0,9,15,0.9,4 -2019-02-01 15:00:00,2530,12,3.6666666666666665,24.0,22,15,0.9,4 -2019-02-01 18:00:00,2530,12,3.0,24.0,15,15,0.9,4 -2019-02-01 21:00:00,2530,12,3.6666666666666665,24.0,22,15,0.9,4 -2019-02-02 00:00:00,2530,13,3.6666666666666665,24.333333333333332,22,16,0.9,4 -2019-02-02 03:00:00,2530,13,4.0,24.333333333333332,27,16,0.9,4 -2019-02-02 06:00:00,2530,13,3.0,24.333333333333332,15,16,0.9,4 -2019-02-02 09:00:00,2530,13,2.3333333333333335,24.333333333333332,9,16,0.9,4 -2019-02-02 12:00:00,2530,13,2.0,24.333333333333332,7,16,0.9,4 -2019-02-02 15:00:00,2530,13,3.3333333333333335,24.333333333333332,18,16,0.9,4 -2019-02-02 18:00:00,2530,13,3.0,24.333333333333332,15,16,0.9,4 -2019-02-02 21:00:00,2530,13,3.0,24.333333333333332,15,16,0.9,4 -2019-02-03 00:00:00,2530,14,3.3333333333333335,18.0,18,10,0.6,3 -2019-02-03 03:00:00,2530,14,3.0,18.0,15,10,0.6,3 -2019-02-03 06:00:00,2530,14,2.6666666666666665,18.0,12,10,0.6,3 -2019-02-03 09:00:00,2530,14,1.0,18.0,4,10,0.6,3 -2019-02-03 12:00:00,2530,14,1.3333333333333333,18.0,5,10,0.6,3 -2019-02-03 15:00:00,2530,14,2.3333333333333335,18.0,9,10,0.6,3 -2019-02-03 18:00:00,2530,14,2.0,18.0,7,10,0.6,3 -2019-02-03 21:00:00,2530,14,2.3333333333333335,18.0,9,10,0.6,3 -2019-02-04 00:00:00,2530,15,0.6666666666666666,10.0,3,5,0.2,1 -2019-02-04 03:00:00,2530,15,0.0,10.0,0,5,0.2,1 -2019-02-04 06:00:00,2530,15,0.6666666666666666,10.0,3,5,0.2,1 -2019-02-04 09:00:00,2530,15,0.3333333333333333,10.0,2,5,0.2,1 -2019-02-04 12:00:00,2530,15,1.3333333333333333,10.0,5,5,0.2,1 -2019-02-04 15:00:00,2530,15,1.6666666666666665,10.0,6,5,0.2,1 -2019-02-04 18:00:00,2530,15,3.0,10.0,15,5,0.2,1 -2019-02-04 21:00:00,2530,15,2.3333333333333335,10.0,9,5,0.2,1 -2019-02-05 00:00:00,2530,16,3.0,8.0,15,5,0.2,1 -2019-02-05 03:00:00,2530,16,1.3333333333333333,8.0,5,5,0.2,1 -2019-02-05 06:00:00,2530,16,0.6666666666666666,8.0,3,5,0.2,1 -2019-02-05 09:00:00,2530,16,0.3333333333333333,8.0,2,5,0.2,1 -2019-02-05 12:00:00,2530,16,0.3333333333333333,8.0,2,5,0.2,1 -2019-02-05 15:00:00,2530,16,1.0,8.0,4,5,0.2,1 -2019-02-05 18:00:00,2530,16,1.0,8.0,4,5,0.2,1 -2019-02-05 21:00:00,2530,16,0.3333333333333333,8.0,2,5,0.2,1 -2019-02-06 00:00:00,2530,17,1.0,16.333333333333332,4,8,0.4,2 -2019-02-06 03:00:00,2530,17,2.0,16.333333333333332,7,8,0.4,2 -2019-02-06 06:00:00,2530,17,2.0,16.333333333333332,7,8,0.4,2 -2019-02-06 09:00:00,2530,17,2.6666666666666665,16.333333333333332,12,8,0.4,2 -2019-02-06 12:00:00,2530,17,2.6666666666666665,16.333333333333332,12,8,0.4,2 -2019-02-06 15:00:00,2530,17,1.3333333333333333,16.333333333333332,5,8,0.4,2 -2019-02-06 18:00:00,2530,17,2.3333333333333335,16.333333333333332,9,8,0.4,2 -2019-02-06 21:00:00,2530,17,2.3333333333333335,16.333333333333332,9,8,0.4,2 -2019-02-07 00:00:00,2530,18,1.6666666666666665,8.0,6,4,0.1,0 -2019-02-07 03:00:00,2530,18,1.3333333333333333,8.0,5,4,0.1,0 -2019-02-07 06:00:00,2530,18,1.0,8.0,4,4,0.1,0 -2019-02-07 09:00:00,2530,18,0.0,8.0,0,4,0.1,0 -2019-02-07 12:00:00,2530,18,0.3333333333333333,8.0,2,4,0.1,0 -2019-02-07 15:00:00,2530,18,0.6666666666666666,8.0,3,4,0.1,0 -2019-02-07 18:00:00,2530,18,1.0,8.0,4,4,0.1,0 -2019-02-07 21:00:00,2530,18,2.0,8.0,7,4,0.1,0 -2019-02-08 00:00:00,2530,19,2.0,14.666666666666666,7,8,0.4,2 -2019-02-08 03:00:00,2530,19,1.6666666666666665,14.666666666666666,6,8,0.4,2 -2019-02-08 06:00:00,2530,19,1.6666666666666665,14.666666666666666,6,8,0.4,2 -2019-02-08 09:00:00,2530,19,1.3333333333333333,14.666666666666666,5,8,0.4,2 -2019-02-08 12:00:00,2530,19,0.6666666666666666,14.666666666666666,3,8,0.4,2 -2019-02-08 15:00:00,2530,19,1.3333333333333333,14.666666666666666,5,8,0.4,2 -2019-02-08 18:00:00,2530,19,2.3333333333333335,14.666666666666666,9,8,0.4,2 -2019-02-08 21:00:00,2530,19,3.6666666666666665,14.666666666666666,22,8,0.4,2 -2019-02-09 00:00:00,2530,20,2.6666666666666665,17.0,12,9,0.5,2 -2019-02-09 03:00:00,2530,20,2.0,17.0,7,9,0.5,2 -2019-02-09 06:00:00,2530,20,2.0,17.0,7,9,0.5,2 -2019-02-09 09:00:00,2530,20,2.3333333333333335,17.0,9,9,0.5,2 -2019-02-09 12:00:00,2530,20,1.6666666666666665,17.0,6,9,0.5,2 -2019-02-09 15:00:00,2530,20,2.3333333333333335,17.0,9,9,0.5,2 -2019-02-09 18:00:00,2530,20,3.0,17.0,15,9,0.5,2 -2019-02-09 21:00:00,2530,20,1.0,17.0,4,9,0.5,2 -2019-02-10 00:00:00,2530,21,2.3333333333333335,9.666666666666666,9,5,0.2,1 -2019-02-10 03:00:00,2530,21,2.6666666666666665,9.666666666666666,12,5,0.2,1 -2019-02-10 06:00:00,2530,21,0.6666666666666666,9.666666666666666,3,5,0.2,1 -2019-02-10 09:00:00,2530,21,1.3333333333333333,9.666666666666666,5,5,0.2,1 -2019-02-10 12:00:00,2530,21,0.3333333333333333,9.666666666666666,2,5,0.2,1 -2019-02-10 15:00:00,2530,21,0.3333333333333333,9.666666666666666,2,5,0.2,1 -2019-02-10 18:00:00,2530,21,1.0,9.666666666666666,4,5,0.2,1 -2019-02-10 21:00:00,2530,21,1.0,9.666666666666666,4,5,0.2,1 -2019-02-11 00:00:00,2530,22,1.0,15.0,4,8,0.4,2 -2019-02-11 03:00:00,2530,22,1.3333333333333333,15.0,5,8,0.4,2 -2019-02-11 06:00:00,2530,22,1.6666666666666665,15.0,6,8,0.4,2 -2019-02-11 09:00:00,2530,22,0.6666666666666666,15.0,3,8,0.4,2 -2019-02-11 12:00:00,2530,22,3.0,15.0,15,8,0.4,2 -2019-02-11 15:00:00,2530,22,3.0,15.0,15,8,0.4,2 -2019-02-11 18:00:00,2530,22,2.0,15.0,7,8,0.4,2 -2019-02-11 21:00:00,2530,22,2.3333333333333335,15.0,9,8,0.4,2 -2019-02-12 00:00:00,2530,23,2.0,9.0,7,4,0.2,1 -2019-02-12 03:00:00,2530,23,2.3333333333333335,9.0,9,4,0.2,1 -2019-02-12 06:00:00,2530,23,0.3333333333333333,9.0,2,4,0.2,1 -2019-02-12 09:00:00,2530,23,0.3333333333333333,9.0,2,4,0.2,1 -2019-02-12 12:00:00,2530,23,1.0,9.0,4,4,0.2,1 -2019-02-12 15:00:00,2530,23,0.6666666666666666,9.0,3,4,0.2,1 -2019-02-12 18:00:00,2530,23,0.0,9.0,0,4,0.2,1 -2019-02-12 21:00:00,2530,23,2.3333333333333335,9.0,9,4,0.2,1 -2019-02-13 00:00:00,2530,24,1.6666666666666665,20.666666666666668,6,13,0.7,3 -2019-02-13 03:00:00,2530,24,2.6666666666666665,20.666666666666668,12,13,0.7,3 -2019-02-13 06:00:00,2530,24,2.6666666666666665,20.666666666666668,12,13,0.7,3 -2019-02-13 09:00:00,2530,24,3.6666666666666665,20.666666666666668,22,13,0.7,3 -2019-02-13 12:00:00,2530,24,3.6666666666666665,20.666666666666668,22,13,0.7,3 -2019-02-13 15:00:00,2530,24,3.0,20.666666666666668,15,13,0.7,3 -2019-02-13 18:00:00,2530,24,1.3333333333333333,20.666666666666668,5,13,0.7,3 -2019-02-13 21:00:00,2530,24,2.0,20.666666666666668,7,13,0.7,3 -2019-02-14 00:00:00,2530,25,2.6666666666666665,16.333333333333332,12,9,0.5,2 -2019-02-14 03:00:00,2530,25,3.3333333333333335,16.333333333333332,18,9,0.5,2 -2019-02-14 06:00:00,2530,25,2.3333333333333335,16.333333333333332,9,9,0.5,2 -2019-02-14 09:00:00,2530,25,3.0,16.333333333333332,15,9,0.5,2 -2019-02-14 12:00:00,2530,25,0.3333333333333333,16.333333333333332,2,9,0.5,2 -2019-02-14 15:00:00,2530,25,0.6666666666666666,16.333333333333332,3,9,0.5,2 -2019-02-14 18:00:00,2530,25,2.3333333333333335,16.333333333333332,9,9,0.5,2 -2019-02-14 21:00:00,2530,25,1.6666666666666665,16.333333333333332,6,9,0.5,2 -2019-02-15 00:00:00,2530,26,2.3333333333333335,6.0,9,3,0.1,0 -2019-02-15 03:00:00,2530,26,1.0,6.0,4,3,0.1,0 -2019-02-15 06:00:00,2530,26,0.6666666666666666,6.0,3,3,0.1,0 -2019-02-15 09:00:00,2530,26,0.3333333333333333,6.0,2,3,0.1,0 -2019-02-15 12:00:00,2530,26,0.6666666666666666,6.0,3,3,0.1,0 -2019-02-15 15:00:00,2530,26,0.3333333333333333,6.0,2,3,0.1,0 -2019-02-15 18:00:00,2530,26,0.6666666666666666,6.0,3,3,0.1,0 -2019-02-15 21:00:00,2530,26,0.0,6.0,0,3,0.1,0 -2019-02-16 00:00:00,2530,27,0.0,6.0,0,3,0.1,0 -2019-02-16 03:00:00,2530,27,0.0,6.0,0,3,0.1,0 -2019-02-16 06:00:00,2530,27,1.0,6.0,4,3,0.1,0 -2019-02-16 09:00:00,2530,27,0.0,6.0,0,3,0.1,0 -2019-02-16 12:00:00,2530,27,1.0,6.0,4,3,0.1,0 -2019-02-16 15:00:00,2530,27,2.0,6.0,7,3,0.1,0 -2019-02-16 18:00:00,2530,27,1.3333333333333333,6.0,5,3,0.1,0 -2019-02-16 21:00:00,2530,27,0.6666666666666666,6.0,3,3,0.1,0 -2019-02-17 00:00:00,2531,1,0.0,5.666666666666667,0,3,0.1,0 -2019-02-17 03:00:00,2531,1,0.0,5.666666666666667,0,3,0.1,0 -2019-02-17 06:00:00,2531,1,0.6666666666666666,5.666666666666667,3,3,0.1,0 -2019-02-17 09:00:00,2531,1,0.3333333333333333,5.666666666666667,2,3,0.1,0 -2019-02-17 12:00:00,2531,1,0.0,5.666666666666667,0,3,0.1,0 -2019-02-17 15:00:00,2531,1,0.3333333333333333,5.666666666666667,2,3,0.1,0 -2019-02-17 18:00:00,2531,1,2.0,5.666666666666667,7,3,0.1,0 -2019-02-17 21:00:00,2531,1,2.3333333333333335,5.666666666666667,9,3,0.1,0 -2019-02-18 00:00:00,2531,2,3.0,10.666666666666666,15,6,0.3,1 -2019-02-18 03:00:00,2531,2,3.0,10.666666666666666,15,6,0.3,1 -2019-02-18 06:00:00,2531,2,0.3333333333333333,10.666666666666666,2,6,0.3,1 -2019-02-18 09:00:00,2531,2,1.3333333333333333,10.666666666666666,5,6,0.3,1 -2019-02-18 12:00:00,2531,2,1.3333333333333333,10.666666666666666,5,6,0.3,1 -2019-02-18 15:00:00,2531,2,1.0,10.666666666666666,4,6,0.3,1 -2019-02-18 18:00:00,2531,2,0.3333333333333333,10.666666666666666,2,6,0.3,1 -2019-02-18 21:00:00,2531,2,0.3333333333333333,10.666666666666666,2,6,0.3,1 -2019-02-19 00:00:00,2531,3,0.3333333333333333,4.0,2,2,0.0,0 -2019-02-19 03:00:00,2531,3,1.0,4.0,4,2,0.0,0 -2019-02-19 06:00:00,2531,3,1.0,4.0,4,2,0.0,0 -2019-02-19 09:00:00,2531,3,0.3333333333333333,4.0,2,2,0.0,0 -2019-02-19 12:00:00,2531,3,0.0,4.0,0,2,0.0,0 -2019-02-19 15:00:00,2531,3,0.3333333333333333,4.0,2,2,0.0,0 -2019-02-19 18:00:00,2531,3,0.6666666666666666,4.0,3,2,0.0,0 -2019-02-19 21:00:00,2531,3,0.3333333333333333,4.0,2,2,0.0,0 -2019-02-20 00:00:00,2531,4,0.3333333333333333,5.0,2,3,0.0,0 -2019-02-20 03:00:00,2531,4,0.0,5.0,0,3,0.0,0 -2019-02-20 06:00:00,2531,4,0.3333333333333333,5.0,2,3,0.0,0 -2019-02-20 09:00:00,2531,4,0.0,5.0,0,3,0.0,0 -2019-02-20 12:00:00,2531,4,0.3333333333333333,5.0,2,3,0.0,0 -2019-02-20 15:00:00,2531,4,1.0,5.0,4,3,0.0,0 -2019-02-20 18:00:00,2531,4,1.3333333333333333,5.0,5,3,0.0,0 -2019-02-20 21:00:00,2531,4,1.6666666666666665,5.0,6,3,0.0,0 -2019-02-21 00:00:00,2531,5,2.6666666666666665,18.333333333333332,12,10,0.6,3 -2019-02-21 03:00:00,2531,5,2.0,18.333333333333332,7,10,0.6,3 -2019-02-21 06:00:00,2531,5,3.6666666666666665,18.333333333333332,22,10,0.6,3 -2019-02-21 09:00:00,2531,5,1.6666666666666665,18.333333333333332,6,10,0.6,3 -2019-02-21 12:00:00,2531,5,2.6666666666666665,18.333333333333332,12,10,0.6,3 -2019-02-21 15:00:00,2531,5,1.6666666666666665,18.333333333333332,6,10,0.6,3 -2019-02-21 18:00:00,2531,5,1.0,18.333333333333332,4,10,0.6,3 -2019-02-21 21:00:00,2531,5,3.0,18.333333333333332,15,10,0.6,3 -2019-02-22 00:00:00,2531,6,2.0,6.333333333333333,7,3,0.1,0 -2019-02-22 03:00:00,2531,6,0.3333333333333333,6.333333333333333,2,3,0.1,0 -2019-02-22 06:00:00,2531,6,1.0,6.333333333333333,4,3,0.1,0 -2019-02-22 09:00:00,2531,6,0.6666666666666666,6.333333333333333,3,3,0.1,0 -2019-02-22 12:00:00,2531,6,0.3333333333333333,6.333333333333333,2,3,0.1,0 -2019-02-22 15:00:00,2531,6,0.0,6.333333333333333,0,3,0.1,0 -2019-02-22 18:00:00,2531,6,0.6666666666666666,6.333333333333333,3,3,0.1,0 -2019-02-22 21:00:00,2531,6,1.3333333333333333,6.333333333333333,5,3,0.1,0 -2019-02-23 00:00:00,2531,7,0.3333333333333333,2.6666666666666665,2,2,0.0,0 -2019-02-23 03:00:00,2531,7,0.0,2.6666666666666665,0,2,0.0,0 -2019-02-23 06:00:00,2531,7,0.3333333333333333,2.6666666666666665,2,2,0.0,0 -2019-02-23 09:00:00,2531,7,0.0,2.6666666666666665,0,2,0.0,0 -2019-02-23 12:00:00,2531,7,0.0,2.6666666666666665,0,2,0.0,0 -2019-02-23 15:00:00,2531,7,1.0,2.6666666666666665,4,2,0.0,0 -2019-02-23 18:00:00,2531,7,1.0,2.6666666666666665,4,2,0.0,0 -2019-02-23 21:00:00,2531,7,0.0,2.6666666666666665,0,2,0.0,0 -2019-02-24 00:00:00,2531,8,0.0,2.3333333333333335,0,1,0.0,0 -2019-02-24 03:00:00,2531,8,0.0,2.3333333333333335,0,1,0.0,0 -2019-02-24 06:00:00,2531,8,0.6666666666666666,2.3333333333333335,3,1,0.0,0 -2019-02-24 09:00:00,2531,8,0.6666666666666666,2.3333333333333335,3,1,0.0,0 -2019-02-24 12:00:00,2531,8,1.0,2.3333333333333335,4,1,0.0,0 -2019-02-24 15:00:00,2531,8,0.0,2.3333333333333335,0,1,0.0,0 -2019-02-24 18:00:00,2531,8,0.0,2.3333333333333335,0,1,0.0,0 -2019-02-24 21:00:00,2531,8,0.0,2.3333333333333335,0,1,0.0,0 -2019-02-25 00:00:00,2531,9,0.0,2.0,0,1,0.0,0 -2019-02-25 03:00:00,2531,9,0.0,2.0,0,1,0.0,0 -2019-02-25 06:00:00,2531,9,0.6666666666666666,2.0,3,1,0.0,0 -2019-02-25 09:00:00,2531,9,0.3333333333333333,2.0,2,1,0.0,0 -2019-02-25 12:00:00,2531,9,0.0,2.0,0,1,0.0,0 -2019-02-25 15:00:00,2531,9,0.3333333333333333,2.0,2,1,0.0,0 -2019-02-25 18:00:00,2531,9,0.0,2.0,0,1,0.0,0 -2019-02-25 21:00:00,2531,9,0.6666666666666666,2.0,3,1,0.0,0 -2019-02-26 00:00:00,2531,10,0.6666666666666666,3.3333333333333335,3,2,0.0,0 -2019-02-26 03:00:00,2531,10,0.0,3.3333333333333335,0,2,0.0,0 -2019-02-26 06:00:00,2531,10,0.0,3.3333333333333335,0,2,0.0,0 -2019-02-26 09:00:00,2531,10,0.6666666666666666,3.3333333333333335,3,2,0.0,0 -2019-02-26 12:00:00,2531,10,0.3333333333333333,3.3333333333333335,2,2,0.0,0 -2019-02-26 15:00:00,2531,10,1.0,3.3333333333333335,4,2,0.0,0 -2019-02-26 18:00:00,2531,10,0.0,3.3333333333333335,0,2,0.0,0 -2019-02-26 21:00:00,2531,10,0.6666666666666666,3.3333333333333335,3,2,0.0,0 -2019-02-27 00:00:00,2531,11,1.0,16.0,4,11,0.6,3 -2019-02-27 03:00:00,2531,11,0.0,16.0,0,11,0.6,3 -2019-02-27 06:00:00,2531,11,0.6666666666666666,16.0,3,11,0.6,3 -2019-02-27 09:00:00,2531,11,1.0,16.0,4,11,0.6,3 -2019-02-27 12:00:00,2531,11,3.0,16.0,15,11,0.6,3 -2019-02-27 15:00:00,2531,11,3.3333333333333335,16.0,18,11,0.6,3 -2019-02-27 18:00:00,2531,11,3.0,16.0,15,11,0.6,3 -2019-02-27 21:00:00,2531,11,4.0,16.0,27,11,0.6,3 -2019-02-28 00:00:00,2531,12,4.333333333333333,28.666666666666668,32,23,1.1,5 -2019-02-28 03:00:00,2531,12,3.3333333333333335,28.666666666666668,18,23,1.1,5 -2019-02-28 06:00:00,2531,12,2.0,28.666666666666668,7,23,1.1,5 -2019-02-28 09:00:00,2531,12,3.3333333333333335,28.666666666666668,18,23,1.1,5 -2019-02-28 12:00:00,2531,12,4.333333333333333,28.666666666666668,32,23,1.1,5 -2019-02-28 15:00:00,2531,12,3.6666666666666665,28.666666666666668,22,23,1.1,5 -2019-02-28 18:00:00,2531,12,4.666666666666667,28.666666666666668,39,23,1.1,5 -2019-02-28 21:00:00,2531,12,3.0,28.666666666666668,15,23,1.1,5 +,Bartels_solar_rotation_num,day_within_Bartels_rotation,Kp,daily_Kp_sum +2019-01-01 00:00:00,2529,8,1.0,9.666666666666666 +2019-01-01 03:00:00,2529,8,1.3333333333333333,9.666666666666666 +2019-01-01 06:00:00,2529,8,2.6666666666666665,9.666666666666666 +2019-01-01 09:00:00,2529,8,1.6666666666666665,9.666666666666666 +2019-01-01 12:00:00,2529,8,2.0,9.666666666666666 +2019-01-01 15:00:00,2529,8,0.3333333333333333,9.666666666666666 +2019-01-01 18:00:00,2529,8,0.0,9.666666666666666 +2019-01-01 21:00:00,2529,8,0.6666666666666666,9.666666666666666 +2019-01-02 00:00:00,2529,9,0.0,0.6666666666666666 +2019-01-02 03:00:00,2529,9,0.0,0.6666666666666666 +2019-01-02 06:00:00,2529,9,0.0,0.6666666666666666 +2019-01-02 09:00:00,2529,9,0.0,0.6666666666666666 +2019-01-02 12:00:00,2529,9,0.3333333333333333,0.6666666666666666 +2019-01-02 15:00:00,2529,9,0.3333333333333333,0.6666666666666666 +2019-01-02 18:00:00,2529,9,0.0,0.6666666666666666 +2019-01-02 21:00:00,2529,9,0.0,0.6666666666666666 +2019-01-03 00:00:00,2529,10,1.0,2.0 +2019-01-03 03:00:00,2529,10,0.0,2.0 +2019-01-03 06:00:00,2529,10,0.0,2.0 +2019-01-03 09:00:00,2529,10,0.3333333333333333,2.0 +2019-01-03 12:00:00,2529,10,0.3333333333333333,2.0 +2019-01-03 15:00:00,2529,10,0.0,2.0 +2019-01-03 18:00:00,2529,10,0.0,2.0 +2019-01-03 21:00:00,2529,10,0.3333333333333333,2.0 +2019-01-04 00:00:00,2529,11,1.3333333333333333,15.333333333333334 +2019-01-04 03:00:00,2529,11,0.3333333333333333,15.333333333333334 +2019-01-04 06:00:00,2529,11,1.0,15.333333333333334 +2019-01-04 09:00:00,2529,11,1.6666666666666665,15.333333333333334 +2019-01-04 12:00:00,2529,11,2.0,15.333333333333334 +2019-01-04 15:00:00,2529,11,3.0,15.333333333333334 +2019-01-04 18:00:00,2529,11,2.6666666666666665,15.333333333333334 +2019-01-04 21:00:00,2529,11,3.3333333333333335,15.333333333333334 +2019-01-05 00:00:00,2529,12,5.0,22.666666666666668 +2019-01-05 03:00:00,2529,12,4.0,22.666666666666668 +2019-01-05 06:00:00,2529,12,2.3333333333333335,22.666666666666668 +2019-01-05 09:00:00,2529,12,2.3333333333333335,22.666666666666668 +2019-01-05 12:00:00,2529,12,1.6666666666666665,22.666666666666668 +2019-01-05 15:00:00,2529,12,2.3333333333333335,22.666666666666668 +2019-01-05 18:00:00,2529,12,2.0,22.666666666666668 +2019-01-05 21:00:00,2529,12,3.0,22.666666666666668 +2019-01-06 00:00:00,2529,13,1.6666666666666665,18.0 +2019-01-06 03:00:00,2529,13,2.6666666666666665,18.0 +2019-01-06 06:00:00,2529,13,2.3333333333333335,18.0 +2019-01-06 09:00:00,2529,13,1.6666666666666665,18.0 +2019-01-06 12:00:00,2529,13,2.0,18.0 +2019-01-06 15:00:00,2529,13,2.6666666666666665,18.0 +2019-01-06 18:00:00,2529,13,3.0,18.0 +2019-01-06 21:00:00,2529,13,2.0,18.0 +2019-01-07 00:00:00,2529,14,1.6666666666666665,12.0 +2019-01-07 03:00:00,2529,14,2.3333333333333335,12.0 +2019-01-07 06:00:00,2529,14,1.6666666666666665,12.0 +2019-01-07 09:00:00,2529,14,2.0,12.0 +2019-01-07 12:00:00,2529,14,1.6666666666666665,12.0 +2019-01-07 15:00:00,2529,14,0.3333333333333333,12.0 +2019-01-07 18:00:00,2529,14,0.3333333333333333,12.0 +2019-01-07 21:00:00,2529,14,2.0,12.0 +2019-01-08 00:00:00,2529,15,2.3333333333333335,11.333333333333334 +2019-01-08 03:00:00,2529,15,1.6666666666666665,11.333333333333334 +2019-01-08 06:00:00,2529,15,1.3333333333333333,11.333333333333334 +2019-01-08 09:00:00,2529,15,2.3333333333333335,11.333333333333334 +2019-01-08 12:00:00,2529,15,1.3333333333333333,11.333333333333334 +2019-01-08 15:00:00,2529,15,0.6666666666666666,11.333333333333334 +2019-01-08 18:00:00,2529,15,1.3333333333333333,11.333333333333334 +2019-01-08 21:00:00,2529,15,0.3333333333333333,11.333333333333334 +2019-01-09 00:00:00,2529,16,1.6666666666666665,7.666666666666667 +2019-01-09 03:00:00,2529,16,0.6666666666666666,7.666666666666667 +2019-01-09 06:00:00,2529,16,1.0,7.666666666666667 +2019-01-09 09:00:00,2529,16,1.3333333333333333,7.666666666666667 +2019-01-09 12:00:00,2529,16,0.6666666666666666,7.666666666666667 +2019-01-09 15:00:00,2529,16,0.3333333333333333,7.666666666666667 +2019-01-09 18:00:00,2529,16,1.0,7.666666666666667 +2019-01-09 21:00:00,2529,16,1.0,7.666666666666667 +2019-01-10 00:00:00,2529,17,1.0,6.0 +2019-01-10 03:00:00,2529,17,0.6666666666666666,6.0 +2019-01-10 06:00:00,2529,17,1.0,6.0 +2019-01-10 09:00:00,2529,17,1.0,6.0 +2019-01-10 12:00:00,2529,17,1.3333333333333333,6.0 +2019-01-10 15:00:00,2529,17,0.3333333333333333,6.0 +2019-01-10 18:00:00,2529,17,0.0,6.0 +2019-01-10 21:00:00,2529,17,0.6666666666666666,6.0 +2019-01-11 00:00:00,2529,18,1.3333333333333333,11.0 +2019-01-11 03:00:00,2529,18,1.6666666666666665,11.0 +2019-01-11 06:00:00,2529,18,3.3333333333333335,11.0 +2019-01-11 09:00:00,2529,18,1.3333333333333333,11.0 +2019-01-11 12:00:00,2529,18,1.3333333333333333,11.0 +2019-01-11 15:00:00,2529,18,0.3333333333333333,11.0 +2019-01-11 18:00:00,2529,18,1.3333333333333333,11.0 +2019-01-11 21:00:00,2529,18,0.3333333333333333,11.0 +2019-01-12 00:00:00,2529,19,0.6666666666666666,3.3333333333333335 +2019-01-12 03:00:00,2529,19,0.3333333333333333,3.3333333333333335 +2019-01-12 06:00:00,2529,19,0.0,3.3333333333333335 +2019-01-12 09:00:00,2529,19,0.0,3.3333333333333335 +2019-01-12 12:00:00,2529,19,1.0,3.3333333333333335 +2019-01-12 15:00:00,2529,19,0.6666666666666666,3.3333333333333335 +2019-01-12 18:00:00,2529,19,0.3333333333333333,3.3333333333333335 +2019-01-12 21:00:00,2529,19,0.3333333333333333,3.3333333333333335 +2019-01-13 00:00:00,2529,20,0.3333333333333333,4.333333333333333 +2019-01-13 03:00:00,2529,20,1.0,4.333333333333333 +2019-01-13 06:00:00,2529,20,0.6666666666666666,4.333333333333333 +2019-01-13 09:00:00,2529,20,0.6666666666666666,4.333333333333333 +2019-01-13 12:00:00,2529,20,0.0,4.333333333333333 +2019-01-13 15:00:00,2529,20,0.0,4.333333333333333 +2019-01-13 18:00:00,2529,20,0.6666666666666666,4.333333333333333 +2019-01-13 21:00:00,2529,20,1.0,4.333333333333333 +2019-01-14 00:00:00,2529,21,2.0,13.666666666666666 +2019-01-14 03:00:00,2529,21,1.6666666666666665,13.666666666666666 +2019-01-14 06:00:00,2529,21,2.0,13.666666666666666 +2019-01-14 09:00:00,2529,21,2.0,13.666666666666666 +2019-01-14 12:00:00,2529,21,0.6666666666666666,13.666666666666666 +2019-01-14 15:00:00,2529,21,1.6666666666666665,13.666666666666666 +2019-01-14 18:00:00,2529,21,1.0,13.666666666666666 +2019-01-14 21:00:00,2529,21,2.6666666666666665,13.666666666666666 +2019-01-15 00:00:00,2529,22,2.6666666666666665,9.333333333333334 +2019-01-15 03:00:00,2529,22,0.6666666666666666,9.333333333333334 +2019-01-15 06:00:00,2529,22,1.3333333333333333,9.333333333333334 +2019-01-15 09:00:00,2529,22,0.6666666666666666,9.333333333333334 +2019-01-15 12:00:00,2529,22,0.6666666666666666,9.333333333333334 +2019-01-15 15:00:00,2529,22,1.0,9.333333333333334 +2019-01-15 18:00:00,2529,22,1.3333333333333333,9.333333333333334 +2019-01-15 21:00:00,2529,22,1.0,9.333333333333334 +2019-01-16 00:00:00,2529,23,0.3333333333333333,10.0 +2019-01-16 03:00:00,2529,23,1.6666666666666665,10.0 +2019-01-16 06:00:00,2529,23,1.6666666666666665,10.0 +2019-01-16 09:00:00,2529,23,0.3333333333333333,10.0 +2019-01-16 12:00:00,2529,23,0.3333333333333333,10.0 +2019-01-16 15:00:00,2529,23,1.0,10.0 +2019-01-16 18:00:00,2529,23,2.0,10.0 +2019-01-16 21:00:00,2529,23,2.6666666666666665,10.0 +2019-01-17 00:00:00,2529,24,2.6666666666666665,13.333333333333334 +2019-01-17 03:00:00,2529,24,2.0,13.333333333333334 +2019-01-17 06:00:00,2529,24,0.6666666666666666,13.333333333333334 +2019-01-17 09:00:00,2529,24,1.3333333333333333,13.333333333333334 +2019-01-17 12:00:00,2529,24,1.0,13.333333333333334 +2019-01-17 15:00:00,2529,24,2.0,13.333333333333334 +2019-01-17 18:00:00,2529,24,2.0,13.333333333333334 +2019-01-17 21:00:00,2529,24,1.6666666666666665,13.333333333333334 +2019-01-18 00:00:00,2529,25,1.6666666666666665,10.333333333333334 +2019-01-18 03:00:00,2529,25,1.3333333333333333,10.333333333333334 +2019-01-18 06:00:00,2529,25,0.6666666666666666,10.333333333333334 +2019-01-18 09:00:00,2529,25,2.0,10.333333333333334 +2019-01-18 12:00:00,2529,25,1.3333333333333333,10.333333333333334 +2019-01-18 15:00:00,2529,25,1.6666666666666665,10.333333333333334 +2019-01-18 18:00:00,2529,25,1.0,10.333333333333334 +2019-01-18 21:00:00,2529,25,0.6666666666666666,10.333333333333334 +2019-01-19 00:00:00,2529,26,0.3333333333333333,7.333333333333333 +2019-01-19 03:00:00,2529,26,0.0,7.333333333333333 +2019-01-19 06:00:00,2529,26,0.6666666666666666,7.333333333333333 +2019-01-19 09:00:00,2529,26,1.6666666666666665,7.333333333333333 +2019-01-19 12:00:00,2529,26,0.0,7.333333333333333 +2019-01-19 15:00:00,2529,26,1.0,7.333333333333333 +2019-01-19 18:00:00,2529,26,1.0,7.333333333333333 +2019-01-19 21:00:00,2529,26,2.6666666666666665,7.333333333333333 +2019-01-20 00:00:00,2529,27,1.6666666666666665,6.333333333333333 +2019-01-20 03:00:00,2529,27,1.0,6.333333333333333 +2019-01-20 06:00:00,2529,27,0.6666666666666666,6.333333333333333 +2019-01-20 09:00:00,2529,27,0.3333333333333333,6.333333333333333 +2019-01-20 12:00:00,2529,27,0.6666666666666666,6.333333333333333 +2019-01-20 15:00:00,2529,27,0.6666666666666666,6.333333333333333 +2019-01-20 18:00:00,2529,27,0.6666666666666666,6.333333333333333 +2019-01-20 21:00:00,2529,27,0.6666666666666666,6.333333333333333 +2019-01-21 00:00:00,2530,1,1.0,5.666666666666667 +2019-01-21 03:00:00,2530,1,0.3333333333333333,5.666666666666667 +2019-01-21 06:00:00,2530,1,0.0,5.666666666666667 +2019-01-21 09:00:00,2530,1,0.3333333333333333,5.666666666666667 +2019-01-21 12:00:00,2530,1,0.3333333333333333,5.666666666666667 +2019-01-21 15:00:00,2530,1,0.6666666666666666,5.666666666666667 +2019-01-21 18:00:00,2530,1,1.3333333333333333,5.666666666666667 +2019-01-21 21:00:00,2530,1,1.6666666666666665,5.666666666666667 +2019-01-22 00:00:00,2530,2,0.0,5.333333333333333 +2019-01-22 03:00:00,2530,2,0.3333333333333333,5.333333333333333 +2019-01-22 06:00:00,2530,2,0.0,5.333333333333333 +2019-01-22 09:00:00,2530,2,0.0,5.333333333333333 +2019-01-22 12:00:00,2530,2,0.3333333333333333,5.333333333333333 +2019-01-22 15:00:00,2530,2,1.0,5.333333333333333 +2019-01-22 18:00:00,2530,2,1.6666666666666665,5.333333333333333 +2019-01-22 21:00:00,2530,2,2.0,5.333333333333333 +2019-01-23 00:00:00,2530,3,2.6666666666666665,21.333333333333332 +2019-01-23 03:00:00,2530,3,2.3333333333333335,21.333333333333332 +2019-01-23 06:00:00,2530,3,2.0,21.333333333333332 +2019-01-23 09:00:00,2530,3,2.6666666666666665,21.333333333333332 +2019-01-23 12:00:00,2530,3,3.0,21.333333333333332 +2019-01-23 15:00:00,2530,3,2.3333333333333335,21.333333333333332 +2019-01-23 18:00:00,2530,3,2.3333333333333335,21.333333333333332 +2019-01-23 21:00:00,2530,3,4.0,21.333333333333332 +2019-01-24 00:00:00,2530,4,3.6666666666666665,24.0 +2019-01-24 03:00:00,2530,4,3.3333333333333335,24.0 +2019-01-24 06:00:00,2530,4,3.6666666666666665,24.0 +2019-01-24 09:00:00,2530,4,1.3333333333333333,24.0 +2019-01-24 12:00:00,2530,4,1.3333333333333333,24.0 +2019-01-24 15:00:00,2530,4,2.6666666666666665,24.0 +2019-01-24 18:00:00,2530,4,3.6666666666666665,24.0 +2019-01-24 21:00:00,2530,4,4.333333333333333,24.0 +2019-01-25 00:00:00,2530,5,2.0,21.0 +2019-01-25 03:00:00,2530,5,2.6666666666666665,21.0 +2019-01-25 06:00:00,2530,5,3.3333333333333335,21.0 +2019-01-25 09:00:00,2530,5,2.6666666666666665,21.0 +2019-01-25 12:00:00,2530,5,3.3333333333333335,21.0 +2019-01-25 15:00:00,2530,5,3.0,21.0 +2019-01-25 18:00:00,2530,5,2.3333333333333335,21.0 +2019-01-25 21:00:00,2530,5,1.6666666666666665,21.0 +2019-01-26 00:00:00,2530,6,1.6666666666666665,12.666666666666666 +2019-01-26 03:00:00,2530,6,1.6666666666666665,12.666666666666666 +2019-01-26 06:00:00,2530,6,1.3333333333333333,12.666666666666666 +2019-01-26 09:00:00,2530,6,1.0,12.666666666666666 +2019-01-26 12:00:00,2530,6,3.0,12.666666666666666 +2019-01-26 15:00:00,2530,6,2.6666666666666665,12.666666666666666 +2019-01-26 18:00:00,2530,6,0.6666666666666666,12.666666666666666 +2019-01-26 21:00:00,2530,6,0.6666666666666666,12.666666666666666 +2019-01-27 00:00:00,2530,7,2.0,8.0 +2019-01-27 03:00:00,2530,7,1.3333333333333333,8.0 +2019-01-27 06:00:00,2530,7,1.3333333333333333,8.0 +2019-01-27 09:00:00,2530,7,1.0,8.0 +2019-01-27 12:00:00,2530,7,0.3333333333333333,8.0 +2019-01-27 15:00:00,2530,7,0.3333333333333333,8.0 +2019-01-27 18:00:00,2530,7,1.0,8.0 +2019-01-27 21:00:00,2530,7,0.6666666666666666,8.0 +2019-01-28 00:00:00,2530,8,0.6666666666666666,1.6666666666666665 +2019-01-28 03:00:00,2530,8,0.0,1.6666666666666665 +2019-01-28 06:00:00,2530,8,0.3333333333333333,1.6666666666666665 +2019-01-28 09:00:00,2530,8,0.0,1.6666666666666665 +2019-01-28 12:00:00,2530,8,0.0,1.6666666666666665 +2019-01-28 15:00:00,2530,8,0.3333333333333333,1.6666666666666665 +2019-01-28 18:00:00,2530,8,0.3333333333333333,1.6666666666666665 +2019-01-28 21:00:00,2530,8,0.0,1.6666666666666665 +2019-01-29 00:00:00,2530,9,1.6666666666666665,3.0 +2019-01-29 03:00:00,2530,9,0.0,3.0 +2019-01-29 06:00:00,2530,9,0.0,3.0 +2019-01-29 09:00:00,2530,9,0.3333333333333333,3.0 +2019-01-29 12:00:00,2530,9,0.6666666666666666,3.0 +2019-01-29 15:00:00,2530,9,0.3333333333333333,3.0 +2019-01-29 18:00:00,2530,9,0.0,3.0 +2019-01-29 21:00:00,2530,9,0.0,3.0 +2019-01-30 00:00:00,2530,10,0.0,2.0 +2019-01-30 03:00:00,2530,10,0.0,2.0 +2019-01-30 06:00:00,2530,10,0.0,2.0 +2019-01-30 09:00:00,2530,10,0.0,2.0 +2019-01-30 12:00:00,2530,10,0.0,2.0 +2019-01-30 15:00:00,2530,10,0.0,2.0 +2019-01-30 18:00:00,2530,10,1.0,2.0 +2019-01-30 21:00:00,2530,10,1.0,2.0 +2019-01-31 00:00:00,2530,11,1.0,17.666666666666668 +2019-01-31 03:00:00,2530,11,0.3333333333333333,17.666666666666668 +2019-01-31 06:00:00,2530,11,1.0,17.666666666666668 +2019-01-31 09:00:00,2530,11,1.0,17.666666666666668 +2019-01-31 12:00:00,2530,11,2.6666666666666665,17.666666666666668 +2019-01-31 15:00:00,2530,11,3.3333333333333335,17.666666666666668 +2019-01-31 18:00:00,2530,11,3.0,17.666666666666668 +2019-01-31 21:00:00,2530,11,5.333333333333333,17.666666666666668 +2019-02-01 00:00:00,2530,12,2.3333333333333335,24.0 +2019-02-01 03:00:00,2530,12,3.3333333333333335,24.0 +2019-02-01 06:00:00,2530,12,3.3333333333333335,24.0 +2019-02-01 09:00:00,2530,12,2.3333333333333335,24.0 +2019-02-01 12:00:00,2530,12,2.3333333333333335,24.0 +2019-02-01 15:00:00,2530,12,3.6666666666666665,24.0 +2019-02-01 18:00:00,2530,12,3.0,24.0 +2019-02-01 21:00:00,2530,12,3.6666666666666665,24.0 +2019-02-02 00:00:00,2530,13,3.6666666666666665,24.333333333333332 +2019-02-02 03:00:00,2530,13,4.0,24.333333333333332 +2019-02-02 06:00:00,2530,13,3.0,24.333333333333332 +2019-02-02 09:00:00,2530,13,2.3333333333333335,24.333333333333332 +2019-02-02 12:00:00,2530,13,2.0,24.333333333333332 +2019-02-02 15:00:00,2530,13,3.3333333333333335,24.333333333333332 +2019-02-02 18:00:00,2530,13,3.0,24.333333333333332 +2019-02-02 21:00:00,2530,13,3.0,24.333333333333332 +2019-02-03 00:00:00,2530,14,3.3333333333333335,18.0 +2019-02-03 03:00:00,2530,14,3.0,18.0 +2019-02-03 06:00:00,2530,14,2.6666666666666665,18.0 +2019-02-03 09:00:00,2530,14,1.0,18.0 +2019-02-03 12:00:00,2530,14,1.3333333333333333,18.0 +2019-02-03 15:00:00,2530,14,2.3333333333333335,18.0 +2019-02-03 18:00:00,2530,14,2.0,18.0 +2019-02-03 21:00:00,2530,14,2.3333333333333335,18.0 +2019-02-04 00:00:00,2530,15,0.6666666666666666,10.0 +2019-02-04 03:00:00,2530,15,0.0,10.0 +2019-02-04 06:00:00,2530,15,0.6666666666666666,10.0 +2019-02-04 09:00:00,2530,15,0.3333333333333333,10.0 +2019-02-04 12:00:00,2530,15,1.3333333333333333,10.0 +2019-02-04 15:00:00,2530,15,1.6666666666666665,10.0 +2019-02-04 18:00:00,2530,15,3.0,10.0 +2019-02-04 21:00:00,2530,15,2.3333333333333335,10.0 +2019-02-05 00:00:00,2530,16,3.0,8.0 +2019-02-05 03:00:00,2530,16,1.3333333333333333,8.0 +2019-02-05 06:00:00,2530,16,0.6666666666666666,8.0 +2019-02-05 09:00:00,2530,16,0.3333333333333333,8.0 +2019-02-05 12:00:00,2530,16,0.3333333333333333,8.0 +2019-02-05 15:00:00,2530,16,1.0,8.0 +2019-02-05 18:00:00,2530,16,1.0,8.0 +2019-02-05 21:00:00,2530,16,0.3333333333333333,8.0 +2019-02-06 00:00:00,2530,17,1.0,16.333333333333332 +2019-02-06 03:00:00,2530,17,2.0,16.333333333333332 +2019-02-06 06:00:00,2530,17,2.0,16.333333333333332 +2019-02-06 09:00:00,2530,17,2.6666666666666665,16.333333333333332 +2019-02-06 12:00:00,2530,17,2.6666666666666665,16.333333333333332 +2019-02-06 15:00:00,2530,17,1.3333333333333333,16.333333333333332 +2019-02-06 18:00:00,2530,17,2.3333333333333335,16.333333333333332 +2019-02-06 21:00:00,2530,17,2.3333333333333335,16.333333333333332 +2019-02-07 00:00:00,2530,18,1.6666666666666665,8.0 +2019-02-07 03:00:00,2530,18,1.3333333333333333,8.0 +2019-02-07 06:00:00,2530,18,1.0,8.0 +2019-02-07 09:00:00,2530,18,0.0,8.0 +2019-02-07 12:00:00,2530,18,0.3333333333333333,8.0 +2019-02-07 15:00:00,2530,18,0.6666666666666666,8.0 +2019-02-07 18:00:00,2530,18,1.0,8.0 +2019-02-07 21:00:00,2530,18,2.0,8.0 +2019-02-08 00:00:00,2530,19,2.0,14.666666666666666 +2019-02-08 03:00:00,2530,19,1.6666666666666665,14.666666666666666 +2019-02-08 06:00:00,2530,19,1.6666666666666665,14.666666666666666 +2019-02-08 09:00:00,2530,19,1.3333333333333333,14.666666666666666 +2019-02-08 12:00:00,2530,19,0.6666666666666666,14.666666666666666 +2019-02-08 15:00:00,2530,19,1.3333333333333333,14.666666666666666 +2019-02-08 18:00:00,2530,19,2.3333333333333335,14.666666666666666 +2019-02-08 21:00:00,2530,19,3.6666666666666665,14.666666666666666 +2019-02-09 00:00:00,2530,20,2.6666666666666665,17.0 +2019-02-09 03:00:00,2530,20,2.0,17.0 +2019-02-09 06:00:00,2530,20,2.0,17.0 +2019-02-09 09:00:00,2530,20,2.3333333333333335,17.0 +2019-02-09 12:00:00,2530,20,1.6666666666666665,17.0 +2019-02-09 15:00:00,2530,20,2.3333333333333335,17.0 +2019-02-09 18:00:00,2530,20,3.0,17.0 +2019-02-09 21:00:00,2530,20,1.0,17.0 +2019-02-10 00:00:00,2530,21,2.3333333333333335,9.666666666666666 +2019-02-10 03:00:00,2530,21,2.6666666666666665,9.666666666666666 +2019-02-10 06:00:00,2530,21,0.6666666666666666,9.666666666666666 +2019-02-10 09:00:00,2530,21,1.3333333333333333,9.666666666666666 +2019-02-10 12:00:00,2530,21,0.3333333333333333,9.666666666666666 +2019-02-10 15:00:00,2530,21,0.3333333333333333,9.666666666666666 +2019-02-10 18:00:00,2530,21,1.0,9.666666666666666 +2019-02-10 21:00:00,2530,21,1.0,9.666666666666666 +2019-02-11 00:00:00,2530,22,1.0,15.0 +2019-02-11 03:00:00,2530,22,1.3333333333333333,15.0 +2019-02-11 06:00:00,2530,22,1.6666666666666665,15.0 +2019-02-11 09:00:00,2530,22,0.6666666666666666,15.0 +2019-02-11 12:00:00,2530,22,3.0,15.0 +2019-02-11 15:00:00,2530,22,3.0,15.0 +2019-02-11 18:00:00,2530,22,2.0,15.0 +2019-02-11 21:00:00,2530,22,2.3333333333333335,15.0 +2019-02-12 00:00:00,2530,23,2.0,9.0 +2019-02-12 03:00:00,2530,23,2.3333333333333335,9.0 +2019-02-12 06:00:00,2530,23,0.3333333333333333,9.0 +2019-02-12 09:00:00,2530,23,0.3333333333333333,9.0 +2019-02-12 12:00:00,2530,23,1.0,9.0 +2019-02-12 15:00:00,2530,23,0.6666666666666666,9.0 +2019-02-12 18:00:00,2530,23,0.0,9.0 +2019-02-12 21:00:00,2530,23,2.3333333333333335,9.0 +2019-02-13 00:00:00,2530,24,1.6666666666666665,20.666666666666668 +2019-02-13 03:00:00,2530,24,2.6666666666666665,20.666666666666668 +2019-02-13 06:00:00,2530,24,2.6666666666666665,20.666666666666668 +2019-02-13 09:00:00,2530,24,3.6666666666666665,20.666666666666668 +2019-02-13 12:00:00,2530,24,3.6666666666666665,20.666666666666668 +2019-02-13 15:00:00,2530,24,3.0,20.666666666666668 +2019-02-13 18:00:00,2530,24,1.3333333333333333,20.666666666666668 +2019-02-13 21:00:00,2530,24,2.0,20.666666666666668 +2019-02-14 00:00:00,2530,25,2.6666666666666665,16.333333333333332 +2019-02-14 03:00:00,2530,25,3.3333333333333335,16.333333333333332 +2019-02-14 06:00:00,2530,25,2.3333333333333335,16.333333333333332 +2019-02-14 09:00:00,2530,25,3.0,16.333333333333332 +2019-02-14 12:00:00,2530,25,0.3333333333333333,16.333333333333332 +2019-02-14 15:00:00,2530,25,0.6666666666666666,16.333333333333332 +2019-02-14 18:00:00,2530,25,2.3333333333333335,16.333333333333332 +2019-02-14 21:00:00,2530,25,1.6666666666666665,16.333333333333332 +2019-02-15 00:00:00,2530,26,2.3333333333333335,6.0 +2019-02-15 03:00:00,2530,26,1.0,6.0 +2019-02-15 06:00:00,2530,26,0.6666666666666666,6.0 +2019-02-15 09:00:00,2530,26,0.3333333333333333,6.0 +2019-02-15 12:00:00,2530,26,0.6666666666666666,6.0 +2019-02-15 15:00:00,2530,26,0.3333333333333333,6.0 +2019-02-15 18:00:00,2530,26,0.6666666666666666,6.0 +2019-02-15 21:00:00,2530,26,0.0,6.0 +2019-02-16 00:00:00,2530,27,0.0,6.0 +2019-02-16 03:00:00,2530,27,0.0,6.0 +2019-02-16 06:00:00,2530,27,1.0,6.0 +2019-02-16 09:00:00,2530,27,0.0,6.0 +2019-02-16 12:00:00,2530,27,1.0,6.0 +2019-02-16 15:00:00,2530,27,2.0,6.0 +2019-02-16 18:00:00,2530,27,1.3333333333333333,6.0 +2019-02-16 21:00:00,2530,27,0.6666666666666666,6.0 +2019-02-17 00:00:00,2531,1,0.0,5.666666666666667 +2019-02-17 03:00:00,2531,1,0.0,5.666666666666667 +2019-02-17 06:00:00,2531,1,0.6666666666666666,5.666666666666667 +2019-02-17 09:00:00,2531,1,0.3333333333333333,5.666666666666667 +2019-02-17 12:00:00,2531,1,0.0,5.666666666666667 +2019-02-17 15:00:00,2531,1,0.3333333333333333,5.666666666666667 +2019-02-17 18:00:00,2531,1,2.0,5.666666666666667 +2019-02-17 21:00:00,2531,1,2.3333333333333335,5.666666666666667 +2019-02-18 00:00:00,2531,2,3.0,10.666666666666666 +2019-02-18 03:00:00,2531,2,3.0,10.666666666666666 +2019-02-18 06:00:00,2531,2,0.3333333333333333,10.666666666666666 +2019-02-18 09:00:00,2531,2,1.3333333333333333,10.666666666666666 +2019-02-18 12:00:00,2531,2,1.3333333333333333,10.666666666666666 +2019-02-18 15:00:00,2531,2,1.0,10.666666666666666 +2019-02-18 18:00:00,2531,2,0.3333333333333333,10.666666666666666 +2019-02-18 21:00:00,2531,2,0.3333333333333333,10.666666666666666 +2019-02-19 00:00:00,2531,3,0.3333333333333333,4.0 +2019-02-19 03:00:00,2531,3,1.0,4.0 +2019-02-19 06:00:00,2531,3,1.0,4.0 +2019-02-19 09:00:00,2531,3,0.3333333333333333,4.0 +2019-02-19 12:00:00,2531,3,0.0,4.0 +2019-02-19 15:00:00,2531,3,0.3333333333333333,4.0 +2019-02-19 18:00:00,2531,3,0.6666666666666666,4.0 +2019-02-19 21:00:00,2531,3,0.3333333333333333,4.0 +2019-02-20 00:00:00,2531,4,0.3333333333333333,5.0 +2019-02-20 03:00:00,2531,4,0.0,5.0 +2019-02-20 06:00:00,2531,4,0.3333333333333333,5.0 +2019-02-20 09:00:00,2531,4,0.0,5.0 +2019-02-20 12:00:00,2531,4,0.3333333333333333,5.0 +2019-02-20 15:00:00,2531,4,1.0,5.0 +2019-02-20 18:00:00,2531,4,1.3333333333333333,5.0 +2019-02-20 21:00:00,2531,4,1.6666666666666665,5.0 +2019-02-21 00:00:00,2531,5,2.6666666666666665,18.333333333333332 +2019-02-21 03:00:00,2531,5,2.0,18.333333333333332 +2019-02-21 06:00:00,2531,5,3.6666666666666665,18.333333333333332 +2019-02-21 09:00:00,2531,5,1.6666666666666665,18.333333333333332 +2019-02-21 12:00:00,2531,5,2.6666666666666665,18.333333333333332 +2019-02-21 15:00:00,2531,5,1.6666666666666665,18.333333333333332 +2019-02-21 18:00:00,2531,5,1.0,18.333333333333332 +2019-02-21 21:00:00,2531,5,3.0,18.333333333333332 +2019-02-22 00:00:00,2531,6,2.0,6.333333333333333 +2019-02-22 03:00:00,2531,6,0.3333333333333333,6.333333333333333 +2019-02-22 06:00:00,2531,6,1.0,6.333333333333333 +2019-02-22 09:00:00,2531,6,0.6666666666666666,6.333333333333333 +2019-02-22 12:00:00,2531,6,0.3333333333333333,6.333333333333333 +2019-02-22 15:00:00,2531,6,0.0,6.333333333333333 +2019-02-22 18:00:00,2531,6,0.6666666666666666,6.333333333333333 +2019-02-22 21:00:00,2531,6,1.3333333333333333,6.333333333333333 +2019-02-23 00:00:00,2531,7,0.3333333333333333,2.6666666666666665 +2019-02-23 03:00:00,2531,7,0.0,2.6666666666666665 +2019-02-23 06:00:00,2531,7,0.3333333333333333,2.6666666666666665 +2019-02-23 09:00:00,2531,7,0.0,2.6666666666666665 +2019-02-23 12:00:00,2531,7,0.0,2.6666666666666665 +2019-02-23 15:00:00,2531,7,1.0,2.6666666666666665 +2019-02-23 18:00:00,2531,7,1.0,2.6666666666666665 +2019-02-23 21:00:00,2531,7,0.0,2.6666666666666665 +2019-02-24 00:00:00,2531,8,0.0,2.3333333333333335 +2019-02-24 03:00:00,2531,8,0.0,2.3333333333333335 +2019-02-24 06:00:00,2531,8,0.6666666666666666,2.3333333333333335 +2019-02-24 09:00:00,2531,8,0.6666666666666666,2.3333333333333335 +2019-02-24 12:00:00,2531,8,1.0,2.3333333333333335 +2019-02-24 15:00:00,2531,8,0.0,2.3333333333333335 +2019-02-24 18:00:00,2531,8,0.0,2.3333333333333335 +2019-02-24 21:00:00,2531,8,0.0,2.3333333333333335 +2019-02-25 00:00:00,2531,9,0.0,2.0 +2019-02-25 03:00:00,2531,9,0.0,2.0 +2019-02-25 06:00:00,2531,9,0.6666666666666666,2.0 +2019-02-25 09:00:00,2531,9,0.3333333333333333,2.0 +2019-02-25 12:00:00,2531,9,0.0,2.0 +2019-02-25 15:00:00,2531,9,0.3333333333333333,2.0 +2019-02-25 18:00:00,2531,9,0.0,2.0 +2019-02-25 21:00:00,2531,9,0.6666666666666666,2.0 +2019-02-26 00:00:00,2531,10,0.6666666666666666,3.3333333333333335 +2019-02-26 03:00:00,2531,10,0.0,3.3333333333333335 +2019-02-26 06:00:00,2531,10,0.0,3.3333333333333335 +2019-02-26 09:00:00,2531,10,0.6666666666666666,3.3333333333333335 +2019-02-26 12:00:00,2531,10,0.3333333333333333,3.3333333333333335 +2019-02-26 15:00:00,2531,10,1.0,3.3333333333333335 +2019-02-26 18:00:00,2531,10,0.0,3.3333333333333335 +2019-02-26 21:00:00,2531,10,0.6666666666666666,3.3333333333333335 +2019-02-27 00:00:00,2531,11,1.0,16.0 +2019-02-27 03:00:00,2531,11,0.0,16.0 +2019-02-27 06:00:00,2531,11,0.6666666666666666,16.0 +2019-02-27 09:00:00,2531,11,1.0,16.0 +2019-02-27 12:00:00,2531,11,3.0,16.0 +2019-02-27 15:00:00,2531,11,3.3333333333333335,16.0 +2019-02-27 18:00:00,2531,11,3.0,16.0 +2019-02-27 21:00:00,2531,11,4.0,16.0 +2019-02-28 00:00:00,2531,12,4.333333333333333,28.666666666666668 +2019-02-28 03:00:00,2531,12,3.3333333333333335,28.666666666666668 +2019-02-28 06:00:00,2531,12,2.0,28.666666666666668 +2019-02-28 09:00:00,2531,12,3.3333333333333335,28.666666666666668 +2019-02-28 12:00:00,2531,12,4.333333333333333,28.666666666666668 +2019-02-28 15:00:00,2531,12,3.6666666666666665,28.666666666666668 +2019-02-28 18:00:00,2531,12,4.666666666666667,28.666666666666668 +2019-02-28 21:00:00,2531,12,3.0,28.666666666666668 From a93df8bf38417a6705359415d2d33c256bb5f55f Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 29 Nov 2022 10:48:28 -0500 Subject: [PATCH 017/171] TST: added metadata unit tests Added unit test for the Bartel metadata initialization function. --- pysatSpaceWeather/tests/test_methods_kp.py | 89 ++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/pysatSpaceWeather/tests/test_methods_kp.py b/pysatSpaceWeather/tests/test_methods_kp.py index b08cb232..516bddf7 100644 --- a/pysatSpaceWeather/tests/test_methods_kp.py +++ b/pysatSpaceWeather/tests/test_methods_kp.py @@ -163,6 +163,95 @@ def teardown_method(self): return +class TestBartelInitMetadata(TestKpInitMetadata): + """Test class for Bartel metadata initialization methods.""" + + def setup_method(self): + """Create a clean testing setup.""" + self.test_function = kp_ap.initialize_bartel_metadata + + # Load a test instrument + self.testInst = pysat.Instrument('pysat', 'testing', num_samples=12, + use_header=True) + test_time = pysat.instruments.pysat_testing._test_dates[''][''] + + load_kwargs = {'date': test_time} + if Version(pysat.__version__) > Version('3.0.1'): + load_kwargs['use_header'] = True + + self.testInst.load(**load_kwargs) + + # Create Kp data + self.testInst.data.index = pds.DatetimeIndex(data=[ + test_time + dt.timedelta(hours=3 * i) for i in range(12)]) + self.testInst['Kp'] = np.arange(0, 4, 1.0 / 3.0) + self.testInst['ap_nan'] = np.full(shape=12, fill_value=np.nan) + self.testInst['ap_inf'] = np.full(shape=12, fill_value=np.inf) + self.testInst['Bartel_solar_rotation_num'] = np.arange(3000, 3012) + self.testInst['day_within_Bartel_solar_rotation'] = np.arange(1, 13) + self.testInst.meta['Kp'] = {self.testInst.meta.labels.fill_val: np.nan} + self.testInst.meta['ap_nan'] = {self.testInst.meta.labels.fill_val: + np.nan} + self.testInst.meta['ap_inf'] = {self.testInst.meta.labels.fill_val: + np.inf} + self.testInst.meta['Bartels_solar_rotation_num'] = { + self.testInst.meta.labels.fill_val: -1} + self.testInst.meta['day_within_Bartels_solar_rotation'] = { + self.testInst.meta.labels.fill_val: -1} + + # Set the default values + self.units = '' + self.name = 'Bartels_solar_rotation_num' + self.desc = ''.join(['A sequence of 27-day intervals counted from ', + 'February 8, 1832']) + self.min_val = 1 + self.max_val = np.inf + self.fill_val = -1 + + # Load a test Metadata + self.testMeta = pysat.Meta() + return + + def teardown_method(self): + """Clean up previous testing setup.""" + del self.test_function, self.testInst, self.testMeta + return + + def eval_defaults(self, mdata): + """Evaluate the outputs of the metadata. + + Parameters + ---------- + mdata : pds.Series + Metadata for a desired variable + + """ + if self.name.find('day_within') >= 0: + self.units = 'day' + self.name = 'Days within Bartels solar rotation' + self.desc = 'Number of day within the Bartels solar rotation' + self.max_val = 27 + else: + self.name = 'Bartels solar rotation number' + + assert mdata[self.testInst.meta.labels.units] == self.units + assert mdata[self.testInst.meta.labels.name] == self.name + assert mdata[self.testInst.meta.labels.desc] == self.desc + assert mdata[self.testInst.meta.labels.max_val] == self.max_val + assert mdata[self.testInst.meta.labels.min_val] == self.min_val + assert mdata[self.testInst.meta.labels.fill_val] == self.fill_val + + return + + def test_long_name_metadata(self): + """Test metadata initialization with a long name.""" + self.name = 'day_within_Bartels_solar_rotation' + self.test_function(self.testInst.meta, self.name) + self.eval_defaults(self.testInst.meta[self.name]) + + return + + class TestSWKp(object): """Test class for Kp methods.""" From 72e8c0ff84c2e92c3462db0dc8b7d34e85f34ce0 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 29 Nov 2022 11:47:29 -0500 Subject: [PATCH 018/171] DOC: improved logger warning Improved the logging warning to be more descriptive. --- pysatSpaceWeather/instruments/methods/ace.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index 7bbbfd4e..9ccb8159 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -195,7 +195,9 @@ def download(date_array, name, tag='', inst_id='', data_path='', now=None): if(len(date_array) > 1 or date_array[0].year != now.year or date_array[0].month != now.month or date_array[0].day != now.day): - logger.warning('real-time data only available for current day') + logger.warning(''.join(['real-time data only available for current', + ' day, data in this file will have the ', + 'wrong date'])) else: data_rate = 1 if name in ['mag', 'swepam'] else 5 file_fmt = '_'.join(["%Y%m%d", "ace", name, From 84388d51d8e7577e62dee97eb509c9c3304a5039 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 29 Nov 2022 11:48:03 -0500 Subject: [PATCH 019/171] TST: improved unit test coverage Added unit test coverage for many of the uncovered lines. --- pysatSpaceWeather/tests/test_instruments.py | 81 ++++++++++++++++++++- pysatSpaceWeather/tests/test_methods_ace.py | 10 +++ pysatSpaceWeather/tests/test_methods_gfz.py | 43 +++++++++++ pysatSpaceWeather/tests/test_methods_kp.py | 10 +++ 4 files changed, 141 insertions(+), 3 deletions(-) create mode 100644 pysatSpaceWeather/tests/test_methods_gfz.py diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index 4ca55765..67210f1e 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -9,6 +9,7 @@ import datetime as dt import logging import pytest +import tempfile import warnings # Make sure to import your instrument library here @@ -88,14 +89,23 @@ class TestSWInstrumentLogging(object): def setup_method(self): """Create a clean the testing setup.""" + # Prepare for testing downloads + self.tempdir = tempfile.TemporaryDirectory() + self.saved_path = pysat.params['data_dirs'] + pysat.params._set_data_dirs(path=self.tempdir.name, store=False) + # Assign the Instrument kwargs self.inst_kwargs = [ - {'inst_module': pysatSpaceWeather.instruments.sw_kp}] + {'inst_module': pysatSpaceWeather.instruments.sw_kp}, + {'inst_module': pysatSpaceWeather.instruments.ace_epam}, + {'inst_module': pysatSpaceWeather.instruments.sw_f107}] def teardown_method(self): """Clean up previous testing setup.""" + # Clean up the pysat parameter space + pysat.params._set_data_dirs(self.saved_path, store=False) - del self.inst_kwargs + del self.inst_kwargs, self.tempdir, self.saved_path return @pytest.mark.parametrize("tag", ["def", "now"]) @@ -108,18 +118,83 @@ def test_missing_kp_file(self, tag, caplog): Kp Instrument tag """ + # Initalize the Instrument and time inst = pysat.Instrument(tag=tag, **self.inst_kwargs[0]) future_time = inst.today() + dt.timedelta(weeks=500) + cap_text = 'Unable to download' + # Get the logging message with caplog.at_level(logging.INFO, logger='pysat'): inst.download(start=future_time) + # Test the warning + captured = caplog.text + assert captured.find(cap_text) >= 0, "Unexpected text: {:}".format( + captured) + + # Test the file was not downloaded + assert future_time not in inst.files.files.index + + return + + def test_realtime_ace_bad_day(self, caplog): + """Test message raised when downloading old ACE realtime data.""" + inst = pysat.Instrument(tag='realtime', **self.inst_kwargs[1]) + past_time = inst.today() - dt.timedelta(weeks=500) + + # Get the logging message + with caplog.at_level(logging.WARNING, logger='pysat'): + inst.download(start=past_time) + # Test the warning captured = caplog.text assert captured.find( - 'Unable to download') >= 0, "Unexpected text: {:}".format(captured) + 'real-time data only') >= 0, "Unexpected text: {:}".format(captured) + + # Test the file was downloaded + assert past_time in inst.files.files.index + + return + + def test_historic_ace_no_data(self, caplog): + """Test message raised when no historic ACE data found on server.""" + inst = pysat.Instrument(tag='historic', **self.inst_kwargs[1]) + past_time = dt.datetime(1800, 1, 1) # Pre-space age date + + # Get the logging message + with caplog.at_level(logging.WARNING, logger='pysat'): + inst.download(start=past_time) + + # Test the warning + captured = caplog.text + assert captured.find( + 'not found on server') >= 0, "Unexpected text: {:}".format(captured) + + # Test the file was not downloaded + assert past_time not in inst.files.files.index + + return + + def test_missing_prelim_file(self, caplog): + """Test message raised if loading times not in the DSD database.""" + # Initalize the Instrument, time, and expected log output + inst = pysat.Instrument(tag='prelim', **self.inst_kwargs[2]) + future_time = inst.today() + dt.timedelta(weeks=500) + cap_text = 'File not available for' + + # Get the logging message + with caplog.at_level(logging.INFO, logger='pysat'): + inst.download(start=future_time) + + # Test the warning + captured = caplog.text + assert captured.find(cap_text) >= 0, "Unexpected text: {:}".format( + captured) # Test the file was not downloaded assert future_time not in inst.files.files.index return + + + diff --git a/pysatSpaceWeather/tests/test_methods_ace.py b/pysatSpaceWeather/tests/test_methods_ace.py index de42603e..249b6159 100644 --- a/pysatSpaceWeather/tests/test_methods_ace.py +++ b/pysatSpaceWeather/tests/test_methods_ace.py @@ -47,6 +47,16 @@ def test_references_bad_name(self): assert str(kerr.value).find('unknown ACE instrument') >= 0 return + def test_clean_bad_inst(self): + """Test AttributeError is raised with a non-ACE instrument.""" + inst = pysat.Instrument('pysat', 'testing') + + with pytest.raises(AttributeError) as aerr: + mm_ace.clean(inst) + + assert str(aerr.value).find("Can't apply ACE cleaning to platform") >= 0 + return + @pytest.mark.skipif(Version(pysat.__version__) < Version('3.0.2'), reason="Requires time routine available in pysat 3.0.2+") diff --git a/pysatSpaceWeather/tests/test_methods_gfz.py b/pysatSpaceWeather/tests/test_methods_gfz.py new file mode 100644 index 00000000..87436aaf --- /dev/null +++ b/pysatSpaceWeather/tests/test_methods_gfz.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# ---------------------------------------------------------------------------- +"""Integration and unit test suite for ACE methods.""" + +import datetime as dt +import pytest +import tempfile + +import pysat + +from pysatSpaceWeather.instruments.methods import gfz + + +class TestGFZMethods(object): + """Test class for ACE methods.""" + + def setup_method(self): + """Create a clean testing setup.""" + # Prepare for testing downloads + self.tempdir = tempfile.TemporaryDirectory() + self.saved_path = pysat.params['data_dirs'] + pysat.params._set_data_dirs(path=self.tempdir.name, store=False) + return + + def teardown_method(self): + """Clean up previous testing setup.""" + # Clean up the pysat parameter space + pysat.params._set_data_dirs(self.saved_path, store=False) + + del self.tempdir, self.saved_path + return + + def test_kp_ap_cp_download_bad_inst(self): + """Test the download doesn't work for an incorrect Instrument.""" + with pytest.raises(ValueError) as verr: + gfz.kp_ap_cp_download('platform', 'name', 'tag', 'inst_id', + [dt.datetime.utcnow()], 'data/path') + + assert str(verr).find('Unknown Instrument module') >= 0 + return diff --git a/pysatSpaceWeather/tests/test_methods_kp.py b/pysatSpaceWeather/tests/test_methods_kp.py index 516bddf7..212e1e0e 100644 --- a/pysatSpaceWeather/tests/test_methods_kp.py +++ b/pysatSpaceWeather/tests/test_methods_kp.py @@ -251,6 +251,16 @@ def test_long_name_metadata(self): return + def test_bad_data_variable(self): + """Test metadata initialization doesn't work with the wrong variable.""" + self.name = 'Kp' + + with pytest.raises(ValueError) as verr: + self.test_function(self.testInst.meta, self.name) + + assert str(verr).find('unknown data key') >= 0 + return + class TestSWKp(object): """Test class for Kp methods.""" From 6d40d59b234129b414bebc94d3de3c922b57982e Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 29 Nov 2022 13:04:48 -0500 Subject: [PATCH 020/171] DOC: updated changelog Added a summary of the changes to the log. --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d48d7b0..3bb9a763 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ This project adheres to [Semantic Versioning](https://semver.org/). [0.1.0] - 2022-XX-XX -------------------- +* Enhacements + * Changed downloads to write files across multiple Instruments, when the + remote files contain a mix of data products + * Added new instruments: sw_ap, sw_cp, sw_flare, sw_polar-cap, sw_sbfield, + sw_ssn, and sw_storm-prob + * Added new examples to the documentation * Maintenance * Updated the GitHub action version numbers * Updated syntax for pysat instrument testing suite From a15294684482f5d1f65ff9b81f970b05d2e3e71c Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 29 Nov 2022 13:05:18 -0500 Subject: [PATCH 021/171] DOC: updated contributing Updated the contributing guidelines to contain a note on when multiple Instrument downloads should be supported. --- CONTRIBUTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7c82d968..199ca9e4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -152,3 +152,5 @@ These include: * Block and inline comments should use proper English grammar and punctuation with the exception of single sentences in a block, which may then ommit the final period +* Data files that provide multiple products should be stored, when possible, + into separate files with only the data for each Instrument contained within From 62f174b439ba645cc0108afbcac43b36a02143c6 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 29 Nov 2022 13:05:38 -0500 Subject: [PATCH 022/171] DOC: updated API Updated the API to include the new sub-modules. --- docs/methods.rst | 32 +++++++++ docs/supported_instruments.rst | 125 +++++++++++++++++++++++++++++++-- 2 files changed, 153 insertions(+), 4 deletions(-) diff --git a/docs/methods.rst b/docs/methods.rst index 4092bc73..6a958bd6 100644 --- a/docs/methods.rst +++ b/docs/methods.rst @@ -35,6 +35,28 @@ F \ :sub:`10.7`\ data obtained from multiple sources. .. automodule:: pysatSpaceWeather.instruments.methods.f107 :members: + +General +------- + +General functions that are useful across platforms. + + +.. automodule:: pysatSpaceWeather.instruments.methods.general + :members: + + +GFZ +--- + +Supports the German Research Centre for Geosciences at Potsdam (GFZ) data +products. + + +.. automodule:: pysatSpaceWeather.instruments.methods.gfz + :members: + + Kp and Ap --------- Supports the Kp instrument by providing reference and acknowledgement @@ -45,3 +67,13 @@ filter for other data sets. .. automodule:: pysatSpaceWeather.instruments.methods.kp_ap :members: + + +SWPC +---- + +Supports the Space Weather Prediction Center (SWPC) data products. + + +.. automodule:: pysatSpaceWeather.instruments.methods.swpc + :members: diff --git a/docs/supported_instruments.rst b/docs/supported_instruments.rst index 33aa8aee..e696205b 100644 --- a/docs/supported_instruments.rst +++ b/docs/supported_instruments.rst @@ -66,10 +66,56 @@ Supports ACE Solar Wind Electron Proton Alpha Monitor data. :members: +.. _sw-inst: +SW +--- + +The Space Weather (SW) platform encompasses space weather indices that may be +found across a variety of platforms. Many of the remote centers that provide +these data sets include multiple types of data in each file. From +:py:mod:`pysatSpaceWeather` version 0.1.0, the remote information is separated +by :py:class:`pysat.Instrument` and saved into appropriate files. For example, +the definitive Kp data from the German Research Centre for Geosciences at +Potsdam (GFZ) will also download Ap and Cp data files. + + +.. _ap-inst: + +Ap +--- + +Ap is a geomagnetic index that reflects the magnitude of geomagnetic +disturbances at Earth, but unlike the Kp uses a linear scale. Historic, recent +(last 30 days), and forecasted values are available from +`GFZ `_ and the +`SWPC Forecasts page `_. + + +.. automodule:: pysatSpaceWeather.instruments.sw_ap + :members: + + + +.. _cp-inst: + +Cp +--- + +Cp is a derivative geomagnetic index that provides a qualitative estimate of the +overall level of magnetic activity for the day. The C9 index provides the same +information on a scale from 0-9 instead of 0.0-2.5. Historic values are +available from +`GFZ `_. + + +.. automodule:: pysatSpaceWeather.instruments.sw_cp + :members: + + .. _dst-inst: Dst ---- +^^^ The Disturbance Storm Time (Dst) Index is a measure of magnetic activity associated with the ring current. The National Geophysical Data Center (NGDC) @@ -89,7 +135,7 @@ You can learn more about the Dst Index at the .. _f107-inst: F \ :sub:`10.7`\ ----------------- +^^^^^^^^^^^^^^^^ F \ :sub:`10.7`\ is the 10.7 cm radio solar flux (measured in solar flux units, sfu) `[Cortie 1912] `_. @@ -102,6 +148,22 @@ Historic indices, real-time indices, and forecasted indices are available from :members: +.. _flare-inst: + +Solar Flares +^^^^^^^^^^^^ + +Solar flares have been monitored for decates, and the data has been compiled +into standard measurements from different data sets. Historic indices, +real-time indices, and forecasted indices are available from +`SWPC `_. + + +.. automodule:: pysatSpaceWeather.instruments.sw_flare + :members: + + + .. _kp-inst: Kp @@ -109,10 +171,65 @@ Kp Kp is a geomagnetic index that reflects the magnitude of geomagnetic disturbances at Earth. Historic, recent (last 30 days), and forecasted values -are available from the German Research Centre for Geosciences at Potsdam, -`GFZ `_, and the +are available from `GFZ `_, and the `SWPC Kp page `_. .. automodule:: pysatSpaceWeather.instruments.sw_kp :members: + + +.. _pc-inst: + +Polar Cap +^^^^^^^^^ + +Polar cap indices have been developed to provide information about high-latitude +conditions and inform ionospheric space weather models. Currently, this +Instrument provides absorption predictions from SWPC. + +.. automodule:: pysatSpaceWeather.instruments.sw_polar-cap + :members: + + +.. _sbfield-inst: + +Solar Magnetic Field +^^^^^^^^^^^^^^^^^^^^ + +The solar mean field provides a measure of of mean solar magnetic field using +full-disk optical observations of the iron line. The first observations were +made at Stanford by +`Scherrer et al. `_. + +.. automodule:: pysatSpaceWeather.instruments.sw_sbfield + :members: + + +.. _ssn-inst: + +Sunspot Number +^^^^^^^^^^^^^^ + +The Sunspot Number (SSN) is one of the oldest continuously measured solar +indices. Currently, this Instrument provides preliminary and daily values from +SWPC (for example, here is the +`forecast page `_). + +.. automodule:: pysatSpaceWeather.instruments.sw_ssn + :members: + + +.. _storm-prob-inst: + +Storm Probability +^^^^^^^^^^^^^^^^^ + +Geomagnetic storm predictions are provided by SWPC for global, high-latitude, +and mid-latitude regions. SWPC uses the +`NOAA SW scales `_, which +are explained here. + +.. automodule:: pysatSpaceWeather.instruments.sw_storm-prob + :members: + From 35e1274fb6b97d06a0c403fbbc2d20c5cd12cefe Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 29 Nov 2022 13:06:07 -0500 Subject: [PATCH 023/171] DOC: added multi-download example Added a multi-download example with a table containing all the Instruments that currently use this functionality. --- docs/examples/ex_mult_downloads.rst | 76 +++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 docs/examples/ex_mult_downloads.rst diff --git a/docs/examples/ex_mult_downloads.rst b/docs/examples/ex_mult_downloads.rst new file mode 100644 index 00000000..418218d2 --- /dev/null +++ b/docs/examples/ex_mult_downloads.rst @@ -0,0 +1,76 @@ +.. _exmultdown: + +Downloading data from multiple Instruments +========================================== + +Unlike most data sets, space weather index data sets often contain a combination +of related indices. This means that data from multiple +:py:class:`pysat.Instrument` sub-modules may be available in a single file. +Starting in :py:mod:`pysatSpaceWeather` version 0.1.0, this data is saved for +all :py:class:`pysat.Instrument` sub-modules when downloading any one of them. +In this way, downloads are minimized and no data sets are hidden or thrown away. +The following example returns both F\ :sub:`10.7`\ and Ap forecasts from SWPC. +Previously, this data was contained in +:py:mod:`pysatSpaceWeather.instruments.sw_f107`, which does not contain Ap data +for all ``tag`` values. + +:: + + import pysat + import pysatSpaceWeather as py_sw + + f107 = pysat.Instrument(inst_module=py_sw.instruments.sw_f107, tag='45day') + ap = pysat.Instrument(inst_module=py_sw.instruments.sw_ap, tag='45day') + + # Test to see this data hasn't already been downloaded + assert (ap.today() not in f107.files.files) and (ap.today() + not in ap.files.files) + + # Download both data sets using only one Instrument + f107.download(start=f107.tomorrow()) + + # Show that both files have been downloaded + print(f107.files.files[f107.today()], ap.files.files[ap.today()]) + + +This will yield ``f107_45day_YYYY-MM-DD.txt ap_45day_YYYY-MM-DD.txt``, where +YYYY-MM-DD is the day you run this example. The table below shows a list of +the :py:class:`pysat.Instrument` sub-modules and tags that download multiple +data sets. When possible, the same tag has been used across +:py:class:`pysat.Instrument` sub-modules. + + ++----------------------+----------+------------+------------+------------+ +| Remote Data Set | Platform | Name | Tag(s) | Inst ID(s) | ++======================+==========+============+============+============+ +| GFZ Kp | SW | Kp | def, now | | +| | | Ap | | | +| | | Cp | | | ++----------------------+----------+------------+------------+------------+ +| SWPC Daily DSD | SW | F107 | daily | | +| | | Flare | | | +| | | SSN | | | +| | | SBField | | | ++----------------------+----------+------------+------------+------------+ +| SWPC Prelim DSD | SW | F107 | prelim | | +| | | Flare | | | +| | | SSN | | | +| | | SBField | | | ++----------------------+----------+------------+------------+------------+ +| SWPC 3-day Solar-Geo | SW | F107 | forecast | | +| Predictions | | Kp | prediction | | +| | | Ap | | | +| | | Storm-Prob | | | +| | | Flare | | | +| | | Polar-Cap | | | ++----------------------+----------+------------+------------+------------+ +| SWPC 3-day Geomag | SW | Kp | forecast | | +| Forecast | | Ap | | | +| | | Storm-Prob | | | ++----------------------+----------+------------+------------+------------+ +| SWPC Daily Geomag | SW | Kp | recent | | +| | | Ap | | | ++----------------------+----------+------------+------------+------------+ +| SWPC 45-day Forecast | SW | F107 | 45day | | +| | | Ap | | | ++----------------------+----------+------------+------------+------------+ From a5d2fc0f957bdd134bf4d5bbc983e184e0af04e7 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 30 Nov 2022 09:34:10 -0500 Subject: [PATCH 024/171] STY: removed extra whitespace Removed extra whitespace from the test file. --- pysatSpaceWeather/tests/test_instruments.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index 272bc217..42589f72 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -211,6 +211,3 @@ def test_missing_prelim_file(self, caplog): assert future_time not in inst.files.files.index return - - - From 93a48451f2870cb3c3f0f5a3092f54d1005312be Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 30 Nov 2022 12:15:27 -0500 Subject: [PATCH 025/171] BUG: added cleanup command Added a cleanup command for the logging test class. --- pysatSpaceWeather/tests/test_instruments.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index 42589f72..b5cdd640 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -106,6 +106,7 @@ def teardown_method(self): """Clean up previous testing setup.""" # Clean up the pysat parameter space pysat.params._set_data_dirs(self.saved_path, store=False) + self.tempdir.cleanup() del self.inst_kwargs, self.tempdir, self.saved_path return From 092562e6829b039d444b109df0ce01663a3bd366 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 30 Nov 2022 12:26:13 -0500 Subject: [PATCH 026/171] BUG: attempted windows fix Attempt windows fix using pysat test class. --- pysatSpaceWeather/tests/test_instruments.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index b5cdd640..bf8fc804 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -18,6 +18,7 @@ # Import the test classes from pysat import pysat from pysat.tests.classes import cls_instrument_library as clslib +from pysat.tests.classes.cls_ci import CICleanSetup from pysat.utils import testing @@ -83,14 +84,14 @@ def test_sw_kp_default_tag_deprecation(self): return -class TestSWInstrumentLogging(object): +class TestSWInstrumentLogging(CICleanSetup): """Test logging messages raised under instrument-specific conditions.""" def setup_method(self): """Create a clean the testing setup.""" # Prepare for testing downloads + CICleanSetup.setup(self) self.tempdir = tempfile.TemporaryDirectory() - self.saved_path = pysat.params['data_dirs'] pysat.params._set_data_dirs(path=self.tempdir.name, store=False) # Assign the Instrument kwargs @@ -105,10 +106,10 @@ def setup_method(self): def teardown_method(self): """Clean up previous testing setup.""" # Clean up the pysat parameter space - pysat.params._set_data_dirs(self.saved_path, store=False) + CICleanSetup.teardown(self) self.tempdir.cleanup() - del self.inst_kwargs, self.tempdir, self.saved_path + del self.inst_kwargs, self.tempdir return def test_historic_download_past_limit(self, caplog): From c0b42d1d9574c9c4cf4e797b279c8a53d9e576a9 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 30 Nov 2022 12:45:28 -0500 Subject: [PATCH 027/171] BUG: attempt file cleanup Attempt local file cleanup without tempdir. --- pysatSpaceWeather/tests/test_instruments.py | 24 +++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index bf8fc804..ae915877 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -8,8 +8,8 @@ import datetime as dt import logging +import os import pytest -import tempfile import warnings # Make sure to import your instrument library here @@ -18,7 +18,6 @@ # Import the test classes from pysat import pysat from pysat.tests.classes import cls_instrument_library as clslib -from pysat.tests.classes.cls_ci import CICleanSetup from pysat.utils import testing @@ -84,15 +83,15 @@ def test_sw_kp_default_tag_deprecation(self): return -class TestSWInstrumentLogging(CICleanSetup): +class TestSWInstrumentLogging(object): """Test logging messages raised under instrument-specific conditions.""" def setup_method(self): """Create a clean the testing setup.""" # Prepare for testing downloads - CICleanSetup.setup(self) - self.tempdir = tempfile.TemporaryDirectory() - pysat.params._set_data_dirs(path=self.tempdir.name, store=False) + self.saved_path = pysat.params['data_dirs'] + pysat.params.data['data_dirs'] = [pysatSpaceWeather.test_data_path] + self.saved_file = None # Assign the Instrument kwargs self.inst_kwargs = [ @@ -106,10 +105,15 @@ def setup_method(self): def teardown_method(self): """Clean up previous testing setup.""" # Clean up the pysat parameter space - CICleanSetup.teardown(self) - self.tempdir.cleanup() + pysat.params.data['data_dirs'] = self.saved_path - del self.inst_kwargs, self.tempdir + if self.saved_file is not None: + attempts = 0 + while os.path.isfile(self.saved_file) and attempts < 100: + os.remove(self.saved_file) + attempts += 1 + + del self.inst_kwargs, self.tempdir, self.saved_path, self.saved_file return def test_historic_download_past_limit(self, caplog): @@ -171,6 +175,8 @@ def test_realtime_ace_bad_day(self, caplog): # Test the file was downloaded assert past_time in inst.files.files.index + self.saved_file = os.path.join(inst.files.data_path, + inst.files.files[past_time]) return From 6bb2779fde7a5d0578040978cad030e49161966d Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 30 Nov 2022 12:49:36 -0500 Subject: [PATCH 028/171] DOC: updated documentation style Fixed the supported instrument headers and added the new example to the examples table of contents. --- docs/examples.rst | 1 + docs/supported_instruments.rst | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/docs/examples.rst b/docs/examples.rst index 42e74d44..3ffaf70b 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -9,3 +9,4 @@ tools examples/ex_f107.rst examples/ex_kp.rst examples/ex_ace.rst + examples/ex_mult_downloads.rst diff --git a/docs/supported_instruments.rst b/docs/supported_instruments.rst index e696205b..0923c378 100644 --- a/docs/supported_instruments.rst +++ b/docs/supported_instruments.rst @@ -79,10 +79,10 @@ the definitive Kp data from the German Research Centre for Geosciences at Potsdam (GFZ) will also download Ap and Cp data files. -.. _ap-inst: +.. _sw-ap-inst: Ap ---- +^^^ Ap is a geomagnetic index that reflects the magnitude of geomagnetic disturbances at Earth, but unlike the Kp uses a linear scale. Historic, recent @@ -96,10 +96,10 @@ disturbances at Earth, but unlike the Kp uses a linear scale. Historic, recent -.. _cp-inst: +.. _sw-cp-inst: Cp ---- +^^^ Cp is a derivative geomagnetic index that provides a qualitative estimate of the overall level of magnetic activity for the day. The C9 index provides the same @@ -112,7 +112,7 @@ available from :members: -.. _dst-inst: +.. _sw-dst-inst: Dst ^^^ @@ -132,7 +132,7 @@ You can learn more about the Dst Index at the :members: -.. _f107-inst: +.. _sw-f107-inst: F \ :sub:`10.7`\ ^^^^^^^^^^^^^^^^ @@ -148,7 +148,7 @@ Historic indices, real-time indices, and forecasted indices are available from :members: -.. _flare-inst: +.. _sw-flare-inst: Solar Flares ^^^^^^^^^^^^ @@ -164,10 +164,10 @@ real-time indices, and forecasted indices are available from -.. _kp-inst: +.. _sw-kp-inst: Kp ---- +^^^ Kp is a geomagnetic index that reflects the magnitude of geomagnetic disturbances at Earth. Historic, recent (last 30 days), and forecasted values @@ -179,7 +179,7 @@ are available from `GFZ `_, and the :members: -.. _pc-inst: +.. _sw-pc-inst: Polar Cap ^^^^^^^^^ @@ -192,7 +192,7 @@ Instrument provides absorption predictions from SWPC. :members: -.. _sbfield-inst: +.. _sw-sbfield-inst: Solar Magnetic Field ^^^^^^^^^^^^^^^^^^^^ @@ -206,7 +206,7 @@ made at Stanford by :members: -.. _ssn-inst: +.. _sw-ssn-inst: Sunspot Number ^^^^^^^^^^^^^^ @@ -220,7 +220,7 @@ SWPC (for example, here is the :members: -.. _storm-prob-inst: +.. _sw-storm-prob-inst: Storm Probability ^^^^^^^^^^^^^^^^^ From 18cc389ce60a1901fa8b0ddc76de98989a4aecfd Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 30 Nov 2022 12:50:24 -0500 Subject: [PATCH 029/171] BUG: removed old attribute Removed an old attribute name. --- pysatSpaceWeather/tests/test_instruments.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index ae915877..39661703 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -113,7 +113,7 @@ def teardown_method(self): os.remove(self.saved_file) attempts += 1 - del self.inst_kwargs, self.tempdir, self.saved_path, self.saved_file + del self.inst_kwargs, self.saved_path, self.saved_file return def test_historic_download_past_limit(self, caplog): From 980faddae205aa00efb76c3283598287f6559464 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 30 Nov 2022 13:53:21 -0500 Subject: [PATCH 030/171] TST: improved dir cleanup Improved the directory cleanup from the logging tests. --- pysatSpaceWeather/tests/test_instruments.py | 26 +++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index 39661703..a4d85b19 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -91,7 +91,7 @@ def setup_method(self): # Prepare for testing downloads self.saved_path = pysat.params['data_dirs'] pysat.params.data['data_dirs'] = [pysatSpaceWeather.test_data_path] - self.saved_file = None + self.saved_files = list() # Assign the Instrument kwargs self.inst_kwargs = [ @@ -107,13 +107,17 @@ def teardown_method(self): # Clean up the pysat parameter space pysat.params.data['data_dirs'] = self.saved_path - if self.saved_file is not None: + for saved_file in self.saved_files: attempts = 0 - while os.path.isfile(self.saved_file) and attempts < 100: - os.remove(self.saved_file) + # Remove file with multiple attempts for Windows + while os.path.isfile(saved_file) and attempts < 100: + os.remove(saved_file) attempts += 1 - del self.inst_kwargs, self.saved_path, self.saved_file + # Remove empty directories + os.removedirs(os.path.split(saved_file)[0]) + + del self.inst_kwargs, self.saved_path, self.saved_files return def test_historic_download_past_limit(self, caplog): @@ -156,6 +160,9 @@ def test_missing_kp_file(self, tag, caplog): # Test the file was not downloaded assert future_time not in inst.files.files.index + self.saved_files = [inst.files.data_path, + inst.files.data_path.replace('kp', 'ap'), + inst.files.data_path.replace('kp', 'cp')] return @@ -175,8 +182,8 @@ def test_realtime_ace_bad_day(self, caplog): # Test the file was downloaded assert past_time in inst.files.files.index - self.saved_file = os.path.join(inst.files.data_path, - inst.files.files[past_time]) + self.saved_files = [os.path.join(inst.files.data_path, + inst.files.files[past_time])] return @@ -196,6 +203,7 @@ def test_historic_ace_no_data(self, caplog): # Test the file was not downloaded assert past_time not in inst.files.files.index + self.saved_files = [inst.files.data_path] return @@ -217,5 +225,9 @@ def test_missing_prelim_file(self, caplog): # Test the file was not downloaded assert future_time not in inst.files.files.index + self.saved_files = [inst.files.data_path, + inst.files.data_path.replace('f107', 'sbfield'), + inst.files.data_path.replace('f107', 'ssn'), + inst.files.data_path.replace('f107', 'flare')] return From 988bbf3e68dc36c80f3c1ef9a45e28ab4cc0a9ab Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 30 Nov 2022 13:53:45 -0500 Subject: [PATCH 031/171] BUG: catch for windows Added a catch for Windows permission handling. --- pysatSpaceWeather/instruments/methods/swpc.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index ff52ca7d..9b408874 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -181,8 +181,16 @@ def old_indices_dsd_download(name, date_array, data_path, local_files, today): if str(exception.args[0]).split(" ", 1)[0] != '550': raise IOError(exception) else: - # file isn't actually there, try the next name - os.remove(saved_fname) + # File isn't actually there, try the next name. The + # extra wrapping is for Windows, which can encounter + # permission errors when handling files. + attempt = 0 + while attempt < 100: + try: + os.remove(saved_fname) + attempt = 100 + except PermissionError: + attempt += 1 # Save this so we don't try again. Because there are two # possible filenames for each time, it's ok if one isn't From 13320556824a0bc4199ada3aa5489f2b99352e05 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 30 Nov 2022 13:58:41 -0500 Subject: [PATCH 032/171] DOC: updated table formatting Fixed the table formatting to have each row be a grid. --- docs/examples/ex_mult_downloads.rst | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/examples/ex_mult_downloads.rst b/docs/examples/ex_mult_downloads.rst index 418218d2..a3079d9c 100644 --- a/docs/examples/ex_mult_downloads.rst +++ b/docs/examples/ex_mult_downloads.rst @@ -44,33 +44,50 @@ data sets. When possible, the same tag has been used across | Remote Data Set | Platform | Name | Tag(s) | Inst ID(s) | +======================+==========+============+============+============+ | GFZ Kp | SW | Kp | def, now | | ++----------------------+----------+------------+------------+------------+ | | | Ap | | | ++----------------------+----------+------------+------------+------------+ | | | Cp | | | +----------------------+----------+------------+------------+------------+ | SWPC Daily DSD | SW | F107 | daily | | ++----------------------+----------+------------+------------+------------+ | | | Flare | | | ++----------------------+----------+------------+------------+------------+ | | | SSN | | | ++----------------------+----------+------------+------------+------------+ | | | SBField | | | +----------------------+----------+------------+------------+------------+ | SWPC Prelim DSD | SW | F107 | prelim | | ++----------------------+----------+------------+------------+------------+ | | | Flare | | | ++----------------------+----------+------------+------------+------------+ | | | SSN | | | ++----------------------+----------+------------+------------+------------+ | | | SBField | | | +----------------------+----------+------------+------------+------------+ | SWPC 3-day Solar-Geo | SW | F107 | forecast | | ++----------------------+----------+------------+------------+------------+ | Predictions | | Kp | prediction | | ++----------------------+----------+------------+------------+------------+ | | | Ap | | | ++----------------------+----------+------------+------------+------------+ | | | Storm-Prob | | | ++----------------------+----------+------------+------------+------------+ | | | Flare | | | ++----------------------+----------+------------+------------+------------+ | | | Polar-Cap | | | +----------------------+----------+------------+------------+------------+ | SWPC 3-day Geomag | SW | Kp | forecast | | ++----------------------+----------+------------+------------+------------+ | Forecast | | Ap | | | ++----------------------+----------+------------+------------+------------+ | | | Storm-Prob | | | +----------------------+----------+------------+------------+------------+ | SWPC Daily Geomag | SW | Kp | recent | | ++----------------------+----------+------------+------------+------------+ | | | Ap | | | +----------------------+----------+------------+------------+------------+ | SWPC 45-day Forecast | SW | F107 | 45day | | ++----------------------+----------+------------+------------+------------+ | | | Ap | | | +----------------------+----------+------------+------------+------------+ From b0115ef3423db020801a7ba83ef83aab59c432aa Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 30 Nov 2022 14:10:36 -0500 Subject: [PATCH 033/171] BUG: remove all files Remove all files downloaded for the ACE bad time unit test. --- pysatSpaceWeather/tests/test_instruments.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index a4d85b19..437fca4e 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -115,7 +115,10 @@ def teardown_method(self): attempts += 1 # Remove empty directories - os.removedirs(os.path.split(saved_file)[0]) + try: + os.removedirs(os.path.split(saved_file)[0]) + except OSError: + pass # The directory isn't empty and that's ok del self.inst_kwargs, self.saved_path, self.saved_files return @@ -183,7 +186,10 @@ def test_realtime_ace_bad_day(self, caplog): # Test the file was downloaded assert past_time in inst.files.files.index self.saved_files = [os.path.join(inst.files.data_path, - inst.files.files[past_time])] + inst.files.files[past_time]), + os.path.join(inst.files.data_path, + inst.files.files[ + past_time + dt.timedelta(days=1)])] return From ab294c850692f1abd7591ff188968f0ca663adf9 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Fri, 2 Dec 2022 13:45:07 -0500 Subject: [PATCH 034/171] BUG: added missing imports Added missing imports for the new sub-modules. --- pysatSpaceWeather/instruments/__init__.py | 3 ++- pysatSpaceWeather/instruments/methods/__init__.py | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pysatSpaceWeather/instruments/__init__.py b/pysatSpaceWeather/instruments/__init__.py index 76cb3645..8dc2ffa6 100644 --- a/pysatSpaceWeather/instruments/__init__.py +++ b/pysatSpaceWeather/instruments/__init__.py @@ -1,7 +1,8 @@ from pysatSpaceWeather.instruments import methods # noqa F401 __all__ = ['ace_epam', 'ace_mag', 'ace_sis', 'ace_swepam', - 'sw_dst', 'sw_f107', 'sw_kp'] + 'sw_ap', 'sw_cp', 'sw_dst', 'sw_f107', 'sw_flare', 'sw_kp', + 'sw_polarcap', 'sw_sbfield', 'sw_ssn', 'sw_stormprob'] for inst in __all__: exec("from pysatSpaceWeather.instruments import {x}".format(x=inst)) diff --git a/pysatSpaceWeather/instruments/methods/__init__.py b/pysatSpaceWeather/instruments/methods/__init__.py index dfb2c612..97227d81 100644 --- a/pysatSpaceWeather/instruments/methods/__init__.py +++ b/pysatSpaceWeather/instruments/methods/__init__.py @@ -1,3 +1,7 @@ +from pysatSpaceWeather.instruments.methods import ace # noqa F401 +from pysatSpaceWeather.instruments.methods import dst # noqa F401 +from pysatSpaceWeather.instruments.methods import f107 # noqa F401 from pysatSpaceWeather.instruments.methods import general # noqa F401 -from pysatSpaceWeather.instruments.methods import ace, dst # noqa F401 -from pysatSpaceWeather.instruments.methods import f107, kp_ap # noqa F401 +from pysatSpaceWeather.instruments.methods import gfz # noqa F401 +from pysatSpaceWeather.instruments.methods import kp_ap # noqa F401 +from pysatSpaceWeather.instruments.methods import swpc # noqa F401 From 5108124a784d4bb5816366202f88bfc8be913379 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Fri, 2 Dec 2022 13:45:26 -0500 Subject: [PATCH 035/171] BUG: renamed modules Instrument modules can't have a dash, rename them. --- pysatSpaceWeather/instruments/{sw_polar-cap.py => sw_polarcap.py} | 0 .../instruments/{sw_storm-prob.py => sw_stormprob.py} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename pysatSpaceWeather/instruments/{sw_polar-cap.py => sw_polarcap.py} (100%) rename pysatSpaceWeather/instruments/{sw_storm-prob.py => sw_stormprob.py} (100%) diff --git a/pysatSpaceWeather/instruments/sw_polar-cap.py b/pysatSpaceWeather/instruments/sw_polarcap.py similarity index 100% rename from pysatSpaceWeather/instruments/sw_polar-cap.py rename to pysatSpaceWeather/instruments/sw_polarcap.py diff --git a/pysatSpaceWeather/instruments/sw_storm-prob.py b/pysatSpaceWeather/instruments/sw_stormprob.py similarity index 100% rename from pysatSpaceWeather/instruments/sw_storm-prob.py rename to pysatSpaceWeather/instruments/sw_stormprob.py From e9e7b5e4e7b6b7e05f20247f2e3e3997efd76566 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Fri, 2 Dec 2022 13:47:36 -0500 Subject: [PATCH 036/171] BUG: updated Instrument names Updated the Instrument names with dashes to not have the dashes. --- pysatSpaceWeather/instruments/methods/swpc.py | 22 +++++++++---------- pysatSpaceWeather/instruments/sw_polarcap.py | 6 ++--- pysatSpaceWeather/instruments/sw_stormprob.py | 6 ++--- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index 9b408874..e4f74a44 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -340,8 +340,8 @@ def solar_geomag_predictions_download(name, date_array, data_path): Parameters ---------- name : str - Instrument name, expects one of 'kp', 'ap', 'storm-prob', 'f107', - 'flare', or 'polar-cap'. + Instrument name, expects one of 'kp', 'ap', 'stormprob', 'f107', + 'flare', or 'polarcap'. date_array : array-like or pandas.DatetimeIndex Array-like or index of datetimes to be downloaded. data_path : str @@ -360,8 +360,8 @@ def solar_geomag_predictions_download(name, date_array, data_path): general.get_instrument_data_path( 'sw_{:s}'.format(data_name), tag='forecast' if data_name == 'f107' else 'prediction') - for data_name in ['kp', 'ap', 'storm-prob', 'f107', 'flare', - 'polar-cap']} + for data_name in ['kp', 'ap', 'stormprob', 'f107', 'flare', + 'polarcap']} # Check that the directories exist for data_path in file_paths.values(): @@ -437,15 +437,15 @@ def solar_geomag_predictions_download(name, date_array, data_path): split_line = line.split() if split_line[0].find('/') > 0: dkey = split_line[0].replace('/', '-Lat_') - data_vals['storm-prob'][dkey] = [ + data_vals['stormprob'][dkey] = [ int(val) for val in split_line[1:]] # Process the polar cap prediction - data_vals['polar-cap']['absorption_forecast'] = [ + data_vals['polarcap']['absorption_forecast'] = [ str_val for str_val in pc_raw.split('\n')[1].split()] - data_times['polar-cap'] = [ + data_times['polarcap'] = [ ptimes for i, ptimes in enumerate(pred_times) - if i < len(data_vals['polar-cap']['absorption_forecast'])] + if i < len(data_vals['polarcap']['absorption_forecast'])] # Process the F10.7 data data_vals['f107']['f107'] = [ @@ -496,7 +496,7 @@ def geomag_forecast_download(name, date_array, data_path): Parameters ---------- name : str - Instrument name, expects one of 'kp', 'ap', or 'storm-prob'. + Instrument name, expects one of 'kp', 'ap', or 'stormprob'. date_array : array-like or pandas.DatetimeIndex Array-like or index of datetimes to be downloaded. data_path : str @@ -514,7 +514,7 @@ def geomag_forecast_download(name, date_array, data_path): file_paths = {data_name: data_path if name == data_name else general.get_instrument_data_path( 'sw_{:s}'.format(data_name), tag='forecast') - for data_name in ['kp', 'ap', 'storm-prob']} + for data_name in ['kp', 'ap', 'stormprob']} # Check that the directories exist for data_path in file_paths.values(): @@ -589,7 +589,7 @@ def geomag_forecast_download(name, date_array, data_path): # Put the storm probabilities into a nicer DataFrame storm_times = pds.date_range(forecast_date, periods=3, freq='1D') - data_frames['storm-prob'] = pds.DataFrame(storm_dict, index=storm_times) + data_frames['stormprob'] = pds.DataFrame(storm_dict, index=storm_times) # Save the data files for data_name in data_frames.keys(): diff --git a/pysatSpaceWeather/instruments/sw_polarcap.py b/pysatSpaceWeather/instruments/sw_polarcap.py index fcad2f69..022b7919 100644 --- a/pysatSpaceWeather/instruments/sw_polarcap.py +++ b/pysatSpaceWeather/instruments/sw_polarcap.py @@ -6,7 +6,7 @@ platform 'sw' name - 'polar-cap' + 'polarcap' tag - 'prediction' Predictions from SWPC for the next 3 days inst_id @@ -29,7 +29,7 @@ -------- :: - pc = pysat.Instrument('sw', 'polar-cap', tag='prediction') + pc = pysat.Instrument('sw', 'polarcap', tag='prediction') pc.download() pc.load(date=pc.tomorrow()) @@ -56,7 +56,7 @@ # Instrument attributes platform = 'sw' -name = 'polar-cap' +name = 'polarcap' tags = {'prediction': 'SWPC Predictions for the next three days'} inst_ids = {'': list(tags.keys())} diff --git a/pysatSpaceWeather/instruments/sw_stormprob.py b/pysatSpaceWeather/instruments/sw_stormprob.py index 234dcc37..c8317c19 100644 --- a/pysatSpaceWeather/instruments/sw_stormprob.py +++ b/pysatSpaceWeather/instruments/sw_stormprob.py @@ -6,7 +6,7 @@ platform 'sw' name - 'storm-prob' + 'stormprob' tag - 'prediction' Predictions from SWPC for the next 3 days - 'forecast' Grab forecast data from SWPC (next 3 days) @@ -30,7 +30,7 @@ -------- :: - storm = pysat.Instrument('sw', 'storm-prob', tag='forecast') + storm = pysat.Instrument('sw', 'stormprob', tag='forecast') storm.download() storm.load(date=storm.tomorrow()) @@ -56,7 +56,7 @@ # Instrument attributes platform = 'sw' -name = 'storm-prob' +name = 'stormprob' tags = {'forecast': 'SWPC Forecast data next (3 days)', 'prediction': 'SWPC Predictions for the next three days'} inst_ids = {'': list(tags.keys())} From f4442540eb9ec4924c89d55f09aff7efb4230f46 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Fri, 2 Dec 2022 13:50:01 -0500 Subject: [PATCH 037/171] DOC: updated Instrument names Updated the Instrument names with dashes in the docs. --- docs/examples/ex_mult_downloads.rst | 102 ++++++++++++++-------------- docs/supported_instruments.rst | 6 +- 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/docs/examples/ex_mult_downloads.rst b/docs/examples/ex_mult_downloads.rst index a3079d9c..47db8451 100644 --- a/docs/examples/ex_mult_downloads.rst +++ b/docs/examples/ex_mult_downloads.rst @@ -40,54 +40,54 @@ data sets. When possible, the same tag has been used across :py:class:`pysat.Instrument` sub-modules. -+----------------------+----------+------------+------------+------------+ -| Remote Data Set | Platform | Name | Tag(s) | Inst ID(s) | -+======================+==========+============+============+============+ -| GFZ Kp | SW | Kp | def, now | | -+----------------------+----------+------------+------------+------------+ -| | | Ap | | | -+----------------------+----------+------------+------------+------------+ -| | | Cp | | | -+----------------------+----------+------------+------------+------------+ -| SWPC Daily DSD | SW | F107 | daily | | -+----------------------+----------+------------+------------+------------+ -| | | Flare | | | -+----------------------+----------+------------+------------+------------+ -| | | SSN | | | -+----------------------+----------+------------+------------+------------+ -| | | SBField | | | -+----------------------+----------+------------+------------+------------+ -| SWPC Prelim DSD | SW | F107 | prelim | | -+----------------------+----------+------------+------------+------------+ -| | | Flare | | | -+----------------------+----------+------------+------------+------------+ -| | | SSN | | | -+----------------------+----------+------------+------------+------------+ -| | | SBField | | | -+----------------------+----------+------------+------------+------------+ -| SWPC 3-day Solar-Geo | SW | F107 | forecast | | -+----------------------+----------+------------+------------+------------+ -| Predictions | | Kp | prediction | | -+----------------------+----------+------------+------------+------------+ -| | | Ap | | | -+----------------------+----------+------------+------------+------------+ -| | | Storm-Prob | | | -+----------------------+----------+------------+------------+------------+ -| | | Flare | | | -+----------------------+----------+------------+------------+------------+ -| | | Polar-Cap | | | -+----------------------+----------+------------+------------+------------+ -| SWPC 3-day Geomag | SW | Kp | forecast | | -+----------------------+----------+------------+------------+------------+ -| Forecast | | Ap | | | -+----------------------+----------+------------+------------+------------+ -| | | Storm-Prob | | | -+----------------------+----------+------------+------------+------------+ -| SWPC Daily Geomag | SW | Kp | recent | | -+----------------------+----------+------------+------------+------------+ -| | | Ap | | | -+----------------------+----------+------------+------------+------------+ -| SWPC 45-day Forecast | SW | F107 | 45day | | -+----------------------+----------+------------+------------+------------+ -| | | Ap | | | -+----------------------+----------+------------+------------+------------+ ++----------------------+----------+-----------+------------+------------+ +| Remote Data Set | Platform | Name | Tag(s) | Inst ID(s) | ++======================+==========+===========+============+============+ +| GFZ Kp | SW | Kp | def, now | | ++----------------------+----------+-----------+------------+------------+ +| | | Ap | | | ++----------------------+----------+-----------+------------+------------+ +| | | Cp | | | ++----------------------+----------+-----------+------------+------------+ +| SWPC Daily DSD | SW | F107 | daily | | ++----------------------+----------+-----------+------------+------------+ +| | | Flare | | | ++----------------------+----------+-----------+------------+------------+ +| | | SSN | | | ++----------------------+----------+-----------+------------+------------+ +| | | SBField | | | ++----------------------+----------+-----------+------------+------------+ +| SWPC Prelim DSD | SW | F107 | prelim | | ++----------------------+----------+-----------+------------+------------+ +| | | Flare | | | ++----------------------+----------+-----------+------------+------------+ +| | | SSN | | | ++----------------------+----------+-----------+------------+------------+ +| | | SBField | | | ++----------------------+----------+-----------+------------+------------+ +| SWPC 3-day Solar-Geo | SW | F107 | forecast | | ++----------------------+----------+-----------+------------+------------+ +| Predictions | | Kp | prediction | | ++----------------------+----------+-----------+------------+------------+ +| | | Ap | | | ++----------------------+----------+-----------+------------+------------+ +| | | StormProb | | | ++----------------------+----------+-----------+------------+------------+ +| | | Flare | | | ++----------------------+----------+-----------+------------+------------+ +| | | PolarCap | | | ++----------------------+----------+-----------+------------+------------+ +| SWPC 3-day Geomag | SW | Kp | forecast | | ++----------------------+----------+-----------+------------+------------+ +| Forecast | | Ap | | | ++----------------------+----------+-----------+------------+------------+ +| | | StormProb | | | ++----------------------+----------+-----------+------------+------------+ +| SWPC Daily Geomag | SW | Kp | recent | | ++----------------------+----------+-----------+------------+------------+ +| | | Ap | | | ++----------------------+----------+-----------+------------+------------+ +| SWPC 45-day Forecast | SW | F107 | 45day | | ++----------------------+----------+-----------+------------+------------+ +| | | Ap | | | ++----------------------+----------+-----------+------------+------------+ diff --git a/docs/supported_instruments.rst b/docs/supported_instruments.rst index 0923c378..22a889a7 100644 --- a/docs/supported_instruments.rst +++ b/docs/supported_instruments.rst @@ -188,7 +188,7 @@ Polar cap indices have been developed to provide information about high-latitude conditions and inform ionospheric space weather models. Currently, this Instrument provides absorption predictions from SWPC. -.. automodule:: pysatSpaceWeather.instruments.sw_polar-cap +.. automodule:: pysatSpaceWeather.instruments.sw_polarcap :members: @@ -220,7 +220,7 @@ SWPC (for example, here is the :members: -.. _sw-storm-prob-inst: +.. _sw-stormprob-inst: Storm Probability ^^^^^^^^^^^^^^^^^ @@ -230,6 +230,6 @@ and mid-latitude regions. SWPC uses the `NOAA SW scales `_, which are explained here. -.. automodule:: pysatSpaceWeather.instruments.sw_storm-prob +.. automodule:: pysatSpaceWeather.instruments.sw_stormprob :members: From 5cbeca17d9f6893058efd83135b17ea1eb4a6229 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Fri, 2 Dec 2022 14:05:37 -0500 Subject: [PATCH 038/171] BUG: fixed bugs from testing Fixed bugs identified from unit testing: - bad parameter order in GFZ download function, - bad function name for Bartel metadata, - calling function from the wrong module, and - calling a function without all the inputs. --- pysatSpaceWeather/instruments/methods/gfz.py | 6 +++--- pysatSpaceWeather/instruments/sw_ap.py | 4 ++-- pysatSpaceWeather/instruments/sw_cp.py | 5 +++-- pysatSpaceWeather/instruments/sw_flare.py | 4 ++-- pysatSpaceWeather/instruments/sw_kp.py | 2 +- pysatSpaceWeather/instruments/sw_sbfield.py | 2 +- pysatSpaceWeather/instruments/sw_ssn.py | 2 +- 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/gfz.py b/pysatSpaceWeather/instruments/methods/gfz.py index 0cbde3d1..5837dedf 100644 --- a/pysatSpaceWeather/instruments/methods/gfz.py +++ b/pysatSpaceWeather/instruments/methods/gfz.py @@ -38,7 +38,7 @@ # ---------------------------------------------------------------------------- # Define the module functions -def kp_ap_cp_download(platform, name, tag, inst_id, date_array, data_path): +def kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path): """Download Kp, ap, and Cp data from GFZ. Parameters @@ -47,13 +47,13 @@ def kp_ap_cp_download(platform, name, tag, inst_id, date_array, data_path): Instrument platform. name : str Instrument name. + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. tag : str String specifying the database, expects 'def' (definitive) or 'now' (nowcast) inst_id : str Specifies the instrument identification, not used. - date_array : array-like or pandas.DatetimeIndex - Array-like or index of datetimes to be downloaded. data_path : str Path to data directory. diff --git a/pysatSpaceWeather/instruments/sw_ap.py b/pysatSpaceWeather/instruments/sw_ap.py index 64001476..cfe7658d 100644 --- a/pysatSpaceWeather/instruments/sw_ap.py +++ b/pysatSpaceWeather/instruments/sw_ap.py @@ -160,7 +160,7 @@ def load(fnames, tag='', inst_id=''): if kk.lower().find('ap') >= 0: methods.kp_ap.initialize_ap_metadata(meta, kk, fill_val) elif kk.find('Bartels') >= 0: - methods.kp_ap.itialize_bartel_metadata(meta, kk) + methods.kp_ap.initialize_bartel_metadata(meta, kk) else: # Load the forecast, recent, prediction, or 45day data all_data = [] @@ -239,7 +239,7 @@ def download(date_array, tag, inst_id, data_path): """ if tag in ['def', 'now']: - methods.gfz.kp_ap_cp_download(platform, name, tag, inst_id, date_array, + methods.gfz.kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path) elif tag == 'recent': methods.swpc.kp_ap_recent_download(name, date_array, data_path) diff --git a/pysatSpaceWeather/instruments/sw_cp.py b/pysatSpaceWeather/instruments/sw_cp.py index 7a08a3dd..09869162 100644 --- a/pysatSpaceWeather/instruments/sw_cp.py +++ b/pysatSpaceWeather/instruments/sw_cp.py @@ -119,8 +119,9 @@ def load(fnames, tag='', inst_id=''): # Initalize the meta data meta = pysat.Meta() - methods.kp_ap.itialize_bartel_metadata(meta, 'Bartels_solar_rotation_num') - methods.kp_ap.itialize_bartel_metadata(meta, 'day_within_Bartels_rotation') + methods.kp_ap.initialize_bartel_metadata(meta, 'Bartels_solar_rotation_num') + methods.kp_ap.initialize_bartel_metadata(meta, + 'day_within_Bartels_rotation') meta['Cp'] = { meta.labels.units: '', diff --git a/pysatSpaceWeather/instruments/sw_flare.py b/pysatSpaceWeather/instruments/sw_flare.py index 057678ce..591302b4 100644 --- a/pysatSpaceWeather/instruments/sw_flare.py +++ b/pysatSpaceWeather/instruments/sw_flare.py @@ -347,10 +347,10 @@ def download(date_array, tag, inst_id, data_path, update_files=False): local_files = list_files(tag, inst_id, data_path) methods.swpc.old_indices_dsd_download(name, date_array, data_path, - local_files) + local_files, today) elif tag == 'daily': - methods.f107.daily_dsd_download(name, today, data_path) + methods.swpc.daily_dsd_download(name, today, data_path) elif tag == 'prediction': methods.swpc.solar_geomag_predictions_download(name, date_array, diff --git a/pysatSpaceWeather/instruments/sw_kp.py b/pysatSpaceWeather/instruments/sw_kp.py index bdd67e38..92abe371 100644 --- a/pysatSpaceWeather/instruments/sw_kp.py +++ b/pysatSpaceWeather/instruments/sw_kp.py @@ -392,7 +392,7 @@ def download(date_array, tag, inst_id, data_path): "supported by GFZ."]), DeprecationWarning, stacklevel=2) elif tag in ['def', 'now']: - methods.gfz.kp_ap_cp_download(platform, name, tag, inst_id, date_array, + methods.gfz.kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path) elif tag == 'forecast': methods.swpc.geomag_forecast_download(name, date_array, data_path) diff --git a/pysatSpaceWeather/instruments/sw_sbfield.py b/pysatSpaceWeather/instruments/sw_sbfield.py index e22bff63..fe37bc12 100644 --- a/pysatSpaceWeather/instruments/sw_sbfield.py +++ b/pysatSpaceWeather/instruments/sw_sbfield.py @@ -260,6 +260,6 @@ def download(date_array, tag, inst_id, data_path, update_files=False): local_files, today) elif tag == 'daily': - methods.f107.daily_dsd_download(name, today, data_path) + methods.swpc.daily_dsd_download(name, today, data_path) return diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py index 62b5f095..abe0b637 100644 --- a/pysatSpaceWeather/instruments/sw_ssn.py +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -272,6 +272,6 @@ def download(date_array, tag, inst_id, data_path, update_files=False): local_files, today) elif tag == 'daily': - methods.f107.daily_dsd_download(name, today, data_path) + methods.swpc.daily_dsd_download(name, today, data_path) return From 556f7fb3e55feccbc539169d0722a71106d0642d Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 21 Dec 2022 23:18:56 -0500 Subject: [PATCH 039/171] STY: removed unused imports Removed unused imports reintroduced during the merge conflict resolution. --- pysatSpaceWeather/instruments/sw_f107.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index d2451255..9fdec08a 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -61,11 +61,9 @@ """ import datetime as dt -import json import numpy as np import os import pandas as pds -import requests import warnings import pysat From b0423701eb40580920389abb5f01ab68271c4c3a Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Fri, 3 Mar 2023 15:20:27 -0500 Subject: [PATCH 040/171] MAINT: added suggestions from review Added suggestions from review, including fixing mis-spellings, missing lines in docs, and improving the style of some test calls. Co-authored-by: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> --- CHANGELOG.md | 2 +- docs/examples/ex_mult_downloads.rst | 1 + docs/supported_instruments.rst | 2 +- pysatSpaceWeather/tests/test_instruments.py | 4 ++-- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fe0bfcc..e7fa0e8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). [0.1.0] - 2023-XX-XX -------------------- -* Enhacements +* Enhancements * Changed downloads to write files across multiple Instruments, when the remote files contain a mix of data products * Added new instruments: sw_ap, sw_cp, sw_flare, sw_polar-cap, sw_sbfield, diff --git a/docs/examples/ex_mult_downloads.rst b/docs/examples/ex_mult_downloads.rst index 47db8451..85661b9d 100644 --- a/docs/examples/ex_mult_downloads.rst +++ b/docs/examples/ex_mult_downloads.rst @@ -28,6 +28,7 @@ for all ``tag`` values. # Download both data sets using only one Instrument f107.download(start=f107.tomorrow()) + ap.download(start=ap.tomorrow()) # Show that both files have been downloaded print(f107.files.files[f107.today()], ap.files.files[ap.today()]) diff --git a/docs/supported_instruments.rst b/docs/supported_instruments.rst index ea56f479..e85b8aa5 100644 --- a/docs/supported_instruments.rst +++ b/docs/supported_instruments.rst @@ -153,7 +153,7 @@ Historic indices, real-time indices, and forecasted indices are available from Solar Flares ^^^^^^^^^^^^ -Solar flares have been monitored for decates, and the data has been compiled +Solar flares have been monitored for decades, and the data has been compiled into standard measurements from different data sets. Historic indices, real-time indices, and forecasted indices are available from `SWPC `_. diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index 29e9f31d..b18e1ece 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -159,7 +159,7 @@ def setup_method(self): """Create a clean the testing setup.""" # Prepare for testing downloads self.saved_path = pysat.params['data_dirs'] - pysat.params.data['data_dirs'] = [pysatSpaceWeather.test_data_path] + pysat.params._set_data_dirs(path=pysatSpaceWeather.test_data_path, store=False) self.saved_files = list() # Assign the Instrument kwargs @@ -174,7 +174,7 @@ def setup_method(self): def teardown_method(self): """Clean up previous testing setup.""" # Clean up the pysat parameter space - pysat.params.data['data_dirs'] = self.saved_path + pysat.params._set_data_dirs(path=self.saved_path, store=False) for saved_file in self.saved_files: attempts = 0 From 005a2506632576e87b1f582295cf3b8c62cfeaf2 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Fri, 3 Mar 2023 15:23:34 -0500 Subject: [PATCH 041/171] STY: fixed line length Fixed a line that was too long. --- pysatSpaceWeather/tests/test_instruments.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index b18e1ece..737e2abf 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -159,7 +159,8 @@ def setup_method(self): """Create a clean the testing setup.""" # Prepare for testing downloads self.saved_path = pysat.params['data_dirs'] - pysat.params._set_data_dirs(path=pysatSpaceWeather.test_data_path, store=False) + pysat.params._set_data_dirs(path=pysatSpaceWeather.test_data_path, + store=False) self.saved_files = list() # Assign the Instrument kwargs From 0a9afccc82918e7a62d1b76fb6f4c7f3a7b3de5b Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 17:56:38 -0400 Subject: [PATCH 042/171] ENH: added a general GFZ download function Added a JSON download function for GFZ solar and geomagnetic indices. --- pysatSpaceWeather/instruments/methods/gfz.py | 128 +++++++++++++++++-- 1 file changed, 116 insertions(+), 12 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/gfz.py b/pysatSpaceWeather/instruments/methods/gfz.py index 5837dedf..9c9efdab 100644 --- a/pysatSpaceWeather/instruments/methods/gfz.py +++ b/pysatSpaceWeather/instruments/methods/gfz.py @@ -7,6 +7,7 @@ """Provides routines that support GFZ space weather instruments.""" import datetime as dt +import json import numpy as np import os import pandas as pds @@ -19,12 +20,14 @@ # ---------------------------------------------------------------------------- # Define the module variables -ackn = ''.join(['CC BY 4.0, The Kp index was introduced by Bartels (1949) and ', - 'is produced, along with derivative indices, by the ', - 'Geomagnetic Observatory Niemegk, GFZ German Research Centre ', - 'for Geosciences. Please cite the references in the ', +ackn = ''.join(['CC BY 4.0, This index is produced by the Geomagnetic ', + 'Observatory Niemegk, GFZ German Research Centre for ', + 'Geosciences. Please cite the references in the ', "'references' attribute"]) -geoind_refs = '\n'.join([''.join(["Matzka, J., Bronkalla, O., Tornow, K., ", +geoind_refs = '\n'.join([''.join(["Bartels, J. (1949) - The standardized index", + "Ks and the planetary index Kp, IATME ", + "Bulletin 12b, 97."]), + ''.join(["Matzka, J., Bronkalla, O., Tornow, K., ", "Elger, K. and Stolle, C., 2021. ", "Geomagnetic Kp index. V. 1.0. GFZ Data ", "Services, doi:10.5880/Kp.0001"]), @@ -33,11 +36,113 @@ "The geomagnetic Kp index and derived ", "indices of geomagnetic activity. Space ", "Weather,doi:10.1029/2020SW002641"])]) +hpo_refs = '\n'.join([''.join(["Yamazaki, Y., Matzka, J., Stolle, C., ", + "Kervalishvili, G., Rauberg, J., Bronkalla, O.,", + " Morschhauser, A., Bruinsma, S., Shprits, ", + "Y.Y., Jackson, D.R., 2022. Geomagnetic ", + "Activity Index Hpo. Geophys. Res. Lett., 49, ", + "e2022GL098860, doi:10.1029/2022GL098860"]), + ''.join(["Matzka, J., Bronkalla, O., Kervalishvili, G.,", + " Rauberg, J. and Yamazaki, Y., 2022. ", + "Geomagnetic Hpo index. V. 2.0. GFZ Data ", + "Services, doi:10.5880/Hpo.0002"])]) # ---------------------------------------------------------------------------- # Define the module functions +def json_downloads(date_array, data_path, local_file_prefix, local_date_fmt, + gfz_data_name, freq, update_files=False, is_def=False): + """Download data from GFZ into CSV files at a specified cadence. + + Parameters + ---------- + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + data_path : str + Path to data directory. + local_file_prefix : str + Prefix for local files, e.g., 'tag_' or 'tag_monthly_' + local_date_fmt : str + String format for the local filename, e.g., '%Y-%m-%d' or '%Y-%m' + gfz_data_name : str + Name of the data index on the GFZ server, expects one of: 'Kp', 'ap', + 'Ap', 'Cp', 'C9', 'Hp30', 'Hp60', 'ap30', 'ap60', 'SN', 'Fobs', 'Fadj' + where SN is the international sunspot number and Fxxx is the observed + and adjusted F10.7. + freq : pds.DateOffset or dt.timedelta + Offset to add to the start date to ensure all data is downloaded + (inclusive) + update_files : bool + Re-download data for files that already exist if True (default=False) + is_def : bool + If true, selects only the definitive data, otherwise also includes + nowcast data (default=False) + + Raises + ------ + IOError + If there is a gateway timeout when downloading data + + """ + + # Set the local variables + base_url = "https://kp.gfz-potsdam.de/app/json/" + time_fmt = "%Y-%m-%dT%H:%M:%SZ" + last_file = '' + + # Cycle through all the dates + for dl_date in date_array: + # Build the local filename + local_file = os.path.join( + data_path, ''.join([local_file_prefix, + dl_date.strftime(local_date_fmt), '.txt'])) + + # Determine if the download should occur + if not os.path.isfile(local_file) or (update_files + and local_file != last_file): + # Get the URL for the desired data + stop = dl_date + freq + query_url = "{:s}?start={:s}&end={:s}&index={:s}".format( + base_url, dl_date.strftime(time_fmt), stop.strftime(time_fmt), + gfz_data_name) + + if is_def: + # Add the definitive flag + query_url = '{:s}&status=def'.format(query_url) + + # The data is returned as a JSON file + req = requests.get(query_url) + + # Process the JSON file + if req.text.find('Gateway Timeout') >= 0: + raise IOError(''.join(['Gateway timeout when requesting ', + 'file using command: ', query_url])) + + if req.ok: + raw_dict = json.loads(req.text) + data = pds.DataFrame.from_dict({gfz_data_name: + raw_dict[gfz_data_name]}) + if data.empty: + pysat.logger.warning("no data for {:}".format(dl_date)) + else: + # Convert the datetime strings to datetime objects + time_list = [dt.datetime.strptime(time_str, time_fmt) + for time_str in raw_dict['datetime']] + + # Add the time index + data.index = time_list + + # Create a local CSV file + data.to_csv(local_file, header=True) + else: + pysat.logger.info("".join(["Data not downloaded for ", + dl_date.strftime("%d %b %Y"), + ", date may be out of range ", + "for the database."])) + return + + def kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path): """Download Kp, ap, and Cp data from GFZ. @@ -205,8 +310,8 @@ def kp_ap_cp_list_files(name, tag, inst_id, data_path, format_str=None): # the append date to select out approriate data. files = pysat.Files.from_os(data_path=data_path, format_str=format_str) if not files.empty: - files.loc[files.index[-1] + pds.DateOffset(years=1) - - pds.DateOffset(days=1)] = files.iloc[-1] + files.loc[files.index[-1] + + pds.DateOffset(years=1, days=-1)] = files.iloc[-1] files = files.asfreq('D', 'pad') files = files + '_' + files.index.strftime('%Y-%m-%d') @@ -228,11 +333,10 @@ def load_def_now(fnames): """ - # Load the definitive or nowcast data. The Kp, ap, and Cp data are stored - # together in yearly files that are separated by index on download. We - # need to return data daily. The daily date is attached to filename. - # Parse off the last date, load month of data, and downselect to the - # desired day + # Load the definitive or nowcast data. The GFZ index data are stored in + # yearly or monthly files that are separated by index ondownload. We need + # to return data daily. The daily date is attached to filename. Parse off + # the last date, load all data, and downselect to the desired day unique_fnames = dict() for filename in fnames: fname = filename[0:-11] From 7925e285a867b2e2711af07d3b9b56bd17e42239 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 17:57:02 -0400 Subject: [PATCH 043/171] BUG: fixed lisird defaults Fixed the download function defaults to match the docstring. --- pysatSpaceWeather/instruments/methods/lisird.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatSpaceWeather/instruments/methods/lisird.py b/pysatSpaceWeather/instruments/methods/lisird.py index 97dcefc6..17c55d06 100644 --- a/pysatSpaceWeather/instruments/methods/lisird.py +++ b/pysatSpaceWeather/instruments/methods/lisird.py @@ -92,7 +92,7 @@ def build_lisird_url(lisird_data_name, start, stop): def download(date_array, data_path, local_file_prefix, local_date_fmt, - lisird_data_name, freq, update_files=True, fill_vals=None): + lisird_data_name, freq, update_files=False, fill_vals=None): """Download routine for LISIRD data. Parameters From 17d7643e67a6c803115a7709a99f1e47b01d6daf Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 17:57:46 -0400 Subject: [PATCH 044/171] ENH: added new GFZ instruments Added new instruments for the GFZ provided apo and Hpo indices. --- pysatSpaceWeather/instruments/sw_apo.py | 204 ++++++++++++++++++++++++ pysatSpaceWeather/instruments/sw_hpo.py | 203 +++++++++++++++++++++++ 2 files changed, 407 insertions(+) create mode 100644 pysatSpaceWeather/instruments/sw_apo.py create mode 100644 pysatSpaceWeather/instruments/sw_hpo.py diff --git a/pysatSpaceWeather/instruments/sw_apo.py b/pysatSpaceWeather/instruments/sw_apo.py new file mode 100644 index 00000000..d37c5200 --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_apo.py @@ -0,0 +1,204 @@ +# -*- coding: utf-8 -*- +"""Supports apo index values. + +Properties +---------- +platform + 'sw' +name + 'apo' +tag + - 'now' Near real-time nowcast apo data from GFZ +inst_id + '30min', '60min' + +Note +---- +Downloads data from ftp.gfz-potsdam.de + +Examples +-------- +:: + + ap30 = pysat.Instrument('sw', 'apo', tag='now', inst_id='30min') + ap30.download(2009, 1) + ap30.load(yr=2009, doy=1) + +""" + +import datetime as dt +import numpy as np +import pandas as pds + +import pysat + +from pysatSpaceWeather.instruments import methods + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'apo' +tags = {'now': 'Near real-time nowcast apo data from GFZ'} +inst_ids = {inst_id: list(tags.keys()) for inst_id in ['30min', '60min']} + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +# Set test dates +_test_dates = {inst_id: {tag: dt.datetime(2009, 1, 1) + for tag in inst_ids[inst_id]} + for inst_id in inst_ids.keys()} + +# ---------------------------------------------------------------------------- +# Instrument methods + +preprocess = methods.general.preprocess + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + self.acknowledgements = methods.gfz.ackn + self.references = methods.gfz.hpo_refs + pysat.logger.info(self.acknowledgements) + return + + +def clean(self): + """Clean the Kp, not required for this index (empty function).""" + + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + + +def load(fnames, tag='', inst_id=''): + """Load apo index files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames + tag : str + Instrument tag (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + result : pandas.DataFrame + Object containing satellite data + meta : pysat.Meta + Object containing metadata such as column names and units + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + + # Load the nowcast data. The Hpo data is stored in monthly files, and we + # need to return data daily. The daily date is attached to filename. + # Parse off the last date, load month of data, and downselect to the + # desired day + result = methods.gfz.load_def_now(fnames) + + # Initalize the meta data + dkey = 'Hp{:s}'.format(inst_id.split('min')[0]) + meta = pysat.Meta() + meta[dkey] = {meta.labels.units: '', + meta.labels.name: dkey, + meta.labels.desc: + "{:s}ourly Planetary Open linear index".format( + 'H' if inst_id == '60min' else 'Half-h'), + meta.labels.min_val: 0, + meta.labels.max_val: np.inf, + meta.labels.fill_val: np.nan} + + return result, meta + + +def list_files(tag='', inst_id='', data_path='', format_str=None): + """List local files for the requested Instrument tag. + + Parameters + ----------- + tag : str + Instrument tag, accepts any value from `tags`. (default='') + inst_id : str + Instrument ID, not used. (default='') + data_path : str + Path to data directory. (default='') + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + files : pysat._files.Files + A class containing the verified available files + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + + if format_str is None: + format_str = 'ap{:s}_{{year:04d}}-{{month:02d}}.txt'.format( + inst_id.split('min')[0]) + + # Files are stored by month, going to add a date to the monthly filename for + # each day of month. The load routine will load the year and use the append + # date to select out approriate data. + files = pysat.Files.from_os(data_path=data_path, format_str=format_str) + if not files.empty: + files.loc[files.index[-1] + + pds.DateOffset(months=1, days=-1)] = files.iloc[-1] + files = files.asfreq('D', 'pad') + files = files + '_' + files.index.strftime('%Y-%m-%d') + + return files + + +def download(date_array, tag, inst_id, data_path, update_files=False): + """Download the apo index data from the appropriate repository. + + Parameters + ---------- + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + tag : str + Denotes type of file to load. + inst_id : str + Specifies the instrument identification, not used. + data_path : str + Path to data directory. + update_files : bool + Re-download data for files that already exist if True (default=False) + + Note + ---- + Called by pysat. Not intended for direct use by user. + + Warnings + -------- + Only able to download current recent data, not archived forecasts. + + """ + + # Set the download input options + gfz_data_name = 'ap{:s}'.format(inst_id.split('min')[0]) + local_file_prefix = '{:s}_'.format(gfz_data_name) + local_date_fmt = "%Y-%m" + freq = pds.DateOffset(months=1, seconds=-1) + + # Call the download routine + methods.gfz.json_download(date_array, data_path, local_file_prefix, + local_date_fmt, gfz_data_name, freq, + update_files=update_files) + + return diff --git a/pysatSpaceWeather/instruments/sw_hpo.py b/pysatSpaceWeather/instruments/sw_hpo.py new file mode 100644 index 00000000..6e81773b --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_hpo.py @@ -0,0 +1,203 @@ +# -*- coding: utf-8 -*- +"""Supports Hpo index values. + +Properties +---------- +platform + 'sw' +name + 'hpo' +tag + - 'now' Near real-time nowcast Hpo data from GFZ +inst_id + '30min', '60min' + +Note +---- +Downloads data from ftp.gfz-potsdam.de + +Examples +-------- +:: + + hp30 = pysat.Instrument('sw', 'hpo', tag='now', inst_id='30min') + hp30.download(2009, 1) + hp30.load(yr=2009, doy=1) + +""" + +import datetime as dt +import numpy as np +import pandas as pds + +import pysat + +from pysatSpaceWeather.instruments import methods + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'hpo' +tags = {'now': 'Near real-time nowcast Hpo data from GFZ'} +inst_ids = {inst_id: list(tags.keys()) for inst_id in ['30min', '60min']} + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +# Set test dates +_test_dates = {inst_id: {tag: dt.datetime(2009, 1, 1) + for tag in inst_ids[inst_id]} + for inst_id in inst_ids.keys()} + +# ---------------------------------------------------------------------------- +# Instrument methods + +preprocess = methods.general.preprocess + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + self.acknowledgements = methods.gfz.ackn + self.references = methods.gfz.hpo_refs + pysat.logger.info(self.acknowledgements) + return + + +def clean(self): + """Clean the Kp, not required for this index (empty function).""" + + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + + +def load(fnames, tag='', inst_id=''): + """Load Hpo index files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames + tag : str + Instrument tag (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + result : pandas.DataFrame + Object containing satellite data + meta : pysat.Meta + Object containing metadata such as column names and units + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + + # Load the nowcast data. The Hpo data is stored in monthly files, and we + # need to return data daily. The daily date is attached to filename. + # Parse off the last date, load month of data, and downselect to the + # desired day + result = methods.gfz.load_def_now(fnames) + + # Initalize the meta data + dkey = 'Hp{:s}'.format(inst_id.split('min')[0]) + meta = pysat.Meta() + meta[dkey] = {meta.labels.units: '', + meta.labels.name: dkey, + meta.labels.desc: "{:s}ourly Planetary Open index".format( + 'H' if inst_id == '60min' else 'Half-h'), + meta.labels.min_val: 0, + meta.labels.max_val: np.inf, + meta.labels.fill_val: np.nan} + + return result, meta + + +def list_files(tag='', inst_id='', data_path='', format_str=None): + """List local files for the requested Instrument tag. + + Parameters + ----------- + tag : str + Instrument tag, accepts any value from `tags`. (default='') + inst_id : str + Instrument ID, not used. (default='') + data_path : str + Path to data directory. (default='') + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + files : pysat._files.Files + A class containing the verified available files + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + + if format_str is None: + format_str = 'Hp{:s}_{{year:04d}}-{{month:02d}}.txt'.format( + inst_id.split('min')[0]) + + # Files are stored by month, going to add a date to the monthly filename for + # each day of month. The load routine will load the year and use the append + # date to select out approriate data. + files = pysat.Files.from_os(data_path=data_path, format_str=format_str) + if not files.empty: + files.loc[files.index[-1] + + pds.DateOffset(months=1, days=-1)] = files.iloc[-1] + files = files.asfreq('D', 'pad') + files = files + '_' + files.index.strftime('%Y-%m-%d') + + return files + + +def download(date_array, tag, inst_id, data_path, update_files=False): + """Download the Hpo index data from the appropriate repository. + + Parameters + ---------- + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes to be downloaded. + tag : str + Denotes type of file to load. + inst_id : str + Specifies the instrument identification, not used. + data_path : str + Path to data directory. + update_files : bool + Re-download data for files that already exist if True (default=False) + + Note + ---- + Called by pysat. Not intended for direct use by user. + + Warnings + -------- + Only able to download current recent data, not archived forecasts. + + """ + + # Set the download input options + gfz_data_name = 'Hp{:s}'.format(inst_id.split('min')[0]) + local_file_prefix = '{:s}_'.format(gfz_data_name) + local_date_fmt = "%Y-%m" + freq = pds.DateOffset(months=1, seconds=-1) + + # Call the download routine + methods.gfz.json_download(date_array, data_path, local_file_prefix, + local_date_fmt, gfz_data_name, freq, + update_files=update_files) + + return From 5283e6d6fde4e59987f9063e179685e405573aa3 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 17:58:33 -0400 Subject: [PATCH 045/171] ENH: added GFZ data to F10.7 and SSN Added the GFZ data option to the F10.7 and SSN instruments. --- pysatSpaceWeather/instruments/methods/f107.py | 8 ++- pysatSpaceWeather/instruments/sw_f107.py | 39 +++++++++++-- pysatSpaceWeather/instruments/sw_ssn.py | 56 +++++++++++++++---- 3 files changed, 83 insertions(+), 20 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/f107.py b/pysatSpaceWeather/instruments/methods/f107.py index 366df35a..507b90c1 100644 --- a/pysatSpaceWeather/instruments/methods/f107.py +++ b/pysatSpaceWeather/instruments/methods/f107.py @@ -23,7 +23,7 @@ def acknowledgements(tag): Parameters ---------- tag : str - Tag of the space waether index + Tag of the space weather index Returns ------- @@ -36,7 +36,8 @@ def acknowledgements(tag): 'Weather Prediction Center']) ackn = {'historic': lisird, 'prelim': swpc, 'daily': swpc, - 'forecast': swpc, '45day': swpc} + 'forecast': swpc, '45day': swpc, + 'now': pysat_sw.instruments.methods.gfz.ackn} return ackn[tag] @@ -66,9 +67,12 @@ def references(tag): "p 454-457."]) swpc_desc = ''.join(['Dataset description: https://www.swpc.noaa.gov/', 'sites/default/files/images/u2/Usr_guide.pdf']) + gfz_desc = ''.join(['Dataset description: https://kp.gfz-potsdam.de/app/', + 'format/Kp_ap_Ap_SN_F107_format.txt']) refs = {'historic': "\n".join([noaa_desc, orig_ref]), 'prelim': "\n".join([swpc_desc, orig_ref]), + 'now': "\n".join([gfz_desc, orig_ref]), 'daily': "\n".join([swpc_desc, orig_ref]), 'forecast': "\n".join([swpc_desc, orig_ref]), '45day': "\n".join([swpc_desc, orig_ref])} diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index 9fdec08a..a6574cce 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -15,9 +15,12 @@ tag - 'historic' LASP F10.7 data (downloads by month, loads by day) - 'prelim' Preliminary SWPC daily solar indices + - 'now' A mist of nowcast and definitive values from GFZ - 'daily' Daily SWPC solar indices (contains last 30 days) - 'forecast' Grab forecast data from SWPC (next 3 days) - '45day' 45-Day Forecast data from the Air Force +inst_id + '', 'obs', 'adj' Examples -------- @@ -77,12 +80,14 @@ name = 'f107' tags = {'historic': 'Daily LASP value of F10.7', 'prelim': 'Preliminary SWPC daily solar indices', + 'now': 'Nowcast and definitive data from GFZ', 'daily': 'Daily SWPC solar indices (contains last 30 days)', 'forecast': 'SWPC Forecast F107 data next (3 days)', '45day': 'Air Force 45-day Forecast'} # Dict keyed by inst_id that lists supported tags for each inst_id -inst_ids = {'': [tag for tag in tags.keys()]} +inst_ids = {'': [tag for tag in tags.keys() if tag != 'now'], 'obs': ['now'], + 'adj': ['now']} # Dict keyed by inst_id that lists supported tags and a good day of test data # generate todays date to support loading forecast data @@ -100,7 +105,9 @@ 'prelim': dt.datetime(2009, 1, 1), 'daily': tomorrow, 'forecast': tomorrow, - '45day': tomorrow}} + '45day': tomorrow}, + 'obs': {'now': dt.datetime(2009, 1, 1)}, + 'adj': {'now': dt.datetime(2009, 1, 1)}} # Other tags assumed to be True _test_download_ci = {'': {'prelim': False}} @@ -187,7 +194,7 @@ def load(fnames, tag='', inst_id=''): # Get the desired file dates and file names from the daily indexed list file_dates = list() - if tag in ['historic', 'prelim']: + if tag in ['historic', 'prelim', 'now']: unique_files = list() for fname in fnames: file_dates.append(dt.datetime.strptime(fname[-10:], '%Y-%m-%d')) @@ -199,6 +206,10 @@ def load(fnames, tag='', inst_id=''): data = pysat.instruments.methods.general.load_csv_data( fnames, read_csv_kwargs={"index_col": 0, "parse_dates": True}) + # Rename the GFZ variable name to be consistent with the other data sets + if tag == 'now': + data = data.rename(columns={'F{:s}'.format(inst_id): 'f107'}) + # If there is a date range, downselect here if len(file_dates) > 0: idx, = np.where((data.index >= min(file_dates)) @@ -207,11 +218,13 @@ def load(fnames, tag='', inst_id=''): # Initialize the metadata meta = pysat.Meta() + desc_prefix = '' if inst_id == '' else '{:s} '.format(inst_id.capitalize()) meta['f107'] = {meta.labels.units: 'SFU', meta.labels.name: 'F10.7 cm solar index', meta.labels.notes: '', meta.labels.desc: - 'F10.7 cm radio flux in Solar Flux Units (SFU)', + '{:s}F10.7 cm radio flux in Solar Flux Units (SFU)'.format( + desc_prefix), meta.labels.fill_val: np.nan, meta.labels.min_val: 0, meta.labels.max_val: np.inf} @@ -275,12 +288,16 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): """ - if tag == 'historic': + if tag in ['historic', 'now']: # Files are by month, going to add date to monthly filename for # each day of the month. The load routine will load a month of # data and use the appended date to select out appropriate data. if format_str is None: - format_str = 'f107_monthly_{year:04d}-{month:02d}.txt' + if tag == 'historic': + format_str = 'f107_monthly_{year:04d}-{month:02d}.txt' + else: + format_str = 'F{:s}_{{year:04d}}-{{month:02d}}.txt'.format( + inst_id) out_files = pysat.Files.from_os(data_path=data_path, format_str=format_str) if not out_files.empty: @@ -393,6 +410,16 @@ def download(date_array, tag, inst_id, data_path, update_files=False): methods.swpc.old_indices_dsd_download(name, date_array, data_path, local_files, today) + elif tag == 'now': + # Set the download input options + gfz_data_name = 'F{:s}'.format(inst_id) + local_file_prefix = '{:s}_'.format(gfz_data_name) + + # Call the download routine + methods.gfz.json_download(date_array, data_path, local_file_prefix, + "%Y-%m", gfz_data_name, + pds.DateOffset(months=1, seconds=-1), + update_files=update_files) elif tag == 'daily': methods.swpc.daily_dsd_download(name, today, data_path) diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py index abe0b637..8bd44bb3 100644 --- a/pysatSpaceWeather/instruments/sw_ssn.py +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -10,6 +10,7 @@ tag - 'prelim' Preliminary SWPC daily solar indices - 'daily' Daily SWPC solar indices (contains last 30 days) + - 'now' Nowcast and definitive international sunspot number data from GFZ Examples -------- @@ -37,7 +38,9 @@ platform = 'sw' name = 'ssn' tags = {'prelim': 'Preliminary SWPC daily solar indices', - 'daily': 'Daily SWPC solar indices (contains last 30 days)'} + 'daily': 'Daily SWPC solar indices (contains last 30 days)', + 'now': + 'Nowcast and definitive international sunspot number data from GFZ'} # Dict keyed by inst_id that lists supported tags for each inst_id inst_ids = {'': [tag for tag in tags.keys()]} @@ -52,6 +55,7 @@ # Instrument test attributes _test_dates = {'': {'prelim': dt.datetime(2009, 1, 1), + 'now': dt.datetime(2009, 1, 1), 'daily': tomorrow}} # Other tags assumed to be True @@ -67,7 +71,10 @@ def init(self): """Initialize the Instrument object with instrument specific values.""" # Set the required Instrument attributes - self.acknowledgements = methods.swpc.ackn + if self.tag == 'now': + self.acknowledgements = methods.gfz.ackn + else: + self.acknowledgements = methods.swpc.ackn self.references = "".join(["E.g., Arlt, R., Vaquero, J.M. Historical ", "sunspot records. Living Rev Sol Phys 17, 1 ", '(2020). doi:10.1007/s41116-020-0023-y']) @@ -113,7 +120,7 @@ def load(fnames, tag='', inst_id=''): # Get the desired file dates and file names from the daily indexed list file_dates = list() - if tag == 'prelim': + if tag in ['prelim', 'now']: unique_files = list() for fname in fnames: file_dates.append(dt.datetime.strptime(fname[-10:], '%Y-%m-%d')) @@ -125,6 +132,10 @@ def load(fnames, tag='', inst_id=''): data = pysat.instruments.methods.general.load_csv_data( fnames, read_csv_kwargs={"index_col": 0, "parse_dates": True}) + # Adjust variable names to be consistent across data sets + if tag == 'now': + data = data.rename(columns={'SN': 'ssn'}) + # If there is a date range, downselect here if len(file_dates) > 0: idx, = np.where((data.index >= min(file_dates)) @@ -140,15 +151,16 @@ def load(fnames, tag='', inst_id=''): meta.labels.fill_val: -999, meta.labels.min_val: 0, meta.labels.max_val: np.inf} - meta['ss_area'] = {meta.labels.units: '10$^-6$ Solar Hemisphere', - meta.labels.name: 'Sunspot Area', - meta.labels.notes: '', - meta.labels.desc: - ''.join(['Sunspot Area in Millionths of the ', - 'Visible Hemisphere']), - meta.labels.fill_val: -999, - meta.labels.min_val: 0, - meta.labels.max_val: 1.0e6} + if 'ss_area' in data.columns: + meta['ss_area'] = {meta.labels.units: '10$^-6$ Solar Hemisphere', + meta.labels.name: 'Sunspot Area', + meta.labels.notes: '', + meta.labels.desc: + ''.join(['Sunspot Area in Millionths of the ', + 'Visible Hemisphere']), + meta.labels.fill_val: -999, + meta.labels.min_val: 0, + meta.labels.max_val: 1.0e6} if 'new_reg' in data.columns: meta['new_reg'] = {meta.labels.units: '', meta.labels.name: 'New Regions', @@ -229,6 +241,15 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): out_files = out_files.sort_index() out_files = out_files + '_' + out_files.index.strftime('%Y-%m-%d') + elif tag == 'now': + out_files = pysat.Files.from_os(data_path=data_path, + format_str=format_str) + if not out_files.empty: + freq = pds.DateOffset(months=1, days=-1) + out_files.loc[out_files.index[-1] + freq] = out_files.iloc[-1] + out_files = out_files.asfreq('D', 'pad') + out_files = out_files + '_' + out_files.index.strftime('%Y-%m-%d') + elif tag == 'daily': out_files = methods.swpc.list_files(name, tag, inst_id, data_path, format_str=format_str) @@ -274,4 +295,15 @@ def download(date_array, tag, inst_id, data_path, update_files=False): elif tag == 'daily': methods.swpc.daily_dsd_download(name, today, data_path) + elif tag == 'now': + # Set the download input options + gfz_data_name = 'SN' + local_file_prefix = '{:s}_'.format(gfz_data_name) + + # Call the download routine + methods.gfz.json_download(date_array, data_path, local_file_prefix, + "%Y-%m", gfz_data_name, + pds.DateOffset(months=1, seconds=-1), + update_files=update_files) + return From c7ba79683f060c2b0b522d3b9288b6fe54bb9e48 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 17:58:54 -0400 Subject: [PATCH 046/171] ENH: updated instrument imports Updated the instrument imports to include the new instruments. --- pysatSpaceWeather/instruments/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pysatSpaceWeather/instruments/__init__.py b/pysatSpaceWeather/instruments/__init__.py index a174ff6f..8fcd04a6 100644 --- a/pysatSpaceWeather/instruments/__init__.py +++ b/pysatSpaceWeather/instruments/__init__.py @@ -1,8 +1,9 @@ from pysatSpaceWeather.instruments import methods # noqa F401 __all__ = ['ace_epam', 'ace_mag', 'ace_sis', 'ace_swepam', 'sw_mgii', - 'sw_ap', 'sw_cp', 'sw_dst', 'sw_f107', 'sw_flare', 'sw_kp', - 'sw_polarcap', 'sw_sbfield', 'sw_ssn', 'sw_stormprob'] + 'sw_ap', 'sw_apo', 'sw_cp', 'sw_dst', 'sw_f107', 'sw_flare', + 'sw_hpo', 'sw_kp', 'sw_polarcap', 'sw_sbfield', 'sw_ssn', + 'sw_stormprob'] for inst in __all__: exec("from pysatSpaceWeather.instruments import {inst}".format(inst=inst)) From 21d72b1178589ac5277b43c57ad14b10037f8239 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 17:59:22 -0400 Subject: [PATCH 047/171] DOC: updated supported instruments Updated the supported instruments in the documentation to include the new apo and Hpo instruments. --- docs/supported_instruments.rst | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/supported_instruments.rst b/docs/supported_instruments.rst index e85b8aa5..f7a6d4da 100644 --- a/docs/supported_instruments.rst +++ b/docs/supported_instruments.rst @@ -95,6 +95,20 @@ disturbances at Earth, but unlike the Kp uses a linear scale. Historic, recent :members: +.. _sw-apo-inst: + +apo +^^^ + +apo is a linear (half)-hourly, planetary, open-ended, geomagnetic index that +reflects the magnitude of geomagnetic disturbances at Earth. It is like Ap, but +does not have an upper limit. Values from 1995 onwards are available from +`GFZ `_. + + +.. automodule:: pysatSpaceWeather.instruments.sw_apo + :members: + .. _sw-cp-inst: @@ -163,6 +177,21 @@ real-time indices, and forecasted indices are available from :members: +.. _sw-hpo-inst: + +Hpo +^^^ + +Hpo is a (half)-Hourly, Planetary, Open-ended, geomagnetic index that +reflects the magnitude of geomagnetic disturbances at Earth. It is like Kp, but +does not have an upper limit. Values from 1995 onwards are available from +`GFZ `_. + + +.. automodule:: pysatSpaceWeather.instruments.sw_hpo + :members: + + .. _sw-kp-inst: From 450e7869d2d4bab6f6aa738c4a239c598c723250 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 17:59:39 -0400 Subject: [PATCH 048/171] DOC: updated changelog Updated changelog to include the new instruments and functions. --- CHANGELOG.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7fa0e8e..5ba8ce6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,8 +8,10 @@ This project adheres to [Semantic Versioning](https://semver.org/). * Enhancements * Changed downloads to write files across multiple Instruments, when the remote files contain a mix of data products - * Added new instruments: sw_ap, sw_cp, sw_flare, sw_polar-cap, sw_sbfield, - sw_ssn, and sw_storm-prob + * Added new instruments: sw_ap, sw_apo, sw_cp, sw_flare, sw_hpo, sw_polar-cap, + sw_sbfield, sw_ssn, and sw_storm-prob + * Added new data sources (tag 'now') for the F10.7 from GFZ + * Created a general download routine for the GFZ data * Added new examples to the documentation [0.0.9] - 2022-12-21 From 20aa96f040edaf3ce49022275c776554eec4fb71 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 18:12:27 -0400 Subject: [PATCH 049/171] BUG: fixed download function name Fixed the name of the download function to be correct. --- pysatSpaceWeather/instruments/sw_apo.py | 6 +++--- pysatSpaceWeather/instruments/sw_f107.py | 8 ++++---- pysatSpaceWeather/instruments/sw_hpo.py | 6 +++--- pysatSpaceWeather/instruments/sw_ssn.py | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_apo.py b/pysatSpaceWeather/instruments/sw_apo.py index d37c5200..8c6492f9 100644 --- a/pysatSpaceWeather/instruments/sw_apo.py +++ b/pysatSpaceWeather/instruments/sw_apo.py @@ -197,8 +197,8 @@ def download(date_array, tag, inst_id, data_path, update_files=False): freq = pds.DateOffset(months=1, seconds=-1) # Call the download routine - methods.gfz.json_download(date_array, data_path, local_file_prefix, - local_date_fmt, gfz_data_name, freq, - update_files=update_files) + methods.gfz.json_downloads(date_array, data_path, local_file_prefix, + local_date_fmt, gfz_data_name, freq, + update_files=update_files) return diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index a6574cce..712e2a0f 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -416,10 +416,10 @@ def download(date_array, tag, inst_id, data_path, update_files=False): local_file_prefix = '{:s}_'.format(gfz_data_name) # Call the download routine - methods.gfz.json_download(date_array, data_path, local_file_prefix, - "%Y-%m", gfz_data_name, - pds.DateOffset(months=1, seconds=-1), - update_files=update_files) + methods.gfz.json_downloads(date_array, data_path, local_file_prefix, + "%Y-%m", gfz_data_name, + pds.DateOffset(months=1, seconds=-1), + update_files=update_files) elif tag == 'daily': methods.swpc.daily_dsd_download(name, today, data_path) diff --git a/pysatSpaceWeather/instruments/sw_hpo.py b/pysatSpaceWeather/instruments/sw_hpo.py index 6e81773b..86e8236b 100644 --- a/pysatSpaceWeather/instruments/sw_hpo.py +++ b/pysatSpaceWeather/instruments/sw_hpo.py @@ -196,8 +196,8 @@ def download(date_array, tag, inst_id, data_path, update_files=False): freq = pds.DateOffset(months=1, seconds=-1) # Call the download routine - methods.gfz.json_download(date_array, data_path, local_file_prefix, - local_date_fmt, gfz_data_name, freq, - update_files=update_files) + methods.gfz.json_downloads(date_array, data_path, local_file_prefix, + local_date_fmt, gfz_data_name, freq, + update_files=update_files) return diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py index 8bd44bb3..a2e3347b 100644 --- a/pysatSpaceWeather/instruments/sw_ssn.py +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -301,9 +301,9 @@ def download(date_array, tag, inst_id, data_path, update_files=False): local_file_prefix = '{:s}_'.format(gfz_data_name) # Call the download routine - methods.gfz.json_download(date_array, data_path, local_file_prefix, - "%Y-%m", gfz_data_name, - pds.DateOffset(months=1, seconds=-1), - update_files=update_files) + methods.gfz.json_downloads(date_array, data_path, local_file_prefix, + "%Y-%m", gfz_data_name, + pds.DateOffset(months=1, seconds=-1), + update_files=update_files) return From 12c900069e44600acc2dc377b097b5a97f95aa96 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 18:14:55 -0400 Subject: [PATCH 050/171] DOC: fixed broken link Updated the GFZ Hpo link in the docs. --- docs/supported_instruments.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/supported_instruments.rst b/docs/supported_instruments.rst index f7a6d4da..a6ef2efe 100644 --- a/docs/supported_instruments.rst +++ b/docs/supported_instruments.rst @@ -103,7 +103,7 @@ apo apo is a linear (half)-hourly, planetary, open-ended, geomagnetic index that reflects the magnitude of geomagnetic disturbances at Earth. It is like Ap, but does not have an upper limit. Values from 1995 onwards are available from -`GFZ `_. +`GFZ `_. .. automodule:: pysatSpaceWeather.instruments.sw_apo @@ -185,7 +185,7 @@ Hpo Hpo is a (half)-Hourly, Planetary, Open-ended, geomagnetic index that reflects the magnitude of geomagnetic disturbances at Earth. It is like Kp, but does not have an upper limit. Values from 1995 onwards are available from -`GFZ `_. +`GFZ `_. .. automodule:: pysatSpaceWeather.instruments.sw_hpo From 8e9766d374084074a58b68122f9a45d19e4714b2 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 18:17:47 -0400 Subject: [PATCH 051/171] BUG: added missing format string Added missing `format_str` to the SSN instrument. --- pysatSpaceWeather/instruments/sw_ssn.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py index a2e3347b..3ac9abdc 100644 --- a/pysatSpaceWeather/instruments/sw_ssn.py +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -242,6 +242,9 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): out_files = out_files + '_' + out_files.index.strftime('%Y-%m-%d') elif tag == 'now': + if format_str is None: + format_str = 'SN_{year:04d}-{month:02d}.txt' + out_files = pysat.Files.from_os(data_path=data_path, format_str=format_str) if not out_files.empty: From 30d49d4ea317c0af0d46b4d3ceb7ab4755e4f9ec Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 18:28:42 -0400 Subject: [PATCH 052/171] DOC: updated `combine_f107` docstring Updated the docstring for `combine_f107` to include the new Instrument tag. --- pysatSpaceWeather/instruments/methods/f107.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/f107.py b/pysatSpaceWeather/instruments/methods/f107.py index 507b90c1..874613b4 100644 --- a/pysatSpaceWeather/instruments/methods/f107.py +++ b/pysatSpaceWeather/instruments/methods/f107.py @@ -87,10 +87,10 @@ def combine_f107(standard_inst, forecast_inst, start=None, stop=None): ---------- standard_inst : pysat.Instrument or NoneType Instrument object containing data for the 'sw' platform, 'f107' name, - and 'historic', 'prelim', or 'daily' tag + and 'historic', 'prelim', 'now', or 'daily' tag forecast_inst : pysat.Instrument or NoneType Instrument object containing data for the 'sw' platform, 'f107' name, - and 'prelim', '45day' or 'forecast' tag + and 'now', 'prelim', '45day' or 'forecast' tag start : dt.datetime or NoneType Starting time for combining data, or None to use earliest loaded date from the pysat Instruments (default=None) From 1428455d5132d8fb1641ff0b2e327bff9714b42a Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 18:29:12 -0400 Subject: [PATCH 053/171] TST: fixed combine test Fixed the combine test to include the 'now'-'obs' GFZ F10.7 data. --- pysatSpaceWeather/tests/test_methods_f107.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pysatSpaceWeather/tests/test_methods_f107.py b/pysatSpaceWeather/tests/test_methods_f107.py index e3f38304..15b96095 100644 --- a/pysatSpaceWeather/tests/test_methods_f107.py +++ b/pysatSpaceWeather/tests/test_methods_f107.py @@ -131,7 +131,10 @@ def setup_method(self): # Set combination testing input self.test_day = dt.datetime(2019, 3, 16) + inst_id = {tag: '' for tag in sw_f107.tags.keys()} + inst_id['now'] = 'obs' self.combine_inst = {tag: pysat.Instrument(inst_module=sw_f107, tag=tag, + inst_id=inst_id[tag], update_files=True) for tag in sw_f107.tags.keys()} self.combine_times = {"start": self.test_day - dt.timedelta(days=30), From 98c39da7861bd82c4c7224f6ef2a1794097cfe56 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 13 Mar 2023 18:29:51 -0400 Subject: [PATCH 054/171] STY: fixed spacing Removed an extra space. --- pysatSpaceWeather/tests/test_methods_f107.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatSpaceWeather/tests/test_methods_f107.py b/pysatSpaceWeather/tests/test_methods_f107.py index 15b96095..90906f57 100644 --- a/pysatSpaceWeather/tests/test_methods_f107.py +++ b/pysatSpaceWeather/tests/test_methods_f107.py @@ -131,7 +131,7 @@ def setup_method(self): # Set combination testing input self.test_day = dt.datetime(2019, 3, 16) - inst_id = {tag: '' for tag in sw_f107.tags.keys()} + inst_id = {tag: '' for tag in sw_f107.tags.keys()} inst_id['now'] = 'obs' self.combine_inst = {tag: pysat.Instrument(inst_module=sw_f107, tag=tag, inst_id=inst_id[tag], From a6621e961570f925a5159e6305c96de93d51da91 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 14 Mar 2023 16:00:04 -0400 Subject: [PATCH 055/171] MAINT: fixed spelling Fixed the spelling to be a word that makes sense in context. --- pysatSpaceWeather/instruments/sw_f107.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index 712e2a0f..9677bf15 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -15,7 +15,7 @@ tag - 'historic' LASP F10.7 data (downloads by month, loads by day) - 'prelim' Preliminary SWPC daily solar indices - - 'now' A mist of nowcast and definitive values from GFZ + - 'now' A mix of nowcast and definitive values from GFZ - 'daily' Daily SWPC solar indices (contains last 30 days) - 'forecast' Grab forecast data from SWPC (next 3 days) - '45day' 45-Day Forecast data from the Air Force From 5b59cba9afafe80fb4b0cab8faa1b4b64c448239 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 14 Mar 2023 16:05:37 -0400 Subject: [PATCH 056/171] STY: made inst_id in docs a list Added a list with descriptions for the inst IDs. --- pysatSpaceWeather/instruments/sw_ap.py | 2 +- pysatSpaceWeather/instruments/sw_apo.py | 3 ++- pysatSpaceWeather/instruments/sw_cp.py | 2 +- pysatSpaceWeather/instruments/sw_dst.py | 6 +++--- pysatSpaceWeather/instruments/sw_f107.py | 4 +++- pysatSpaceWeather/instruments/sw_hpo.py | 3 ++- pysatSpaceWeather/instruments/sw_kp.py | 2 +- pysatSpaceWeather/instruments/sw_polarcap.py | 2 +- pysatSpaceWeather/instruments/sw_stormprob.py | 2 +- 9 files changed, 15 insertions(+), 11 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_ap.py b/pysatSpaceWeather/instruments/sw_ap.py index cfe7658d..caa456c5 100644 --- a/pysatSpaceWeather/instruments/sw_ap.py +++ b/pysatSpaceWeather/instruments/sw_ap.py @@ -15,7 +15,7 @@ - 'recent' The last 30 days of Ap data from SWPC - '45day' 45-Day forecast data from the Air Force inst_id - '' + - '' Note ---- diff --git a/pysatSpaceWeather/instruments/sw_apo.py b/pysatSpaceWeather/instruments/sw_apo.py index 8c6492f9..f7e6d753 100644 --- a/pysatSpaceWeather/instruments/sw_apo.py +++ b/pysatSpaceWeather/instruments/sw_apo.py @@ -10,7 +10,8 @@ tag - 'now' Near real-time nowcast apo data from GFZ inst_id - '30min', '60min' + - '30min' Half-hourly indices + - '60min' Hourly indices Note ---- diff --git a/pysatSpaceWeather/instruments/sw_cp.py b/pysatSpaceWeather/instruments/sw_cp.py index 09869162..538a31b3 100644 --- a/pysatSpaceWeather/instruments/sw_cp.py +++ b/pysatSpaceWeather/instruments/sw_cp.py @@ -11,7 +11,7 @@ - 'def' Definitive Cp data from GFZ - 'now' Nowcast Cp data from GFZ inst_id - '' + - '' Note ---- diff --git a/pysatSpaceWeather/instruments/sw_dst.py b/pysatSpaceWeather/instruments/sw_dst.py index 750fe840..18eac625 100644 --- a/pysatSpaceWeather/instruments/sw_dst.py +++ b/pysatSpaceWeather/instruments/sw_dst.py @@ -8,10 +8,10 @@ name 'dst' tag - 'noaa' - Historic Dst data coalated by and maintained by NOAA/NCEI - 'lasp' - Predicted Dst from real-time ACE or DSCOVR provided by LASP + - 'noaa' Historic Dst data coalated by and maintained by NOAA/NCEI + - 'lasp' Predicted Dst from real-time ACE or DSCOVR provided by LASP inst_id - '' + - '' Note ---- diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index 9677bf15..8cb2d4ff 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -20,7 +20,9 @@ - 'forecast' Grab forecast data from SWPC (next 3 days) - '45day' 45-Day Forecast data from the Air Force inst_id - '', 'obs', 'adj' + - '' No distinction, may include observed, adjusted, or both + - 'obs' Observed F10.7 + - 'adj' Adjusted F10.7 Examples -------- diff --git a/pysatSpaceWeather/instruments/sw_hpo.py b/pysatSpaceWeather/instruments/sw_hpo.py index 86e8236b..33073a5e 100644 --- a/pysatSpaceWeather/instruments/sw_hpo.py +++ b/pysatSpaceWeather/instruments/sw_hpo.py @@ -10,7 +10,8 @@ tag - 'now' Near real-time nowcast Hpo data from GFZ inst_id - '30min', '60min' + - '30min' Half-hourly resolution indices + - '60min' Hourly resolution indices Note ---- diff --git a/pysatSpaceWeather/instruments/sw_kp.py b/pysatSpaceWeather/instruments/sw_kp.py index 267fae7e..141d7f3e 100644 --- a/pysatSpaceWeather/instruments/sw_kp.py +++ b/pysatSpaceWeather/instruments/sw_kp.py @@ -15,7 +15,7 @@ - 'forecast' Forecast data from SWPC (next 3 days) - 'recent' The last 30 days of Kp data from SWPC inst_id - '' + - '' Note ---- diff --git a/pysatSpaceWeather/instruments/sw_polarcap.py b/pysatSpaceWeather/instruments/sw_polarcap.py index 022b7919..e273e77b 100644 --- a/pysatSpaceWeather/instruments/sw_polarcap.py +++ b/pysatSpaceWeather/instruments/sw_polarcap.py @@ -10,7 +10,7 @@ tag - 'prediction' Predictions from SWPC for the next 3 days inst_id - '' + - '' Note ---- diff --git a/pysatSpaceWeather/instruments/sw_stormprob.py b/pysatSpaceWeather/instruments/sw_stormprob.py index c8317c19..379fcfec 100644 --- a/pysatSpaceWeather/instruments/sw_stormprob.py +++ b/pysatSpaceWeather/instruments/sw_stormprob.py @@ -11,7 +11,7 @@ - 'prediction' Predictions from SWPC for the next 3 days - 'forecast' Grab forecast data from SWPC (next 3 days) inst_id - '' + - '' Note ---- From abac8c880cd5c918e7a48a41b233ab8a0f39415d Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 27 Mar 2023 15:46:41 -0400 Subject: [PATCH 057/171] ENH: added ack/refs for AE data Added acknowledgements and references for auroral electrojet indices. --- .../instruments/methods/auroral_electrojet.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 pysatSpaceWeather/instruments/methods/auroral_electrojet.py diff --git a/pysatSpaceWeather/instruments/methods/auroral_electrojet.py b/pysatSpaceWeather/instruments/methods/auroral_electrojet.py new file mode 100644 index 00000000..62835441 --- /dev/null +++ b/pysatSpaceWeather/instruments/methods/auroral_electrojet.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*-. +"""Provides support routines for auroral electrojet indices.""" + + +def acknowledgements(name, tag): + """Define the acknowledgements for the index and data source. + + Parameters + ---------- + name : str + Name of the auroral electrojet index + tag : str + Tag of the auroral electrojet index + + Returns + ------- + ackn : str + Acknowledgements string associated with the appropriate auroral + electrojet tag. + + """ + + ackn = {'lasp': ''.join(['Preliminary ', name.upper(), ' predictions are ', + 'provided by LASP, contact Xinlin Li for more ', + 'details '])} + + return ackn[tag] + + +def references(name, tag): + """Define the references for the auroral electrojet data. + + Parameters + ---------- + name : str + Name of the auroral electrojet index + tag : string + Tag of the space weather index + + Returns + ------- + refs : str + Reference string associated with the appropriate Dst tag. + + """ + + davis = ''.join(['Davis, T. N., and Sugiura, M. (1966), Auroral electrojet', + ' activity index AE and its universal time variations, ', + 'J. Geophys. Res., 71( 3), 785– 801, ', + 'doi:10.1029/JZ071i003p00785.']) + + luo_au_al_ae = ''.join(['Luo, B., Li, X., Temerin, M., and Liu, S. (2013),', + 'Prediction of the AU, AL, and AE indices using ', + 'solar wind parameters, J. Geophys. Res. Space ', + 'Physics, 118, 7683– 7694, ', + 'doi:10.1002/2013JA019188.']) + li_al = ''.join(['Li, X., Oh, K. S., and Temerin, M. (2007), Prediction ', + 'of the AL index using solar wind parameters, J. ', + 'Geophys. Res., 112, A06224, doi:10.1029/2006JA011918.']) + + refs = {'lasp': {'ae': '\n'.join([davis, luo_au_al_ae]), + 'au': '\n'.join([davis, luo_au_al_ae]), + 'al': '\n'.join([davis, li_al, luo_au_al_ae])}} + + return refs[tag][name] From b230481f3bca9f367bb6ccda1ca492e1ee1d627e Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 27 Mar 2023 15:47:08 -0400 Subject: [PATCH 058/171] ENH: added LASP predictions download Added a download function for the LASP predictions data. --- pysatSpaceWeather/instruments/methods/lasp.py | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 pysatSpaceWeather/instruments/methods/lasp.py diff --git a/pysatSpaceWeather/instruments/methods/lasp.py b/pysatSpaceWeather/instruments/methods/lasp.py new file mode 100644 index 00000000..f91ceae5 --- /dev/null +++ b/pysatSpaceWeather/instruments/methods/lasp.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*-. +"""Provides support routines for LASP data.""" + +import datetime as dt +import numpy as np +import os +import pandas as pds +import requests + +import pysat + + +def prediction_downloads(name, tag, data_path): + """Download LASP 96-hour prediction data. + + Parameters + ---------- + name : str + Instrument name, currently supports Dst, AL, AE, and AU. + tag : str + Instrument tag, used to create a descriptive file name. + data_path : str + Path to data directory. + + Raises + ------ + IOError + If the data link has an unexpected format + + """ + + # Set the remote data variables + url = ''.join(['https://lasp.colorado.edu/space_weather/dsttemerin/', + name.lower(), '_last_96_hrs.txt']) + times = list() + data_dict = {name.lower(): []} + + # Download the webpage + req = requests.get(url) + + # Test to see if the file was found on the server + if req.text.find('not found on this server') > 0: + pysat.logger.warning(''.join(['LASP last 96 hour Dst file not ', + 'found on server: ', url])) + else: + # Split the file into lines, removing the header and + # trailing empty line + file_lines = req.text.split('\n')[1:-1] + + # Format the data + for line in file_lines: + # Split the line on whitespace + line_cols = line.split() + + if len(line_cols) != 2: + raise IOError(''.join(['unexpected line encountered in file ', + 'retrieved from ', url, ':\n', line])) + + # Format the time and AL values + times.append(dt.datetime.strptime(line_cols[0], '%Y/%j-%H:%M:%S')) + data_dict[name.lower()].append(np.float64(line_cols[1])) + + # Re-cast the data as a pandas DataFrame + data = pds.DataFrame(data_dict, index=times) + + # Write out as a file + file_base = '_'.join(['sw', name, tag, + pysat.utils.time.today().strftime('%Y-%m-%d')]) + file_name = os.path.join(data_path, '{:s}.txt'.format(file_base)) + data.to_csv(file_name) + + return From fc179d7c98cd63b47e05b0b5270ac67a0c8f6966 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 27 Mar 2023 15:47:31 -0400 Subject: [PATCH 059/171] ENH: updated LASP downloads Updated the LASP Dst downloads to use the general LASP function. --- pysatSpaceWeather/instruments/sw_dst.py | 42 ++----------------------- 1 file changed, 2 insertions(+), 40 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_dst.py b/pysatSpaceWeather/instruments/sw_dst.py index 18eac625..9c5931d2 100644 --- a/pysatSpaceWeather/instruments/sw_dst.py +++ b/pysatSpaceWeather/instruments/sw_dst.py @@ -36,6 +36,7 @@ import pysat from pysatSpaceWeather.instruments.methods import dst as mm_dst +from pysatSpaceWeather.instruments.methods import lasp # ---------------------------------------------------------------------------- # Instrument attributes @@ -289,45 +290,6 @@ def download(date_array, tag, inst_id, data_path): ftp.close() elif tag == 'lasp': - # Set the remote data variables - url = ''.join(['https://lasp.colorado.edu/space_weather/dsttemerin/', - 'dst_last_96_hrs.txt']) - times = list() - data_dict = {'dst': []} - - # Download the webpage - req = requests.get(url) - - # Test to see if the file was found on the server - if req.text.find('not found on this server') > 0: - pysat.logger.warning(''.join(['LASP last 96 hour Dst file not ', - 'found on server: ', url])) - else: - # Split the file into lines, removing the header and - # trailing empty line - file_lines = req.text.split('\n')[1:-1] - - # Format the data - for line in file_lines: - # Split the line on whitespace - line_cols = line.split() - - if len(line_cols) != 2: - raise IOError(''.join(['unexpected line encountered in ', - 'file retrieved from ', url, ':\n', - line])) - - # Format the time and Dst values - times.append(dt.datetime.strptime(line_cols[0], - '%Y/%j-%H:%M:%S')) - data_dict['dst'].append(np.float64(line_cols[1])) - - # Re-cast the data as a pandas DataFrame - data = pds.DataFrame(data_dict, index=times) - - # Write out as a file - file_base = '_'.join(['sw', 'dst', tag, today.strftime('%Y-%m-%d')]) - file_name = os.path.join(data_path, '{:s}.txt'.format(file_base)) - data.to_csv(file_name) + lasp.prediction_downloads(name, tag, data_path) return From 76c55a075d175573610b0f8061dc94307e7a81cb Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 27 Mar 2023 15:48:05 -0400 Subject: [PATCH 060/171] TST: added AE unit tests Added unit tests for the auroral electrojet functions. --- pysatSpaceWeather/tests/test_methods_ae.py | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 pysatSpaceWeather/tests/test_methods_ae.py diff --git a/pysatSpaceWeather/tests/test_methods_ae.py b/pysatSpaceWeather/tests/test_methods_ae.py new file mode 100644 index 00000000..6ce68847 --- /dev/null +++ b/pysatSpaceWeather/tests/test_methods_ae.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# ---------------------------------------------------------------------------- +"""Integration and unit test suite for AE methods.""" + +import pytest + +from pysatSpaceWeather.instruments.methods import auroral_electrojet as mm_ae + + +class TestAEMethods(object): + """Test class for the auroral electrojet methods.""" + + def setup_method(self): + """Create a clean testing setup.""" + self.out = None + return + + def teardown_method(self): + """Clean up previous testing setup.""" + del self.out + return + + @pytest.mark.parametrize('name', ['ae', 'al', 'au']) + def test_acknowledgements(self, name): + """Test the auroral electrojet acknowledgements. + + Parameters + ---------- + name : str + Instrument name + + """ + self.out = mm_ae.acknowledgements(name, 'lasp') + assert self.out.find(name.upper()) >= 0 + return + + @pytest.mark.parametrize('name', ['ae', 'al', 'au']) + def test_references(self, name): + """Test the references for an AE instrument. + + Parameters + ---------- + name : str + Instrument name + + """ + self.out = mm_ae.references(name, 'lasp') + assert self.out.find('Davis, T. N.') >= 0 + return From 4938269610d7f65acc3aecd5e27f9d4c6aca60ed Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 27 Mar 2023 15:48:37 -0400 Subject: [PATCH 061/171] ENH: added auroral electrojet instruments Added auroral electrojet index instruments for the LASP prediction datasets. --- pysatSpaceWeather/instruments/__init__.py | 6 +- pysatSpaceWeather/instruments/sw_ae.py | 168 ++++++++++++++++++++++ pysatSpaceWeather/instruments/sw_al.py | 168 ++++++++++++++++++++++ pysatSpaceWeather/instruments/sw_au.py | 168 ++++++++++++++++++++++ 4 files changed, 507 insertions(+), 3 deletions(-) create mode 100644 pysatSpaceWeather/instruments/sw_ae.py create mode 100644 pysatSpaceWeather/instruments/sw_al.py create mode 100644 pysatSpaceWeather/instruments/sw_au.py diff --git a/pysatSpaceWeather/instruments/__init__.py b/pysatSpaceWeather/instruments/__init__.py index 8fcd04a6..efa92021 100644 --- a/pysatSpaceWeather/instruments/__init__.py +++ b/pysatSpaceWeather/instruments/__init__.py @@ -1,8 +1,8 @@ from pysatSpaceWeather.instruments import methods # noqa F401 -__all__ = ['ace_epam', 'ace_mag', 'ace_sis', 'ace_swepam', 'sw_mgii', - 'sw_ap', 'sw_apo', 'sw_cp', 'sw_dst', 'sw_f107', 'sw_flare', - 'sw_hpo', 'sw_kp', 'sw_polarcap', 'sw_sbfield', 'sw_ssn', +__all__ = ['ace_epam', 'ace_mag', 'ace_sis', 'ace_swepam', 'sw_ae', 'sw_al', + 'sw_au', 'sw_ap', 'sw_apo', 'sw_cp', 'sw_dst', 'sw_f107', 'sw_flare', + 'sw_hpo', 'sw_kp', 'sw_mgii', 'sw_polarcap', 'sw_sbfield', 'sw_ssn', 'sw_stormprob'] for inst in __all__: diff --git a/pysatSpaceWeather/instruments/sw_ae.py b/pysatSpaceWeather/instruments/sw_ae.py new file mode 100644 index 00000000..5b2f1c20 --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_ae.py @@ -0,0 +1,168 @@ +# -*- coding: utf-8 -*- +"""Supports the auroral electrojet AE values. + +Properties +---------- +platform + 'sw' +name + 'al' +tag + - 'lasp' Predicted Dst from real-time ACE or DSCOVR provided by LASP +inst_id + - '' + +""" + +import datetime as dt +import numpy as np + +import pysat + +from pysatSpaceWeather.instruments.methods import auroral_electrojet as mm_ae +from pysatSpaceWeather.instruments.methods import lasp + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'al' +tags = {'lasp': 'Predicted AE from real-time ACE or DSCOVR provided by LASP'} +inst_ids = {'': [tag for tag in tags.keys()]} + +# Generate today's date to support loading predicted data sets +today = pysat.utils.time.today() +tomorrow = today + dt.timedelta(days=1) + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +_test_dates = {'': {'lasp': today}} + +# ---------------------------------------------------------------------------- +# Instrument methods + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + self.acknowledgements = mm_ae.acknowledgements(self.name, self.tag) + self.references = mm_ae.references(self.name, self.tag) + pysat.logger.info(self.acknowledgements) + return + + +def clean(self): + """Clean the AE index, empty function.""" + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + + +def load(fnames, tag='', inst_id=''): + """Load the AE index files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames + tag : str + Instrument tag string. (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + data : pandas.DataFrame + Object containing satellite data + pysat.Meta + Object containing metadata such as column names and units + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + data = pysat.instruments.methods.general.load_csv_data( + fnames, read_csv_kwargs={'index_col': 0, 'parse_dates': True}) + + # Create metadata + meta = pysat.Meta() + meta['ae'] = {meta.labels.units: 'nT', + meta.labels.name: 'AE', + meta.labels.notes: tags[tag], + meta.labels.desc: ''.join([ + 'Auroral Electrojet index, best estimate ', + 'of the average value over the next two hours']), + meta.labels.fill_val: np.nan, + meta.labels.min_val: -np.inf, + meta.labels.max_val: np.inf} + + return data, meta + + +def list_files(tag='', inst_id='', data_path='', format_str=None): + """List local data files for Dst data. + + Parameters + ---------- + tag : str + Instrument tag, accepts any value from `tags`. (default='') + inst_id : str + Instrument ID, not used. (default='') + data_path : str + Path to data directory. (default='') + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + files : pysat.Files + A class containing the verified available files + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + # Get the format string, if not supplied by the user + if format_str is None: + format_str = ''.join(['sw_ae_', tag, '_{year:4d}-{month:2d}-', + '{day:2d}.txt']) + + # Get the desired files + files = pysat.Files.from_os(data_path=data_path, format_str=format_str) + + return files + + +def download(date_array, tag, inst_id, data_path): + """Download the AE index data from the appropriate repository. + + Parameters + ---------- + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes for which files will be downloaded. + tag : str + Instrument tag, used to determine download location. + inst_id : str + Instrument ID, not used. + data_path : str + Path to data directory. + + Raises + ------ + IOError + If the data link has an unexpected format + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + lasp.prediction_downloads(name, tag, data_path) + + return diff --git a/pysatSpaceWeather/instruments/sw_al.py b/pysatSpaceWeather/instruments/sw_al.py new file mode 100644 index 00000000..5efac2c9 --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_al.py @@ -0,0 +1,168 @@ +# -*- coding: utf-8 -*- +"""Supports the auroral electrojet AL values. + +Properties +---------- +platform + 'sw' +name + 'al' +tag + - 'lasp' Predicted Dst from real-time ACE or DSCOVR provided by LASP +inst_id + - '' + +""" + +import datetime as dt +import numpy as np + +import pysat + +from pysatSpaceWeather.instruments.methods import auroral_electrojet as mm_ae +from pysatSpaceWeather.instruments.methods import lasp + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'al' +tags = {'lasp': 'Predicted AL from real-time ACE or DSCOVR provided by LASP'} +inst_ids = {'': [tag for tag in tags.keys()]} + +# Generate today's date to support loading predicted data sets +today = pysat.utils.time.today() +tomorrow = today + dt.timedelta(days=1) + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +_test_dates = {'': {'lasp': today}} + +# ---------------------------------------------------------------------------- +# Instrument methods + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + self.acknowledgements = mm_ae.acknowledgements(self.name, self.tag) + self.references = mm_ae.references(self.name, self.tag) + pysat.logger.info(self.acknowledgements) + return + + +def clean(self): + """Clean the AL index, empty function.""" + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + + +def load(fnames, tag='', inst_id=''): + """Load the AL index files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames + tag : str + Instrument tag string. (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + data : pandas.DataFrame + Object containing satellite data + pysat.Meta + Object containing metadata such as column names and units + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + data = pysat.instruments.methods.general.load_csv_data( + fnames, read_csv_kwargs={'index_col': 0, 'parse_dates': True}) + + # Create metadata + meta = pysat.Meta() + meta['al'] = {meta.labels.units: 'nT', + meta.labels.name: 'AL', + meta.labels.notes: tags[tag], + meta.labels.desc: ''.join([ + 'Auroral Electrojet lower envelope, best estimate ', + 'of the average value over the next two hours']), + meta.labels.fill_val: np.nan, + meta.labels.min_val: -np.inf, + meta.labels.max_val: 0.0} + + return data, meta + + +def list_files(tag='', inst_id='', data_path='', format_str=None): + """List local data files for Dst data. + + Parameters + ---------- + tag : str + Instrument tag, accepts any value from `tags`. (default='') + inst_id : str + Instrument ID, not used. (default='') + data_path : str + Path to data directory. (default='') + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + files : pysat.Files + A class containing the verified available files + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + # Get the format string, if not supplied by the user + if format_str is None: + format_str = ''.join(['sw_al_', tag, '_{year:4d}-{month:2d}-', + '{day:2d}.txt']) + + # Get the desired files + files = pysat.Files.from_os(data_path=data_path, format_str=format_str) + + return files + + +def download(date_array, tag, inst_id, data_path): + """Download the AL index data from the appropriate repository. + + Parameters + ---------- + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes for which files will be downloaded. + tag : str + Instrument tag, used to determine download location. + inst_id : str + Instrument ID, not used. + data_path : str + Path to data directory. + + Raises + ------ + IOError + If the data link has an unexpected format + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + lasp.prediction_downloads(name, tag, data_path) + + return diff --git a/pysatSpaceWeather/instruments/sw_au.py b/pysatSpaceWeather/instruments/sw_au.py new file mode 100644 index 00000000..02c50577 --- /dev/null +++ b/pysatSpaceWeather/instruments/sw_au.py @@ -0,0 +1,168 @@ +# -*- coding: utf-8 -*- +"""Supports the auroral electrojet AU values. + +Properties +---------- +platform + 'sw' +name + 'au' +tag + - 'lasp' Predicted Dst from real-time ACE or DSCOVR provided by LASP +inst_id + - '' + +""" + +import datetime as dt +import numpy as np + +import pysat + +from pysatSpaceWeather.instruments.methods import auroral_electrojet as mm_ae +from pysatSpaceWeather.instruments.methods import lasp + +# ---------------------------------------------------------------------------- +# Instrument attributes + +platform = 'sw' +name = 'au' +tags = {'lasp': 'Predicted AU from real-time ACE or DSCOVR provided by LASP'} +inst_ids = {'': [tag for tag in tags.keys()]} + +# Generate today's date to support loading predicted data sets +today = pysat.utils.time.today() +tomorrow = today + dt.timedelta(days=1) + +# ---------------------------------------------------------------------------- +# Instrument test attributes + +_test_dates = {'': {'lasp': today}} + +# ---------------------------------------------------------------------------- +# Instrument methods + + +def init(self): + """Initialize the Instrument object with instrument specific values.""" + + self.acknowledgements = mm_ae.acknowledgements(self.name, self.tag) + self.references = mm_ae.references(self.name, self.tag) + pysat.logger.info(self.acknowledgements) + return + + +def clean(self): + """Clean the AU index, empty function.""" + return + + +# ---------------------------------------------------------------------------- +# Instrument functions + + +def load(fnames, tag='', inst_id=''): + """Load the AU index files. + + Parameters + ---------- + fnames : pandas.Series + Series of filenames + tag : str + Instrument tag string. (default='') + inst_id : str + Instrument ID, not used. (default='') + + Returns + ------- + data : pandas.DataFrame + Object containing satellite data + pysat.Meta + Object containing metadata such as column names and units + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + data = pysat.instruments.methods.general.load_csv_data( + fnames, read_csv_kwargs={'index_col': 0, 'parse_dates': True}) + + # Create metadata + meta = pysat.Meta() + meta['au'] = {meta.labels.units: 'nT', + meta.labels.name: 'AU', + meta.labels.notes: tags[tag], + meta.labels.desc: ''.join([ + 'Auroral Electrojet upper envelope, best estimate ', + 'of the average value over the next two hours']), + meta.labels.fill_val: np.nan, + meta.labels.min_val: 0.0, + meta.labels.max_val: np.inf} + + return data, meta + + +def list_files(tag='', inst_id='', data_path='', format_str=None): + """List local data files for Dst data. + + Parameters + ---------- + tag : str + Instrument tag, accepts any value from `tags`. (default='') + inst_id : str + Instrument ID, not used. (default='') + data_path : str + Path to data directory. (default='') + format_str : str or NoneType + User specified file format. If None is specified, the default + formats associated with the supplied tags are used. (default=None) + + Returns + ------- + files : pysat.Files + A class containing the verified available files + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + # Get the format string, if not supplied by the user + if format_str is None: + format_str = ''.join(['sw_au_', tag, '_{year:4d}-{month:2d}-', + '{day:2d}.txt']) + + # Get the desired files + files = pysat.Files.from_os(data_path=data_path, format_str=format_str) + + return files + + +def download(date_array, tag, inst_id, data_path): + """Download the AU index data from the appropriate repository. + + Parameters + ---------- + date_array : array-like or pandas.DatetimeIndex + Array-like or index of datetimes for which files will be downloaded. + tag : str + Instrument tag, used to determine download location. + inst_id : str + Instrument ID, not used. + data_path : str + Path to data directory. + + Raises + ------ + IOError + If the data link has an unexpected format + + Note + ---- + Called by pysat. Not intended for direct use by user. + + """ + lasp.prediction_downloads(name, tag, data_path) + + return From 7836153346dd49f443990b6dc35221bf06709f62 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 27 Mar 2023 15:48:56 -0400 Subject: [PATCH 062/171] DOC: updated supported instruments Updated the supported instruments to include the auroral electrojet indices. --- docs/supported_instruments.rst | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/supported_instruments.rst b/docs/supported_instruments.rst index a6ef2efe..69cec7fd 100644 --- a/docs/supported_instruments.rst +++ b/docs/supported_instruments.rst @@ -78,6 +78,53 @@ by :py:class:`pysat.Instrument` and saved into appropriate files. For example, the definitive Kp data from the German Research Centre for Geosciences at Potsdam (GFZ) will also download Ap and Cp data files. +.. _sw-ae-inst: + +AE +^^^ + +AE is an auroral electrojet index that reflects the level of magnetic deflection +in the auroral zone, due to the difference between the eastward and westward +electroject currents at Earth. Real-time predictions (last 96 hours) are +provided by +`LASP `_. + + +.. automodule:: pysatSpaceWeather.instruments.sw_ae + :members: + + +.. _sw-al-inst: + + +AL +^^^ + +AL is an auroral electrojet index that reflects the lower envelope, the negative +peak of the electroject currents at Earth. Real-time predictions (last 96 +hours) are provided by +`LASP `_. + + +.. automodule:: pysatSpaceWeather.instruments.sw_al + :members: + + +.. _sw-al-inst: + + +AU +^^^ + +AU is an auroral electrojet index that reflects the upper envelope, the positive +peak of the electroject currents at Earth. Real-time predictions (last 96 +hours) are provided by +`LASP `_. + + +.. automodule:: pysatSpaceWeather.instruments.sw_au + :members: + .. _sw-ap-inst: From 246628cb5a4f7dd8768e7284d259e95367976f37 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 27 Mar 2023 15:49:32 -0400 Subject: [PATCH 063/171] DOC: updated the changelog Added the new instruments and functions to the changelog. --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ba8ce6c..df8d56e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,10 +8,10 @@ This project adheres to [Semantic Versioning](https://semver.org/). * Enhancements * Changed downloads to write files across multiple Instruments, when the remote files contain a mix of data products - * Added new instruments: sw_ap, sw_apo, sw_cp, sw_flare, sw_hpo, sw_polar-cap, - sw_sbfield, sw_ssn, and sw_storm-prob + * Added new instruments: sw_ae, sw_al, sw_au, sw_ap, sw_apo, sw_cp, sw_flare, + sw_hpo, sw_polar-cap, sw_sbfield, sw_ssn, and sw_storm-prob * Added new data sources (tag 'now') for the F10.7 from GFZ - * Created a general download routine for the GFZ data + * Created a general download routine for the GFZ and LASP data * Added new examples to the documentation [0.0.9] - 2022-12-21 From a3342a0f1d0c4aff7b41609adcc921909d359cb2 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 27 Mar 2023 15:51:30 -0400 Subject: [PATCH 064/171] ENH: added method imports Added imports for the new instrument methods, `auroral_electrojet` and `lasp`. --- pysatSpaceWeather/instruments/methods/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pysatSpaceWeather/instruments/methods/__init__.py b/pysatSpaceWeather/instruments/methods/__init__.py index 0b00c319..28ada584 100644 --- a/pysatSpaceWeather/instruments/methods/__init__.py +++ b/pysatSpaceWeather/instruments/methods/__init__.py @@ -1,8 +1,10 @@ from pysatSpaceWeather.instruments.methods import ace # noqa F401 +from pysatSpaceWeather.instruments.methods import auroral_electrojet # noqa F401 from pysatSpaceWeather.instruments.methods import dst # noqa F401 from pysatSpaceWeather.instruments.methods import f107 # noqa F401 from pysatSpaceWeather.instruments.methods import general # noqa F401 from pysatSpaceWeather.instruments.methods import gfz # noqa F401 from pysatSpaceWeather.instruments.methods import kp_ap # noqa F401 +from pysatSpaceWeather.instruments.methods import lasp # noqa F401 from pysatSpaceWeather.instruments.methods import lisird # noqa F401 from pysatSpaceWeather.instruments.methods import swpc # noqa F401 From 5a19a6cc2810c6a6603127b7aa5a999f53e94f9f Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 27 Mar 2023 15:55:41 -0400 Subject: [PATCH 065/171] BUG: removed unused import Removed the requests module from Dst, as it is no longer needed here with the new download function. --- pysatSpaceWeather/instruments/sw_dst.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pysatSpaceWeather/instruments/sw_dst.py b/pysatSpaceWeather/instruments/sw_dst.py index 9c5931d2..6204c443 100644 --- a/pysatSpaceWeather/instruments/sw_dst.py +++ b/pysatSpaceWeather/instruments/sw_dst.py @@ -31,7 +31,6 @@ import numpy as np import os import pandas as pds -import requests import pysat From ef8ffc5293722e9c2854242b8b47c336ba7a4f68 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 27 Mar 2023 16:08:47 -0400 Subject: [PATCH 066/171] BUG: fixed Instrument name Fixed the name in the AE Instrument. --- pysatSpaceWeather/instruments/sw_ae.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatSpaceWeather/instruments/sw_ae.py b/pysatSpaceWeather/instruments/sw_ae.py index 5b2f1c20..e432eee2 100644 --- a/pysatSpaceWeather/instruments/sw_ae.py +++ b/pysatSpaceWeather/instruments/sw_ae.py @@ -26,7 +26,7 @@ # Instrument attributes platform = 'sw' -name = 'al' +name = 'ae' tags = {'lasp': 'Predicted AE from real-time ACE or DSCOVR provided by LASP'} inst_ids = {'': [tag for tag in tags.keys()]} From 28469fa9dbc03d5fe6b3f134927b0075da55276c Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 28 Mar 2023 06:41:33 -0400 Subject: [PATCH 067/171] DOC: fixed instrument names Fixed Instrument `name` references in the docstrings. --- pysatSpaceWeather/instruments/sw_ae.py | 6 +++--- pysatSpaceWeather/instruments/sw_al.py | 4 ++-- pysatSpaceWeather/instruments/sw_au.py | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_ae.py b/pysatSpaceWeather/instruments/sw_ae.py index e432eee2..2fff9a10 100644 --- a/pysatSpaceWeather/instruments/sw_ae.py +++ b/pysatSpaceWeather/instruments/sw_ae.py @@ -6,9 +6,9 @@ platform 'sw' name - 'al' + 'ae' tag - - 'lasp' Predicted Dst from real-time ACE or DSCOVR provided by LASP + - 'lasp' Predicted AE from real-time ACE or DSCOVR provided by LASP inst_id - '' @@ -104,7 +104,7 @@ def load(fnames, tag='', inst_id=''): def list_files(tag='', inst_id='', data_path='', format_str=None): - """List local data files for Dst data. + """List local data files for AE data. Parameters ---------- diff --git a/pysatSpaceWeather/instruments/sw_al.py b/pysatSpaceWeather/instruments/sw_al.py index 5efac2c9..7f2a2b38 100644 --- a/pysatSpaceWeather/instruments/sw_al.py +++ b/pysatSpaceWeather/instruments/sw_al.py @@ -8,7 +8,7 @@ name 'al' tag - - 'lasp' Predicted Dst from real-time ACE or DSCOVR provided by LASP + - 'lasp' Predicted AL from real-time ACE or DSCOVR provided by LASP inst_id - '' @@ -104,7 +104,7 @@ def load(fnames, tag='', inst_id=''): def list_files(tag='', inst_id='', data_path='', format_str=None): - """List local data files for Dst data. + """List local data files for AL data. Parameters ---------- diff --git a/pysatSpaceWeather/instruments/sw_au.py b/pysatSpaceWeather/instruments/sw_au.py index 02c50577..56ce42f5 100644 --- a/pysatSpaceWeather/instruments/sw_au.py +++ b/pysatSpaceWeather/instruments/sw_au.py @@ -8,7 +8,7 @@ name 'au' tag - - 'lasp' Predicted Dst from real-time ACE or DSCOVR provided by LASP + - 'lasp' Predicted AU from real-time ACE or DSCOVR provided by LASP inst_id - '' @@ -104,7 +104,7 @@ def load(fnames, tag='', inst_id=''): def list_files(tag='', inst_id='', data_path='', format_str=None): - """List local data files for Dst data. + """List local data files for AU data. Parameters ---------- From ef0e1c6e7b72df4ed19fde939c8eef8dd6c92d92 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Wed, 5 Jul 2023 16:54:55 -0400 Subject: [PATCH 068/171] ENH: added a general ACE `clean_warn` Added the `clean_warn` values needed for the general ACE clean routine. --- pysatSpaceWeather/instruments/methods/ace.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index 9ccb8159..e5d6c6ef 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -15,6 +15,9 @@ import pysat logger = pysat.logger +clean_warn = {'dusty': ('logger', 'WARN', + "unused clean level 'dusty', reverting to 'clean'", + 'clean')} def acknowledgements(): From dd8fdff16c8e031d8ec7ec315fb16dffe1579a36 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Wed, 5 Jul 2023 16:55:38 -0400 Subject: [PATCH 069/171] TST: updated ACE instrument test attributes Added the `_clean_warn` test attribute to all the ACE Instruments that use the general ACE clean method. --- pysatSpaceWeather/instruments/ace_epam.py | 3 +++ pysatSpaceWeather/instruments/ace_mag.py | 3 +++ pysatSpaceWeather/instruments/ace_sis.py | 3 +++ pysatSpaceWeather/instruments/ace_swepam.py | 3 +++ 4 files changed, 12 insertions(+) diff --git a/pysatSpaceWeather/instruments/ace_epam.py b/pysatSpaceWeather/instruments/ace_epam.py index 913c19ac..ab1556d2 100644 --- a/pysatSpaceWeather/instruments/ace_epam.py +++ b/pysatSpaceWeather/instruments/ace_epam.py @@ -70,6 +70,9 @@ 'historic': dt.datetime(2009, 1, 1)} for inst_id in inst_ids.keys()} +# Set clean warning tests +_clean_warn = mm_ace.clean_warn + # ---------------------------------------------------------------------------- # Instrument methods diff --git a/pysatSpaceWeather/instruments/ace_mag.py b/pysatSpaceWeather/instruments/ace_mag.py index b8cc1c8c..95048412 100644 --- a/pysatSpaceWeather/instruments/ace_mag.py +++ b/pysatSpaceWeather/instruments/ace_mag.py @@ -70,6 +70,9 @@ 'historic': dt.datetime(2009, 1, 1)} for inst_id in inst_ids.keys()} +# Set clean warning tests +_clean_warn = mm_ace.clean_warn + # ---------------------------------------------------------------------------- # Instrument methods diff --git a/pysatSpaceWeather/instruments/ace_sis.py b/pysatSpaceWeather/instruments/ace_sis.py index 3337a8bf..8de8c371 100644 --- a/pysatSpaceWeather/instruments/ace_sis.py +++ b/pysatSpaceWeather/instruments/ace_sis.py @@ -70,6 +70,9 @@ 'historic': dt.datetime(2009, 1, 1)} for inst_id in inst_ids.keys()} +# Set clean warning tests +_clean_warn = mm_ace.clean_warn + # ---------------------------------------------------------------------------- # Instrument methods diff --git a/pysatSpaceWeather/instruments/ace_swepam.py b/pysatSpaceWeather/instruments/ace_swepam.py index 02cde92f..f9ae4c1a 100644 --- a/pysatSpaceWeather/instruments/ace_swepam.py +++ b/pysatSpaceWeather/instruments/ace_swepam.py @@ -69,6 +69,9 @@ 'historic': dt.datetime(2009, 1, 1)} for inst_id in inst_ids.keys()} +# Set clean warning tests +_clean_warn = mm_ace.clean_warn + # ---------------------------------------------------------------------------- # Instrument methods From 31f41b1809a1838d5e47bc11bcaa35dd92955b61 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Wed, 5 Jul 2023 16:55:53 -0400 Subject: [PATCH 070/171] DOC: update CHANGELOG Added a summary of the changes to the log. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec6463f5..94b24ef9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). * Added new data sources (tag 'now') for the F10.7 from GFZ * Created a general download routine for the GFZ and LASP data * Added new examples to the documentation + * Added new test attributes for clean messages to the ACE instruments [0.0.10] - 2023-06-01 --------------------- From 9732f3ffec83d4fcd2236960067ebe28fd266572 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 6 Jul 2023 11:50:44 -0400 Subject: [PATCH 071/171] MAINT: changed `_clean_warn` format Updated the `_clean_warn` format to reflect changes made in pysat. --- pysatSpaceWeather/instruments/ace_epam.py | 3 ++- pysatSpaceWeather/instruments/ace_mag.py | 3 ++- pysatSpaceWeather/instruments/ace_sis.py | 3 ++- pysatSpaceWeather/instruments/ace_swepam.py | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/pysatSpaceWeather/instruments/ace_epam.py b/pysatSpaceWeather/instruments/ace_epam.py index ab1556d2..40ddf5dd 100644 --- a/pysatSpaceWeather/instruments/ace_epam.py +++ b/pysatSpaceWeather/instruments/ace_epam.py @@ -71,7 +71,8 @@ for inst_id in inst_ids.keys()} # Set clean warning tests -_clean_warn = mm_ace.clean_warn +_clean_warn = {inst_id: {tag: mm_ace.clean_warn for tag in inst_ids[inst_id]} + for inst_id in inst_ids.keys()} # ---------------------------------------------------------------------------- # Instrument methods diff --git a/pysatSpaceWeather/instruments/ace_mag.py b/pysatSpaceWeather/instruments/ace_mag.py index 95048412..cfccde8c 100644 --- a/pysatSpaceWeather/instruments/ace_mag.py +++ b/pysatSpaceWeather/instruments/ace_mag.py @@ -71,7 +71,8 @@ for inst_id in inst_ids.keys()} # Set clean warning tests -_clean_warn = mm_ace.clean_warn +_clean_warn = {inst_id: {tag: mm_ace.clean_warn for tag in inst_ids[inst_id]} + for inst_id in inst_ids.keys()} # ---------------------------------------------------------------------------- # Instrument methods diff --git a/pysatSpaceWeather/instruments/ace_sis.py b/pysatSpaceWeather/instruments/ace_sis.py index 8de8c371..32147ac7 100644 --- a/pysatSpaceWeather/instruments/ace_sis.py +++ b/pysatSpaceWeather/instruments/ace_sis.py @@ -71,7 +71,8 @@ for inst_id in inst_ids.keys()} # Set clean warning tests -_clean_warn = mm_ace.clean_warn +_clean_warn = {inst_id: {tag: mm_ace.clean_warn for tag in inst_ids[inst_id]} + for inst_id in inst_ids.keys()} # ---------------------------------------------------------------------------- # Instrument methods diff --git a/pysatSpaceWeather/instruments/ace_swepam.py b/pysatSpaceWeather/instruments/ace_swepam.py index f9ae4c1a..d3178f5d 100644 --- a/pysatSpaceWeather/instruments/ace_swepam.py +++ b/pysatSpaceWeather/instruments/ace_swepam.py @@ -70,7 +70,8 @@ for inst_id in inst_ids.keys()} # Set clean warning tests -_clean_warn = mm_ace.clean_warn +_clean_warn = {inst_id: {tag: mm_ace.clean_warn for tag in inst_ids[inst_id]} + for inst_id in inst_ids.keys()} # ---------------------------------------------------------------------------- # Instrument methods From 2aa5d3ad7eb688736396e613cc92306a4ef3ad89 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 6 Jul 2023 12:43:45 -0400 Subject: [PATCH 072/171] MAINT: updated ACE clean warning Updated the standard ACE `clean_warn` variable to use the new list-of-tuples format. --- pysatSpaceWeather/instruments/methods/ace.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index e5d6c6ef..3a786a9a 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -15,9 +15,9 @@ import pysat logger = pysat.logger -clean_warn = {'dusty': ('logger', 'WARN', - "unused clean level 'dusty', reverting to 'clean'", - 'clean')} +clean_warn = {'dusty': [('logger', 'WARN', + "unused clean level 'dusty', reverting to 'clean'", + 'clean')]} def acknowledgements(): From 8e9fe6aed71b28eea6e54753b969c775c1f0aa64 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 14:34:17 -0400 Subject: [PATCH 073/171] TST: updated daily test date Updated the test date for the daily F10.7 data to work with the new pysat padding unit tests. --- pysatSpaceWeather/instruments/sw_f107.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index e3ba89bf..9b26af4a 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -105,7 +105,7 @@ _test_dates = {'': {'historic': dt.datetime(2009, 1, 1), 'prelim': dt.datetime(2009, 1, 1), - 'daily': tomorrow, + 'daily': today, 'forecast': tomorrow, '45day': tomorrow}, 'obs': {'now': dt.datetime(2009, 1, 1)}, From 09560b970f7587f984431ff7d2ebc92943d97cff Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 14:34:54 -0400 Subject: [PATCH 074/171] BUG: fixed LISIRD download Updated LISIRD downloads to match the new behaviour when no data is available. Will also work with prior behaviour, should they decide to switch back. --- .../instruments/methods/lisird.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/lisird.py b/pysatSpaceWeather/instruments/methods/lisird.py index 17c55d06..60598cf4 100644 --- a/pysatSpaceWeather/instruments/methods/lisird.py +++ b/pysatSpaceWeather/instruments/methods/lisird.py @@ -148,8 +148,11 @@ def download(date_array, data_path, local_file_prefix, local_date_fmt, raise IOError(''.join(['Gateway timeout when requesting ', 'file using command: ', url])) - if req.ok: - raw_dict = json.loads(req.text)[lisird_data_name] + # Load the dict if text was retrieved + json_dict = json.loads(req.text) if req.ok else {'': {}} + + if lisird_data_name in json_dict.keys(): + raw_dict = json_dict[lisird_data_name] data = pds.DataFrame.from_dict(raw_dict['samples']) if data.empty: pysat.logger.warning("no data for {:}".format(dl_date)) @@ -176,8 +179,12 @@ def download(date_array, data_path, local_file_prefix, local_date_fmt, # Create a local CSV file data.to_csv(local_file, header=True) else: - pysat.logger.info("".join(["Data not downloaded for ", - dl_date.strftime("%d %b %Y"), - ", date may be out of range ", - "for the database."])) + if len(json_dict.keys()) == 1 and '' in json_dict.keys(): + pysat.logger.info("".join(["Data not downloaded for ", + dl_date.strftime("%d %b %Y"), + ", date may be out of range ", + "for the database."])) + else: + raise IOError(''.join(['Returned unexpectedly formatted ', + 'data using command: ', url])) return From 1aaf2832cf58f3059d513d4f810ecada57d7cfea Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 14:35:09 -0400 Subject: [PATCH 075/171] DOC: fixed docstring Added a missing line to a test docstring. --- pysatSpaceWeather/tests/test_instruments.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index 737e2abf..b1e98a23 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -34,6 +34,7 @@ class TestInstruments(clslib.InstLibTests): ---- All standard tests, setup, and teardown inherited from the core pysat instrument test class. + """ From e0d5bc2ae84268c1e541b38da5e2222d771d83e3 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 14:35:23 -0400 Subject: [PATCH 076/171] DOC: updated changelog Added a summary of the changes to the changelog. --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94b24ef9..7b99b3ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ This project adheres to [Semantic Versioning](https://semver.org/). * Created a general download routine for the GFZ and LASP data * Added new examples to the documentation * Added new test attributes for clean messages to the ACE instruments +* Maintenance + * Updated the LISIRD download routine to reflect new behaviour + * Changed F10.7 daily test day to ensure new pysat padding tests work [0.0.10] - 2023-06-01 --------------------- From 813ea606ff339fbc1f2eaeb30e00772b5f0b47a8 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:33:25 -0400 Subject: [PATCH 077/171] DOC: updated issue templates Fixed formatting and grammar in the issue templates. --- .github/ISSUE_TEMPLATE/bug_report.md | 6 +++--- .github/ISSUE_TEMPLATE/question.md | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index a7f6ad61..ee82737b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -21,9 +21,9 @@ Consider including images or test files to help others reproduce the bug and solve the problem. ## Test configuration - - OS: [e.g. Hal] - - Version [e.g. Python 3.47] + - OS: [e.g., Hal] + - Version [e.g., Python 3.47] - Other details about your setup that could be relevant # Additional context -Add any other context about the problem here. +Add any other context about the problem here, including expected behaviour. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 20730861..463725ba 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -14,6 +14,6 @@ If relevant, include sample code, images, or files so that others can understand the full context of your question. ## Configuration - - OS: [e.g. Hal] - - Version [e.g. Python 3.47] + - OS: [e.g., Hal] + - Version: [e.g., Python 3.47] - Other details about your setup that could be relevant From 202e1a63e5a6e10bb5628efe53e10e2920b815fe Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:33:44 -0400 Subject: [PATCH 078/171] DOC: updated PR template Fixed formatting in the PR template. --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 725422f2..f3195b96 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,6 +1,6 @@ # Description -Addresses # (issue) +Addresses #(issue) Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required From 556c80cfc8717869e591ff168bfe10ddb24a5faa Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:34:09 -0400 Subject: [PATCH 079/171] TST: updated CI tests Updated the CI tests to use pyproject.toml. --- .github/workflows/docs.yml | 20 +++++++++---------- .github/workflows/main.yml | 29 +++++++++++++++++++--------- .github/workflows/pip_rc_install.yml | 19 ++++++++++++++---- .github/workflows/pysat_rc.yml | 16 +++++++-------- 4 files changed, 52 insertions(+), 32 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 1c7e3f61..3d9f3988 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,5 +1,6 @@ -# This workflow will install Python dependencies, run tests and lint with a variety of Python versions -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions +# This workflow will install Python dependencies, run tests and lint with a +# variety of Python versions. For more information see: +# https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: Documentation Check @@ -8,13 +9,13 @@ on: [push, pull_request] jobs: build: - runs-on: ubuntu-latest + runs-on: ["ubuntu-latest"] strategy: fail-fast: false matrix: - python-version: [3.9] + python-version: ["3.10"] - name: + name: Documentation tests steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} @@ -22,16 +23,13 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r test_requirements.txt - pip install -r requirements.txt + - name: Install with dependencies + run: pip install .[doc] - name: Set up pysat run: | mkdir pysatData - python -c "import pysat; pysat.params['data_dirs'] = './pysatData'" + python -c "import pysat; pysat.params['data_dirs'] = 'pysatData'" - name: Check documentation build run: sphinx-build -E -b html docs dist/docs diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 54d0fb27..4c1ebed0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,16 +15,20 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.9", "3.10"] + os: ["ubuntu-latest", "macos-latest", "windows-latest"] + python-version: ["3.10", "3.11"] numpy_ver: [latest] include: - - python-version: "3.8" + # NEP29 compliance settings + - python-version: "3.9" numpy_ver: "1.21" os: ubuntu-latest + test_config: "NEP29" + # Operational compliance settings - python-version: "3.6.8" numpy_ver: "1.19.5" os: "ubuntu-20.04" + test_config: "Ops" name: Python ${{ matrix.python-version }} on ${{ matrix.os }} with numpy ${{ matrix.numpy_ver }} runs-on: ${{ matrix.os }} @@ -35,16 +39,23 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: Install standard dependencies + - name: Install Operational dependencies + if: ${{ matrix.test_config == 'Ops'}} run: | - python -m pip install --upgrade pip + pip install numpy==${{ matrix.numpy_ver }} pip install -r requirements.txt pip install -r test_requirements.txt + pip install . - name: Install NEP29 dependencies - if: ${{ matrix.numpy_ver != 'latest'}} + if: ${{ matrix.test_config == 'NEP29'}} run: | pip install numpy==${{ matrix.numpy_ver }} + pip install --upgrade-strategy only-if-needed .[test] + + - name: Install standard dependencies + if: ${{ matrix.test_config == 'latest'}} + run: pip install .[test] - name: Set up pysat run: | @@ -57,10 +68,10 @@ jobs: - name: Evaluate complexity run: flake8 . --count --exit-zero --max-complexity=10 --statistics - - name: Run unit and integration tests - run: pytest --cov=pysatSpaceWeather/ + - name: Test with pytest + run: pytest - - name: Run Coveralls + - name: Publish results to coveralls env: GITHUB_TOKEN: ${{ secrets.github_token }} run: coveralls --rcfile=setup.cfg --service=github diff --git a/.github/workflows/pip_rc_install.yml b/.github/workflows/pip_rc_install.yml index 11dca810..1cbfe441 100644 --- a/.github/workflows/pip_rc_install.yml +++ b/.github/workflows/pip_rc_install.yml @@ -1,6 +1,7 @@ -# This workflow will install Python dependencies and the latest RC of pysatNASA from test pypi. -# This test should be manually run before a pysatSpaceWeather RC is officially approved and versioned. -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions +# This workflow will install Python dependencies and the latest RC of +# pysatSpaceWeather from test pypi. This test should be manually run before a +# pysatSpaceWeather RC is officially approved and versioned. For more +# information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: Test install of latest RC from pip @@ -12,7 +13,7 @@ jobs: fail-fast: false matrix: os: ["ubuntu-latest", "macos-latest", "windows-latest"] - python-version: ["3.10"] # Keep this version at the highest supported Python version + python-version: ["3.11"] # Keep this version at the highest supported Python version name: Python ${{ matrix.python-version }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} @@ -28,3 +29,13 @@ jobs: - name: Install pysatSpaceWeather RC run: pip install --no-deps --pre -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ pysatSpaceWeather + + - name: Set up pysat + run: | + mkdir pysatData + python -c "import pysat; pysat.params['data_dirs'] = 'pysatData'" + + - name: Check that install imports correctly + run: | + cd .. + python -c "import pysatSpaceWeather; print(pysatSpaceWeather.__version__)" diff --git a/.github/workflows/pysat_rc.yml b/.github/workflows/pysat_rc.yml index a6465381..84b7d83b 100644 --- a/.github/workflows/pysat_rc.yml +++ b/.github/workflows/pysat_rc.yml @@ -1,5 +1,6 @@ -# This workflow will install Python dependencies, run tests and lint with a variety of Python versions -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions +# This workflow will install Python dependencies, run tests and lint with a +# variety of Python versions. For more information see: +# https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: Test with latest pysat RC @@ -10,7 +11,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: ["ubuntu-latest", "macos-latest", "windows-latest"] python-version: ["3.10"] name: Python ${{ matrix.python-version }} on ${{ matrix.os }} @@ -25,10 +26,9 @@ jobs: - name: Install pysat RC run: pip install --no-deps --pre -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ pysat - - name: Install standard dependencies - run: | - pip install -r requirements.txt - pip install -r test_requirements.txt + - name: Install standard dependencies and package + if: ${{ matrix.test_config == 'latest'}} + run: pip install .[test] - name: Set up pysat run: | @@ -36,7 +36,7 @@ jobs: python -c "import pysat; pysat.params['data_dirs'] = 'pysatData'" - name: Test with pytest - run: pytest -vs --cov=pysatSpaceWeather/ + run: pytest - name: Publish results to coveralls env: From 281fa7a1f9f61943dd7af38353a46c68ffc43cdf Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:34:27 -0400 Subject: [PATCH 080/171] DOC: updated .gitignore comments Updated the .gitignore comments. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d351f17c..1b0a8d34 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ *~ .DS_store -# Python Repository Ignores as Recommended by github.com######################## +# Python Repository Ignores as Recommended by github.com # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] From 5c01d2638003a4637daf0b6d0b15bf76a195e3c8 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:34:44 -0400 Subject: [PATCH 081/171] TST: added a RTD yaml Added the required configuration file for RTD. --- .readthedocs.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .readthedocs.yml diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 00000000..e1667025 --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,25 @@ +# .readthedocs.yml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required version of readthedocs +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.10" + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: docs/conf.py + + +# Declare the Python requirements required to build your docs +python: + install: + - method: pip + path: . + extra_requirements: + - doc From 0bda2fc77a26e3266cd323e7d7c7bb341cc66863 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:35:09 -0400 Subject: [PATCH 082/171] DOC: updated code of conduct Added FAQ section to the code of conduct. --- CODE_OF_CONDUCT.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 916e4d0d..2c69e219 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -72,5 +72,11 @@ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://contributor-covenant.org/version/1/4][version] +## FAQ + +For answers to common questions about this code of conduct, see +[https://www.contributor-covenant.org/faq][faq] + [homepage]: https://contributor-covenant.org [version]: https://contributor-covenant.org/version/1/4/ +[faq]: https://www.contributor-covenant.org/faq From 8bf2480cdf0bf3795350b3bb9e218e16e600965c Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:35:46 -0400 Subject: [PATCH 083/171] DOC: updated contributing guidelines Updated the style, links, and wording in the contributing guidelines. --- CONTRIBUTING.md | 74 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 24 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 199ca9e4..0dbafedd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,40 +3,45 @@ Contributing Bug reports, feature suggestions and other contributions are greatly appreciated! pysat and pysatSpaceWeather are community-driven projects and -welcomes both feedback and contributions. +welcome both feedback and contributions. Come join us on Slack! An invitation to the pysat workspace is available in the 'About' section of the -[pysat GitHub Repository.](https://github.com/pysat/pysat) -Development meetings are generally held fortnightly. +[pysat GitHub Repository.](https://github.com/pysat/pysat) Development meetings +are generally held fortnightly. Short version ------------- * Submit bug reports, feature requests, and questions at -`GitHub `_ + [GitHub](https://github.com/pysat/pysatSpaceWeather/issues) + * Make pull requests to the ``develop`` branch Bug reports ----------- -When `reporting a bug `_ -please include: +When [reporting a bug](https://github.com/pysat/pysatSpaceWeather/issues) please +include: * Your operating system name and version + * Any details about your local setup that might be helpful in troubleshooting + * Detailed steps to reproduce the bug Feature requests and feedback ----------------------------- The best way to send feedback is to file an issue at -`GitHub `_. +[GitHub](https://github.com/pysat/pysatSpaceWeather/issues). If you are proposing a feature: * Explain in detail how it would work. + * Keep the scope as narrow as possible, to make it easier to implement. + * Remember that this is a volunteer-driven project, and that code contributions are welcome :) @@ -76,28 +81,43 @@ To set up `pysatSpaceWeather` for local development: is broken on your local system: ``` - pytest -vs pysatSpaceWeather + pytest + ``` + +5. You should also check for flake8 style compliance: + + ``` + flake8 . --count --select=D,E,F,H,W --show-source --statistics ``` -5. Update/add documentation (in ``docs``). Even if you don't think it's + Note that pysat uses the `flake-docstrings` and `hacking` packages to ensure + standards in docstring formatting. + +6. Update/add documentation (in ``docs``). Even if you don't think it's relevant, check to see if any existing examples have changed. -6. Add your name to the .zenodo.json file as an author +7. Add your name to the .zenodo.json file as an author -7. Commit your changes and push your branch to GitHub: +8. Commit your changes: ``` git add . git commit -m "CODE: Brief description of your changes" - git push origin name-of-your-bugfix-or-feature ``` Where CODE is a standard shorthand for the type of change (eg, BUG or DOC). `pysat` follows the [numpy development workflow](https://numpy.org/doc/stable/dev/development_workflow.html), see the discussion there for a full list of this shorthand notation. -8. Submit a pull request through the GitHub website. Pull requests should be - made to the ``develop`` branch. +9. Once you are happy with the local changes, push to GitHub: + ``` + git push origin name-of-your-bugfix-or-feature + ``` + Note that each push will trigger the Continuous Integration workflow. + +10. Submit a pull request through the GitHub website. Pull requests should be + made to the ``develop`` branch. Note that automated tests will be run on + GitHub Actions, but these must be initialized by a member of the pysat team. Pull Request Guidelines ----------------------- @@ -109,14 +129,16 @@ For merging, you should: 1. Include an example for use 2. Add a note to ``CHANGELOG.md`` about the changes -3. Ensure that all checks passed (current checks include GitHub Actions, - Coveralls, and ReadTheDocs) [1]_ +3. Update the author list in ``zenodo.json`` if applicable +4. Ensure that all checks passed (current checks include GitHub Actions, + Coveralls, and ReadTheDocs) + +If you don't have all the necessary Python versions available locally or have +trouble building all the testing environments, you can rely on GitHub Actions to +run the tests for each change you add in the pull request. Because testing here +will delay tests by other developers, please ensure that the code passes all +tests on your local system first. -.. [1] If you don't have all the necessary Python versions available locally or - have trouble building all the testing environments, you can rely on - Travis to run the tests for each change you add in the pull request. - Because testing here will delay tests by other developers, please ensure - that the code passes all tests on your local system first. Project Style Guidelines ------------------------ @@ -124,7 +146,7 @@ Project Style Guidelines In general, pysat follows PEP8 and numpydoc guidelines. Pytest runs the unit and integration tests, flake8 checks for style, and sphinx-build performs documentation tests. However, there are certain additional style elements that -have been settled on to ensure the project maintains a consistent coding style. +have been adopted to ensure the project maintains a consistent coding style. These include: * Line breaks should occur before a binary operator (ignoring flake8 W503) @@ -145,12 +167,16 @@ These include: * All classes should have `__repr__` and `__str__` functions * Docstrings use `Note` instead of `Notes` * Try to avoid creating a try/except statement where except passes -* Use setup and teardown in test classes +* Use setup_method (or setup_class) and teardown_method (or teardown_class) in + test classes * Use pytest parametrize in test classes when appropriate +* Use pysat testing utilities when appropriate * Provide testing class methods with informative failure statements and descriptive, one-line docstrings * Block and inline comments should use proper English grammar and punctuation - with the exception of single sentences in a block, which may then ommit the + with the exception of single sentences in a block, which may then omit the final period +* When casting is necessary, use `np.int64` and `np.float64` to ensure operating + system agnosticism * Data files that provide multiple products should be stored, when possible, into separate files with only the data for each Instrument contained within From 310724779f8d34e1db0424e173ba74a389162a59 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:36:06 -0400 Subject: [PATCH 084/171] DOC: updated doc configuration Updated the document configuration file. --- docs/conf.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index bd95d0c9..0852b124 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -20,6 +20,7 @@ import json import os +from pyproject_parser import PyProject import sys sys.path.insert(0, os.path.abspath('..')) @@ -56,27 +57,28 @@ master_doc = 'index' # General information about the project. +info = PyProject.load("../pyproject.toml") + project = 'pysatSpaceWeather' title = '{:s} Documentation'.format(project) zenodo = json.loads(open('../.zenodo.json').read()) author = ', '.join([auth['name'] for auth in zenodo['creators']]) description = 'Tools for space weather indices.' +category = 'Space Physics' copyright = ', '.join(['2022', author]) -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -doc_dir = os.path.abspath(os.path.dirname(__file__)) -with open(os.path.join(doc_dir, "..", project, "version.txt"), "r") as fin: - version = fin.read().strip() -release = '{:s}-alpha'.format(version) # Include alpha/beta/rc tags. +# The short X.Y version +version = info.project['version'].base_version + +# The full version, including alpha/beta/rc tags. +release = '{:s}-alpha'.format(version) # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = 'en' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -149,7 +151,7 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [(master_doc, project, title, author, project, - description, 'Space Physics')] + description, category)] # -- Options for Epub output ---------------------------------------------- From 573376b6c64021a4a76f0a55ca40ac2340a7ad87 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:36:27 -0400 Subject: [PATCH 085/171] MAINT: update manifest Update the manifest to reflect the package changes. --- MANIFEST.in | 3 --- 1 file changed, 3 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index dc78c017..ee42ab7b 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,11 +4,8 @@ include *.c recursive-include pysatSpaceWeather *.py include *.md include *.txt -include description.txt include LICENSE -include pysatSpaceWeather/version.txt prune pysatSpaceWeather/tests prune docs -prune demo exclude *.pdf exclude *.png From 44dea687f644703602b11bbf7b6a68e3c9571c30 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:36:56 -0400 Subject: [PATCH 086/171] MAINT: replace setup.py with pyproject.toml Replaced the setup.py with the new standard, a pyproject.toml file. --- pyproject.toml | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ setup.py | 13 -------- 2 files changed, 86 insertions(+), 13 deletions(-) create mode 100644 pyproject.toml delete mode 100644 setup.py diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..badab311 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,86 @@ +[build-system] +requires = ["setuptools >= 38.6", "pip >= 10"] +build-backend = "setuptools.build_meta" + +[project] +name = "pysatSpaceWeather" +version = "0.0.10" +description = 'pysat support for Space Weather Indices' +readme = "README.md" +requires-python = ">=3.6" +license = {file = "LICENSE"} +authors = [ + {name = "Angeline Burrell", email = "pysat.developers@gmail.com"} +] +classifiers = [ + "Development Status :: 3 - Alpha", + "Topic :: Scientific/Engineering :: Astronomy", + "Topic :: Scientific/Engineering :: Physics", + "Topic :: Scientific/Engineering :: Atmospheric Science", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: BSD License", + "Natural Language :: English", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Operating System :: POSIX :: Linux", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows" +] +keywords = [ + "pysat", + "ionosphere", + "heliophysics", + "magnetosphere", + "space-weather", + "forecasting", + "indexes" +] +dependencies = [ + "netCDF4", + "numpy", + "packaging", + "pandas", + "pysat>=3.1.0", + "requests", + "xarray"] + +[project.optional-dependencies] +test = [ + "coveralls < 3.3", + "flake8", + "flake8-docstrings", + "hacking >= 1.0", + "pytest", + "pytest-cov", + "pytest-ordering" +] +doc = [ + "extras_require", + "ipython", + "m2r2", + "numpydoc", + "pyproject_parser", + "sphinx", + "sphinx_rtd_theme >= 1.2.2" +] + +[project.urls] +Documentation = "https://pysatspaceweather.readthedocs.io/en/latest/" +Source = "https://github.com/pysat/pysatSpaceWeather" + +[tool.coverage.report] + +[tool.pytest.ini_options] +addopts = "--cov=pysatSpaceWeather" +markers = [ + "all_inst", + "download", + "no_download", + "load_options", + "first", + "second" +] diff --git a/setup.py b/setup.py deleted file mode 100644 index ef2bf98b..00000000 --- a/setup.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (C) 2020, Authors -# Full license can be found in License.md -# ----------------------------------------------------------------------------- -"""Setup script for pysatSpaceWeather module.""" - -from setuptools import setup - - -# Run setup. Setuptools will look for parameters in [metadata] section of -# setup.cfg -setup() From c094a5db27e7d51eb99000b91a840fd22cf28b97 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:37:20 -0400 Subject: [PATCH 087/171] MAINT: improve version reading Get the version data from the pyproject.toml. --- pysatSpaceWeather/__init__.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/pysatSpaceWeather/__init__.py b/pysatSpaceWeather/__init__.py index b518840d..0ae7737e 100644 --- a/pysatSpaceWeather/__init__.py +++ b/pysatSpaceWeather/__init__.py @@ -1,16 +1,10 @@ -"""Initialization file for pysatSpaceWeather module.""" +"""Core library for pysatSpaceWeather.""" -import os +try: + from importlib import metadata +except ImportError: + import importlib_metadata as metadata from pysatSpaceWeather import instruments # noqa F401 -# Set directory for test data -proj_dir = os.path.abspath(os.path.dirname(__file__)) -test_data_path = os.path.join(proj_dir, 'tests', 'test_data') - -# Set the package version -with open(os.path.join(proj_dir, "version.txt"), "r") as fin: - __version__ = fin.read().strip() - -# Clean up -del proj_dir, fin +__version__ = metadata.version('PACKAGENAME') From 0569eb0049fc7cee14d2550847a5fb344fd51d05 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:37:38 -0400 Subject: [PATCH 088/171] MAINT: remove version.txt Remove unnecessary text file. --- pysatSpaceWeather/version.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 pysatSpaceWeather/version.txt diff --git a/pysatSpaceWeather/version.txt b/pysatSpaceWeather/version.txt deleted file mode 100644 index 7c1886bb..00000000 --- a/pysatSpaceWeather/version.txt +++ /dev/null @@ -1 +0,0 @@ -0.0.10 From 378ac6f75fe9092c7ebf3f204a7b04455197b9ca Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:38:11 -0400 Subject: [PATCH 089/171] DOC: udpated README Cycled pysat minimum version, removed alpha note for the next release and fixed bug in the example. --- README.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 64ac831a..c28ab292 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Python 3.7+. | Common modules | Community modules | | -------------- | ----------------- | -| netCDF4 | pysat >= 3.0.4 | +| netCDF4 | pysat >= 3.1.0 | | numpy | | | pandas | | | requests | | @@ -51,11 +51,6 @@ cd pysatSpaceWeather/ python setup.py install ``` -Note: pre-0.1.0 version ------------------------ -pysatSpaceWeather is currently in an alpha development phase. Feedback and -contributions are appreciated. - # Examples The instrument modules are portable and designed to be run like any pysat @@ -64,7 +59,7 @@ instrument. ``` import pysat import pysatSpaceWeather -dst = pysat.Instrument(inst_module=pysatSpaceWeather.instruments.sw_dist) +dst = pysat.Instrument(inst_module=pysatSpaceWeather.instruments.sw_dst) ``` Another way to use the instruments in an external repository is to register the From afae406f537515a9a1b0e9026700a579dda695d1 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:38:36 -0400 Subject: [PATCH 090/171] MAINT: removed duplicate metadata Removed data from setup.cfg that is now stored in the pyproject.toml. --- setup.cfg | 54 +----------------------------------------------------- 1 file changed, 1 insertion(+), 53 deletions(-) diff --git a/setup.cfg b/setup.cfg index 3e8e42aa..a0a8a7ce 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,62 +1,10 @@ [metadata] name = pysatSpaceWeather -version = file: pysatSpaceWeather/version.txt +version = 0.0.10 url = https://github.com/pysat/pysatSpaceWeather -author = Angeline Burrell, et al. -author_email = pysat.developers@gmail.com -description = 'pysat support for Space Weather Indices' -keywords = - pysat - ionosphere - heliophysics - magnetosphere - space-weather - forecasting - indexes -classifiers = - Development Status :: 3 - Alpha - Topic :: Scientific/Engineering :: Physics - Topic :: Scientific/Engineering :: Atmospheric Science - Intended Audience :: Science/Research - License :: OSI Approved :: BSD License - Natural Language :: English - Programming Language :: Python :: 3.6 - Programming Language :: Python :: 3.7 - Programming Language :: Python :: 3.8 - Programming Language :: Python :: 3.9 - Programming Language :: Python :: 3.10 - Operating System :: MacOS :: MacOS X - Operating System :: POSIX :: Linux - Operating System :: Microsoft :: Windows -license_file = LICENSE -long_description = file: README.md -long_description_content_type = text/markdown - -[options] -python_requires = >= 3.6 -setup_requires = setuptools >= 38.6; pip >= 10 -include_package_data = True -zip_safe = False -packages = find: -install_requires = netCDF4 - numpy - packaging - pandas - pysat - requests - xarray [flake8] max-line-length = 80 ignore = W503 D200 D202 - -[tool:pytest] -markers = - all_inst: tests all instruments - download: tests for downloadable instruments - no_download: tests for instruments without download support - load_options: tests for instruments including optional load kwargs - first: first tests to run - second: second tests to run From 1aafc9c445d59fe7196b99cb86fe943b467686d3 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:38:51 -0400 Subject: [PATCH 091/171] TST: update package limits Update the package limits in the test requirements. --- test_requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_requirements.txt b/test_requirements.txt index 3774865f..b8a41858 100644 --- a/test_requirements.txt +++ b/test_requirements.txt @@ -1,10 +1,10 @@ coveralls flake8 flake8-docstrings -hacking>=1.0,<6.0 +hacking>=1.0 m2r2 numpydoc pytest-cov pytest-ordering -sphinx<7.0 +sphinx sphinx_rtd_theme From cc7e737c53d2bd4f1fbc017c2a43a13486b922cd Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:39:49 -0400 Subject: [PATCH 092/171] DOC: updated changelog Added a summary of changes to the log. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94b24ef9..f5aaa796 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ This project adheres to [Semantic Versioning](https://semver.org/). * Created a general download routine for the GFZ and LASP data * Added new examples to the documentation * Added new test attributes for clean messages to the ACE instruments +* Maintenance + * Updated package documentation, yamls, and other supporting files [0.0.10] - 2023-06-01 --------------------- From f0a41e1b7144ff9a43a8042ed943b53867d3c615 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:49:51 -0400 Subject: [PATCH 093/171] DOC: update installation instructions Updated the installation instructions to use the pyproject.toml file. --- docs/installation.rst | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index d58e9ef2..748d3e32 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -24,7 +24,7 @@ Python 3.7+. ============== ================= Common modules Community modules ============== ================= - netCDF4 pysat >= 3.0.4 + netCDF4 pysat >= 3.1.0 numpy pandas requests @@ -70,15 +70,13 @@ You can keep up to date with the latest changes at the GitHub repository. Change directories into the repository folder and run the setup.py file. There are a few ways you can do this: - A. Install on the system (root privileges required):: + A. Install on the system (will install locally without root privileges):: - sudo python3 setup.py install - B. Install at the user level:: - - - python3 setup.py install --user + python -m build + pip install . C. Install with the intent to develop locally:: - python3 setup.py develop --user + python -m build + pip install -e . From 53ab1373cb803fafdf2824895182c2d72c6cfffd Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 15:53:13 -0400 Subject: [PATCH 094/171] BUG: added missing key Added missing key to install dependencies. --- .github/workflows/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4c1ebed0..ed513fd3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,7 +17,8 @@ jobs: matrix: os: ["ubuntu-latest", "macos-latest", "windows-latest"] python-version: ["3.10", "3.11"] - numpy_ver: [latest] + numpy_ver: ["latest"] + test_config: ["latest"] include: # NEP29 compliance settings - python-version: "3.9" From 4d141a0f677771dda440a1afbf9130c30e35690b Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 16:03:02 -0400 Subject: [PATCH 095/171] STY: fixed space after keyword Ensured there is always a space after a keyword. --- pysatSpaceWeather/instruments/methods/ace.py | 5 +++-- pysatSpaceWeather/instruments/methods/swpc.py | 4 ++-- pysatSpaceWeather/tests/test_methods_f107.py | 12 ++++++------ pysatSpaceWeather/tests/test_methods_kp.py | 18 +++++++++--------- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index 3a786a9a..1141c8a8 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -196,8 +196,9 @@ def download(date_array, name, tag='', inst_id='', data_path='', now=None): file_fmt = "{:s}-{:s}.txt".format("ace", "magnetometer" if name == "mag" else name) - if(len(date_array) > 1 or date_array[0].year != now.year - or date_array[0].month != now.month or date_array[0].day != now.day): + if any([len(date_array) > 1, date_array[0].year != now.year, + date_array[0].month != now.month, + date_array[0].day != now.day]): logger.warning(''.join(['real-time data only available for current', ' day, data in this file will have the ', 'wrong date'])) diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index e4f74a44..0238a7b2 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -316,8 +316,8 @@ def parse_daily_solar_data(data_lines, year, optical): if year == 1994 and kk == 'new_reg': # New regions only in files after 1994 val = -999 - elif((year == 1994 and kk in xray_keys) - or (not optical and kk in optical_keys)): + elif np.any([year == 1994 and kk in xray_keys, + not optical and kk in optical_keys]): # X-ray flares in files after 1994, optical flares come later val = -1 else: diff --git a/pysatSpaceWeather/tests/test_methods_f107.py b/pysatSpaceWeather/tests/test_methods_f107.py index 90906f57..ec152281 100644 --- a/pysatSpaceWeather/tests/test_methods_f107.py +++ b/pysatSpaceWeather/tests/test_methods_f107.py @@ -109,14 +109,14 @@ def test_calc_f107a_daily_missing(self): assert 'f107a' in self.testInst.meta.keys() # Assert the finite values have realistic means - assert(np.nanmin(self.testInst['f107a']) - > np.nanmin(self.testInst['f107'])) - assert(np.nanmax(self.testInst['f107a']) - < np.nanmax(self.testInst['f107'])) + assert (np.nanmin(self.testInst['f107a']) + > np.nanmin(self.testInst['f107'])) + assert (np.nanmax(self.testInst['f107a']) + < np.nanmax(self.testInst['f107'])) # Assert the expected number of fill values - assert(len(self.testInst['f107a'][np.isnan(self.testInst['f107a'])]) - == 40) + assert (len(self.testInst['f107a'][np.isnan(self.testInst['f107a'])]) + == 40) return diff --git a/pysatSpaceWeather/tests/test_methods_kp.py b/pysatSpaceWeather/tests/test_methods_kp.py index cf7347ac..2d7abf61 100644 --- a/pysatSpaceWeather/tests/test_methods_kp.py +++ b/pysatSpaceWeather/tests/test_methods_kp.py @@ -373,7 +373,7 @@ def test_convert_ap_to_kp_middle(self): # Assert the converted Kp meta data exists and is reasonable assert 'Kp' in kp_meta.keys() - assert(kp_meta['Kp'][kp_meta.labels.fill_val] == -1) + assert kp_meta['Kp'][kp_meta.labels.fill_val] == -1 return @@ -387,7 +387,7 @@ def test_convert_ap_to_kp_nan_input(self): # Assert the converted Kp meta data exists and is reasonable assert 'Kp' in kp_meta.keys() - assert(kp_meta['Kp'][kp_meta.labels.fill_val] == -1) + assert kp_meta['Kp'][kp_meta.labels.fill_val] == -1 del kp_out, kp_meta return @@ -402,7 +402,7 @@ def test_convert_ap_to_kp_inf_input(self): # Assert the converted Kp meta data exists and is reasonable assert 'Kp' in kp_meta.keys() - assert(kp_meta['Kp'][kp_meta.labels.fill_val] == -1) + assert kp_meta['Kp'][kp_meta.labels.fill_val] == -1 del kp_out, kp_meta return @@ -594,8 +594,8 @@ def test_combine_kp_all(self): assert kp_inst.variables[0] == 'Kp' # Fill value is defined by combine - assert(kp_inst.meta['Kp'][kp_inst.meta.labels.fill_val] - == self.combine['fill_val']) + assert (kp_inst.meta['Kp'][kp_inst.meta.labels.fill_val] + == self.combine['fill_val']) assert (kp_inst['Kp'] != self.combine['fill_val']).all() del kp_inst @@ -612,8 +612,8 @@ def test_combine_kp_no_forecast(self): assert kp_inst.index[-1] < self.combine['stop'] assert len(kp_inst.data.columns) == 1 assert kp_inst.data.columns[0] == 'Kp' - assert(kp_inst.meta['Kp'][kp_inst.meta.labels.fill_val] - == self.combine['fill_val']) + assert (kp_inst.meta['Kp'][kp_inst.meta.labels.fill_val] + == self.combine['fill_val']) assert (kp_inst['Kp'] == self.combine['fill_val']).any() del kp_inst, combo_in @@ -648,8 +648,8 @@ def test_combine_kp_no_standard(self): assert kp_inst.index[-1] < self.combine['stop'] assert len(kp_inst.data.columns) == 1 assert kp_inst.data.columns[0] == 'Kp' - assert(kp_inst.meta['Kp'][kp_inst.meta.labels.fill_val] - == self.combine['fill_val']) + assert (kp_inst.meta['Kp'][kp_inst.meta.labels.fill_val] + == self.combine['fill_val']) assert len(kp_inst['Kp'][kp_inst['Kp']] == self.combine['fill_val']) > 0 From 06c3a801cc5c6a43e815a4be49755ec2ad7cf45e Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 16:05:48 -0400 Subject: [PATCH 096/171] BUG: fixed packagename Replace placeholder with real package name. --- pysatSpaceWeather/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatSpaceWeather/__init__.py b/pysatSpaceWeather/__init__.py index 0ae7737e..bf84a6b2 100644 --- a/pysatSpaceWeather/__init__.py +++ b/pysatSpaceWeather/__init__.py @@ -7,4 +7,4 @@ from pysatSpaceWeather import instruments # noqa F401 -__version__ = metadata.version('PACKAGENAME') +__version__ = metadata.version('pysatSpaceWeather') From b2dcf6d1869272f4e81d9520d0b4f40c1b988457 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 16:17:34 -0400 Subject: [PATCH 097/171] BUG: added missing variable Re-added a variable that was accidentally removed. --- pysatSpaceWeather/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pysatSpaceWeather/__init__.py b/pysatSpaceWeather/__init__.py index bf84a6b2..4f454394 100644 --- a/pysatSpaceWeather/__init__.py +++ b/pysatSpaceWeather/__init__.py @@ -2,9 +2,13 @@ try: from importlib import metadata + from importlib import resources except ImportError: import importlib_metadata as metadata + import importlib-resources as resources from pysatSpaceWeather import instruments # noqa F401 __version__ = metadata.version('pysatSpaceWeather') +test_data_path = str(resources.path(__package__, 'tests', + 'test_data').__enter__()) From 5d530e69b572d878dca382ab0ce84557a10767fc Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 16:19:41 -0400 Subject: [PATCH 098/171] BUG: replaced dash with underscore Import name is different from the package name. --- pysatSpaceWeather/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatSpaceWeather/__init__.py b/pysatSpaceWeather/__init__.py index 4f454394..f77aec14 100644 --- a/pysatSpaceWeather/__init__.py +++ b/pysatSpaceWeather/__init__.py @@ -5,7 +5,7 @@ from importlib import resources except ImportError: import importlib_metadata as metadata - import importlib-resources as resources + import importlib_resources as resources from pysatSpaceWeather import instruments # noqa F401 From 02d2f52bb81b4665acf916aa3bcb8241f7f325f6 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 16:23:01 -0400 Subject: [PATCH 099/171] BUG: fixed resource usage Fixed resource usage by specifying full path with os.path.join. --- pysatSpaceWeather/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pysatSpaceWeather/__init__.py b/pysatSpaceWeather/__init__.py index f77aec14..b97510cd 100644 --- a/pysatSpaceWeather/__init__.py +++ b/pysatSpaceWeather/__init__.py @@ -6,9 +6,10 @@ except ImportError: import importlib_metadata as metadata import importlib_resources as resources +from os import path from pysatSpaceWeather import instruments # noqa F401 __version__ = metadata.version('pysatSpaceWeather') -test_data_path = str(resources.path(__package__, 'tests', - 'test_data').__enter__()) +test_data_path = str( + resources.path(__package__, path.join('tests', 'test_data')).__enter__()) From bd2e056d1b372850ad34b94c57d4862cc793925c Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 16:36:10 -0400 Subject: [PATCH 100/171] BUG: fixed path call Fixed the path call to use the resource library correctly. --- pysatSpaceWeather/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pysatSpaceWeather/__init__.py b/pysatSpaceWeather/__init__.py index b97510cd..e262827d 100644 --- a/pysatSpaceWeather/__init__.py +++ b/pysatSpaceWeather/__init__.py @@ -11,5 +11,6 @@ from pysatSpaceWeather import instruments # noqa F401 __version__ = metadata.version('pysatSpaceWeather') -test_data_path = str( - resources.path(__package__, path.join('tests', 'test_data')).__enter__()) +test_data_path = path.join( + path.split(str(resources.path(__package__, '__init__.py').__enter__()))[0], + 'tests', 'test_data') From f2c6fe114a10e3e53d728a072402cfb2cb9caad1 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Thu, 19 Oct 2023 16:39:50 -0400 Subject: [PATCH 101/171] BUG: added missing requirement Added a missing requirement for the operational install. --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 601e3940..a6dc88e4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +importlib-resources netCDF4 numpy packaging From 5052e92dbf58bfa093a6ddde654fffac8a817b8d Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 24 Oct 2023 12:26:22 -0400 Subject: [PATCH 102/171] MAINT: updated `use_header` use Updated `use_header` use to reduce user warnings after the next pysat release. --- pysatSpaceWeather/instruments/methods/f107.py | 11 ++- pysatSpaceWeather/tests/test_methods_ace.py | 9 +- pysatSpaceWeather/tests/test_methods_f107.py | 5 +- .../tests/test_methods_general.py | 7 +- pysatSpaceWeather/tests/test_methods_kp.py | 90 +++++++++++++------ 5 files changed, 90 insertions(+), 32 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/f107.py b/pysatSpaceWeather/instruments/methods/f107.py index 6d2f69b6..f6f8f3c9 100644 --- a/pysatSpaceWeather/instruments/methods/f107.py +++ b/pysatSpaceWeather/instruments/methods/f107.py @@ -166,7 +166,10 @@ def combine_f107(standard_inst, forecast_inst, start=None, stop=None): # Set the load kwargs, which vary by pysat version and tag load_kwargs = {'date': itime} - if Version(pysat.__version__) > Version('3.0.1'): + # TODO(#131): Remove version check after minimum version + # supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): load_kwargs['use_header'] = True if standard_inst.tag == 'daily': @@ -214,7 +217,11 @@ def combine_f107(standard_inst, forecast_inst, start=None, stop=None): for filename in files: if filename is not None: load_kwargs = {'fname': filename} - if Version(pysat.__version__) > Version('3.0.1'): + + # TODO(#131): Remove version check after minimum version + # supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): load_kwargs['use_header'] = True forecast_inst.load(**load_kwargs) diff --git a/pysatSpaceWeather/tests/test_methods_ace.py b/pysatSpaceWeather/tests/test_methods_ace.py index 249b6159..b84b7bdd 100644 --- a/pysatSpaceWeather/tests/test_methods_ace.py +++ b/pysatSpaceWeather/tests/test_methods_ace.py @@ -65,7 +65,14 @@ class TestACESWEPAMMethods(object): def setup_method(self): """Create a clean testing setup.""" - self.testInst = pysat.Instrument('pysat', 'testing', use_header=True) + + # TODO(#131): Remove version check after min version supported is 3.2.0 + inst_kwargs = dict() + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): + inst_kwargs['use_header'] = True + + self.testInst = pysat.Instrument('pysat', 'testing', **inst_kwargs) self.testInst.load(date=self.testInst.inst_module._test_dates['']['']) self.omni_keys = ['sw_proton_dens_norm', 'sw_ion_temp_norm'] diff --git a/pysatSpaceWeather/tests/test_methods_f107.py b/pysatSpaceWeather/tests/test_methods_f107.py index ec152281..23b0380f 100644 --- a/pysatSpaceWeather/tests/test_methods_f107.py +++ b/pysatSpaceWeather/tests/test_methods_f107.py @@ -140,7 +140,10 @@ def setup_method(self): self.combine_times = {"start": self.test_day - dt.timedelta(days=30), "stop": self.test_day + dt.timedelta(days=3)} self.load_kwargs = {} - if Version(pysat.__version__) > Version('3.0.1'): + + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): self.load_kwargs['use_header'] = True return diff --git a/pysatSpaceWeather/tests/test_methods_general.py b/pysatSpaceWeather/tests/test_methods_general.py index 8e24f0eb..031ec5c5 100644 --- a/pysatSpaceWeather/tests/test_methods_general.py +++ b/pysatSpaceWeather/tests/test_methods_general.py @@ -20,7 +20,12 @@ class TestGeneralMethods(object): def setup_method(self): """Create a clean testing setup.""" - self.testInst = pysat.Instrument('pysat', 'testing', use_header=True) + # TODO(#131): Remove version check after min version supported is 3.2.0 + inst_kwargs = dict() + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): + inst_kwargs['use_header'] = True + self.testInst = pysat.Instrument('pysat', 'testing', **inst_kwargs) self.testInst.load(date=self.testInst.inst_module._test_dates['']['']) return diff --git a/pysatSpaceWeather/tests/test_methods_kp.py b/pysatSpaceWeather/tests/test_methods_kp.py index 2d7abf61..2ebf3078 100644 --- a/pysatSpaceWeather/tests/test_methods_kp.py +++ b/pysatSpaceWeather/tests/test_methods_kp.py @@ -25,13 +25,20 @@ def setup_method(self): """Create a clean testing setup.""" self.test_function = kp_ap.initialize_kp_metadata + inst_dict = {'num_samples': 12} + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): + inst_dict['use_header'] = True + # Load a test instrument - self.testInst = pysat.Instrument('pysat', 'testing', num_samples=12, - use_header=True) + self.testInst = pysat.Instrument('pysat', 'testing', **inst_dict) test_time = pysat.instruments.pysat_testing._test_dates[''][''] load_kwargs = {'date': test_time} - if Version(pysat.__version__) > Version('3.0.1'): + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): load_kwargs['use_header'] = True self.testInst.load(**load_kwargs) @@ -122,13 +129,20 @@ def setup_method(self): """Create a clean testing setup.""" self.test_function = kp_ap.initialize_ap_metadata + inst_dict = {'num_samples': 12} + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): + inst_dict['use_header'] = True + # Load a test instrument - self.testInst = pysat.Instrument('pysat', 'testing', num_samples=12, - use_header=True) + self.testInst = pysat.Instrument('pysat', 'testing', **inst_dict) test_time = pysat.instruments.pysat_testing._test_dates[''][''] load_kwargs = {'date': test_time} - if Version(pysat.__version__) > Version('3.0.1'): + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): load_kwargs['use_header'] = True self.testInst.load(**load_kwargs) @@ -170,13 +184,20 @@ def setup_method(self): """Create a clean testing setup.""" self.test_function = kp_ap.initialize_bartel_metadata + inst_dict = {'num_samples': 12} + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): + inst_dict['use_header'] = True + # Load a test instrument - self.testInst = pysat.Instrument('pysat', 'testing', num_samples=12, - use_header=True) + self.testInst = pysat.Instrument('pysat', 'testing', **inst_dict) test_time = pysat.instruments.pysat_testing._test_dates[''][''] load_kwargs = {'date': test_time} - if Version(pysat.__version__) > Version('3.0.1'): + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): load_kwargs['use_header'] = True self.testInst.load(**load_kwargs) @@ -267,13 +288,20 @@ class TestSWKp(object): def setup_method(self): """Create a clean testing setup.""" + inst_dict = {'num_samples': 12} + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): + inst_dict['use_header'] = True + # Load a test instrument - self.testInst = pysat.Instrument('pysat', 'testing', num_samples=12, - use_header=True) + self.testInst = pysat.Instrument('pysat', 'testing', **inst_dict) test_time = pysat.instruments.pysat_testing._test_dates[''][''] load_kwargs = {'date': test_time} - if Version(pysat.__version__) > Version('3.0.1'): + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): load_kwargs['use_header'] = True self.testInst.load(**load_kwargs) @@ -476,22 +504,23 @@ def setup_method(self): # Set combination testing input test_day = dt.datetime(2019, 3, 18) - self.combine = {"standard_inst": pysat.Instrument(inst_module=sw_kp, - tag="def", - update_files=True, - use_header=True), - "recent_inst": pysat.Instrument(inst_module=sw_kp, - tag="recent", - update_files=True, - use_header=True), - "forecast_inst": - pysat.Instrument(inst_module=sw_kp, tag="forecast", - update_files=True, use_header=True), + idict = {'inst_module': sw_kp, 'update_files': True} + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): + idict['use_header'] = True + + self.combine = {"standard_inst": pysat.Instrument(tag="def", **idict), + "recent_inst": pysat.Instrument(tag="recent", **idict), + "forecast_inst": pysat.Instrument(tag="forecast", + **idict), "start": test_day - dt.timedelta(days=30), "stop": test_day + dt.timedelta(days=3), "fill_val": -1} self.load_kwargs = {"date": test_day} - if Version(pysat.__version__) > Version('3.0.1'): + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): self.load_kwargs['use_header'] = True return @@ -662,12 +691,19 @@ class TestSWAp(object): def setup_method(self): """Create a clean testing setup.""" - self.test_inst = pysat.Instrument('pysat', 'testing', num_samples=10, - use_header=True) + inst_dict = {'num_samples': 10} + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): + inst_dict['use_header'] = True + + self.test_inst = pysat.Instrument('pysat', 'testing', **inst_dict) test_time = pysat.instruments.pysat_testing._test_dates[''][''] load_kwargs = {'date': test_time} - if Version(pysat.__version__) > Version('3.0.1'): + # TODO(#131): Remove version check after min version supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): load_kwargs['use_header'] = True self.test_inst.load(**load_kwargs) From 257b656dadaaf38a208f16574405135be50d8410 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 24 Oct 2023 12:27:48 -0400 Subject: [PATCH 103/171] MAINT: updated load kwargs and try/except Updated the load kwargs and the temporary try/except loop to reflect changes in pysat. --- .../instruments/methods/kp_ap.py | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/kp_ap.py b/pysatSpaceWeather/instruments/methods/kp_ap.py index ad26e8ce..e2ba8228 100644 --- a/pysatSpaceWeather/instruments/methods/kp_ap.py +++ b/pysatSpaceWeather/instruments/methods/kp_ap.py @@ -368,15 +368,14 @@ def filter_geomag(inst, min_kp=0, max_kp=9, filter_time=24, kp_inst=None, if kp_inst.empty: load_kwargs = {'date': inst.index[0], 'end_date': inst.index[-1], 'verifyPad': True} - if Version(pysat.__version__) > Version('3.0.1'): + + # TODO(#131): Remove version check after minimum version supported + # is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): load_kwargs['use_header'] = True - # TODO(#117): This gets around a bug in pysat that will be fixed in - # pysat version 3.1.0+ - try: - kp_inst.load(**load_kwargs) - except TypeError: - pass + kp_inst.load(**load_kwargs) if kp_inst.empty: raise IOError( @@ -598,7 +597,11 @@ def combine_kp(standard_inst=None, recent_inst=None, forecast_inst=None, # Load and save the standard data for as many times as possible if inst_flag == 'standard': load_kwargs = {'date': itime} - if Version(pysat.__version__) > Version('3.0.1'): + + # TODO(#131): Remove version check after minimum version supported + # is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): load_kwargs['use_header'] = True standard_inst.load(**load_kwargs) @@ -628,7 +631,11 @@ def combine_kp(standard_inst=None, recent_inst=None, forecast_inst=None, for filename in files: if filename is not None: load_kwargs = {'fname': filename} - if Version(pysat.__version__) > Version('3.0.1'): + + # TODO(#131): Remove version check after minimum version + # supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): load_kwargs['use_header'] = True recent_inst.load(**load_kwargs) @@ -664,7 +671,11 @@ def combine_kp(standard_inst=None, recent_inst=None, forecast_inst=None, for filename in files: if filename is not None: load_kwargs = {'fname': filename} - if Version(pysat.__version__) > Version('3.0.1'): + + # TODO(#131): Remove version check after minimum version + # supported is 3.2.0 + if all([Version(pysat.__version__) > Version('3.0.1'), + Version(pysat.__version__) < Version('3.2.0')]): load_kwargs['use_header'] = True forecast_inst.load(**load_kwargs) From 3bcbfe5d7f9104e9c2ebb93d2388a8572503ee82 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 24 Oct 2023 12:29:52 -0400 Subject: [PATCH 104/171] STY: removed whitespace Removed extra whitespace. --- pysatSpaceWeather/tests/test_methods_f107.py | 2 +- pysatSpaceWeather/tests/test_methods_kp.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatSpaceWeather/tests/test_methods_f107.py b/pysatSpaceWeather/tests/test_methods_f107.py index 23b0380f..70c98451 100644 --- a/pysatSpaceWeather/tests/test_methods_f107.py +++ b/pysatSpaceWeather/tests/test_methods_f107.py @@ -140,7 +140,7 @@ def setup_method(self): self.combine_times = {"start": self.test_day - dt.timedelta(days=30), "stop": self.test_day + dt.timedelta(days=3)} self.load_kwargs = {} - + # TODO(#131): Remove version check after min version supported is 3.2.0 if all([Version(pysat.__version__) > Version('3.0.1'), Version(pysat.__version__) < Version('3.2.0')]): diff --git a/pysatSpaceWeather/tests/test_methods_kp.py b/pysatSpaceWeather/tests/test_methods_kp.py index 2ebf3078..88b4b9aa 100644 --- a/pysatSpaceWeather/tests/test_methods_kp.py +++ b/pysatSpaceWeather/tests/test_methods_kp.py @@ -134,7 +134,7 @@ def setup_method(self): if all([Version(pysat.__version__) > Version('3.0.1'), Version(pysat.__version__) < Version('3.2.0')]): inst_dict['use_header'] = True - + # Load a test instrument self.testInst = pysat.Instrument('pysat', 'testing', **inst_dict) test_time = pysat.instruments.pysat_testing._test_dates[''][''] From e0c274ae318a67944f28eac234a03a489e26568e Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 24 Oct 2023 12:30:11 -0400 Subject: [PATCH 105/171] DOC: updated changelog Added a summary of the changes in this pull request to the changelog. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e52ebd5..5abcf780 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ This project adheres to [Semantic Versioning](https://semver.org/). * Updated package documentation, yamls, and other supporting files * Updated the LISIRD download routine to reflect new behaviour * Changed F10.7 daily test day to ensure new pysat padding tests work + * Removed try/except loop that was a fix for pysat < 3.1.0 + * Updated 'use_header' kwarg use for pysat 3.2.0 changes [0.0.10] - 2023-06-01 --------------------- From cc4c9ff9b59475315dc3b3562585e9f4da67d753 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 24 Oct 2023 14:55:43 -0400 Subject: [PATCH 106/171] DOC: added image to docs Added the package logo to the documentation and changed the table of contents to show a pared down index. --- docs/conf.py | 3 +++ docs/index.rst | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 0852b124..49e13af9 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -97,6 +97,9 @@ # a list of builtin themes. html_theme = 'sphinx_rtd_theme' html_theme_path = ["_themes", ] +html_logo = os.path.join(os.path.abspath('.'), 'figures', + 'pysatSpaceWeather.png') +html_theme_options = {'logo_only': True} # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the diff --git a/docs/index.rst b/docs/index.rst index d38e12cf..6b5cb9dc 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -9,7 +9,7 @@ routines to load common historic, real-time, and forecasted space weather indices as pysat.Instrument objects. .. toctree:: - :maxdepth: -1 + :maxdepth: 2 overview.rst installation.rst From c272c9fe9e9ba3d4b086f226439027e00ce3f7d5 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:02:07 -0400 Subject: [PATCH 107/171] ENH: added a general text loading function Added a function to load text either from a remote URL or a local file and returned for further processing. --- .../instruments/methods/general.py | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/pysatSpaceWeather/instruments/methods/general.py b/pysatSpaceWeather/instruments/methods/general.py index d40f5588..9e6394d5 100644 --- a/pysatSpaceWeather/instruments/methods/general.py +++ b/pysatSpaceWeather/instruments/methods/general.py @@ -66,3 +66,48 @@ def get_instrument_data_path(inst_mod_name, tag='', inst_id='', **kwargs): del temp_inst return data_path + + +def get_local_or_remote_text(url, mock_download_dir, filename): + """Retrieve text from a remote or local file. + + Parameters + ---------- + filename : str + Filename without any directory structure + url : str + Remote URL where file is located + mock_download_dir : str or NoneType + If not None, directory where file is located + + Returns + ------- + raw_txt : str + All the text from the desired file. + + Raises + ------ + IOError + If an unknown mock download directory is supplied or the file is + missing. + + """ + if mock_download_dir is None: + # Set the download webpage + furl = ''.join([url, filename]) + req = requests.get(furl) + raw_txt = req.text + else: + if not os.path.isdir(mock_download_dir): + raise IOError('file location is not a directory: {:}'.format( + mock_download_dir)) + + furl = os.path.join(mock_download_dir, filename) + + if os.path.isfile(furl): + with open(furl, 'r') as fpin: + raw_txt = fpin.read() + else: + raise IOError('desired file is missing: {:}.'.format(furl)) + + return raw_txt From 161ed964361cf123975c1aad74ff5d317d9761c8 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:03:02 -0400 Subject: [PATCH 108/171] ENH: added `mock_download_dir` to ACE Allow ACE Instruments to obtain files from a local directory, as long as they have the correct name. --- pysatSpaceWeather/instruments/methods/ace.py | 29 ++++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index 1141c8a8..47a2e2c5 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -14,6 +14,8 @@ import pysat +from pysatSpaceWeather.instruments.methods import general + logger = pysat.logger clean_warn = {'dusty': [('logger', 'WARN', "unused clean level 'dusty', reverting to 'clean'", @@ -156,7 +158,8 @@ def list_files(name, tag='', inst_id='', data_path='', format_str=None): return files -def download(date_array, name, tag='', inst_id='', data_path='', now=None): +def download(date_array, name, tag='', inst_id='', data_path='', now=None, + mock_download_dir=None): """Download the requested ACE Space Weather data. Parameters @@ -174,6 +177,15 @@ def download(date_array, name, tag='', inst_id='', data_path='', now=None): now : dt.datetime or NoneType Current universal time, if None this is determined for each download. (default=None) + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + IOError + If an unknown mock download directory is supplied or the file format + changes. Note ---- @@ -185,7 +197,6 @@ def download(date_array, name, tag='', inst_id='', data_path='', now=None): - File requested not available on server """ - # Ensure now is up-to-date, if desired if now is None: now = dt.datetime.utcnow() @@ -223,18 +234,18 @@ def download(date_array, name, tag='', inst_id='', data_path='', now=None): # Cycle through all the dates for dl_date in date_array: - # Download webpage - furl = ''.join((url[tag], dl_date.strftime(file_fmt))) - req = requests.get(furl) + # Get the file text from the remote or local destination + raw_data = general.get_local_or_remote_text(url[tag], mock_download_dir, + dl_date.strftime(file_fmt)) - # Split the file at the last header line and then by new line markers - raw_data = req.text.split('#-----------------')[-1] + # Split the file at the last header line and the new line markers + raw_data = raw_data.split('#-----------------')[-1] raw_data = raw_data.split('\n')[1:] # Remove the last header line # Test to see if the file was found on the server if ' '.join(raw_data).find('not found on this server') > 0: - logger.warning('File for {:} not found on server: {:}'.format( - dl_date.strftime("%d %b %Y"), furl)) + logger.warning('File {:} not found: {:}'.format( + dl_date.strftime(file_fmt), url[tag])) else: # Parse the file, treating the 4 time columns separately data_dict = {col: list() for col in data_cols[name]} From 279d0c1681a5ec3729d76c0ba87bb67ed93f431a Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:03:29 -0400 Subject: [PATCH 109/171] ENH: added `mock_download_dir` to GFZ Allow GFZ Instruments to obtain files from a local directory, as long as they have the correct name. --- pysatSpaceWeather/instruments/methods/gfz.py | 118 ++++++++++++++----- 1 file changed, 86 insertions(+), 32 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/gfz.py b/pysatSpaceWeather/instruments/methods/gfz.py index 9c9efdab..2c6be82e 100644 --- a/pysatSpaceWeather/instruments/methods/gfz.py +++ b/pysatSpaceWeather/instruments/methods/gfz.py @@ -52,7 +52,8 @@ # Define the module functions def json_downloads(date_array, data_path, local_file_prefix, local_date_fmt, - gfz_data_name, freq, update_files=False, is_def=False): + gfz_data_name, freq, update_files=False, is_def=False, + mock_download_dir=None): """Download data from GFZ into CSV files at a specified cadence. Parameters @@ -78,14 +79,25 @@ def json_downloads(date_array, data_path, local_file_prefix, local_date_fmt, is_def : bool If true, selects only the definitive data, otherwise also includes nowcast data (default=False) + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + (following the local file prefix and date format) as if they were + downloaded (default=None) Raises ------ IOError - If there is a gateway timeout when downloading data + If there is a gateway timeout when downloading data or if an unknown + mock download directory is supplied. """ + # If a mock download directory was supplied, test to see it exists + if mock_download_dir is not None: + if not os.path.isdir(mock_download_dir): + raise IOError('file location is not a directory: {:}'.format( + mock_download_dir)) + # Set the local variables base_url = "https://kp.gfz-potsdam.de/app/json/" time_fmt = "%Y-%m-%dT%H:%M:%SZ" @@ -94,33 +106,45 @@ def json_downloads(date_array, data_path, local_file_prefix, local_date_fmt, # Cycle through all the dates for dl_date in date_array: # Build the local filename - local_file = os.path.join( - data_path, ''.join([local_file_prefix, - dl_date.strftime(local_date_fmt), '.txt'])) + local_fname = ''.join([local_file_prefix, + dl_date.strftime(local_date_fmt), '.txt']) + local_file = os.path.join(data_path, local_fname) # Determine if the download should occur if not os.path.isfile(local_file) or (update_files and local_file != last_file): - # Get the URL for the desired data - stop = dl_date + freq - query_url = "{:s}?start={:s}&end={:s}&index={:s}".format( - base_url, dl_date.strftime(time_fmt), stop.strftime(time_fmt), - gfz_data_name) - - if is_def: - # Add the definitive flag - query_url = '{:s}&status=def'.format(query_url) - - # The data is returned as a JSON file - req = requests.get(query_url) - - # Process the JSON file - if req.text.find('Gateway Timeout') >= 0: - raise IOError(''.join(['Gateway timeout when requesting ', - 'file using command: ', query_url])) - - if req.ok: - raw_dict = json.loads(req.text) + if mock_download_dir is None: + # Get the URL for the desired data + stop = dl_date + freq + query_url = "{:s}?start={:s}&end={:s}&index={:s}".format( + base_url, dl_date.strftime(time_fmt), + stop.strftime(time_fmt), gfz_data_name) + + if is_def: + # Add the definitive flag + query_url = '{:s}&status=def'.format(query_url) + + # The data is returned as a JSON file + req = requests.get(query_url) + + # Process the JSON file + if req.text.find('Gateway Timeout') >= 0: + raise IOError(''.join(['Gateway timeout when requesting ', + 'file using command: ', query_url])) + + + raw_txt = req.text if req.ok else None + else: + # Get the text from the downloaded file + query_url = os.path.join(mock_download_dir, local_fname) + if os.path.isfile(query_url): + with open(query_url, 'r') as fpin: + raw_txt = fpin.read() + else: + raw_txt = None + + if raw_txt is not None: + raw_dict = json.loads(raw_txt) data = pds.DataFrame.from_dict({gfz_data_name: raw_dict[gfz_data_name]}) if data.empty: @@ -139,11 +163,14 @@ def json_downloads(date_array, data_path, local_file_prefix, local_date_fmt, pysat.logger.info("".join(["Data not downloaded for ", dl_date.strftime("%d %b %Y"), ", date may be out of range ", - "for the database."])) + "for the database or data may ", + "have been saved to an unexpected", + " filename: {:}".format(query_url)])) return -def kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path): +def kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path, + mock_download_dir=None): """Download Kp, ap, and Cp data from GFZ. Parameters @@ -161,6 +188,16 @@ def kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path): Specifies the instrument identification, not used. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + ValueError + If an unknown instrument module is supplied. + IOError + If an unknown mock download directory is supplied. Note ---- @@ -168,6 +205,12 @@ def kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path): the standard pysat data paths """ + # If a mock download directory was supplied, test to see it exists + if mock_download_dir is not None: + if not os.path.isdir(mock_download_dir): + raise IOError('file location is not a directory: {:}'.format( + mock_download_dir)) + # Set the page for the definitive or nowcast Kp burl = ''.join(['https://datapub.gfz-potsdam.de/download/10.5880.Kp.0001', '/Kp_', 'nowcast' if tag == 'now' else 'definitive', '/']) @@ -201,12 +244,22 @@ def kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path): if fname not in dnames: pysat.logger.info(' '.join(('Downloading file for', dl_date.strftime('%Y')))) - furl = ''.join([burl, fname]) - req = requests.get(furl) + if mock_download_dir is None: + furl = ''.join([burl, fname]) + req = requests.get(furl) + + raw_txt = req.text if req.ok else None + else: + furl = os.path.join(mock_download_dir, fname) + if os.path.isfile(furl): + with open(furl, "r") as fpin: + raw_txt = fpin.read() + else: + raw_txt = None - if req.ok: + if raw_txt is not None: # Split the file text into lines - lines = req.text.split('\n')[:-1] + lines = raw_txt.split('\n')[:-1] # Remove the header while lines[0].find('#') == 0: @@ -272,7 +325,8 @@ def kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path): pysat.logger.info("".join(["Unable to download data for ", dl_date.strftime("%d %b %Y"), ", date may be out of range for ", - "the database."])) + "the database or missing from the", + " local directory: ", furl])) return From 155dc84caa424f71add5892955ba51fe5998c38d Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:03:47 -0400 Subject: [PATCH 110/171] ENH: added `mock_download_dir` to LASP Allow LASP Instruments to obtain files from a local directory, as long as they have the correct name. --- pysatSpaceWeather/instruments/methods/lasp.py | 56 ++++++++++++++----- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/lasp.py b/pysatSpaceWeather/instruments/methods/lasp.py index f91ceae5..3f0f55fd 100644 --- a/pysatSpaceWeather/instruments/methods/lasp.py +++ b/pysatSpaceWeather/instruments/methods/lasp.py @@ -10,7 +10,7 @@ import pysat -def prediction_downloads(name, tag, data_path): +def prediction_downloads(name, tag, data_path, mock_download_dir=None): """Download LASP 96-hour prediction data. Parameters @@ -21,31 +21,57 @@ def prediction_downloads(name, tag, data_path): Instrument tag, used to create a descriptive file name. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Raises ------ IOError - If the data link has an unexpected format + If the data link has an unexpected format or an unknown mock download + directory is supplied. """ - - # Set the remote data variables - url = ''.join(['https://lasp.colorado.edu/space_weather/dsttemerin/', - name.lower(), '_last_96_hrs.txt']) times = list() data_dict = {name.lower(): []} - - # Download the webpage - req = requests.get(url) - - # Test to see if the file was found on the server - if req.text.find('not found on this server') > 0: - pysat.logger.warning(''.join(['LASP last 96 hour Dst file not ', - 'found on server: ', url])) + fname = ''.join([name.lower(), '_last_96_hrs.txt']) + + if mock_download_dir is None: + # Set the remote data variables + url = ''.join(['https://lasp.colorado.edu/space_weather/dsttemerin/', + fname]) + + # Download the webpage + req = requests.get(url) + + # Test to see if the file was found on the server + if req.text.find('not found on this server') > 0: + pysat.logger.warning(''.join(['LASP last 96 hour Dst file not ', + 'found on server: ', url])) + raw_txt = None + else: + raw_txt = req.text else: + # If a mock download directory was supplied, test to see it exists + if mock_download_dir is not None: + if not os.path.isdir(mock_download_dir): + raise IOError('file location is not a directory: {:}'.format( + mock_download_dir)) + + # Get the data from the mock download directory + url = os.path.join(mock_download_dir, fname) + if os.path.isfile(url): + with open(url, 'r') as fpin: + raw_txt = fpin.read() + else: + pysat.logger.warning(''.join(['LASP last 96 hour Dst file not ', + 'found in local directory: ', url])) + raw_txt = None + + if raw_txt is not None: # Split the file into lines, removing the header and # trailing empty line - file_lines = req.text.split('\n')[1:-1] + file_lines = raw_txt.split('\n')[1:-1] # Format the data for line in file_lines: From 04546f2fa8e54ffa2dbefd211049073a0d4bd9b0 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:04:08 -0400 Subject: [PATCH 111/171] ENH: added `mock_download_dir` to LISIRD Allow LISIRD Instruments to obtain files from a local directory, as long as they have the correct name. --- .../instruments/methods/lisird.py | 61 +++++++++++++------ 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/lisird.py b/pysatSpaceWeather/instruments/methods/lisird.py index 60598cf4..ab772024 100644 --- a/pysatSpaceWeather/instruments/methods/lisird.py +++ b/pysatSpaceWeather/instruments/methods/lisird.py @@ -92,7 +92,8 @@ def build_lisird_url(lisird_data_name, start, stop): def download(date_array, data_path, local_file_prefix, local_date_fmt, - lisird_data_name, freq, update_files=False, fill_vals=None): + lisird_data_name, freq, update_files=False, fill_vals=None, + mock_download_dir=None): """Download routine for LISIRD data. Parameters @@ -114,16 +115,26 @@ def download(date_array, data_path, local_file_prefix, local_date_fmt, Re-download data for files that already exist if True (default=False) fill_vals : dict or NoneType Dict of fill values to replace with NaN by variable name or None to - leave alone + leave alone (default=None) + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Raises ------ IOError - If there is a gateway timeout when downloading data + If there is a gateway timeout when downloading data or an unknown mock + download directory is supplied. KeyError - If the `fill_vals` input does not match the downloaded data + If the `fill_vals` input does not match the downloaded data. """ + # If a mock download directory was supplied, test to see it exists + if mock_download_dir is not None: + if not os.path.isdir(mock_download_dir): + raise IOError('file location is not a directory: {:}'.format( + mock_download_dir)) + # Initialize the fill_vals dict, if necessary if fill_vals is None: fill_vals = {} @@ -131,25 +142,37 @@ def download(date_array, data_path, local_file_prefix, local_date_fmt, # Cycle through all the dates for dl_date in date_array: # Build the local filename - local_file = os.path.join( - data_path, ''.join([local_file_prefix, - dl_date.strftime(local_date_fmt), '.txt'])) + fname = ''.join([local_file_prefix, dl_date.strftime(local_date_fmt), + '.txt']) + local_file = os.path.join(data_path, fname) # Determine if the download should occur if update_files or not os.path.isfile(local_file): - # Get the URL for the desired data - url = build_lisird_url(lisird_data_name, dl_date, dl_date + freq) + if mock_download_dir is None: + # Get the URL for the desired data + url = build_lisird_url(lisird_data_name, dl_date, + dl_date + freq) + + # The data is returned as a JSON file + req = requests.get(url) - # The data is returned as a JSON file - req = requests.get(url) + # Process the JSON file + if req.text.find('Gateway Timeout') >= 0: + raise IOError(''.join(['Gateway timeout when requesting ', + 'file using command: ', url])) - # Process the JSON file - if req.text.find('Gateway Timeout') >= 0: - raise IOError(''.join(['Gateway timeout when requesting ', - 'file using command: ', url])) + # Load the dict if text was retrieved + json_dict = json.loads(req.text) if req.ok else {'': {}} + else: + # Get the local repository filename + url = os.path.join(mock_download_dir, fname) + if os.path.isfile(url): + with open(url, 'r') as fpin: + raw_txt = fpin.read() - # Load the dict if text was retrieved - json_dict = json.loads(req.text) if req.ok else {'': {}} + json_dict = json.loads(raw_txt) + else: + json_dict = {'': {}} if lisird_data_name in json_dict.keys(): raw_dict = json_dict[lisird_data_name] @@ -183,7 +206,9 @@ def download(date_array, data_path, local_file_prefix, local_date_fmt, pysat.logger.info("".join(["Data not downloaded for ", dl_date.strftime("%d %b %Y"), ", date may be out of range ", - "for the database."])) + "for the database or the local", + " repository file may be ", + "missing: ", url])) else: raise IOError(''.join(['Returned unexpectedly formatted ', 'data using command: ', url])) From 466f5f681ca08a9b081407412e186581024ee477 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:04:29 -0400 Subject: [PATCH 112/171] ENH: added `mock_download_dir` to SWPC Allow SWPC Instruments to obtain files from a local directory, as long as they have the correct name. --- pysatSpaceWeather/instruments/methods/swpc.py | 222 ++++++++++++------ 1 file changed, 147 insertions(+), 75 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index 0238a7b2..a2147c87 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -30,7 +30,7 @@ # ---------------------------------------------------------------------------- # Define the module functions -def daily_dsd_download(name, today, data_path): +def daily_dsd_download(name, today, data_path, mock_download_dir=None): """Download the daily NOAA Daily Solar Data indices. Parameters @@ -41,6 +41,15 @@ def daily_dsd_download(name, today, data_path): Datetime for current day data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + IOError + If an unknown mock download directory is supplied or the desired file + is missing. Note ---- @@ -50,9 +59,10 @@ def daily_dsd_download(name, today, data_path): """ pysat.logger.info('This routine only downloads the latest 30 day file') - # Set the download webpage - furl = 'https://services.swpc.noaa.gov/text/daily-solar-indices.txt' - req = requests.get(furl) + # Get the file information + raw_txt = general.get_local_or_remote_text( + 'https://services.swpc.noaa.gov/text/', mock_download_dir, + 'daily-solar-indices.txt') # Get the file paths and output names file_paths = {data_name: data_path if name == data_name else @@ -69,12 +79,13 @@ def daily_dsd_download(name, today, data_path): pysat.utils.files.check_and_make_path(data_path) # Save the output - rewrite_daily_solar_data_file(today.year, outfiles, req.text) + rewrite_daily_solar_data_file(today.year, outfiles, raw_txt) return -def old_indices_dsd_download(name, date_array, data_path, local_files, today): +def old_indices_dsd_download(name, date_array, data_path, local_files, today, + mock_download_dir=None): """Download the old NOAA Daily Solar Data indices. Parameters @@ -89,6 +100,14 @@ def old_indices_dsd_download(name, date_array, data_path, local_files, today): A Series containing the local filenames indexed by time. today : dt.datetime Datetime for current day + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + IOError + If an unknown mock download directory is supplied. Note ---- @@ -106,10 +125,14 @@ def old_indices_dsd_download(name, date_array, data_path, local_files, today): for data_path in file_paths.values(): pysat.utils.files.check_and_make_path(data_path) - # Connect to the host, default port - ftp = ftplib.FTP('ftp.swpc.noaa.gov') - ftp.login() # User anonymous, passwd anonymous - ftp.cwd('/pub/indices/old_indices') + if mock_download_dir is None: + # Connect to the host, default port + ftp = ftplib.FTP('ftp.swpc.noaa.gov') + ftp.login() # User anonymous, passwd anonymous + ftp.cwd('/pub/indices/old_indices') + elif not os.path.isdir(mock_download_dir): + raise IOError('file location is not a directory: {:}'.format( + mock_download_dir)) bad_fname = list() @@ -165,37 +188,44 @@ def old_indices_dsd_download(name, date_array, data_path, local_files, today): # Attempt to download if the file does not exist or if the # file has been updated if rewritten or not downloaded: - try: - sys.stdout.flush() - ftp.retrbinary('RETR ' + fname, - open(saved_fname, 'wb').write) + if mock_download_dir is None: + try: + sys.stdout.flush() + ftp.retrbinary('RETR ' + fname, + open(saved_fname, 'wb').write) + downloaded = True + pysat.logger.info(' '.join(('Downloaded file for ', + dl_date.strftime('%x')))) + + except ftplib.error_perm as exception: + # Could not fetch, so cannot rewrite + rewritten = False + + # Test for an error + if str(exception.args[0]).split(" ", 1)[0] != '550': + raise IOError(exception) + else: + # File isn't actually there, try the next name. The + # extra wrapping is for Windows, which can encounter + # permission errors when handling files. + attempt = 0 + while attempt < 100: + try: + os.remove(saved_fname) + attempt = 100 + except PermissionError: + attempt += 1 + + # Save this so we don't try again. Because there are + # two possible filenames for each time, it's ok if + # one isn't there. We just don't want to keep + # looking for it. + bad_fname.append(fname) + else: + # Set the saved filename + saved_fname = os.path.join(mock_download_dir, local_fname) downloaded = True - pysat.logger.info(' '.join(('Downloaded file for ', - dl_date.strftime('%x')))) - - except ftplib.error_perm as exception: - # Could not fetch, so cannot rewrite - rewritten = False - - # Test for an error - if str(exception.args[0]).split(" ", 1)[0] != '550': - raise IOError(exception) - else: - # File isn't actually there, try the next name. The - # extra wrapping is for Windows, which can encounter - # permission errors when handling files. - attempt = 0 - while attempt < 100: - try: - os.remove(saved_fname) - attempt = 100 - except PermissionError: - attempt += 1 - - # Save this so we don't try again. Because there are two - # possible filenames for each time, it's ok if one isn't - # there. We just don't want to keep looking for it. - bad_fname.append(fname) + rewritten = True # If the first file worked, don't try again if downloaded: @@ -215,7 +245,8 @@ def old_indices_dsd_download(name, date_array, data_path, local_files, today): dl_date = vend[iname] + pds.DateOffset(days=1) # Close connection after downloading all dates - ftp.close() + if mock_download_dir is None: + ftp.close() return @@ -334,7 +365,8 @@ def parse_daily_solar_data(data_lines, year, optical): return dates, values -def solar_geomag_predictions_download(name, date_array, data_path): +def solar_geomag_predictions_download(name, date_array, data_path, + mock_download_dir=None): """Download the 3-day solar-geomagnetic predictions from SWPC. Parameters @@ -346,6 +378,15 @@ def solar_geomag_predictions_download(name, date_array, data_path): Array-like or index of datetimes to be downloaded. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + IOError + If an unknown mock download directory is supplied or the desired file + is missing. Note ---- @@ -367,27 +408,27 @@ def solar_geomag_predictions_download(name, date_array, data_path): for data_path in file_paths.values(): pysat.utils.files.check_and_make_path(data_path) - # Download webpage - furl = ''.join(['https://services.swpc.noaa.gov/text/', - '3-day-solar-geomag-predictions.txt']) - req = requests.get(furl) + # Get the file information + raw_txt = general.get_local_or_remote_text( + 'https://services.swpc.noaa.gov/text/', mock_download_dir, + '3-day-solar-geomag-predictions.txt') # Parse text to get the date the prediction was generated - date_str = req.text.split(':Issued: ')[-1].split(' UTC')[0] + date_str = raw_txt.split(':Issued: ')[-1].split(' UTC')[0] dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') # Parse the data to get the prediction dates - date_strs = req.text.split(':Prediction_dates:')[-1].split('\n')[0] + date_strs = raw_txt.split(':Prediction_dates:')[-1].split('\n')[0] pred_times = [dt.datetime.strptime(' '.join(date_str.split()), '%Y %b %d') for date_str in date_strs.split(' ') if len(date_str) > 0] # Separate out the data by chunks - ap_raw = req.text.split(':Geomagnetic_A_indices:')[-1] - kp_raw = req.text.split(':Pred_Mid_k:')[-1] - storm_raw = req.text.split(':Prob_Mid:')[-1] - pc_raw = req.text.split(':Polar_cap:')[-1] - f107_raw = req.text.split(':10cm_flux:')[-1] - flare_raw = req.text.split(':Whole_Disk_Flare_Prob:')[-1] + ap_raw = raw_txt.split(':Geomagnetic_A_indices:')[-1] + kp_raw = raw_txt.split(':Pred_Mid_k:')[-1] + storm_raw = raw_txt.split(':Prob_Mid:')[-1] + pc_raw = raw_txt.split(':Polar_cap:')[-1] + f107_raw = raw_txt.split(':10cm_flux:')[-1] + flare_raw = raw_txt.split(':Whole_Disk_Flare_Prob:')[-1] # Initalize the data for each data type data_vals = {data_name: dict() for data_name in file_paths.keys()} @@ -490,7 +531,8 @@ def solar_geomag_predictions_download(name, date_array, data_path): return -def geomag_forecast_download(name, date_array, data_path): +def geomag_forecast_download(name, date_array, data_path, + mock_download_dir=None): """Download the 3-day geomagnetic Kp, ap, and storm data from SWPC. Parameters @@ -501,6 +543,15 @@ def geomag_forecast_download(name, date_array, data_path): Array-like or index of datetimes to be downloaded. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + IOError + If an unknown mock download directory is supplied or the desored file + is missing. Note ---- @@ -520,18 +571,19 @@ def geomag_forecast_download(name, date_array, data_path): for data_path in file_paths.values(): pysat.utils.files.check_and_make_path(data_path) - # Download webpage - furl = 'https://services.swpc.noaa.gov/text/3-day-geomag-forecast.txt' - req = requests.get(furl) + # Get the file information + raw_txt = general.get_local_or_remote_text( + 'https://services.swpc.noaa.gov/text/', mock_download_dir, + '3-day-geomag-forecast.txt') # Parse text to get the date the prediction was generated - date_str = req.text.split(':Issued: ')[-1].split(' UTC')[0] + date_str = raw_txt.split(':Issued: ')[-1].split(' UTC')[0] dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') # Separate out the data by chunks - ap_raw = req.text.split('NOAA Ap Index Forecast')[-1] - kp_raw = req.text.split('NOAA Kp index forecast ')[-1] - storm_raw = req.text.split('NOAA Geomagnetic Activity Probabilities')[-1] + ap_raw = raw_txt.split('NOAA Ap Index Forecast')[-1] + kp_raw = raw_txt.split('NOAA Kp index forecast ')[-1] + storm_raw = raw_txt.split('NOAA Geomagnetic Activity Probabilities')[-1] # Get dates of the forecasts date_str = kp_raw[0:6] + ' ' + str(dl_date.year) @@ -601,7 +653,7 @@ def geomag_forecast_download(name, date_array, data_path): return -def kp_ap_recent_download(name, date_array, data_path): +def kp_ap_recent_download(name, date_array, data_path, mock_download_dir=None): """Download recent Kp and ap data from SWPC. Parameters @@ -612,6 +664,15 @@ def kp_ap_recent_download(name, date_array, data_path): Array-like or index of datetimes to be downloaded. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + IOError + If an unknown mock download directory is supplied or the desired file + is missing. Note ---- @@ -631,17 +692,17 @@ def kp_ap_recent_download(name, date_array, data_path): for data_path in file_paths.values(): pysat.utils.files.check_and_make_path(data_path) - # Download webpage - rurl = ''.join(('https://services.swpc.noaa.gov/text/', - 'daily-geomagnetic-indices.txt')) - req = requests.get(rurl) + # Get the file information + raw_txt = general.get_local_or_remote_text( + 'https://services.swpc.noaa.gov/text/', mock_download_dir, + 'daily-geomagnetic-indices.txt') # Parse text to get the date the prediction was generated - date_str = req.text.split(':Issued: ')[-1].split('\n')[0] + date_str = raw_txt.split(':Issued: ')[-1].split('\n')[0] dl_date = dt.datetime.strptime(date_str, '%H%M UT %d %b %Y') # Data is the forecast value for the next three days - raw_data = req.text.split('# Date ')[-1] + raw_data = raw_txt.split('# Date ')[-1] # Keep only the middle bits that matter raw_data = raw_data.split('\n')[1:-1] @@ -698,7 +759,8 @@ def kp_ap_recent_download(name, date_array, data_path): return -def recent_ap_f107_download(name, date_array, data_path): +def recent_ap_f107_download(name, date_array, data_path, + mock_download_dir=None): """Download 45-day ap and F10.7 data from SWPC. Parameters @@ -709,6 +771,15 @@ def recent_ap_f107_download(name, date_array, data_path): Array-like or index of datetimes to be downloaded. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + IOError + If an unknown mock download directory is supplied or the desored file + is missing. Note ---- @@ -728,16 +799,17 @@ def recent_ap_f107_download(name, date_array, data_path): for data_path in file_paths.values(): pysat.utils.files.check_and_make_path(data_path) - # Set the download webpage - furl = 'https://services.swpc.noaa.gov/text/45-day-ap-forecast.txt' - req = requests.get(furl) + # Get the file information + raw_txt = general.get_local_or_remote_text( + 'https://services.swpc.noaa.gov/text/', mock_download_dir, + '45-day-ap-forecast.txt') # Parse text to get the date the prediction was generated - date_str = req.text.split(':Issued: ')[-1].split(' UTC')[0] + date_str = raw_txt.split(':Issued: ')[-1].split(' UTC')[0] dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') # Get to the forecast data - raw_data = req.text.split('45-DAY AP FORECAST')[-1] + raw_data = raw_txt.split('45-DAY AP FORECAST')[-1] # Grab Ap part raw_ap = raw_data.split('45-DAY F10.7 CM FLUX FORECAST')[0] From 1a084d4186c5439588a0128e42b546afeab2078a Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:05:54 -0400 Subject: [PATCH 113/171] ENH: updated LASP instruments Added the `mock_download_dir` kwarg to the LASP Instruments. --- pysatSpaceWeather/instruments/sw_ae.py | 10 +++++++--- pysatSpaceWeather/instruments/sw_al.py | 10 +++++++--- pysatSpaceWeather/instruments/sw_au.py | 10 +++++++--- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_ae.py b/pysatSpaceWeather/instruments/sw_ae.py index 2fff9a10..b4297484 100644 --- a/pysatSpaceWeather/instruments/sw_ae.py +++ b/pysatSpaceWeather/instruments/sw_ae.py @@ -139,7 +139,7 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return files -def download(date_array, tag, inst_id, data_path): +def download(date_array, tag, inst_id, data_path, mock_download_dir=None): """Download the AE index data from the appropriate repository. Parameters @@ -152,17 +152,21 @@ def download(date_array, tag, inst_id, data_path): Instrument ID, not used. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Raises ------ IOError - If the data link has an unexpected format + If the data link has an unexpected format or an unknown mock download + directory is supplied. Note ---- Called by pysat. Not intended for direct use by user. """ - lasp.prediction_downloads(name, tag, data_path) + lasp.prediction_downloads(name, tag, data_path, mock_download_dir) return diff --git a/pysatSpaceWeather/instruments/sw_al.py b/pysatSpaceWeather/instruments/sw_al.py index 7f2a2b38..1173bd5f 100644 --- a/pysatSpaceWeather/instruments/sw_al.py +++ b/pysatSpaceWeather/instruments/sw_al.py @@ -139,7 +139,7 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return files -def download(date_array, tag, inst_id, data_path): +def download(date_array, tag, inst_id, data_path, mock_download_dir=None): """Download the AL index data from the appropriate repository. Parameters @@ -152,17 +152,21 @@ def download(date_array, tag, inst_id, data_path): Instrument ID, not used. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Raises ------ IOError - If the data link has an unexpected format + If the data link has an unexpected format or if an unknown mock + download directory is supplied. Note ---- Called by pysat. Not intended for direct use by user. """ - lasp.prediction_downloads(name, tag, data_path) + lasp.prediction_downloads(name, tag, data_path, mock_download_dir) return diff --git a/pysatSpaceWeather/instruments/sw_au.py b/pysatSpaceWeather/instruments/sw_au.py index 56ce42f5..50fa351f 100644 --- a/pysatSpaceWeather/instruments/sw_au.py +++ b/pysatSpaceWeather/instruments/sw_au.py @@ -139,7 +139,7 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return files -def download(date_array, tag, inst_id, data_path): +def download(date_array, tag, inst_id, data_path, mock_download_dir=None): """Download the AU index data from the appropriate repository. Parameters @@ -152,17 +152,21 @@ def download(date_array, tag, inst_id, data_path): Instrument ID, not used. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Raises ------ IOError - If the data link has an unexpected format + If the data link has an unexpected format or if an unknown mock + download directory is supplied. Note ---- Called by pysat. Not intended for direct use by user. """ - lasp.prediction_downloads(name, tag, data_path) + lasp.prediction_downloads(name, tag, data_path, mock_download_dir) return From abb09e8424697e0c92a6a8a23d107918b1c1ba76 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:06:47 -0400 Subject: [PATCH 114/171] ENH: updated the SWPC Instruments Added the `mock_download_dir` kwarg to the SWPC Instruments. --- pysatSpaceWeather/instruments/sw_flare.py | 18 ++++++++++++------ pysatSpaceWeather/instruments/sw_polarcap.py | 14 +++++++++++--- pysatSpaceWeather/instruments/sw_sbfield.py | 14 ++++++++++---- pysatSpaceWeather/instruments/sw_ssn.py | 17 ++++++++++++----- pysatSpaceWeather/instruments/sw_stormprob.py | 17 +++++++++++++---- 5 files changed, 58 insertions(+), 22 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_flare.py b/pysatSpaceWeather/instruments/sw_flare.py index 591302b4..61ee28f7 100644 --- a/pysatSpaceWeather/instruments/sw_flare.py +++ b/pysatSpaceWeather/instruments/sw_flare.py @@ -310,7 +310,8 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return out_files -def download(date_array, tag, inst_id, data_path, update_files=False): +def download(date_array, tag, inst_id, data_path, update_files=False, + mock_download_dir=None): """Download solar flare data from the appropriate repository. Parameters @@ -325,12 +326,15 @@ def download(date_array, tag, inst_id, data_path, update_files=False): Path to data directory. update_files : bool Re-download data for files that already exist if True (default=False) + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Raises ------ IOError If a problem is encountered connecting to the gateway or retrieving - data from the repository. + data from the remote or local repository. Warnings -------- @@ -347,13 +351,15 @@ def download(date_array, tag, inst_id, data_path, update_files=False): local_files = list_files(tag, inst_id, data_path) methods.swpc.old_indices_dsd_download(name, date_array, data_path, - local_files, today) + local_files, today, + mock_download_dir) elif tag == 'daily': - methods.swpc.daily_dsd_download(name, today, data_path) + methods.swpc.daily_dsd_download(name, today, data_path, + mock_download_dir) elif tag == 'prediction': - methods.swpc.solar_geomag_predictions_download(name, date_array, - data_path) + methods.swpc.solar_geomag_predictions_download( + name, date_array, data_path, mock_download_Dir) return diff --git a/pysatSpaceWeather/instruments/sw_polarcap.py b/pysatSpaceWeather/instruments/sw_polarcap.py index e273e77b..398d0ec8 100644 --- a/pysatSpaceWeather/instruments/sw_polarcap.py +++ b/pysatSpaceWeather/instruments/sw_polarcap.py @@ -152,7 +152,7 @@ def load(fnames, tag='', inst_id=''): return data, meta -def download(date_array, tag, inst_id, data_path): +def download(date_array, tag, inst_id, data_path, mock_download_dir=None): """Download the polar cap indices from the appropriate repository. Parameters @@ -165,6 +165,14 @@ def download(date_array, tag, inst_id, data_path): Specifies the instrument identification, not used. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + IOError + If an unknown mock download directory is supplied. Note ---- @@ -177,7 +185,7 @@ def download(date_array, tag, inst_id, data_path): """ if tag == 'prediction': - methods.swpc.solar_geomag_predictions_download(name, date_array, - data_path) + methods.swpc.solar_geomag_predictions_download( + name, date_array, data_path, mock_download_dir) return diff --git a/pysatSpaceWeather/instruments/sw_sbfield.py b/pysatSpaceWeather/instruments/sw_sbfield.py index fe37bc12..d17be17a 100644 --- a/pysatSpaceWeather/instruments/sw_sbfield.py +++ b/pysatSpaceWeather/instruments/sw_sbfield.py @@ -224,7 +224,8 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return out_files -def download(date_array, tag, inst_id, data_path, update_files=False): +def download(date_array, tag, inst_id, data_path, update_files=False, + mock_download_dir=None): """Download solar magnetic field data from the appropriate repository. Parameters @@ -239,12 +240,15 @@ def download(date_array, tag, inst_id, data_path, update_files=False): Path to data directory. update_files : bool Re-download data for files that already exist if True (default=False) + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Raises ------ IOError If a problem is encountered connecting to the gateway or retrieving - data from the repository. + data from the remote or local repository. Warnings -------- @@ -257,9 +261,11 @@ def download(date_array, tag, inst_id, data_path, update_files=False): local_files = list_files(tag, inst_id, data_path) methods.swpc.old_indices_dsd_download(name, date_array, data_path, - local_files, today) + local_files, today, + mock_download_dir) elif tag == 'daily': - methods.swpc.daily_dsd_download(name, today, data_path) + methods.swpc.daily_dsd_download(name, today, data_path, + mock_download_dir) return diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py index 3ac9abdc..b8555f90 100644 --- a/pysatSpaceWeather/instruments/sw_ssn.py +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -260,7 +260,8 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return out_files -def download(date_array, tag, inst_id, data_path, update_files=False): +def download(date_array, tag, inst_id, data_path, update_files=False. + mock_download_dir=None): """Download solar magnetic field data from the appropriate repository. Parameters @@ -275,12 +276,15 @@ def download(date_array, tag, inst_id, data_path, update_files=False): Path to data directory. update_files : bool Re-download data for files that already exist if True (default=False) + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Raises ------ IOError If a problem is encountered connecting to the gateway or retrieving - data from the repository. + data from the remote or local repository. Warnings -------- @@ -293,10 +297,12 @@ def download(date_array, tag, inst_id, data_path, update_files=False): local_files = list_files(tag, inst_id, data_path) methods.swpc.old_indices_dsd_download(name, date_array, data_path, - local_files, today) + local_files, today, + mock_download_dir) elif tag == 'daily': - methods.swpc.daily_dsd_download(name, today, data_path) + methods.swpc.daily_dsd_download(name, today, data_path, + mock_download_dir) elif tag == 'now': # Set the download input options @@ -307,6 +313,7 @@ def download(date_array, tag, inst_id, data_path, update_files=False): methods.gfz.json_downloads(date_array, data_path, local_file_prefix, "%Y-%m", gfz_data_name, pds.DateOffset(months=1, seconds=-1), - update_files=update_files) + update_files=update_files, + mock_download_dir=mock_download_dir) return diff --git a/pysatSpaceWeather/instruments/sw_stormprob.py b/pysatSpaceWeather/instruments/sw_stormprob.py index 379fcfec..d91ea2d9 100644 --- a/pysatSpaceWeather/instruments/sw_stormprob.py +++ b/pysatSpaceWeather/instruments/sw_stormprob.py @@ -153,7 +153,7 @@ def load(fnames, tag='', inst_id=''): return data, meta -def download(date_array, tag, inst_id, data_path): +def download(date_array, tag, inst_id, data_path, mock_download_dir=None): """Download the storm probabilities from the appropriate repository. Parameters @@ -166,6 +166,14 @@ def download(date_array, tag, inst_id, data_path): Specifies the instrument identification, not used. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + IOError + If an unknown mock download directory is supplied. Note ---- @@ -178,9 +186,10 @@ def download(date_array, tag, inst_id, data_path): """ if tag == 'forecast': - methods.swpc.geomag_forecast_download(name, date_array, data_path) + methods.swpc.geomag_forecast_download(name, date_array, data_path, + mock_download_dir) elif tag == 'prediction': - methods.swpc.solar_geomag_predictions_download(name, date_array, - data_path) + methods.swpc.solar_geomag_predictions_download( + name, date_array, data_path, mock_download_dir) return From 6da30eabd9d7418e13617b77d97cb72ba6ee3ad3 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:07:13 -0400 Subject: [PATCH 115/171] ENH: updated MGII downloads Added the `mock_download_dir` kwarg to the LISIRD Instruments. --- pysatSpaceWeather/instruments/sw_mgii.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_mgii.py b/pysatSpaceWeather/instruments/sw_mgii.py index 58ff2949..d08a4118 100644 --- a/pysatSpaceWeather/instruments/sw_mgii.py +++ b/pysatSpaceWeather/instruments/sw_mgii.py @@ -255,7 +255,7 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return out_files -def download(date_array, tag, inst_id, data_path): +def download(date_array, tag, inst_id, data_path, mock_download_dir=None): """Download MGII core-to-wing index data from the appropriate repository. Parameters @@ -268,12 +268,15 @@ def download(date_array, tag, inst_id, data_path): Specifies the ID for the Instrument (not used). data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Raises ------ IOError If a problem is encountered connecting to the gateway or retrieving - data from the repository. + data from the remote or local repository. """ @@ -298,6 +301,6 @@ def download(date_array, tag, inst_id, data_path): # Download the desired data lisird.download(date_array, data_path, local_file_prefix, local_date_fmt, - lisird_data_name, freq) + lisird_data_name, freq, mock_download_dir) return From a10e5b1c2c91abba47e883bda3d0b6c8b932c0df Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:07:43 -0400 Subject: [PATCH 116/171] ENH: updated the GFZ Instruments Added the `mock_download_dir` kwarg to the GFZ Instruments. --- pysatSpaceWeather/instruments/sw_apo.py | 14 ++++++++++++-- pysatSpaceWeather/instruments/sw_hpo.py | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_apo.py b/pysatSpaceWeather/instruments/sw_apo.py index f7e6d753..d192768c 100644 --- a/pysatSpaceWeather/instruments/sw_apo.py +++ b/pysatSpaceWeather/instruments/sw_apo.py @@ -165,7 +165,8 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return files -def download(date_array, tag, inst_id, data_path, update_files=False): +def download(date_array, tag, inst_id, data_path, update_files=False, + mock_download_dir=None): """Download the apo index data from the appropriate repository. Parameters @@ -180,6 +181,9 @@ def download(date_array, tag, inst_id, data_path, update_files=False): Path to data directory. update_files : bool Re-download data for files that already exist if True (default=False) + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Note ---- @@ -189,6 +193,11 @@ def download(date_array, tag, inst_id, data_path, update_files=False): -------- Only able to download current recent data, not archived forecasts. + Raises + ------ + IOError + If an unknown mock download directory is supplied. + """ # Set the download input options @@ -200,6 +209,7 @@ def download(date_array, tag, inst_id, data_path, update_files=False): # Call the download routine methods.gfz.json_downloads(date_array, data_path, local_file_prefix, local_date_fmt, gfz_data_name, freq, - update_files=update_files) + update_files=update_files, + mock_download_dir=mock_download_dir) return diff --git a/pysatSpaceWeather/instruments/sw_hpo.py b/pysatSpaceWeather/instruments/sw_hpo.py index 33073a5e..44ab971a 100644 --- a/pysatSpaceWeather/instruments/sw_hpo.py +++ b/pysatSpaceWeather/instruments/sw_hpo.py @@ -164,7 +164,8 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return files -def download(date_array, tag, inst_id, data_path, update_files=False): +def download(date_array, tag, inst_id, data_path, update_files=False, + mock_download_dir=None): """Download the Hpo index data from the appropriate repository. Parameters @@ -179,6 +180,9 @@ def download(date_array, tag, inst_id, data_path, update_files=False): Path to data directory. update_files : bool Re-download data for files that already exist if True (default=False) + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Note ---- @@ -188,6 +192,11 @@ def download(date_array, tag, inst_id, data_path, update_files=False): -------- Only able to download current recent data, not archived forecasts. + Raises + ------ + IOError + If an unknown mock download directory is supplied. + """ # Set the download input options @@ -199,6 +208,7 @@ def download(date_array, tag, inst_id, data_path, update_files=False): # Call the download routine methods.gfz.json_downloads(date_array, data_path, local_file_prefix, local_date_fmt, gfz_data_name, freq, - update_files=update_files) + update_files=update_files, + mock_download_dir=mock_download_dir) return From fe35b4284a1463b15a29317c9b4d052ad983a21a Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:08:18 -0400 Subject: [PATCH 117/171] ENH: added mock downloads to mixed Instruments Added the `mock_download_dir` kwarg to the Instruments that have multiple download sources. --- pysatSpaceWeather/instruments/sw_ap.py | 25 ++++++--- pysatSpaceWeather/instruments/sw_dst.py | 66 ++++++++++++++++-------- pysatSpaceWeather/instruments/sw_f107.py | 29 +++++++---- pysatSpaceWeather/instruments/sw_kp.py | 23 ++++++--- 4 files changed, 98 insertions(+), 45 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_ap.py b/pysatSpaceWeather/instruments/sw_ap.py index caa456c5..ee061931 100644 --- a/pysatSpaceWeather/instruments/sw_ap.py +++ b/pysatSpaceWeather/instruments/sw_ap.py @@ -214,7 +214,7 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return files -def download(date_array, tag, inst_id, data_path): +def download(date_array, tag, inst_id, data_path, mock_download_dir=None): """Download the Ap index data from the appropriate repository. Parameters @@ -227,6 +227,9 @@ def download(date_array, tag, inst_id, data_path): Specifies the instrument identification, not used. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Note ---- @@ -236,19 +239,27 @@ def download(date_array, tag, inst_id, data_path): -------- Only able to download current recent data, not archived forecasts. + Raises + ------ + IOError + If an unknown mock download directory is supplied. + """ if tag in ['def', 'now']: methods.gfz.kp_ap_cp_download(platform, name, date_array, tag, inst_id, - data_path) + data_path, mock_download_dir) elif tag == 'recent': - methods.swpc.kp_ap_recent_download(name, date_array, data_path) + methods.swpc.kp_ap_recent_download(name, date_array, data_path, + mock_download_dir) elif tag == 'forecast': - methods.swpc.geomag_forecast_download(name, date_array, data_path) + methods.swpc.geomag_forecast_download(name, date_array, data_path, + mock_download_dir) elif tag == 'prediction': - methods.swpc.solar_geomag_predictions_download(name, date_array, - data_path) + methods.swpc.solar_geomag_predictions_download( + name, date_array, data_path, mock_download_dir) else: - methods.swpc.recent_ap_f107_download(name, date_array, data_path) + methods.swpc.recent_ap_f107_download(name, date_array, data_path, + mock_download_dir) return diff --git a/pysatSpaceWeather/instruments/sw_dst.py b/pysatSpaceWeather/instruments/sw_dst.py index 6204c443..a45b5ce5 100644 --- a/pysatSpaceWeather/instruments/sw_dst.py +++ b/pysatSpaceWeather/instruments/sw_dst.py @@ -31,6 +31,7 @@ import numpy as np import os import pandas as pds +import shutil import pysat @@ -239,7 +240,7 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return files -def download(date_array, tag, inst_id, data_path): +def download(date_array, tag, inst_id, data_path, mock_download_dir=None): """Download the Dst index data from the appropriate repository. Parameters @@ -252,19 +253,33 @@ def download(date_array, tag, inst_id, data_path): Instrument ID, not used. data_path : str Path to data directory. + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + IOError + If an unknown mock download directory is supplied. Note ---- Called by pysat. Not intended for direct use by user. """ + # If a mock download directory was supplied, test to see it exists + if mock_download_dir is not None: + if not os.path.isdir(mock_download_dir): + raise IOError('file location is not a directory: {:}'.format( + mock_download_dir)) + if tag == 'noaa': - # Connect to host, default port - ftp = ftplib.FTP('ftp.ngdc.noaa.gov') + if mock_download_dir is None: + # Connect to host, default port + ftp = ftplib.FTP('ftp.ngdc.noaa.gov') - # User anonymous, passwd anonymous@ - ftp.login() - ftp.cwd('/STP/GEOMAGNETIC_DATA/INDICES/DST') + # User anonymous, passwd anonymous@ + ftp.login() + ftp.cwd('/STP/GEOMAGNETIC_DATA/INDICES/DST') # Data stored by year. Only download for unique set of input years. years = np.array([date.year for date in date_array]) @@ -273,22 +288,29 @@ def download(date_array, tag, inst_id, data_path): fname_root = 'dst{year:04d}.txt' fname = fname_root.format(year=year) saved_fname = os.path.join(data_path, fname) - try: - pysat.logger.info('Downloading file for {year:04d}'.format( - year=year)) - with open(saved_fname, 'wb') as fp: - ftp.retrbinary('RETR ' + fname, fp.write) - except ftplib.error_perm as exception: - if str(exception.args[0]).split(" ", 1)[0] != '550': - raise - else: - # File not present - os.remove(saved_fname) - pysat.logger.info('File not available for {:04d}'.format( - year)) - - ftp.close() + if mock_download_dir is None: + try: + pysat.logger.info('Downloading file for {year:04d}'.format( + year=year)) + with open(saved_fname, 'wb') as fp: + ftp.retrbinary('RETR ' + fname, fp.write) + except ftplib.error_perm as exception: + if str(exception.args[0]).split(" ", 1)[0] != '550': + raise exception + else: + # File not present + os.remove(saved_fname) + pysat.logger.info( + 'File not available for {:04d}'.format(year)) + else: + # Get the local file, if it exists + down_fname = os.path.join(mock_download_dir, fname) + if os.path.isfile(down_fname): + shutil.copyfile(down_fname, saved_fname) + + if mock_download_dir is None: + ftp.close() elif tag == 'lasp': - lasp.prediction_downloads(name, tag, data_path) + lasp.prediction_downloads(name, tag, data_path, mock_download_dir) return diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index 9b26af4a..3a262241 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -358,7 +358,8 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return out_files -def download(date_array, tag, inst_id, data_path, update_files=False): +def download(date_array, tag, inst_id, data_path, update_files=False, + mock_download_dir=None): """Download F107 index data from the appropriate repository. Parameters @@ -373,12 +374,15 @@ def download(date_array, tag, inst_id, data_path, update_files=False): Path to data directory. update_files : bool Re-download data for files that already exist if True (default=False) + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) Raises ------ IOError If a problem is encountered connecting to the gateway or retrieving - data from the repository. + data from the remote or local repository. Warnings -------- @@ -402,7 +406,8 @@ def download(date_array, tag, inst_id, data_path, update_files=False): methods.lisird.download(date_array, data_path, 'f107_monthly_', '%Y-%m', 'noaa_radio_flux', freq, update_files, {'f107_adjusted': -99999.0, - 'f107_observed': -99999.0}) + 'f107_observed': -99999.0}, + mock_download_dir=mock_download_dir) elif tag == 'prelim': # Get the local files, to ensure that the version 1 files are @@ -413,8 +418,9 @@ def download(date_array, tag, inst_id, data_path, update_files=False): for i, lfile in enumerate(local_files): local_files[i] = lfile[:-11] - methods.swpc.old_indices_dsd_download(name, date_array, data_path, - local_files, today) + methods.swpc.old_indices_dsd_download( + name, date_array, data_path, local_files, today, + mock_download_dir=mock_download_dir) elif tag == 'now': # Set the download input options gfz_data_name = 'F{:s}'.format(inst_id) @@ -424,16 +430,19 @@ def download(date_array, tag, inst_id, data_path, update_files=False): methods.gfz.json_downloads(date_array, data_path, local_file_prefix, "%Y-%m", gfz_data_name, pds.DateOffset(months=1, seconds=-1), - update_files=update_files) + update_files=update_files, + mock_download_dir=mock_download_dir) elif tag == 'daily': - methods.swpc.daily_dsd_download(name, today, data_path) + methods.swpc.daily_dsd_download(name, today, data_path, + mock_download_dir=mock_download_dir) elif tag == 'forecast': - methods.swpc.solar_geomag_predictions_download(name, date_array, - data_path) + methods.swpc.solar_geomag_predictions_download( + name, date_array, data_path, mock_download_dir=mock_download_dir) elif tag == '45day': - methods.swpc.recent_ap_f107_download(name, date_array, data_path) + methods.swpc.recent_ap_f107_download( + name, date_array, data_path, mock_download_dir=mock_download_dir) return diff --git a/pysatSpaceWeather/instruments/sw_kp.py b/pysatSpaceWeather/instruments/sw_kp.py index 141d7f3e..e060b3c9 100644 --- a/pysatSpaceWeather/instruments/sw_kp.py +++ b/pysatSpaceWeather/instruments/sw_kp.py @@ -366,7 +366,7 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return files -def download(date_array, tag, inst_id, data_path): +def download(date_array, tag, inst_id, data_path, mock_download_dir=None): """Download the Kp index data from the appropriate repository. Parameters @@ -379,6 +379,15 @@ def download(date_array, tag, inst_id, data_path): Specifies the instrument identification, not used. data_path : str Path to data directory. + mock_download_dir : str or NoneType + If not None, will process any files with the correct name and date + as if they were downloaded (default=None) + + Raises + ------ + IOError + If an unknown mock download directory is supplied or there is a problem + downloading the data. Note ---- @@ -404,13 +413,15 @@ def download(date_array, tag, inst_id, data_path): DeprecationWarning, stacklevel=2) elif tag in ['def', 'now']: methods.gfz.kp_ap_cp_download(platform, name, date_array, tag, inst_id, - data_path) + data_path, mock_download_dir) elif tag == 'forecast': - methods.swpc.geomag_forecast_download(name, date_array, data_path) + methods.swpc.geomag_forecast_download(name, date_array, data_path, + mock_download_dir) elif tag == 'recent': - methods.swpc.kp_ap_recent_download(name, date_array, data_path) + methods.swpc.kp_ap_recent_download(name, date_array, data_path, + mock_download_dir) elif tag == 'prediction': - methods.swpc.solar_geomag_predictions_download(name, date_array, - data_path) + methods.swpc.solar_geomag_predictions_download( + name, date_array, data_path, mock_download_dir) return From 318e7badcc148770126e928c9891de07269bf05f Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Tue, 31 Oct 2023 18:08:30 -0400 Subject: [PATCH 118/171] DOC: updated changelog Added a summary of the changes to the changlog. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5abcf780..2428eebd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). * Created a general download routine for the GFZ and LASP data * Added new examples to the documentation * Added new test attributes for clean messages to the ACE instruments + * Added the ability to 'download' files from a local directory * Maintenance * Updated package documentation, yamls, and other supporting files * Updated the LISIRD download routine to reflect new behaviour From 3663662a5631e0a492678b3034ef4c782db7801d Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 09:51:58 -0400 Subject: [PATCH 119/171] BUG: fixed start time Fixed the start time for combining F10.7, ensuring the daily value isn't confused by sub-daily time increments. --- pysatSpaceWeather/instruments/methods/f107.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatSpaceWeather/instruments/methods/f107.py b/pysatSpaceWeather/instruments/methods/f107.py index f6f8f3c9..775cef7d 100644 --- a/pysatSpaceWeather/instruments/methods/f107.py +++ b/pysatSpaceWeather/instruments/methods/f107.py @@ -156,7 +156,7 @@ def combine_f107(standard_inst, forecast_inst, start=None, stop=None): f107_values = list() # Cycle through the desired time range - itime = start + itime = dt.datetime(start.year, start.month, start.day) while itime < stop and inst_flag is not None: # Load and save the standard data for as many times as possible From 41d5d34eb1335b0a7d8e730a2a2ea4a04024a40a Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 09:52:35 -0400 Subject: [PATCH 120/171] ENH: added minimum periods kwarg Added a minimum period kwarg to `calc_daily_Ap` for more flexibility. --- pysatSpaceWeather/instruments/methods/kp_ap.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/kp_ap.py b/pysatSpaceWeather/instruments/methods/kp_ap.py index e2ba8228..b6498bbf 100644 --- a/pysatSpaceWeather/instruments/methods/kp_ap.py +++ b/pysatSpaceWeather/instruments/methods/kp_ap.py @@ -238,7 +238,7 @@ def ap(kk): def calc_daily_Ap(ap_inst, ap_name='3hr_ap', daily_name='Ap', - running_name=None): + running_name=None, min_periods=8): """Calculate the daily Ap index from the 3hr ap index. Parameters @@ -252,6 +252,9 @@ def calc_daily_Ap(ap_inst, ap_name='3hr_ap', daily_name='Ap', running_name : str or NoneType Column name for daily running average of ap, not output if None (default=None) + min_periods : int + Mininmum number of observations needed to output an average value + (default=8) Raises ------ @@ -276,7 +279,8 @@ def calc_daily_Ap(ap_inst, ap_name='3hr_ap', daily_name='Ap', raise ValueError("daily Ap column name already exists: " + daily_name) # Calculate the daily mean value - ap_mean = ap_inst[ap_name].rolling(window='1D', min_periods=8).mean() + ap_mean = ap_inst[ap_name].rolling(window='1D', + min_periods=min_periods).mean() if running_name is not None: ap_inst[running_name] = ap_mean @@ -430,9 +434,9 @@ def convert_ap_to_kp(ap_data, fill_val=-1, ap_name='ap', kp_name='Kp'): # Set the metadata meta = pysat.Meta() - meta[kp_name] = initialize_kp_metadata(meta, 'Kp', fill_val) - meta[meta.labels.desc] = 'Kp converted from {:}'.format(ap_name) - meta[meta.labels.notes] = ''.join( + initialize_kp_metadata(meta, 'Kp', fill_val) + meta['Kp', meta.labels.desc] = 'Kp converted from {:}'.format(ap_name) + meta['Kp', meta.labels.notes] = ''.join( ['Kp converted from ', ap_name, 'as described at: ', 'https://www.ngdc.noaa.gov/stp/GEOMAG/kp_ap.html']) From 3f7b13cb3127e91666dab2ee2102f7189b919cf4 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 10:14:00 -0400 Subject: [PATCH 121/171] BUG: fixed typos Fixed typos, removed unused modules, and removed extra whitespace. --- pysatSpaceWeather/instruments/methods/ace.py | 5 +++-- pysatSpaceWeather/instruments/methods/general.py | 2 ++ pysatSpaceWeather/instruments/methods/gfz.py | 1 - pysatSpaceWeather/instruments/methods/swpc.py | 1 - pysatSpaceWeather/instruments/sw_flare.py | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index 47a2e2c5..b01048c8 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -10,7 +10,6 @@ import numpy as np import os import pandas as pds -import requests import pysat @@ -265,7 +264,9 @@ def download(date_array, name, tag='', inst_id='', data_path='', now=None, else: if len(split_line) > 0: raise IOError(''.join(['unexpected line encoutered in ', - furl, ":\n", raw_line])) + url[tag], "/", + dl_date.strftime(file_fmt), + ":\n", raw_line])) # Put data into nicer DataFrame data = pds.DataFrame(data_dict, index=times) diff --git a/pysatSpaceWeather/instruments/methods/general.py b/pysatSpaceWeather/instruments/methods/general.py index 9e6394d5..8774792e 100644 --- a/pysatSpaceWeather/instruments/methods/general.py +++ b/pysatSpaceWeather/instruments/methods/general.py @@ -3,6 +3,8 @@ import importlib import numpy as np +import os +import requests import pysat diff --git a/pysatSpaceWeather/instruments/methods/gfz.py b/pysatSpaceWeather/instruments/methods/gfz.py index 2c6be82e..cbbd4083 100644 --- a/pysatSpaceWeather/instruments/methods/gfz.py +++ b/pysatSpaceWeather/instruments/methods/gfz.py @@ -132,7 +132,6 @@ def json_downloads(date_array, data_path, local_file_prefix, local_date_fmt, raise IOError(''.join(['Gateway timeout when requesting ', 'file using command: ', query_url])) - raw_txt = req.text if req.ok else None else: # Get the text from the downloaded file diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index a2147c87..f1d67e48 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -11,7 +11,6 @@ import numpy as np import os import pandas as pds -import requests import sys import pysat diff --git a/pysatSpaceWeather/instruments/sw_flare.py b/pysatSpaceWeather/instruments/sw_flare.py index 61ee28f7..38ebe72d 100644 --- a/pysatSpaceWeather/instruments/sw_flare.py +++ b/pysatSpaceWeather/instruments/sw_flare.py @@ -360,6 +360,6 @@ def download(date_array, tag, inst_id, data_path, update_files=False, elif tag == 'prediction': methods.swpc.solar_geomag_predictions_download( - name, date_array, data_path, mock_download_Dir) + name, date_array, data_path, mock_download_dir) return From 21e5085ba33b8cad3cbc64ff77185cafeb8b5eab Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 10:14:19 -0400 Subject: [PATCH 122/171] BUG: fixed typo Fixed typo (not a comma). --- pysatSpaceWeather/instruments/sw_ssn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py index b8555f90..81079eb9 100644 --- a/pysatSpaceWeather/instruments/sw_ssn.py +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -260,7 +260,7 @@ def list_files(tag='', inst_id='', data_path='', format_str=None): return out_files -def download(date_array, tag, inst_id, data_path, update_files=False. +def download(date_array, tag, inst_id, data_path, update_files=False, mock_download_dir=None): """Download solar magnetic field data from the appropriate repository. From 0d1c8d1d21df3a2555418fb73f56519e26aff52f Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 10:14:36 -0400 Subject: [PATCH 123/171] TST: updated log messages Updated the logging messages in the unit tests. --- pysatSpaceWeather/tests/test_instruments.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index b1e98a23..d4f2c053 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -203,7 +203,7 @@ def test_historic_download_past_limit(self, caplog): # Test the warning captured = caplog.text - assert captured.find('date may be out of range for the database.') >= 0 + assert captured.find('date may be out of range for the database') >= 0 # Test the file was not downloaded assert inst.today() not in inst.files.files.index @@ -276,7 +276,7 @@ def test_historic_ace_no_data(self, caplog): # Test the warning captured = caplog.text assert captured.find( - 'not found on server') >= 0, "Unexpected text: {:}".format(captured) + 'not found:') >= 0, "Unexpected text: {:}".format(captured) # Test the file was not downloaded assert past_time not in inst.files.files.index From 4f0cb02b0afcbef57cd0dec4c5d116be5e724413 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 11:31:36 -0400 Subject: [PATCH 124/171] STY: unified logging message Unified the logging messages for files missing from mock downloads. --- pysatSpaceWeather/instruments/methods/ace.py | 82 +-- .../instruments/methods/general.py | 12 +- pysatSpaceWeather/instruments/methods/gfz.py | 5 +- pysatSpaceWeather/instruments/methods/lasp.py | 4 +- .../instruments/methods/lisird.py | 6 +- pysatSpaceWeather/instruments/methods/swpc.py | 608 ++++++++++-------- pysatSpaceWeather/instruments/sw_dst.py | 5 + pysatSpaceWeather/instruments/sw_mgii.py | 2 +- 8 files changed, 391 insertions(+), 333 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index b01048c8..89f7dd5c 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -237,44 +237,52 @@ def download(date_array, name, tag='', inst_id='', data_path='', now=None, raw_data = general.get_local_or_remote_text(url[tag], mock_download_dir, dl_date.strftime(file_fmt)) - # Split the file at the last header line and the new line markers - raw_data = raw_data.split('#-----------------')[-1] - raw_data = raw_data.split('\n')[1:] # Remove the last header line - - # Test to see if the file was found on the server - if ' '.join(raw_data).find('not found on this server') > 0: - logger.warning('File {:} not found: {:}'.format( - dl_date.strftime(file_fmt), url[tag])) + if raw_data is None: + pysat.logger.info("".join(["Data not downloaded for ", + dl_date.strftime(file_fmt), ", date may", + " be out of range for the database or ", + "data may have been saved to an ", + "unexpected filename. Check URL: ", + url[tag], ", or directory: ", + mock_download_dir])) else: - # Parse the file, treating the 4 time columns separately - data_dict = {col: list() for col in data_cols[name]} - times = list() - nsplit = len(data_cols[name]) + 4 - for raw_line in raw_data: - split_line = raw_line.split() - if len(split_line) == nsplit: - times.append(dt.datetime.strptime(' '.join(split_line[:4]), - '%Y %m %d %H%M')) - for i, col in enumerate(data_cols[name]): - # Convert to a number and save - # - # Output is saved as a float, so don't bother to - # differentiate between int and float - data_dict[col].append(float(split_line[4 + i])) - else: - if len(split_line) > 0: - raise IOError(''.join(['unexpected line encoutered in ', - url[tag], "/", - dl_date.strftime(file_fmt), - ":\n", raw_line])) - - # Put data into nicer DataFrame - data = pds.DataFrame(data_dict, index=times) - - # Write out as a file - data_file = '{:s}.txt'.format( - '_'.join(["ace", name, tag, dl_date.strftime('%Y-%m-%d')])) - data.to_csv(os.path.join(data_path, data_file), header=True) + # Split the file at the last header line and the new line markers + raw_data = raw_data.split('#-----------------')[-1] + raw_data = raw_data.split('\n')[1:] # Remove the last header line + + # Test to see if the file was found on the server + if ' '.join(raw_data).find('not found on this server') > 0: + logger.warning('File {:} not found: {:}'.format( + dl_date.strftime(file_fmt), url[tag])) + else: + # Parse the file, treating the 4 time columns separately + data_dict = {col: list() for col in data_cols[name]} + times = list() + nsplit = len(data_cols[name]) + 4 + for raw_line in raw_data: + split_line = raw_line.split() + if len(split_line) == nsplit: + times.append(dt.datetime.strptime( + ' '.join(split_line[:4]), '%Y %m %d %H%M')) + for i, col in enumerate(data_cols[name]): + # Convert to a number and save + # + # Output is saved as a float, so don't bother to + # differentiate between int and float + data_dict[col].append(float(split_line[4 + i])) + else: + if len(split_line) > 0: + raise IOError(''.join([ + 'unexpected line encoutered in ', url[tag], "/", + dl_date.strftime(file_fmt), ":\n", raw_line])) + + # Put data into nicer DataFrame + data = pds.DataFrame(data_dict, index=times) + + # Write out as a file + data_file = '{:s}.txt'.format( + '_'.join(["ace", name, tag, dl_date.strftime('%Y-%m-%d')])) + data.to_csv(os.path.join(data_path, data_file), header=True) return diff --git a/pysatSpaceWeather/instruments/methods/general.py b/pysatSpaceWeather/instruments/methods/general.py index 8774792e..2f1b5f18 100644 --- a/pysatSpaceWeather/instruments/methods/general.py +++ b/pysatSpaceWeather/instruments/methods/general.py @@ -84,21 +84,21 @@ def get_local_or_remote_text(url, mock_download_dir, filename): Returns ------- - raw_txt : str - All the text from the desired file. + raw_txt : str or NoneType + All the text from the desired file or None if the file could not be + retrieved Raises ------ IOError - If an unknown mock download directory is supplied or the file is - missing. + If an unknown mock download directory is supplied. """ if mock_download_dir is None: # Set the download webpage furl = ''.join([url, filename]) req = requests.get(furl) - raw_txt = req.text + raw_txt = req.text if req.ok else None else: if not os.path.isdir(mock_download_dir): raise IOError('file location is not a directory: {:}'.format( @@ -110,6 +110,6 @@ def get_local_or_remote_text(url, mock_download_dir, filename): with open(furl, 'r') as fpin: raw_txt = fpin.read() else: - raise IOError('desired file is missing: {:}.'.format(furl)) + raw_txt = None return raw_txt diff --git a/pysatSpaceWeather/instruments/methods/gfz.py b/pysatSpaceWeather/instruments/methods/gfz.py index cbbd4083..b1376919 100644 --- a/pysatSpaceWeather/instruments/methods/gfz.py +++ b/pysatSpaceWeather/instruments/methods/gfz.py @@ -324,8 +324,9 @@ def kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path, pysat.logger.info("".join(["Unable to download data for ", dl_date.strftime("%d %b %Y"), ", date may be out of range for ", - "the database or missing from the", - " local directory: ", furl])) + "the database or data may have been", + " saved to an unexpected filename: ", + furl])) return diff --git a/pysatSpaceWeather/instruments/methods/lasp.py b/pysatSpaceWeather/instruments/methods/lasp.py index 3f0f55fd..bf0a6263 100644 --- a/pysatSpaceWeather/instruments/methods/lasp.py +++ b/pysatSpaceWeather/instruments/methods/lasp.py @@ -65,7 +65,9 @@ def prediction_downloads(name, tag, data_path, mock_download_dir=None): raw_txt = fpin.read() else: pysat.logger.warning(''.join(['LASP last 96 hour Dst file not ', - 'found in local directory: ', url])) + 'found in local directory: ', url, + ", data may have been saved to an ", + "unexpected filename"])) raw_txt = None if raw_txt is not None: diff --git a/pysatSpaceWeather/instruments/methods/lisird.py b/pysatSpaceWeather/instruments/methods/lisird.py index ab772024..88264a5c 100644 --- a/pysatSpaceWeather/instruments/methods/lisird.py +++ b/pysatSpaceWeather/instruments/methods/lisird.py @@ -206,9 +206,9 @@ def download(date_array, data_path, local_file_prefix, local_date_fmt, pysat.logger.info("".join(["Data not downloaded for ", dl_date.strftime("%d %b %Y"), ", date may be out of range ", - "for the database or the local", - " repository file may be ", - "missing: ", url])) + "for the database or data may ", + "have been saved to an ", + "unexpected filename: ", url])) else: raise IOError(''.join(['Returned unexpectedly formatted ', 'data using command: ', url])) diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index f1d67e48..60773ff0 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -63,22 +63,28 @@ def daily_dsd_download(name, today, data_path, mock_download_dir=None): 'https://services.swpc.noaa.gov/text/', mock_download_dir, 'daily-solar-indices.txt') - # Get the file paths and output names - file_paths = {data_name: data_path if name == data_name else - general.get_instrument_data_path('sw_{:s}'.format(data_name), - tag='daily') - for data_name in ['f107', 'flare', 'ssn', 'sbfield']} - outfiles = { - data_name: os.path.join(file_paths[data_name], '_'.join([ - data_name, 'daily', '{:s}.txt'.format(today.strftime('%Y-%m-%d'))])) - for data_name in file_paths.keys()} - - # Check that the directories exist - for data_path in file_paths.values(): - pysat.utils.files.check_and_make_path(data_path) - - # Save the output - rewrite_daily_solar_data_file(today.year, outfiles, raw_txt) + if raw_txt is None: + pysat.logger.info("".join(["Data not downloaded for ", + "daily-solar-indices.txt, data may have ", + "been saved to an unexpected filename."])) + else: + # Get the file paths and output names + file_paths = {data_name: data_path if name == data_name else + general.get_instrument_data_path( + 'sw_{:s}'.format(data_name), tag='daily') + for data_name in ['f107', 'flare', 'ssn', 'sbfield']} + outfiles = { + data_name: os.path.join(file_paths[data_name], '_'.join([ + data_name, 'daily', '{:s}.txt'.format( + today.strftime('%Y-%m-%d'))])) + for data_name in file_paths.keys()} + + # Check that the directories exist + for data_path in file_paths.values(): + pysat.utils.files.check_and_make_path(data_path) + + # Save the output + rewrite_daily_solar_data_file(today.year, outfiles, raw_txt) return @@ -224,7 +230,15 @@ def old_indices_dsd_download(name, date_array, data_path, local_files, today, # Set the saved filename saved_fname = os.path.join(mock_download_dir, local_fname) downloaded = True - rewritten = True + + if os.path.isfile(saved_fname): + rewritten = True + else: + pysat.logger.info("".join([saved_fname, "is missing, ", + "data may have been saved ", + "to an unexpected ", + "filename."])) + rewritten = False # If the first file worked, don't try again if downloaded: @@ -412,120 +426,131 @@ def solar_geomag_predictions_download(name, date_array, data_path, 'https://services.swpc.noaa.gov/text/', mock_download_dir, '3-day-solar-geomag-predictions.txt') - # Parse text to get the date the prediction was generated - date_str = raw_txt.split(':Issued: ')[-1].split(' UTC')[0] - dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') - - # Parse the data to get the prediction dates - date_strs = raw_txt.split(':Prediction_dates:')[-1].split('\n')[0] - pred_times = [dt.datetime.strptime(' '.join(date_str.split()), '%Y %b %d') - for date_str in date_strs.split(' ') if len(date_str) > 0] - - # Separate out the data by chunks - ap_raw = raw_txt.split(':Geomagnetic_A_indices:')[-1] - kp_raw = raw_txt.split(':Pred_Mid_k:')[-1] - storm_raw = raw_txt.split(':Prob_Mid:')[-1] - pc_raw = raw_txt.split(':Polar_cap:')[-1] - f107_raw = raw_txt.split(':10cm_flux:')[-1] - flare_raw = raw_txt.split(':Whole_Disk_Flare_Prob:')[-1] - - # Initalize the data for each data type - data_vals = {data_name: dict() for data_name in file_paths.keys()} - data_times = {data_name: pred_times for data_name in file_paths.keys()} - - # Process the ap data - for line in ap_raw.split('\n'): - if line.find(":") == 0: - break - elif line.find("A_") == 0: - split_line = line.split() - if split_line[0] == "A_Planetary": - dkey = "daily_Ap" - else: - dkey = split_line[0] - - data_vals['ap'][dkey] = [int(val) for val in split_line[1:]] - - # Process the Kp data - hr_strs = ['00-03UT', '03-06UT', '06-09UT', '09-12UT', '12-15UT', '15-18UT', - '18-21UT', '21-00UT'] - data_times['kp'] = pds.date_range(pred_times[0], periods=24, freq='3H') - - for line in kp_raw.split('\n'): - if line.find("Prob_Mid") >= 0: - break - elif line.find("UT") > 0: - split_line = line.split() - reg, hr = split_line[0].split('/') - dkey = '{:s}_lat_Kp'.format(reg) - - # Initalize the Kp data for this region - if dkey not in data_vals['kp'].keys(): - data_vals['kp'][dkey] = np.full(shape=(24,), fill_value=np.nan) - - # Save the Kp data into the correct day and hour index - hr_index = hr_strs.index(hr) - data_vals['kp'][dkey][hr_index] = float(split_line[1]) - data_vals['kp'][dkey][hr_index + 8] = float(split_line[2]) - data_vals['kp'][dkey][hr_index + 16] = float(split_line[3]) - - # Process the storm probabilities - for line in storm_raw.split('\n'): - if line.find("Polar_cap") >= 0: - break - elif len(line) > 0: - split_line = line.split() - if split_line[0].find('/') > 0: - dkey = split_line[0].replace('/', '-Lat_') - data_vals['stormprob'][dkey] = [ - int(val) for val in split_line[1:]] - - # Process the polar cap prediction - data_vals['polarcap']['absorption_forecast'] = [ - str_val for str_val in pc_raw.split('\n')[1].split()] - data_times['polarcap'] = [ - ptimes for i, ptimes in enumerate(pred_times) - if i < len(data_vals['polarcap']['absorption_forecast'])] - - # Process the F10.7 data - data_vals['f107']['f107'] = [ - int(val) for val in f107_raw.split('\n')[1].split()] - - # Process the flare data - dkey_root = 'Whole_Disk_Flare_Prob' - for line in flare_raw.split('\n'): - if len(line) > 0 and line.find("#") < 0: + if raw_txt is None: + pysat.logger.info("".join(["Data not downloaded for ", + "3-day-solar-geomag-predictions.txt, data ", + "may have been saved to an unexpected ", + "filename."])) + else: + # Parse text to get the date the prediction was generated + date_str = raw_txt.split(':Issued: ')[-1].split(' UTC')[0] + dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') + + # Parse the data to get the prediction dates + date_strs = raw_txt.split(':Prediction_dates:')[-1].split('\n')[0] + pred_times = [ + dt.datetime.strptime(' '.join(date_str.split()), '%Y %b %d') + for date_str in date_strs.split(' ') if len(date_str) > 0] + + # Separate out the data by chunks + ap_raw = raw_txt.split(':Geomagnetic_A_indices:')[-1] + kp_raw = raw_txt.split(':Pred_Mid_k:')[-1] + storm_raw = raw_txt.split(':Prob_Mid:')[-1] + pc_raw = raw_txt.split(':Polar_cap:')[-1] + f107_raw = raw_txt.split(':10cm_flux:')[-1] + flare_raw = raw_txt.split(':Whole_Disk_Flare_Prob:')[-1] + + # Initalize the data for each data type + data_vals = {data_name: dict() for data_name in file_paths.keys()} + data_times = {data_name: pred_times for data_name in file_paths.keys()} + + # Process the ap data + for line in ap_raw.split('\n'): if line.find(":") == 0: - dkey_root = line.split(":")[1] - else: + break + elif line.find("A_") == 0: split_line = line.split() + if split_line[0] == "A_Planetary": + dkey = "daily_Ap" + else: + dkey = split_line[0] + + data_vals['ap'][dkey] = [int(val) for val in split_line[1:]] + + # Process the Kp data + hr_strs = ['00-03UT', '03-06UT', '06-09UT', '09-12UT', '12-15UT', + '15-18UT', '18-21UT', '21-00UT'] + data_times['kp'] = pds.date_range(pred_times[0], periods=24, freq='3H') - if len(split_line) == 4: - dkey = "_".join([dkey_root, split_line[0]]) - data_vals['flare'][dkey] = [ + for line in kp_raw.split('\n'): + if line.find("Prob_Mid") >= 0: + break + elif line.find("UT") > 0: + split_line = line.split() + reg, hr = split_line[0].split('/') + dkey = '{:s}_lat_Kp'.format(reg) + + # Initalize the Kp data for this region + if dkey not in data_vals['kp'].keys(): + data_vals['kp'][dkey] = np.full(shape=(24,), + fill_value=np.nan) + + # Save the Kp data into the correct day and hour index + hr_index = hr_strs.index(hr) + data_vals['kp'][dkey][hr_index] = float(split_line[1]) + data_vals['kp'][dkey][hr_index + 8] = float(split_line[2]) + data_vals['kp'][dkey][hr_index + 16] = float(split_line[3]) + + # Process the storm probabilities + for line in storm_raw.split('\n'): + if line.find("Polar_cap") >= 0: + break + elif len(line) > 0: + split_line = line.split() + if split_line[0].find('/') > 0: + dkey = split_line[0].replace('/', '-Lat_') + data_vals['stormprob'][dkey] = [ int(val) for val in split_line[1:]] + + # Process the polar cap prediction + data_vals['polarcap']['absorption_forecast'] = [ + str_val for str_val in pc_raw.split('\n')[1].split()] + data_times['polarcap'] = [ + ptimes for i, ptimes in enumerate(pred_times) + if i < len(data_vals['polarcap']['absorption_forecast'])] + + # Process the F10.7 data + data_vals['f107']['f107'] = [ + int(val) for val in f107_raw.split('\n')[1].split()] + + # Process the flare data + dkey_root = 'Whole_Disk_Flare_Prob' + for line in flare_raw.split('\n'): + if len(line) > 0 and line.find("#") < 0: + if line.find(":") == 0: + dkey_root = line.split(":")[1] else: - data_vals['flare']['{:s}_Region'.format(dkey_root)] = [ - int(split_line[0]), -1, -1] - data_vals['flare']['{:s}_Class_C'.format(dkey_root)] = [ - int(split_line[1]), -1, -1] - data_vals['flare']['{:s}_Class_M'.format(dkey_root)] = [ - int(split_line[2]), -1, -1] - data_vals['flare']['{:s}_Class_X'.format(dkey_root)] = [ - int(split_line[3]), -1, -1] - data_vals['flare']['{:s}_Class_P'.format(dkey_root)] = [ - int(split_line[4]), -1, -1] - - # Save the data by type into files - for data_name in data_vals.keys(): - # Put the data values into a nicer DataFrame - data = pds.DataFrame(data_vals[data_name], index=data_times[data_name]) - - # Save the data as a CSV file - data_tag = 'forecast' if data_name == 'f107' else 'prediction' - data_file = '_'.join([data_name, data_tag, - '{:s}.txt'.format(dl_date.strftime('%Y-%m-%d'))]) - data.to_csv(os.path.join(file_paths[data_name], data_file), header=True) + split_line = line.split() + + if len(split_line) == 4: + dkey = "_".join([dkey_root, split_line[0]]) + data_vals['flare'][dkey] = [ + int(val) for val in split_line[1:]] + else: + data_vals['flare']['{:s}_Region'.format(dkey_root)] = [ + int(split_line[0]), -1, -1] + data_vals['flare']['{:s}_Class_C'.format(dkey_root)] = [ + int(split_line[1]), -1, -1] + data_vals['flare']['{:s}_Class_M'.format(dkey_root)] = [ + int(split_line[2]), -1, -1] + data_vals['flare']['{:s}_Class_X'.format(dkey_root)] = [ + int(split_line[3]), -1, -1] + data_vals['flare']['{:s}_Class_P'.format(dkey_root)] = [ + int(split_line[4]), -1, -1] + + # Save the data by type into files + for data_name in data_vals.keys(): + # Put the data values into a nicer DataFrame + data = pds.DataFrame(data_vals[data_name], + index=data_times[data_name]) + + # Save the data as a CSV file + data_tag = 'forecast' if data_name == 'f107' else 'prediction' + data_file = '_'.join([data_name, data_tag, + '{:s}.txt'.format(dl_date.strftime( + '%Y-%m-%d'))]) + data.to_csv(os.path.join(file_paths[data_name], data_file), + header=True) return @@ -575,79 +600,85 @@ def geomag_forecast_download(name, date_array, data_path, 'https://services.swpc.noaa.gov/text/', mock_download_dir, '3-day-geomag-forecast.txt') - # Parse text to get the date the prediction was generated - date_str = raw_txt.split(':Issued: ')[-1].split(' UTC')[0] - dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') - - # Separate out the data by chunks - ap_raw = raw_txt.split('NOAA Ap Index Forecast')[-1] - kp_raw = raw_txt.split('NOAA Kp index forecast ')[-1] - storm_raw = raw_txt.split('NOAA Geomagnetic Activity Probabilities')[-1] - - # Get dates of the forecasts - date_str = kp_raw[0:6] + ' ' + str(dl_date.year) - forecast_date = dt.datetime.strptime(date_str, '%d %b %Y') - - # Strings we will use to parse the downloaded text for Kp - lines = ['00-03UT', '03-06UT', '06-09UT', '09-12UT', '12-15UT', '15-18UT', - '18-21UT', '21-00UT'] - - # Storage for daily Kp forecasts. Get values for each day, then combine - # them together - kp_day1 = [] - kp_day2 = [] - kp_day3 = [] - for line in lines: - raw = kp_raw.split(line)[-1].split('\n')[0] - cols = raw.split() - kp_day1.append(float(cols[-3])) - kp_day2.append(float(cols[-2])) - kp_day3.append(float(cols[-1])) - - kp_times = pds.date_range(forecast_date, periods=24, freq='3H') - kp_day = [] - for dd in [kp_day1, kp_day2, kp_day3]: - kp_day.extend(dd) - - # Put Kp data into nicer DataFrame - data_frames = {'kp': pds.DataFrame(kp_day, index=kp_times, columns=['Kp'])} - - # Parse the Ap data - ap_times = pds.date_range(dl_date - dt.timedelta(days=1), periods=5, - freq='1D') - obs_line = ap_raw.split('Observed Ap')[-1].split('\n')[0] - est_line = ap_raw.split('Estimated Ap')[-1].split('\n')[0] - pred_line = ap_raw.split('Predicted Ap')[-1].split('\n')[0] - ap_vals = [int(obs_line[-3:]), int(est_line[-3:])] - - for ap_val in pred_line.split()[-1].split('-'): - ap_vals.append(int(ap_val)) - - # Put the Ap data into a nicer DataFrame - data_frames['ap'] = pds.DataFrame(ap_vals, index=ap_times, - columns=['daily_Ap']) - - # Parse the storm probabilities - storm_dict = {} - for storm_line in storm_raw.split('\n')[1:5]: - storm_split = storm_line.split() - - # Build the storm data column name - dkey = '_'.join(storm_split[:-1]) - - # Assign the storm probabilities - storm_dict[dkey] = [int(sp) for sp in storm_split[-1].split('/')] - - # Put the storm probabilities into a nicer DataFrame - storm_times = pds.date_range(forecast_date, periods=3, freq='1D') - data_frames['stormprob'] = pds.DataFrame(storm_dict, index=storm_times) - - # Save the data files - for data_name in data_frames.keys(): - filename = '{:s}_forecast_{:s}.txt'.format(data_name, dl_date.strftime( - '%Y-%m-%d')) - data_frames[data_name].to_csv(os.path.join( - file_paths[data_name], filename), header=True) + if raw_txt is None: + pysat.logger.info("".join(["Data not downloaded for ", + "3-day-geomag-forecast.txt, data may have ", + "been saved to an unexpected filename."])) + else: + # Parse text to get the date the prediction was generated + date_str = raw_txt.split(':Issued: ')[-1].split(' UTC')[0] + dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') + + # Separate out the data by chunks + ap_raw = raw_txt.split('NOAA Ap Index Forecast')[-1] + kp_raw = raw_txt.split('NOAA Kp index forecast ')[-1] + storm_raw = raw_txt.split('NOAA Geomagnetic Activity Probabilities')[-1] + + # Get dates of the forecasts + date_str = kp_raw[0:6] + ' ' + str(dl_date.year) + forecast_date = dt.datetime.strptime(date_str, '%d %b %Y') + + # Strings we will use to parse the downloaded text for Kp + lines = ['00-03UT', '03-06UT', '06-09UT', '09-12UT', '12-15UT', + '15-18UT', '18-21UT', '21-00UT'] + + # Storage for daily Kp forecasts. Get values for each day, then combine + # them together + kp_day1 = [] + kp_day2 = [] + kp_day3 = [] + for line in lines: + raw = kp_raw.split(line)[-1].split('\n')[0] + cols = raw.split() + kp_day1.append(float(cols[-3])) + kp_day2.append(float(cols[-2])) + kp_day3.append(float(cols[-1])) + + kp_times = pds.date_range(forecast_date, periods=24, freq='3H') + kp_day = [] + for dd in [kp_day1, kp_day2, kp_day3]: + kp_day.extend(dd) + + # Put Kp data into nicer DataFrame + data_frames = {'kp': pds.DataFrame(kp_day, index=kp_times, + columns=['Kp'])} + + # Parse the Ap data + ap_times = pds.date_range(dl_date - dt.timedelta(days=1), periods=5, + freq='1D') + obs_line = ap_raw.split('Observed Ap')[-1].split('\n')[0] + est_line = ap_raw.split('Estimated Ap')[-1].split('\n')[0] + pred_line = ap_raw.split('Predicted Ap')[-1].split('\n')[0] + ap_vals = [int(obs_line[-3:]), int(est_line[-3:])] + + for ap_val in pred_line.split()[-1].split('-'): + ap_vals.append(int(ap_val)) + + # Put the Ap data into a nicer DataFrame + data_frames['ap'] = pds.DataFrame(ap_vals, index=ap_times, + columns=['daily_Ap']) + + # Parse the storm probabilities + storm_dict = {} + for storm_line in storm_raw.split('\n')[1:5]: + storm_split = storm_line.split() + + # Build the storm data column name + dkey = '_'.join(storm_split[:-1]) + + # Assign the storm probabilities + storm_dict[dkey] = [int(sp) for sp in storm_split[-1].split('/')] + + # Put the storm probabilities into a nicer DataFrame + storm_times = pds.date_range(forecast_date, periods=3, freq='1D') + data_frames['stormprob'] = pds.DataFrame(storm_dict, index=storm_times) + + # Save the data files + for data_name in data_frames.keys(): + filename = '{:s}_forecast_{:s}.txt'.format( + data_name, dl_date.strftime('%Y-%m-%d')) + data_frames[data_name].to_csv(os.path.join( + file_paths[data_name], filename), header=True) return @@ -696,64 +727,70 @@ def kp_ap_recent_download(name, date_array, data_path, mock_download_dir=None): 'https://services.swpc.noaa.gov/text/', mock_download_dir, 'daily-geomagnetic-indices.txt') - # Parse text to get the date the prediction was generated - date_str = raw_txt.split(':Issued: ')[-1].split('\n')[0] - dl_date = dt.datetime.strptime(date_str, '%H%M UT %d %b %Y') - - # Data is the forecast value for the next three days - raw_data = raw_txt.split('# Date ')[-1] - - # Keep only the middle bits that matter - raw_data = raw_data.split('\n')[1:-1] - - # Hold times from the file - times = [] - - # Holds Kp and Ap values for each station - sub_kps = [[], [], []] - sub_aps = [[], [], []] - - # Iterate through file lines and parse out the info we want - for line in raw_data: - times.append(dt.datetime.strptime(line[0:10], '%Y %m %d')) - - # Pick out Kp values for each of the three columns. The columns - # used to all have integer values, but now some have floats. - kp_sub_lines = [line[17:33], line[40:56], line[63:]] - ap_sub_lines = [line[10:17], line[33:40], line[56:63]] - for i, sub_line in enumerate(kp_sub_lines): - # Process the Kp data, which has 3-hour values - split_sub = sub_line.split() - for ihr in np.arange(8): - if sub_line.find('.') < 0: - # These are integer values - sub_kps[i].append( - int(sub_line[(ihr * 2):((ihr + 1) * 2)])) - else: - # These are float values - sub_kps[i].append(np.float64(split_sub[ihr])) - - # Process the Ap data, which has daily values - sub_aps[i].append(np.int64(ap_sub_lines[i])) - - # Create times on 3 hour cadence - kp_times = pds.date_range(times[0], periods=(8 * 30), freq='3H') + if raw_txt is None: + pysat.logger.info("".join(["Data not downloaded for ", + "daily-geomagnetic-indices.txt, data may ", + "have been saved to an unexpected ", + "filename."])) + else: + # Parse text to get the date the prediction was generated + date_str = raw_txt.split(':Issued: ')[-1].split('\n')[0] + dl_date = dt.datetime.strptime(date_str, '%H%M UT %d %b %Y') - # Put both data sets into DataFrames - data = {'kp': pds.DataFrame({'mid_lat_Kp': sub_kps[0], - 'high_lat_Kp': sub_kps[1], - 'Kp': sub_kps[2]}, index=kp_times), - 'ap': pds.DataFrame({'mid_lat_Ap': sub_aps[0], - 'high_lat_Ap': sub_aps[1], - 'daily_Ap': sub_aps[2]}, index=times)} + # Data is the forecast value for the next three days + raw_data = raw_txt.split('# Date ')[-1] - # Write out the data sets as files - for dkey in data.keys(): - data_file = '{:s}_recent_{:s}.txt'.format(dkey, - dl_date.strftime('%Y-%m-%d')) + # Keep only the middle bits that matter + raw_data = raw_data.split('\n')[1:-1] - data[dkey].to_csv(os.path.join(file_paths[dkey], data_file), - header=True) + # Hold times from the file + times = [] + + # Holds Kp and Ap values for each station + sub_kps = [[], [], []] + sub_aps = [[], [], []] + + # Iterate through file lines and parse out the info we want + for line in raw_data: + times.append(dt.datetime.strptime(line[0:10], '%Y %m %d')) + + # Pick out Kp values for each of the three columns. The columns + # used to all have integer values, but now some have floats. + kp_sub_lines = [line[17:33], line[40:56], line[63:]] + ap_sub_lines = [line[10:17], line[33:40], line[56:63]] + for i, sub_line in enumerate(kp_sub_lines): + # Process the Kp data, which has 3-hour values + split_sub = sub_line.split() + for ihr in np.arange(8): + if sub_line.find('.') < 0: + # These are integer values + sub_kps[i].append( + int(sub_line[(ihr * 2):((ihr + 1) * 2)])) + else: + # These are float values + sub_kps[i].append(np.float64(split_sub[ihr])) + + # Process the Ap data, which has daily values + sub_aps[i].append(np.int64(ap_sub_lines[i])) + + # Create times on 3 hour cadence + kp_times = pds.date_range(times[0], periods=(8 * 30), freq='3H') + + # Put both data sets into DataFrames + data = {'kp': pds.DataFrame({'mid_lat_Kp': sub_kps[0], + 'high_lat_Kp': sub_kps[1], + 'Kp': sub_kps[2]}, index=kp_times), + 'ap': pds.DataFrame({'mid_lat_Ap': sub_aps[0], + 'high_lat_Ap': sub_aps[1], + 'daily_Ap': sub_aps[2]}, index=times)} + + # Write out the data sets as files + for dkey in data.keys(): + data_file = '{:s}_recent_{:s}.txt'.format( + dkey, dl_date.strftime('%Y-%m-%d')) + + data[dkey].to_csv(os.path.join(file_paths[dkey], data_file), + header=True) return @@ -803,35 +840,40 @@ def recent_ap_f107_download(name, date_array, data_path, 'https://services.swpc.noaa.gov/text/', mock_download_dir, '45-day-ap-forecast.txt') - # Parse text to get the date the prediction was generated - date_str = raw_txt.split(':Issued: ')[-1].split(' UTC')[0] - dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') - - # Get to the forecast data - raw_data = raw_txt.split('45-DAY AP FORECAST')[-1] - - # Grab Ap part - raw_ap = raw_data.split('45-DAY F10.7 CM FLUX FORECAST')[0] - raw_ap = raw_ap.split('\n')[1:-1] - - # Get the F107 - raw_f107 = raw_data.split('45-DAY F10.7 CM FLUX FORECAST')[-1] - raw_f107 = raw_f107.split('\n')[1:-4] - - # Parse the data - ap_times, ap = parse_45day_block(raw_ap) - f107_times, f107 = parse_45day_block(raw_f107) - - # Save the data in DataFrames - data = {'ap': pds.DataFrame(ap, index=ap_times, columns=['daily_Ap']), - 'f107': pds.DataFrame(f107, index=f107_times, columns=['f107'])} - - # Write out the data files - for data_name in data.keys(): - file_name = '{:s}_45day_{:s}.txt'.format(data_name, - dl_date.strftime('%Y-%m-%d')) - data[data_name].to_csv(os.path.join(file_paths[data_name], file_name), - header=True) + if raw_txt is None: + pysat.logger.info("".join(["Data not downloaded for ", + "45-day-ap-forecast.txt, data may have been", + " saved to an unexpected filename."])) + else: + # Parse text to get the date the prediction was generated + date_str = raw_txt.split(':Issued: ')[-1].split(' UTC')[0] + dl_date = dt.datetime.strptime(date_str, '%Y %b %d %H%M') + + # Get to the forecast data + raw_data = raw_txt.split('45-DAY AP FORECAST')[-1] + + # Grab Ap part + raw_ap = raw_data.split('45-DAY F10.7 CM FLUX FORECAST')[0] + raw_ap = raw_ap.split('\n')[1:-1] + + # Get the F107 + raw_f107 = raw_data.split('45-DAY F10.7 CM FLUX FORECAST')[-1] + raw_f107 = raw_f107.split('\n')[1:-4] + + # Parse the data + ap_times, ap = parse_45day_block(raw_ap) + f107_times, f107 = parse_45day_block(raw_f107) + + # Save the data in DataFrames + data = {'ap': pds.DataFrame(ap, index=ap_times, columns=['daily_Ap']), + 'f107': pds.DataFrame(f107, index=f107_times, columns=['f107'])} + + # Write out the data files + for data_name in data.keys(): + file_name = '{:s}_45day_{:s}.txt'.format( + data_name, dl_date.strftime('%Y-%m-%d')) + data[data_name].to_csv(os.path.join(file_paths[data_name], + file_name), header=True) return diff --git a/pysatSpaceWeather/instruments/sw_dst.py b/pysatSpaceWeather/instruments/sw_dst.py index a45b5ce5..09f8d874 100644 --- a/pysatSpaceWeather/instruments/sw_dst.py +++ b/pysatSpaceWeather/instruments/sw_dst.py @@ -307,6 +307,11 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): down_fname = os.path.join(mock_download_dir, fname) if os.path.isfile(down_fname): shutil.copyfile(down_fname, saved_fname) + else: + pysat.logger.info("".join(["Data not downloaded for ", + down_fname, ", data may have ", + "been saved to an unexpected ", + "filename."])) if mock_download_dir is None: ftp.close() diff --git a/pysatSpaceWeather/instruments/sw_mgii.py b/pysatSpaceWeather/instruments/sw_mgii.py index d08a4118..a8900f8a 100644 --- a/pysatSpaceWeather/instruments/sw_mgii.py +++ b/pysatSpaceWeather/instruments/sw_mgii.py @@ -301,6 +301,6 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): # Download the desired data lisird.download(date_array, data_path, local_file_prefix, local_date_fmt, - lisird_data_name, freq, mock_download_dir) + lisird_data_name, freq, mock_download_dir=mock_download_dir) return From 068d6a7fc77257b705f6e3e71c5344a4fc7dd98e Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 15:45:38 -0400 Subject: [PATCH 125/171] BUG: moved logger warning Moved the logger warning for data not found on the ACE SWPC server to preserve continuity. --- pysatSpaceWeather/instruments/methods/ace.py | 63 +++++++++---------- .../instruments/methods/general.py | 9 ++- 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index 89f7dd5c..c5dcf76f 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -244,45 +244,40 @@ def download(date_array, name, tag='', inst_id='', data_path='', now=None, "data may have been saved to an ", "unexpected filename. Check URL: ", url[tag], ", or directory: ", - mock_download_dir])) + repr(mock_download_dir)])) else: # Split the file at the last header line and the new line markers raw_data = raw_data.split('#-----------------')[-1] raw_data = raw_data.split('\n')[1:] # Remove the last header line - # Test to see if the file was found on the server - if ' '.join(raw_data).find('not found on this server') > 0: - logger.warning('File {:} not found: {:}'.format( - dl_date.strftime(file_fmt), url[tag])) - else: - # Parse the file, treating the 4 time columns separately - data_dict = {col: list() for col in data_cols[name]} - times = list() - nsplit = len(data_cols[name]) + 4 - for raw_line in raw_data: - split_line = raw_line.split() - if len(split_line) == nsplit: - times.append(dt.datetime.strptime( - ' '.join(split_line[:4]), '%Y %m %d %H%M')) - for i, col in enumerate(data_cols[name]): - # Convert to a number and save - # - # Output is saved as a float, so don't bother to - # differentiate between int and float - data_dict[col].append(float(split_line[4 + i])) - else: - if len(split_line) > 0: - raise IOError(''.join([ - 'unexpected line encoutered in ', url[tag], "/", - dl_date.strftime(file_fmt), ":\n", raw_line])) - - # Put data into nicer DataFrame - data = pds.DataFrame(data_dict, index=times) - - # Write out as a file - data_file = '{:s}.txt'.format( - '_'.join(["ace", name, tag, dl_date.strftime('%Y-%m-%d')])) - data.to_csv(os.path.join(data_path, data_file), header=True) + # Parse the file, treating the 4 time columns separately + data_dict = {col: list() for col in data_cols[name]} + times = list() + nsplit = len(data_cols[name]) + 4 + for raw_line in raw_data: + split_line = raw_line.split() + if len(split_line) == nsplit: + times.append(dt.datetime.strptime( + ' '.join(split_line[:4]), '%Y %m %d %H%M')) + for i, col in enumerate(data_cols[name]): + # Convert to a number and save + # + # Output is saved as a float, so don't bother to + # differentiate between int and float + data_dict[col].append(float(split_line[4 + i])) + else: + if len(split_line) > 0: + raise IOError(''.join([ + 'unexpected line encoutered in ', url[tag], "/", + dl_date.strftime(file_fmt), ":\n", raw_line])) + + # Put data into nicer DataFrame + data = pds.DataFrame(data_dict, index=times) + + # Write out as a file + data_file = '{:s}.txt'.format( + '_'.join(["ace", name, tag, dl_date.strftime('%Y-%m-%d')])) + data.to_csv(os.path.join(data_path, data_file), header=True) return diff --git a/pysatSpaceWeather/instruments/methods/general.py b/pysatSpaceWeather/instruments/methods/general.py index 2f1b5f18..f2f0e8c1 100644 --- a/pysatSpaceWeather/instruments/methods/general.py +++ b/pysatSpaceWeather/instruments/methods/general.py @@ -98,7 +98,14 @@ def get_local_or_remote_text(url, mock_download_dir, filename): # Set the download webpage furl = ''.join([url, filename]) req = requests.get(furl) - raw_txt = req.text if req.ok else None + + if req.text.find('not found on this server') > 0: + # Ensure useful information about server is passed on to user + pysat.logger.warning('File {:} not found: {:}'.format(filename, + url)) + raw_txt = None + else: + raw_txt = req.text if req.ok else None else: if not os.path.isdir(mock_download_dir): raise IOError('file location is not a directory: {:}'.format( From 8899f10a165e79ed2199e3b5d6631e9f01c3e106 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 15:46:29 -0400 Subject: [PATCH 126/171] BUG: removed delete for mock downloads Removed file deletion for the DSD old index data when using mock downloads, to ensure the file can be accessed multiple times. --- pysatSpaceWeather/instruments/methods/swpc.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index 60773ff0..21a020c4 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -252,7 +252,9 @@ def old_indices_dsd_download(name, date_array, data_path, local_files, today, lines = fprelim.read() rewrite_daily_solar_data_file(dl_date.year, outfiles, lines) - os.remove(saved_fname) + if mock_download_dir is None: + # Only remove the file if it wasn't obtained from a local dir + os.remove(saved_fname) # Cycle to the next date dl_date = vend[iname] + pds.DateOffset(days=1) From 4d5ed8a8f5ac07458132b5ba84894e0ecba7d82a Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 15:47:05 -0400 Subject: [PATCH 127/171] TST: updated test date Updated the test date for Dst data to limit the number of new test files that need to be stored. --- pysatSpaceWeather/instruments/sw_dst.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatSpaceWeather/instruments/sw_dst.py b/pysatSpaceWeather/instruments/sw_dst.py index 09f8d874..fbafcc1c 100644 --- a/pysatSpaceWeather/instruments/sw_dst.py +++ b/pysatSpaceWeather/instruments/sw_dst.py @@ -54,7 +54,7 @@ # ---------------------------------------------------------------------------- # Instrument test attributes -_test_dates = {'': {'noaa': dt.datetime(2007, 1, 1), 'lasp': today}} +_test_dates = {'': {'noaa': dt.datetime(2000, 1, 1), 'lasp': today}} # Other tags assumed to be True _test_download_ci = {'': {'noaa': False}} From cffad92c6a3d4a75e4d1ac91c8bca0afd8983e1e Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 15:48:31 -0400 Subject: [PATCH 128/171] TST: added mock download tests Added a test suite for mock data downloads that runs for all instruments. --- pysatSpaceWeather/tests/test_instruments.py | 114 ++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index d4f2c053..b77927f5 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -10,6 +10,8 @@ import logging import os import pytest +import sys +import tempfile import warnings # Make sure to import your instrument library here @@ -308,3 +310,115 @@ def test_missing_prelim_file(self, caplog): inst.files.data_path.replace('f107', 'flare')] return + + +class TestMockDownloads(object): + """Test mock download option for Instruments.""" + + def setup_method(self): + """Create a clean testing environment.""" + + # Use a temporary directory so that the user's setup is not altered. + # TODO(#974): Remove if/else when support for Python 3.9 is dropped. + if sys.version_info.minor >= 10: + self.tempdir = tempfile.TemporaryDirectory( + ignore_cleanup_errors=True) + else: + self.tempdir = tempfile.TemporaryDirectory() + + self.saved_path = pysat.params['data_dirs'] + pysat.params._set_data_dirs(path=self.tempdir.name, store=False) + self.dkwargs = {"mock_download_dir": self.tempdir.name} + return + + def teardown_method(self): + """Clean up downloaded files and parameters from tests.""" + + pysat.params._set_data_dirs(self.saved_path, store=False) + # Remove the temporary directory. In Windows, this occasionally fails + # by raising a wide variety of different error messages. Python 3.10+ + # can handle this, but lower Python versions cannot. + # TODO(#974): Remove try/except when support for Python 3.9 is dropped. + try: + self.tempdir.cleanup() + except Exception: + pass + + del self.dkwargs, self.tempdir, self.saved_path + return + + @pytest.mark.parametrize("inst_dict", instruments['download']) + def test_error_bad_dir(self, inst_dict): + """Test IOError is raised for a bad mock-download directory. + + Parameters + ---------- + inst_dict : dict + Dictionary containing info to instantiate a specific instrument. + Set automatically from instruments['download'] when + `initialize_test_package` is run. + + """ + # Initalize the test instrument + test_inst, date = clslib.initialize_test_inst_and_date(inst_dict) + + # Evaluate the error message for a bad directory name + self.dkwargs['mock_download_dir'] = "not/a\\directory.path" + testing.eval_bad_input(test_inst.download, IOError, + 'file location is not a directory', + input_args=[date], input_kwargs=self.dkwargs) + return + + @pytest.mark.parametrize("inst_dict", instruments['download']) + def test_loginfo_missing_file(self, inst_dict, caplog): + """Test log for info about a missing file when using mock downloads. + + Parameters + ---------- + inst_dict : dict + Dictionary containing info to instantiate a specific instrument. + Set automatically from instruments['download'] when + `initialize_test_package` is run. + + """ + # Initalize the test instrument + test_inst, date = clslib.initialize_test_inst_and_date(inst_dict) + + # Get the logging message + with caplog.at_level(logging.INFO, logger='pysat'): + test_inst.download(start=date, **self.dkwargs) + + # Test the warning + captured = caplog.text + cap_text = "data may have been saved to an unexpected filename" + assert captured.find(cap_text) > 0, "Unexpected text: {:}".format( + captured) + return + + @pytest.mark.parametrize("inst_dict", instruments['download']) + def test_mock_download(self, inst_dict): + """Test pysat's ability to process files downloaded by a user. + + Parameters + ---------- + inst_dict : dict + Dictionary containing info to instantiate a specific instrument. + Set automatically from instruments['download'] when + `initialize_test_package` is run. + + """ + # Initalize the test instrument + test_inst, date = clslib.initialize_test_inst_and_date(inst_dict) + + # Update the mock data directory + self.dkwargs['mock_download_dir'] = pysatSpaceWeather.test_data_path + + # Test the download + assert len(test_inst.files.files) == 0 + test_inst.download(start=date, **self.dkwargs) + assert len(test_inst.files.files) > 0, "".join([ + repr(test_inst.platform), " ", repr(test_inst.name), " ", + repr(test_inst.tag), " ", repr(test_inst.inst_id), " failed to ", + "download using date=", repr(date), ", mock_download_dir=", + self.dkwargs['mock_download_dir']]) + return From 74e9c07de4e7d45e100e5356683529c748283cee Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 15:49:00 -0400 Subject: [PATCH 129/171] TST: added mock download test data Added mock download test data for all current instruments. --- .../tests/test_data/20090101_ace_epam_5m.txt | 306 ++++ .../tests/test_data/20090101_ace_mag_1m.txt | 1460 +++++++++++++++++ .../tests/test_data/20090101_ace_sis_5m.txt | 304 ++++ .../test_data/20090101_ace_swepam_1m.txt | 1458 ++++++++++++++++ .../tests/test_data/2009_DSD.txt | 378 +++++ .../tests/test_data/3-day-geomag-forecast.txt | 25 + .../3-day-solar-geomag-predictions.txt | 68 + .../tests/test_data/45-day-ap-forecast.txt | 32 + .../tests/test_data/Fadj_2009-01.txt | 1 + .../tests/test_data/Fobs_2009-01.txt | 1 + .../tests/test_data/Hp30_2009-01.txt | 1 + .../tests/test_data/Hp60_2009-01.txt | 1 + .../tests/test_data/Kp_def2009.wdc | 375 +++++ .../tests/test_data/Kp_now2020.wdc | 376 +++++ .../tests/test_data/SN_2009-01.txt | 1 + .../tests/test_data/ace-epam.txt | 42 + .../tests/test_data/ace-magnetometer.txt | 139 ++ pysatSpaceWeather/tests/test_data/ace-sis.txt | 40 + .../tests/test_data/ace-swepam.txt | 137 ++ .../tests/test_data/ap30_2009-01.txt | 1 + .../tests/test_data/ap60_2009-01.txt | 1 + .../test_data/daily-geomagnetic-indices.txt | 42 + .../tests/test_data/daily-solar-indices.txt | 43 + .../tests/test_data/f107_monthly_2009-01.txt | 33 + .../test_data/mgii_composite_1981-11.txt | 32 + .../tests/test_data/mgii_sorce_2005-03-06.txt | 20 + 26 files changed, 5317 insertions(+) create mode 100644 pysatSpaceWeather/tests/test_data/20090101_ace_epam_5m.txt create mode 100644 pysatSpaceWeather/tests/test_data/20090101_ace_mag_1m.txt create mode 100644 pysatSpaceWeather/tests/test_data/20090101_ace_sis_5m.txt create mode 100644 pysatSpaceWeather/tests/test_data/20090101_ace_swepam_1m.txt create mode 100644 pysatSpaceWeather/tests/test_data/2009_DSD.txt create mode 100644 pysatSpaceWeather/tests/test_data/3-day-geomag-forecast.txt create mode 100644 pysatSpaceWeather/tests/test_data/3-day-solar-geomag-predictions.txt create mode 100644 pysatSpaceWeather/tests/test_data/45-day-ap-forecast.txt create mode 100644 pysatSpaceWeather/tests/test_data/Fadj_2009-01.txt create mode 100644 pysatSpaceWeather/tests/test_data/Fobs_2009-01.txt create mode 100644 pysatSpaceWeather/tests/test_data/Hp30_2009-01.txt create mode 100644 pysatSpaceWeather/tests/test_data/Hp60_2009-01.txt create mode 100644 pysatSpaceWeather/tests/test_data/Kp_def2009.wdc create mode 100644 pysatSpaceWeather/tests/test_data/Kp_now2020.wdc create mode 100644 pysatSpaceWeather/tests/test_data/SN_2009-01.txt create mode 100644 pysatSpaceWeather/tests/test_data/ace-epam.txt create mode 100644 pysatSpaceWeather/tests/test_data/ace-magnetometer.txt create mode 100644 pysatSpaceWeather/tests/test_data/ace-sis.txt create mode 100644 pysatSpaceWeather/tests/test_data/ace-swepam.txt create mode 100644 pysatSpaceWeather/tests/test_data/ap30_2009-01.txt create mode 100644 pysatSpaceWeather/tests/test_data/ap60_2009-01.txt create mode 100644 pysatSpaceWeather/tests/test_data/daily-geomagnetic-indices.txt create mode 100644 pysatSpaceWeather/tests/test_data/daily-solar-indices.txt create mode 100644 pysatSpaceWeather/tests/test_data/f107_monthly_2009-01.txt create mode 100644 pysatSpaceWeather/tests/test_data/mgii_composite_1981-11.txt create mode 100644 pysatSpaceWeather/tests/test_data/mgii_sorce_2005-03-06.txt diff --git a/pysatSpaceWeather/tests/test_data/20090101_ace_epam_5m.txt b/pysatSpaceWeather/tests/test_data/20090101_ace_epam_5m.txt new file mode 100644 index 00000000..081b9cd5 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/20090101_ace_epam_5m.txt @@ -0,0 +1,306 @@ +:Data_list: 20090101_ace_epam_5m.txt +:Created: 2009 Jan 02 0011 UT +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comments and suggestions to SWPC.Webmaster@noaa.gov +# +# Units: Differential Flux particles/cm2-s-ster-MeV +# Units: Anisotropy Index 0.0 - 2.0 +# Status(S): 0 = nominal, 4,6,7,8 = bad data, unable to process, 9 = no data +# Missing data values: -1.00e+05, index = -1.00 +# Source: ACE Satellite - Electron, Proton, and Alpha Monitor +# +# +# 5-minute averaged Real-time Differential Electron and Proton Flux +# +# Modified Seconds ---------------------------- Differential Flux --------------------------- +# UT Date Time Julian of the ----- Electron ----- ------------------- Protons keV ------------------- Anis. +# YR MO DA HHMM Day Day S 38-53 175-315 S 47-68 115-195 310-580 761-1220 1060-1900 Index +#------------------------------------------------------------------------------------------------------------------- +2009 01 01 0000 54832 0 0 8.93e+02 2.55e+01 0 1.60e+03 2.00e+01 2.01e+00 8.38e-01 2.03e-01 0.08 +2009 01 01 0005 54832 300 0 6.98e+02 2.20e+01 0 1.53e+03 1.88e+01 2.16e+00 6.03e-01 9.48e-02 0.19 +2009 01 01 0010 54832 600 0 7.03e+02 2.60e+01 0 1.58e+03 2.08e+01 2.43e+00 6.67e-01 1.16e-01 0.46 +2009 01 01 0015 54832 900 0 7.23e+02 2.53e+01 0 7.95e+03 4.30e+01 2.40e+00 6.10e-01 2.12e-01 0.60 +2009 01 01 0020 54832 1200 0 8.58e+02 1.97e+01 0 2.42e+03 4.03e+01 2.48e+00 3.43e-01 1.16e-01 0.26 +2009 01 01 0025 54832 1500 0 7.04e+02 3.35e+01 0 1.64e+03 2.00e+01 2.41e+00 5.53e-01 1.74e-01 0.90 +2009 01 01 0030 54832 1800 0 6.78e+02 3.03e+01 0 1.53e+03 2.05e+01 3.07e+00 5.53e-01 1.45e-01 0.31 +2009 01 01 0035 54832 2100 0 8.26e+02 2.46e+01 0 7.58e+03 5.44e+01 2.85e+00 5.14e-01 1.06e-01 0.46 +2009 01 01 0040 54832 2400 0 8.48e+02 3.42e+01 0 1.55e+04 1.51e+02 2.69e+00 7.28e-01 1.05e-01 0.46 +2009 01 01 0045 54832 2700 0 7.32e+02 2.78e+01 0 5.15e+04 8.35e+02 5.17e+00 5.14e-01 1.64e-01 0.61 +2009 01 01 0050 54832 3000 0 7.74e+02 3.31e+01 0 3.92e+04 7.14e+02 4.78e+00 4.76e-01 1.74e-01 0.30 +2009 01 01 0055 54832 3300 0 7.22e+02 3.03e+01 0 1.24e+04 1.61e+02 2.56e+00 6.24e-01 2.53e-01 0.48 +2009 01 01 0100 54832 3600 0 6.70e+02 2.87e+01 0 3.19e+03 2.54e+01 2.61e+00 7.81e-01 1.74e-01 0.31 +2009 01 01 0105 54832 3900 0 6.66e+02 2.55e+01 0 1.91e+03 1.90e+01 2.16e+00 7.62e-01 1.16e-01 0.20 +2009 01 01 0110 54832 4200 0 9.92e+02 2.88e+01 0 2.19e+03 1.90e+01 2.39e+00 5.40e-01 1.90e-01 0.67 +2009 01 01 0115 54832 4500 0 6.18e+02 3.01e+01 0 1.60e+03 1.96e+01 2.50e+00 7.74e-01 1.52e-01 0.26 +2009 01 01 0120 54832 4800 0 6.11e+02 2.55e+01 0 1.56e+03 1.95e+01 2.59e+00 5.61e-01 9.48e-02 0.50 +2009 01 01 0125 54832 5100 0 6.76e+02 2.51e+01 0 1.64e+03 1.96e+01 2.88e+00 6.03e-01 1.48e-01 0.18 +2009 01 01 0130 54832 5400 0 8.29e+02 2.58e+01 0 1.65e+03 1.76e+01 2.52e+00 5.63e-01 1.25e-01 0.35 +2009 01 01 0135 54832 5700 0 6.84e+02 3.05e+01 0 1.57e+03 1.70e+01 2.29e+00 5.82e-01 1.26e-01 0.74 +2009 01 01 0140 54832 6000 0 6.30e+02 2.74e+01 0 1.49e+03 2.04e+01 2.65e+00 6.86e-01 1.37e-01 0.36 +2009 01 01 0145 54832 6300 0 7.94e+02 2.89e+01 0 1.62e+03 1.71e+01 2.22e+00 6.68e-01 1.45e-01 0.21 +2009 01 01 0150 54832 6600 0 6.71e+02 3.32e+01 0 1.56e+03 1.94e+01 2.33e+00 7.07e-01 1.37e-01 0.73 +2009 01 01 0155 54832 6900 0 5.49e+02 2.34e+01 0 1.55e+03 2.08e+01 2.44e+00 5.80e-01 1.52e-01 0.07 +2009 01 01 0200 54832 7200 0 9.46e+02 2.98e+01 0 1.57e+03 1.97e+01 2.10e+00 8.31e-01 1.51e-01 0.09 +2009 01 01 0205 54832 7500 0 6.17e+02 3.00e+01 0 1.55e+03 1.92e+01 2.13e+00 7.07e-01 1.90e-01 0.30 +2009 01 01 0210 54832 7800 0 6.14e+02 2.89e+01 0 1.53e+03 2.21e+01 2.61e+00 6.86e-01 1.07e-01 0.22 +2009 01 01 0215 54832 8100 0 6.49e+02 3.03e+01 0 1.51e+03 2.11e+01 2.16e+00 6.03e-01 8.11e-02 0.39 +2009 01 01 0220 54832 8400 0 9.30e+02 2.84e+01 0 1.65e+03 1.87e+01 2.20e+00 4.99e-01 1.16e-01 0.16 +2009 01 01 0225 54832 8700 0 6.35e+02 2.44e+01 0 1.64e+03 1.95e+01 2.88e+00 6.51e-01 1.34e-01 0.29 +2009 01 01 0230 54832 9000 0 7.76e+02 3.05e+01 0 1.45e+03 1.92e+01 3.18e+00 6.24e-01 1.16e-01 0.05 +2009 01 01 0235 54832 9300 0 6.81e+02 2.76e+01 0 1.57e+03 1.90e+01 2.16e+00 4.76e-01 1.55e-01 0.16 +2009 01 01 0240 54832 9600 0 6.31e+02 2.57e+01 0 1.51e+03 1.70e+01 2.37e+00 5.51e-01 1.45e-01 0.36 +2009 01 01 0245 54832 9900 0 7.10e+02 2.86e+01 0 1.63e+03 1.84e+01 2.69e+00 8.31e-01 1.37e-01 0.23 +2009 01 01 0250 54832 10200 0 7.36e+02 3.12e+01 0 1.57e+03 1.96e+01 2.16e+00 6.67e-01 1.47e-01 0.37 +2009 01 01 0255 54832 10500 0 6.80e+02 2.41e+01 0 1.59e+03 2.26e+01 2.61e+00 5.91e-01 1.16e-01 0.32 +2009 01 01 0300 54832 10800 0 6.33e+02 2.84e+01 0 1.71e+03 2.02e+01 1.70e+00 5.40e-01 1.51e-01 0.26 +2009 01 01 0305 54832 11100 0 8.15e+02 2.57e+01 0 1.73e+03 2.39e+01 2.37e+00 6.29e-01 2.22e-01 0.57 +2009 01 01 0310 54832 11400 0 9.24e+02 2.71e+01 0 1.79e+03 2.69e+01 2.31e+00 7.05e-01 1.74e-01 0.72 +2009 01 01 0315 54832 11700 0 7.07e+02 3.22e+01 0 1.80e+03 2.36e+01 2.28e+00 8.38e-01 1.16e-01 0.35 +2009 01 01 0320 54832 12000 0 5.89e+02 2.40e+01 0 1.78e+03 2.20e+01 2.43e+00 7.90e-01 6.95e-02 0.28 +2009 01 01 0325 54832 12300 0 7.19e+02 2.60e+01 0 1.67e+03 2.15e+01 1.92e+00 7.43e-01 1.45e-01 0.31 +2009 01 01 0330 54832 12600 0 6.17e+02 2.74e+01 0 1.66e+03 2.09e+01 2.14e+00 5.09e-01 5.22e-02 0.80 +2009 01 01 0335 54832 12900 0 7.14e+02 2.90e+01 0 1.62e+03 2.00e+01 2.39e+00 6.65e-01 1.51e-01 0.15 +2009 01 01 0340 54832 13200 0 6.91e+02 2.67e+01 0 1.53e+03 2.19e+01 2.28e+00 7.62e-01 1.64e-01 0.92 +2009 01 01 0345 54832 13500 0 7.94e+02 2.94e+01 0 3.17e+03 3.88e+01 2.52e+00 6.48e-01 1.55e-01 0.29 +2009 01 01 0350 54832 13800 0 6.91e+02 3.29e+01 0 3.26e+03 2.96e+01 2.46e+00 6.44e-01 1.69e-01 0.55 +2009 01 01 0355 54832 14100 0 6.93e+02 2.57e+01 0 1.94e+03 2.18e+01 2.33e+00 7.56e-01 1.52e-01 0.13 +2009 01 01 0400 54832 14400 0 7.84e+02 2.42e+01 0 2.05e+03 2.50e+01 2.39e+00 9.15e-01 9.48e-02 0.11 +2009 01 01 0405 54832 14700 0 6.44e+02 2.63e+01 0 1.73e+03 2.04e+01 2.52e+00 6.44e-01 2.32e-01 0.49 +2009 01 01 0410 54832 15000 0 7.88e+02 3.11e+01 0 1.60e+03 1.88e+01 2.16e+00 8.79e-01 2.59e-01 0.44 +2009 01 01 0415 54832 15300 0 7.56e+02 2.51e+01 0 1.55e+03 1.79e+01 2.59e+00 6.24e-01 1.58e-01 0.34 +2009 01 01 0420 54832 15600 0 7.40e+02 2.63e+01 0 1.65e+03 2.15e+01 2.07e+00 8.11e-01 2.11e-01 0.86 +2009 01 01 0425 54832 15900 0 6.91e+02 2.45e+01 0 1.66e+03 1.70e+01 2.44e+00 8.27e-01 1.35e-01 0.27 +2009 01 01 0430 54832 16200 0 8.24e+02 2.40e+01 0 1.49e+03 2.09e+01 2.52e+00 6.03e-01 1.58e-01 0.04 +2009 01 01 0435 54832 16500 0 8.23e+02 2.89e+01 0 1.64e+03 2.49e+01 2.50e+00 6.51e-01 1.07e-01 0.13 +2009 01 01 0440 54832 16800 0 6.98e+02 2.68e+01 0 1.70e+03 2.45e+01 3.02e+00 4.29e-01 1.45e-01 0.91 +2009 01 01 0445 54832 17100 0 6.62e+02 2.34e+01 0 1.58e+03 2.25e+01 2.74e+00 4.78e-01 1.48e-01 0.38 +2009 01 01 0450 54832 17400 0 8.49e+02 2.89e+01 0 1.61e+03 2.04e+01 2.22e+00 5.98e-01 1.34e-01 0.25 +2009 01 01 0455 54832 17700 0 7.29e+02 2.61e+01 0 1.65e+03 1.92e+01 2.07e+00 3.95e-01 1.69e-01 0.42 +2009 01 01 0500 54832 18000 0 7.47e+02 2.59e+01 0 1.70e+03 2.06e+01 2.43e+00 4.37e-01 2.42e-01 0.31 +2009 01 01 0505 54832 18300 0 7.13e+02 2.55e+01 0 1.52e+03 1.80e+01 2.19e+00 3.69e-01 1.60e-01 0.86 +2009 01 01 0510 54832 18600 0 6.85e+02 2.34e+01 0 1.59e+03 1.88e+01 2.56e+00 3.20e-01 1.69e-01 0.66 +2009 01 01 0515 54832 18900 0 5.45e+02 2.96e+01 0 1.63e+03 1.84e+01 2.55e+00 5.72e-01 1.26e-01 0.17 +2009 01 01 0520 54832 19200 0 6.26e+02 2.53e+01 0 1.55e+03 1.99e+01 2.55e+00 5.53e-01 9.48e-02 0.07 +2009 01 01 0525 54832 19500 0 8.37e+02 2.74e+01 0 1.65e+03 1.94e+01 2.49e+00 7.28e-01 9.48e-02 0.56 +2009 01 01 0530 54832 19800 0 6.62e+02 3.24e+01 0 1.67e+03 1.98e+01 2.34e+00 6.10e-01 9.48e-02 0.30 +2009 01 01 0535 54832 20100 0 6.30e+02 2.69e+01 0 1.63e+03 1.79e+01 2.13e+00 4.76e-01 1.55e-01 0.83 +2009 01 01 0540 54832 20400 0 6.67e+02 2.44e+01 0 1.59e+03 2.08e+01 2.62e+00 5.61e-01 1.58e-01 0.24 +2009 01 01 0545 54832 20700 0 6.55e+02 3.06e+01 0 1.71e+03 2.43e+01 2.19e+00 3.81e-01 1.83e-01 0.23 +2009 01 01 0550 54832 21000 0 7.79e+02 2.73e+01 0 1.71e+03 2.21e+01 2.34e+00 5.53e-01 1.84e-01 0.48 +2009 01 01 0555 54832 21300 0 5.99e+02 2.89e+01 0 1.64e+03 2.47e+01 2.82e+00 7.05e-01 9.48e-02 0.59 +2009 01 01 0600 54832 21600 0 8.07e+02 3.65e+01 0 1.63e+03 1.73e+01 2.16e+00 6.44e-01 1.74e-01 0.90 +2009 01 01 0605 54832 21900 0 5.95e+02 2.62e+01 0 1.62e+03 1.80e+01 2.34e+00 4.76e-01 1.64e-01 0.43 +2009 01 01 0610 54832 22200 0 6.07e+02 2.64e+01 0 1.63e+03 1.75e+01 2.10e+00 6.86e-01 1.93e-01 0.31 +2009 01 01 0615 54832 22500 0 7.20e+02 2.76e+01 0 1.57e+03 2.01e+01 2.59e+00 5.40e-01 2.00e-01 0.54 +2009 01 01 0620 54832 22800 0 7.69e+02 2.60e+01 0 1.63e+03 1.84e+01 2.25e+00 8.38e-01 1.45e-01 0.30 +2009 01 01 0625 54832 23100 0 6.81e+02 2.78e+01 0 1.56e+03 1.83e+01 3.31e+00 4.19e-01 9.66e-02 0.35 +2009 01 01 0630 54832 23400 0 9.02e+02 2.67e+01 0 1.44e+03 1.75e+01 1.97e+00 8.94e-01 1.90e-01 0.37 +2009 01 01 0635 54832 23700 0 8.78e+02 2.49e+01 0 1.69e+03 1.94e+01 2.11e+00 6.51e-01 1.35e-01 0.94 +2009 01 01 0640 54832 24000 0 7.56e+02 3.40e+01 0 1.65e+03 2.02e+01 2.88e+00 6.65e-01 1.04e-01 0.79 +2009 01 01 0645 54832 24300 0 6.67e+02 2.47e+01 0 1.58e+03 2.02e+01 2.43e+00 7.07e-01 1.47e-01 0.76 +2009 01 01 0650 54832 24600 0 8.73e+02 2.94e+01 0 1.65e+03 1.90e+01 2.77e+00 5.72e-01 1.60e-01 0.26 +2009 01 01 0655 54832 24900 0 6.51e+02 2.55e+01 0 1.62e+03 1.91e+01 2.56e+00 8.11e-01 1.37e-01 0.51 +2009 01 01 0700 54832 25200 0 7.18e+02 3.01e+01 0 1.59e+03 1.79e+01 2.39e+00 6.44e-01 8.11e-02 0.18 +2009 01 01 0705 54832 25500 0 5.94e+02 2.53e+01 0 1.47e+03 1.88e+01 2.08e+00 5.28e-01 1.78e-01 0.49 +2009 01 01 0710 54832 25800 0 8.48e+02 2.40e+01 0 1.70e+03 1.89e+01 2.59e+00 3.95e-01 1.69e-01 0.00 +2009 01 01 0715 54832 26100 0 6.88e+02 2.44e+01 0 1.68e+03 1.84e+01 1.94e+00 6.86e-01 1.07e-01 0.60 +2009 01 01 0720 54832 26400 0 6.82e+02 2.72e+01 0 1.57e+03 1.90e+01 2.03e+00 7.07e-01 2.21e-01 0.16 +2009 01 01 0725 54832 26700 0 7.72e+02 2.53e+01 0 1.61e+03 2.07e+01 2.43e+00 3.53e-01 2.11e-01 0.69 +2009 01 01 0730 54832 27000 0 8.09e+02 2.91e+01 0 1.61e+03 1.84e+01 2.36e+00 7.21e-01 1.52e-01 0.20 +2009 01 01 0735 54832 27300 0 7.14e+02 2.62e+01 0 1.59e+03 1.56e+01 2.46e+00 6.10e-01 1.93e-01 0.39 +2009 01 01 0740 54832 27600 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 0745 54832 27900 0 7.34e+02 3.61e+01 0 1.98e+03 1.74e+01 3.73e+00 2.29e-01 1.74e-01 -1.00 +2009 01 01 0750 54832 28200 0 7.41e+02 2.45e+01 0 1.60e+03 2.32e+01 2.52e+00 6.24e-01 1.47e-01 0.31 +2009 01 01 0755 54832 28500 0 7.42e+02 2.59e+01 0 1.50e+03 1.74e+01 2.64e+00 7.24e-01 1.16e-01 0.58 +2009 01 01 0800 54832 28800 0 8.96e+02 2.85e+01 0 1.68e+03 2.20e+01 2.31e+00 8.19e-01 1.55e-01 0.63 +2009 01 01 0805 54832 29100 0 6.37e+02 2.28e+01 0 1.62e+03 1.78e+01 2.13e+00 8.11e-01 2.11e-01 0.16 +2009 01 01 0810 54832 29400 0 6.78e+02 2.83e+01 0 1.58e+03 1.99e+01 2.10e+00 6.48e-01 1.64e-01 0.21 +2009 01 01 0815 54832 29700 0 8.84e+02 2.91e+01 0 2.89e+03 6.10e+01 2.76e+00 5.91e-01 1.45e-01 0.17 +2009 01 01 0820 54832 30000 0 7.40e+02 2.88e+01 0 3.55e+03 5.61e+01 2.95e+00 5.82e-01 1.79e-01 0.12 +2009 01 01 0825 54832 30300 0 7.23e+02 2.55e+01 0 6.42e+03 1.45e+02 3.52e+00 5.53e-01 1.35e-01 0.74 +2009 01 01 0830 54832 30600 0 7.46e+02 3.10e+01 0 2.59e+03 2.50e+01 2.13e+00 7.24e-01 2.12e-01 0.43 +2009 01 01 0835 54832 30900 0 8.30e+02 2.68e+01 0 2.91e+03 2.81e+01 2.43e+00 4.95e-01 1.06e-01 0.32 +2009 01 01 0840 54832 31200 0 6.53e+02 2.26e+01 0 3.59e+03 2.54e+01 2.39e+00 5.61e-01 1.37e-01 0.35 +2009 01 01 0845 54832 31500 0 7.34e+02 2.69e+01 0 2.52e+03 2.40e+01 2.31e+00 4.95e-01 9.66e-02 0.62 +2009 01 01 0850 54832 31800 0 8.20e+02 2.98e+01 0 1.68e+03 2.34e+01 2.28e+00 5.72e-01 1.16e-01 0.42 +2009 01 01 0855 54832 32100 0 7.11e+02 2.88e+01 0 1.64e+03 2.05e+01 2.26e+00 5.61e-01 1.79e-01 0.35 +2009 01 01 0900 54832 32400 0 6.98e+02 2.66e+01 0 1.68e+03 2.21e+01 2.58e+00 4.19e-01 2.03e-01 0.72 +2009 01 01 0905 54832 32700 0 7.95e+02 3.26e+01 0 1.76e+03 2.57e+01 2.61e+00 5.14e-01 1.74e-01 0.51 +2009 01 01 0910 54832 33000 0 7.70e+02 3.56e+01 0 2.52e+03 2.98e+01 2.43e+00 3.53e-01 2.42e-01 0.70 +2009 01 01 0915 54832 33300 0 6.33e+02 2.78e+01 0 1.77e+03 2.15e+01 2.05e+00 5.45e-01 1.07e-01 0.87 +2009 01 01 0920 54832 33600 0 5.84e+02 2.45e+01 0 1.61e+03 1.95e+01 2.26e+00 4.37e-01 1.48e-01 0.62 +2009 01 01 0925 54832 33900 0 7.30e+02 2.47e+01 0 1.70e+03 1.90e+01 2.33e+00 5.20e-01 2.00e-01 0.33 +2009 01 01 0930 54832 34200 0 8.15e+02 3.27e+01 0 1.71e+03 1.97e+01 2.39e+00 5.98e-01 8.91e-02 0.24 +2009 01 01 0935 54832 34500 0 6.53e+02 2.53e+01 0 2.04e+03 3.22e+01 2.33e+00 3.95e-01 1.58e-01 0.36 +2009 01 01 0940 54832 34800 0 8.14e+02 2.73e+01 0 1.56e+03 2.00e+01 1.90e+00 4.99e-01 2.00e-01 1.01 +2009 01 01 0945 54832 35100 0 7.86e+02 2.83e+01 0 1.69e+03 2.62e+01 2.39e+00 7.39e-01 2.05e-01 0.40 +2009 01 01 0950 54832 35400 0 6.51e+02 2.86e+01 0 1.72e+03 3.02e+01 2.36e+00 8.11e-01 2.00e-01 0.08 +2009 01 01 0955 54832 35700 0 6.68e+02 3.14e+01 0 1.54e+03 1.98e+01 2.69e+00 5.98e-01 1.87e-01 0.01 +2009 01 01 1000 54832 36000 0 8.03e+02 3.00e+01 0 1.70e+03 1.92e+01 2.03e+00 4.99e-01 1.47e-01 0.47 +2009 01 01 1005 54832 36300 0 6.35e+02 2.76e+01 0 1.62e+03 2.07e+01 2.23e+00 4.16e-01 1.27e-01 0.72 +2009 01 01 1010 54832 36600 0 6.81e+02 3.14e+01 0 1.57e+03 2.26e+01 2.30e+00 8.79e-01 9.81e-02 0.83 +2009 01 01 1015 54832 36900 0 9.45e+02 3.03e+01 0 1.61e+03 2.10e+01 2.23e+00 6.44e-01 1.26e-01 0.24 +2009 01 01 1020 54832 37200 0 7.56e+02 2.82e+01 0 1.55e+03 1.83e+01 2.16e+00 4.57e-01 1.69e-01 1.24 +2009 01 01 1025 54832 37500 0 7.17e+02 3.01e+01 0 1.57e+03 2.12e+01 2.91e+00 5.10e-01 1.25e-01 0.05 +2009 01 01 1030 54832 37800 0 6.89e+02 2.63e+01 0 1.52e+03 1.85e+01 2.56e+00 6.03e-01 1.69e-01 0.35 +2009 01 01 1035 54832 38100 0 8.10e+02 2.59e+01 0 1.67e+03 1.93e+01 1.80e+00 4.76e-01 6.32e-02 0.08 +2009 01 01 1040 54832 38400 0 7.41e+02 2.91e+01 0 1.68e+03 2.09e+01 1.86e+00 4.57e-01 2.03e-01 0.44 +2009 01 01 1045 54832 38700 0 7.32e+02 3.30e+01 0 1.49e+03 1.67e+01 2.43e+00 5.61e-01 2.11e-01 0.20 +2009 01 01 1050 54832 39000 0 9.39e+02 2.76e+01 0 1.62e+03 1.82e+01 2.49e+00 6.67e-01 1.64e-01 0.09 +2009 01 01 1055 54832 39300 0 7.09e+02 2.66e+01 0 1.57e+03 2.01e+01 2.22e+00 6.67e-01 1.45e-01 0.32 +2009 01 01 1100 54832 39600 0 6.29e+02 3.01e+01 0 1.62e+03 2.19e+01 2.66e+00 7.28e-01 2.11e-01 0.06 +2009 01 01 1105 54832 39900 0 7.39e+02 2.87e+01 0 1.58e+03 1.83e+01 2.19e+00 5.91e-01 1.26e-01 0.45 +2009 01 01 1110 54832 40200 0 6.94e+02 2.76e+01 0 1.65e+03 2.22e+01 2.16e+00 3.62e-01 1.64e-01 1.25 +2009 01 01 1115 54832 40500 0 6.98e+02 2.73e+01 0 1.64e+03 1.98e+01 2.10e+00 4.95e-01 1.45e-01 0.73 +2009 01 01 1120 54832 40800 0 5.38e+02 2.44e+01 0 1.49e+03 1.86e+01 2.29e+00 6.03e-01 9.48e-02 0.46 +2009 01 01 1125 54832 41100 0 8.43e+02 2.34e+01 0 1.61e+03 2.02e+01 2.22e+00 5.53e-01 1.84e-01 0.38 +2009 01 01 1130 54832 41400 0 5.41e+02 2.18e+01 0 1.58e+03 1.89e+01 1.98e+00 6.48e-01 1.93e-01 0.61 +2009 01 01 1135 54832 41700 0 6.30e+02 2.38e+01 0 1.59e+03 1.66e+01 2.20e+00 6.03e-01 2.00e-01 0.49 +2009 01 01 1140 54832 42000 0 8.17e+02 2.73e+01 0 1.61e+03 1.90e+01 2.52e+00 5.33e-01 1.64e-01 1.26 +2009 01 01 1145 54832 42300 0 6.51e+02 3.10e+01 0 1.57e+03 2.10e+01 2.34e+00 6.48e-01 1.55e-01 0.47 +2009 01 01 1150 54832 42600 0 6.30e+02 2.34e+01 0 1.61e+03 1.94e+01 2.49e+00 4.78e-01 9.48e-02 0.52 +2009 01 01 1155 54832 42900 0 6.24e+02 3.07e+01 0 1.52e+03 1.76e+01 2.50e+00 6.68e-01 2.05e-01 0.06 +2009 01 01 1200 54832 43200 0 8.13e+02 2.45e+01 0 1.66e+03 2.09e+01 1.97e+00 7.90e-01 2.00e-01 0.35 +2009 01 01 1205 54832 43500 0 6.82e+02 2.88e+01 0 1.62e+03 2.20e+01 2.59e+00 6.24e-01 1.26e-01 0.56 +2009 01 01 1210 54832 43800 0 7.86e+02 3.01e+01 0 1.56e+03 2.42e+01 2.30e+00 8.44e-01 2.50e-01 0.18 +2009 01 01 1215 54832 44100 0 8.17e+02 2.84e+01 0 1.67e+03 2.04e+01 2.92e+00 4.37e-01 1.16e-01 0.44 +2009 01 01 1220 54832 44400 0 5.57e+02 2.76e+01 0 1.58e+03 1.85e+01 2.03e+00 4.37e-01 1.69e-01 0.53 +2009 01 01 1225 54832 44700 0 5.99e+02 2.21e+01 0 1.58e+03 1.74e+01 1.91e+00 6.16e-01 1.52e-01 0.35 +2009 01 01 1230 54832 45000 0 7.74e+02 2.78e+01 0 1.54e+03 2.15e+01 2.29e+00 5.40e-01 9.48e-02 0.19 +2009 01 01 1235 54832 45300 0 7.52e+02 3.04e+01 0 1.61e+03 1.83e+01 2.33e+00 5.98e-01 1.60e-01 0.74 +2009 01 01 1240 54832 45600 0 7.96e+02 2.86e+01 0 1.67e+03 1.63e+01 2.43e+00 5.61e-01 1.39e-01 0.41 +2009 01 01 1245 54832 45900 0 6.65e+02 2.53e+01 0 1.47e+03 1.84e+01 2.33e+00 6.44e-01 1.47e-01 0.49 +2009 01 01 1250 54832 46200 0 9.34e+02 3.06e+01 0 1.59e+03 1.83e+01 2.33e+00 5.63e-01 2.32e-01 0.60 +2009 01 01 1255 54832 46500 0 6.67e+02 2.61e+01 0 1.63e+03 1.95e+01 2.13e+00 3.43e-01 1.05e-01 0.71 +2009 01 01 1300 54832 46800 0 7.25e+02 2.63e+01 0 1.61e+03 1.60e+01 2.29e+00 6.03e-01 1.58e-01 0.08 +2009 01 01 1305 54832 47100 0 7.33e+02 2.53e+01 0 1.65e+03 2.25e+01 2.58e+00 6.16e-01 1.96e-01 0.33 +2009 01 01 1310 54832 47400 0 6.55e+02 2.98e+01 0 1.55e+03 1.79e+01 2.59e+00 5.82e-01 4.35e-02 1.22 +2009 01 01 1315 54832 47700 0 7.47e+02 2.71e+01 0 1.67e+03 1.87e+01 2.13e+00 5.53e-01 1.84e-01 0.45 +2009 01 01 1320 54832 48000 0 6.98e+02 2.87e+01 0 1.53e+03 2.23e+01 2.79e+00 6.29e-01 1.45e-01 0.91 +2009 01 01 1325 54832 48300 0 9.26e+02 3.17e+01 0 1.66e+03 1.87e+01 2.69e+00 6.86e-01 1.37e-01 0.34 +2009 01 01 1330 54832 48600 0 7.67e+02 2.60e+01 0 1.63e+03 1.86e+01 2.76e+00 7.43e-01 1.74e-01 0.41 +2009 01 01 1335 54832 48900 0 6.87e+02 2.85e+01 0 1.53e+03 1.86e+01 2.28e+00 7.24e-01 1.05e-01 0.59 +2009 01 01 1340 54832 49200 0 8.44e+02 2.88e+01 0 1.64e+03 1.91e+01 2.26e+00 6.03e-01 1.69e-01 0.32 +2009 01 01 1345 54832 49500 0 8.20e+02 2.83e+01 0 1.57e+03 1.93e+01 2.52e+00 6.48e-01 1.26e-01 0.37 +2009 01 01 1350 54832 49800 0 8.08e+02 2.64e+01 0 1.59e+03 2.22e+01 2.73e+00 7.81e-01 1.35e-01 0.35 +2009 01 01 1355 54832 50100 0 7.92e+02 2.82e+01 0 1.58e+03 1.71e+01 2.01e+00 7.24e-01 1.35e-01 0.42 +2009 01 01 1400 54832 50400 0 8.75e+02 2.69e+01 0 1.66e+03 1.89e+01 2.46e+00 5.40e-01 1.05e-01 0.71 +2009 01 01 1405 54832 50700 0 6.44e+02 2.46e+01 0 1.66e+03 1.86e+01 1.98e+00 5.72e-01 1.79e-01 0.71 +2009 01 01 1410 54832 51000 0 7.52e+02 2.80e+01 0 1.53e+03 2.09e+01 2.19e+00 6.10e-01 1.64e-01 0.57 +2009 01 01 1415 54832 51300 0 9.32e+02 2.72e+01 0 1.65e+03 1.88e+01 2.79e+00 4.99e-01 1.47e-01 0.29 +2009 01 01 1420 54832 51600 0 7.03e+02 2.29e+01 0 1.62e+03 2.00e+01 2.16e+00 5.72e-01 1.16e-01 0.27 +2009 01 01 1425 54832 51900 0 7.44e+02 2.89e+01 0 1.59e+03 1.77e+01 2.13e+00 4.38e-01 1.84e-01 1.07 +2009 01 01 1430 54832 52200 0 7.32e+02 2.86e+01 0 1.56e+03 2.00e+01 2.26e+00 7.69e-01 1.90e-01 0.17 +2009 01 01 1435 54832 52500 0 8.21e+02 2.76e+01 0 1.60e+03 1.76e+01 2.47e+00 7.21e-01 1.34e-01 0.35 +2009 01 01 1440 54832 52800 0 7.40e+02 2.80e+01 0 1.56e+03 1.89e+01 2.52e+00 5.40e-01 2.00e-01 0.33 +2009 01 01 1445 54832 53100 0 7.63e+02 2.80e+01 0 1.50e+03 1.99e+01 2.98e+00 3.53e-01 1.16e-01 0.38 +2009 01 01 1450 54832 53400 0 7.55e+02 2.49e+01 0 1.60e+03 1.82e+01 2.50e+00 4.92e-01 9.81e-02 0.07 +2009 01 01 1455 54832 53700 0 6.51e+02 2.88e+01 0 1.56e+03 2.29e+01 2.23e+00 7.48e-01 1.69e-01 0.36 +2009 01 01 1500 54832 54000 0 5.57e+02 2.61e+01 0 1.54e+03 2.10e+01 2.46e+00 4.37e-01 8.43e-02 0.49 +2009 01 01 1505 54832 54300 0 8.66e+02 2.73e+01 0 1.57e+03 2.06e+01 2.11e+00 8.27e-01 1.64e-01 0.05 +2009 01 01 1510 54832 54600 0 7.77e+02 2.34e+01 0 1.62e+03 2.01e+01 2.62e+00 5.40e-01 2.00e-01 0.27 +2009 01 01 1515 54832 54900 0 7.68e+02 2.93e+01 0 1.66e+03 1.87e+01 1.94e+00 7.74e-01 1.52e-01 0.57 +2009 01 01 1520 54832 55200 0 8.10e+02 3.15e+01 0 1.55e+03 2.04e+01 2.16e+00 6.44e-01 1.48e-01 0.28 +2009 01 01 1525 54832 55500 0 8.02e+02 2.24e+01 0 1.68e+03 2.20e+01 2.66e+00 5.20e-01 1.79e-01 0.60 +2009 01 01 1530 54832 55800 0 7.36e+02 3.04e+01 0 1.59e+03 2.09e+01 2.02e+00 5.10e-01 1.16e-01 0.39 +2009 01 01 1535 54832 56100 0 7.67e+02 2.74e+01 0 1.46e+03 1.88e+01 2.49e+00 5.82e-01 1.26e-01 0.16 +2009 01 01 1540 54832 56400 0 9.22e+02 2.11e+01 0 1.62e+03 2.05e+01 2.62e+00 6.86e-01 1.90e-01 0.23 +2009 01 01 1545 54832 56700 0 7.10e+02 2.93e+01 0 1.57e+03 1.95e+01 2.66e+00 6.16e-01 1.25e-01 0.22 +2009 01 01 1550 54832 57000 0 8.10e+02 2.13e+01 0 1.64e+03 1.81e+01 2.13e+00 6.86e-01 1.37e-01 0.49 +2009 01 01 1555 54832 57300 0 1.07e+03 2.78e+01 0 1.55e+03 1.76e+01 2.37e+00 7.62e-01 1.55e-01 0.80 +2009 01 01 1600 54832 57600 0 8.30e+02 2.62e+01 0 1.68e+03 1.88e+01 2.43e+00 7.43e-01 1.84e-01 0.59 +2009 01 01 1605 54832 57900 0 7.22e+02 3.21e+01 0 1.56e+03 1.88e+01 2.33e+00 7.28e-01 1.48e-01 1.00 +2009 01 01 1610 54832 58200 0 6.81e+02 2.66e+01 0 1.52e+03 2.06e+01 2.37e+00 4.57e-01 1.26e-01 0.33 +2009 01 01 1615 54832 58500 0 8.37e+02 2.55e+01 0 2.51e+03 3.53e+01 2.61e+00 6.67e-01 9.48e-02 0.11 +2009 01 01 1620 54832 58800 0 8.21e+02 2.63e+01 0 1.60e+04 1.45e+02 2.88e+00 3.95e-01 1.58e-01 0.58 +2009 01 01 1625 54832 59100 0 7.87e+02 2.85e+01 0 8.52e+03 6.17e+01 2.88e+00 9.15e-01 2.03e-01 0.21 +2009 01 01 1630 54832 59400 0 9.09e+02 2.76e+01 0 6.71e+03 5.22e+01 2.46e+00 7.62e-01 1.74e-01 0.57 +2009 01 01 1635 54832 59700 0 8.60e+02 3.37e+01 0 1.04e+04 5.91e+01 2.52e+00 5.14e-01 1.55e-01 0.79 +2009 01 01 1640 54832 60000 0 8.64e+02 2.71e+01 0 6.19e+03 3.31e+01 2.16e+00 7.48e-01 1.58e-01 0.36 +2009 01 01 1645 54832 60300 0 7.61e+02 2.99e+01 0 1.53e+03 1.81e+01 2.67e+00 4.76e-01 1.45e-01 0.68 +2009 01 01 1650 54832 60600 0 9.59e+02 2.73e+01 0 1.71e+03 1.88e+01 2.01e+00 5.53e-01 1.16e-01 0.27 +2009 01 01 1655 54832 60900 0 8.69e+02 2.63e+01 0 1.61e+03 1.76e+01 2.52e+00 6.65e-01 2.11e-01 0.34 +2009 01 01 1700 54832 61200 0 8.09e+02 2.78e+01 0 1.59e+03 1.61e+01 2.55e+00 5.53e-01 1.26e-01 0.02 +2009 01 01 1705 54832 61500 0 8.18e+02 2.68e+01 0 1.91e+03 1.92e+01 2.43e+00 5.72e-01 9.66e-02 0.57 +2009 01 01 1710 54832 61800 0 7.07e+02 2.65e+01 0 1.77e+03 2.07e+01 2.29e+00 5.82e-01 1.47e-01 0.70 +2009 01 01 1715 54832 62100 0 7.19e+02 3.03e+01 0 2.09e+03 2.39e+01 2.11e+00 4.92e-01 8.02e-02 0.34 +2009 01 01 1720 54832 62400 0 8.69e+02 2.80e+01 0 2.67e+03 2.37e+01 2.56e+00 3.56e-01 8.43e-02 0.61 +2009 01 01 1725 54832 62700 0 9.40e+02 2.92e+01 0 2.00e+03 1.83e+01 2.26e+00 7.48e-01 1.47e-01 0.30 +2009 01 01 1730 54832 63000 0 8.09e+02 2.89e+01 0 2.04e+03 2.33e+01 2.44e+00 4.00e-01 2.05e-01 1.02 +2009 01 01 1735 54832 63300 0 8.53e+02 2.82e+01 0 1.50e+03 1.83e+01 2.62e+00 8.73e-01 1.37e-01 0.23 +2009 01 01 1740 54832 63600 0 1.10e+03 2.78e+01 0 1.68e+03 1.66e+01 2.03e+00 6.44e-01 1.58e-01 0.16 +2009 01 01 1745 54832 63900 0 7.59e+02 2.17e+01 0 1.59e+03 2.05e+01 2.36e+00 5.45e-01 1.25e-01 0.22 +2009 01 01 1750 54832 64200 0 7.83e+02 2.47e+01 0 1.59e+03 2.20e+01 2.43e+00 4.99e-01 9.48e-02 0.53 +2009 01 01 1755 54832 64500 0 9.98e+02 2.58e+01 0 1.63e+03 2.00e+01 2.47e+00 6.86e-01 1.25e-01 0.29 +2009 01 01 1800 54832 64800 0 9.78e+02 2.69e+01 0 1.60e+03 2.16e+01 2.59e+00 6.86e-01 2.11e-01 0.40 +2009 01 01 1805 54832 65100 0 8.89e+02 2.57e+01 0 1.79e+03 2.01e+01 2.36e+00 6.86e-01 2.63e-01 0.45 +2009 01 01 1810 54832 65400 0 8.41e+02 3.11e+01 0 1.77e+03 1.89e+01 2.63e+00 5.28e-01 1.25e-01 0.33 +2009 01 01 1815 54832 65700 0 1.04e+03 2.22e+01 0 1.76e+03 2.01e+01 2.36e+00 5.20e-01 1.26e-01 0.19 +2009 01 01 1820 54832 66000 0 8.08e+02 2.53e+01 0 1.73e+03 1.94e+01 2.56e+00 5.61e-01 1.37e-01 0.39 +2009 01 01 1825 54832 66300 0 7.69e+02 2.85e+01 0 1.55e+03 1.91e+01 2.30e+00 6.86e-01 1.78e-01 0.24 +2009 01 01 1830 54832 66600 0 9.33e+02 2.61e+01 0 1.61e+03 2.10e+01 2.56e+00 7.28e-01 1.79e-01 0.28 +2009 01 01 1835 54832 66900 0 6.53e+02 2.43e+01 0 1.66e+03 2.11e+01 2.37e+00 6.86e-01 1.26e-01 0.54 +2009 01 01 1840 54832 67200 0 7.08e+02 2.30e+01 0 1.66e+03 2.04e+01 2.55e+00 5.34e-01 1.06e-01 0.53 +2009 01 01 1845 54832 67500 0 7.11e+02 2.82e+01 0 1.56e+03 1.79e+01 2.33e+00 4.57e-01 2.63e-01 0.24 +2009 01 01 1850 54832 67800 0 8.95e+02 3.61e+01 0 1.73e+03 1.92e+01 2.13e+00 5.34e-01 1.93e-01 0.05 +2009 01 01 1855 54832 68100 0 6.76e+02 2.44e+01 0 1.68e+03 1.88e+01 2.46e+00 3.05e-01 1.26e-01 0.35 +2009 01 01 1900 54832 68400 0 7.29e+02 2.61e+01 0 1.54e+03 2.10e+01 2.69e+00 5.82e-01 1.79e-01 0.45 +2009 01 01 1905 54832 68700 0 9.61e+02 3.08e+01 0 1.66e+03 2.17e+01 2.91e+00 6.67e-01 1.64e-01 1.02 +2009 01 01 1910 54832 69000 0 6.65e+02 2.34e+01 0 1.62e+03 1.77e+01 2.16e+00 5.91e-01 9.66e-02 0.69 +2009 01 01 1915 54832 69300 0 6.87e+02 2.98e+01 0 1.57e+03 2.18e+01 2.46e+00 6.86e-01 1.90e-01 0.02 +2009 01 01 1920 54832 69600 0 8.19e+02 2.80e+01 0 1.64e+03 1.94e+01 2.65e+00 5.61e-01 1.69e-01 0.27 +2009 01 01 1925 54832 69900 0 8.37e+02 3.08e+01 0 1.67e+03 2.22e+01 2.55e+00 7.24e-01 1.35e-01 0.36 +2009 01 01 1930 54832 70200 0 7.23e+02 2.59e+01 0 1.62e+03 1.84e+01 2.64e+00 6.48e-01 1.16e-01 0.27 +2009 01 01 1935 54832 70500 0 7.41e+02 2.42e+01 0 1.54e+03 2.27e+01 2.29e+00 7.90e-01 1.48e-01 0.25 +2009 01 01 1940 54832 70800 0 9.59e+02 3.44e+01 0 1.62e+03 2.25e+01 3.03e+00 7.43e-01 2.61e-01 0.43 +2009 01 01 1945 54832 71100 0 7.49e+02 2.98e+01 0 1.70e+03 2.21e+01 1.23e+00 4.76e-01 1.74e-01 0.20 +2009 01 01 1950 54832 71400 0 7.31e+02 2.53e+01 0 1.68e+03 2.30e+01 2.13e+00 5.40e-01 1.37e-01 0.44 +2009 01 01 1955 54832 71700 0 9.65e+02 2.81e+01 0 1.69e+03 2.12e+01 2.27e+00 5.63e-01 2.05e-01 0.08 +2009 01 01 2000 54832 72000 0 8.82e+02 2.86e+01 0 1.72e+03 2.22e+01 2.29e+00 7.48e-01 2.53e-01 0.24 +2009 01 01 2005 54832 72300 0 7.12e+02 2.92e+01 0 1.74e+03 2.12e+01 2.52e+00 5.20e-01 1.05e-01 0.37 +2009 01 01 2010 54832 72600 0 7.32e+02 3.63e+01 0 1.62e+03 2.11e+01 2.25e+00 7.24e-01 1.45e-01 0.33 +2009 01 01 2015 54832 72900 0 8.84e+02 2.81e+01 0 1.74e+03 1.83e+01 2.02e+00 8.38e-01 1.93e-01 0.63 +2009 01 01 2020 54832 73200 0 7.30e+02 3.12e+01 0 1.76e+03 1.73e+01 2.71e+00 7.44e-01 1.89e-01 0.57 +2009 01 01 2025 54832 73500 0 7.50e+02 2.64e+01 0 1.69e+03 2.36e+01 2.31e+00 8.23e-01 2.09e-01 0.69 +2009 01 01 2030 54832 73800 0 9.25e+02 3.00e+01 0 2.10e+03 2.92e+01 2.34e+00 4.37e-01 1.90e-01 0.57 +2009 01 01 2035 54832 74100 0 6.39e+02 2.27e+01 0 2.42e+03 3.41e+01 2.66e+00 7.74e-01 1.25e-01 0.47 +2009 01 01 2040 54832 74400 0 6.35e+02 2.88e+01 0 1.91e+03 3.77e+01 2.85e+00 6.65e-01 8.43e-02 0.48 +2009 01 01 2045 54832 74700 0 7.70e+02 2.84e+01 0 1.55e+03 1.87e+01 1.97e+00 4.37e-01 1.90e-01 0.54 +2009 01 01 2050 54832 75000 0 7.51e+02 2.68e+01 0 1.66e+03 2.05e+01 2.66e+00 7.91e-01 1.60e-01 0.18 +2009 01 01 2055 54832 75300 0 6.93e+02 2.98e+01 0 1.66e+03 2.18e+01 2.56e+00 6.44e-01 2.00e-01 0.22 +2009 01 01 2100 54832 75600 0 7.58e+02 3.30e+01 0 1.56e+03 1.75e+01 2.52e+00 6.86e-01 1.58e-01 0.92 +2009 01 01 2105 54832 75900 0 7.89e+02 2.98e+01 0 1.61e+03 1.55e+01 3.07e+00 4.57e-01 1.45e-01 0.00 +2009 01 01 2110 54832 76200 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2115 54832 76500 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2120 54832 76800 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2125 54832 77100 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2130 54832 77400 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2135 54832 77700 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2140 54832 78000 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2145 54832 78300 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2150 54832 78600 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2155 54832 78900 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2200 54832 79200 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2205 54832 79500 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2210 54832 79800 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2215 54832 80100 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2220 54832 80400 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2225 54832 80700 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2230 54832 81000 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2235 54832 81300 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2240 54832 81600 9 -1.00e+05 -1.00e+05 9 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00e+05 -1.00 +2009 01 01 2245 54832 81900 0 8.11e+02 2.81e+01 0 1.76e+03 1.78e+01 2.46e+00 6.86e-01 1.55e-01 0.16 +2009 01 01 2250 54832 82200 0 7.51e+02 2.78e+01 0 1.71e+03 1.92e+01 2.55e+00 5.63e-01 1.87e-01 0.06 +2009 01 01 2255 54832 82500 0 6.39e+02 2.20e+01 0 1.64e+03 1.94e+01 2.13e+00 5.82e-01 1.37e-01 0.11 +2009 01 01 2300 54832 82800 0 7.52e+02 2.67e+01 0 1.51e+03 2.23e+01 2.56e+00 6.44e-01 2.11e-01 0.68 +2009 01 01 2305 54832 83100 0 9.20e+02 2.45e+01 0 1.63e+03 1.91e+01 2.41e+00 5.98e-01 1.52e-01 0.42 +2009 01 01 2310 54832 83400 0 7.68e+02 3.19e+01 0 1.64e+03 2.08e+01 2.23e+00 8.31e-01 1.16e-01 0.29 +2009 01 01 2315 54832 83700 0 7.08e+02 2.99e+01 0 1.63e+03 2.24e+01 2.83e+00 3.52e-01 1.34e-01 0.24 +2009 01 01 2320 54832 84000 0 8.73e+02 3.02e+01 0 1.77e+03 1.88e+01 2.85e+00 7.69e-01 2.32e-01 0.34 +2009 01 01 2325 54832 84300 0 7.18e+02 2.73e+01 0 1.58e+03 1.70e+01 2.23e+00 5.61e-01 2.00e-01 0.29 +2009 01 01 2330 54832 84600 0 7.51e+02 3.06e+01 0 1.62e+03 1.71e+01 2.39e+00 7.04e-01 1.25e-01 0.85 +2009 01 01 2335 54832 84900 0 7.18e+02 3.29e+01 0 1.56e+03 1.91e+01 2.85e+00 6.03e-01 1.37e-01 0.45 +2009 01 01 2340 54832 85200 0 7.68e+02 2.80e+01 0 1.71e+03 2.04e+01 2.85e+00 6.65e-01 1.79e-01 0.76 +2009 01 01 2345 54832 85500 0 6.97e+02 2.71e+01 0 1.65e+03 1.87e+01 2.52e+00 6.33e-01 1.87e-01 0.73 +2009 01 01 2350 54832 85800 0 7.27e+02 2.63e+01 0 1.51e+03 2.01e+01 2.56e+00 5.40e-01 1.69e-01 0.58 +2009 01 01 2355 54832 86100 0 5.22e+02 1.82e+01 0 1.64e+03 2.03e+01 2.74e+00 6.53e-01 1.92e-01 0.28 diff --git a/pysatSpaceWeather/tests/test_data/20090101_ace_mag_1m.txt b/pysatSpaceWeather/tests/test_data/20090101_ace_mag_1m.txt new file mode 100644 index 00000000..1a4f21d4 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/20090101_ace_mag_1m.txt @@ -0,0 +1,1460 @@ +:Data_list: 20090101_ace_mag_1m.txt +:Created: 2009 Jan 02 0011 UT +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comments and suggestions to SWPC.Webmaster@noaa.gov +# +# Magnetometer values are in GSM coordinates. +# +# Units: Bx, By, Bz, Bt in nT +# Units: Latitude degrees +/- 90.0 +# Units: Longitude degrees 0.0 - 360.0 +# Status(S): 0 = nominal data, 1 to 8 = bad data record, 9 = no data +# Missing data values: -999.9 +# Source: ACE Satellite - Magnetometer +# +# 1-minute averaged Real-time Interplanetary Magnetic Field Values +# +# Modified Seconds +# UT Date Time Julian of the ---------------- GSM Coordinates --------------- +# YR MO DA HHMM Day Day S Bx By Bz Bt Lat. Long. +#------------------------------------------------------------------------------------ +2009 01 01 0000 54832 0 0 -3.3 2.5 1.7 4.5 23.1 142.7 +2009 01 01 0001 54832 60 0 -3.4 2.2 2.0 4.5 25.8 147.3 +2009 01 01 0002 54832 120 0 -3.8 1.8 1.7 4.5 21.8 154.8 +2009 01 01 0003 54832 180 0 -3.7 1.9 2.0 4.6 25.1 153.4 +2009 01 01 0004 54832 240 0 -4.2 1.8 0.8 4.7 10.3 157.2 +2009 01 01 0005 54832 300 0 -4.4 1.0 -1.3 4.6 -16.2 167.2 +2009 01 01 0006 54832 360 0 -4.2 1.4 -1.9 4.8 -23.5 162.0 +2009 01 01 0007 54832 420 0 -4.2 1.5 -1.5 4.7 -18.4 159.9 +2009 01 01 0008 54832 480 0 -4.6 0.5 -1.3 4.8 -16.1 174.3 +2009 01 01 0009 54832 540 0 -4.6 0.8 -1.2 4.8 -14.3 169.7 +2009 01 01 0010 54832 600 0 -4.6 1.1 -0.7 4.7 -8.7 166.9 +2009 01 01 0011 54832 660 0 -4.7 1.0 -0.6 4.8 -7.6 168.5 +2009 01 01 0012 54832 720 0 -4.5 1.1 -0.3 4.7 -4.2 165.9 +2009 01 01 0013 54832 780 0 -4.3 1.5 -0.2 4.6 -2.0 161.2 +2009 01 01 0014 54832 840 0 -4.2 1.6 -0.0 4.5 -0.0 159.7 +2009 01 01 0015 54832 900 0 -4.1 1.3 -0.8 4.4 -10.2 162.1 +2009 01 01 0016 54832 960 0 -4.2 0.5 -1.5 4.5 -19.8 172.7 +2009 01 01 0017 54832 1020 0 -3.9 -1.0 -2.0 4.5 -26.4 194.0 +2009 01 01 0018 54832 1080 0 -4.1 -0.7 -1.8 4.6 -22.9 190.0 +2009 01 01 0019 54832 1140 0 -3.9 -1.4 -1.7 4.4 -22.5 199.5 +2009 01 01 0020 54832 1200 0 -3.1 -2.1 -2.2 4.3 -30.1 213.7 +2009 01 01 0021 54832 1260 0 -3.7 -0.3 -2.5 4.5 -34.2 185.0 +2009 01 01 0022 54832 1320 0 -3.5 -0.8 -2.6 4.4 -35.8 193.0 +2009 01 01 0023 54832 1380 0 -4.0 0.2 -2.1 4.5 -27.3 177.1 +2009 01 01 0024 54832 1440 0 -4.3 0.7 -0.8 4.5 -10.7 171.0 +2009 01 01 0025 54832 1500 0 -4.3 1.3 -0.9 4.6 -10.9 163.1 +2009 01 01 0026 54832 1560 0 -4.4 1.3 -1.2 4.7 -14.9 163.7 +2009 01 01 0027 54832 1620 0 -4.4 1.5 0.3 4.6 3.9 161.1 +2009 01 01 0028 54832 1680 0 -4.4 1.5 -0.1 4.7 -1.8 161.0 +2009 01 01 0029 54832 1740 0 -4.5 1.2 -0.7 4.7 -8.2 165.2 +2009 01 01 0030 54832 1800 0 -4.4 1.3 -0.6 4.7 -7.7 163.9 +2009 01 01 0031 54832 1860 0 -4.6 0.9 -0.9 4.8 -11.1 168.8 +2009 01 01 0032 54832 1920 0 -4.6 0.4 -1.1 4.7 -13.5 175.2 +2009 01 01 0033 54832 1980 0 -4.6 0.5 -1.3 4.8 -15.8 174.2 +2009 01 01 0034 54832 2040 0 -4.4 0.2 -1.7 4.7 -21.0 176.9 +2009 01 01 0035 54832 2100 0 -4.4 -0.0 -1.6 4.7 -19.4 180.4 +2009 01 01 0036 54832 2160 0 -4.5 -0.3 -1.5 4.7 -18.1 183.5 +2009 01 01 0037 54832 2220 0 -4.4 -0.0 -1.4 4.6 -17.4 180.4 +2009 01 01 0038 54832 2280 0 -4.2 0.4 -1.5 4.4 -19.3 174.6 +2009 01 01 0039 54832 2340 0 -3.6 0.5 -2.6 4.4 -35.4 171.5 +2009 01 01 0040 54832 2400 0 -3.3 0.0 -2.8 4.3 -40.8 179.4 +2009 01 01 0041 54832 2460 0 -3.8 0.2 -2.3 4.5 -31.5 177.3 +2009 01 01 0042 54832 2520 0 -3.8 -0.0 -2.3 4.5 -31.0 180.2 +2009 01 01 0043 54832 2580 0 -3.2 -0.9 -3.0 4.5 -41.5 195.8 +2009 01 01 0044 54832 2640 0 -3.2 -1.0 -3.1 4.6 -42.4 197.9 +2009 01 01 0045 54832 2700 0 -3.1 0.2 -2.7 4.1 -40.4 177.2 +2009 01 01 0046 54832 2760 0 -3.5 0.6 -2.0 4.1 -29.5 170.7 +2009 01 01 0047 54832 2820 0 -3.8 -0.0 -1.7 4.2 -24.8 180.2 +2009 01 01 0048 54832 2880 0 -3.6 -0.1 -2.1 4.1 -31.1 181.1 +2009 01 01 0049 54832 2940 0 -3.5 0.3 -2.2 4.1 -32.3 175.3 +2009 01 01 0050 54832 3000 0 -4.1 0.2 -1.4 4.3 -19.4 177.7 +2009 01 01 0051 54832 3060 0 -4.3 -0.0 -1.0 4.4 -12.8 180.3 +2009 01 01 0052 54832 3120 0 -4.4 0.3 -0.8 4.5 -9.9 176.6 +2009 01 01 0053 54832 3180 0 -4.3 0.6 -0.6 4.4 -8.2 172.1 +2009 01 01 0054 54832 3240 0 -4.1 0.9 -0.8 4.3 -10.9 168.0 +2009 01 01 0055 54832 3300 0 -4.2 1.0 -0.5 4.3 -7.2 166.1 +2009 01 01 0056 54832 3360 0 -4.3 0.9 -0.6 4.4 -7.6 168.1 +2009 01 01 0057 54832 3420 0 -4.2 1.2 -0.2 4.4 -2.2 164.2 +2009 01 01 0058 54832 3480 0 -4.3 1.1 -0.0 4.5 -0.6 166.0 +2009 01 01 0059 54832 3540 0 -4.3 1.1 -0.6 4.5 -7.2 166.1 +2009 01 01 0100 54832 3600 0 -4.3 1.0 -0.5 4.5 -6.8 166.8 +2009 01 01 0101 54832 3660 0 -4.4 1.2 -0.0 4.6 -0.2 164.8 +2009 01 01 0102 54832 3720 0 -4.3 1.3 -0.0 4.5 -0.2 163.7 +2009 01 01 0103 54832 3780 0 -4.3 1.2 -0.1 4.4 -1.9 163.6 +2009 01 01 0104 54832 3840 0 -4.2 1.0 -1.0 4.4 -13.0 166.1 +2009 01 01 0105 54832 3900 0 -4.2 1.1 -0.3 4.4 -4.6 165.8 +2009 01 01 0106 54832 3960 0 -4.1 1.4 -0.3 4.3 -4.4 161.8 +2009 01 01 0107 54832 4020 0 -4.2 1.2 -0.6 4.4 -7.4 163.8 +2009 01 01 0108 54832 4080 0 -4.2 1.3 -0.3 4.4 -4.1 162.3 +2009 01 01 0109 54832 4140 0 -4.2 1.2 0.1 4.3 1.8 164.2 +2009 01 01 0110 54832 4200 0 -4.2 0.8 0.5 4.3 6.0 168.6 +2009 01 01 0111 54832 4260 0 -4.2 1.1 -0.1 4.4 -1.7 165.1 +2009 01 01 0112 54832 4320 0 -4.2 1.2 0.2 4.3 2.7 164.1 +2009 01 01 0113 54832 4380 0 -4.2 1.1 -0.1 4.3 -1.3 164.7 +2009 01 01 0114 54832 4440 0 -4.1 1.4 0.1 4.3 1.2 161.7 +2009 01 01 0115 54832 4500 0 -4.0 1.6 0.3 4.3 4.0 158.7 +2009 01 01 0116 54832 4560 0 -4.0 2.1 0.6 4.5 7.4 152.2 +2009 01 01 0117 54832 4620 0 -4.1 1.8 0.9 4.6 11.7 155.9 +2009 01 01 0118 54832 4680 0 -3.8 2.0 1.0 4.4 13.5 152.8 +2009 01 01 0119 54832 4740 0 -3.9 2.1 1.1 4.6 13.7 152.2 +2009 01 01 0120 54832 4800 0 -3.7 1.8 0.7 4.2 10.0 153.7 +2009 01 01 0121 54832 4860 0 -4.0 1.6 -0.4 4.4 -4.6 157.8 +2009 01 01 0122 54832 4920 0 -3.7 2.0 -1.1 4.4 -14.2 151.5 +2009 01 01 0123 54832 4980 0 -3.5 2.2 -1.3 4.4 -18.0 148.5 +2009 01 01 0124 54832 5040 0 -3.5 2.2 -1.2 4.3 -16.6 147.9 +2009 01 01 0125 54832 5100 0 -3.7 2.1 -0.9 4.3 -11.9 150.0 +2009 01 01 0126 54832 5160 0 -3.6 2.5 -0.7 4.5 -9.0 145.6 +2009 01 01 0127 54832 5220 0 -4.0 2.2 -0.2 4.6 -2.6 151.3 +2009 01 01 0128 54832 5280 0 -4.2 2.1 0.1 4.6 1.1 153.8 +2009 01 01 0129 54832 5340 0 -4.1 2.4 -0.2 4.7 -2.8 149.8 +2009 01 01 0130 54832 5400 0 -4.2 2.2 -0.4 4.7 -4.4 152.4 +2009 01 01 0131 54832 5460 0 -4.1 2.0 0.6 4.6 7.6 154.2 +2009 01 01 0132 54832 5520 0 -4.7 1.1 -0.1 4.8 -0.6 167.1 +2009 01 01 0133 54832 5580 0 -4.1 0.9 -2.3 4.8 -28.5 167.4 +2009 01 01 0134 54832 5640 0 -3.7 2.6 -1.9 4.9 -22.4 144.6 +2009 01 01 0135 54832 5700 0 -3.5 2.5 -2.5 5.0 -30.2 144.8 +2009 01 01 0136 54832 5760 0 -2.6 2.5 -3.4 5.0 -43.9 135.8 +2009 01 01 0137 54832 5820 0 -2.5 2.9 -3.4 5.1 -41.5 130.3 +2009 01 01 0138 54832 5880 0 -2.3 3.4 -2.9 5.1 -35.1 124.4 +2009 01 01 0139 54832 5940 0 -3.4 3.4 -2.2 5.3 -24.2 134.9 +2009 01 01 0140 54832 6000 0 -4.4 2.9 -1.2 5.4 -12.4 146.7 +2009 01 01 0141 54832 6060 0 -5.0 2.4 -0.7 5.6 -6.8 154.1 +2009 01 01 0142 54832 6120 0 -5.1 2.3 -0.4 5.6 -3.9 155.9 +2009 01 01 0143 54832 6180 0 -4.8 2.6 -0.7 5.5 -7.2 151.6 +2009 01 01 0144 54832 6240 0 -4.8 2.6 -0.8 5.6 -8.6 151.5 +2009 01 01 0145 54832 6300 0 -4.9 2.6 -1.0 5.6 -9.8 151.6 +2009 01 01 0146 54832 6360 0 -5.0 2.5 -0.8 5.6 -7.8 153.6 +2009 01 01 0147 54832 6420 0 -4.9 2.7 -0.8 5.6 -8.4 150.9 +2009 01 01 0148 54832 6480 0 -4.8 2.7 -1.0 5.6 -10.3 150.2 +2009 01 01 0149 54832 6540 0 -4.7 2.9 -1.0 5.6 -10.7 148.4 +2009 01 01 0150 54832 6600 0 -4.6 2.9 -0.8 5.5 -8.3 147.9 +2009 01 01 0151 54832 6660 0 -4.7 2.9 -0.7 5.6 -7.0 148.7 +2009 01 01 0152 54832 6720 0 -4.5 3.2 -0.9 5.6 -9.2 144.0 +2009 01 01 0153 54832 6780 0 -4.8 2.9 -0.6 5.6 -6.0 149.0 +2009 01 01 0154 54832 6840 0 -4.4 3.2 -0.9 5.5 -9.1 143.7 +2009 01 01 0155 54832 6900 0 -4.4 3.2 -0.9 5.6 -9.2 144.1 +2009 01 01 0156 54832 6960 0 -4.4 3.3 -0.9 5.6 -8.8 143.6 +2009 01 01 0157 54832 7020 0 -4.4 3.3 -0.9 5.5 -9.0 143.4 +2009 01 01 0158 54832 7080 0 -4.5 3.2 -0.9 5.6 -9.1 144.3 +2009 01 01 0159 54832 7140 0 -4.4 3.3 -0.8 5.6 -7.7 143.2 +2009 01 01 0200 54832 7200 0 -4.4 3.4 -0.8 5.6 -8.0 142.5 +2009 01 01 0201 54832 7260 0 -4.3 3.5 -0.6 5.6 -6.3 140.9 +2009 01 01 0202 54832 7320 0 -4.5 3.2 -0.5 5.6 -5.4 144.1 +2009 01 01 0203 54832 7380 0 -4.3 3.5 -0.6 5.5 -6.4 141.0 +2009 01 01 0204 54832 7440 0 -4.1 3.7 -0.4 5.5 -4.6 137.9 +2009 01 01 0205 54832 7500 0 -3.8 4.0 0.1 5.5 0.7 133.5 +2009 01 01 0206 54832 7560 0 -3.9 3.8 -0.2 5.5 -1.9 135.7 +2009 01 01 0207 54832 7620 0 -4.0 3.6 -0.4 5.4 -4.3 137.8 +2009 01 01 0208 54832 7680 0 -4.1 3.1 -0.8 5.2 -8.7 142.5 +2009 01 01 0209 54832 7740 0 -4.0 3.2 -0.2 5.2 -1.9 141.5 +2009 01 01 0210 54832 7800 0 -3.8 3.0 -0.2 4.9 -2.2 141.3 +2009 01 01 0211 54832 7860 0 -3.7 3.0 0.4 4.8 5.2 141.2 +2009 01 01 0212 54832 7920 0 -3.1 3.2 1.6 4.8 20.1 134.5 +2009 01 01 0213 54832 7980 0 -3.6 2.9 0.9 4.7 10.5 141.8 +2009 01 01 0214 54832 8040 0 -3.7 2.8 0.4 4.7 5.0 142.8 +2009 01 01 0215 54832 8100 0 -3.2 2.7 0.5 4.2 7.3 139.3 +2009 01 01 0216 54832 8160 0 -2.9 2.9 0.5 4.2 7.5 134.6 +2009 01 01 0217 54832 8220 0 -2.8 2.7 0.6 3.9 8.5 136.2 +2009 01 01 0218 54832 8280 0 -2.9 2.7 0.4 4.0 6.1 137.6 +2009 01 01 0219 54832 8340 0 -2.8 2.7 0.6 3.9 8.4 136.8 +2009 01 01 0220 54832 8400 0 -3.0 2.7 0.5 4.1 7.2 138.4 +2009 01 01 0221 54832 8460 0 -3.8 3.1 0.3 4.9 3.2 141.1 +2009 01 01 0222 54832 8520 0 -3.7 3.2 0.5 4.9 6.3 138.6 +2009 01 01 0223 54832 8580 0 -3.8 3.2 0.4 5.0 4.1 140.2 +2009 01 01 0224 54832 8640 0 -4.1 3.2 0.2 5.2 2.1 142.2 +2009 01 01 0225 54832 8700 0 -4.4 3.1 -0.2 5.4 -2.6 144.4 +2009 01 01 0226 54832 8760 0 -4.5 3.2 -0.3 5.6 -3.0 144.6 +2009 01 01 0227 54832 8820 0 -4.6 2.7 -1.2 5.4 -12.4 149.7 +2009 01 01 0228 54832 8880 0 -4.6 2.4 -1.5 5.4 -16.1 152.2 +2009 01 01 0229 54832 8940 0 -4.7 2.5 -1.5 5.5 -15.8 151.9 +2009 01 01 0230 54832 9000 0 -4.6 2.5 -1.5 5.4 -16.4 150.8 +2009 01 01 0231 54832 9060 0 -4.4 2.7 -1.6 5.4 -17.1 148.6 +2009 01 01 0232 54832 9120 0 -4.6 2.6 -1.4 5.4 -14.8 150.3 +2009 01 01 0233 54832 9180 0 -4.7 2.7 -0.8 5.5 -8.6 150.1 +2009 01 01 0234 54832 9240 0 -4.7 2.7 -1.0 5.6 -10.7 150.1 +2009 01 01 0235 54832 9300 0 -4.7 2.7 -1.2 5.6 -12.1 150.0 +2009 01 01 0236 54832 9360 0 -4.7 2.8 -1.3 5.6 -13.4 149.2 +2009 01 01 0237 54832 9420 0 -4.6 2.9 -1.2 5.6 -12.1 148.0 +2009 01 01 0238 54832 9480 0 -5.0 2.3 -1.2 5.6 -12.0 155.2 +2009 01 01 0239 54832 9540 0 -4.9 2.5 -1.1 5.6 -11.2 153.2 +2009 01 01 0240 54832 9600 0 -4.8 2.6 -1.0 5.6 -10.6 151.4 +2009 01 01 0241 54832 9660 0 -4.7 2.6 -1.2 5.5 -12.3 151.6 +2009 01 01 0242 54832 9720 0 -4.6 2.4 -1.7 5.5 -18.4 152.4 +2009 01 01 0243 54832 9780 0 -4.6 2.4 -1.8 5.5 -18.6 152.9 +2009 01 01 0244 54832 9840 0 -4.7 2.6 -1.6 5.6 -16.5 151.3 +2009 01 01 0245 54832 9900 0 -4.8 2.6 -1.5 5.7 -14.8 151.6 +2009 01 01 0246 54832 9960 0 -4.1 3.3 -1.4 5.5 -14.6 141.2 +2009 01 01 0247 54832 10020 0 -4.3 3.1 -1.4 5.5 -15.3 143.6 +2009 01 01 0248 54832 10080 0 -4.3 3.0 -1.3 5.4 -13.5 144.8 +2009 01 01 0249 54832 10140 0 -3.7 3.3 -1.2 5.2 -13.8 138.3 +2009 01 01 0250 54832 10200 0 -4.0 2.9 -1.6 5.3 -18.1 143.9 +2009 01 01 0251 54832 10260 0 -4.1 2.7 -1.8 5.2 -19.8 146.2 +2009 01 01 0252 54832 10320 0 -3.8 2.9 -1.8 5.1 -20.7 143.3 +2009 01 01 0253 54832 10380 0 -3.9 2.8 -1.9 5.2 -21.9 144.3 +2009 01 01 0254 54832 10440 0 -4.0 2.6 -2.1 5.2 -23.9 146.8 +2009 01 01 0255 54832 10500 0 -3.9 2.6 -2.1 5.1 -24.1 146.6 +2009 01 01 0256 54832 10560 0 -3.8 2.7 -2.2 5.1 -24.9 145.1 +2009 01 01 0257 54832 10620 0 -3.8 2.7 -2.1 5.2 -24.0 144.4 +2009 01 01 0258 54832 10680 0 -3.9 2.7 -2.0 5.1 -23.6 145.2 +2009 01 01 0259 54832 10740 0 -3.8 2.8 -1.9 5.1 -21.4 143.3 +2009 01 01 0300 54832 10800 0 -4.0 2.7 -2.0 5.2 -22.0 146.0 +2009 01 01 0301 54832 10860 0 -3.8 2.8 -2.0 5.2 -23.3 144.2 +2009 01 01 0302 54832 10920 0 -3.9 2.8 -2.1 5.2 -23.8 144.3 +2009 01 01 0303 54832 10980 0 -3.9 2.7 -2.1 5.2 -24.1 145.6 +2009 01 01 0304 54832 11040 0 -3.9 2.7 -2.3 5.2 -25.8 144.9 +2009 01 01 0305 54832 11100 0 -3.6 2.9 -2.3 5.1 -26.1 141.5 +2009 01 01 0306 54832 11160 0 -3.1 3.1 -2.1 4.9 -25.0 135.1 +2009 01 01 0307 54832 11220 0 -3.2 3.0 -2.2 5.0 -26.7 136.9 +2009 01 01 0308 54832 11280 0 -3.6 2.7 -2.2 5.0 -26.0 143.0 +2009 01 01 0309 54832 11340 0 -3.6 2.5 -2.3 5.0 -27.0 145.2 +2009 01 01 0310 54832 11400 0 -3.5 2.7 -2.2 4.9 -26.3 142.7 +2009 01 01 0311 54832 11460 0 -3.7 2.6 -2.3 5.1 -26.7 144.5 +2009 01 01 0312 54832 11520 0 -3.8 2.8 -2.3 5.2 -26.6 144.0 +2009 01 01 0313 54832 11580 0 -3.9 2.8 -2.4 5.3 -26.9 144.2 +2009 01 01 0314 54832 11640 0 -4.0 2.6 -2.5 5.4 -27.5 146.7 +2009 01 01 0315 54832 11700 0 -4.1 2.4 -2.5 5.4 -28.2 149.7 +2009 01 01 0316 54832 11760 0 -3.9 2.5 -2.3 5.2 -26.2 147.5 +2009 01 01 0317 54832 11820 0 -4.0 2.5 -2.2 5.2 -25.0 147.8 +2009 01 01 0318 54832 11880 0 -4.1 2.4 -2.2 5.2 -25.1 149.1 +2009 01 01 0319 54832 11940 0 -4.2 2.4 -2.3 5.3 -25.2 150.4 +2009 01 01 0320 54832 12000 0 -4.1 2.4 -2.4 5.3 -26.5 150.1 +2009 01 01 0321 54832 12060 0 -4.3 2.3 -2.4 5.4 -26.5 152.0 +2009 01 01 0322 54832 12120 0 -4.3 2.2 -2.6 5.5 -27.9 152.4 +2009 01 01 0323 54832 12180 0 -4.2 2.3 -2.6 5.5 -28.6 151.8 +2009 01 01 0324 54832 12240 0 -4.3 2.2 -2.5 5.4 -27.7 152.5 +2009 01 01 0325 54832 12300 0 -4.2 2.3 -2.5 5.4 -27.0 151.1 +2009 01 01 0326 54832 12360 0 -4.2 2.4 -2.4 5.4 -26.4 150.0 +2009 01 01 0327 54832 12420 0 -4.1 2.4 -2.5 5.4 -27.4 149.6 +2009 01 01 0328 54832 12480 0 -4.2 2.3 -2.5 5.4 -27.2 151.2 +2009 01 01 0329 54832 12540 0 -4.3 1.5 -2.8 5.4 -31.7 161.3 +2009 01 01 0330 54832 12600 0 -4.2 1.7 -2.4 5.1 -27.8 158.1 +2009 01 01 0331 54832 12660 0 -4.1 1.9 -2.6 5.2 -29.5 154.9 +2009 01 01 0332 54832 12720 0 -3.8 1.8 -2.8 5.1 -33.2 154.4 +2009 01 01 0333 54832 12780 0 -3.7 1.9 -2.6 4.9 -31.7 152.1 +2009 01 01 0334 54832 12840 0 -3.9 0.8 -2.4 4.7 -31.3 168.8 +2009 01 01 0335 54832 12900 0 -3.6 0.5 -3.1 4.8 -40.2 172.7 +2009 01 01 0336 54832 12960 0 -4.2 0.4 -2.5 4.9 -30.7 174.5 +2009 01 01 0337 54832 13020 0 -4.3 0.5 -2.3 4.9 -28.1 173.7 +2009 01 01 0338 54832 13080 0 -4.3 0.8 -2.4 5.0 -28.7 170.0 +2009 01 01 0339 54832 13140 0 -4.7 0.2 -1.6 5.0 -19.3 177.0 +2009 01 01 0340 54832 13200 0 -4.8 0.1 -1.4 5.0 -16.0 179.3 +2009 01 01 0341 54832 13260 0 -4.8 -0.2 -1.2 5.0 -13.7 182.2 +2009 01 01 0342 54832 13320 0 -4.8 -0.5 -0.9 4.9 -10.8 185.4 +2009 01 01 0343 54832 13380 0 -4.4 -0.2 -1.9 4.8 -22.7 182.9 +2009 01 01 0344 54832 13440 0 -4.3 -0.5 -2.0 4.7 -25.1 186.1 +2009 01 01 0345 54832 13500 0 -4.2 -0.6 -1.9 4.7 -23.8 188.7 +2009 01 01 0346 54832 13560 0 -4.1 -0.8 -1.8 4.6 -23.1 190.5 +2009 01 01 0347 54832 13620 0 -4.3 -0.8 -1.8 4.7 -22.9 190.4 +2009 01 01 0348 54832 13680 0 -4.1 -1.2 -1.7 4.6 -21.6 196.5 +2009 01 01 0349 54832 13740 0 -3.9 -1.1 -1.7 4.4 -22.6 196.4 +2009 01 01 0350 54832 13800 0 -3.7 -1.0 -1.7 4.2 -23.4 194.9 +2009 01 01 0351 54832 13860 0 -3.7 -0.7 -1.9 4.2 -26.2 190.1 +2009 01 01 0352 54832 13920 0 -3.8 -0.7 -2.0 4.3 -27.5 191.0 +2009 01 01 0353 54832 13980 0 -3.8 -0.7 -2.0 4.4 -27.9 190.8 +2009 01 01 0354 54832 14040 0 -3.2 -1.7 -1.5 3.9 -23.0 207.3 +2009 01 01 0355 54832 14100 0 -1.6 -3.1 -1.1 3.7 -17.1 243.6 +2009 01 01 0356 54832 14160 0 -2.5 -2.3 -1.3 3.6 -20.2 223.3 +2009 01 01 0357 54832 14220 0 -3.3 -2.1 -1.6 4.2 -22.6 212.1 +2009 01 01 0358 54832 14280 0 -3.0 -2.4 -1.4 4.1 -19.9 218.7 +2009 01 01 0359 54832 14340 0 -3.5 -1.6 -1.9 4.3 -26.4 204.8 +2009 01 01 0400 54832 14400 0 -3.4 -1.9 -2.0 4.4 -27.4 209.3 +2009 01 01 0401 54832 14460 0 -3.6 -1.4 -2.0 4.4 -26.7 201.6 +2009 01 01 0402 54832 14520 0 -3.8 -1.2 -1.8 4.4 -24.9 197.5 +2009 01 01 0403 54832 14580 0 -3.6 -1.4 -2.0 4.4 -26.9 201.2 +2009 01 01 0404 54832 14640 0 -3.7 -1.3 -2.1 4.4 -28.0 199.7 +2009 01 01 0405 54832 14700 0 -2.6 -2.5 -1.0 3.8 -15.6 224.0 +2009 01 01 0406 54832 14760 0 -2.2 -2.5 -0.8 3.4 -13.0 229.3 +2009 01 01 0407 54832 14820 0 -1.3 -2.8 -0.1 3.1 -2.4 245.8 +2009 01 01 0408 54832 14880 0 -1.1 -2.9 -0.0 3.1 -0.6 248.3 +2009 01 01 0409 54832 14940 0 -1.1 -3.0 -0.1 3.2 -2.2 249.7 +2009 01 01 0410 54832 15000 0 -1.7 -2.7 -0.1 3.3 -2.3 237.5 +2009 01 01 0411 54832 15060 0 -1.5 -2.7 -0.1 3.1 -2.8 240.8 +2009 01 01 0412 54832 15120 0 -1.8 -2.5 -0.0 3.1 -0.5 235.2 +2009 01 01 0413 54832 15180 0 -1.9 -2.5 -0.2 3.1 -2.9 233.4 +2009 01 01 0414 54832 15240 0 -2.0 -2.4 -0.2 3.1 -3.1 231.1 +2009 01 01 0415 54832 15300 0 -1.5 -2.8 -0.2 3.2 -3.5 241.8 +2009 01 01 0416 54832 15360 0 -0.2 -3.4 0.4 3.5 6.9 266.0 +2009 01 01 0417 54832 15420 0 -0.2 -3.5 0.4 3.5 6.3 267.5 +2009 01 01 0418 54832 15480 0 -0.0 -3.5 0.3 3.5 5.1 269.2 +2009 01 01 0419 54832 15540 0 -0.2 -3.5 0.3 3.5 4.6 267.0 +2009 01 01 0420 54832 15600 0 -0.5 -3.2 0.0 3.2 0.1 260.4 +2009 01 01 0421 54832 15660 0 -0.3 -3.4 0.4 3.5 6.3 264.4 +2009 01 01 0422 54832 15720 0 -0.3 -3.5 0.6 3.5 9.0 265.4 +2009 01 01 0423 54832 15780 0 -0.5 -3.4 0.8 3.5 13.4 261.4 +2009 01 01 0424 54832 15840 0 -0.8 -3.0 1.4 3.4 25.1 255.3 +2009 01 01 0425 54832 15900 0 -0.6 -3.3 1.4 3.6 23.2 259.9 +2009 01 01 0426 54832 15960 0 -0.1 -3.3 0.8 3.4 13.0 268.4 +2009 01 01 0427 54832 16020 0 0.7 -3.1 -0.1 3.2 -1.3 282.5 +2009 01 01 0428 54832 16080 0 0.3 -2.8 -0.9 3.0 -18.3 276.1 +2009 01 01 0429 54832 16140 0 0.6 -2.7 -0.9 2.9 -17.9 283.1 +2009 01 01 0430 54832 16200 0 0.8 -2.5 -1.0 2.8 -20.2 287.5 +2009 01 01 0431 54832 16260 0 0.2 -2.8 -0.4 2.9 -8.7 273.6 +2009 01 01 0432 54832 16320 0 0.1 -2.8 -0.2 2.9 -3.6 272.7 +2009 01 01 0433 54832 16380 0 0.7 -2.7 -0.7 2.8 -13.6 284.2 +2009 01 01 0434 54832 16440 0 0.6 -3.1 -0.1 3.2 -2.4 280.6 +2009 01 01 0435 54832 16500 0 0.9 -2.9 -0.1 3.0 -1.3 286.7 +2009 01 01 0436 54832 16560 0 0.9 -2.7 0.1 2.8 2.2 288.9 +2009 01 01 0437 54832 16620 0 0.6 -3.1 0.8 3.2 14.7 281.7 +2009 01 01 0438 54832 16680 0 0.6 -3.2 1.2 3.4 19.8 280.8 +2009 01 01 0439 54832 16740 0 0.6 -3.1 2.0 3.8 31.8 281.0 +2009 01 01 0440 54832 16800 0 0.3 -3.2 1.6 3.6 26.1 275.6 +2009 01 01 0441 54832 16860 0 -3.0 0.0 -1.6 3.4 -27.3 180.0 +2009 01 01 0442 54832 16920 0 -2.3 0.4 -2.4 3.4 -45.6 171.1 +2009 01 01 0443 54832 16980 0 -1.9 1.5 -1.8 3.1 -36.4 142.1 +2009 01 01 0444 54832 17040 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0445 54832 17100 0 -2.0 1.3 -2.6 3.5 -47.6 147.6 +2009 01 01 0446 54832 17160 0 -1.9 1.1 -2.6 3.4 -49.3 151.5 +2009 01 01 0447 54832 17220 0 -2.9 1.1 -1.9 3.7 -31.0 158.9 +2009 01 01 0448 54832 17280 0 -2.8 0.8 -1.9 3.5 -32.9 165.0 +2009 01 01 0449 54832 17340 0 -2.7 0.8 -2.2 3.6 -37.6 164.1 +2009 01 01 0450 54832 17400 0 -1.9 -0.1 -2.9 3.5 -57.6 182.9 +2009 01 01 0451 54832 17460 0 -1.3 -1.6 -3.4 4.0 -58.6 231.5 +2009 01 01 0452 54832 17520 0 -3.3 -0.2 -2.4 4.1 -36.3 183.5 +2009 01 01 0453 54832 17580 0 -3.3 -0.3 -2.4 4.1 -36.1 185.1 +2009 01 01 0454 54832 17640 0 -3.3 0.1 -2.3 4.1 -34.2 178.6 +2009 01 01 0455 54832 17700 0 -3.1 0.1 -2.6 4.1 -39.1 178.1 +2009 01 01 0456 54832 17760 0 -3.4 -0.5 -2.7 4.3 -37.7 188.7 +2009 01 01 0457 54832 17820 0 -2.6 0.8 -2.8 3.9 -45.8 164.1 +2009 01 01 0458 54832 17880 0 -1.9 0.8 -3.0 3.6 -55.4 156.0 +2009 01 01 0459 54832 17940 0 -2.3 0.1 -3.1 3.9 -52.7 176.4 +2009 01 01 0500 54832 18000 0 -2.2 0.5 -2.9 3.7 -52.6 166.5 +2009 01 01 0501 54832 18060 0 -1.8 1.2 -3.0 3.8 -54.2 146.4 +2009 01 01 0502 54832 18120 0 -1.9 0.9 -3.1 3.8 -55.6 154.5 +2009 01 01 0503 54832 18180 0 -1.9 -0.2 -2.9 3.5 -57.3 186.3 +2009 01 01 0504 54832 18240 0 -1.2 -2.9 -2.2 3.8 -34.7 246.5 +2009 01 01 0505 54832 18300 0 -0.9 -2.3 -3.2 4.1 -52.0 248.9 +2009 01 01 0506 54832 18360 0 -1.0 -2.1 -3.4 4.1 -55.2 245.4 +2009 01 01 0507 54832 18420 0 -1.3 -1.6 -3.4 4.0 -58.7 231.3 +2009 01 01 0508 54832 18480 0 -1.1 0.4 -3.8 4.0 -72.8 161.7 +2009 01 01 0509 54832 18540 0 -2.3 -0.9 -3.1 4.0 -52.0 200.8 +2009 01 01 0510 54832 18600 0 -2.2 -0.5 -3.5 4.2 -57.5 191.5 +2009 01 01 0511 54832 18660 0 -2.0 -0.9 -3.7 4.3 -59.3 203.6 +2009 01 01 0512 54832 18720 0 -1.3 -1.3 -3.6 4.0 -62.9 225.1 +2009 01 01 0513 54832 18780 0 -0.8 -0.8 -4.1 4.3 -75.0 227.1 +2009 01 01 0514 54832 18840 0 -1.7 -1.5 -3.6 4.2 -57.7 222.0 +2009 01 01 0515 54832 18900 0 -1.5 -1.6 -3.7 4.3 -59.5 226.1 +2009 01 01 0516 54832 18960 0 -1.4 -0.8 -3.8 4.2 -67.0 208.5 +2009 01 01 0517 54832 19020 0 -1.9 -2.2 -3.3 4.3 -48.7 229.6 +2009 01 01 0518 54832 19080 0 -2.3 -0.9 -3.6 4.4 -56.1 201.6 +2009 01 01 0519 54832 19140 0 -2.1 -1.1 -3.6 4.4 -56.8 207.7 +2009 01 01 0520 54832 19200 0 -2.6 -0.8 -3.3 4.3 -50.6 197.0 +2009 01 01 0521 54832 19260 0 -1.5 0.1 -3.8 4.1 -68.0 176.5 +2009 01 01 0522 54832 19320 0 -1.7 0.2 -3.5 3.9 -63.6 173.1 +2009 01 01 0523 54832 19380 0 -1.4 0.5 -3.7 4.0 -68.2 159.5 +2009 01 01 0524 54832 19440 0 -2.1 0.7 -3.4 4.1 -57.1 162.9 +2009 01 01 0525 54832 19500 0 -1.7 0.5 -3.6 4.1 -63.2 162.7 +2009 01 01 0526 54832 19560 0 -0.9 0.5 -3.9 4.0 -74.8 149.2 +2009 01 01 0527 54832 19620 0 -0.3 0.6 -4.0 4.1 -80.6 113.0 +2009 01 01 0528 54832 19680 0 0.6 -0.4 -4.0 4.1 -80.7 327.5 +2009 01 01 0529 54832 19740 0 -0.3 0.1 -4.4 4.4 -85.6 159.6 +2009 01 01 0530 54832 19800 0 0.3 0.1 -4.3 4.3 -85.4 19.3 +2009 01 01 0531 54832 19860 0 0.7 -0.7 -4.0 4.1 -76.3 313.7 +2009 01 01 0532 54832 19920 0 0.7 -0.7 -4.1 4.2 -76.3 312.0 +2009 01 01 0533 54832 19980 0 0.4 -0.5 -4.2 4.2 -81.8 308.7 +2009 01 01 0534 54832 20040 0 0.2 -0.1 -4.4 4.4 -87.1 344.4 +2009 01 01 0535 54832 20100 0 0.5 -0.1 -4.3 4.3 -83.2 350.7 +2009 01 01 0536 54832 20160 0 0.2 0.3 -4.5 4.5 -85.9 59.0 +2009 01 01 0537 54832 20220 0 0.7 0.5 -4.5 4.5 -79.9 35.2 +2009 01 01 0538 54832 20280 0 0.4 1.0 -4.3 4.4 -76.2 66.8 +2009 01 01 0539 54832 20340 0 0.5 0.8 -4.4 4.5 -77.5 56.1 +2009 01 01 0540 54832 20400 0 0.8 1.5 -4.1 4.5 -67.2 63.0 +2009 01 01 0541 54832 20460 0 0.2 2.4 -4.1 4.7 -60.1 85.2 +2009 01 01 0542 54832 20520 0 0.6 2.5 -3.6 4.4 -54.3 76.5 +2009 01 01 0543 54832 20580 0 0.8 2.1 -3.9 4.5 -59.6 69.7 +2009 01 01 0544 54832 20640 0 1.7 2.2 -3.2 4.2 -48.9 52.9 +2009 01 01 0545 54832 20700 0 2.0 2.5 -2.7 4.2 -40.3 51.7 +2009 01 01 0546 54832 20760 0 0.6 3.1 -2.9 4.3 -43.2 78.9 +2009 01 01 0547 54832 20820 0 0.6 3.0 -2.7 4.1 -41.2 79.1 +2009 01 01 0548 54832 20880 0 0.4 3.3 -2.6 4.2 -38.1 82.9 +2009 01 01 0549 54832 20940 0 0.4 3.2 -2.9 4.3 -42.1 82.6 +2009 01 01 0550 54832 21000 0 0.7 3.5 -2.2 4.2 -32.3 78.4 +2009 01 01 0551 54832 21060 0 0.2 3.7 -1.8 4.1 -26.6 86.6 +2009 01 01 0552 54832 21120 0 0.7 3.5 -1.8 4.0 -26.9 79.2 +2009 01 01 0553 54832 21180 0 -0.5 2.7 -3.2 4.2 -49.6 99.9 +2009 01 01 0554 54832 21240 0 -1.4 1.7 -3.8 4.4 -59.6 129.0 +2009 01 01 0555 54832 21300 0 -2.4 2.5 -2.6 4.3 -37.0 133.1 +2009 01 01 0556 54832 21360 0 -2.8 2.7 -2.3 4.5 -31.0 135.4 +2009 01 01 0557 54832 21420 0 -3.2 2.8 -1.6 4.6 -19.9 138.8 +2009 01 01 0558 54832 21480 0 -2.6 0.2 -3.8 4.6 -55.7 174.8 +2009 01 01 0559 54832 21540 0 -1.7 0.4 -4.2 4.6 -68.1 167.4 +2009 01 01 0600 54832 21600 0 -2.0 1.3 -3.7 4.4 -56.9 146.1 +2009 01 01 0601 54832 21660 0 -2.2 0.7 -3.8 4.4 -58.8 162.1 +2009 01 01 0602 54832 21720 0 -2.9 0.5 -3.5 4.6 -50.4 170.6 +2009 01 01 0603 54832 21780 0 -2.5 0.9 -3.6 4.5 -53.6 161.2 +2009 01 01 0604 54832 21840 0 -1.5 1.7 -4.3 4.8 -62.5 131.3 +2009 01 01 0605 54832 21900 0 -1.7 1.1 -4.4 4.8 -65.6 146.4 +2009 01 01 0606 54832 21960 0 -1.6 1.2 -4.5 4.9 -66.2 142.4 +2009 01 01 0607 54832 22020 0 -1.5 1.0 -4.5 4.9 -67.7 147.1 +2009 01 01 0608 54832 22080 0 -1.4 1.2 -4.5 4.8 -67.6 140.5 +2009 01 01 0609 54832 22140 0 -0.9 1.1 -4.1 4.4 -70.7 130.3 +2009 01 01 0610 54832 22200 0 -1.1 0.9 -3.6 3.9 -68.4 142.1 +2009 01 01 0611 54832 22260 0 -0.1 1.1 -4.1 4.3 -75.1 96.2 +2009 01 01 0612 54832 22320 0 0.6 1.3 -3.9 4.2 -69.2 65.5 +2009 01 01 0613 54832 22380 0 -1.9 -0.2 -1.7 2.6 -41.7 184.6 +2009 01 01 0614 54832 22440 0 -4.5 -1.7 0.2 4.8 2.2 201.1 +2009 01 01 0615 54832 22500 0 -4.9 -1.7 -0.3 5.2 -3.3 199.2 +2009 01 01 0616 54832 22560 0 -4.8 -1.6 -0.5 5.1 -5.9 198.7 +2009 01 01 0617 54832 22620 0 -4.9 -1.2 -1.3 5.2 -14.3 193.3 +2009 01 01 0618 54832 22680 0 -5.0 -1.1 -0.6 5.2 -7.0 192.0 +2009 01 01 0619 54832 22740 0 -5.0 -0.4 -0.8 5.1 -9.1 184.1 +2009 01 01 0620 54832 22800 0 -4.9 1.2 -0.7 5.1 -8.2 166.2 +2009 01 01 0621 54832 22860 0 -4.7 1.7 -1.0 5.1 -11.3 160.8 +2009 01 01 0622 54832 22920 0 -4.6 0.6 -2.1 5.1 -24.9 172.8 +2009 01 01 0623 54832 22980 0 -4.6 0.3 -1.9 5.0 -22.4 176.2 +2009 01 01 0624 54832 23040 0 -4.5 -0.4 -2.2 5.0 -25.6 184.8 +2009 01 01 0625 54832 23100 0 -4.1 -0.6 -2.5 4.9 -30.8 187.8 +2009 01 01 0626 54832 23160 0 -3.6 0.2 -3.2 4.8 -41.9 177.6 +2009 01 01 0627 54832 23220 0 -3.7 0.3 -3.1 4.9 -39.8 175.9 +2009 01 01 0628 54832 23280 0 -4.0 0.2 -2.8 4.9 -35.5 176.4 +2009 01 01 0629 54832 23340 0 -3.5 0.1 -3.2 4.7 -42.6 177.9 +2009 01 01 0630 54832 23400 0 -3.4 -0.1 -3.4 4.8 -44.5 181.7 +2009 01 01 0631 54832 23460 0 -3.6 -0.1 -3.1 4.8 -40.3 182.2 +2009 01 01 0632 54832 23520 0 -3.6 0.2 -3.0 4.7 -39.2 176.2 +2009 01 01 0633 54832 23580 0 -3.7 0.6 -2.9 4.7 -38.0 171.2 +2009 01 01 0634 54832 23640 0 -3.4 1.2 -2.9 4.7 -39.1 161.2 +2009 01 01 0635 54832 23700 0 -3.4 -0.6 -3.0 4.6 -40.7 190.5 +2009 01 01 0636 54832 23760 0 -3.5 -0.8 -2.9 4.6 -39.5 192.7 +2009 01 01 0637 54832 23820 0 -3.3 -0.7 -3.3 4.7 -44.3 192.6 +2009 01 01 0638 54832 23880 0 -3.1 -0.1 -3.3 4.5 -46.3 182.1 +2009 01 01 0639 54832 23940 0 -2.6 0.7 -3.7 4.6 -54.2 165.0 +2009 01 01 0640 54832 24000 0 -4.4 -2.3 -1.2 5.1 -13.1 208.1 +2009 01 01 0641 54832 24060 0 -4.8 -2.0 -1.2 5.4 -13.1 202.4 +2009 01 01 0642 54832 24120 0 -4.5 -2.0 -1.9 5.3 -21.6 203.9 +2009 01 01 0643 54832 24180 0 -4.3 -2.0 -2.2 5.2 -24.7 205.1 +2009 01 01 0644 54832 24240 0 -3.8 -1.5 -3.1 5.1 -36.7 201.7 +2009 01 01 0645 54832 24300 0 -3.9 -1.3 -3.1 5.2 -37.0 199.0 +2009 01 01 0646 54832 24360 0 -3.8 -1.2 -3.1 5.1 -37.5 197.5 +2009 01 01 0647 54832 24420 0 -4.2 -0.9 -2.8 5.2 -33.3 192.5 +2009 01 01 0648 54832 24480 0 -4.7 -1.0 -2.1 5.2 -23.1 192.6 +2009 01 01 0649 54832 24540 0 -4.2 -1.3 -2.6 5.1 -31.1 197.9 +2009 01 01 0650 54832 24600 0 -4.0 -1.5 -2.5 4.9 -30.7 200.5 +2009 01 01 0651 54832 24660 0 -3.9 -0.8 1.3 4.2 18.3 191.6 +2009 01 01 0652 54832 24720 0 -3.9 0.1 2.8 4.8 35.9 178.7 +2009 01 01 0653 54832 24780 0 -3.7 -0.1 3.1 4.8 39.7 182.2 +2009 01 01 0654 54832 24840 0 -3.5 -0.6 3.2 4.8 42.6 189.7 +2009 01 01 0655 54832 24900 0 -4.0 -0.4 2.7 4.9 34.1 185.4 +2009 01 01 0656 54832 24960 0 -3.9 -0.4 2.8 4.8 35.4 185.5 +2009 01 01 0657 54832 25020 0 -3.9 -0.3 2.8 4.8 35.5 184.4 +2009 01 01 0658 54832 25080 0 -4.1 -0.5 2.7 4.9 33.8 187.1 +2009 01 01 0659 54832 25140 0 -4.0 -0.6 2.8 5.0 35.0 188.8 +2009 01 01 0700 54832 25200 0 -4.1 -0.7 2.5 4.9 31.5 189.5 +2009 01 01 0701 54832 25260 0 -3.8 -0.6 2.8 4.8 36.2 189.2 +2009 01 01 0702 54832 25320 0 -3.8 -0.7 2.8 4.8 36.3 191.2 +2009 01 01 0703 54832 25380 0 -3.7 -0.9 2.8 4.7 36.4 194.1 +2009 01 01 0704 54832 25440 0 -3.8 -1.2 2.6 4.8 33.0 197.8 +2009 01 01 0705 54832 25500 0 -3.8 -1.1 2.7 4.8 34.9 195.8 +2009 01 01 0706 54832 25560 0 -4.0 -0.8 2.7 4.9 33.7 191.7 +2009 01 01 0707 54832 25620 0 -4.3 -1.1 2.4 5.1 28.6 193.9 +2009 01 01 0708 54832 25680 0 -4.3 -1.0 2.4 5.1 28.9 192.6 +2009 01 01 0709 54832 25740 0 -4.1 -0.9 2.6 4.9 32.1 192.9 +2009 01 01 0710 54832 25800 0 -3.8 -0.5 2.9 4.8 36.7 187.4 +2009 01 01 0711 54832 25860 0 -3.9 -1.0 2.6 4.8 32.9 194.3 +2009 01 01 0712 54832 25920 0 -4.3 -1.1 2.1 4.9 25.8 194.6 +2009 01 01 0713 54832 25980 0 -4.1 -1.3 2.2 4.8 27.5 197.3 +2009 01 01 0714 54832 26040 0 -3.5 -0.7 -0.6 3.6 -9.3 191.1 +2009 01 01 0715 54832 26100 0 -2.4 0.3 -3.9 4.6 -58.6 172.3 +2009 01 01 0716 54832 26160 0 -2.8 0.3 -3.8 4.7 -52.9 174.5 +2009 01 01 0717 54832 26220 0 -2.3 0.2 -4.2 4.8 -60.6 174.5 +2009 01 01 0718 54832 26280 0 -1.9 0.2 -4.4 4.8 -67.1 173.6 +2009 01 01 0719 54832 26340 0 -2.1 0.3 -4.4 4.9 -63.9 172.2 +2009 01 01 0720 54832 26400 0 -2.0 0.5 -4.3 4.7 -63.9 167.1 +2009 01 01 0721 54832 26460 0 -0.9 0.5 -4.4 4.6 -76.8 149.2 +2009 01 01 0722 54832 26520 0 -0.2 0.3 -4.6 4.6 -85.9 127.8 +2009 01 01 0723 54832 26580 0 -0.0 0.6 -4.6 4.6 -82.6 92.0 +2009 01 01 0724 54832 26640 0 -0.5 0.6 -4.6 4.7 -80.8 130.7 +2009 01 01 0725 54832 26700 0 -0.4 0.1 -4.6 4.6 -84.7 170.7 +2009 01 01 0726 54832 26760 0 -0.3 -0.1 -4.6 4.6 -85.8 190.5 +2009 01 01 0727 54832 26820 0 -0.5 0.3 -4.5 4.6 -82.4 153.9 +2009 01 01 0728 54832 26880 0 -0.7 0.5 -4.6 4.7 -79.1 142.6 +2009 01 01 0729 54832 26940 0 -0.4 0.6 -4.5 4.5 -80.6 121.1 +2009 01 01 0730 54832 27000 0 -0.7 0.6 -4.5 4.6 -78.6 141.9 +2009 01 01 0731 54832 27060 0 -0.9 0.4 -4.6 4.7 -77.7 155.5 +2009 01 01 0732 54832 27120 0 -1.0 0.4 -4.5 4.7 -76.5 159.8 +2009 01 01 0733 54832 27180 0 -1.3 0.4 -4.5 4.8 -73.1 164.3 +2009 01 01 0734 54832 27240 0 -1.6 0.1 -4.5 4.8 -70.5 174.9 +2009 01 01 0735 54832 27300 0 -2.7 -0.2 -4.1 4.9 -56.6 184.9 +2009 01 01 0736 54832 27360 0 -2.7 0.1 -4.2 5.0 -57.3 177.8 +2009 01 01 0737 54832 27420 0 -2.6 -0.1 -4.2 4.9 -58.7 181.5 +2009 01 01 0738 54832 27480 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0739 54832 27540 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0740 54832 27600 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0741 54832 27660 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0742 54832 27720 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0743 54832 27780 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0744 54832 27840 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0745 54832 27900 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0746 54832 27960 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0747 54832 28020 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0748 54832 28080 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 0749 54832 28140 0 -3.9 0.1 -3.4 5.2 -40.7 179.0 +2009 01 01 0750 54832 28200 0 -4.2 0.1 -2.9 5.1 -34.5 179.1 +2009 01 01 0751 54832 28260 0 -4.6 0.1 -2.5 5.2 -28.4 178.6 +2009 01 01 0752 54832 28320 0 -5.1 -0.1 -1.2 5.3 -13.0 181.4 +2009 01 01 0753 54832 28380 0 -5.2 0.1 -0.6 5.2 -6.9 179.3 +2009 01 01 0754 54832 28440 0 -5.2 -0.1 -0.5 5.2 -5.4 180.7 +2009 01 01 0755 54832 28500 0 -5.1 0.0 -0.4 5.2 -4.1 179.7 +2009 01 01 0756 54832 28560 0 -5.1 0.7 -0.7 5.2 -7.5 172.2 +2009 01 01 0757 54832 28620 0 -4.9 0.9 -1.3 5.2 -15.0 169.6 +2009 01 01 0758 54832 28680 0 -4.6 1.4 -1.8 5.2 -20.4 162.8 +2009 01 01 0759 54832 28740 0 -3.9 2.3 -2.8 5.3 -32.1 149.5 +2009 01 01 0800 54832 28800 0 -4.0 1.7 -3.0 5.3 -34.5 156.8 +2009 01 01 0801 54832 28860 0 -2.7 2.2 -3.7 5.1 -46.4 140.7 +2009 01 01 0802 54832 28920 0 -2.3 2.7 -3.8 5.2 -46.9 130.6 +2009 01 01 0803 54832 28980 0 -3.5 3.2 -2.2 5.2 -24.8 137.1 +2009 01 01 0804 54832 29040 0 -3.4 2.9 -2.8 5.3 -31.7 139.5 +2009 01 01 0805 54832 29100 0 -3.1 2.7 -3.2 5.2 -38.0 138.5 +2009 01 01 0806 54832 29160 0 -3.3 2.2 -3.6 5.3 -42.1 146.6 +2009 01 01 0807 54832 29220 0 -2.9 2.5 -3.7 5.3 -44.0 139.9 +2009 01 01 0808 54832 29280 0 -2.8 2.6 -3.7 5.3 -43.4 137.2 +2009 01 01 0809 54832 29340 0 -3.1 2.6 -3.7 5.5 -42.1 140.1 +2009 01 01 0810 54832 29400 0 -3.3 2.4 -3.7 5.5 -42.3 143.6 +2009 01 01 0811 54832 29460 0 -3.1 2.3 -3.9 5.5 -44.9 142.9 +2009 01 01 0812 54832 29520 0 -3.3 2.3 -3.9 5.6 -44.4 145.5 +2009 01 01 0813 54832 29580 0 -3.5 2.1 -3.8 5.6 -42.6 149.6 +2009 01 01 0814 54832 29640 0 -4.2 1.2 -3.6 5.6 -39.2 163.8 +2009 01 01 0815 54832 29700 0 -4.1 0.8 -3.5 5.5 -40.1 169.4 +2009 01 01 0816 54832 29760 0 -4.1 0.4 -3.6 5.5 -41.0 174.3 +2009 01 01 0817 54832 29820 0 -4.3 0.3 -3.2 5.4 -36.2 176.5 +2009 01 01 0818 54832 29880 0 -4.5 -0.6 -2.9 5.4 -32.3 187.4 +2009 01 01 0819 54832 29940 0 -5.1 -1.8 -1.7 5.6 -17.8 199.1 +2009 01 01 0820 54832 30000 0 -4.8 -1.7 -2.0 5.5 -20.9 199.7 +2009 01 01 0821 54832 30060 0 -4.9 -1.2 -2.3 5.5 -24.9 193.4 +2009 01 01 0822 54832 30120 0 -4.8 -1.2 -2.4 5.5 -25.8 194.2 +2009 01 01 0823 54832 30180 0 -4.7 -1.2 -2.8 5.6 -30.2 194.1 +2009 01 01 0824 54832 30240 0 -4.7 -1.7 -2.6 5.6 -27.4 199.6 +2009 01 01 0825 54832 30300 0 -4.3 -1.0 -3.3 5.5 -37.0 193.5 +2009 01 01 0826 54832 30360 0 -4.7 -1.5 -2.7 5.6 -29.1 197.8 +2009 01 01 0827 54832 30420 0 -4.3 -1.1 -3.3 5.6 -36.0 194.6 +2009 01 01 0828 54832 30480 0 -3.9 -0.6 -3.5 5.3 -41.2 188.5 +2009 01 01 0829 54832 30540 0 -4.0 -1.4 -3.2 5.3 -37.3 199.0 +2009 01 01 0830 54832 30600 0 -4.1 -1.8 -3.3 5.5 -36.3 203.8 +2009 01 01 0831 54832 30660 0 -4.0 -1.7 -3.5 5.6 -38.9 202.8 +2009 01 01 0832 54832 30720 0 -4.1 -2.0 -3.2 5.6 -34.8 206.4 +2009 01 01 0833 54832 30780 0 -4.0 -1.9 -3.2 5.4 -36.1 205.7 +2009 01 01 0834 54832 30840 0 -3.8 -1.9 -3.4 5.5 -39.0 206.8 +2009 01 01 0835 54832 30900 0 -4.0 -1.6 -3.4 5.5 -38.2 202.2 +2009 01 01 0836 54832 30960 0 -3.8 -1.8 -3.3 5.3 -38.8 205.0 +2009 01 01 0837 54832 31020 0 -4.0 -1.3 -3.4 5.4 -38.4 198.3 +2009 01 01 0838 54832 31080 0 -4.1 -1.1 -3.3 5.4 -38.2 195.5 +2009 01 01 0839 54832 31140 0 -3.8 -1.2 -3.5 5.3 -41.4 197.6 +2009 01 01 0840 54832 31200 0 -3.6 -1.3 -3.5 5.1 -42.6 199.7 +2009 01 01 0841 54832 31260 0 -3.4 -1.3 -3.5 5.1 -44.4 200.7 +2009 01 01 0842 54832 31320 0 -3.6 -1.1 -3.6 5.2 -43.6 196.5 +2009 01 01 0843 54832 31380 0 -3.4 -1.3 -3.6 5.1 -44.5 201.7 +2009 01 01 0844 54832 31440 0 -3.0 -2.0 -3.7 5.2 -45.7 214.6 +2009 01 01 0845 54832 31500 0 -2.8 -2.2 -3.8 5.2 -46.7 217.8 +2009 01 01 0846 54832 31560 0 -3.4 -2.1 -3.3 5.1 -39.9 211.7 +2009 01 01 0847 54832 31620 0 -3.1 -2.2 -3.4 5.1 -42.0 215.4 +2009 01 01 0848 54832 31680 0 -3.3 -2.1 -3.4 5.2 -40.7 212.9 +2009 01 01 0849 54832 31740 0 -2.9 -2.2 -3.7 5.1 -45.4 216.8 +2009 01 01 0850 54832 31800 0 -2.8 -2.1 -3.9 5.2 -48.0 216.7 +2009 01 01 0851 54832 31860 0 -2.5 -2.3 -3.8 5.1 -48.8 222.7 +2009 01 01 0852 54832 31920 0 -2.4 -2.2 -3.9 5.1 -49.7 222.4 +2009 01 01 0853 54832 31980 0 -2.5 -2.1 -3.9 5.1 -49.3 220.1 +2009 01 01 0854 54832 32040 0 -2.7 -2.6 -3.4 5.1 -42.3 223.9 +2009 01 01 0855 54832 32100 0 -3.2 -2.6 -3.3 5.3 -38.6 219.7 +2009 01 01 0856 54832 32160 0 -2.7 -2.5 -3.7 5.2 -45.1 222.6 +2009 01 01 0857 54832 32220 0 -2.5 -1.6 -4.0 5.0 -53.2 212.6 +2009 01 01 0858 54832 32280 0 -2.7 -2.0 -3.6 4.9 -47.0 216.2 +2009 01 01 0859 54832 32340 0 -2.9 -2.3 -3.3 5.0 -42.2 219.2 +2009 01 01 0900 54832 32400 0 -2.8 -2.2 -3.7 5.1 -46.0 217.4 +2009 01 01 0901 54832 32460 0 -2.6 -2.0 -4.0 5.2 -50.0 218.2 +2009 01 01 0902 54832 32520 0 -2.7 -2.7 -3.4 5.1 -41.5 224.6 +2009 01 01 0903 54832 32580 0 -2.7 -2.9 -3.1 5.0 -37.9 226.5 +2009 01 01 0904 54832 32640 0 -3.4 -3.4 -1.9 5.2 -21.5 225.7 +2009 01 01 0905 54832 32700 0 -3.3 -3.4 -2.0 5.1 -22.8 225.4 +2009 01 01 0906 54832 32760 0 -2.7 -3.8 -1.5 4.9 -17.8 234.0 +2009 01 01 0907 54832 32820 0 -2.7 -3.9 -0.9 4.8 -10.3 235.4 +2009 01 01 0908 54832 32880 0 -2.4 -4.4 -0.0 5.0 -0.2 241.3 +2009 01 01 0909 54832 32940 0 -2.3 -4.4 0.1 5.0 1.1 242.4 +2009 01 01 0910 54832 33000 0 -2.0 -4.3 0.1 4.7 1.3 244.4 +2009 01 01 0911 54832 33060 0 -2.4 -4.0 0.3 4.7 3.2 238.6 +2009 01 01 0912 54832 33120 0 -2.0 -4.1 1.0 4.6 12.3 243.7 +2009 01 01 0913 54832 33180 0 -2.0 -1.5 -1.3 2.8 -27.2 217.5 +2009 01 01 0914 54832 33240 0 -1.7 -4.1 0.8 4.5 10.1 247.8 +2009 01 01 0915 54832 33300 0 -2.0 -4.1 0.5 4.6 5.7 244.3 +2009 01 01 0916 54832 33360 0 -1.5 -3.5 -0.0 3.8 -0.5 246.7 +2009 01 01 0917 54832 33420 0 -1.5 -3.7 -0.1 4.0 -0.9 248.3 +2009 01 01 0918 54832 33480 0 -1.1 -3.7 0.3 3.9 3.7 253.3 +2009 01 01 0919 54832 33540 0 -1.4 -3.7 0.4 4.0 6.1 248.8 +2009 01 01 0920 54832 33600 0 -1.3 -3.8 0.1 4.0 1.6 250.5 +2009 01 01 0921 54832 33660 0 -1.2 -3.7 0.5 3.9 6.8 251.4 +2009 01 01 0922 54832 33720 0 -1.2 -3.7 0.5 3.9 7.4 252.2 +2009 01 01 0923 54832 33780 0 -1.0 -4.4 0.4 4.5 5.0 257.4 +2009 01 01 0924 54832 33840 0 -0.7 -4.4 0.8 4.5 10.6 260.5 +2009 01 01 0925 54832 33900 0 -0.7 -4.3 1.2 4.5 15.0 260.7 +2009 01 01 0926 54832 33960 0 -2.5 -2.5 -0.9 3.7 -13.6 225.0 +2009 01 01 0927 54832 34020 0 -2.6 -2.7 -0.8 3.8 -12.7 225.7 +2009 01 01 0928 54832 34080 0 -2.2 -2.8 -0.4 3.6 -6.4 231.0 +2009 01 01 0929 54832 34140 0 -1.8 -3.3 0.2 3.8 2.8 240.7 +2009 01 01 0930 54832 34200 0 -2.0 -3.3 -0.1 3.9 -1.4 239.1 +2009 01 01 0931 54832 34260 0 -1.7 -3.3 -0.1 3.8 -1.0 242.4 +2009 01 01 0932 54832 34320 0 -1.8 -3.5 -0.1 4.0 -0.8 242.4 +2009 01 01 0933 54832 34380 0 -1.6 -3.7 0.1 4.0 0.9 246.7 +2009 01 01 0934 54832 34440 0 -1.6 -4.3 0.3 4.6 4.0 249.5 +2009 01 01 0935 54832 34500 0 -1.4 -4.3 0.8 4.6 10.3 251.6 +2009 01 01 0936 54832 34560 0 -2.0 -3.9 1.2 4.5 16.0 243.1 +2009 01 01 0937 54832 34620 0 -2.2 -2.5 2.0 3.9 30.7 227.9 +2009 01 01 0938 54832 34680 0 -2.2 -3.5 0.6 4.2 7.6 238.5 +2009 01 01 0939 54832 34740 0 -2.4 -3.5 -0.9 4.3 -11.6 235.0 +2009 01 01 0940 54832 34800 0 -1.9 -2.9 -1.4 3.8 -22.0 237.2 +2009 01 01 0941 54832 34860 0 -1.7 -2.7 -1.4 3.5 -23.8 237.4 +2009 01 01 0942 54832 34920 0 -1.9 -3.5 -2.0 4.4 -26.2 242.3 +2009 01 01 0943 54832 34980 0 -2.0 -3.3 -1.6 4.2 -22.2 238.5 +2009 01 01 0944 54832 35040 0 -2.6 -3.8 -0.8 4.7 -9.9 235.9 +2009 01 01 0945 54832 35100 0 -3.2 -3.7 -0.3 4.9 -3.9 229.4 +2009 01 01 0946 54832 35160 0 -3.7 -2.5 -1.0 4.6 -12.5 213.7 +2009 01 01 0947 54832 35220 0 -3.3 -1.7 -1.5 4.0 -21.5 207.4 +2009 01 01 0948 54832 35280 0 -3.4 0.2 -2.5 4.2 -36.7 176.6 +2009 01 01 0949 54832 35340 0 -3.3 1.2 -3.0 4.7 -40.3 160.3 +2009 01 01 0950 54832 35400 0 -3.0 1.0 -2.9 4.3 -42.0 161.9 +2009 01 01 0951 54832 35460 0 -3.2 1.1 -3.0 4.5 -41.7 161.4 +2009 01 01 0952 54832 35520 0 -3.2 1.5 -2.7 4.5 -37.2 155.0 +2009 01 01 0953 54832 35580 0 -2.4 2.5 -3.4 4.8 -44.4 134.2 +2009 01 01 0954 54832 35640 0 -2.9 2.3 -3.8 5.3 -45.2 141.4 +2009 01 01 0955 54832 35700 0 -2.9 2.3 -3.8 5.3 -45.5 140.6 +2009 01 01 0956 54832 35760 0 -2.9 2.6 -3.6 5.3 -42.5 138.1 +2009 01 01 0957 54832 35820 0 -2.7 2.7 -3.6 5.3 -43.4 134.4 +2009 01 01 0958 54832 35880 0 -2.8 2.8 -3.6 5.3 -42.5 134.9 +2009 01 01 0959 54832 35940 0 -2.5 2.7 -3.7 5.2 -45.6 133.1 +2009 01 01 1000 54832 36000 0 -2.4 2.9 -3.6 5.2 -44.1 129.1 +2009 01 01 1001 54832 36060 0 -3.0 2.6 -3.5 5.3 -41.9 139.4 +2009 01 01 1002 54832 36120 0 -3.3 2.2 -3.4 5.2 -40.4 146.8 +2009 01 01 1003 54832 36180 0 -3.5 2.0 -3.4 5.2 -40.0 150.8 +2009 01 01 1004 54832 36240 0 -3.5 2.3 -3.1 5.2 -36.9 146.6 +2009 01 01 1005 54832 36300 0 -3.7 2.6 -2.6 5.2 -30.2 144.4 +2009 01 01 1006 54832 36360 0 -3.1 2.8 -3.0 5.1 -35.6 137.7 +2009 01 01 1007 54832 36420 0 -2.6 2.5 -3.7 5.2 -45.4 136.8 +2009 01 01 1008 54832 36480 0 -2.3 3.2 -3.0 5.0 -36.5 125.9 +2009 01 01 1009 54832 36540 0 -2.4 3.5 -3.1 5.2 -36.4 124.2 +2009 01 01 1010 54832 36600 0 -2.0 2.6 -3.9 5.1 -49.4 126.9 +2009 01 01 1011 54832 36660 0 -2.2 2.9 -3.6 5.1 -44.7 126.9 +2009 01 01 1012 54832 36720 0 -1.9 4.1 -2.6 5.2 -30.3 114.6 +2009 01 01 1013 54832 36780 0 -1.7 4.1 -2.7 5.2 -31.5 112.4 +2009 01 01 1014 54832 36840 0 -0.9 4.0 -2.9 5.0 -35.1 102.1 +2009 01 01 1015 54832 36900 0 -2.1 3.1 -3.7 5.3 -44.7 123.4 +2009 01 01 1016 54832 36960 0 -2.4 2.2 -4.3 5.4 -52.7 138.0 +2009 01 01 1017 54832 37020 0 -2.7 2.1 -4.1 5.4 -50.1 143.3 +2009 01 01 1018 54832 37080 0 -3.0 0.9 -4.1 5.2 -53.0 164.0 +2009 01 01 1019 54832 37140 0 -3.0 -0.2 -3.7 4.8 -50.7 183.5 +2009 01 01 1020 54832 37200 0 -3.0 -1.2 -3.8 4.9 -49.8 201.7 +2009 01 01 1021 54832 37260 0 -3.3 -1.2 -3.6 5.0 -45.7 199.6 +2009 01 01 1022 54832 37320 0 -3.2 -0.4 -3.8 5.0 -50.3 188.1 +2009 01 01 1023 54832 37380 0 -3.1 0.2 -3.9 5.0 -51.7 176.0 +2009 01 01 1024 54832 37440 0 -3.2 0.7 -3.8 5.0 -49.6 166.9 +2009 01 01 1025 54832 37500 0 -3.3 0.9 -3.8 5.1 -48.3 165.3 +2009 01 01 1026 54832 37560 0 -3.3 0.3 -3.9 5.1 -49.1 174.3 +2009 01 01 1027 54832 37620 0 -3.2 2.4 -3.5 5.3 -41.1 143.5 +2009 01 01 1028 54832 37680 0 -3.5 2.2 -3.0 5.1 -35.9 148.6 +2009 01 01 1029 54832 37740 0 -4.0 2.1 -2.9 5.3 -32.6 152.3 +2009 01 01 1030 54832 37800 0 -3.6 2.5 -2.7 5.2 -31.9 145.0 +2009 01 01 1031 54832 37860 0 -3.2 2.6 -3.1 5.2 -36.6 140.9 +2009 01 01 1032 54832 37920 0 -3.0 2.7 -3.3 5.1 -39.4 138.0 +2009 01 01 1033 54832 37980 0 -2.8 3.0 -3.1 5.1 -37.2 133.3 +2009 01 01 1034 54832 38040 0 -3.1 3.2 -2.6 5.2 -30.3 134.4 +2009 01 01 1035 54832 38100 0 -3.0 3.3 -2.7 5.2 -31.3 132.8 +2009 01 01 1036 54832 38160 0 -2.8 3.5 -2.7 5.2 -30.5 129.2 +2009 01 01 1037 54832 38220 0 -2.9 3.4 -2.7 5.2 -30.6 130.2 +2009 01 01 1038 54832 38280 0 -2.8 3.8 -2.2 5.2 -24.9 127.0 +2009 01 01 1039 54832 38340 0 -3.0 3.8 -1.7 5.1 -19.0 127.8 +2009 01 01 1040 54832 38400 0 -3.2 3.6 -1.7 5.1 -19.7 131.4 +2009 01 01 1041 54832 38460 0 -3.3 3.3 -1.9 5.1 -22.3 135.1 +2009 01 01 1042 54832 38520 0 -3.1 3.5 -2.0 5.0 -23.9 131.6 +2009 01 01 1043 54832 38580 0 -3.3 3.3 -1.7 5.0 -20.4 134.4 +2009 01 01 1044 54832 38640 0 -3.5 3.4 -1.5 5.1 -17.4 136.1 +2009 01 01 1045 54832 38700 0 -3.8 3.1 -1.6 5.2 -17.8 141.0 +2009 01 01 1046 54832 38760 0 -3.8 2.9 -1.7 5.1 -19.0 142.8 +2009 01 01 1047 54832 38820 0 -3.7 2.5 -2.4 5.1 -28.5 145.7 +2009 01 01 1048 54832 38880 0 -3.5 3.0 -2.5 5.3 -28.2 139.0 +2009 01 01 1049 54832 38940 0 -3.7 2.4 -2.9 5.3 -33.3 146.7 +2009 01 01 1050 54832 39000 0 -3.4 2.6 -3.1 5.3 -36.2 142.9 +2009 01 01 1051 54832 39060 0 -3.4 2.0 -3.5 5.3 -41.3 149.7 +2009 01 01 1052 54832 39120 0 -3.5 2.0 -3.5 5.3 -40.8 150.4 +2009 01 01 1053 54832 39180 0 -3.5 1.1 -3.8 5.3 -45.8 162.3 +2009 01 01 1054 54832 39240 0 -3.1 1.0 -4.1 5.3 -51.3 161.6 +2009 01 01 1055 54832 39300 0 -3.0 1.5 -4.1 5.3 -51.1 152.8 +2009 01 01 1056 54832 39360 0 -2.1 3.0 -3.3 4.9 -42.5 125.0 +2009 01 01 1057 54832 39420 0 -0.6 3.8 -3.3 5.0 -40.7 98.3 +2009 01 01 1058 54832 39480 0 -0.8 4.4 -2.3 5.0 -26.9 100.4 +2009 01 01 1059 54832 39540 0 0.4 4.0 -2.9 5.0 -35.8 84.7 +2009 01 01 1100 54832 39600 0 1.0 4.3 -2.7 5.1 -31.5 76.9 +2009 01 01 1101 54832 39660 0 1.1 4.4 -2.8 5.4 -31.8 76.0 +2009 01 01 1102 54832 39720 0 -1.8 4.7 -0.6 5.1 -6.4 110.7 +2009 01 01 1103 54832 39780 0 -2.8 4.7 0.6 5.5 6.7 121.0 +2009 01 01 1104 54832 39840 0 -2.0 4.5 0.8 5.0 9.1 114.5 +2009 01 01 1105 54832 39900 0 -1.2 4.2 1.3 4.6 16.5 105.3 +2009 01 01 1106 54832 39960 0 -0.4 4.2 -1.1 4.3 -14.3 95.9 +2009 01 01 1107 54832 40020 0 0.3 4.4 -0.0 4.4 -0.4 85.5 +2009 01 01 1108 54832 40080 0 0.3 4.6 0.0 4.6 0.1 86.2 +2009 01 01 1109 54832 40140 0 0.2 4.6 -0.4 4.6 -5.3 86.9 +2009 01 01 1110 54832 40200 0 -0.3 4.7 -0.5 4.7 -6.1 93.3 +2009 01 01 1111 54832 40260 0 -0.3 4.6 -1.0 4.7 -12.8 93.3 +2009 01 01 1112 54832 40320 0 -0.0 4.4 -1.5 4.7 -19.1 90.2 +2009 01 01 1113 54832 40380 0 0.0 4.2 -1.6 4.5 -20.8 89.4 +2009 01 01 1114 54832 40440 0 0.0 4.2 -1.6 4.5 -21.1 89.4 +2009 01 01 1115 54832 40500 0 -1.0 3.7 -2.5 4.6 -32.7 105.7 +2009 01 01 1116 54832 40560 0 -0.6 3.8 -2.3 4.5 -30.9 99.1 +2009 01 01 1117 54832 40620 0 -1.3 3.6 -2.5 4.6 -33.9 109.3 +2009 01 01 1118 54832 40680 0 -2.4 1.9 -3.2 4.4 -45.8 141.7 +2009 01 01 1119 54832 40740 0 -4.1 -1.2 -2.6 5.0 -31.3 195.8 +2009 01 01 1120 54832 40800 0 -4.1 0.4 -2.7 4.9 -33.1 174.8 +2009 01 01 1121 54832 40860 0 -4.0 2.2 -2.1 5.0 -24.8 151.6 +2009 01 01 1122 54832 40920 0 -3.3 3.2 -1.9 4.9 -22.0 136.2 +2009 01 01 1123 54832 40980 0 -3.9 2.9 -0.4 4.9 -4.3 143.0 +2009 01 01 1124 54832 41040 0 -3.0 2.8 -2.6 4.9 -32.2 136.5 +2009 01 01 1125 54832 41100 0 -2.8 2.8 -2.6 4.7 -32.8 135.2 +2009 01 01 1126 54832 41160 0 -3.2 2.6 -2.6 4.9 -33.0 141.0 +2009 01 01 1127 54832 41220 0 -3.4 3.2 -1.9 5.0 -21.8 136.4 +2009 01 01 1128 54832 41280 0 -3.7 2.1 -2.8 5.1 -33.4 150.0 +2009 01 01 1129 54832 41340 0 -3.9 1.8 -3.1 5.3 -35.6 155.5 +2009 01 01 1130 54832 41400 0 -4.2 0.5 -3.0 5.2 -35.5 173.5 +2009 01 01 1131 54832 41460 0 -4.3 0.2 -2.9 5.2 -33.6 176.7 +2009 01 01 1132 54832 41520 0 -4.4 0.1 -2.7 5.2 -31.5 178.2 +2009 01 01 1133 54832 41580 0 -4.3 0.6 -2.9 5.2 -34.1 172.2 +2009 01 01 1134 54832 41640 0 -4.2 1.9 -2.8 5.4 -31.0 155.8 +2009 01 01 1135 54832 41700 0 -4.1 2.2 -2.9 5.4 -31.8 152.2 +2009 01 01 1136 54832 41760 0 -4.1 1.6 -3.1 5.3 -35.1 159.2 +2009 01 01 1137 54832 41820 0 -4.1 2.1 -2.8 5.4 -31.7 153.0 +2009 01 01 1138 54832 41880 0 -4.2 2.2 -2.7 5.4 -29.4 151.7 +2009 01 01 1139 54832 41940 0 -3.7 2.7 -2.5 5.2 -28.0 144.1 +2009 01 01 1140 54832 42000 0 -3.0 3.7 -2.2 5.3 -24.2 129.5 +2009 01 01 1141 54832 42060 0 -3.0 3.7 -2.3 5.3 -26.0 129.3 +2009 01 01 1142 54832 42120 0 -3.7 3.0 -2.3 5.3 -26.4 140.5 +2009 01 01 1143 54832 42180 0 -3.9 2.7 -2.7 5.4 -29.6 145.5 +2009 01 01 1144 54832 42240 0 -3.9 2.8 -2.6 5.4 -29.1 144.2 +2009 01 01 1145 54832 42300 0 -3.8 2.8 -2.8 5.4 -30.6 144.1 +2009 01 01 1146 54832 42360 0 -3.9 2.6 -2.8 5.4 -30.9 146.7 +2009 01 01 1147 54832 42420 0 -4.0 2.4 -3.0 5.5 -32.4 148.9 +2009 01 01 1148 54832 42480 0 -3.7 2.6 -3.0 5.4 -33.2 145.6 +2009 01 01 1149 54832 42540 0 -3.4 2.7 -2.9 5.2 -33.0 141.6 +2009 01 01 1150 54832 42600 0 -3.6 2.5 -3.1 5.3 -35.0 144.8 +2009 01 01 1151 54832 42660 0 -3.1 3.0 -3.0 5.3 -35.2 136.5 +2009 01 01 1152 54832 42720 0 -3.3 1.9 -3.3 5.1 -40.7 150.2 +2009 01 01 1153 54832 42780 0 -3.8 0.3 -3.4 5.1 -42.1 176.1 +2009 01 01 1154 54832 42840 0 -3.8 0.5 -3.4 5.1 -41.4 173.0 +2009 01 01 1155 54832 42900 0 -3.9 0.4 -3.4 5.2 -41.0 173.9 +2009 01 01 1156 54832 42960 0 -3.9 -1.2 -3.4 5.3 -40.1 197.7 +2009 01 01 1157 54832 43020 0 -3.9 -1.1 -3.4 5.3 -40.0 195.8 +2009 01 01 1158 54832 43080 0 -3.9 -0.8 -3.5 5.3 -41.2 191.4 +2009 01 01 1159 54832 43140 0 -3.9 -0.4 -3.5 5.3 -42.2 185.3 +2009 01 01 1200 54832 43200 0 -4.1 -0.8 -3.2 5.3 -37.5 191.6 +2009 01 01 1201 54832 43260 0 -4.2 -1.0 -3.1 5.3 -36.0 193.1 +2009 01 01 1202 54832 43320 0 -4.2 -1.1 -3.0 5.3 -34.3 195.2 +2009 01 01 1203 54832 43380 0 -3.6 -1.2 -3.5 5.2 -42.6 198.0 +2009 01 01 1204 54832 43440 0 -3.9 -0.9 -3.4 5.2 -40.2 193.6 +2009 01 01 1205 54832 43500 0 -3.8 -1.0 -3.5 5.3 -41.3 195.2 +2009 01 01 1206 54832 43560 0 -4.3 -1.6 -2.7 5.3 -30.4 199.8 +2009 01 01 1207 54832 43620 0 -4.0 -0.8 -3.0 5.1 -36.5 191.3 +2009 01 01 1208 54832 43680 0 -3.5 0.8 -3.8 5.3 -46.8 166.7 +2009 01 01 1209 54832 43740 0 -3.6 0.5 -3.8 5.3 -46.8 171.9 +2009 01 01 1210 54832 43800 0 -3.3 1.1 -3.8 5.2 -47.2 161.7 +2009 01 01 1211 54832 43860 0 -3.6 1.5 -3.6 5.3 -43.1 157.3 +2009 01 01 1212 54832 43920 0 -3.4 1.6 -3.7 5.2 -44.5 155.3 +2009 01 01 1213 54832 43980 0 -3.2 1.8 -3.7 5.2 -44.7 150.7 +2009 01 01 1214 54832 44040 0 -3.0 2.3 -3.5 5.1 -42.8 143.2 +2009 01 01 1215 54832 44100 0 -3.0 2.5 -3.3 5.2 -40.4 140.1 +2009 01 01 1216 54832 44160 0 -3.0 3.0 -2.9 5.1 -34.8 134.7 +2009 01 01 1217 54832 44220 0 -2.5 3.1 -3.0 5.0 -36.6 128.2 +2009 01 01 1218 54832 44280 0 -1.8 3.6 -2.6 4.8 -33.2 115.9 +2009 01 01 1219 54832 44340 0 -1.5 4.0 -2.0 4.7 -25.0 110.1 +2009 01 01 1220 54832 44400 0 -2.5 2.7 -3.1 4.8 -39.4 132.9 +2009 01 01 1221 54832 44460 0 -2.5 2.2 -3.5 4.8 -46.8 139.2 +2009 01 01 1222 54832 44520 0 -2.5 2.2 -3.3 4.7 -44.6 138.7 +2009 01 01 1223 54832 44580 0 -2.7 2.3 -3.1 4.7 -40.5 139.7 +2009 01 01 1224 54832 44640 0 -1.6 2.5 -2.9 4.1 -44.0 123.6 +2009 01 01 1225 54832 44700 0 0.5 4.1 -0.1 4.1 -1.0 82.9 +2009 01 01 1226 54832 44760 0 0.1 4.1 -0.1 4.1 -1.9 88.8 +2009 01 01 1227 54832 44820 0 -0.3 4.2 -0.3 4.2 -4.4 94.8 +2009 01 01 1228 54832 44880 0 -0.3 4.1 -0.3 4.1 -4.8 93.8 +2009 01 01 1229 54832 44940 0 0.2 4.2 -0.6 4.3 -7.6 87.9 +2009 01 01 1230 54832 45000 0 0.1 4.4 -0.5 4.5 -5.9 88.1 +2009 01 01 1231 54832 45060 0 -0.0 4.4 -0.7 4.4 -8.6 90.6 +2009 01 01 1232 54832 45120 0 -0.0 4.2 -1.0 4.3 -13.1 90.2 +2009 01 01 1233 54832 45180 0 -0.3 4.1 -0.9 4.2 -12.5 93.6 +2009 01 01 1234 54832 45240 0 -0.3 4.0 -1.1 4.1 -15.6 94.2 +2009 01 01 1235 54832 45300 0 -0.1 4.2 -0.6 4.2 -7.6 91.1 +2009 01 01 1236 54832 45360 0 -0.3 4.5 -0.5 4.6 -6.6 94.1 +2009 01 01 1237 54832 45420 0 -1.0 4.5 -1.0 4.7 -12.3 103.0 +2009 01 01 1238 54832 45480 0 -0.6 4.4 0.3 4.4 4.0 97.8 +2009 01 01 1239 54832 45540 0 0.2 4.5 1.5 4.8 18.6 87.5 +2009 01 01 1240 54832 45600 0 0.1 4.7 0.9 4.8 11.3 88.6 +2009 01 01 1241 54832 45660 0 0.3 4.7 0.7 4.8 8.9 86.2 +2009 01 01 1242 54832 45720 0 -0.1 4.6 1.5 4.8 18.2 91.1 +2009 01 01 1243 54832 45780 0 0.1 4.3 2.0 4.8 24.6 88.4 +2009 01 01 1244 54832 45840 0 0.9 4.2 2.0 4.7 25.0 78.5 +2009 01 01 1245 54832 45900 0 1.0 4.3 1.8 4.8 22.2 76.5 +2009 01 01 1246 54832 45960 0 1.0 4.4 1.2 4.7 15.3 77.6 +2009 01 01 1247 54832 46020 0 0.5 4.5 1.6 4.8 19.2 84.2 +2009 01 01 1248 54832 46080 0 0.7 4.6 0.9 4.8 10.7 81.4 +2009 01 01 1249 54832 46140 0 0.2 4.7 1.0 4.8 11.3 88.0 +2009 01 01 1250 54832 46200 0 0.1 4.6 0.9 4.7 10.9 88.5 +2009 01 01 1251 54832 46260 0 0.0 4.7 0.7 4.8 8.8 89.8 +2009 01 01 1252 54832 46320 0 -0.5 4.7 1.3 4.9 14.9 96.5 +2009 01 01 1253 54832 46380 0 -0.7 4.6 1.5 4.9 18.2 99.2 +2009 01 01 1254 54832 46440 0 -0.7 4.6 1.7 4.9 20.1 99.3 +2009 01 01 1255 54832 46500 0 -0.3 4.9 -0.1 4.9 -1.3 92.9 +2009 01 01 1256 54832 46560 0 0.0 4.9 -0.5 4.9 -6.0 89.5 +2009 01 01 1257 54832 46620 0 -0.2 4.9 -0.6 4.9 -6.6 92.5 +2009 01 01 1258 54832 46680 0 -0.7 5.0 -0.5 5.1 -6.2 97.8 +2009 01 01 1259 54832 46740 0 -0.5 4.9 -0.8 5.0 -9.5 95.5 +2009 01 01 1300 54832 46800 0 -1.0 5.0 -0.3 5.1 -3.8 101.0 +2009 01 01 1301 54832 46860 0 -0.7 5.1 0.1 5.1 0.8 97.5 +2009 01 01 1302 54832 46920 0 -1.0 5.0 0.2 5.1 1.8 100.9 +2009 01 01 1303 54832 46980 0 -0.9 5.1 0.1 5.1 1.2 100.3 +2009 01 01 1304 54832 47040 0 -0.6 4.9 -0.7 5.0 -8.4 96.5 +2009 01 01 1305 54832 47100 0 -0.6 4.9 -0.5 5.0 -6.0 97.1 +2009 01 01 1306 54832 47160 0 -0.8 4.8 -0.9 5.0 -10.0 99.5 +2009 01 01 1307 54832 47220 0 -1.7 4.9 0.0 5.2 0.4 108.8 +2009 01 01 1308 54832 47280 0 -2.1 5.0 -0.0 5.4 -0.1 113.3 +2009 01 01 1309 54832 47340 0 -2.1 5.0 0.3 5.4 3.5 112.4 +2009 01 01 1310 54832 47400 0 -2.6 4.9 0.1 5.5 1.1 118.1 +2009 01 01 1311 54832 47460 0 -2.6 4.9 -0.3 5.6 -3.5 117.6 +2009 01 01 1312 54832 47520 0 -2.2 4.9 -0.7 5.4 -7.3 114.1 +2009 01 01 1313 54832 47580 0 -2.2 5.0 -0.6 5.5 -5.9 113.4 +2009 01 01 1314 54832 47640 0 -2.2 5.1 -0.3 5.5 -3.6 113.4 +2009 01 01 1315 54832 47700 0 -2.3 4.8 -1.1 5.4 -11.8 116.1 +2009 01 01 1316 54832 47760 0 -2.5 4.8 -1.0 5.5 -10.6 117.6 +2009 01 01 1317 54832 47820 0 -3.2 4.5 -0.8 5.6 -8.1 125.6 +2009 01 01 1318 54832 47880 0 -3.4 4.4 -1.0 5.6 -10.7 127.5 +2009 01 01 1319 54832 47940 0 -3.2 4.5 -1.1 5.6 -11.4 125.4 +2009 01 01 1320 54832 48000 0 -2.6 4.7 -1.3 5.5 -13.4 119.1 +2009 01 01 1321 54832 48060 0 -3.1 4.4 -1.5 5.6 -15.2 124.8 +2009 01 01 1322 54832 48120 0 -2.5 4.7 -1.3 5.5 -13.6 118.5 +2009 01 01 1323 54832 48180 0 -2.4 4.7 -1.3 5.5 -13.8 117.4 +2009 01 01 1324 54832 48240 0 -2.6 4.7 -1.4 5.6 -14.2 118.6 +2009 01 01 1325 54832 48300 0 -3.1 4.6 -1.3 5.7 -13.0 123.6 +2009 01 01 1326 54832 48360 0 -2.5 4.9 -0.9 5.6 -8.8 117.2 +2009 01 01 1327 54832 48420 0 -2.5 4.9 -0.9 5.6 -9.5 117.1 +2009 01 01 1328 54832 48480 0 -2.9 4.6 -0.4 5.5 -4.4 122.3 +2009 01 01 1329 54832 48540 0 -3.0 4.7 -0.3 5.6 -3.0 122.4 +2009 01 01 1330 54832 48600 0 -2.8 4.7 -0.7 5.5 -7.1 121.1 +2009 01 01 1331 54832 48660 0 -2.5 4.8 -0.9 5.5 -9.4 117.3 +2009 01 01 1332 54832 48720 0 -2.5 4.8 -1.2 5.6 -12.5 117.5 +2009 01 01 1333 54832 48780 0 -2.5 4.7 -1.4 5.5 -15.3 117.9 +2009 01 01 1334 54832 48840 0 -2.6 4.7 -1.2 5.5 -12.7 118.3 +2009 01 01 1335 54832 48900 0 -2.6 4.9 -0.6 5.5 -6.6 117.8 +2009 01 01 1336 54832 48960 0 -2.7 4.7 -1.1 5.6 -10.9 119.6 +2009 01 01 1337 54832 49020 0 -3.2 4.4 -1.2 5.6 -12.4 125.7 +2009 01 01 1338 54832 49080 0 -2.8 4.7 -1.1 5.6 -11.5 121.3 +2009 01 01 1339 54832 49140 0 -2.5 5.0 -0.9 5.6 -9.4 116.3 +2009 01 01 1340 54832 49200 0 -2.0 5.3 -0.6 5.7 -5.8 111.0 +2009 01 01 1341 54832 49260 0 -2.1 5.3 -0.7 5.7 -6.6 112.0 +2009 01 01 1342 54832 49320 0 -2.2 5.2 -0.6 5.7 -6.3 112.9 +2009 01 01 1343 54832 49380 0 -2.5 5.1 -0.9 5.8 -8.8 115.8 +2009 01 01 1344 54832 49440 0 -2.8 4.8 -1.1 5.7 -10.6 120.3 +2009 01 01 1345 54832 49500 0 -2.7 4.9 -1.2 5.7 -12.0 119.1 +2009 01 01 1346 54832 49560 0 -2.8 4.8 -1.1 5.6 -11.5 119.8 +2009 01 01 1347 54832 49620 0 -2.8 4.7 -1.2 5.6 -12.6 121.1 +2009 01 01 1348 54832 49680 0 -2.6 5.0 -1.1 5.7 -10.7 117.4 +2009 01 01 1349 54832 49740 0 -2.7 4.7 -1.1 5.6 -11.6 120.1 +2009 01 01 1350 54832 49800 0 -2.7 4.5 -1.2 5.4 -12.3 120.4 +2009 01 01 1351 54832 49860 0 -2.9 4.4 -1.3 5.5 -13.7 123.0 +2009 01 01 1352 54832 49920 0 -2.9 4.6 -2.0 5.8 -20.0 122.4 +2009 01 01 1353 54832 49980 0 -2.9 4.5 -2.0 5.7 -20.2 122.8 +2009 01 01 1354 54832 50040 0 -2.6 4.1 -2.4 5.4 -26.2 121.8 +2009 01 01 1355 54832 50100 0 -2.3 4.2 -2.6 5.4 -28.7 118.3 +2009 01 01 1356 54832 50160 0 -2.7 4.2 -2.2 5.5 -24.3 122.9 +2009 01 01 1357 54832 50220 0 -2.6 4.1 -2.3 5.4 -25.4 122.3 +2009 01 01 1358 54832 50280 0 -2.3 4.4 -2.3 5.4 -24.6 117.6 +2009 01 01 1359 54832 50340 0 -2.0 4.3 -2.5 5.4 -27.7 114.6 +2009 01 01 1400 54832 50400 0 -2.1 4.3 -2.5 5.4 -28.0 116.5 +2009 01 01 1401 54832 50460 0 -2.0 4.3 -2.5 5.3 -27.7 114.9 +2009 01 01 1402 54832 50520 0 -1.9 4.3 -2.6 5.4 -28.5 114.0 +2009 01 01 1403 54832 50580 0 -1.8 4.2 -2.6 5.2 -29.9 113.2 +2009 01 01 1404 54832 50640 0 -2.6 4.2 -2.3 5.5 -24.6 121.9 +2009 01 01 1405 54832 50700 0 -4.0 4.0 -1.2 5.7 -12.5 134.9 +2009 01 01 1406 54832 50760 0 -3.8 4.0 -1.3 5.7 -12.8 133.8 +2009 01 01 1407 54832 50820 0 -4.1 3.7 -1.4 5.8 -14.4 137.7 +2009 01 01 1408 54832 50880 0 -3.8 3.9 -1.7 5.7 -17.2 134.8 +2009 01 01 1409 54832 50940 0 -3.7 3.9 -1.7 5.6 -17.1 133.5 +2009 01 01 1410 54832 51000 0 -3.5 4.0 -1.7 5.6 -17.5 131.2 +2009 01 01 1411 54832 51060 0 -3.5 4.2 -1.2 5.6 -12.8 129.6 +2009 01 01 1412 54832 51120 0 -3.4 4.4 -1.1 5.7 -11.6 128.3 +2009 01 01 1413 54832 51180 0 -3.4 4.3 -1.3 5.6 -12.9 127.7 +2009 01 01 1414 54832 51240 0 -3.4 4.3 -1.5 5.6 -15.5 128.5 +2009 01 01 1415 54832 51300 0 -3.4 4.3 -0.9 5.6 -9.1 128.5 +2009 01 01 1416 54832 51360 0 -3.4 4.4 -1.0 5.6 -10.1 127.7 +2009 01 01 1417 54832 51420 0 -3.5 4.2 -1.6 5.7 -16.0 129.6 +2009 01 01 1418 54832 51480 0 -3.3 3.8 -2.2 5.5 -23.3 130.7 +2009 01 01 1419 54832 51540 0 -3.2 3.5 -2.5 5.4 -27.4 131.7 +2009 01 01 1420 54832 51600 0 -2.8 3.6 -2.5 5.2 -28.8 128.2 +2009 01 01 1421 54832 51660 0 -3.8 3.7 -0.3 5.3 -3.1 135.6 +2009 01 01 1422 54832 51720 0 -3.4 3.9 -0.9 5.3 -10.4 131.2 +2009 01 01 1423 54832 51780 0 -3.5 3.9 -1.0 5.3 -11.4 131.9 +2009 01 01 1424 54832 51840 0 -3.7 3.7 -1.2 5.3 -13.2 134.9 +2009 01 01 1425 54832 51900 0 -3.1 4.1 -1.3 5.3 -13.8 127.1 +2009 01 01 1426 54832 51960 0 -2.4 4.4 -1.3 5.2 -14.9 118.9 +2009 01 01 1427 54832 52020 0 -1.9 4.4 -1.7 5.1 -19.7 113.2 +2009 01 01 1428 54832 52080 0 -2.7 4.1 -1.9 5.3 -21.6 124.0 +2009 01 01 1429 54832 52140 0 -2.8 3.8 -2.2 5.3 -25.2 126.6 +2009 01 01 1430 54832 52200 0 -2.8 3.6 -2.4 5.2 -27.6 127.9 +2009 01 01 1431 54832 52260 0 -3.9 3.3 -1.2 5.3 -13.4 139.2 +2009 01 01 1432 54832 52320 0 -4.0 3.4 -1.1 5.3 -11.5 139.0 +2009 01 01 1433 54832 52380 0 -4.2 3.1 -0.3 5.3 -2.8 143.8 +2009 01 01 1434 54832 52440 0 -4.5 3.0 -0.1 5.5 -1.1 146.2 +2009 01 01 1435 54832 52500 0 -4.5 2.9 0.1 5.4 0.7 146.9 +2009 01 01 1436 54832 52560 0 -4.5 2.8 0.1 5.3 1.3 148.7 +2009 01 01 1437 54832 52620 0 -4.5 3.1 -0.1 5.5 -1.3 145.2 +2009 01 01 1438 54832 52680 0 -4.4 3.2 -0.8 5.5 -7.9 143.9 +2009 01 01 1439 54832 52740 0 -4.2 3.2 -1.3 5.5 -13.9 142.2 +2009 01 01 1440 54832 52800 0 -4.3 3.2 -1.4 5.5 -14.2 143.7 +2009 01 01 1441 54832 52860 0 -4.4 3.2 -1.5 5.6 -15.3 143.4 +2009 01 01 1442 54832 52920 0 -4.2 3.4 -1.5 5.6 -15.1 140.6 +2009 01 01 1443 54832 52980 0 -4.2 3.2 0.1 5.3 0.6 142.4 +2009 01 01 1444 54832 53040 0 -4.4 2.9 0.9 5.3 10.3 146.1 +2009 01 01 1445 54832 53100 0 -4.5 3.0 0.3 5.4 3.4 145.9 +2009 01 01 1446 54832 53160 0 -4.5 2.9 0.1 5.4 0.9 147.2 +2009 01 01 1447 54832 53220 0 -4.3 3.2 0.2 5.3 1.7 143.5 +2009 01 01 1448 54832 53280 0 -4.5 2.9 0.1 5.4 0.6 147.0 +2009 01 01 1449 54832 53340 0 -4.4 3.5 -0.7 5.7 -7.4 141.8 +2009 01 01 1450 54832 53400 0 -4.8 3.3 -0.8 5.8 -7.5 145.5 +2009 01 01 1451 54832 53460 0 -4.7 3.3 -1.3 5.9 -12.5 145.1 +2009 01 01 1452 54832 53520 0 -4.8 3.3 -1.9 6.1 -17.7 145.5 +2009 01 01 1453 54832 53580 0 -4.6 3.4 -1.9 6.0 -17.8 143.3 +2009 01 01 1454 54832 53640 0 -4.2 3.5 -1.9 5.8 -19.1 140.1 +2009 01 01 1455 54832 53700 0 -3.8 3.7 -1.9 5.6 -20.0 136.3 +2009 01 01 1456 54832 53760 0 -3.9 3.4 -2.2 5.6 -22.9 138.5 +2009 01 01 1457 54832 53820 0 -4.0 3.3 -2.4 5.7 -25.1 140.5 +2009 01 01 1458 54832 53880 0 -3.7 3.5 -2.3 5.6 -24.3 137.3 +2009 01 01 1459 54832 53940 0 -3.3 3.7 -2.2 5.4 -23.9 131.7 +2009 01 01 1500 54832 54000 0 -3.4 3.6 -2.2 5.4 -24.4 133.6 +2009 01 01 1501 54832 54060 0 -3.4 3.6 -2.4 5.5 -25.4 134.1 +2009 01 01 1502 54832 54120 0 -3.4 3.5 -2.4 5.4 -25.8 134.5 +2009 01 01 1503 54832 54180 0 -3.7 3.3 -2.4 5.4 -25.8 138.3 +2009 01 01 1504 54832 54240 0 -3.3 3.4 -2.4 5.3 -26.7 134.3 +2009 01 01 1505 54832 54300 0 -3.6 3.2 -2.6 5.5 -28.5 138.3 +2009 01 01 1506 54832 54360 0 -3.7 3.1 -2.8 5.5 -30.4 140.0 +2009 01 01 1507 54832 54420 0 -3.4 3.2 -2.3 5.3 -26.5 136.6 +2009 01 01 1508 54832 54480 0 -3.4 3.2 -2.5 5.3 -28.0 137.2 +2009 01 01 1509 54832 54540 0 -4.0 2.7 -2.2 5.4 -24.4 146.0 +2009 01 01 1510 54832 54600 0 -3.9 2.8 -2.1 5.2 -23.5 143.8 +2009 01 01 1511 54832 54660 0 -3.8 2.7 -2.2 5.2 -25.4 144.8 +2009 01 01 1512 54832 54720 0 -4.1 2.3 -2.2 5.2 -24.8 150.4 +2009 01 01 1513 54832 54780 0 -4.2 2.1 -2.3 5.2 -26.0 154.0 +2009 01 01 1514 54832 54840 0 -4.1 2.0 -2.5 5.2 -28.7 154.0 +2009 01 01 1515 54832 54900 0 -3.8 2.3 -2.5 5.1 -29.8 148.7 +2009 01 01 1516 54832 54960 0 -3.7 2.3 -2.5 5.1 -30.0 148.1 +2009 01 01 1517 54832 55020 0 -3.4 1.8 -2.9 4.9 -37.2 152.0 +2009 01 01 1518 54832 55080 0 -3.4 0.8 -3.3 4.8 -43.2 166.7 +2009 01 01 1519 54832 55140 0 -4.2 1.4 -2.3 5.0 -28.1 161.4 +2009 01 01 1520 54832 55200 0 -4.3 1.8 -1.7 5.0 -19.9 157.9 +2009 01 01 1521 54832 55260 0 -4.5 1.7 -1.7 5.1 -18.9 159.5 +2009 01 01 1522 54832 55320 0 -4.2 2.5 -1.3 5.1 -14.9 149.5 +2009 01 01 1523 54832 55380 0 -4.1 2.9 -0.8 5.1 -9.1 144.7 +2009 01 01 1524 54832 55440 0 -4.5 1.9 -1.2 5.1 -13.6 157.3 +2009 01 01 1525 54832 55500 0 -4.8 1.3 -1.5 5.2 -16.5 164.7 +2009 01 01 1526 54832 55560 0 -5.2 1.8 -0.5 5.5 -4.8 161.3 +2009 01 01 1527 54832 55620 0 -5.2 1.9 -0.5 5.5 -4.7 160.0 +2009 01 01 1528 54832 55680 0 -5.2 1.9 -0.5 5.6 -4.7 160.3 +2009 01 01 1529 54832 55740 0 -5.3 1.7 -0.0 5.5 -0.5 161.7 +2009 01 01 1530 54832 55800 0 -5.1 1.9 0.0 5.5 0.0 159.9 +2009 01 01 1531 54832 55860 0 -4.7 2.2 -0.6 5.2 -6.5 155.0 +2009 01 01 1532 54832 55920 0 -4.6 1.9 -0.5 5.0 -5.2 157.9 +2009 01 01 1533 54832 55980 0 -4.6 -0.1 1.6 4.9 18.8 181.0 +2009 01 01 1534 54832 56040 0 -4.2 1.9 -0.2 4.6 -2.9 156.1 +2009 01 01 1535 54832 56100 0 -2.5 3.0 -2.5 4.6 -31.9 130.1 +2009 01 01 1536 54832 56160 0 -0.4 3.0 -3.0 4.2 -44.7 96.8 +2009 01 01 1537 54832 56220 0 0.6 3.0 -3.0 4.3 -44.4 77.8 +2009 01 01 1538 54832 56280 0 0.7 3.1 -3.0 4.3 -43.6 77.6 +2009 01 01 1539 54832 56340 0 0.3 3.1 -3.0 4.3 -44.4 85.3 +2009 01 01 1540 54832 56400 0 0.4 3.0 -2.7 4.1 -41.3 82.5 +2009 01 01 1541 54832 56460 0 0.4 3.1 -2.3 3.9 -36.9 82.5 +2009 01 01 1542 54832 56520 0 0.7 3.5 -2.5 4.3 -34.9 77.8 +2009 01 01 1543 54832 56580 0 2.2 3.2 -2.0 4.4 -27.9 55.2 +2009 01 01 1544 54832 56640 0 2.1 2.3 -3.3 4.5 -46.9 46.9 +2009 01 01 1545 54832 56700 0 1.5 2.3 -3.2 4.3 -48.9 57.0 +2009 01 01 1546 54832 56760 0 1.8 2.0 -2.8 3.9 -45.9 48.6 +2009 01 01 1547 54832 56820 0 1.8 2.4 -2.7 4.0 -42.2 53.6 +2009 01 01 1548 54832 56880 0 2.2 2.3 -2.7 4.2 -40.2 46.3 +2009 01 01 1549 54832 56940 0 2.5 2.1 -2.5 4.1 -37.5 40.5 +2009 01 01 1550 54832 57000 0 2.5 2.2 -2.2 4.0 -33.1 41.9 +2009 01 01 1551 54832 57060 0 2.2 2.7 -2.0 4.0 -30.1 51.5 +2009 01 01 1552 54832 57120 0 2.2 2.7 -2.0 4.0 -30.4 51.1 +2009 01 01 1553 54832 57180 0 1.1 2.8 -2.9 4.2 -43.2 68.7 +2009 01 01 1554 54832 57240 0 1.8 2.6 -2.2 3.8 -34.9 55.4 +2009 01 01 1555 54832 57300 0 1.9 2.5 -2.1 3.8 -33.2 52.6 +2009 01 01 1556 54832 57360 0 1.9 2.8 -2.0 3.9 -30.1 55.4 +2009 01 01 1557 54832 57420 0 1.8 3.0 -2.0 4.0 -29.8 59.0 +2009 01 01 1558 54832 57480 0 1.8 3.0 -2.1 4.1 -30.8 58.2 +2009 01 01 1559 54832 57540 0 1.9 3.0 -2.0 4.1 -28.8 57.5 +2009 01 01 1600 54832 57600 0 1.8 3.2 -1.7 4.0 -25.5 61.1 +2009 01 01 1601 54832 57660 0 1.9 3.1 -1.7 4.0 -25.3 58.1 +2009 01 01 1602 54832 57720 0 2.3 2.6 -1.6 3.8 -24.4 48.8 +2009 01 01 1603 54832 57780 0 2.0 2.2 -2.4 3.8 -38.4 48.4 +2009 01 01 1604 54832 57840 0 1.8 2.4 -2.3 3.8 -37.4 53.2 +2009 01 01 1605 54832 57900 0 1.5 2.8 -2.3 3.9 -35.4 61.2 +2009 01 01 1606 54832 57960 0 1.5 2.7 -2.4 3.9 -37.3 60.8 +2009 01 01 1607 54832 58020 0 1.2 2.9 -2.1 3.7 -33.4 67.8 +2009 01 01 1608 54832 58080 0 1.3 3.0 -1.9 3.8 -30.7 67.0 +2009 01 01 1609 54832 58140 0 1.5 2.9 -1.8 3.7 -28.9 62.5 +2009 01 01 1610 54832 58200 0 1.5 3.0 -1.3 3.6 -20.4 62.7 +2009 01 01 1611 54832 58260 0 1.8 2.3 -1.9 3.5 -32.7 51.7 +2009 01 01 1612 54832 58320 0 1.2 2.8 -2.1 3.6 -34.6 67.0 +2009 01 01 1613 54832 58380 0 1.1 2.7 -2.2 3.7 -37.3 67.1 +2009 01 01 1614 54832 58440 0 -0.1 2.9 -2.4 3.8 -39.7 91.3 +2009 01 01 1615 54832 58500 0 -2.1 1.7 -2.0 3.4 -37.1 141.4 +2009 01 01 1616 54832 58560 0 -4.4 -1.5 -0.0 4.7 -0.1 199.2 +2009 01 01 1617 54832 58620 0 -4.5 -1.2 -0.2 4.6 -2.3 194.7 +2009 01 01 1618 54832 58680 0 -4.3 -1.7 0.3 4.6 3.5 201.3 +2009 01 01 1619 54832 58740 0 -4.2 -1.9 0.4 4.6 5.0 204.7 +2009 01 01 1620 54832 58800 0 -3.9 -2.1 0.8 4.5 9.9 208.7 +2009 01 01 1621 54832 58860 0 -3.8 -2.1 0.8 4.5 10.7 208.9 +2009 01 01 1622 54832 58920 0 -3.7 -2.3 0.7 4.4 9.2 211.3 +2009 01 01 1623 54832 58980 0 -4.0 -2.1 -0.1 4.5 -0.8 207.8 +2009 01 01 1624 54832 59040 0 -3.9 -2.1 0.2 4.5 1.9 208.5 +2009 01 01 1625 54832 59100 0 -3.6 -2.4 0.7 4.4 9.3 213.6 +2009 01 01 1626 54832 59160 0 -3.4 -2.4 1.0 4.3 13.1 215.6 +2009 01 01 1627 54832 59220 0 -3.5 -2.8 0.3 4.5 3.5 219.3 +2009 01 01 1628 54832 59280 0 -3.6 -2.7 0.3 4.5 4.4 216.9 +2009 01 01 1629 54832 59340 0 -3.7 -2.5 0.3 4.5 3.4 213.7 +2009 01 01 1630 54832 59400 0 -3.9 -2.0 -0.1 4.4 -1.9 207.7 +2009 01 01 1631 54832 59460 0 -3.5 -2.5 -0.2 4.3 -2.5 215.3 +2009 01 01 1632 54832 59520 0 -3.6 -2.3 0.0 4.2 0.1 212.5 +2009 01 01 1633 54832 59580 0 -3.7 -2.2 0.1 4.3 1.1 210.4 +2009 01 01 1634 54832 59640 0 -3.8 -2.0 0.7 4.4 8.7 207.5 +2009 01 01 1635 54832 59700 0 -3.8 -2.1 0.7 4.4 8.8 208.7 +2009 01 01 1636 54832 59760 0 -3.7 -2.3 0.5 4.4 6.3 212.1 +2009 01 01 1637 54832 59820 0 -3.7 -2.3 0.3 4.4 3.6 212.3 +2009 01 01 1638 54832 59880 0 -3.7 -2.2 0.8 4.4 10.0 210.9 +2009 01 01 1639 54832 59940 0 -3.6 -2.2 0.5 4.3 7.0 211.8 +2009 01 01 1640 54832 60000 0 -3.7 -2.2 0.7 4.3 8.8 210.3 +2009 01 01 1641 54832 60060 0 -3.5 -2.3 0.7 4.2 9.7 213.8 +2009 01 01 1642 54832 60120 0 -3.1 -2.8 0.9 4.3 12.8 221.5 +2009 01 01 1643 54832 60180 0 -3.3 -2.2 1.6 4.3 21.4 213.9 +2009 01 01 1644 54832 60240 0 -3.1 -2.7 1.5 4.3 19.6 221.2 +2009 01 01 1645 54832 60300 0 -3.4 -2.6 1.1 4.4 14.5 217.5 +2009 01 01 1646 54832 60360 0 -3.3 -2.6 1.0 4.3 13.4 218.0 +2009 01 01 1647 54832 60420 0 -2.9 -2.8 1.2 4.2 16.5 224.0 +2009 01 01 1648 54832 60480 0 -2.8 -2.9 1.1 4.2 14.5 226.1 +2009 01 01 1649 54832 60540 0 -2.9 -2.8 1.2 4.2 16.8 223.9 +2009 01 01 1650 54832 60600 0 -3.3 -2.3 1.4 4.3 19.4 215.1 +2009 01 01 1651 54832 60660 0 -3.4 -2.1 1.5 4.3 21.0 211.3 +2009 01 01 1652 54832 60720 0 -3.2 -2.2 1.7 4.2 23.4 214.7 +2009 01 01 1653 54832 60780 0 -3.1 -2.3 1.6 4.2 22.0 216.1 +2009 01 01 1654 54832 60840 0 -3.2 -2.3 1.5 4.2 21.5 215.6 +2009 01 01 1655 54832 60900 0 -3.0 -2.4 1.7 4.2 23.8 219.1 +2009 01 01 1656 54832 60960 0 -3.3 -2.2 1.6 4.3 22.4 214.4 +2009 01 01 1657 54832 61020 0 -3.3 -2.1 1.8 4.3 24.7 212.8 +2009 01 01 1658 54832 61080 0 -3.2 -2.2 1.8 4.3 25.3 214.3 +2009 01 01 1659 54832 61140 0 -3.1 -2.1 1.9 4.3 27.0 213.8 +2009 01 01 1700 54832 61200 0 -3.1 -2.0 2.2 4.2 30.6 212.8 +2009 01 01 1701 54832 61260 0 -3.1 -2.1 2.0 4.3 28.2 215.0 +2009 01 01 1702 54832 61320 0 -2.9 -2.5 1.8 4.3 25.2 220.7 +2009 01 01 1703 54832 61380 0 -3.1 -2.2 2.1 4.3 29.0 214.9 +2009 01 01 1704 54832 61440 0 -3.2 -2.0 2.1 4.3 29.1 212.7 +2009 01 01 1705 54832 61500 0 -3.2 -2.0 2.1 4.3 29.6 212.8 +2009 01 01 1706 54832 61560 0 -3.2 -1.9 2.2 4.4 30.4 210.5 +2009 01 01 1707 54832 61620 0 -3.3 -1.8 2.2 4.3 30.4 208.7 +2009 01 01 1708 54832 61680 0 -3.4 -1.8 1.9 4.3 25.6 207.9 +2009 01 01 1709 54832 61740 0 -3.4 -2.2 1.5 4.3 20.2 213.0 +2009 01 01 1710 54832 61800 0 -3.4 -2.0 1.8 4.3 23.9 210.9 +2009 01 01 1711 54832 61860 0 -3.7 -1.9 1.5 4.4 19.9 207.8 +2009 01 01 1712 54832 61920 0 -3.8 -1.8 1.5 4.4 19.2 205.8 +2009 01 01 1713 54832 61980 0 -3.8 -1.6 1.5 4.4 19.3 202.7 +2009 01 01 1714 54832 62040 0 -3.7 -1.5 1.1 4.1 15.5 202.9 +2009 01 01 1715 54832 62100 0 -3.9 -1.3 0.8 4.2 11.1 198.3 +2009 01 01 1716 54832 62160 0 -4.2 -0.4 0.8 4.3 11.0 186.0 +2009 01 01 1717 54832 62220 0 -4.1 0.1 0.8 4.2 11.1 179.2 +2009 01 01 1718 54832 62280 0 -4.2 0.7 0.6 4.2 8.1 170.9 +2009 01 01 1719 54832 62340 0 -3.9 1.1 0.2 4.0 3.4 163.5 +2009 01 01 1720 54832 62400 0 -3.8 1.5 0.0 4.1 0.1 158.0 +2009 01 01 1721 54832 62460 0 -3.6 1.9 -0.4 4.1 -5.8 152.6 +2009 01 01 1722 54832 62520 0 -3.3 2.2 -0.5 4.0 -7.1 146.5 +2009 01 01 1723 54832 62580 0 -2.8 2.6 -0.9 3.9 -12.7 137.3 +2009 01 01 1724 54832 62640 0 -2.2 2.9 -1.4 3.9 -21.1 127.9 +2009 01 01 1725 54832 62700 0 -2.0 3.1 -1.0 3.8 -15.5 122.6 +2009 01 01 1726 54832 62760 0 -2.4 2.9 -0.7 3.8 -10.9 130.4 +2009 01 01 1727 54832 62820 0 -2.1 3.0 -1.0 3.8 -15.9 124.9 +2009 01 01 1728 54832 62880 0 -2.7 2.5 -1.0 3.8 -14.9 136.9 +2009 01 01 1729 54832 62940 0 -3.1 1.9 -1.2 3.9 -18.6 148.5 +2009 01 01 1730 54832 63000 0 -2.6 2.6 -1.1 3.8 -16.4 134.8 +2009 01 01 1731 54832 63060 0 -2.6 2.8 -0.5 3.8 -8.0 133.7 +2009 01 01 1732 54832 63120 0 -1.0 2.1 -2.5 3.4 -47.7 115.6 +2009 01 01 1733 54832 63180 0 -1.2 2.2 -2.1 3.3 -39.7 118.7 +2009 01 01 1734 54832 63240 0 -1.0 2.2 -2.0 3.1 -39.2 113.2 +2009 01 01 1735 54832 63300 0 -1.6 2.4 -1.3 3.2 -24.3 122.8 +2009 01 01 1736 54832 63360 0 -2.0 2.8 -1.4 3.7 -22.6 126.4 +2009 01 01 1737 54832 63420 0 -2.1 2.6 -1.7 3.7 -26.3 128.9 +2009 01 01 1738 54832 63480 0 -2.8 2.1 -1.7 3.9 -25.1 143.1 +2009 01 01 1739 54832 63540 0 -2.7 2.4 -1.3 3.8 -20.1 138.1 +2009 01 01 1740 54832 63600 0 -2.6 2.2 -1.6 3.7 -25.8 139.7 +2009 01 01 1741 54832 63660 0 -3.4 1.7 -0.9 3.9 -12.7 153.0 +2009 01 01 1742 54832 63720 0 -2.6 2.1 -2.3 4.0 -34.2 140.8 +2009 01 01 1743 54832 63780 0 -2.5 2.3 -2.2 4.1 -32.8 136.8 +2009 01 01 1744 54832 63840 0 -3.2 2.3 -0.5 4.0 -6.9 144.0 +2009 01 01 1745 54832 63900 0 -3.1 2.6 -0.9 4.1 -12.4 140.1 +2009 01 01 1746 54832 63960 0 -3.0 2.6 -1.1 4.1 -15.0 139.1 +2009 01 01 1747 54832 64020 0 -2.7 2.4 -1.4 3.9 -21.7 138.4 +2009 01 01 1748 54832 64080 0 -2.7 2.7 -1.2 4.0 -17.2 135.6 +2009 01 01 1749 54832 64140 0 -3.0 2.7 -0.9 4.2 -12.0 137.6 +2009 01 01 1750 54832 64200 0 -3.0 2.7 -1.0 4.2 -13.7 138.6 +2009 01 01 1751 54832 64260 0 -3.0 2.7 -1.1 4.2 -15.3 137.2 +2009 01 01 1752 54832 64320 0 -3.0 2.7 -1.1 4.2 -15.2 137.8 +2009 01 01 1753 54832 64380 0 -2.8 2.7 -1.1 4.1 -15.7 136.4 +2009 01 01 1754 54832 64440 0 -3.2 2.5 -0.9 4.1 -12.4 142.1 +2009 01 01 1755 54832 64500 0 -3.2 2.3 -0.9 4.1 -13.1 143.9 +2009 01 01 1756 54832 64560 0 -3.3 2.3 -0.9 4.1 -13.0 144.7 +2009 01 01 1757 54832 64620 0 -3.1 2.5 -0.7 4.1 -10.4 141.4 +2009 01 01 1758 54832 64680 0 -3.1 2.6 -0.6 4.1 -7.8 140.3 +2009 01 01 1759 54832 64740 0 -3.0 2.6 -0.7 4.0 -9.3 139.1 +2009 01 01 1800 54832 64800 0 -3.0 2.7 -0.7 4.1 -9.6 137.8 +2009 01 01 1801 54832 64860 0 -3.1 3.0 -0.8 4.4 -10.6 136.6 +2009 01 01 1802 54832 64920 0 -3.1 3.1 -0.8 4.5 -10.1 134.8 +2009 01 01 1803 54832 64980 0 -3.1 3.1 -0.8 4.5 -10.4 135.4 +2009 01 01 1804 54832 65040 0 -3.3 2.9 -0.9 4.5 -11.4 137.9 +2009 01 01 1805 54832 65100 0 -3.3 2.9 -0.8 4.5 -10.1 138.6 +2009 01 01 1806 54832 65160 0 -3.4 2.8 -0.5 4.5 -6.1 140.4 +2009 01 01 1807 54832 65220 0 -3.2 2.8 -0.7 4.4 -8.6 138.9 +2009 01 01 1808 54832 65280 0 -3.3 2.8 -0.6 4.4 -8.5 139.2 +2009 01 01 1809 54832 65340 0 -3.1 3.0 -0.6 4.4 -8.3 135.9 +2009 01 01 1810 54832 65400 0 -3.1 2.9 -0.7 4.3 -9.4 137.4 +2009 01 01 1811 54832 65460 0 -2.7 3.0 -1.1 4.2 -14.8 132.7 +2009 01 01 1812 54832 65520 0 -1.9 3.2 -1.6 4.1 -23.0 120.7 +2009 01 01 1813 54832 65580 0 -1.7 3.1 -1.7 3.9 -25.8 118.8 +2009 01 01 1814 54832 65640 0 -1.9 2.8 -2.0 3.9 -30.8 123.7 +2009 01 01 1815 54832 65700 0 -1.2 3.1 -1.6 3.7 -25.3 111.6 +2009 01 01 1816 54832 65760 0 -1.2 3.1 -1.8 3.7 -28.4 110.9 +2009 01 01 1817 54832 65820 0 -1.4 3.1 -1.6 3.8 -25.3 114.8 +2009 01 01 1818 54832 65880 0 -2.5 3.0 -0.8 4.0 -12.2 129.7 +2009 01 01 1819 54832 65940 0 -2.3 2.6 -1.7 3.9 -26.4 130.6 +2009 01 01 1820 54832 66000 0 -2.4 2.9 -1.2 4.0 -18.4 130.2 +2009 01 01 1821 54832 66060 0 -1.7 2.9 0.9 3.5 15.2 120.5 +2009 01 01 1822 54832 66120 0 -1.6 3.3 1.7 4.0 25.6 116.1 +2009 01 01 1823 54832 66180 0 -1.3 3.5 1.8 4.2 25.9 110.7 +2009 01 01 1824 54832 66240 0 -1.8 3.8 1.4 4.4 18.0 115.1 +2009 01 01 1825 54832 66300 0 -2.1 3.7 1.3 4.4 17.2 119.9 +2009 01 01 1826 54832 66360 0 -3.4 3.2 0.4 4.7 5.3 136.2 +2009 01 01 1827 54832 66420 0 -3.3 3.6 -0.5 4.9 -5.8 132.7 +2009 01 01 1828 54832 66480 0 -3.4 3.5 -0.9 4.9 -10.9 134.3 +2009 01 01 1829 54832 66540 0 -3.3 3.3 -1.6 4.9 -18.4 135.4 +2009 01 01 1830 54832 66600 0 -3.5 2.8 -2.2 4.9 -26.1 141.2 +2009 01 01 1831 54832 66660 0 -3.4 2.4 -2.5 4.9 -30.8 144.6 +2009 01 01 1832 54832 66720 0 -3.2 2.2 -2.8 4.8 -35.3 145.7 +2009 01 01 1833 54832 66780 0 -2.4 1.7 -3.2 4.3 -47.8 144.6 +2009 01 01 1834 54832 66840 0 -1.9 1.1 -3.6 4.2 -58.2 151.1 +2009 01 01 1835 54832 66900 0 -1.4 0.4 -3.8 4.1 -69.1 162.3 +2009 01 01 1836 54832 66960 0 -1.7 0.9 -3.7 4.1 -61.9 152.2 +2009 01 01 1837 54832 67020 0 -1.8 1.1 -3.6 4.2 -59.9 148.5 +2009 01 01 1838 54832 67080 0 -1.9 1.8 -2.7 3.8 -46.2 137.8 +2009 01 01 1839 54832 67140 0 -2.5 2.3 -1.7 3.9 -26.9 137.1 +2009 01 01 1840 54832 67200 0 -2.6 2.7 -1.1 3.9 -16.2 133.9 +2009 01 01 1841 54832 67260 0 -2.5 2.8 -1.0 3.9 -14.5 132.4 +2009 01 01 1842 54832 67320 0 -1.7 3.2 -0.7 3.7 -11.6 118.9 +2009 01 01 1843 54832 67380 0 -1.4 3.1 -1.2 3.6 -19.0 114.3 +2009 01 01 1844 54832 67440 0 -0.3 2.8 -2.0 3.4 -34.9 95.6 +2009 01 01 1845 54832 67500 0 -1.7 2.4 -2.0 3.6 -33.3 125.7 +2009 01 01 1846 54832 67560 0 -1.9 2.5 -1.8 3.6 -29.0 126.7 +2009 01 01 1847 54832 67620 0 -2.5 2.3 -1.3 3.7 -21.0 137.1 +2009 01 01 1848 54832 67680 0 -2.4 2.5 -0.9 3.6 -14.9 134.7 +2009 01 01 1849 54832 67740 0 -2.4 2.2 -1.4 3.6 -23.5 137.7 +2009 01 01 1850 54832 67800 0 -2.4 2.3 -1.7 3.7 -27.6 136.7 +2009 01 01 1851 54832 67860 0 -2.7 1.6 -2.2 3.9 -35.1 149.7 +2009 01 01 1852 54832 67920 0 -2.5 2.4 -1.8 3.9 -27.2 136.4 +2009 01 01 1853 54832 67980 0 -2.9 2.1 -1.6 3.9 -24.6 143.4 +2009 01 01 1854 54832 68040 0 -2.7 2.4 -1.0 3.7 -15.0 137.8 +2009 01 01 1855 54832 68100 0 -3.4 1.6 -1.1 3.9 -16.7 155.4 +2009 01 01 1856 54832 68160 0 -3.9 -0.2 -1.2 4.1 -17.3 183.2 +2009 01 01 1857 54832 68220 0 -4.1 -0.7 0.4 4.2 5.3 189.1 +2009 01 01 1858 54832 68280 0 -3.9 -0.2 1.0 4.1 14.9 183.4 +2009 01 01 1859 54832 68340 0 -3.8 0.9 1.1 4.0 15.8 166.2 +2009 01 01 1900 54832 68400 0 -3.9 0.7 0.7 4.0 10.5 169.2 +2009 01 01 1901 54832 68460 0 -4.0 0.6 -0.2 4.0 -3.5 171.9 +2009 01 01 1902 54832 68520 0 -3.9 0.6 -0.7 4.0 -10.7 170.9 +2009 01 01 1903 54832 68580 0 -3.9 0.5 -1.1 4.1 -15.1 172.2 +2009 01 01 1904 54832 68640 0 -4.0 0.2 -1.1 4.1 -14.8 177.5 +2009 01 01 1905 54832 68700 0 -3.9 -0.3 -0.8 4.0 -11.5 184.9 +2009 01 01 1906 54832 68760 0 -3.3 0.4 -1.6 3.7 -26.5 173.4 +2009 01 01 1907 54832 68820 0 -2.4 2.3 -1.2 3.5 -20.1 136.8 +2009 01 01 1908 54832 68880 0 -2.3 2.6 -0.4 3.5 -6.4 131.2 +2009 01 01 1909 54832 68940 0 -3.2 1.9 -0.8 3.8 -11.8 149.7 +2009 01 01 1910 54832 69000 0 -3.6 1.4 -1.1 4.0 -16.0 158.5 +2009 01 01 1911 54832 69060 0 -3.4 1.0 -1.8 4.0 -27.3 162.9 +2009 01 01 1912 54832 69120 0 -3.6 1.5 -1.1 4.0 -15.4 157.2 +2009 01 01 1913 54832 69180 0 -3.4 1.9 0.7 4.0 10.6 151.3 +2009 01 01 1914 54832 69240 0 -3.8 1.6 0.2 4.1 2.6 156.7 +2009 01 01 1915 54832 69300 0 -4.0 1.4 -0.0 4.2 -0.3 160.6 +2009 01 01 1916 54832 69360 0 -3.8 1.6 -0.2 4.2 -2.3 156.8 +2009 01 01 1917 54832 69420 0 -3.8 1.7 -0.4 4.2 -5.7 156.0 +2009 01 01 1918 54832 69480 0 -4.0 0.8 -1.0 4.2 -13.2 168.3 +2009 01 01 1919 54832 69540 0 -3.9 0.3 -1.4 4.2 -19.0 175.1 +2009 01 01 1920 54832 69600 0 -4.0 0.7 -0.9 4.1 -12.2 169.8 +2009 01 01 1921 54832 69660 0 -4.0 0.2 -1.2 4.2 -16.7 177.3 +2009 01 01 1922 54832 69720 0 -4.0 -0.1 -1.2 4.1 -16.6 181.3 +2009 01 01 1923 54832 69780 0 -3.9 -0.3 -0.9 4.1 -13.4 184.6 +2009 01 01 1924 54832 69840 0 -3.9 -0.4 -1.3 4.1 -18.4 186.0 +2009 01 01 1925 54832 69900 0 -3.7 -0.4 -1.6 4.0 -23.5 185.7 +2009 01 01 1926 54832 69960 0 -3.6 0.0 -1.7 4.0 -25.3 179.8 +2009 01 01 1927 54832 70020 0 -3.5 1.4 -1.7 4.1 -24.2 158.6 +2009 01 01 1928 54832 70080 0 -3.7 0.9 -1.7 4.1 -24.0 166.1 +2009 01 01 1929 54832 70140 0 -3.7 0.0 -1.8 4.1 -26.2 179.6 +2009 01 01 1930 54832 70200 0 -3.6 -0.6 -1.9 4.2 -27.5 189.1 +2009 01 01 1931 54832 70260 0 -3.5 0.4 -2.1 4.1 -31.1 174.1 +2009 01 01 1932 54832 70320 0 -3.7 -0.2 -2.0 4.2 -28.4 183.1 +2009 01 01 1933 54832 70380 0 -2.2 2.8 -1.9 4.0 -28.1 128.0 +2009 01 01 1934 54832 70440 0 -1.6 3.3 -1.4 3.9 -20.4 115.3 +2009 01 01 1935 54832 70500 0 -2.6 2.8 -1.4 4.1 -19.4 132.3 +2009 01 01 1936 54832 70560 0 -2.6 2.7 -1.6 4.1 -23.3 134.1 +2009 01 01 1937 54832 70620 0 -2.9 2.8 -1.2 4.2 -15.9 136.6 +2009 01 01 1938 54832 70680 0 -3.5 1.9 -1.7 4.4 -23.3 151.4 +2009 01 01 1939 54832 70740 0 -3.5 1.6 -2.0 4.3 -27.0 155.5 +2009 01 01 1940 54832 70800 0 -3.5 2.0 -1.4 4.3 -19.5 150.6 +2009 01 01 1941 54832 70860 0 -3.3 2.6 -0.6 4.2 -8.1 141.6 +2009 01 01 1942 54832 70920 0 -3.3 2.4 -1.2 4.2 -16.2 144.0 +2009 01 01 1943 54832 70980 0 -3.3 2.1 -1.7 4.3 -23.9 147.0 +2009 01 01 1944 54832 71040 0 -3.5 2.2 -1.3 4.3 -17.1 147.8 +2009 01 01 1945 54832 71100 0 -3.5 2.1 -1.3 4.3 -18.2 149.8 +2009 01 01 1946 54832 71160 0 -3.3 1.4 -2.2 4.2 -31.2 157.3 +2009 01 01 1947 54832 71220 0 -3.3 1.2 -2.4 4.3 -35.0 160.7 +2009 01 01 1948 54832 71280 0 -3.6 1.6 -1.7 4.3 -23.3 155.5 +2009 01 01 1949 54832 71340 0 -3.7 1.6 -1.7 4.3 -23.1 156.5 +2009 01 01 1950 54832 71400 0 -3.5 1.7 -1.9 4.3 -26.0 154.2 +2009 01 01 1951 54832 71460 0 -3.5 1.4 -1.8 4.2 -25.0 158.5 +2009 01 01 1952 54832 71520 0 -3.3 1.3 -2.0 4.1 -29.3 157.7 +2009 01 01 1953 54832 71580 0 -3.5 1.3 -1.8 4.1 -26.0 160.0 +2009 01 01 1954 54832 71640 0 -3.7 1.5 -1.1 4.1 -14.8 158.0 +2009 01 01 1955 54832 71700 0 -3.8 1.3 -1.1 4.2 -15.0 161.6 +2009 01 01 1956 54832 71760 0 -3.9 1.4 -1.1 4.3 -14.7 160.3 +2009 01 01 1957 54832 71820 0 -3.9 1.4 -1.2 4.3 -16.0 160.5 +2009 01 01 1958 54832 71880 0 -3.8 1.4 -1.0 4.1 -13.4 160.3 +2009 01 01 1959 54832 71940 0 -3.8 1.1 -1.2 4.2 -16.6 163.6 +2009 01 01 2000 54832 72000 0 -4.1 0.8 -0.3 4.2 -4.3 169.2 +2009 01 01 2001 54832 72060 0 -4.2 0.7 0.5 4.3 6.6 170.8 +2009 01 01 2002 54832 72120 0 -4.2 0.8 0.1 4.3 2.0 169.1 +2009 01 01 2003 54832 72180 0 -4.1 0.7 0.5 4.2 7.2 169.9 +2009 01 01 2004 54832 72240 0 -4.0 0.8 0.2 4.1 3.0 169.2 +2009 01 01 2005 54832 72300 0 -4.0 1.0 -1.0 4.3 -13.0 166.4 +2009 01 01 2006 54832 72360 0 -3.9 1.1 -1.4 4.3 -19.8 163.9 +2009 01 01 2007 54832 72420 0 -3.9 0.8 -1.3 4.2 -18.6 168.1 +2009 01 01 2008 54832 72480 0 -3.9 0.9 -1.4 4.3 -19.3 167.3 +2009 01 01 2009 54832 72540 0 -3.7 0.6 -2.1 4.3 -29.1 170.2 +2009 01 01 2010 54832 72600 0 -3.8 0.6 -2.1 4.4 -28.0 170.9 +2009 01 01 2011 54832 72660 0 -4.1 0.4 -1.6 4.4 -21.5 174.7 +2009 01 01 2012 54832 72720 0 -3.9 -0.0 -1.7 4.3 -23.8 180.3 +2009 01 01 2013 54832 72780 0 -4.0 -0.3 -1.5 4.3 -20.3 183.6 +2009 01 01 2014 54832 72840 0 -4.1 -0.4 -1.2 4.3 -16.1 185.4 +2009 01 01 2015 54832 72900 0 -4.3 -0.2 0.1 4.3 1.3 182.5 +2009 01 01 2016 54832 72960 0 -4.3 -0.4 -0.3 4.3 -3.7 185.8 +2009 01 01 2017 54832 73020 0 -3.9 -0.1 -1.6 4.3 -22.2 181.8 +2009 01 01 2018 54832 73080 0 -3.9 0.0 -1.8 4.3 -24.8 179.9 +2009 01 01 2019 54832 73140 0 -3.8 0.1 -2.0 4.3 -28.4 178.9 +2009 01 01 2020 54832 73200 0 -3.8 -0.0 -2.1 4.3 -29.1 180.7 +2009 01 01 2021 54832 73260 0 -3.8 0.1 -1.9 4.3 -26.8 178.0 +2009 01 01 2022 54832 73320 0 -3.9 0.1 -1.9 4.3 -25.7 178.8 +2009 01 01 2023 54832 73380 0 -3.5 0.6 -2.7 4.4 -36.9 170.6 +2009 01 01 2024 54832 73440 0 -3.7 0.0 -2.2 4.3 -30.8 179.7 +2009 01 01 2025 54832 73500 0 -3.7 -0.0 -2.3 4.3 -31.9 180.1 +2009 01 01 2026 54832 73560 0 -3.8 -0.1 -2.1 4.4 -29.2 180.9 +2009 01 01 2027 54832 73620 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2028 54832 73680 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2029 54832 73740 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2030 54832 73800 0 -3.7 -0.3 -2.0 4.3 -28.7 185.2 +2009 01 01 2031 54832 73860 0 -3.7 -0.3 -2.2 4.3 -30.8 185.3 +2009 01 01 2032 54832 73920 0 -4.0 -0.3 -1.9 4.4 -26.1 184.1 +2009 01 01 2033 54832 73980 0 -3.9 -1.2 -1.4 4.3 -18.9 197.6 +2009 01 01 2034 54832 74040 0 -4.0 -0.6 -1.7 4.4 -22.3 188.3 +2009 01 01 2035 54832 74100 0 -4.2 -0.8 -1.3 4.5 -16.5 190.4 +2009 01 01 2036 54832 74160 0 -3.9 -1.1 -1.7 4.4 -22.7 195.9 +2009 01 01 2037 54832 74220 0 -3.7 -1.3 -2.0 4.4 -27.1 198.7 +2009 01 01 2038 54832 74280 0 -3.8 -1.0 -2.0 4.4 -27.5 194.6 +2009 01 01 2039 54832 74340 0 -3.6 -0.9 -2.4 4.4 -32.7 194.7 +2009 01 01 2040 54832 74400 0 -3.3 -1.0 -2.8 4.5 -38.4 196.9 +2009 01 01 2041 54832 74460 0 -3.7 -1.6 -2.1 4.5 -27.1 203.8 +2009 01 01 2042 54832 74520 0 -3.7 -1.7 -1.9 4.5 -25.5 204.6 +2009 01 01 2043 54832 74580 0 -4.0 -1.2 -1.8 4.5 -23.2 197.0 +2009 01 01 2044 54832 74640 0 -4.0 -0.8 -1.9 4.5 -25.2 191.7 +2009 01 01 2045 54832 74700 0 -4.2 -0.5 -1.9 4.6 -24.3 186.3 +2009 01 01 2046 54832 74760 0 -4.2 -0.5 -1.8 4.6 -23.5 186.5 +2009 01 01 2047 54832 74820 0 -4.2 -0.4 -1.9 4.6 -23.9 185.3 +2009 01 01 2048 54832 74880 0 -4.0 -0.8 -2.0 4.5 -25.9 191.4 +2009 01 01 2049 54832 74940 0 -4.1 -0.8 -1.9 4.6 -24.2 190.6 +2009 01 01 2050 54832 75000 0 -4.1 -0.6 -1.8 4.5 -24.0 188.6 +2009 01 01 2051 54832 75060 0 -4.1 -0.9 -1.7 4.5 -22.5 192.1 +2009 01 01 2052 54832 75120 0 -4.2 -0.9 -1.5 4.6 -19.8 191.5 +2009 01 01 2053 54832 75180 0 -4.2 -0.7 -1.6 4.6 -20.0 189.7 +2009 01 01 2054 54832 75240 0 -4.3 -0.8 -1.4 4.6 -17.8 190.4 +2009 01 01 2055 54832 75300 0 -4.1 -1.8 -1.0 4.6 -13.2 203.7 +2009 01 01 2056 54832 75360 0 -4.2 -1.2 -1.3 4.6 -16.8 195.9 +2009 01 01 2057 54832 75420 0 -4.3 -1.1 -1.3 4.6 -15.9 194.2 +2009 01 01 2058 54832 75480 0 -4.2 -1.2 -1.3 4.6 -16.9 195.3 +2009 01 01 2059 54832 75540 0 -4.2 -1.2 -1.2 4.5 -15.3 196.4 +2009 01 01 2100 54832 75600 0 -4.2 -1.3 -1.2 4.6 -14.6 196.9 +2009 01 01 2101 54832 75660 0 -4.2 -1.1 -1.3 4.6 -16.8 194.4 +2009 01 01 2102 54832 75720 0 -4.3 -1.0 -1.3 4.6 -16.8 193.8 +2009 01 01 2103 54832 75780 0 -4.1 -1.2 -1.3 4.5 -16.8 196.6 +2009 01 01 2104 54832 75840 0 -4.0 -1.4 -1.2 4.4 -15.6 199.6 +2009 01 01 2105 54832 75900 0 -4.1 -1.5 -1.2 4.5 -15.4 200.1 +2009 01 01 2106 54832 75960 0 -3.9 -1.9 -1.0 4.5 -12.6 205.3 +2009 01 01 2107 54832 76020 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2108 54832 76080 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2109 54832 76140 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2110 54832 76200 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2111 54832 76260 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2112 54832 76320 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2113 54832 76380 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2114 54832 76440 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2115 54832 76500 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2116 54832 76560 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2117 54832 76620 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2118 54832 76680 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2119 54832 76740 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2120 54832 76800 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2121 54832 76860 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2122 54832 76920 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2123 54832 76980 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2124 54832 77040 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2125 54832 77100 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2126 54832 77160 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2127 54832 77220 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2128 54832 77280 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2129 54832 77340 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2130 54832 77400 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2131 54832 77460 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2132 54832 77520 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2133 54832 77580 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2134 54832 77640 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2135 54832 77700 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2136 54832 77760 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2137 54832 77820 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2138 54832 77880 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2139 54832 77940 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2140 54832 78000 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2141 54832 78060 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2142 54832 78120 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2143 54832 78180 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2144 54832 78240 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2145 54832 78300 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2146 54832 78360 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2147 54832 78420 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2148 54832 78480 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2149 54832 78540 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2150 54832 78600 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2151 54832 78660 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2152 54832 78720 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2153 54832 78780 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2154 54832 78840 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2155 54832 78900 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2156 54832 78960 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2157 54832 79020 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2158 54832 79080 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2159 54832 79140 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2200 54832 79200 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2201 54832 79260 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2202 54832 79320 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2203 54832 79380 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2204 54832 79440 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2205 54832 79500 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2206 54832 79560 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2207 54832 79620 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2208 54832 79680 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2209 54832 79740 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2210 54832 79800 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2211 54832 79860 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2212 54832 79920 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2213 54832 79980 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2214 54832 80040 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2215 54832 80100 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2216 54832 80160 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2217 54832 80220 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2218 54832 80280 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2219 54832 80340 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2220 54832 80400 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2221 54832 80460 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2222 54832 80520 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2223 54832 80580 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2224 54832 80640 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2225 54832 80700 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2226 54832 80760 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2227 54832 80820 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2228 54832 80880 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2229 54832 80940 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2230 54832 81000 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2231 54832 81060 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2232 54832 81120 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2233 54832 81180 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2234 54832 81240 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2235 54832 81300 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2236 54832 81360 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2237 54832 81420 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2238 54832 81480 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2239 54832 81540 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2240 54832 81600 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2241 54832 81660 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2242 54832 81720 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2243 54832 81780 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2244 54832 81840 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2245 54832 81900 0 -3.9 -1.4 -1.0 4.3 -13.4 200.0 +2009 01 01 2246 54832 81960 0 -4.0 -3.0 -0.1 5.0 -1.3 217.2 +2009 01 01 2247 54832 82020 0 -3.9 -3.3 -0.5 5.1 -5.1 220.3 +2009 01 01 2248 54832 82080 0 -3.8 -3.3 -0.4 5.0 -4.3 220.7 +2009 01 01 2249 54832 82140 0 -3.3 -3.7 -0.7 5.0 -7.5 227.7 +2009 01 01 2250 54832 82200 0 -3.4 -3.8 -0.6 5.1 -6.3 228.1 +2009 01 01 2251 54832 82260 0 -3.4 -3.8 -0.5 5.1 -5.1 227.8 +2009 01 01 2252 54832 82320 0 -3.5 -3.6 -0.6 5.0 -6.8 226.0 +2009 01 01 2253 54832 82380 0 -3.5 -3.5 -0.6 5.0 -6.5 225.2 +2009 01 01 2254 54832 82440 0 -3.8 -3.5 -0.2 5.2 -2.1 222.9 +2009 01 01 2255 54832 82500 0 -3.7 -3.6 -0.3 5.1 -3.0 224.1 +2009 01 01 2256 54832 82560 0 -3.7 -3.8 -0.5 5.3 -5.0 225.5 +2009 01 01 2257 54832 82620 0 -3.4 -4.0 -0.6 5.3 -6.8 229.2 +2009 01 01 2258 54832 82680 0 -3.2 -4.1 -0.4 5.2 -4.1 231.5 +2009 01 01 2259 54832 82740 0 -2.2 -4.4 -0.7 5.0 -8.2 243.3 +2009 01 01 2300 54832 82800 0 -2.2 -4.4 -0.4 5.0 -4.9 243.9 +2009 01 01 2301 54832 82860 0 -2.7 -4.3 -0.5 5.1 -6.2 238.3 +2009 01 01 2302 54832 82920 0 -2.5 -4.4 -0.7 5.1 -8.4 240.3 +2009 01 01 2303 54832 82980 0 -3.4 -4.1 0.4 5.3 4.6 229.6 +2009 01 01 2304 54832 83040 0 -3.9 -3.1 1.6 5.3 18.0 219.0 +2009 01 01 2305 54832 83100 0 -3.9 -3.0 1.7 5.2 18.7 217.3 +2009 01 01 2306 54832 83160 0 -4.0 -3.3 0.6 5.2 7.1 220.1 +2009 01 01 2307 54832 83220 0 -4.1 -3.3 0.6 5.3 6.4 218.9 +2009 01 01 2308 54832 83280 0 -4.0 -3.5 0.4 5.4 4.8 221.2 +2009 01 01 2309 54832 83340 0 -4.0 -3.5 0.4 5.3 4.8 221.3 +2009 01 01 2310 54832 83400 0 -3.6 -3.8 1.1 5.3 11.6 226.2 +2009 01 01 2311 54832 83460 0 -3.5 -3.9 1.1 5.3 11.4 228.0 +2009 01 01 2312 54832 83520 0 -4.0 -3.6 0.7 5.4 8.0 221.6 +2009 01 01 2313 54832 83580 0 -4.0 -3.5 0.9 5.4 9.2 221.5 +2009 01 01 2314 54832 83640 0 -3.9 -3.6 0.9 5.3 10.1 222.6 +2009 01 01 2315 54832 83700 0 -4.0 -3.5 0.9 5.4 9.4 221.0 +2009 01 01 2316 54832 83760 0 -4.0 -3.6 0.8 5.4 8.5 221.8 +2009 01 01 2317 54832 83820 0 -4.0 -3.4 0.8 5.3 8.3 220.7 +2009 01 01 2318 54832 83880 0 -4.0 -3.5 0.8 5.4 8.8 221.2 +2009 01 01 2319 54832 83940 0 -4.0 -3.6 0.8 5.4 8.6 222.6 +2009 01 01 2320 54832 84000 0 -4.2 -3.5 0.7 5.5 7.2 220.3 +2009 01 01 2321 54832 84060 0 -4.1 -3.6 0.4 5.5 4.1 221.4 +2009 01 01 2322 54832 84120 0 -4.0 -3.7 0.3 5.5 3.3 222.7 +2009 01 01 2323 54832 84180 0 -4.3 -3.4 0.2 5.5 2.2 217.9 +2009 01 01 2324 54832 84240 0 -4.4 -3.2 0.4 5.5 4.5 216.4 +2009 01 01 2325 54832 84300 0 -4.2 -3.5 0.3 5.5 2.8 219.7 +2009 01 01 2326 54832 84360 0 -4.6 -3.0 -0.3 5.5 -2.7 213.3 +2009 01 01 2327 54832 84420 0 -4.1 -3.5 -0.2 5.4 -2.1 220.2 +2009 01 01 2328 54832 84480 0 -4.3 -3.4 -0.2 5.5 -2.1 218.8 +2009 01 01 2329 54832 84540 0 -4.2 -3.4 -0.0 5.4 -0.1 218.6 +2009 01 01 2330 54832 84600 0 -4.4 -3.3 -0.0 5.4 -0.4 216.7 +2009 01 01 2331 54832 84660 0 -4.1 -3.2 -0.4 5.2 -4.2 217.5 +2009 01 01 2332 54832 84720 0 -4.2 -3.2 0.0 5.3 0.2 216.7 +2009 01 01 2333 54832 84780 0 -4.5 -3.1 0.0 5.5 0.2 214.0 +2009 01 01 2334 54832 84840 0 -4.5 -3.2 -0.0 5.6 -0.5 215.4 +2009 01 01 2335 54832 84900 0 -4.4 -3.3 0.5 5.5 5.3 216.9 +2009 01 01 2336 54832 84960 0 -4.5 -3.1 0.8 5.5 8.4 214.6 +2009 01 01 2337 54832 85020 0 -4.4 -3.2 0.3 5.4 2.8 216.1 +2009 01 01 2338 54832 85080 0 -4.4 -3.3 0.7 5.6 6.8 217.0 +2009 01 01 2339 54832 85140 0 -4.3 -3.4 0.8 5.5 7.9 217.8 +2009 01 01 2340 54832 85200 0 -4.3 -3.4 0.4 5.5 4.5 218.0 +2009 01 01 2341 54832 85260 0 -4.3 -3.5 0.5 5.6 5.5 218.6 +2009 01 01 2342 54832 85320 0 -4.5 -3.3 0.6 5.6 6.3 216.3 +2009 01 01 2343 54832 85380 0 -4.8 -3.2 0.4 5.8 4.1 213.9 +2009 01 01 2344 54832 85440 0 -4.6 -3.3 0.0 5.6 0.3 215.4 +2009 01 01 2345 54832 85500 0 -4.6 -3.3 0.4 5.7 3.7 215.6 +2009 01 01 2346 54832 85560 0 -4.5 -3.3 0.5 5.6 4.8 216.6 +2009 01 01 2347 54832 85620 0 -4.6 -3.2 0.5 5.7 5.3 215.0 +2009 01 01 2348 54832 85680 0 -4.5 -3.3 0.4 5.6 3.8 216.0 +2009 01 01 2349 54832 85740 0 -4.7 -3.1 -0.1 5.6 -1.5 212.9 +2009 01 01 2350 54832 85800 0 -4.7 -3.1 -0.2 5.6 -2.1 213.0 +2009 01 01 2351 54832 85860 0 -4.7 -3.1 0.0 5.6 0.2 213.2 +2009 01 01 2352 54832 85920 0 -4.7 -3.1 0.7 5.7 7.2 213.3 +2009 01 01 2353 54832 85980 0 -4.9 -2.8 0.7 5.7 7.5 209.9 +2009 01 01 2354 54832 86040 0 -4.5 -3.1 0.6 5.5 5.9 214.0 +2009 01 01 2355 54832 86100 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2356 54832 86160 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2357 54832 86220 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2009 01 01 2358 54832 86280 0 -5.4 -2.0 0.8 5.8 8.0 200.1 +2009 01 01 2359 54832 86340 0 -4.5 -3.4 -0.1 5.6 -1.2 216.8 diff --git a/pysatSpaceWeather/tests/test_data/20090101_ace_sis_5m.txt b/pysatSpaceWeather/tests/test_data/20090101_ace_sis_5m.txt new file mode 100644 index 00000000..0a5e859d --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/20090101_ace_sis_5m.txt @@ -0,0 +1,304 @@ +:Data_list: 20090101_ace_sis_5m.txt +:Created: 2009 Jan 02 0011 UT +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comments and suggestions to SWPC.Webmaster@noaa.gov +# +# Units: proton flux p/cs2-sec-ster +# Status(S): 0 = nominal data, 1 to 8 = bad data record, 9 = no data +# Missing data values: -1.00e+05 +# Source: ACE Satellite - Solar Isotope Spectrometer +# +# 5-minute averaged Real-time Integral Flux of High-energy Solar Protons +# +# Modified Seconds +# UT Date Time Julian of the ---- Integral Proton Flux ---- +# YR MO DA HHMM Day Day S > 10 MeV S > 30 MeV +#-------------------------------------------------------------------- +2009 01 01 0000 54832 0 0 2.21e+00 0 1.54e+00 +2009 01 01 0005 54832 300 0 2.17e+00 0 1.53e+00 +2009 01 01 0010 54832 600 0 2.17e+00 0 1.54e+00 +2009 01 01 0015 54832 900 0 2.20e+00 0 1.54e+00 +2009 01 01 0020 54832 1200 0 2.18e+00 0 1.52e+00 +2009 01 01 0025 54832 1500 0 2.20e+00 0 1.55e+00 +2009 01 01 0030 54832 1800 0 2.14e+00 0 1.50e+00 +2009 01 01 0035 54832 2100 0 2.15e+00 0 1.50e+00 +2009 01 01 0040 54832 2400 0 2.19e+00 0 1.54e+00 +2009 01 01 0045 54832 2700 0 2.15e+00 0 1.50e+00 +2009 01 01 0050 54832 3000 0 2.20e+00 0 1.54e+00 +2009 01 01 0055 54832 3300 0 2.18e+00 0 1.53e+00 +2009 01 01 0100 54832 3600 0 2.17e+00 0 1.51e+00 +2009 01 01 0105 54832 3900 0 2.18e+00 0 1.52e+00 +2009 01 01 0110 54832 4200 0 2.19e+00 0 1.53e+00 +2009 01 01 0115 54832 4500 0 2.16e+00 0 1.51e+00 +2009 01 01 0120 54832 4800 0 2.17e+00 0 1.49e+00 +2009 01 01 0125 54832 5100 0 2.16e+00 0 1.52e+00 +2009 01 01 0130 54832 5400 0 2.18e+00 0 1.53e+00 +2009 01 01 0135 54832 5700 0 2.14e+00 0 1.51e+00 +2009 01 01 0140 54832 6000 0 2.17e+00 0 1.52e+00 +2009 01 01 0145 54832 6300 0 2.15e+00 0 1.51e+00 +2009 01 01 0150 54832 6600 0 2.14e+00 0 1.48e+00 +2009 01 01 0155 54832 6900 0 2.14e+00 0 1.50e+00 +2009 01 01 0200 54832 7200 0 2.12e+00 0 1.48e+00 +2009 01 01 0205 54832 7500 0 2.26e+00 0 1.58e+00 +2009 01 01 0210 54832 7800 0 2.32e+00 0 1.62e+00 +2009 01 01 0215 54832 8100 0 2.21e+00 0 1.55e+00 +2009 01 01 0220 54832 8400 0 2.17e+00 0 1.52e+00 +2009 01 01 0225 54832 8700 0 2.18e+00 0 1.53e+00 +2009 01 01 0230 54832 9000 0 2.17e+00 0 1.51e+00 +2009 01 01 0235 54832 9300 0 2.19e+00 0 1.54e+00 +2009 01 01 0240 54832 9600 0 2.13e+00 0 1.51e+00 +2009 01 01 0245 54832 9900 0 2.15e+00 0 1.49e+00 +2009 01 01 0250 54832 10200 0 2.15e+00 0 1.51e+00 +2009 01 01 0255 54832 10500 0 2.19e+00 0 1.52e+00 +2009 01 01 0300 54832 10800 0 2.15e+00 0 1.50e+00 +2009 01 01 0305 54832 11100 0 2.18e+00 0 1.53e+00 +2009 01 01 0310 54832 11400 0 2.19e+00 0 1.53e+00 +2009 01 01 0315 54832 11700 0 2.22e+00 0 1.55e+00 +2009 01 01 0320 54832 12000 0 2.19e+00 0 1.53e+00 +2009 01 01 0325 54832 12300 0 2.17e+00 0 1.52e+00 +2009 01 01 0330 54832 12600 0 2.16e+00 0 1.52e+00 +2009 01 01 0335 54832 12900 0 2.17e+00 0 1.51e+00 +2009 01 01 0340 54832 13200 0 2.13e+00 0 1.50e+00 +2009 01 01 0345 54832 13500 0 2.14e+00 0 1.50e+00 +2009 01 01 0350 54832 13800 0 2.17e+00 0 1.52e+00 +2009 01 01 0355 54832 14100 0 2.12e+00 0 1.48e+00 +2009 01 01 0400 54832 14400 0 2.12e+00 0 1.48e+00 +2009 01 01 0405 54832 14700 0 2.13e+00 0 1.50e+00 +2009 01 01 0410 54832 15000 0 2.12e+00 0 1.47e+00 +2009 01 01 0415 54832 15300 0 2.10e+00 0 1.45e+00 +2009 01 01 0420 54832 15600 0 2.18e+00 0 1.53e+00 +2009 01 01 0425 54832 15900 0 2.36e+00 0 1.64e+00 +2009 01 01 0430 54832 16200 0 2.23e+00 0 1.56e+00 +2009 01 01 0435 54832 16500 0 2.17e+00 0 1.52e+00 +2009 01 01 0440 54832 16800 0 2.19e+00 0 1.51e+00 +2009 01 01 0445 54832 17100 0 2.06e+00 0 1.44e+00 +2009 01 01 0450 54832 17400 0 2.20e+00 0 1.53e+00 +2009 01 01 0455 54832 17700 0 2.16e+00 0 1.51e+00 +2009 01 01 0500 54832 18000 0 2.19e+00 0 1.53e+00 +2009 01 01 0505 54832 18300 0 2.21e+00 0 1.54e+00 +2009 01 01 0510 54832 18600 0 2.19e+00 0 1.53e+00 +2009 01 01 0515 54832 18900 0 2.17e+00 0 1.51e+00 +2009 01 01 0520 54832 19200 0 2.21e+00 0 1.53e+00 +2009 01 01 0525 54832 19500 0 2.22e+00 0 1.57e+00 +2009 01 01 0530 54832 19800 0 2.19e+00 0 1.51e+00 +2009 01 01 0535 54832 20100 0 2.17e+00 0 1.51e+00 +2009 01 01 0540 54832 20400 0 2.13e+00 0 1.50e+00 +2009 01 01 0545 54832 20700 0 2.19e+00 0 1.54e+00 +2009 01 01 0550 54832 21000 0 2.10e+00 0 1.49e+00 +2009 01 01 0555 54832 21300 0 2.16e+00 0 1.52e+00 +2009 01 01 0600 54832 21600 0 2.11e+00 0 1.47e+00 +2009 01 01 0605 54832 21900 0 2.14e+00 0 1.50e+00 +2009 01 01 0610 54832 22200 0 2.15e+00 0 1.50e+00 +2009 01 01 0615 54832 22500 0 2.10e+00 0 1.47e+00 +2009 01 01 0620 54832 22800 0 2.09e+00 0 1.44e+00 +2009 01 01 0625 54832 23100 0 2.12e+00 0 1.48e+00 +2009 01 01 0630 54832 23400 0 2.11e+00 0 1.47e+00 +2009 01 01 0635 54832 23700 0 2.16e+00 0 1.51e+00 +2009 01 01 0640 54832 24000 0 2.32e+00 0 1.63e+00 +2009 01 01 0645 54832 24300 0 2.27e+00 0 1.60e+00 +2009 01 01 0650 54832 24600 0 2.26e+00 0 1.58e+00 +2009 01 01 0655 54832 24900 0 2.19e+00 0 1.54e+00 +2009 01 01 0700 54832 25200 0 2.23e+00 0 1.58e+00 +2009 01 01 0705 54832 25500 0 2.13e+00 0 1.48e+00 +2009 01 01 0710 54832 25800 0 2.15e+00 0 1.50e+00 +2009 01 01 0715 54832 26100 0 2.13e+00 0 1.50e+00 +2009 01 01 0720 54832 26400 0 2.21e+00 0 1.55e+00 +2009 01 01 0725 54832 26700 0 2.20e+00 0 1.55e+00 +2009 01 01 0730 54832 27000 0 2.17e+00 0 1.51e+00 +2009 01 01 0735 54832 27300 0 2.15e+00 0 1.50e+00 +2009 01 01 0740 54832 27600 9 -1.00e+05 9 -1.00e+05 +2009 01 01 0745 54832 27900 9 -1.00e+05 9 -1.00e+05 +2009 01 01 0750 54832 28200 0 2.16e+00 0 1.52e+00 +2009 01 01 0755 54832 28500 0 2.16e+00 0 1.51e+00 +2009 01 01 0800 54832 28800 0 2.16e+00 0 1.51e+00 +2009 01 01 0805 54832 29100 0 2.14e+00 0 1.50e+00 +2009 01 01 0810 54832 29400 0 2.15e+00 0 1.50e+00 +2009 01 01 0815 54832 29700 0 2.12e+00 0 1.49e+00 +2009 01 01 0820 54832 30000 0 2.18e+00 0 1.54e+00 +2009 01 01 0825 54832 30300 0 2.14e+00 0 1.50e+00 +2009 01 01 0830 54832 30600 0 2.11e+00 0 1.47e+00 +2009 01 01 0835 54832 30900 0 2.11e+00 0 1.49e+00 +2009 01 01 0840 54832 31200 0 2.13e+00 0 1.47e+00 +2009 01 01 0845 54832 31500 0 2.10e+00 0 1.47e+00 +2009 01 01 0850 54832 31800 0 2.12e+00 0 1.48e+00 +2009 01 01 0855 54832 32100 0 2.25e+00 0 1.59e+00 +2009 01 01 0900 54832 32400 0 2.27e+00 0 1.59e+00 +2009 01 01 0905 54832 32700 0 2.21e+00 0 1.53e+00 +2009 01 01 0910 54832 33000 0 2.19e+00 0 1.53e+00 +2009 01 01 0915 54832 33300 0 2.21e+00 0 1.55e+00 +2009 01 01 0920 54832 33600 0 2.20e+00 0 1.55e+00 +2009 01 01 0925 54832 33900 0 2.14e+00 0 1.51e+00 +2009 01 01 0930 54832 34200 0 2.15e+00 0 1.50e+00 +2009 01 01 0935 54832 34500 0 2.14e+00 0 1.51e+00 +2009 01 01 0940 54832 34800 0 2.19e+00 0 1.54e+00 +2009 01 01 0945 54832 35100 0 2.17e+00 0 1.52e+00 +2009 01 01 0950 54832 35400 0 2.17e+00 0 1.53e+00 +2009 01 01 0955 54832 35700 0 2.14e+00 0 1.51e+00 +2009 01 01 1000 54832 36000 0 2.19e+00 0 1.54e+00 +2009 01 01 1005 54832 36300 0 2.22e+00 0 1.56e+00 +2009 01 01 1010 54832 36600 0 2.18e+00 0 1.52e+00 +2009 01 01 1015 54832 36900 0 2.15e+00 0 1.51e+00 +2009 01 01 1020 54832 37200 0 2.21e+00 0 1.54e+00 +2009 01 01 1025 54832 37500 0 2.15e+00 0 1.52e+00 +2009 01 01 1030 54832 37800 0 2.18e+00 0 1.52e+00 +2009 01 01 1035 54832 38100 0 2.12e+00 0 1.47e+00 +2009 01 01 1040 54832 38400 0 2.13e+00 0 1.48e+00 +2009 01 01 1045 54832 38700 0 2.14e+00 0 1.49e+00 +2009 01 01 1050 54832 39000 0 2.13e+00 0 1.48e+00 +2009 01 01 1055 54832 39300 0 2.11e+00 0 1.47e+00 +2009 01 01 1100 54832 39600 0 2.11e+00 0 1.48e+00 +2009 01 01 1105 54832 39900 0 2.17e+00 0 1.50e+00 +2009 01 01 1110 54832 40200 0 2.20e+00 0 1.52e+00 +2009 01 01 1115 54832 40500 0 2.33e+00 0 1.62e+00 +2009 01 01 1120 54832 40800 0 2.21e+00 0 1.55e+00 +2009 01 01 1125 54832 41100 0 2.20e+00 0 1.53e+00 +2009 01 01 1130 54832 41400 0 2.15e+00 0 1.50e+00 +2009 01 01 1135 54832 41700 0 2.13e+00 0 1.50e+00 +2009 01 01 1140 54832 42000 0 2.15e+00 0 1.50e+00 +2009 01 01 1145 54832 42300 0 2.15e+00 0 1.52e+00 +2009 01 01 1150 54832 42600 0 2.14e+00 0 1.50e+00 +2009 01 01 1155 54832 42900 0 2.16e+00 0 1.50e+00 +2009 01 01 1200 54832 43200 0 2.16e+00 0 1.50e+00 +2009 01 01 1205 54832 43500 0 2.18e+00 0 1.53e+00 +2009 01 01 1210 54832 43800 0 2.17e+00 0 1.51e+00 +2009 01 01 1215 54832 44100 0 2.22e+00 0 1.56e+00 +2009 01 01 1220 54832 44400 0 2.11e+00 0 1.48e+00 +2009 01 01 1225 54832 44700 0 2.11e+00 0 1.47e+00 +2009 01 01 1230 54832 45000 0 2.19e+00 0 1.53e+00 +2009 01 01 1235 54832 45300 0 2.16e+00 0 1.52e+00 +2009 01 01 1240 54832 45600 0 2.14e+00 0 1.49e+00 +2009 01 01 1245 54832 45900 0 2.15e+00 0 1.50e+00 +2009 01 01 1250 54832 46200 0 2.08e+00 0 1.46e+00 +2009 01 01 1255 54832 46500 0 2.12e+00 0 1.47e+00 +2009 01 01 1300 54832 46800 0 2.09e+00 0 1.46e+00 +2009 01 01 1305 54832 47100 0 2.09e+00 0 1.46e+00 +2009 01 01 1310 54832 47400 0 2.10e+00 0 1.47e+00 +2009 01 01 1315 54832 47700 0 2.09e+00 0 1.47e+00 +2009 01 01 1320 54832 48000 0 2.11e+00 0 1.46e+00 +2009 01 01 1325 54832 48300 0 2.15e+00 0 1.51e+00 +2009 01 01 1330 54832 48600 0 2.30e+00 0 1.62e+00 +2009 01 01 1335 54832 48900 0 2.22e+00 0 1.55e+00 +2009 01 01 1340 54832 49200 0 2.17e+00 0 1.51e+00 +2009 01 01 1345 54832 49500 0 2.16e+00 0 1.52e+00 +2009 01 01 1350 54832 49800 0 2.13e+00 0 1.48e+00 +2009 01 01 1355 54832 50100 0 2.13e+00 0 1.51e+00 +2009 01 01 1400 54832 50400 0 2.13e+00 0 1.49e+00 +2009 01 01 1405 54832 50700 0 2.19e+00 0 1.53e+00 +2009 01 01 1410 54832 51000 0 2.23e+00 0 1.57e+00 +2009 01 01 1415 54832 51300 0 2.12e+00 0 1.48e+00 +2009 01 01 1420 54832 51600 0 2.13e+00 0 1.49e+00 +2009 01 01 1425 54832 51900 0 2.17e+00 0 1.52e+00 +2009 01 01 1430 54832 52200 0 2.17e+00 0 1.51e+00 +2009 01 01 1435 54832 52500 0 2.16e+00 0 1.51e+00 +2009 01 01 1440 54832 52800 0 2.20e+00 0 1.53e+00 +2009 01 01 1445 54832 53100 0 2.11e+00 0 1.49e+00 +2009 01 01 1450 54832 53400 0 2.14e+00 0 1.49e+00 +2009 01 01 1455 54832 53700 0 2.16e+00 0 1.52e+00 +2009 01 01 1500 54832 54000 0 2.14e+00 0 1.49e+00 +2009 01 01 1505 54832 54300 0 2.09e+00 0 1.46e+00 +2009 01 01 1510 54832 54600 0 2.14e+00 0 1.50e+00 +2009 01 01 1515 54832 54900 0 2.07e+00 0 1.44e+00 +2009 01 01 1520 54832 55200 0 2.11e+00 0 1.48e+00 +2009 01 01 1525 54832 55500 0 2.13e+00 0 1.49e+00 +2009 01 01 1530 54832 55800 0 2.11e+00 0 1.47e+00 +2009 01 01 1535 54832 56100 0 2.10e+00 0 1.48e+00 +2009 01 01 1540 54832 56400 0 2.11e+00 0 1.46e+00 +2009 01 01 1545 54832 56700 0 2.25e+00 0 1.57e+00 +2009 01 01 1550 54832 57000 0 2.21e+00 0 1.54e+00 +2009 01 01 1555 54832 57300 0 2.20e+00 0 1.54e+00 +2009 01 01 1600 54832 57600 0 2.17e+00 0 1.51e+00 +2009 01 01 1605 54832 57900 0 2.13e+00 0 1.49e+00 +2009 01 01 1610 54832 58200 0 2.11e+00 0 1.47e+00 +2009 01 01 1615 54832 58500 0 2.10e+00 0 1.46e+00 +2009 01 01 1620 54832 58800 0 2.19e+00 0 1.53e+00 +2009 01 01 1625 54832 59100 0 2.15e+00 0 1.50e+00 +2009 01 01 1630 54832 59400 0 2.14e+00 0 1.49e+00 +2009 01 01 1635 54832 59700 0 2.16e+00 0 1.51e+00 +2009 01 01 1640 54832 60000 0 2.21e+00 0 1.54e+00 +2009 01 01 1645 54832 60300 0 2.17e+00 0 1.52e+00 +2009 01 01 1650 54832 60600 0 2.14e+00 0 1.50e+00 +2009 01 01 1655 54832 60900 0 2.14e+00 0 1.50e+00 +2009 01 01 1700 54832 61200 0 2.16e+00 0 1.53e+00 +2009 01 01 1705 54832 61500 0 2.21e+00 0 1.55e+00 +2009 01 01 1710 54832 61800 0 2.18e+00 0 1.52e+00 +2009 01 01 1715 54832 62100 0 2.13e+00 0 1.47e+00 +2009 01 01 1720 54832 62400 0 2.11e+00 0 1.45e+00 +2009 01 01 1725 54832 62700 0 2.09e+00 0 1.45e+00 +2009 01 01 1730 54832 63000 0 2.12e+00 0 1.47e+00 +2009 01 01 1735 54832 63300 0 2.09e+00 0 1.45e+00 +2009 01 01 1740 54832 63600 0 2.16e+00 0 1.53e+00 +2009 01 01 1745 54832 63900 0 2.11e+00 0 1.46e+00 +2009 01 01 1750 54832 64200 0 2.13e+00 0 1.49e+00 +2009 01 01 1755 54832 64500 0 2.15e+00 0 1.50e+00 +2009 01 01 1800 54832 64800 0 2.16e+00 0 1.50e+00 +2009 01 01 1805 54832 65100 0 2.28e+00 0 1.58e+00 +2009 01 01 1810 54832 65400 0 2.24e+00 0 1.56e+00 +2009 01 01 1815 54832 65700 0 2.15e+00 0 1.50e+00 +2009 01 01 1820 54832 66000 0 2.16e+00 0 1.51e+00 +2009 01 01 1825 54832 66300 0 2.13e+00 0 1.49e+00 +2009 01 01 1830 54832 66600 0 2.15e+00 0 1.52e+00 +2009 01 01 1835 54832 66900 0 2.22e+00 0 1.56e+00 +2009 01 01 1840 54832 67200 0 2.15e+00 0 1.51e+00 +2009 01 01 1845 54832 67500 0 2.19e+00 0 1.53e+00 +2009 01 01 1850 54832 67800 0 2.18e+00 0 1.52e+00 +2009 01 01 1855 54832 68100 0 2.22e+00 0 1.55e+00 +2009 01 01 1900 54832 68400 0 2.25e+00 0 1.58e+00 +2009 01 01 1905 54832 68700 0 2.15e+00 0 1.49e+00 +2009 01 01 1910 54832 69000 0 2.12e+00 0 1.49e+00 +2009 01 01 1915 54832 69300 0 2.12e+00 0 1.48e+00 +2009 01 01 1920 54832 69600 0 2.16e+00 0 1.51e+00 +2009 01 01 1925 54832 69900 0 2.13e+00 0 1.49e+00 +2009 01 01 1930 54832 70200 0 2.11e+00 0 1.46e+00 +2009 01 01 1935 54832 70500 0 2.16e+00 0 1.52e+00 +2009 01 01 1940 54832 70800 0 2.07e+00 0 1.45e+00 +2009 01 01 1945 54832 71100 0 2.16e+00 0 1.49e+00 +2009 01 01 1950 54832 71400 0 2.16e+00 0 1.52e+00 +2009 01 01 1955 54832 71700 0 2.15e+00 0 1.50e+00 +2009 01 01 2000 54832 72000 0 2.12e+00 0 1.49e+00 +2009 01 01 2005 54832 72300 0 2.11e+00 0 1.46e+00 +2009 01 01 2010 54832 72600 0 2.11e+00 0 1.47e+00 +2009 01 01 2015 54832 72900 0 2.14e+00 0 1.49e+00 +2009 01 01 2020 54832 73200 0 2.32e+00 0 1.61e+00 +2009 01 01 2025 54832 73500 0 2.30e+00 0 1.60e+00 +2009 01 01 2030 54832 73800 0 2.17e+00 0 1.52e+00 +2009 01 01 2035 54832 74100 0 2.19e+00 0 1.53e+00 +2009 01 01 2040 54832 74400 0 2.17e+00 0 1.52e+00 +2009 01 01 2045 54832 74700 0 2.18e+00 0 1.52e+00 +2009 01 01 2050 54832 75000 0 2.17e+00 0 1.52e+00 +2009 01 01 2055 54832 75300 0 2.18e+00 0 1.53e+00 +2009 01 01 2100 54832 75600 0 2.16e+00 0 1.51e+00 +2009 01 01 2105 54832 75900 0 2.17e+00 0 1.51e+00 +2009 01 01 2110 54832 76200 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2115 54832 76500 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2120 54832 76800 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2125 54832 77100 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2130 54832 77400 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2135 54832 77700 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2140 54832 78000 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2145 54832 78300 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2150 54832 78600 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2155 54832 78900 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2200 54832 79200 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2205 54832 79500 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2210 54832 79800 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2215 54832 80100 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2220 54832 80400 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2225 54832 80700 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2230 54832 81000 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2235 54832 81300 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2240 54832 81600 9 -1.00e+05 9 -1.00e+05 +2009 01 01 2245 54832 81900 0 1.08e+01 0 9.96e+00 +2009 01 01 2250 54832 82200 0 2.20e+00 0 1.52e+00 +2009 01 01 2255 54832 82500 0 2.22e+00 0 1.55e+00 +2009 01 01 2300 54832 82800 0 2.18e+00 0 1.52e+00 +2009 01 01 2305 54832 83100 0 2.17e+00 0 1.52e+00 +2009 01 01 2310 54832 83400 0 2.15e+00 0 1.50e+00 +2009 01 01 2315 54832 83700 0 2.18e+00 0 1.52e+00 +2009 01 01 2320 54832 84000 0 2.21e+00 0 1.54e+00 +2009 01 01 2325 54832 84300 0 2.21e+00 0 1.53e+00 +2009 01 01 2330 54832 84600 0 2.16e+00 0 1.50e+00 +2009 01 01 2335 54832 84900 0 2.11e+00 0 1.48e+00 +2009 01 01 2340 54832 85200 0 2.16e+00 0 1.50e+00 +2009 01 01 2345 54832 85500 0 2.14e+00 0 1.48e+00 +2009 01 01 2350 54832 85800 0 2.13e+00 0 1.49e+00 +2009 01 01 2355 54832 86100 0 2.17e+00 0 1.55e+00 diff --git a/pysatSpaceWeather/tests/test_data/20090101_ace_swepam_1m.txt b/pysatSpaceWeather/tests/test_data/20090101_ace_swepam_1m.txt new file mode 100644 index 00000000..27f483c4 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/20090101_ace_swepam_1m.txt @@ -0,0 +1,1458 @@ +:Data_list: 20090101_ace_swepam_1m.txt +:Created: 2009 Jan 02 0011 UT +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comments and suggestions to SWPC.Webmaster@noaa.gov +# +# Units: Proton density p/cc +# Units: Bulk speed km/s +# Units: Ion tempeture degrees K +# Status(S): 0 = nominal data, 1 to 8 = bad data record, 9 = no data +# Missing data values: Density and Speed = -9999.9, Temp. = -1.00e+05 +# Source: ACE Satellite - Solar Wind Electron Proton Alpha Monitor +# +# 1-minute averaged Real-time Bulk Parameters of the Solar Wind Plasma +# +# Modified Seconds ------------- Solar Wind ----------- +# UT Date Time Julian of the Proton Bulk Ion +# YR MO DA HHMM Day Day S Density Speed Temperature +#------------------------------------------------------------------------- +2009 01 01 0000 54832 0 0 2.0 521.2 2.48e+05 +2009 01 01 0001 54832 60 0 2.0 522.0 2.13e+05 +2009 01 01 0002 54832 120 0 2.1 520.9 2.22e+05 +2009 01 01 0003 54832 180 0 2.4 508.5 2.35e+05 +2009 01 01 0004 54832 240 1 2.2 519.1 2.85e+05 +2009 01 01 0005 54832 300 1 2.2 514.8 2.65e+05 +2009 01 01 0006 54832 360 1 2.5 513.0 2.48e+05 +2009 01 01 0007 54832 420 0 2.3 514.5 2.60e+05 +2009 01 01 0008 54832 480 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0009 54832 540 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0010 54832 600 1 2.4 512.8 2.71e+05 +2009 01 01 0011 54832 660 0 2.3 511.5 2.68e+05 +2009 01 01 0012 54832 720 1 2.3 513.6 2.81e+05 +2009 01 01 0013 54832 780 1 2.3 511.7 2.73e+05 +2009 01 01 0014 54832 840 1 2.4 515.8 2.78e+05 +2009 01 01 0015 54832 900 0 2.4 513.8 2.73e+05 +2009 01 01 0016 54832 960 1 2.3 519.1 2.64e+05 +2009 01 01 0017 54832 1020 1 2.3 519.1 2.68e+05 +2009 01 01 0018 54832 1080 1 2.3 520.2 2.98e+05 +2009 01 01 0019 54832 1140 1 2.4 517.4 2.63e+05 +2009 01 01 0020 54832 1200 0 2.0 526.2 2.49e+05 +2009 01 01 0021 54832 1260 0 2.0 521.2 2.90e+05 +2009 01 01 0022 54832 1320 0 2.2 524.2 2.67e+05 +2009 01 01 0023 54832 1380 1 2.2 514.7 2.41e+05 +2009 01 01 0024 54832 1440 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0025 54832 1500 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0026 54832 1560 1 2.3 518.8 2.81e+05 +2009 01 01 0027 54832 1620 0 2.3 520.6 2.63e+05 +2009 01 01 0028 54832 1680 1 2.3 512.2 2.74e+05 +2009 01 01 0029 54832 1740 1 2.4 513.9 2.68e+05 +2009 01 01 0030 54832 1800 1 2.3 516.3 2.72e+05 +2009 01 01 0031 54832 1860 0 2.4 515.4 2.61e+05 +2009 01 01 0032 54832 1920 1 2.3 513.1 2.62e+05 +2009 01 01 0033 54832 1980 0 2.6 514.3 2.49e+05 +2009 01 01 0034 54832 2040 0 2.5 514.3 2.53e+05 +2009 01 01 0035 54832 2100 1 2.4 516.9 2.71e+05 +2009 01 01 0036 54832 2160 1 2.5 516.2 2.66e+05 +2009 01 01 0037 54832 2220 0 2.5 516.0 2.69e+05 +2009 01 01 0038 54832 2280 1 2.3 519.5 2.72e+05 +2009 01 01 0039 54832 2340 0 2.5 520.8 2.43e+05 +2009 01 01 0040 54832 2400 0 2.2 523.0 2.35e+05 +2009 01 01 0041 54832 2460 0 2.2 523.0 2.35e+05 +2009 01 01 0042 54832 2520 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0043 54832 2580 1 2.2 514.3 2.28e+05 +2009 01 01 0044 54832 2640 0 2.1 525.3 2.15e+05 +2009 01 01 0045 54832 2700 0 2.1 524.0 1.95e+05 +2009 01 01 0046 54832 2760 1 2.2 522.9 2.34e+05 +2009 01 01 0047 54832 2820 0 2.4 521.8 2.32e+05 +2009 01 01 0048 54832 2880 0 2.3 521.2 2.40e+05 +2009 01 01 0049 54832 2940 0 2.2 521.7 2.34e+05 +2009 01 01 0050 54832 3000 0 2.3 523.7 2.39e+05 +2009 01 01 0051 54832 3060 1 2.2 520.7 2.58e+05 +2009 01 01 0052 54832 3120 0 2.3 520.5 2.47e+05 +2009 01 01 0053 54832 3180 0 2.2 519.3 2.48e+05 +2009 01 01 0054 54832 3240 1 2.3 519.2 2.47e+05 +2009 01 01 0055 54832 3300 1 2.3 519.4 2.44e+05 +2009 01 01 0056 54832 3360 0 2.4 519.2 2.42e+05 +2009 01 01 0057 54832 3420 0 2.4 519.2 2.42e+05 +2009 01 01 0058 54832 3480 0 2.3 520.4 2.51e+05 +2009 01 01 0059 54832 3540 1 2.3 520.3 2.52e+05 +2009 01 01 0100 54832 3600 0 2.3 520.6 2.41e+05 +2009 01 01 0101 54832 3660 1 2.4 520.1 2.53e+05 +2009 01 01 0102 54832 3720 0 2.2 521.4 2.49e+05 +2009 01 01 0103 54832 3780 1 2.2 520.8 2.49e+05 +2009 01 01 0104 54832 3840 1 2.3 521.6 2.40e+05 +2009 01 01 0105 54832 3900 1 2.4 521.1 2.49e+05 +2009 01 01 0106 54832 3960 0 2.3 521.7 2.33e+05 +2009 01 01 0107 54832 4020 0 2.2 523.4 2.29e+05 +2009 01 01 0108 54832 4080 0 2.1 523.7 2.38e+05 +2009 01 01 0109 54832 4140 0 2.2 522.2 2.27e+05 +2009 01 01 0110 54832 4200 0 2.2 521.5 2.33e+05 +2009 01 01 0111 54832 4260 0 2.3 521.3 2.27e+05 +2009 01 01 0112 54832 4320 0 2.1 523.8 2.31e+05 +2009 01 01 0113 54832 4380 0 2.1 523.8 2.31e+05 +2009 01 01 0114 54832 4440 1 2.1 522.5 2.45e+05 +2009 01 01 0115 54832 4500 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0116 54832 4560 1 2.1 523.8 1.91e+05 +2009 01 01 0117 54832 4620 0 1.7 529.2 1.97e+05 +2009 01 01 0118 54832 4680 0 1.8 525.9 1.91e+05 +2009 01 01 0119 54832 4740 0 1.7 529.2 1.95e+05 +2009 01 01 0120 54832 4800 0 1.8 528.9 1.84e+05 +2009 01 01 0121 54832 4860 1 2.1 526.0 2.21e+05 +2009 01 01 0122 54832 4920 0 2.2 526.1 2.15e+05 +2009 01 01 0123 54832 4980 0 2.0 529.2 2.06e+05 +2009 01 01 0124 54832 5040 0 2.0 528.8 2.03e+05 +2009 01 01 0125 54832 5100 1 2.1 525.7 2.15e+05 +2009 01 01 0126 54832 5160 0 1.9 527.1 1.94e+05 +2009 01 01 0127 54832 5220 1 1.8 524.2 2.50e+05 +2009 01 01 0128 54832 5280 1 1.8 521.6 2.53e+05 +2009 01 01 0129 54832 5340 1 1.8 521.6 2.53e+05 +2009 01 01 0130 54832 5400 1 1.6 524.4 2.46e+05 +2009 01 01 0131 54832 5460 0 1.8 524.3 2.44e+05 +2009 01 01 0132 54832 5520 0 1.5 523.5 2.44e+05 +2009 01 01 0133 54832 5580 0 2.2 515.7 2.37e+05 +2009 01 01 0134 54832 5640 0 1.8 524.1 2.27e+05 +2009 01 01 0135 54832 5700 0 1.7 526.3 1.97e+05 +2009 01 01 0136 54832 5760 0 1.9 534.5 1.71e+05 +2009 01 01 0137 54832 5820 1 1.8 535.5 1.26e+05 +2009 01 01 0138 54832 5880 0 1.7 538.1 1.59e+05 +2009 01 01 0139 54832 5940 0 1.6 529.9 1.60e+05 +2009 01 01 0140 54832 6000 0 1.5 516.6 1.81e+05 +2009 01 01 0141 54832 6060 0 1.7 507.1 2.06e+05 +2009 01 01 0142 54832 6120 1 1.5 510.2 2.13e+05 +2009 01 01 0143 54832 6180 0 1.4 512.6 1.88e+05 +2009 01 01 0144 54832 6240 0 1.5 514.2 1.99e+05 +2009 01 01 0145 54832 6300 0 1.5 514.2 1.99e+05 +2009 01 01 0146 54832 6360 0 1.4 516.9 2.00e+05 +2009 01 01 0147 54832 6420 0 1.5 512.4 1.97e+05 +2009 01 01 0148 54832 6480 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0149 54832 6540 0 1.4 512.6 1.89e+05 +2009 01 01 0150 54832 6600 1 1.5 512.0 2.26e+05 +2009 01 01 0151 54832 6660 0 1.5 510.8 1.98e+05 +2009 01 01 0152 54832 6720 0 1.5 507.8 1.71e+05 +2009 01 01 0153 54832 6780 0 1.5 514.0 2.12e+05 +2009 01 01 0154 54832 6840 1 1.4 514.6 2.09e+05 +2009 01 01 0155 54832 6900 0 1.5 514.5 2.09e+05 +2009 01 01 0156 54832 6960 0 1.5 515.2 2.02e+05 +2009 01 01 0157 54832 7020 0 1.5 513.6 2.06e+05 +2009 01 01 0158 54832 7080 0 1.5 512.1 2.01e+05 +2009 01 01 0159 54832 7140 0 1.4 513.3 2.01e+05 +2009 01 01 0200 54832 7200 0 1.4 514.1 2.06e+05 +2009 01 01 0201 54832 7260 0 1.4 514.1 2.06e+05 +2009 01 01 0202 54832 7320 0 1.4 513.6 1.85e+05 +2009 01 01 0203 54832 7380 0 1.5 508.7 1.77e+05 +2009 01 01 0204 54832 7440 0 1.2 516.7 2.26e+05 +2009 01 01 0205 54832 7500 0 1.4 520.0 1.83e+05 +2009 01 01 0206 54832 7560 0 1.4 516.4 1.63e+05 +2009 01 01 0207 54832 7620 0 1.5 512.8 1.61e+05 +2009 01 01 0208 54832 7680 0 1.6 522.0 1.81e+05 +2009 01 01 0209 54832 7740 0 1.6 519.7 1.79e+05 +2009 01 01 0210 54832 7800 0 1.5 518.8 1.70e+05 +2009 01 01 0211 54832 7860 1 1.7 516.0 1.99e+05 +2009 01 01 0212 54832 7920 0 0.8 536.8 2.34e+05 +2009 01 01 0213 54832 7980 0 1.0 536.6 1.79e+05 +2009 01 01 0214 54832 8040 0 1.5 519.6 1.75e+05 +2009 01 01 0215 54832 8100 0 1.6 529.8 2.06e+05 +2009 01 01 0216 54832 8160 1 1.4 535.7 1.97e+05 +2009 01 01 0217 54832 8220 1 1.4 535.7 1.97e+05 +2009 01 01 0218 54832 8280 0 1.7 534.5 2.00e+05 +2009 01 01 0219 54832 8340 0 1.8 534.2 1.97e+05 +2009 01 01 0220 54832 8400 0 1.8 532.6 2.09e+05 +2009 01 01 0221 54832 8460 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0222 54832 8520 1 1.4 521.0 2.04e+05 +2009 01 01 0223 54832 8580 0 1.2 532.8 2.11e+05 +2009 01 01 0224 54832 8640 0 1.6 528.6 1.67e+05 +2009 01 01 0225 54832 8700 0 1.6 516.9 1.74e+05 +2009 01 01 0226 54832 8760 0 1.4 513.9 1.69e+05 +2009 01 01 0227 54832 8820 0 1.6 513.4 1.69e+05 +2009 01 01 0228 54832 8880 0 1.7 508.6 1.56e+05 +2009 01 01 0229 54832 8940 0 1.8 507.5 1.53e+05 +2009 01 01 0230 54832 9000 0 1.7 509.4 1.58e+05 +2009 01 01 0231 54832 9060 0 1.7 512.1 1.58e+05 +2009 01 01 0232 54832 9120 0 1.8 509.3 1.63e+05 +2009 01 01 0233 54832 9180 0 1.8 509.3 1.63e+05 +2009 01 01 0234 54832 9240 0 1.6 506.5 1.58e+05 +2009 01 01 0235 54832 9300 0 1.5 507.8 1.54e+05 +2009 01 01 0236 54832 9360 0 1.6 509.3 1.60e+05 +2009 01 01 0237 54832 9420 1 1.5 506.9 1.69e+05 +2009 01 01 0238 54832 9480 0 1.6 507.4 1.57e+05 +2009 01 01 0239 54832 9540 0 1.8 503.8 1.66e+05 +2009 01 01 0240 54832 9600 1 1.7 506.8 1.71e+05 +2009 01 01 0241 54832 9660 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0242 54832 9720 0 1.8 510.4 1.68e+05 +2009 01 01 0243 54832 9780 0 1.7 511.1 1.62e+05 +2009 01 01 0244 54832 9840 0 1.6 509.1 1.80e+05 +2009 01 01 0245 54832 9900 0 1.6 508.1 1.68e+05 +2009 01 01 0246 54832 9960 0 1.5 513.7 1.77e+05 +2009 01 01 0247 54832 10020 0 1.5 512.4 1.77e+05 +2009 01 01 0248 54832 10080 0 1.5 511.6 1.70e+05 +2009 01 01 0249 54832 10140 0 1.5 511.6 1.70e+05 +2009 01 01 0250 54832 10200 1 1.3 521.5 1.47e+05 +2009 01 01 0251 54832 10260 1 1.7 514.3 1.68e+05 +2009 01 01 0252 54832 10320 1 1.8 514.2 1.72e+05 +2009 01 01 0253 54832 10380 0 1.7 516.7 1.68e+05 +2009 01 01 0254 54832 10440 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0255 54832 10500 0 1.8 514.5 1.47e+05 +2009 01 01 0256 54832 10560 0 1.7 514.6 1.77e+05 +2009 01 01 0257 54832 10620 0 1.8 515.4 1.68e+05 +2009 01 01 0258 54832 10680 0 1.7 513.1 1.65e+05 +2009 01 01 0259 54832 10740 0 1.5 513.1 1.89e+05 +2009 01 01 0300 54832 10800 0 1.6 512.3 1.90e+05 +2009 01 01 0301 54832 10860 0 1.6 512.2 1.70e+05 +2009 01 01 0302 54832 10920 1 1.6 510.6 1.82e+05 +2009 01 01 0303 54832 10980 0 1.7 510.0 1.74e+05 +2009 01 01 0304 54832 11040 0 1.6 510.9 1.79e+05 +2009 01 01 0305 54832 11100 0 1.6 510.9 1.79e+05 +2009 01 01 0306 54832 11160 1 1.6 511.0 1.67e+05 +2009 01 01 0307 54832 11220 0 1.5 515.3 1.79e+05 +2009 01 01 0308 54832 11280 0 1.5 514.9 1.74e+05 +2009 01 01 0309 54832 11340 1 1.6 510.6 1.78e+05 +2009 01 01 0310 54832 11400 0 1.7 510.3 1.72e+05 +2009 01 01 0311 54832 11460 0 1.6 509.4 1.61e+05 +2009 01 01 0312 54832 11520 0 1.6 509.8 1.63e+05 +2009 01 01 0313 54832 11580 0 1.6 510.6 1.74e+05 +2009 01 01 0314 54832 11640 1 1.5 513.8 1.57e+05 +2009 01 01 0315 54832 11700 1 1.6 511.1 1.64e+05 +2009 01 01 0316 54832 11760 0 1.7 510.0 1.58e+05 +2009 01 01 0317 54832 11820 0 1.6 507.9 1.65e+05 +2009 01 01 0318 54832 11880 0 1.7 507.9 1.75e+05 +2009 01 01 0319 54832 11940 1 1.7 508.6 1.80e+05 +2009 01 01 0320 54832 12000 0 1.7 509.7 1.77e+05 +2009 01 01 0321 54832 12060 0 1.7 509.7 1.77e+05 +2009 01 01 0322 54832 12120 1 1.6 506.4 1.65e+05 +2009 01 01 0323 54832 12180 1 1.7 509.3 1.70e+05 +2009 01 01 0324 54832 12240 0 1.6 508.1 1.55e+05 +2009 01 01 0325 54832 12300 1 1.6 507.4 1.67e+05 +2009 01 01 0326 54832 12360 0 1.6 506.8 1.60e+05 +2009 01 01 0327 54832 12420 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0328 54832 12480 0 1.5 506.1 1.64e+05 +2009 01 01 0329 54832 12540 0 1.6 509.4 1.71e+05 +2009 01 01 0330 54832 12600 0 1.7 506.2 1.72e+05 +2009 01 01 0331 54832 12660 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0332 54832 12720 1 1.6 511.3 1.96e+05 +2009 01 01 0333 54832 12780 0 1.8 507.5 1.76e+05 +2009 01 01 0334 54832 12840 0 1.8 515.1 1.77e+05 +2009 01 01 0335 54832 12900 0 2.1 520.2 1.85e+05 +2009 01 01 0336 54832 12960 1 1.9 508.5 1.75e+05 +2009 01 01 0337 54832 13020 1 1.9 508.5 1.75e+05 +2009 01 01 0338 54832 13080 1 1.9 509.3 1.83e+05 +2009 01 01 0339 54832 13140 0 1.8 511.2 1.79e+05 +2009 01 01 0340 54832 13200 1 2.1 504.0 1.63e+05 +2009 01 01 0341 54832 13260 0 2.0 504.0 1.56e+05 +2009 01 01 0342 54832 13320 1 2.2 503.5 1.81e+05 +2009 01 01 0343 54832 13380 1 2.2 502.8 1.75e+05 +2009 01 01 0344 54832 13440 1 2.1 511.9 2.13e+05 +2009 01 01 0345 54832 13500 1 2.1 510.6 2.01e+05 +2009 01 01 0346 54832 13560 0 2.2 511.8 1.79e+05 +2009 01 01 0347 54832 13620 1 2.2 509.3 1.86e+05 +2009 01 01 0348 54832 13680 1 2.2 509.4 1.74e+05 +2009 01 01 0349 54832 13740 0 2.2 509.4 1.71e+05 +2009 01 01 0350 54832 13800 0 2.3 511.1 1.77e+05 +2009 01 01 0351 54832 13860 0 2.2 510.4 1.82e+05 +2009 01 01 0352 54832 13920 0 2.3 510.0 1.83e+05 +2009 01 01 0353 54832 13980 0 2.3 510.0 1.83e+05 +2009 01 01 0354 54832 14040 0 2.3 507.4 1.77e+05 +2009 01 01 0355 54832 14100 0 2.6 518.0 2.40e+05 +2009 01 01 0356 54832 14160 0 2.4 537.0 2.00e+05 +2009 01 01 0357 54832 14220 0 2.3 515.6 2.08e+05 +2009 01 01 0358 54832 14280 0 2.3 516.8 1.90e+05 +2009 01 01 0359 54832 14340 0 2.5 521.8 1.95e+05 +2009 01 01 0400 54832 14400 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0401 54832 14460 0 2.2 507.5 1.62e+05 +2009 01 01 0402 54832 14520 0 2.2 507.2 1.79e+05 +2009 01 01 0403 54832 14580 0 2.2 507.5 1.75e+05 +2009 01 01 0404 54832 14640 0 2.2 507.8 1.61e+05 +2009 01 01 0405 54832 14700 0 2.4 516.9 2.01e+05 +2009 01 01 0406 54832 14760 0 2.7 527.4 1.97e+05 +2009 01 01 0407 54832 14820 0 2.5 528.1 1.70e+05 +2009 01 01 0408 54832 14880 0 2.5 519.8 1.93e+05 +2009 01 01 0409 54832 14940 0 2.5 519.8 1.93e+05 +2009 01 01 0410 54832 15000 0 2.5 518.6 1.84e+05 +2009 01 01 0411 54832 15060 0 2.7 517.3 1.91e+05 +2009 01 01 0412 54832 15120 0 2.6 516.0 1.92e+05 +2009 01 01 0413 54832 15180 0 2.7 513.7 1.98e+05 +2009 01 01 0414 54832 15240 0 2.7 512.2 1.95e+05 +2009 01 01 0415 54832 15300 0 2.9 515.3 2.00e+05 +2009 01 01 0416 54832 15360 0 2.4 513.2 1.91e+05 +2009 01 01 0417 54832 15420 0 2.4 517.1 1.73e+05 +2009 01 01 0418 54832 15480 0 2.4 515.1 1.75e+05 +2009 01 01 0419 54832 15540 0 2.3 517.8 1.67e+05 +2009 01 01 0420 54832 15600 0 2.8 507.8 1.60e+05 +2009 01 01 0421 54832 15660 0 2.3 510.2 1.57e+05 +2009 01 01 0422 54832 15720 0 2.3 516.3 1.47e+05 +2009 01 01 0423 54832 15780 0 2.4 517.9 1.58e+05 +2009 01 01 0424 54832 15840 0 2.3 514.7 1.72e+05 +2009 01 01 0425 54832 15900 0 2.3 514.7 1.72e+05 +2009 01 01 0426 54832 15960 0 2.2 512.7 1.65e+05 +2009 01 01 0427 54832 16020 0 2.4 515.3 1.61e+05 +2009 01 01 0428 54832 16080 0 2.4 510.6 1.78e+05 +2009 01 01 0429 54832 16140 0 2.6 513.2 1.75e+05 +2009 01 01 0430 54832 16200 1 2.6 513.5 1.80e+05 +2009 01 01 0431 54832 16260 0 2.3 514.0 1.89e+05 +2009 01 01 0432 54832 16320 0 2.6 510.2 1.88e+05 +2009 01 01 0433 54832 16380 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0434 54832 16440 0 2.4 508.9 1.83e+05 +2009 01 01 0435 54832 16500 0 2.0 513.8 1.83e+05 +2009 01 01 0436 54832 16560 0 2.3 509.5 1.91e+05 +2009 01 01 0437 54832 16620 0 2.2 510.5 1.85e+05 +2009 01 01 0438 54832 16680 0 2.1 510.5 1.79e+05 +2009 01 01 0439 54832 16740 0 2.5 516.2 1.59e+05 +2009 01 01 0440 54832 16800 0 2.3 512.1 1.58e+05 +2009 01 01 0441 54832 16860 0 2.3 512.1 1.58e+05 +2009 01 01 0442 54832 16920 1 2.2 506.4 2.05e+05 +2009 01 01 0443 54832 16980 1 2.4 508.5 2.42e+05 +2009 01 01 0444 54832 17040 0 2.6 523.2 2.82e+05 +2009 01 01 0445 54832 17100 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0446 54832 17160 0 1.9 511.0 2.05e+05 +2009 01 01 0447 54832 17220 0 2.0 511.6 2.04e+05 +2009 01 01 0448 54832 17280 0 2.0 510.3 2.28e+05 +2009 01 01 0449 54832 17340 1 2.2 508.0 2.17e+05 +2009 01 01 0450 54832 17400 0 2.3 515.7 2.11e+05 +2009 01 01 0451 54832 17460 0 2.1 528.4 1.78e+05 +2009 01 01 0452 54832 17520 1 2.1 506.8 2.55e+05 +2009 01 01 0453 54832 17580 0 2.2 504.3 2.35e+05 +2009 01 01 0454 54832 17640 1 2.3 500.4 2.38e+05 +2009 01 01 0455 54832 17700 0 2.3 501.4 2.36e+05 +2009 01 01 0456 54832 17760 0 2.2 497.7 2.10e+05 +2009 01 01 0457 54832 17820 0 2.2 497.7 2.10e+05 +2009 01 01 0458 54832 17880 0 2.0 504.4 2.34e+05 +2009 01 01 0459 54832 17940 0 2.0 509.3 2.12e+05 +2009 01 01 0500 54832 18000 1 2.1 508.8 2.28e+05 +2009 01 01 0501 54832 18060 0 2.2 507.2 2.15e+05 +2009 01 01 0502 54832 18120 0 1.9 507.9 2.31e+05 +2009 01 01 0503 54832 18180 0 2.2 505.9 2.15e+05 +2009 01 01 0504 54832 18240 0 2.1 515.7 2.29e+05 +2009 01 01 0505 54832 18300 0 2.3 511.5 1.94e+05 +2009 01 01 0506 54832 18360 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0507 54832 18420 0 2.3 512.2 1.68e+05 +2009 01 01 0508 54832 18480 0 2.1 510.7 1.96e+05 +2009 01 01 0509 54832 18540 0 2.1 504.0 1.94e+05 +2009 01 01 0510 54832 18600 0 2.3 503.1 1.97e+05 +2009 01 01 0511 54832 18660 0 2.6 505.2 1.77e+05 +2009 01 01 0512 54832 18720 0 2.1 517.2 1.98e+05 +2009 01 01 0513 54832 18780 0 2.1 517.2 1.98e+05 +2009 01 01 0514 54832 18840 0 2.1 512.4 1.65e+05 +2009 01 01 0515 54832 18900 0 2.3 507.3 2.09e+05 +2009 01 01 0516 54832 18960 0 1.9 514.7 1.60e+05 +2009 01 01 0517 54832 19020 0 2.4 506.6 1.72e+05 +2009 01 01 0518 54832 19080 0 2.1 508.0 1.77e+05 +2009 01 01 0519 54832 19140 0 2.4 499.9 1.79e+05 +2009 01 01 0520 54832 19200 0 2.4 510.6 1.97e+05 +2009 01 01 0521 54832 19260 0 2.2 496.8 2.04e+05 +2009 01 01 0522 54832 19320 0 2.1 502.4 1.81e+05 +2009 01 01 0523 54832 19380 0 2.1 492.9 1.91e+05 +2009 01 01 0524 54832 19440 0 2.2 490.4 2.18e+05 +2009 01 01 0525 54832 19500 1 2.2 492.8 1.92e+05 +2009 01 01 0526 54832 19560 0 2.1 498.6 2.04e+05 +2009 01 01 0527 54832 19620 0 1.9 511.2 1.59e+05 +2009 01 01 0528 54832 19680 0 2.1 523.6 1.81e+05 +2009 01 01 0529 54832 19740 0 2.1 523.6 1.81e+05 +2009 01 01 0530 54832 19800 0 2.0 512.6 1.65e+05 +2009 01 01 0531 54832 19860 0 2.3 520.5 1.69e+05 +2009 01 01 0532 54832 19920 0 2.1 517.4 1.79e+05 +2009 01 01 0533 54832 19980 0 2.3 516.2 1.80e+05 +2009 01 01 0534 54832 20040 0 2.1 513.9 1.91e+05 +2009 01 01 0535 54832 20100 0 2.2 517.7 1.92e+05 +2009 01 01 0536 54832 20160 0 2.2 520.6 1.85e+05 +2009 01 01 0537 54832 20220 0 2.4 516.5 1.94e+05 +2009 01 01 0538 54832 20280 0 2.0 515.9 1.89e+05 +2009 01 01 0539 54832 20340 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0540 54832 20400 0 2.3 515.4 1.95e+05 +2009 01 01 0541 54832 20460 0 1.9 510.9 1.64e+05 +2009 01 01 0542 54832 20520 0 2.1 515.5 1.76e+05 +2009 01 01 0543 54832 20580 0 2.0 512.2 1.71e+05 +2009 01 01 0544 54832 20640 0 2.0 525.6 1.98e+05 +2009 01 01 0545 54832 20700 0 2.0 525.6 1.98e+05 +2009 01 01 0546 54832 20760 0 1.9 523.4 2.05e+05 +2009 01 01 0547 54832 20820 0 1.8 512.5 1.79e+05 +2009 01 01 0548 54832 20880 0 1.8 512.1 1.88e+05 +2009 01 01 0549 54832 20940 0 1.6 507.6 1.75e+05 +2009 01 01 0550 54832 21000 0 1.7 511.6 1.79e+05 +2009 01 01 0551 54832 21060 0 1.7 512.1 1.78e+05 +2009 01 01 0552 54832 21120 0 1.6 511.1 1.81e+05 +2009 01 01 0553 54832 21180 0 1.5 506.3 1.73e+05 +2009 01 01 0554 54832 21240 0 1.6 508.2 1.60e+05 +2009 01 01 0555 54832 21300 0 1.5 503.6 1.71e+05 +2009 01 01 0556 54832 21360 1 1.6 499.3 2.01e+05 +2009 01 01 0557 54832 21420 0 1.6 501.1 2.04e+05 +2009 01 01 0558 54832 21480 1 1.9 493.5 1.92e+05 +2009 01 01 0559 54832 21540 0 2.2 503.1 1.50e+05 +2009 01 01 0600 54832 21600 0 2.2 502.1 1.67e+05 +2009 01 01 0601 54832 21660 0 2.2 502.1 1.67e+05 +2009 01 01 0602 54832 21720 0 2.1 494.6 1.92e+05 +2009 01 01 0603 54832 21780 0 2.3 483.6 1.95e+05 +2009 01 01 0604 54832 21840 0 1.9 486.1 1.48e+05 +2009 01 01 0605 54832 21900 0 1.8 490.3 1.41e+05 +2009 01 01 0606 54832 21960 0 1.8 493.9 1.40e+05 +2009 01 01 0607 54832 22020 0 1.7 496.3 1.44e+05 +2009 01 01 0608 54832 22080 0 1.7 502.5 1.46e+05 +2009 01 01 0609 54832 22140 0 1.8 505.3 1.69e+05 +2009 01 01 0610 54832 22200 0 1.9 510.8 2.13e+05 +2009 01 01 0611 54832 22260 0 1.5 523.1 1.56e+05 +2009 01 01 0612 54832 22320 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0613 54832 22380 0 1.3 532.1 1.94e+05 +2009 01 01 0614 54832 22440 0 2.0 484.3 1.98e+05 +2009 01 01 0615 54832 22500 1 2.2 481.0 2.01e+05 +2009 01 01 0616 54832 22560 1 2.4 479.2 2.11e+05 +2009 01 01 0617 54832 22620 1 2.4 479.2 2.11e+05 +2009 01 01 0618 54832 22680 1 2.3 477.4 2.04e+05 +2009 01 01 0619 54832 22740 1 2.3 478.2 2.23e+05 +2009 01 01 0620 54832 22800 1 2.1 478.6 2.16e+05 +2009 01 01 0621 54832 22860 1 1.6 463.5 7.18e+04 +2009 01 01 0622 54832 22920 1 1.6 484.5 2.40e+05 +2009 01 01 0623 54832 22980 1 1.8 477.4 1.99e+05 +2009 01 01 0624 54832 23040 1 2.0 477.4 2.02e+05 +2009 01 01 0625 54832 23100 0 2.2 473.2 1.59e+05 +2009 01 01 0626 54832 23160 0 2.1 481.4 1.81e+05 +2009 01 01 0627 54832 23220 0 2.1 480.8 1.86e+05 +2009 01 01 0628 54832 23280 0 2.0 474.2 1.65e+05 +2009 01 01 0629 54832 23340 1 2.4 476.6 1.88e+05 +2009 01 01 0630 54832 23400 0 2.2 484.5 1.81e+05 +2009 01 01 0631 54832 23460 0 2.4 483.0 1.90e+05 +2009 01 01 0632 54832 23520 0 2.2 486.2 1.72e+05 +2009 01 01 0633 54832 23580 0 2.2 486.2 1.72e+05 +2009 01 01 0634 54832 23640 1 2.1 488.5 2.01e+05 +2009 01 01 0635 54832 23700 1 1.9 490.6 1.89e+05 +2009 01 01 0636 54832 23760 0 2.3 487.8 1.84e+05 +2009 01 01 0637 54832 23820 1 2.0 487.6 2.01e+05 +2009 01 01 0638 54832 23880 0 2.3 489.5 1.68e+05 +2009 01 01 0639 54832 23940 0 2.0 492.2 1.65e+05 +2009 01 01 0640 54832 24000 0 1.9 488.4 1.74e+05 +2009 01 01 0641 54832 24060 0 2.0 479.6 1.40e+05 +2009 01 01 0642 54832 24120 0 2.0 480.3 1.62e+05 +2009 01 01 0643 54832 24180 0 2.1 471.6 1.48e+05 +2009 01 01 0644 54832 24240 0 2.3 478.9 1.57e+05 +2009 01 01 0645 54832 24300 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0646 54832 24360 0 2.3 479.7 1.64e+05 +2009 01 01 0647 54832 24420 1 2.2 477.8 1.63e+05 +2009 01 01 0648 54832 24480 0 2.5 472.3 1.49e+05 +2009 01 01 0649 54832 24540 0 2.5 472.3 1.49e+05 +2009 01 01 0650 54832 24600 0 2.4 480.4 1.54e+05 +2009 01 01 0651 54832 24660 1 2.3 482.4 1.75e+05 +2009 01 01 0652 54832 24720 1 2.8 497.6 2.03e+05 +2009 01 01 0653 54832 24780 1 2.1 486.6 1.62e+05 +2009 01 01 0654 54832 24840 1 2.1 489.4 1.66e+05 +2009 01 01 0655 54832 24900 0 1.8 493.8 1.67e+05 +2009 01 01 0656 54832 24960 0 2.2 488.6 1.51e+05 +2009 01 01 0657 54832 25020 0 1.9 493.2 1.47e+05 +2009 01 01 0658 54832 25080 0 2.5 486.5 1.60e+05 +2009 01 01 0659 54832 25140 0 2.4 488.8 1.50e+05 +2009 01 01 0700 54832 25200 0 2.4 490.1 1.42e+05 +2009 01 01 0701 54832 25260 0 2.5 491.4 1.58e+05 +2009 01 01 0702 54832 25320 0 2.6 488.4 1.49e+05 +2009 01 01 0703 54832 25380 0 2.5 493.1 1.50e+05 +2009 01 01 0704 54832 25440 0 2.7 489.0 1.49e+05 +2009 01 01 0705 54832 25500 0 2.7 489.0 1.49e+05 +2009 01 01 0706 54832 25560 0 2.7 490.9 1.45e+05 +2009 01 01 0707 54832 25620 0 2.6 487.4 1.32e+05 +2009 01 01 0708 54832 25680 0 2.6 489.6 1.39e+05 +2009 01 01 0709 54832 25740 0 2.6 488.6 1.36e+05 +2009 01 01 0710 54832 25800 0 2.4 494.3 1.47e+05 +2009 01 01 0711 54832 25860 0 2.3 492.2 1.58e+05 +2009 01 01 0712 54832 25920 1 2.0 485.0 1.58e+05 +2009 01 01 0713 54832 25980 0 2.8 488.0 1.45e+05 +2009 01 01 0714 54832 26040 0 2.1 502.6 1.89e+05 +2009 01 01 0715 54832 26100 1 2.3 487.1 1.79e+05 +2009 01 01 0716 54832 26160 0 2.0 488.2 1.83e+05 +2009 01 01 0717 54832 26220 0 2.0 489.5 1.70e+05 +2009 01 01 0718 54832 26280 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0719 54832 26340 0 1.9 491.8 1.64e+05 +2009 01 01 0720 54832 26400 0 2.1 491.4 1.67e+05 +2009 01 01 0721 54832 26460 0 2.1 491.4 1.67e+05 +2009 01 01 0722 54832 26520 0 1.8 502.8 1.65e+05 +2009 01 01 0723 54832 26580 0 1.9 511.9 1.54e+05 +2009 01 01 0724 54832 26640 0 1.8 509.2 1.45e+05 +2009 01 01 0725 54832 26700 0 1.9 503.5 1.42e+05 +2009 01 01 0726 54832 26760 0 2.0 499.5 1.36e+05 +2009 01 01 0727 54832 26820 0 1.9 502.8 1.40e+05 +2009 01 01 0728 54832 26880 0 2.2 496.7 1.57e+05 +2009 01 01 0729 54832 26940 0 2.0 496.0 1.60e+05 +2009 01 01 0730 54832 27000 0 1.8 492.7 1.30e+05 +2009 01 01 0731 54832 27060 0 2.0 494.8 1.48e+05 +2009 01 01 0732 54832 27120 1 2.0 491.6 1.39e+05 +2009 01 01 0733 54832 27180 0 2.1 484.8 1.36e+05 +2009 01 01 0734 54832 27240 0 2.1 485.2 1.32e+05 +2009 01 01 0735 54832 27300 0 2.1 473.7 1.57e+05 +2009 01 01 0736 54832 27360 0 2.4 474.3 1.68e+05 +2009 01 01 0737 54832 27420 0 2.4 474.3 1.68e+05 +2009 01 01 0738 54832 27480 0 2.4 488.8 2.26e+05 +2009 01 01 0739 54832 27540 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0740 54832 27600 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0741 54832 27660 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0742 54832 27720 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0743 54832 27780 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0744 54832 27840 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0745 54832 27900 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0746 54832 27960 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0747 54832 28020 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0748 54832 28080 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0749 54832 28140 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0750 54832 28200 1 2.3 466.8 1.91e+05 +2009 01 01 0751 54832 28260 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0752 54832 28320 0 2.6 461.3 1.63e+05 +2009 01 01 0753 54832 28380 0 2.6 461.3 1.63e+05 +2009 01 01 0754 54832 28440 0 2.3 462.9 1.73e+05 +2009 01 01 0755 54832 28500 0 2.5 461.7 1.63e+05 +2009 01 01 0756 54832 28560 1 2.5 462.5 1.91e+05 +2009 01 01 0757 54832 28620 0 2.4 463.5 1.95e+05 +2009 01 01 0758 54832 28680 0 2.4 464.7 1.74e+05 +2009 01 01 0759 54832 28740 0 2.0 465.3 1.92e+05 +2009 01 01 0800 54832 28800 1 1.9 465.7 1.73e+05 +2009 01 01 0801 54832 28860 0 1.9 468.1 1.58e+05 +2009 01 01 0802 54832 28920 0 1.6 479.6 1.47e+05 +2009 01 01 0803 54832 28980 0 1.6 475.6 1.67e+05 +2009 01 01 0804 54832 29040 0 1.6 477.1 1.79e+05 +2009 01 01 0805 54832 29100 0 1.7 478.9 1.79e+05 +2009 01 01 0806 54832 29160 1 1.9 475.6 1.71e+05 +2009 01 01 0807 54832 29220 0 1.8 475.2 1.57e+05 +2009 01 01 0808 54832 29280 1 1.5 482.1 1.73e+05 +2009 01 01 0809 54832 29340 1 1.5 482.1 1.73e+05 +2009 01 01 0810 54832 29400 0 1.8 471.5 1.63e+05 +2009 01 01 0811 54832 29460 0 1.9 471.2 1.61e+05 +2009 01 01 0812 54832 29520 0 1.9 475.3 1.87e+05 +2009 01 01 0813 54832 29580 0 2.0 470.1 1.66e+05 +2009 01 01 0814 54832 29640 0 1.9 469.9 1.81e+05 +2009 01 01 0815 54832 29700 0 2.4 467.0 1.63e+05 +2009 01 01 0816 54832 29760 0 2.5 467.0 1.57e+05 +2009 01 01 0817 54832 29820 0 2.5 468.9 1.77e+05 +2009 01 01 0818 54832 29880 1 2.6 470.2 1.81e+05 +2009 01 01 0819 54832 29940 0 2.7 473.4 1.75e+05 +2009 01 01 0820 54832 30000 0 3.0 471.8 1.58e+05 +2009 01 01 0821 54832 30060 0 2.5 469.0 1.65e+05 +2009 01 01 0822 54832 30120 0 2.8 469.5 1.60e+05 +2009 01 01 0823 54832 30180 0 2.7 470.5 1.62e+05 +2009 01 01 0824 54832 30240 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0825 54832 30300 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0826 54832 30360 0 2.5 470.9 1.56e+05 +2009 01 01 0827 54832 30420 0 2.8 466.8 1.65e+05 +2009 01 01 0828 54832 30480 1 2.6 470.2 1.64e+05 +2009 01 01 0829 54832 30540 0 2.3 466.4 1.72e+05 +2009 01 01 0830 54832 30600 0 2.8 467.0 1.70e+05 +2009 01 01 0831 54832 30660 0 2.6 465.8 1.85e+05 +2009 01 01 0832 54832 30720 0 2.3 466.6 1.88e+05 +2009 01 01 0833 54832 30780 0 2.2 469.6 1.90e+05 +2009 01 01 0834 54832 30840 0 2.3 470.3 1.94e+05 +2009 01 01 0835 54832 30900 1 2.6 466.6 1.68e+05 +2009 01 01 0836 54832 30960 1 2.7 470.2 1.62e+05 +2009 01 01 0837 54832 31020 0 2.3 469.3 1.87e+05 +2009 01 01 0838 54832 31080 0 2.6 464.5 1.76e+05 +2009 01 01 0839 54832 31140 1 2.7 466.2 1.62e+05 +2009 01 01 0840 54832 31200 1 2.6 467.3 1.66e+05 +2009 01 01 0841 54832 31260 1 2.6 467.3 1.66e+05 +2009 01 01 0842 54832 31320 0 2.4 467.0 1.50e+05 +2009 01 01 0843 54832 31380 0 2.4 465.8 1.68e+05 +2009 01 01 0844 54832 31440 0 2.6 468.6 1.54e+05 +2009 01 01 0845 54832 31500 0 2.5 472.4 1.54e+05 +2009 01 01 0846 54832 31560 0 2.2 473.0 1.65e+05 +2009 01 01 0847 54832 31620 0 2.2 469.5 1.74e+05 +2009 01 01 0848 54832 31680 0 2.1 471.8 1.89e+05 +2009 01 01 0849 54832 31740 1 2.3 469.7 1.88e+05 +2009 01 01 0850 54832 31800 0 2.2 471.1 1.75e+05 +2009 01 01 0851 54832 31860 1 2.3 473.6 1.55e+05 +2009 01 01 0852 54832 31920 1 2.2 475.6 1.65e+05 +2009 01 01 0853 54832 31980 1 2.6 472.5 1.73e+05 +2009 01 01 0854 54832 32040 0 2.0 473.9 1.54e+05 +2009 01 01 0855 54832 32100 1 2.1 470.8 1.59e+05 +2009 01 01 0856 54832 32160 0 2.0 473.8 1.52e+05 +2009 01 01 0857 54832 32220 0 2.0 473.8 1.52e+05 +2009 01 01 0858 54832 32280 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0859 54832 32340 0 2.2 467.0 1.51e+05 +2009 01 01 0900 54832 32400 0 2.5 469.6 1.39e+05 +2009 01 01 0901 54832 32460 0 2.4 471.6 1.42e+05 +2009 01 01 0902 54832 32520 0 2.7 470.2 1.34e+05 +2009 01 01 0903 54832 32580 1 2.1 475.2 1.61e+05 +2009 01 01 0904 54832 32640 0 2.0 475.9 1.57e+05 +2009 01 01 0905 54832 32700 0 2.4 466.1 1.63e+05 +2009 01 01 0906 54832 32760 0 2.4 474.0 1.72e+05 +2009 01 01 0907 54832 32820 0 2.4 481.1 1.76e+05 +2009 01 01 0908 54832 32880 0 2.2 480.8 1.52e+05 +2009 01 01 0909 54832 32940 0 2.1 483.9 1.43e+05 +2009 01 01 0910 54832 33000 0 2.0 486.0 1.56e+05 +2009 01 01 0911 54832 33060 0 2.3 477.9 1.65e+05 +2009 01 01 0912 54832 33120 0 2.1 484.4 1.60e+05 +2009 01 01 0913 54832 33180 0 2.1 484.4 1.60e+05 +2009 01 01 0914 54832 33240 0 2.7 478.5 2.16e+05 +2009 01 01 0915 54832 33300 0 2.4 488.0 1.41e+05 +2009 01 01 0916 54832 33360 0 2.5 483.4 1.55e+05 +2009 01 01 0917 54832 33420 0 2.3 489.4 1.82e+05 +2009 01 01 0918 54832 33480 0 2.5 490.4 1.81e+05 +2009 01 01 0919 54832 33540 0 2.5 492.7 1.81e+05 +2009 01 01 0920 54832 33600 0 2.5 491.2 1.55e+05 +2009 01 01 0921 54832 33660 0 2.4 492.5 1.76e+05 +2009 01 01 0922 54832 33720 0 2.6 492.4 1.91e+05 +2009 01 01 0923 54832 33780 0 2.4 494.9 1.41e+05 +2009 01 01 0924 54832 33840 0 2.4 497.5 1.44e+05 +2009 01 01 0925 54832 33900 0 2.5 496.9 1.43e+05 +2009 01 01 0926 54832 33960 1 2.5 474.3 1.58e+05 +2009 01 01 0927 54832 34020 0 2.6 472.5 1.69e+05 +2009 01 01 0928 54832 34080 0 2.9 480.7 1.77e+05 +2009 01 01 0929 54832 34140 0 2.9 480.7 1.77e+05 +2009 01 01 0930 54832 34200 0 2.8 482.4 1.72e+05 +2009 01 01 0931 54832 34260 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 0932 54832 34320 0 2.8 489.1 1.69e+05 +2009 01 01 0933 54832 34380 0 2.7 489.7 1.72e+05 +2009 01 01 0934 54832 34440 0 2.7 482.1 1.41e+05 +2009 01 01 0935 54832 34500 0 2.8 489.7 1.32e+05 +2009 01 01 0936 54832 34560 0 2.5 489.0 1.29e+05 +2009 01 01 0937 54832 34620 0 3.0 484.9 1.48e+05 +2009 01 01 0938 54832 34680 0 2.9 487.3 1.61e+05 +2009 01 01 0939 54832 34740 0 3.0 481.2 1.40e+05 +2009 01 01 0940 54832 34800 0 2.8 487.2 1.84e+05 +2009 01 01 0941 54832 34860 0 2.7 485.7 1.79e+05 +2009 01 01 0942 54832 34920 0 2.6 483.0 1.78e+05 +2009 01 01 0943 54832 34980 0 2.7 488.4 1.88e+05 +2009 01 01 0944 54832 35040 1 2.4 481.3 1.64e+05 +2009 01 01 0945 54832 35100 1 2.4 481.3 1.64e+05 +2009 01 01 0946 54832 35160 0 2.7 475.8 1.60e+05 +2009 01 01 0947 54832 35220 0 2.4 465.0 1.83e+05 +2009 01 01 0948 54832 35280 0 2.4 468.7 1.61e+05 +2009 01 01 0949 54832 35340 0 2.4 471.8 1.77e+05 +2009 01 01 0950 54832 35400 0 2.9 467.8 1.44e+05 +2009 01 01 0951 54832 35460 0 2.5 467.7 1.87e+05 +2009 01 01 0952 54832 35520 0 2.2 461.5 1.83e+05 +2009 01 01 0953 54832 35580 0 2.3 461.6 1.84e+05 +2009 01 01 0954 54832 35640 0 1.4 469.8 1.39e+05 +2009 01 01 0955 54832 35700 0 1.6 465.8 1.50e+05 +2009 01 01 0956 54832 35760 1 1.5 469.4 1.58e+05 +2009 01 01 0957 54832 35820 0 1.6 473.1 1.53e+05 +2009 01 01 0958 54832 35880 0 1.6 472.7 1.62e+05 +2009 01 01 0959 54832 35940 1 1.5 468.7 1.45e+05 +2009 01 01 1000 54832 36000 0 1.7 468.5 1.34e+05 +2009 01 01 1001 54832 36060 0 1.7 468.5 1.34e+05 +2009 01 01 1002 54832 36120 0 1.6 463.2 1.51e+05 +2009 01 01 1003 54832 36180 0 1.7 460.5 1.53e+05 +2009 01 01 1004 54832 36240 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1005 54832 36300 0 2.1 456.8 1.37e+05 +2009 01 01 1006 54832 36360 0 2.1 453.1 1.54e+05 +2009 01 01 1007 54832 36420 0 1.8 463.3 1.39e+05 +2009 01 01 1008 54832 36480 0 1.8 466.1 1.32e+05 +2009 01 01 1009 54832 36540 0 0.9 467.9 1.37e+05 +2009 01 01 1010 54832 36600 0 1.3 456.6 1.51e+05 +2009 01 01 1011 54832 36660 0 2.0 449.1 8.91e+04 +2009 01 01 1012 54832 36720 0 0.9 470.1 9.27e+04 +2009 01 01 1013 54832 36780 1 0.9 475.4 1.16e+05 +2009 01 01 1014 54832 36840 0 0.8 491.0 1.41e+05 +2009 01 01 1015 54832 36900 0 1.2 468.0 1.27e+05 +2009 01 01 1016 54832 36960 0 1.7 463.3 1.26e+05 +2009 01 01 1017 54832 37020 0 1.7 463.3 1.26e+05 +2009 01 01 1018 54832 37080 0 1.9 463.1 1.33e+05 +2009 01 01 1019 54832 37140 1 2.4 459.5 1.34e+05 +2009 01 01 1020 54832 37200 0 2.9 463.5 1.41e+05 +2009 01 01 1021 54832 37260 0 3.1 462.8 1.44e+05 +2009 01 01 1022 54832 37320 0 3.2 461.0 1.46e+05 +2009 01 01 1023 54832 37380 1 2.8 461.4 1.53e+05 +2009 01 01 1024 54832 37440 0 2.7 461.8 1.31e+05 +2009 01 01 1025 54832 37500 0 2.8 463.6 1.47e+05 +2009 01 01 1026 54832 37560 0 3.0 458.8 1.36e+05 +2009 01 01 1027 54832 37620 0 2.3 460.5 1.23e+05 +2009 01 01 1028 54832 37680 0 2.7 461.5 1.60e+05 +2009 01 01 1029 54832 37740 1 2.4 456.3 1.20e+05 +2009 01 01 1030 54832 37800 0 2.6 464.8 1.57e+05 +2009 01 01 1031 54832 37860 0 2.5 465.7 1.50e+05 +2009 01 01 1032 54832 37920 1 2.6 463.9 1.56e+05 +2009 01 01 1033 54832 37980 1 2.6 463.9 1.56e+05 +2009 01 01 1034 54832 38040 1 2.3 468.3 1.47e+05 +2009 01 01 1035 54832 38100 0 2.4 466.7 1.49e+05 +2009 01 01 1036 54832 38160 0 2.3 467.9 1.35e+05 +2009 01 01 1037 54832 38220 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1038 54832 38280 1 2.3 466.5 1.44e+05 +2009 01 01 1039 54832 38340 0 2.1 469.6 1.39e+05 +2009 01 01 1040 54832 38400 0 2.1 471.3 1.52e+05 +2009 01 01 1041 54832 38460 0 2.6 465.6 1.45e+05 +2009 01 01 1042 54832 38520 0 2.4 466.3 1.65e+05 +2009 01 01 1043 54832 38580 0 2.0 469.8 1.54e+05 +2009 01 01 1044 54832 38640 0 2.4 460.8 1.58e+05 +2009 01 01 1045 54832 38700 1 2.4 463.0 1.63e+05 +2009 01 01 1046 54832 38760 1 2.6 463.2 1.59e+05 +2009 01 01 1047 54832 38820 1 2.6 459.8 1.55e+05 +2009 01 01 1048 54832 38880 0 2.2 458.4 1.21e+05 +2009 01 01 1049 54832 38940 0 2.2 458.4 1.21e+05 +2009 01 01 1050 54832 39000 0 2.5 448.4 1.13e+05 +2009 01 01 1051 54832 39060 0 2.4 454.5 1.34e+05 +2009 01 01 1052 54832 39120 0 2.5 455.6 1.31e+05 +2009 01 01 1053 54832 39180 0 2.6 448.4 1.08e+05 +2009 01 01 1054 54832 39240 0 3.1 456.6 1.31e+05 +2009 01 01 1055 54832 39300 0 2.7 457.6 1.15e+05 +2009 01 01 1056 54832 39360 0 2.7 454.6 9.44e+04 +2009 01 01 1057 54832 39420 0 2.5 462.7 1.12e+05 +2009 01 01 1058 54832 39480 0 1.9 466.5 1.36e+05 +2009 01 01 1059 54832 39540 0 2.3 471.2 1.34e+05 +2009 01 01 1100 54832 39600 0 2.2 479.4 1.60e+05 +2009 01 01 1101 54832 39660 0 2.5 473.7 1.55e+05 +2009 01 01 1102 54832 39720 0 3.0 464.8 1.42e+05 +2009 01 01 1103 54832 39780 1 2.8 463.5 1.33e+05 +2009 01 01 1104 54832 39840 0 2.3 466.8 1.38e+05 +2009 01 01 1105 54832 39900 0 2.3 466.8 1.38e+05 +2009 01 01 1106 54832 39960 0 2.2 469.0 1.19e+05 +2009 01 01 1107 54832 40020 0 2.0 472.4 1.30e+05 +2009 01 01 1108 54832 40080 0 2.2 476.0 1.42e+05 +2009 01 01 1109 54832 40140 0 2.2 476.9 1.54e+05 +2009 01 01 1110 54832 40200 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1111 54832 40260 0 2.1 473.5 1.33e+05 +2009 01 01 1112 54832 40320 0 2.2 477.2 1.49e+05 +2009 01 01 1113 54832 40380 0 2.1 477.4 1.45e+05 +2009 01 01 1114 54832 40440 0 2.2 478.8 1.47e+05 +2009 01 01 1115 54832 40500 0 1.9 472.6 1.27e+05 +2009 01 01 1116 54832 40560 0 2.1 467.0 1.29e+05 +2009 01 01 1117 54832 40620 0 2.2 465.8 1.29e+05 +2009 01 01 1118 54832 40680 0 2.7 460.5 1.12e+05 +2009 01 01 1119 54832 40740 0 3.1 442.1 1.72e+05 +2009 01 01 1120 54832 40800 0 2.9 446.5 1.17e+05 +2009 01 01 1121 54832 40860 0 2.9 446.5 1.17e+05 +2009 01 01 1122 54832 40920 0 2.5 450.7 1.37e+05 +2009 01 01 1123 54832 40980 0 2.2 457.1 1.37e+05 +2009 01 01 1124 54832 41040 0 2.1 451.0 1.38e+05 +2009 01 01 1125 54832 41100 0 2.2 459.3 1.22e+05 +2009 01 01 1126 54832 41160 0 2.3 453.2 1.40e+05 +2009 01 01 1127 54832 41220 0 2.5 450.2 1.44e+05 +2009 01 01 1128 54832 41280 0 2.5 448.4 1.27e+05 +2009 01 01 1129 54832 41340 0 2.9 446.9 1.26e+05 +2009 01 01 1130 54832 41400 1 2.9 444.1 1.25e+05 +2009 01 01 1131 54832 41460 0 3.1 442.9 1.48e+05 +2009 01 01 1132 54832 41520 0 3.2 441.9 1.26e+05 +2009 01 01 1133 54832 41580 1 3.1 442.7 1.35e+05 +2009 01 01 1134 54832 41640 0 2.9 442.3 1.18e+05 +2009 01 01 1135 54832 41700 0 2.6 447.5 1.27e+05 +2009 01 01 1136 54832 41760 0 3.1 446.7 1.17e+05 +2009 01 01 1137 54832 41820 0 3.1 446.7 1.17e+05 +2009 01 01 1138 54832 41880 0 2.7 448.1 1.28e+05 +2009 01 01 1139 54832 41940 0 2.4 449.8 1.19e+05 +2009 01 01 1140 54832 42000 0 2.7 450.9 1.11e+05 +2009 01 01 1141 54832 42060 0 2.2 452.4 1.03e+05 +2009 01 01 1142 54832 42120 0 2.3 453.4 9.89e+04 +2009 01 01 1143 54832 42180 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1144 54832 42240 0 2.8 447.2 9.90e+04 +2009 01 01 1145 54832 42300 0 3.0 447.1 1.06e+05 +2009 01 01 1146 54832 42360 0 3.0 448.9 9.29e+04 +2009 01 01 1147 54832 42420 0 2.9 446.9 1.00e+05 +2009 01 01 1148 54832 42480 0 2.7 448.9 9.68e+04 +2009 01 01 1149 54832 42540 0 2.9 447.1 9.80e+04 +2009 01 01 1150 54832 42600 1 2.9 446.5 8.77e+04 +2009 01 01 1151 54832 42660 0 3.0 445.5 1.00e+05 +2009 01 01 1152 54832 42720 0 2.8 442.5 1.15e+05 +2009 01 01 1153 54832 42780 0 2.8 442.5 1.15e+05 +2009 01 01 1154 54832 42840 0 2.8 441.7 1.35e+05 +2009 01 01 1155 54832 42900 0 3.2 444.1 1.09e+05 +2009 01 01 1156 54832 42960 0 3.0 444.8 1.05e+05 +2009 01 01 1157 54832 43020 0 3.4 445.7 1.06e+05 +2009 01 01 1158 54832 43080 0 3.2 444.3 1.11e+05 +2009 01 01 1159 54832 43140 0 3.2 443.2 1.03e+05 +2009 01 01 1200 54832 43200 0 3.2 442.5 1.04e+05 +2009 01 01 1201 54832 43260 0 3.0 442.1 1.10e+05 +2009 01 01 1202 54832 43320 0 3.4 440.7 1.01e+05 +2009 01 01 1203 54832 43380 0 3.4 448.5 1.00e+05 +2009 01 01 1204 54832 43440 0 3.5 446.3 1.03e+05 +2009 01 01 1205 54832 43500 0 3.3 445.3 1.07e+05 +2009 01 01 1206 54832 43560 0 3.6 440.9 1.06e+05 +2009 01 01 1207 54832 43620 0 3.4 442.5 1.02e+05 +2009 01 01 1208 54832 43680 0 3.2 443.7 1.03e+05 +2009 01 01 1209 54832 43740 0 3.2 443.7 1.03e+05 +2009 01 01 1210 54832 43800 0 3.3 442.6 1.16e+05 +2009 01 01 1211 54832 43860 0 3.0 442.9 1.21e+05 +2009 01 01 1212 54832 43920 0 2.7 440.9 1.08e+05 +2009 01 01 1213 54832 43980 0 3.0 440.6 1.09e+05 +2009 01 01 1214 54832 44040 0 2.9 443.9 9.77e+04 +2009 01 01 1215 54832 44100 0 2.9 444.7 9.72e+04 +2009 01 01 1216 54832 44160 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1217 54832 44220 0 2.6 448.0 8.18e+04 +2009 01 01 1218 54832 44280 0 2.1 453.1 9.82e+04 +2009 01 01 1219 54832 44340 0 2.2 458.1 9.58e+04 +2009 01 01 1220 54832 44400 0 2.3 453.6 8.87e+04 +2009 01 01 1221 54832 44460 0 2.5 450.7 1.03e+05 +2009 01 01 1222 54832 44520 0 2.8 451.5 1.06e+05 +2009 01 01 1223 54832 44580 0 2.4 447.9 9.88e+04 +2009 01 01 1224 54832 44640 0 2.7 452.3 1.26e+05 +2009 01 01 1225 54832 44700 0 2.7 452.3 1.26e+05 +2009 01 01 1226 54832 44760 0 1.9 471.4 1.38e+05 +2009 01 01 1227 54832 44820 0 1.7 468.5 1.21e+05 +2009 01 01 1228 54832 44880 0 2.0 461.7 1.29e+05 +2009 01 01 1229 54832 44940 0 1.9 462.4 1.28e+05 +2009 01 01 1230 54832 45000 0 1.9 464.4 1.08e+05 +2009 01 01 1231 54832 45060 0 1.7 465.9 1.09e+05 +2009 01 01 1232 54832 45120 0 1.9 467.0 1.12e+05 +2009 01 01 1233 54832 45180 0 2.0 459.5 1.36e+05 +2009 01 01 1234 54832 45240 0 1.8 461.8 1.23e+05 +2009 01 01 1235 54832 45300 0 1.7 460.5 1.38e+05 +2009 01 01 1236 54832 45360 0 1.4 461.4 1.23e+05 +2009 01 01 1237 54832 45420 0 1.9 458.6 1.01e+05 +2009 01 01 1238 54832 45480 0 2.0 450.8 1.11e+05 +2009 01 01 1239 54832 45540 0 1.6 454.9 9.75e+04 +2009 01 01 1240 54832 45600 0 2.0 457.8 9.05e+04 +2009 01 01 1241 54832 45660 0 2.0 457.8 9.05e+04 +2009 01 01 1242 54832 45720 0 2.0 457.2 9.70e+04 +2009 01 01 1243 54832 45780 0 2.0 457.1 8.53e+04 +2009 01 01 1244 54832 45840 0 2.0 455.8 8.44e+04 +2009 01 01 1245 54832 45900 0 2.1 455.9 1.16e+05 +2009 01 01 1246 54832 45960 0 1.9 455.3 1.06e+05 +2009 01 01 1247 54832 46020 0 2.0 454.5 1.04e+05 +2009 01 01 1248 54832 46080 0 1.8 456.3 1.05e+05 +2009 01 01 1249 54832 46140 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1250 54832 46200 0 1.8 458.8 9.51e+04 +2009 01 01 1251 54832 46260 0 2.1 456.3 1.01e+05 +2009 01 01 1252 54832 46320 0 1.5 455.1 1.02e+05 +2009 01 01 1253 54832 46380 0 2.1 457.7 8.74e+04 +2009 01 01 1254 54832 46440 0 2.0 457.4 8.51e+04 +2009 01 01 1255 54832 46500 0 2.1 457.6 9.46e+04 +2009 01 01 1256 54832 46560 0 2.0 460.7 9.13e+04 +2009 01 01 1257 54832 46620 0 2.0 460.7 9.13e+04 +2009 01 01 1258 54832 46680 0 1.9 457.4 8.90e+04 +2009 01 01 1259 54832 46740 0 1.8 452.7 7.84e+04 +2009 01 01 1300 54832 46800 0 1.9 456.5 8.74e+04 +2009 01 01 1301 54832 46860 0 2.0 456.7 8.74e+04 +2009 01 01 1302 54832 46920 0 1.8 460.7 8.49e+04 +2009 01 01 1303 54832 46980 0 1.9 456.7 8.75e+04 +2009 01 01 1304 54832 47040 0 1.9 456.8 8.40e+04 +2009 01 01 1305 54832 47100 0 2.2 455.6 8.79e+04 +2009 01 01 1306 54832 47160 0 2.1 454.3 8.46e+04 +2009 01 01 1307 54832 47220 0 1.9 454.0 8.53e+04 +2009 01 01 1308 54832 47280 0 1.8 456.0 8.04e+04 +2009 01 01 1309 54832 47340 0 1.9 454.3 8.56e+04 +2009 01 01 1310 54832 47400 0 1.9 454.2 8.22e+04 +2009 01 01 1311 54832 47460 0 1.9 451.0 8.21e+04 +2009 01 01 1312 54832 47520 0 1.9 454.3 8.84e+04 +2009 01 01 1313 54832 47580 0 1.9 454.3 8.84e+04 +2009 01 01 1314 54832 47640 0 2.0 454.7 8.31e+04 +2009 01 01 1315 54832 47700 0 1.9 454.7 8.12e+04 +2009 01 01 1316 54832 47760 0 2.0 454.5 9.41e+04 +2009 01 01 1317 54832 47820 0 2.1 456.4 9.54e+04 +2009 01 01 1318 54832 47880 0 2.2 453.6 9.72e+04 +2009 01 01 1319 54832 47940 0 2.2 453.2 9.71e+04 +2009 01 01 1320 54832 48000 0 2.2 452.1 9.47e+04 +2009 01 01 1321 54832 48060 0 2.1 456.4 9.29e+04 +2009 01 01 1322 54832 48120 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1323 54832 48180 0 2.2 451.8 9.14e+04 +2009 01 01 1324 54832 48240 0 2.2 451.4 8.96e+04 +2009 01 01 1325 54832 48300 0 1.8 448.1 9.33e+04 +2009 01 01 1326 54832 48360 0 2.0 448.6 9.29e+04 +2009 01 01 1327 54832 48420 1 1.8 451.7 8.59e+04 +2009 01 01 1328 54832 48480 0 1.8 451.7 8.86e+04 +2009 01 01 1329 54832 48540 0 1.8 451.7 8.86e+04 +2009 01 01 1330 54832 48600 0 2.2 450.0 9.35e+04 +2009 01 01 1331 54832 48660 0 2.3 448.9 9.57e+04 +2009 01 01 1332 54832 48720 0 2.1 449.9 9.88e+04 +2009 01 01 1333 54832 48780 0 2.1 451.5 8.84e+04 +2009 01 01 1334 54832 48840 0 2.3 450.0 9.20e+04 +2009 01 01 1335 54832 48900 0 2.1 451.2 9.14e+04 +2009 01 01 1336 54832 48960 0 2.3 451.6 9.26e+04 +2009 01 01 1337 54832 49020 0 2.1 453.0 9.19e+04 +2009 01 01 1338 54832 49080 1 2.2 448.1 9.77e+04 +2009 01 01 1339 54832 49140 0 2.1 450.9 8.73e+04 +2009 01 01 1340 54832 49200 0 1.9 451.1 8.37e+04 +2009 01 01 1341 54832 49260 0 1.9 449.7 7.93e+04 +2009 01 01 1342 54832 49320 0 1.7 453.6 7.52e+04 +2009 01 01 1343 54832 49380 0 1.9 449.2 8.73e+04 +2009 01 01 1344 54832 49440 0 2.1 450.6 9.24e+04 +2009 01 01 1345 54832 49500 0 2.1 450.6 9.24e+04 +2009 01 01 1346 54832 49560 0 2.2 451.4 9.15e+04 +2009 01 01 1347 54832 49620 0 2.3 450.9 9.25e+04 +2009 01 01 1348 54832 49680 0 2.2 454.4 9.46e+04 +2009 01 01 1349 54832 49740 0 2.1 448.8 9.17e+04 +2009 01 01 1350 54832 49800 0 2.3 453.8 9.63e+04 +2009 01 01 1351 54832 49860 0 2.3 452.0 9.87e+04 +2009 01 01 1352 54832 49920 0 2.2 444.0 9.81e+04 +2009 01 01 1353 54832 49980 0 2.0 445.7 9.41e+04 +2009 01 01 1354 54832 50040 0 1.9 446.7 9.69e+04 +2009 01 01 1355 54832 50100 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1356 54832 50160 0 1.9 444.7 1.09e+05 +2009 01 01 1357 54832 50220 1 2.0 441.6 1.03e+05 +2009 01 01 1358 54832 50280 0 2.1 442.6 9.56e+04 +2009 01 01 1359 54832 50340 0 1.9 447.2 9.39e+04 +2009 01 01 1400 54832 50400 0 1.9 445.9 1.01e+05 +2009 01 01 1401 54832 50460 0 1.9 445.9 1.01e+05 +2009 01 01 1402 54832 50520 0 2.0 448.5 9.17e+04 +2009 01 01 1403 54832 50580 0 2.1 446.8 1.06e+05 +2009 01 01 1404 54832 50640 0 2.2 449.7 9.96e+04 +2009 01 01 1405 54832 50700 0 2.2 438.1 1.03e+05 +2009 01 01 1406 54832 50760 0 2.0 441.6 9.92e+04 +2009 01 01 1407 54832 50820 0 2.0 443.6 1.14e+05 +2009 01 01 1408 54832 50880 0 2.1 444.2 1.12e+05 +2009 01 01 1409 54832 50940 1 2.2 445.9 1.14e+05 +2009 01 01 1410 54832 51000 0 2.2 442.2 9.91e+04 +2009 01 01 1411 54832 51060 0 2.5 440.0 9.80e+04 +2009 01 01 1412 54832 51120 0 2.1 445.2 9.23e+04 +2009 01 01 1413 54832 51180 0 2.2 444.0 9.24e+04 +2009 01 01 1414 54832 51240 0 2.2 442.5 9.27e+04 +2009 01 01 1415 54832 51300 0 2.2 444.4 9.16e+04 +2009 01 01 1416 54832 51360 0 2.2 445.3 9.66e+04 +2009 01 01 1417 54832 51420 0 2.2 445.3 9.66e+04 +2009 01 01 1418 54832 51480 0 2.2 443.4 9.05e+04 +2009 01 01 1419 54832 51540 1 2.2 446.2 1.05e+05 +2009 01 01 1420 54832 51600 1 2.4 440.5 1.02e+05 +2009 01 01 1421 54832 51660 1 2.2 447.2 1.17e+05 +2009 01 01 1422 54832 51720 1 2.5 434.8 1.31e+05 +2009 01 01 1423 54832 51780 0 2.3 442.1 9.92e+04 +2009 01 01 1424 54832 51840 1 2.4 442.3 1.14e+05 +2009 01 01 1425 54832 51900 1 2.3 444.1 1.17e+05 +2009 01 01 1426 54832 51960 1 2.2 444.1 9.45e+04 +2009 01 01 1427 54832 52020 1 2.2 454.4 8.57e+04 +2009 01 01 1428 54832 52080 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1429 54832 52140 0 2.5 443.5 9.27e+04 +2009 01 01 1430 54832 52200 0 2.4 442.6 9.88e+04 +2009 01 01 1431 54832 52260 0 2.5 445.5 1.22e+05 +2009 01 01 1432 54832 52320 1 2.3 443.9 1.16e+05 +2009 01 01 1433 54832 52380 1 2.3 443.9 1.16e+05 +2009 01 01 1434 54832 52440 1 2.6 445.2 1.34e+05 +2009 01 01 1435 54832 52500 1 2.7 442.4 1.36e+05 +2009 01 01 1436 54832 52560 0 2.7 445.6 1.37e+05 +2009 01 01 1437 54832 52620 1 2.8 445.0 1.30e+05 +2009 01 01 1438 54832 52680 1 2.4 448.1 1.17e+05 +2009 01 01 1439 54832 52740 1 2.6 445.6 1.21e+05 +2009 01 01 1440 54832 52800 1 2.4 445.6 1.20e+05 +2009 01 01 1441 54832 52860 1 2.5 443.6 1.11e+05 +2009 01 01 1442 54832 52920 0 2.2 444.6 1.04e+05 +2009 01 01 1443 54832 52980 0 2.4 446.9 1.22e+05 +2009 01 01 1444 54832 53040 0 2.2 453.4 1.37e+05 +2009 01 01 1445 54832 53100 0 2.5 450.7 1.36e+05 +2009 01 01 1446 54832 53160 0 2.3 448.7 1.30e+05 +2009 01 01 1447 54832 53220 1 2.7 447.6 1.37e+05 +2009 01 01 1448 54832 53280 1 2.7 447.4 1.34e+05 +2009 01 01 1449 54832 53340 1 2.7 447.4 1.34e+05 +2009 01 01 1450 54832 53400 0 2.2 436.0 7.36e+04 +2009 01 01 1451 54832 53460 0 2.3 435.7 9.20e+04 +2009 01 01 1452 54832 53520 0 2.2 435.4 9.10e+04 +2009 01 01 1453 54832 53580 0 2.2 435.3 7.75e+04 +2009 01 01 1454 54832 53640 1 2.2 438.6 9.97e+04 +2009 01 01 1455 54832 53700 0 2.3 442.6 1.05e+05 +2009 01 01 1456 54832 53760 0 2.1 446.7 1.25e+05 +2009 01 01 1457 54832 53820 0 2.3 442.1 1.13e+05 +2009 01 01 1458 54832 53880 0 2.3 442.6 1.15e+05 +2009 01 01 1459 54832 53940 0 2.2 452.1 1.29e+05 +2009 01 01 1500 54832 54000 0 2.2 451.5 1.29e+05 +2009 01 01 1501 54832 54060 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1502 54832 54120 0 2.0 450.6 1.14e+05 +2009 01 01 1503 54832 54180 0 2.4 448.7 1.36e+05 +2009 01 01 1504 54832 54240 0 2.2 450.7 1.31e+05 +2009 01 01 1505 54832 54300 0 2.2 450.7 1.31e+05 +2009 01 01 1506 54832 54360 0 2.1 444.4 1.07e+05 +2009 01 01 1507 54832 54420 0 2.3 447.3 1.30e+05 +2009 01 01 1508 54832 54480 0 2.1 449.2 1.34e+05 +2009 01 01 1509 54832 54540 0 1.9 446.6 1.29e+05 +2009 01 01 1510 54832 54600 1 2.4 439.4 1.38e+05 +2009 01 01 1511 54832 54660 0 2.1 450.4 1.49e+05 +2009 01 01 1512 54832 54720 0 2.2 444.7 1.40e+05 +2009 01 01 1513 54832 54780 0 2.4 442.4 1.50e+05 +2009 01 01 1514 54832 54840 1 2.5 443.0 1.44e+05 +2009 01 01 1515 54832 54900 1 2.4 446.8 1.35e+05 +2009 01 01 1516 54832 54960 0 2.3 447.3 1.42e+05 +2009 01 01 1517 54832 55020 0 2.1 446.6 1.40e+05 +2009 01 01 1518 54832 55080 0 2.7 447.9 1.22e+05 +2009 01 01 1519 54832 55140 1 2.2 446.7 1.45e+05 +2009 01 01 1520 54832 55200 1 2.1 445.0 1.45e+05 +2009 01 01 1521 54832 55260 1 2.1 445.0 1.45e+05 +2009 01 01 1522 54832 55320 0 2.2 441.0 1.45e+05 +2009 01 01 1523 54832 55380 0 1.9 447.8 1.45e+05 +2009 01 01 1524 54832 55440 0 1.9 447.9 1.28e+05 +2009 01 01 1525 54832 55500 0 2.0 445.8 1.39e+05 +2009 01 01 1526 54832 55560 1 1.9 439.1 1.43e+05 +2009 01 01 1527 54832 55620 1 2.1 434.5 1.43e+05 +2009 01 01 1528 54832 55680 0 1.9 438.1 1.34e+05 +2009 01 01 1529 54832 55740 0 1.9 439.2 1.38e+05 +2009 01 01 1530 54832 55800 0 1.8 437.9 1.33e+05 +2009 01 01 1531 54832 55860 0 2.0 442.3 1.66e+05 +2009 01 01 1532 54832 55920 1 2.2 440.8 1.63e+05 +2009 01 01 1533 54832 55980 0 2.4 444.1 1.23e+05 +2009 01 01 1534 54832 56040 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1535 54832 56100 0 1.8 436.2 1.22e+05 +2009 01 01 1536 54832 56160 0 1.9 440.4 1.28e+05 +2009 01 01 1537 54832 56220 0 1.9 440.4 1.28e+05 +2009 01 01 1538 54832 56280 0 1.7 453.3 9.81e+04 +2009 01 01 1539 54832 56340 0 1.6 452.4 1.06e+05 +2009 01 01 1540 54832 56400 0 1.7 451.2 9.52e+04 +2009 01 01 1541 54832 56460 0 1.5 451.7 1.15e+05 +2009 01 01 1542 54832 56520 0 1.4 449.3 1.19e+05 +2009 01 01 1543 54832 56580 0 1.4 455.4 1.30e+05 +2009 01 01 1544 54832 56640 0 1.7 455.5 9.65e+04 +2009 01 01 1545 54832 56700 0 1.9 452.3 1.14e+05 +2009 01 01 1546 54832 56760 0 1.9 454.7 1.17e+05 +2009 01 01 1547 54832 56820 0 1.6 455.5 1.17e+05 +2009 01 01 1548 54832 56880 0 1.8 457.4 1.15e+05 +2009 01 01 1549 54832 56940 0 1.8 455.6 1.14e+05 +2009 01 01 1550 54832 57000 0 1.8 458.7 1.11e+05 +2009 01 01 1551 54832 57060 0 1.8 456.7 1.14e+05 +2009 01 01 1552 54832 57120 0 1.8 454.9 1.23e+05 +2009 01 01 1553 54832 57180 0 1.8 454.9 1.23e+05 +2009 01 01 1554 54832 57240 0 1.6 460.7 1.09e+05 +2009 01 01 1555 54832 57300 1 1.8 452.4 1.23e+05 +2009 01 01 1556 54832 57360 0 1.8 455.4 1.18e+05 +2009 01 01 1557 54832 57420 0 1.8 457.6 1.03e+05 +2009 01 01 1558 54832 57480 1 1.9 452.9 1.05e+05 +2009 01 01 1559 54832 57540 0 1.7 455.7 9.66e+04 +2009 01 01 1600 54832 57600 0 1.8 455.6 9.59e+04 +2009 01 01 1601 54832 57660 0 2.0 447.0 1.61e+05 +2009 01 01 1602 54832 57720 0 1.8 456.9 1.04e+05 +2009 01 01 1603 54832 57780 0 2.1 452.6 9.89e+04 +2009 01 01 1604 54832 57840 0 2.0 451.9 9.80e+04 +2009 01 01 1605 54832 57900 0 1.8 450.6 1.01e+05 +2009 01 01 1606 54832 57960 0 2.0 451.8 9.38e+04 +2009 01 01 1607 54832 58020 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1608 54832 58080 0 1.8 450.2 1.06e+05 +2009 01 01 1609 54832 58140 0 1.8 450.2 1.06e+05 +2009 01 01 1610 54832 58200 0 1.9 454.1 1.03e+05 +2009 01 01 1611 54832 58260 0 1.9 448.2 1.35e+05 +2009 01 01 1612 54832 58320 0 2.3 449.2 1.28e+05 +2009 01 01 1613 54832 58380 0 2.2 445.4 1.15e+05 +2009 01 01 1614 54832 58440 0 2.2 452.2 1.09e+05 +2009 01 01 1615 54832 58500 0 2.0 442.5 9.58e+04 +2009 01 01 1616 54832 58560 0 2.7 429.8 1.90e+05 +2009 01 01 1617 54832 58620 0 2.4 438.8 1.50e+05 +2009 01 01 1618 54832 58680 0 2.5 435.9 1.47e+05 +2009 01 01 1619 54832 58740 1 2.2 438.7 1.45e+05 +2009 01 01 1620 54832 58800 0 2.2 440.4 1.57e+05 +2009 01 01 1621 54832 58860 0 2.5 441.7 1.23e+05 +2009 01 01 1622 54832 58920 0 2.2 438.1 1.34e+05 +2009 01 01 1623 54832 58980 0 2.3 442.8 1.40e+05 +2009 01 01 1624 54832 59040 0 2.1 437.8 1.59e+05 +2009 01 01 1625 54832 59100 0 2.1 437.8 1.59e+05 +2009 01 01 1626 54832 59160 0 2.6 434.7 1.06e+05 +2009 01 01 1627 54832 59220 0 2.2 439.7 1.29e+05 +2009 01 01 1628 54832 59280 0 2.5 436.1 1.18e+05 +2009 01 01 1629 54832 59340 0 2.4 437.9 1.27e+05 +2009 01 01 1630 54832 59400 0 2.7 436.7 1.27e+05 +2009 01 01 1631 54832 59460 0 2.3 430.6 1.28e+05 +2009 01 01 1632 54832 59520 0 2.1 437.8 1.18e+05 +2009 01 01 1633 54832 59580 0 1.9 435.8 1.28e+05 +2009 01 01 1634 54832 59640 0 2.5 433.2 1.16e+05 +2009 01 01 1635 54832 59700 0 2.6 432.4 1.16e+05 +2009 01 01 1636 54832 59760 1 2.8 436.4 1.18e+05 +2009 01 01 1637 54832 59820 0 2.7 434.1 1.21e+05 +2009 01 01 1638 54832 59880 0 2.8 436.7 1.10e+05 +2009 01 01 1639 54832 59940 1 2.6 437.1 1.19e+05 +2009 01 01 1640 54832 60000 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1641 54832 60060 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1642 54832 60120 0 2.6 438.2 1.05e+05 +2009 01 01 1643 54832 60180 0 2.3 436.9 1.16e+05 +2009 01 01 1644 54832 60240 0 3.0 435.6 9.82e+04 +2009 01 01 1645 54832 60300 0 2.7 439.9 9.07e+04 +2009 01 01 1646 54832 60360 1 3.0 436.9 9.64e+04 +2009 01 01 1647 54832 60420 0 2.8 437.0 9.54e+04 +2009 01 01 1648 54832 60480 0 3.1 436.8 8.65e+04 +2009 01 01 1649 54832 60540 0 2.7 439.5 1.04e+05 +2009 01 01 1650 54832 60600 0 3.1 435.0 8.39e+04 +2009 01 01 1651 54832 60660 0 2.9 434.3 1.07e+05 +2009 01 01 1652 54832 60720 0 3.2 435.6 1.04e+05 +2009 01 01 1653 54832 60780 0 3.0 435.5 1.03e+05 +2009 01 01 1654 54832 60840 1 3.1 433.2 9.67e+04 +2009 01 01 1655 54832 60900 0 3.3 433.9 9.70e+04 +2009 01 01 1656 54832 60960 0 2.9 433.6 8.72e+04 +2009 01 01 1657 54832 61020 0 2.9 433.6 8.72e+04 +2009 01 01 1658 54832 61080 0 3.0 433.8 8.91e+04 +2009 01 01 1659 54832 61140 0 3.0 434.0 8.79e+04 +2009 01 01 1700 54832 61200 0 3.1 435.2 8.37e+04 +2009 01 01 1701 54832 61260 0 2.9 435.4 8.02e+04 +2009 01 01 1702 54832 61320 0 3.4 435.9 8.46e+04 +2009 01 01 1703 54832 61380 0 2.9 435.5 7.64e+04 +2009 01 01 1704 54832 61440 0 2.8 434.8 8.12e+04 +2009 01 01 1705 54832 61500 0 2.9 435.0 8.91e+04 +2009 01 01 1706 54832 61560 0 3.0 434.8 9.05e+04 +2009 01 01 1707 54832 61620 0 2.8 434.3 8.12e+04 +2009 01 01 1708 54832 61680 0 2.7 437.4 8.29e+04 +2009 01 01 1709 54832 61740 0 2.6 435.2 8.71e+04 +2009 01 01 1710 54832 61800 0 2.8 434.6 9.29e+04 +2009 01 01 1711 54832 61860 0 2.8 433.8 9.40e+04 +2009 01 01 1712 54832 61920 0 2.7 431.9 9.87e+04 +2009 01 01 1713 54832 61980 0 2.7 431.9 9.87e+04 +2009 01 01 1714 54832 62040 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1715 54832 62100 1 2.4 427.3 1.18e+05 +2009 01 01 1716 54832 62160 0 2.5 427.6 1.31e+05 +2009 01 01 1717 54832 62220 0 2.1 424.6 1.43e+05 +2009 01 01 1718 54832 62280 0 2.0 427.8 1.52e+05 +2009 01 01 1719 54832 62340 1 1.9 427.8 1.52e+05 +2009 01 01 1720 54832 62400 0 1.9 428.9 1.41e+05 +2009 01 01 1721 54832 62460 0 1.9 425.3 1.37e+05 +2009 01 01 1722 54832 62520 0 1.9 421.5 1.23e+05 +2009 01 01 1723 54832 62580 0 2.0 422.7 1.19e+05 +2009 01 01 1724 54832 62640 0 2.1 430.3 9.19e+04 +2009 01 01 1725 54832 62700 0 2.1 430.3 9.21e+04 +2009 01 01 1726 54832 62760 0 2.4 421.4 1.10e+05 +2009 01 01 1727 54832 62820 0 1.8 430.3 8.72e+04 +2009 01 01 1728 54832 62880 0 1.9 424.5 1.10e+05 +2009 01 01 1729 54832 62940 0 1.9 424.5 1.10e+05 +2009 01 01 1730 54832 63000 0 2.0 418.0 1.37e+05 +2009 01 01 1731 54832 63060 0 1.9 425.9 1.05e+05 +2009 01 01 1732 54832 63120 0 2.2 427.4 1.08e+05 +2009 01 01 1733 54832 63180 0 2.5 442.7 1.00e+05 +2009 01 01 1734 54832 63240 0 2.2 439.5 9.06e+04 +2009 01 01 1735 54832 63300 0 2.3 444.4 8.10e+04 +2009 01 01 1736 54832 63360 0 2.1 436.4 9.96e+04 +2009 01 01 1737 54832 63420 1 2.0 435.8 9.40e+04 +2009 01 01 1738 54832 63480 0 2.1 433.0 9.30e+04 +2009 01 01 1739 54832 63540 0 2.1 421.9 1.30e+05 +2009 01 01 1740 54832 63600 0 2.2 428.0 1.09e+05 +2009 01 01 1741 54832 63660 1 2.2 429.4 1.26e+05 +2009 01 01 1742 54832 63720 0 2.7 428.7 8.74e+04 +2009 01 01 1743 54832 63780 0 2.3 433.9 7.32e+04 +2009 01 01 1744 54832 63840 0 2.1 433.6 1.22e+05 +2009 01 01 1745 54832 63900 0 2.1 433.6 1.22e+05 +2009 01 01 1746 54832 63960 0 2.1 435.0 9.60e+04 +2009 01 01 1747 54832 64020 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1748 54832 64080 0 2.4 434.4 9.71e+04 +2009 01 01 1749 54832 64140 0 2.1 438.0 8.72e+04 +2009 01 01 1750 54832 64200 0 2.0 438.8 9.83e+04 +2009 01 01 1751 54832 64260 0 2.0 439.2 9.82e+04 +2009 01 01 1752 54832 64320 0 2.1 439.0 1.00e+05 +2009 01 01 1753 54832 64380 0 2.0 436.2 8.56e+04 +2009 01 01 1754 54832 64440 0 2.0 441.5 1.04e+05 +2009 01 01 1755 54832 64500 0 2.0 441.4 1.08e+05 +2009 01 01 1756 54832 64560 0 2.0 439.5 1.09e+05 +2009 01 01 1757 54832 64620 0 2.0 440.0 9.77e+04 +2009 01 01 1758 54832 64680 0 2.0 439.1 1.05e+05 +2009 01 01 1759 54832 64740 0 1.9 440.3 1.01e+05 +2009 01 01 1800 54832 64800 0 2.0 440.8 1.01e+05 +2009 01 01 1801 54832 64860 0 2.0 440.8 1.01e+05 +2009 01 01 1802 54832 64920 0 1.9 439.1 8.30e+04 +2009 01 01 1803 54832 64980 0 2.0 440.3 8.07e+04 +2009 01 01 1804 54832 65040 0 2.0 438.7 7.69e+04 +2009 01 01 1805 54832 65100 0 2.0 436.3 8.52e+04 +2009 01 01 1806 54832 65160 0 1.9 437.8 9.21e+04 +2009 01 01 1807 54832 65220 0 2.0 438.6 1.00e+05 +2009 01 01 1808 54832 65280 0 2.0 439.2 9.01e+04 +2009 01 01 1809 54832 65340 0 2.0 440.1 9.00e+04 +2009 01 01 1810 54832 65400 1 2.1 440.3 8.61e+04 +2009 01 01 1811 54832 65460 0 2.2 439.4 8.52e+04 +2009 01 01 1812 54832 65520 0 2.4 451.5 8.47e+04 +2009 01 01 1813 54832 65580 0 2.4 449.8 8.00e+04 +2009 01 01 1814 54832 65640 0 2.5 446.5 7.89e+04 +2009 01 01 1815 54832 65700 0 2.2 451.5 7.73e+04 +2009 01 01 1816 54832 65760 0 2.2 447.7 7.46e+04 +2009 01 01 1817 54832 65820 0 2.2 447.7 7.46e+04 +2009 01 01 1818 54832 65880 1 2.1 444.0 7.75e+04 +2009 01 01 1819 54832 65940 0 2.1 439.4 8.90e+04 +2009 01 01 1820 54832 66000 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1821 54832 66060 0 2.3 439.8 8.62e+04 +2009 01 01 1822 54832 66120 0 1.8 450.0 8.25e+04 +2009 01 01 1823 54832 66180 0 1.9 451.5 8.02e+04 +2009 01 01 1824 54832 66240 0 1.9 451.0 7.44e+04 +2009 01 01 1825 54832 66300 0 2.0 451.1 8.22e+04 +2009 01 01 1826 54832 66360 1 2.4 445.1 1.10e+05 +2009 01 01 1827 54832 66420 0 2.6 441.4 1.03e+05 +2009 01 01 1828 54832 66480 0 2.5 442.7 1.01e+05 +2009 01 01 1829 54832 66540 1 2.5 443.8 1.01e+05 +2009 01 01 1830 54832 66600 1 2.6 439.0 1.02e+05 +2009 01 01 1831 54832 66660 0 2.8 439.3 9.33e+04 +2009 01 01 1832 54832 66720 0 3.0 439.1 9.77e+04 +2009 01 01 1833 54832 66780 0 3.0 439.1 9.77e+04 +2009 01 01 1834 54832 66840 0 2.4 448.4 1.09e+05 +2009 01 01 1835 54832 66900 0 2.7 446.4 1.06e+05 +2009 01 01 1836 54832 66960 0 2.6 446.5 8.70e+04 +2009 01 01 1837 54832 67020 0 2.4 447.2 9.03e+04 +2009 01 01 1838 54832 67080 0 2.3 442.9 8.66e+04 +2009 01 01 1839 54832 67140 0 2.3 440.6 9.89e+04 +2009 01 01 1840 54832 67200 0 2.4 437.4 1.01e+05 +2009 01 01 1841 54832 67260 0 2.4 439.0 1.02e+05 +2009 01 01 1842 54832 67320 0 2.1 443.6 8.03e+04 +2009 01 01 1843 54832 67380 0 2.2 439.9 9.17e+04 +2009 01 01 1844 54832 67440 0 2.3 455.2 8.80e+04 +2009 01 01 1845 54832 67500 0 2.4 442.8 8.87e+04 +2009 01 01 1846 54832 67560 0 2.7 445.8 9.39e+04 +2009 01 01 1847 54832 67620 0 2.2 435.5 1.07e+05 +2009 01 01 1848 54832 67680 0 2.2 435.5 9.60e+04 +2009 01 01 1849 54832 67740 0 2.2 435.5 9.60e+04 +2009 01 01 1850 54832 67800 0 2.4 427.9 1.17e+05 +2009 01 01 1851 54832 67860 0 2.5 435.0 1.02e+05 +2009 01 01 1852 54832 67920 0 2.4 436.1 1.18e+05 +2009 01 01 1853 54832 67980 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1854 54832 68040 0 2.3 437.8 1.11e+05 +2009 01 01 1855 54832 68100 0 2.1 436.3 1.31e+05 +2009 01 01 1856 54832 68160 0 2.0 429.2 1.53e+05 +2009 01 01 1857 54832 68220 1 1.9 423.6 1.46e+05 +2009 01 01 1858 54832 68280 1 1.9 426.4 1.55e+05 +2009 01 01 1859 54832 68340 0 2.3 420.1 1.44e+05 +2009 01 01 1900 54832 68400 1 2.0 426.5 1.40e+05 +2009 01 01 1901 54832 68460 1 2.3 421.7 1.39e+05 +2009 01 01 1902 54832 68520 0 2.3 422.0 1.31e+05 +2009 01 01 1903 54832 68580 0 2.0 422.1 1.53e+05 +2009 01 01 1904 54832 68640 1 2.0 419.7 1.56e+05 +2009 01 01 1905 54832 68700 1 2.0 419.7 1.56e+05 +2009 01 01 1906 54832 68760 0 2.2 420.8 1.56e+05 +2009 01 01 1907 54832 68820 1 2.2 430.3 1.47e+05 +2009 01 01 1908 54832 68880 0 2.4 437.5 1.26e+05 +2009 01 01 1909 54832 68940 0 2.3 435.3 1.20e+05 +2009 01 01 1910 54832 69000 0 2.5 426.7 1.40e+05 +2009 01 01 1911 54832 69060 0 2.4 427.4 1.41e+05 +2009 01 01 1912 54832 69120 0 2.2 430.1 1.37e+05 +2009 01 01 1913 54832 69180 0 2.4 426.8 1.19e+05 +2009 01 01 1914 54832 69240 1 2.2 426.0 1.31e+05 +2009 01 01 1915 54832 69300 1 2.2 424.0 1.41e+05 +2009 01 01 1916 54832 69360 0 2.2 426.3 1.47e+05 +2009 01 01 1917 54832 69420 1 2.1 429.0 1.36e+05 +2009 01 01 1918 54832 69480 1 2.4 422.8 1.43e+05 +2009 01 01 1919 54832 69540 0 1.9 425.6 1.56e+05 +2009 01 01 1920 54832 69600 1 2.4 425.9 1.44e+05 +2009 01 01 1921 54832 69660 1 2.4 425.9 1.44e+05 +2009 01 01 1922 54832 69720 1 2.0 424.5 1.58e+05 +2009 01 01 1923 54832 69780 0 2.2 422.9 1.52e+05 +2009 01 01 1924 54832 69840 1 2.1 425.0 1.54e+05 +2009 01 01 1925 54832 69900 0 2.0 425.4 1.71e+05 +2009 01 01 1926 54832 69960 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 1927 54832 70020 0 2.5 431.3 1.21e+05 +2009 01 01 1928 54832 70080 0 2.4 428.9 1.18e+05 +2009 01 01 1929 54832 70140 0 2.4 427.7 1.27e+05 +2009 01 01 1930 54832 70200 1 2.2 428.8 1.49e+05 +2009 01 01 1931 54832 70260 1 2.1 430.4 1.35e+05 +2009 01 01 1932 54832 70320 0 2.0 426.1 1.36e+05 +2009 01 01 1933 54832 70380 0 2.2 441.8 7.69e+04 +2009 01 01 1934 54832 70440 0 1.8 455.7 5.96e+04 +2009 01 01 1935 54832 70500 0 2.0 444.0 8.33e+04 +2009 01 01 1936 54832 70560 0 2.4 438.5 9.04e+04 +2009 01 01 1937 54832 70620 0 2.4 438.5 9.04e+04 +2009 01 01 1938 54832 70680 0 1.8 437.3 8.54e+04 +2009 01 01 1939 54832 70740 0 2.2 426.7 9.78e+04 +2009 01 01 1940 54832 70800 0 2.3 427.1 1.05e+05 +2009 01 01 1941 54832 70860 0 2.2 430.4 1.23e+05 +2009 01 01 1942 54832 70920 0 1.9 434.3 1.06e+05 +2009 01 01 1943 54832 70980 0 2.2 431.8 1.10e+05 +2009 01 01 1944 54832 71040 0 2.1 433.0 1.14e+05 +2009 01 01 1945 54832 71100 1 2.1 430.3 1.08e+05 +2009 01 01 1946 54832 71160 0 2.0 423.4 1.09e+05 +2009 01 01 1947 54832 71220 0 2.2 424.7 1.13e+05 +2009 01 01 1948 54832 71280 0 2.1 422.2 1.24e+05 +2009 01 01 1949 54832 71340 0 2.1 419.9 1.35e+05 +2009 01 01 1950 54832 71400 0 2.1 419.3 1.36e+05 +2009 01 01 1951 54832 71460 0 2.2 419.0 1.49e+05 +2009 01 01 1952 54832 71520 0 2.0 423.0 1.40e+05 +2009 01 01 1953 54832 71580 0 2.0 423.0 1.40e+05 +2009 01 01 1954 54832 71640 1 2.3 426.1 1.43e+05 +2009 01 01 1955 54832 71700 0 2.0 423.4 1.42e+05 +2009 01 01 1956 54832 71760 0 2.2 416.7 1.19e+05 +2009 01 01 1957 54832 71820 1 2.0 419.5 1.36e+05 +2009 01 01 1958 54832 71880 0 2.0 420.6 1.43e+05 +2009 01 01 1959 54832 71940 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2000 54832 72000 0 2.1 419.2 1.24e+05 +2009 01 01 2001 54832 72060 1 1.9 419.1 1.53e+05 +2009 01 01 2002 54832 72120 0 2.0 417.5 1.52e+05 +2009 01 01 2003 54832 72180 1 2.0 417.8 1.61e+05 +2009 01 01 2004 54832 72240 1 1.9 418.1 1.43e+05 +2009 01 01 2005 54832 72300 0 2.1 417.1 1.32e+05 +2009 01 01 2006 54832 72360 0 1.9 419.2 1.26e+05 +2009 01 01 2007 54832 72420 1 2.1 419.2 1.35e+05 +2009 01 01 2008 54832 72480 1 2.2 417.2 1.39e+05 +2009 01 01 2009 54832 72540 1 2.2 417.2 1.39e+05 +2009 01 01 2010 54832 72600 0 2.2 421.2 1.18e+05 +2009 01 01 2011 54832 72660 0 2.2 418.9 1.19e+05 +2009 01 01 2012 54832 72720 1 2.2 418.9 1.45e+05 +2009 01 01 2013 54832 72780 1 1.7 419.1 1.50e+05 +2009 01 01 2014 54832 72840 1 1.9 419.3 1.44e+05 +2009 01 01 2015 54832 72900 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2016 54832 72960 1 1.8 419.1 1.73e+05 +2009 01 01 2017 54832 73020 1 2.4 413.1 1.55e+05 +2009 01 01 2018 54832 73080 0 1.8 421.2 1.58e+05 +2009 01 01 2019 54832 73140 0 1.8 420.1 1.46e+05 +2009 01 01 2020 54832 73200 1 1.8 421.2 1.42e+05 +2009 01 01 2021 54832 73260 0 1.9 422.1 1.39e+05 +2009 01 01 2022 54832 73320 0 1.8 420.1 1.35e+05 +2009 01 01 2023 54832 73380 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2024 54832 73440 1 1.9 421.6 1.45e+05 +2009 01 01 2025 54832 73500 1 1.9 421.6 1.45e+05 +2009 01 01 2026 54832 73560 0 2.3 417.5 1.18e+05 +2009 01 01 2027 54832 73620 0 2.0 424.0 1.83e+05 +2009 01 01 2028 54832 73680 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2029 54832 73740 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2030 54832 73800 9 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2031 54832 73860 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2032 54832 73920 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2033 54832 73980 0 2.0 420.6 1.42e+05 +2009 01 01 2034 54832 74040 0 1.8 421.4 1.47e+05 +2009 01 01 2035 54832 74100 1 2.2 415.3 1.44e+05 +2009 01 01 2036 54832 74160 0 2.0 421.1 1.51e+05 +2009 01 01 2037 54832 74220 0 1.7 421.8 1.31e+05 +2009 01 01 2038 54832 74280 1 1.7 419.1 1.58e+05 +2009 01 01 2039 54832 74340 0 1.9 414.7 1.29e+05 +2009 01 01 2040 54832 74400 0 2.1 427.6 1.09e+05 +2009 01 01 2041 54832 74460 0 2.1 427.6 1.09e+05 +2009 01 01 2042 54832 74520 0 1.9 422.3 1.11e+05 +2009 01 01 2043 54832 74580 0 1.8 421.9 1.22e+05 +2009 01 01 2044 54832 74640 0 1.8 417.5 1.22e+05 +2009 01 01 2045 54832 74700 0 1.8 417.8 1.19e+05 +2009 01 01 2046 54832 74760 1 1.8 417.5 1.31e+05 +2009 01 01 2047 54832 74820 0 1.7 416.2 1.24e+05 +2009 01 01 2048 54832 74880 0 1.8 416.6 1.20e+05 +2009 01 01 2049 54832 74940 1 1.8 420.6 1.33e+05 +2009 01 01 2050 54832 75000 1 1.8 415.4 1.08e+05 +2009 01 01 2051 54832 75060 0 1.9 416.2 1.35e+05 +2009 01 01 2052 54832 75120 0 1.9 418.8 1.43e+05 +2009 01 01 2053 54832 75180 1 2.0 419.1 1.32e+05 +2009 01 01 2054 54832 75240 0 2.3 420.1 1.35e+05 +2009 01 01 2055 54832 75300 1 2.0 418.8 1.31e+05 +2009 01 01 2056 54832 75360 0 2.3 421.4 1.39e+05 +2009 01 01 2057 54832 75420 0 2.3 421.4 1.39e+05 +2009 01 01 2058 54832 75480 0 2.0 417.0 1.39e+05 +2009 01 01 2059 54832 75540 0 2.4 421.6 1.47e+05 +2009 01 01 2100 54832 75600 1 2.3 422.3 1.54e+05 +2009 01 01 2101 54832 75660 0 2.1 418.8 1.52e+05 +2009 01 01 2102 54832 75720 0 2.0 418.5 1.45e+05 +2009 01 01 2103 54832 75780 0 2.0 418.7 1.51e+05 +2009 01 01 2104 54832 75840 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2105 54832 75900 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2106 54832 75960 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2107 54832 76020 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2108 54832 76080 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2109 54832 76140 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2110 54832 76200 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2111 54832 76260 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2112 54832 76320 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2113 54832 76380 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2114 54832 76440 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2115 54832 76500 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2116 54832 76560 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2117 54832 76620 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2118 54832 76680 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2119 54832 76740 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2120 54832 76800 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2121 54832 76860 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2122 54832 76920 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2123 54832 76980 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2124 54832 77040 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2125 54832 77100 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2126 54832 77160 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2127 54832 77220 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2128 54832 77280 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2129 54832 77340 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2130 54832 77400 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2131 54832 77460 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2132 54832 77520 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2133 54832 77580 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2134 54832 77640 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2135 54832 77700 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2136 54832 77760 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2137 54832 77820 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2138 54832 77880 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2139 54832 77940 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2140 54832 78000 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2141 54832 78060 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2142 54832 78120 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2143 54832 78180 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2144 54832 78240 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2145 54832 78300 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2146 54832 78360 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2147 54832 78420 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2148 54832 78480 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2149 54832 78540 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2150 54832 78600 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2151 54832 78660 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2152 54832 78720 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2153 54832 78780 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2154 54832 78840 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2155 54832 78900 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2156 54832 78960 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2157 54832 79020 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2158 54832 79080 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2159 54832 79140 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2200 54832 79200 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2201 54832 79260 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2202 54832 79320 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2203 54832 79380 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2204 54832 79440 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2205 54832 79500 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2206 54832 79560 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2207 54832 79620 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2208 54832 79680 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2209 54832 79740 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2210 54832 79800 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2211 54832 79860 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2212 54832 79920 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2213 54832 79980 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2214 54832 80040 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2215 54832 80100 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2216 54832 80160 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2217 54832 80220 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2218 54832 80280 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2219 54832 80340 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2220 54832 80400 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2221 54832 80460 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2222 54832 80520 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2223 54832 80580 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2224 54832 80640 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2225 54832 80700 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2226 54832 80760 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2227 54832 80820 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2228 54832 80880 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2229 54832 80940 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2230 54832 81000 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2231 54832 81060 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2232 54832 81120 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2233 54832 81180 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2234 54832 81240 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2235 54832 81300 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2236 54832 81360 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2237 54832 81420 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2238 54832 81480 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2239 54832 81540 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2240 54832 81600 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2241 54832 81660 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2242 54832 81720 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2243 54832 81780 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2244 54832 81840 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2245 54832 81900 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2246 54832 81960 0 2.0 429.1 1.40e+05 +2009 01 01 2247 54832 82020 0 1.9 423.7 1.45e+05 +2009 01 01 2248 54832 82080 0 2.3 428.5 1.37e+05 +2009 01 01 2249 54832 82140 0 2.3 428.5 1.37e+05 +2009 01 01 2250 54832 82200 1 2.1 427.3 1.34e+05 +2009 01 01 2251 54832 82260 0 1.8 436.9 1.49e+05 +2009 01 01 2252 54832 82320 0 1.9 428.6 1.29e+05 +2009 01 01 2253 54832 82380 1 2.3 427.1 1.33e+05 +2009 01 01 2254 54832 82440 0 2.1 429.2 1.61e+05 +2009 01 01 2255 54832 82500 1 2.2 434.8 1.24e+05 +2009 01 01 2256 54832 82560 1 2.1 437.3 1.61e+05 +2009 01 01 2257 54832 82620 0 1.9 439.0 1.25e+05 +2009 01 01 2258 54832 82680 0 1.8 440.2 1.16e+05 +2009 01 01 2259 54832 82740 1 1.8 447.9 1.40e+05 +2009 01 01 2300 54832 82800 1 2.3 442.7 1.21e+05 +2009 01 01 2301 54832 82860 1 2.0 442.7 1.30e+05 +2009 01 01 2302 54832 82920 0 2.4 442.7 1.21e+05 +2009 01 01 2303 54832 82980 1 1.6 436.4 1.76e+05 +2009 01 01 2304 54832 83040 0 1.8 425.2 1.72e+05 +2009 01 01 2305 54832 83100 0 1.8 425.2 1.72e+05 +2009 01 01 2306 54832 83160 1 1.9 425.8 1.72e+05 +2009 01 01 2307 54832 83220 0 1.7 425.8 1.73e+05 +2009 01 01 2308 54832 83280 0 1.9 429.9 1.45e+05 +2009 01 01 2309 54832 83340 1 1.8 431.4 1.72e+05 +2009 01 01 2310 54832 83400 1 1.8 434.1 1.60e+05 +2009 01 01 2311 54832 83460 0 2.5 438.4 1.05e+05 +2009 01 01 2312 54832 83520 0 2.2 435.2 1.16e+05 +2009 01 01 2313 54832 83580 1 2.3 434.5 1.33e+05 +2009 01 01 2314 54832 83640 1 1.8 440.1 1.47e+05 +2009 01 01 2315 54832 83700 0 1.7 433.9 1.23e+05 +2009 01 01 2316 54832 83760 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2317 54832 83820 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2318 54832 83880 0 2.5 433.6 1.09e+05 +2009 01 01 2319 54832 83940 0 2.0 437.0 1.31e+05 +2009 01 01 2320 54832 84000 0 1.8 432.3 1.18e+05 +2009 01 01 2321 54832 84060 0 1.8 432.3 1.18e+05 +2009 01 01 2322 54832 84120 0 2.0 430.9 1.08e+05 +2009 01 01 2323 54832 84180 0 1.9 430.5 1.18e+05 +2009 01 01 2324 54832 84240 0 2.2 429.2 1.10e+05 +2009 01 01 2325 54832 84300 0 1.9 432.6 1.17e+05 +2009 01 01 2326 54832 84360 1 2.0 430.3 1.30e+05 +2009 01 01 2327 54832 84420 0 2.0 426.9 1.24e+05 +2009 01 01 2328 54832 84480 0 2.2 430.2 1.04e+05 +2009 01 01 2329 54832 84540 0 2.4 432.5 1.23e+05 +2009 01 01 2330 54832 84600 1 2.0 435.2 1.33e+05 +2009 01 01 2331 54832 84660 0 2.1 432.7 1.33e+05 +2009 01 01 2332 54832 84720 0 2.2 427.8 9.59e+04 +2009 01 01 2333 54832 84780 1 2.0 430.9 1.14e+05 +2009 01 01 2334 54832 84840 0 1.8 431.2 1.26e+05 +2009 01 01 2335 54832 84900 0 2.1 437.0 1.29e+05 +2009 01 01 2336 54832 84960 1 2.2 433.4 1.15e+05 +2009 01 01 2337 54832 85020 1 2.2 433.4 1.15e+05 +2009 01 01 2338 54832 85080 0 2.3 429.4 9.94e+04 +2009 01 01 2339 54832 85140 0 1.4 439.8 1.37e+05 +2009 01 01 2340 54832 85200 1 1.8 437.8 1.27e+05 +2009 01 01 2341 54832 85260 0 1.6 434.2 1.12e+05 +2009 01 01 2342 54832 85320 1 1.8 436.4 1.31e+05 +2009 01 01 2343 54832 85380 0 1.3 433.8 1.63e+05 +2009 01 01 2344 54832 85440 1 1.6 432.1 1.23e+05 +2009 01 01 2345 54832 85500 0 1.7 437.0 1.25e+05 +2009 01 01 2346 54832 85560 0 1.7 437.0 1.43e+05 +2009 01 01 2347 54832 85620 0 1.2 441.6 1.87e+05 +2009 01 01 2348 54832 85680 1 1.4 437.5 1.29e+05 +2009 01 01 2349 54832 85740 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2350 54832 85800 3 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2351 54832 85860 1 1.5 444.6 1.81e+05 +2009 01 01 2352 54832 85920 0 1.5 441.2 1.74e+05 +2009 01 01 2353 54832 85980 0 1.5 441.2 1.74e+05 +2009 01 01 2354 54832 86040 1 1.8 439.1 1.57e+05 +2009 01 01 2355 54832 86100 1 2.1 432.8 1.35e+05 +2009 01 01 2356 54832 86160 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2357 54832 86220 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2358 54832 86280 1 -9999.9 -9999.9 -1.00e+05 +2009 01 01 2359 54832 86340 0 1.8 423.3 1.62e+05 diff --git a/pysatSpaceWeather/tests/test_data/2009_DSD.txt b/pysatSpaceWeather/tests/test_data/2009_DSD.txt new file mode 100644 index 00000000..aed45180 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/2009_DSD.txt @@ -0,0 +1,378 @@ +:Product: Daily Solar Data 2009_DSD.txt +:Issued: 2100 UT 07 Jan 2010 +# +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comments and suggestions to SWPC.Webmaster@noaa.gov +# +# 2009 Daily Solar Data +# +# Sunspot Stanford GOES14 +# Radio SESC Area Solar X-Ray ------ Flares ------ +# Flux Sunspot 10E-6 New Mean Bkgd X-Ray Optical +# Date 10.7cm Number Hemis. Regions Field Flux C M X S 1 2 3 +#--------------------------------------------------------------------------- +2009 01 01 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 02 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 03 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 04 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 05 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 06 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 07 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 08 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 09 70 14 20 1 -999 A0.0 0 0 0 0 0 0 0 +2009 01 10 71 17 30 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 11 70 20 50 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 12 69 12 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 13 71 11 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 14 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 15 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 16 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 17 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 18 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 19 71 13 10 1 -999 A0.0 0 0 0 0 0 0 0 +2009 01 20 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 21 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 22 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 23 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 24 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 25 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 26 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 27 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 28 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 29 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 30 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 01 31 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 01 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 02 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 03 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 04 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 05 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 06 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 07 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 08 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 09 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 10 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 11 70 11 10 1 -999 A0.0 0 0 0 0 0 0 0 +2009 02 12 70 11 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 13 70 11 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 14 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 15 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 16 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 17 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 18 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 19 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 20 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 21 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 22 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 23 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 24 71 12 20 1 -999 A0.0 0 0 0 0 0 0 0 +2009 02 25 71 14 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 26 70 12 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 27 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 02 28 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 01 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 02 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 03 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 04 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 05 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 06 69 12 20 1 -999 A0.0 0 0 0 0 0 0 0 +2009 03 07 69 12 20 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 08 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 09 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 10 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 11 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 12 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 13 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 14 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 15 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 16 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 17 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 18 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 19 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 20 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 21 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 22 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 23 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 24 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 25 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 26 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 27 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 28 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 29 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 30 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 03 31 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 01 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 02 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 03 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 04 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 05 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 06 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 07 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 08 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 09 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 10 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 11 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 12 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 13 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 14 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 15 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 16 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 17 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 18 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 19 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 20 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 21 71 11 10 1 -999 A0.0 0 0 0 0 0 0 0 +2009 04 22 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 23 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 24 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 25 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 26 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 27 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 28 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 04 29 70 15 20 1 -999 A0.0 0 0 0 0 0 0 0 +2009 04 30 69 12 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 01 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 02 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 03 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 04 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 05 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 06 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 07 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 08 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 09 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 10 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 11 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 12 74 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 13 74 12 10 1 -999 A0.0 0 0 0 0 0 0 0 +2009 05 14 74 18 20 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 15 74 12 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 16 74 15 20 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 17 74 13 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 18 73 14 30 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 19 72 11 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 20 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 21 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 22 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 23 70 13 30 1 -999 A0.0 0 0 0 0 0 0 0 +2009 05 24 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 25 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 26 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 27 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 28 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 29 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 30 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 05 31 69 15 30 1 -999 A0.0 0 0 0 0 0 0 0 +2009 06 01 73 23 80 0 -999 A1.3 0 0 0 0 0 0 0 +2009 06 02 72 19 60 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 03 73 17 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 04 71 17 20 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 05 70 13 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 06 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 07 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 08 69 12 20 1 -999 A0.0 0 0 0 0 0 0 0 +2009 06 09 69 12 20 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 10 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 11 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 12 69 12 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 13 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 14 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 15 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 16 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 17 68 11 10 1 -999 A0.0 0 0 0 0 0 0 0 +2009 06 18 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 19 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 20 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 21 67 12 20 1 -999 A0.0 0 0 0 0 0 0 0 +2009 06 22 68 24 50 1 -999 A0.0 0 0 0 0 0 0 0 +2009 06 23 68 12 30 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 24 67 14 40 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 25 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 26 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 27 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 28 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 29 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 06 30 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 01 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 02 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 03 67 17 60 1 -999 A0.0 0 0 0 0 0 0 0 +2009 07 04 71 24 100 0 -999 A1.5 0 0 0 3 0 0 0 +2009 07 05 72 26 170 0 -999 A2.2 1 0 0 1 0 0 0 +2009 07 06 70 23 160 0 -999 A0.0 1 0 0 1 0 0 0 +2009 07 07 71 21 180 0 -999 A0.0 0 0 0 1 0 0 0 +2009 07 08 71 18 190 0 -999 A1.0 0 0 0 0 0 0 0 +2009 07 09 69 15 230 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 10 68 13 60 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 11 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 12 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 13 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 14 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 15 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 16 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 17 66 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 18 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 19 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 20 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 21 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 22 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 23 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 24 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 25 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 26 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 27 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 28 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 29 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 30 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 07 31 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 01 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 02 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 03 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 04 66 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 05 66 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 06 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 07 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 08 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 09 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 10 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 11 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 12 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 13 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 14 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 15 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 16 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 17 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 18 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 19 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 20 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 21 66 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 22 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 23 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 24 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 25 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 26 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 27 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 28 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 29 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 30 67 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 08 31 68 12 10 1 -999 A0.0 0 0 0 0 0 0 0 +2009 09 01 69 12 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 02 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 03 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 04 68 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 05 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 06 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 07 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 08 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 09 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 10 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 11 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 12 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 13 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 14 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 15 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 16 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 17 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 18 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 19 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 20 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 21 72 11 10 1 -999 A0.0 0 0 0 0 0 0 0 +2009 09 22 75 26 70 1 -999 A1.4 0 0 0 0 0 0 0 +2009 09 23 76 31 140 0 -999 A1.3 0 0 0 0 0 0 0 +2009 09 24 75 32 180 0 -999 A0.0 0 0 0 1 0 0 0 +2009 09 25 72 25 80 0 -999 A0.0 1 0 0 0 0 0 0 +2009 09 26 72 14 60 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 27 72 11 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 28 73 11 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 29 72 14 40 0 -999 A0.0 0 0 0 0 0 0 0 +2009 09 30 72 11 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 01 72 11 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 02 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 03 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 04 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 05 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 06 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 07 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 08 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 09 69 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 10 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 11 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 12 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 13 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 14 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 15 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 16 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 17 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 18 70 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 19 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 20 71 11 10 1 -999 A0.0 0 0 0 0 0 0 0 +2009 10 21 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 22 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 23 73 30 60 1 -999 A0.0 0 0 0 0 0 0 0 +2009 10 24 76 21 120 0 -999 A0.0 0 0 0 0 0 0 0 +2009 10 25 76 28 130 0 -999 A1.2 1 0 0 0 0 0 0 +2009 10 26 81 29 190 0 -999 A6.2 3 0 0 4 0 0 0 +2009 10 27 82 29 260 0 -999 A4.2 5 0 0 3 0 0 0 +2009 10 28 80 26 340 0 -999 A4.4 1 0 0 1 0 0 0 +2009 10 29 77 19 380 0 -999 A2.7 0 0 0 0 0 0 0 +2009 10 30 75 13 320 0 -999 A2.8 0 0 0 0 0 0 0 +2009 10 31 75 0 0 0 -999 A7.5 1 0 0 0 0 0 0 +2009 11 01 72 0 0 0 -999 A1.4 0 0 0 0 0 0 0 +2009 11 02 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 03 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 04 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 05 71 15 50 1 -999 A0.0 0 0 0 0 0 0 0 +2009 11 06 71 16 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 07 71 11 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 08 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 09 72 14 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 10 73 13 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 11 72 11 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 12 73 11 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 13 74 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 14 75 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 15 75 11 10 1 -999 A0.0 0 0 0 0 0 0 0 +2009 11 16 76 12 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 17 77 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 18 76 29 20 2 -999 A0.0 0 0 0 0 0 0 0 +2009 11 19 77 30 20 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 20 76 31 20 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 21 76 14 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 22 76 13 10 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 23 76 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 24 75 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 25 74 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 26 75 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 27 74 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 28 73 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 29 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 11 30 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 12 01 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 12 02 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 12 03 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 12 04 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 12 05 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 12 06 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 12 07 71 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 12 08 72 0 0 0 -999 A0.0 0 0 0 0 0 0 0 +2009 12 09 73 13 10 1 -999 A0.0 0 0 0 0 0 0 0 +2009 12 10 74 13 10 0 -999 A0.0 1 0 0 0 0 0 0 +2009 12 11 72 13 20 0 -999 A0.0 0 0 0 0 0 0 0 +2009 12 12 75 12 20 0 -999 A0.0 0 0 0 0 0 0 0 +2009 12 13 76 14 20 0 -999 A1.2 0 0 0 0 0 0 0 +2009 12 14 79 28 30 1 -999 A2.6 0 0 0 1 0 0 0 +2009 12 15 82 38 130 0 -999 A5.0 0 0 0 0 0 0 0 +2009 12 16 83 30 140 0 -999 B1.2 3 0 0 3 0 0 0 +2009 12 17 87 24 210 0 -999 B1.4 0 0 0 1 0 0 0 +2009 12 18 84 20 310 0 -999 A8.3 1 0 0 0 0 0 0 +2009 12 19 82 43 240 2 -999 A7.1 1 0 0 2 0 0 0 +2009 12 20 84 42 330 1 -999 A9.7 0 0 0 0 0 0 0 +2009 12 21 83 42 180 0 -999 A9.3 2 0 0 0 0 0 0 +2009 12 22 82 26 20 0 -999 B1.0 5 0 0 2 0 0 0 +2009 12 23 78 23 70 0 -999 A7.5 1 0 0 1 0 0 0 +2009 12 24 77 11 10 0 -999 A4.0 0 0 0 0 0 0 0 +2009 12 25 76 0 0 0 -999 A2.9 0 0 0 1 0 0 0 +2009 12 26 76 13 10 1 -999 A4.1 0 0 0 0 0 0 0 +2009 12 27 77 17 100 0 -999 A2.0 0 0 0 0 0 0 0 +2009 12 28 76 17 90 0 -999 A1.4 0 0 0 0 0 0 0 +2009 12 29 75 17 80 0 -999 A1.2 0 0 0 0 0 0 0 +2009 12 30 77 15 50 0 -999 A1.4 0 0 0 0 0 0 0 +2009 12 31 80 16 120 0 -999 A8.5 0 0 0 0 0 0 0 diff --git a/pysatSpaceWeather/tests/test_data/3-day-geomag-forecast.txt b/pysatSpaceWeather/tests/test_data/3-day-geomag-forecast.txt new file mode 100644 index 00000000..0f4e8b82 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/3-day-geomag-forecast.txt @@ -0,0 +1,25 @@ +:Product: Geomagnetic Forecast +:Issued: 2023 Oct 31 2205 UTC +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# +NOAA Ap Index Forecast +Observed Ap 30 Oct 012 +Estimated Ap 31 Oct 010 +Predicted Ap 01 Nov-03 Nov 008-005-005 + +NOAA Geomagnetic Activity Probabilities 01 Nov-03 Nov +Active 25/20/20 +Minor storm 05/01/01 +Moderate storm 01/01/01 +Strong-Extreme storm 01/01/01 + +NOAA Kp index forecast 01 Nov - 03 Nov + Nov 01 Nov 02 Nov 03 +00-03UT 2.33 1.67 1.67 +03-06UT 2.67 1.67 1.33 +06-09UT 2.33 1.33 1.33 +09-12UT 2.00 1.33 1.33 +12-15UT 2.00 1.33 1.33 +15-18UT 2.00 1.33 1.33 +18-21UT 2.00 1.33 1.67 +21-00UT 2.33 1.67 1.67 diff --git a/pysatSpaceWeather/tests/test_data/3-day-solar-geomag-predictions.txt b/pysatSpaceWeather/tests/test_data/3-day-solar-geomag-predictions.txt new file mode 100644 index 00000000..595eeb77 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/3-day-solar-geomag-predictions.txt @@ -0,0 +1,68 @@ +:Product: 3-day Space Weather Predictions daypre.txt +:Issued: 2023 Oct 31 2200 UTC +# Prepared by the US Dept. of Commerce, NOAA, Space Weather Prediction Center +# Product description and SWPC contact on the Web +# http://www.swpc.noaa.gov/wwire.html +# +# 3-day Space Weather Predictions +# +:Prediction_dates: 2023 Nov 01 2023 Nov 02 2023 Nov 03 +:Geomagnetic_A_indices: +A_Fredericksburg 8 6 6 +A_Planetary 8 5 5 +# +# Predicted 3-hour Middle latitude k-indices +:Pred_Mid_k: +Mid/00-03UT 2 2 2 +Mid/03-06UT 3 2 1 +Mid/06-09UT 2 2 2 +Mid/09-12UT 2 1 1 +Mid/12-15UT 2 2 2 +Mid/15-18UT 2 1 1 +Mid/18-21UT 2 1 2 +Mid/21-00UT 2 2 2 +# +# Predicted 3-hour High latitude k-indices +:Pred_High_k: +High/00-03UT 2 1 1 +High/03-06UT 2 1 1 +High/06-09UT 3 1 1 +High/09-12UT 3 2 2 +High/12-15UT 3 2 2 +High/15-18UT 2 1 1 +High/18-21UT 2 1 1 +High/21-00UT 1 1 1 +# +# Probability of Geomagnetic conditions at Middle Latitude +:Prob_Mid: +Mid/Active 15 10 10 +Mid/Minor_Storm 5 5 5 +Mid/Major-Severe_Storm 1 1 1 +# +# Probability of Geomagnetic conditions at High Latitudes +:Prob_High: +High/Active 15 15 15 +High/Minor_Storm 20 20 20 +High/Major-Severe_Storm 20 15 15 +# +# Polar Cap Absorption Forecast +:Polar_cap: + green +# +# Solar +:10cm_flux: + 148 148 150 +# +:Whole_Disk_Flare_Prob: +Class_M 25 25 25 +Class_X 5 5 5 +Proton 1 1 1 +# +# Region Flare Probabilities for 2023 Nov 01 +# Region Class C M X P +:Reg_Prob: 2023 Oct 31 + 3472 15 1 1 1 + 3473 20 5 1 1 + 3474 50 15 5 1 + 3476 10 1 1 1 + 3477 15 5 1 1 diff --git a/pysatSpaceWeather/tests/test_data/45-day-ap-forecast.txt b/pysatSpaceWeather/tests/test_data/45-day-ap-forecast.txt new file mode 100644 index 00000000..9bfdedf7 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/45-day-ap-forecast.txt @@ -0,0 +1,32 @@ +:Product: 45 Day AP Forecast 45DF.txt +:Issued: 2023 Oct 31 2113 UTC +# Prepared by the U.S. Air Force. +# Retransmitted by the Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comments and suggestions to SWPC.Webmaster@noaa.gov +# +# +# 45-Day AP and F10.7cm Flux Forecast +#------------------------------------------------------------- +45-DAY AP FORECAST +01Nov23 008 02Nov23 005 03Nov23 005 04Nov23 005 05Nov23 005 +06Nov23 005 07Nov23 014 08Nov23 005 09Nov23 012 10Nov23 008 +11Nov23 005 12Nov23 005 13Nov23 005 14Nov23 008 15Nov23 010 +16Nov23 005 17Nov23 005 18Nov23 005 19Nov23 005 20Nov23 005 +21Nov23 005 22Nov23 015 23Nov23 010 24Nov23 015 25Nov23 015 +26Nov23 020 27Nov23 015 28Nov23 008 29Nov23 005 30Nov23 005 +01Dec23 005 02Dec23 005 03Dec23 005 04Dec23 005 05Dec23 005 +06Dec23 012 07Dec23 008 08Dec23 005 09Dec23 005 10Dec23 005 +11Dec23 008 12Dec23 010 13Dec23 008 14Dec23 005 15Dec23 005 +45-DAY F10.7 CM FLUX FORECAST +01Nov23 148 02Nov23 148 03Nov23 150 04Nov23 150 05Nov23 148 +06Nov23 146 07Nov23 144 08Nov23 136 09Nov23 136 10Nov23 138 +11Nov23 136 12Nov23 134 13Nov23 130 14Nov23 130 15Nov23 130 +16Nov23 125 17Nov23 123 18Nov23 120 19Nov23 125 20Nov23 125 +21Nov23 125 22Nov23 125 23Nov23 130 24Nov23 130 25Nov23 130 +26Nov23 130 27Nov23 132 28Nov23 134 29Nov23 134 30Nov23 136 +01Dec23 136 02Dec23 136 03Dec23 140 04Dec23 138 05Dec23 136 +06Dec23 136 07Dec23 138 08Dec23 136 09Dec23 134 10Dec23 130 +11Dec23 130 12Dec23 130 13Dec23 125 14Dec23 123 15Dec23 120 +FORECASTER: DY / GATES +99999 +NNNN diff --git a/pysatSpaceWeather/tests/test_data/Fadj_2009-01.txt b/pysatSpaceWeather/tests/test_data/Fadj_2009-01.txt new file mode 100644 index 00000000..4b098c92 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/Fadj_2009-01.txt @@ -0,0 +1 @@ +{"meta":{"source":"GFZ Potsdam","license":"CC BY 4.0"},"datetime":["2009-01-01T00:00:00Z","2009-01-02T00:00:00Z","2009-01-03T00:00:00Z","2009-01-04T00:00:00Z","2009-01-05T00:00:00Z","2009-01-06T00:00:00Z","2009-01-07T00:00:00Z","2009-01-08T00:00:00Z","2009-01-09T00:00:00Z","2009-01-10T00:00:00Z","2009-01-11T00:00:00Z","2009-01-12T00:00:00Z","2009-01-13T00:00:00Z","2009-01-14T00:00:00Z","2009-01-15T00:00:00Z","2009-01-16T00:00:00Z","2009-01-17T00:00:00Z","2009-01-18T00:00:00Z","2009-01-19T00:00:00Z","2009-01-20T00:00:00Z","2009-01-21T00:00:00Z","2009-01-22T00:00:00Z","2009-01-23T00:00:00Z","2009-01-24T00:00:00Z","2009-01-25T00:00:00Z","2009-01-26T00:00:00Z","2009-01-27T00:00:00Z","2009-01-28T00:00:00Z","2009-01-29T00:00:00Z","2009-01-30T00:00:00Z","2009-01-31T00:00:00Z","2009-02-01T00:00:00Z"],"Fadj":[66.6,67.6,67.2,66.6,66.9,66.5,66.7,66.5,67.4,68.5,67.7,67.0,68.2,68.9,68.8,68.5,69.6,68.8,68.6,68.1,67.2,66.9,67.8,66.6,67.7,67.8,67.6,67.4,67.3,67.1,67.4,67.5]} diff --git a/pysatSpaceWeather/tests/test_data/Fobs_2009-01.txt b/pysatSpaceWeather/tests/test_data/Fobs_2009-01.txt new file mode 100644 index 00000000..696eff08 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/Fobs_2009-01.txt @@ -0,0 +1 @@ +{"meta":{"source":"GFZ Potsdam","license":"CC BY 4.0"},"datetime":["2009-01-01T00:00:00Z","2009-01-02T00:00:00Z","2009-01-03T00:00:00Z","2009-01-04T00:00:00Z","2009-01-05T00:00:00Z","2009-01-06T00:00:00Z","2009-01-07T00:00:00Z","2009-01-08T00:00:00Z","2009-01-09T00:00:00Z","2009-01-10T00:00:00Z","2009-01-11T00:00:00Z","2009-01-12T00:00:00Z","2009-01-13T00:00:00Z","2009-01-14T00:00:00Z","2009-01-15T00:00:00Z","2009-01-16T00:00:00Z","2009-01-17T00:00:00Z","2009-01-18T00:00:00Z","2009-01-19T00:00:00Z","2009-01-20T00:00:00Z","2009-01-21T00:00:00Z","2009-01-22T00:00:00Z","2009-01-23T00:00:00Z","2009-01-24T00:00:00Z","2009-01-25T00:00:00Z","2009-01-26T00:00:00Z","2009-01-27T00:00:00Z","2009-01-28T00:00:00Z","2009-01-29T00:00:00Z","2009-01-30T00:00:00Z","2009-01-31T00:00:00Z","2009-02-01T00:00:00Z"],"Fobs":[68.9,69.9,69.5,68.8,69.2,68.7,69.0,68.7,69.7,70.9,70.0,69.3,70.5,71.2,71.1,70.8,71.9,71.1,70.8,70.4,69.4,69.0,70.0,68.8,69.8,69.9,69.7,69.5,69.3,69.1,69.4,69.5]} diff --git a/pysatSpaceWeather/tests/test_data/Hp30_2009-01.txt b/pysatSpaceWeather/tests/test_data/Hp30_2009-01.txt new file mode 100644 index 00000000..5c1ad390 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/Hp30_2009-01.txt @@ -0,0 +1 @@ +{"meta":{"source":"GFZ Potsdam","license":"CC BY 4.0"},"datetime":["2009-01-01T00:00:00Z","2009-01-01T00:30:00Z","2009-01-01T01:00:00Z","2009-01-01T01:30:00Z","2009-01-01T02:00:00Z","2009-01-01T02:30:00Z","2009-01-01T03:00:00Z","2009-01-01T03:30:00Z","2009-01-01T04:00:00Z","2009-01-01T04:30:00Z","2009-01-01T05:00:00Z","2009-01-01T05:30:00Z","2009-01-01T06:00:00Z","2009-01-01T06:30:00Z","2009-01-01T07:00:00Z","2009-01-01T07:30:00Z","2009-01-01T08:00:00Z","2009-01-01T08:30:00Z","2009-01-01T09:00:00Z","2009-01-01T09:30:00Z","2009-01-01T10:00:00Z","2009-01-01T10:30:00Z","2009-01-01T11:00:00Z","2009-01-01T11:30:00Z","2009-01-01T12:00:00Z","2009-01-01T12:30:00Z","2009-01-01T13:00:00Z","2009-01-01T13:30:00Z","2009-01-01T14:00:00Z","2009-01-01T14:30:00Z","2009-01-01T15:00:00Z","2009-01-01T15:30:00Z","2009-01-01T16:00:00Z","2009-01-01T16:30:00Z","2009-01-01T17:00:00Z","2009-01-01T17:30:00Z","2009-01-01T18:00:00Z","2009-01-01T18:30:00Z","2009-01-01T19:00:00Z","2009-01-01T19:30:00Z","2009-01-01T20:00:00Z","2009-01-01T20:30:00Z","2009-01-01T21:00:00Z","2009-01-01T21:30:00Z","2009-01-01T22:00:00Z","2009-01-01T22:30:00Z","2009-01-01T23:00:00Z","2009-01-01T23:30:00Z","2009-01-02T00:00:00Z","2009-01-02T00:30:00Z","2009-01-02T01:00:00Z","2009-01-02T01:30:00Z","2009-01-02T02:00:00Z","2009-01-02T02:30:00Z","2009-01-02T03:00:00Z","2009-01-02T03:30:00Z","2009-01-02T04:00:00Z","2009-01-02T04:30:00Z","2009-01-02T05:00:00Z","2009-01-02T05:30:00Z","2009-01-02T06:00:00Z","2009-01-02T06:30:00Z","2009-01-02T07:00:00Z","2009-01-02T07:30:00Z","2009-01-02T08:00:00Z","2009-01-02T08:30:00Z","2009-01-02T09:00:00Z","2009-01-02T09:30:00Z","2009-01-02T10:00:00Z","2009-01-02T10:30:00Z","2009-01-02T11:00:00Z","2009-01-02T11:30:00Z","2009-01-02T12:00:00Z","2009-01-02T12:30:00Z","2009-01-02T13:00:00Z","2009-01-02T13:30:00Z","2009-01-02T14:00:00Z","2009-01-02T14:30:00Z","2009-01-02T15:00:00Z","2009-01-02T15:30:00Z","2009-01-02T16:00:00Z","2009-01-02T16:30:00Z","2009-01-02T17:00:00Z","2009-01-02T17:30:00Z","2009-01-02T18:00:00Z","2009-01-02T18:30:00Z","2009-01-02T19:00:00Z","2009-01-02T19:30:00Z","2009-01-02T20:00:00Z","2009-01-02T20:30:00Z","2009-01-02T21:00:00Z","2009-01-02T21:30:00Z","2009-01-02T22:00:00Z","2009-01-02T22:30:00Z","2009-01-02T23:00:00Z","2009-01-02T23:30:00Z","2009-01-03T00:00:00Z","2009-01-03T00:30:00Z","2009-01-03T01:00:00Z","2009-01-03T01:30:00Z","2009-01-03T02:00:00Z","2009-01-03T02:30:00Z","2009-01-03T03:00:00Z","2009-01-03T03:30:00Z","2009-01-03T04:00:00Z","2009-01-03T04:30:00Z","2009-01-03T05:00:00Z","2009-01-03T05:30:00Z","2009-01-03T06:00:00Z","2009-01-03T06:30:00Z","2009-01-03T07:00:00Z","2009-01-03T07:30:00Z","2009-01-03T08:00:00Z","2009-01-03T08:30:00Z","2009-01-03T09:00:00Z","2009-01-03T09:30:00Z","2009-01-03T10:00:00Z","2009-01-03T10:30:00Z","2009-01-03T11:00:00Z","2009-01-03T11:30:00Z","2009-01-03T12:00:00Z","2009-01-03T12:30:00Z","2009-01-03T13:00:00Z","2009-01-03T13:30:00Z","2009-01-03T14:00:00Z","2009-01-03T14:30:00Z","2009-01-03T15:00:00Z","2009-01-03T15:30:00Z","2009-01-03T16:00:00Z","2009-01-03T16:30:00Z","2009-01-03T17:00:00Z","2009-01-03T17:30:00Z","2009-01-03T18:00:00Z","2009-01-03T18:30:00Z","2009-01-03T19:00:00Z","2009-01-03T19:30:00Z","2009-01-03T20:00:00Z","2009-01-03T20:30:00Z","2009-01-03T21:00:00Z","2009-01-03T21:30:00Z","2009-01-03T22:00:00Z","2009-01-03T22:30:00Z","2009-01-03T23:00:00Z","2009-01-03T23:30:00Z","2009-01-04T00:00:00Z","2009-01-04T00:30:00Z","2009-01-04T01:00:00Z","2009-01-04T01:30:00Z","2009-01-04T02:00:00Z","2009-01-04T02:30:00Z","2009-01-04T03:00:00Z","2009-01-04T03:30:00Z","2009-01-04T04:00:00Z","2009-01-04T04:30:00Z","2009-01-04T05:00:00Z","2009-01-04T05:30:00Z","2009-01-04T06:00:00Z","2009-01-04T06:30:00Z","2009-01-04T07:00:00Z","2009-01-04T07:30:00Z","2009-01-04T08:00:00Z","2009-01-04T08:30:00Z","2009-01-04T09:00:00Z","2009-01-04T09:30:00Z","2009-01-04T10:00:00Z","2009-01-04T10:30:00Z","2009-01-04T11:00:00Z","2009-01-04T11:30:00Z","2009-01-04T12:00:00Z","2009-01-04T12:30:00Z","2009-01-04T13:00:00Z","2009-01-04T13:30:00Z","2009-01-04T14:00:00Z","2009-01-04T14:30:00Z","2009-01-04T15:00:00Z","2009-01-04T15:30:00Z","2009-01-04T16:00:00Z","2009-01-04T16:30:00Z","2009-01-04T17:00:00Z","2009-01-04T17:30:00Z","2009-01-04T18:00:00Z","2009-01-04T18:30:00Z","2009-01-04T19:00:00Z","2009-01-04T19:30:00Z","2009-01-04T20:00:00Z","2009-01-04T20:30:00Z","2009-01-04T21:00:00Z","2009-01-04T21:30:00Z","2009-01-04T22:00:00Z","2009-01-04T22:30:00Z","2009-01-04T23:00:00Z","2009-01-04T23:30:00Z","2009-01-05T00:00:00Z","2009-01-05T00:30:00Z","2009-01-05T01:00:00Z","2009-01-05T01:30:00Z","2009-01-05T02:00:00Z","2009-01-05T02:30:00Z","2009-01-05T03:00:00Z","2009-01-05T03:30:00Z","2009-01-05T04:00:00Z","2009-01-05T04:30:00Z","2009-01-05T05:00:00Z","2009-01-05T05:30:00Z","2009-01-05T06:00:00Z","2009-01-05T06:30:00Z","2009-01-05T07:00:00Z","2009-01-05T07:30:00Z","2009-01-05T08:00:00Z","2009-01-05T08:30:00Z","2009-01-05T09:00:00Z","2009-01-05T09:30:00Z","2009-01-05T10:00:00Z","2009-01-05T10:30:00Z","2009-01-05T11:00:00Z","2009-01-05T11:30:00Z","2009-01-05T12:00:00Z","2009-01-05T12:30:00Z","2009-01-05T13:00:00Z","2009-01-05T13:30:00Z","2009-01-05T14:00:00Z","2009-01-05T14:30:00Z","2009-01-05T15:00:00Z","2009-01-05T15:30:00Z","2009-01-05T16:00:00Z","2009-01-05T16:30:00Z","2009-01-05T17:00:00Z","2009-01-05T17:30:00Z","2009-01-05T18:00:00Z","2009-01-05T18:30:00Z","2009-01-05T19:00:00Z","2009-01-05T19:30:00Z","2009-01-05T20:00:00Z","2009-01-05T20:30:00Z","2009-01-05T21:00:00Z","2009-01-05T21:30:00Z","2009-01-05T22:00:00Z","2009-01-05T22:30:00Z","2009-01-05T23:00:00Z","2009-01-05T23:30:00Z","2009-01-06T00:00:00Z","2009-01-06T00:30:00Z","2009-01-06T01:00:00Z","2009-01-06T01:30:00Z","2009-01-06T02:00:00Z","2009-01-06T02:30:00Z","2009-01-06T03:00:00Z","2009-01-06T03:30:00Z","2009-01-06T04:00:00Z","2009-01-06T04:30:00Z","2009-01-06T05:00:00Z","2009-01-06T05:30:00Z","2009-01-06T06:00:00Z","2009-01-06T06:30:00Z","2009-01-06T07:00:00Z","2009-01-06T07:30:00Z","2009-01-06T08:00:00Z","2009-01-06T08:30:00Z","2009-01-06T09:00:00Z","2009-01-06T09:30:00Z","2009-01-06T10:00:00Z","2009-01-06T10:30:00Z","2009-01-06T11:00:00Z","2009-01-06T11:30:00Z","2009-01-06T12:00:00Z","2009-01-06T12:30:00Z","2009-01-06T13:00:00Z","2009-01-06T13:30:00Z","2009-01-06T14:00:00Z","2009-01-06T14:30:00Z","2009-01-06T15:00:00Z","2009-01-06T15:30:00Z","2009-01-06T16:00:00Z","2009-01-06T16:30:00Z","2009-01-06T17:00:00Z","2009-01-06T17:30:00Z","2009-01-06T18:00:00Z","2009-01-06T18:30:00Z","2009-01-06T19:00:00Z","2009-01-06T19:30:00Z","2009-01-06T20:00:00Z","2009-01-06T20:30:00Z","2009-01-06T21:00:00Z","2009-01-06T21:30:00Z","2009-01-06T22:00:00Z","2009-01-06T22:30:00Z","2009-01-06T23:00:00Z","2009-01-06T23:30:00Z","2009-01-07T00:00:00Z","2009-01-07T00:30:00Z","2009-01-07T01:00:00Z","2009-01-07T01:30:00Z","2009-01-07T02:00:00Z","2009-01-07T02:30:00Z","2009-01-07T03:00:00Z","2009-01-07T03:30:00Z","2009-01-07T04:00:00Z","2009-01-07T04:30:00Z","2009-01-07T05:00:00Z","2009-01-07T05:30:00Z","2009-01-07T06:00:00Z","2009-01-07T06:30:00Z","2009-01-07T07:00:00Z","2009-01-07T07:30:00Z","2009-01-07T08:00:00Z","2009-01-07T08:30:00Z","2009-01-07T09:00:00Z","2009-01-07T09:30:00Z","2009-01-07T10:00:00Z","2009-01-07T10:30:00Z","2009-01-07T11:00:00Z","2009-01-07T11:30:00Z","2009-01-07T12:00:00Z","2009-01-07T12:30:00Z","2009-01-07T13:00:00Z","2009-01-07T13:30:00Z","2009-01-07T14:00:00Z","2009-01-07T14:30:00Z","2009-01-07T15:00:00Z","2009-01-07T15:30:00Z","2009-01-07T16:00:00Z","2009-01-07T16:30:00Z","2009-01-07T17:00:00Z","2009-01-07T17:30:00Z","2009-01-07T18:00:00Z","2009-01-07T18:30:00Z","2009-01-07T19:00:00Z","2009-01-07T19:30:00Z","2009-01-07T20:00:00Z","2009-01-07T20:30:00Z","2009-01-07T21:00:00Z","2009-01-07T21:30:00Z","2009-01-07T22:00:00Z","2009-01-07T22:30:00Z","2009-01-07T23:00:00Z","2009-01-07T23:30:00Z","2009-01-08T00:00:00Z","2009-01-08T00:30:00Z","2009-01-08T01:00:00Z","2009-01-08T01:30:00Z","2009-01-08T02:00:00Z","2009-01-08T02:30:00Z","2009-01-08T03:00:00Z","2009-01-08T03:30:00Z","2009-01-08T04:00:00Z","2009-01-08T04:30:00Z","2009-01-08T05:00:00Z","2009-01-08T05:30:00Z","2009-01-08T06:00:00Z","2009-01-08T06:30:00Z","2009-01-08T07:00:00Z","2009-01-08T07:30:00Z","2009-01-08T08:00:00Z","2009-01-08T08:30:00Z","2009-01-08T09:00:00Z","2009-01-08T09:30:00Z","2009-01-08T10:00:00Z","2009-01-08T10:30:00Z","2009-01-08T11:00:00Z","2009-01-08T11:30:00Z","2009-01-08T12:00:00Z","2009-01-08T12:30:00Z","2009-01-08T13:00:00Z","2009-01-08T13:30:00Z","2009-01-08T14:00:00Z","2009-01-08T14:30:00Z","2009-01-08T15:00:00Z","2009-01-08T15:30:00Z","2009-01-08T16:00:00Z","2009-01-08T16:30:00Z","2009-01-08T17:00:00Z","2009-01-08T17:30:00Z","2009-01-08T18:00:00Z","2009-01-08T18:30:00Z","2009-01-08T19:00:00Z","2009-01-08T19:30:00Z","2009-01-08T20:00:00Z","2009-01-08T20:30:00Z","2009-01-08T21:00:00Z","2009-01-08T21:30:00Z","2009-01-08T22:00:00Z","2009-01-08T22:30:00Z","2009-01-08T23:00:00Z","2009-01-08T23:30:00Z","2009-01-09T00:00:00Z","2009-01-09T00:30:00Z","2009-01-09T01:00:00Z","2009-01-09T01:30:00Z","2009-01-09T02:00:00Z","2009-01-09T02:30:00Z","2009-01-09T03:00:00Z","2009-01-09T03:30:00Z","2009-01-09T04:00:00Z","2009-01-09T04:30:00Z","2009-01-09T05:00:00Z","2009-01-09T05:30:00Z","2009-01-09T06:00:00Z","2009-01-09T06:30:00Z","2009-01-09T07:00:00Z","2009-01-09T07:30:00Z","2009-01-09T08:00:00Z","2009-01-09T08:30:00Z","2009-01-09T09:00:00Z","2009-01-09T09:30:00Z","2009-01-09T10:00:00Z","2009-01-09T10:30:00Z","2009-01-09T11:00:00Z","2009-01-09T11:30:00Z","2009-01-09T12:00:00Z","2009-01-09T12:30:00Z","2009-01-09T13:00:00Z","2009-01-09T13:30:00Z","2009-01-09T14:00:00Z","2009-01-09T14:30:00Z","2009-01-09T15:00:00Z","2009-01-09T15:30:00Z","2009-01-09T16:00:00Z","2009-01-09T16:30:00Z","2009-01-09T17:00:00Z","2009-01-09T17:30:00Z","2009-01-09T18:00:00Z","2009-01-09T18:30:00Z","2009-01-09T19:00:00Z","2009-01-09T19:30:00Z","2009-01-09T20:00:00Z","2009-01-09T20:30:00Z","2009-01-09T21:00:00Z","2009-01-09T21:30:00Z","2009-01-09T22:00:00Z","2009-01-09T22:30:00Z","2009-01-09T23:00:00Z","2009-01-09T23:30:00Z","2009-01-10T00:00:00Z","2009-01-10T00:30:00Z","2009-01-10T01:00:00Z","2009-01-10T01:30:00Z","2009-01-10T02:00:00Z","2009-01-10T02:30:00Z","2009-01-10T03:00:00Z","2009-01-10T03:30:00Z","2009-01-10T04:00:00Z","2009-01-10T04:30:00Z","2009-01-10T05:00:00Z","2009-01-10T05:30:00Z","2009-01-10T06:00:00Z","2009-01-10T06:30:00Z","2009-01-10T07:00:00Z","2009-01-10T07:30:00Z","2009-01-10T08:00:00Z","2009-01-10T08:30:00Z","2009-01-10T09:00:00Z","2009-01-10T09:30:00Z","2009-01-10T10:00:00Z","2009-01-10T10:30:00Z","2009-01-10T11:00:00Z","2009-01-10T11:30:00Z","2009-01-10T12:00:00Z","2009-01-10T12:30:00Z","2009-01-10T13:00:00Z","2009-01-10T13:30:00Z","2009-01-10T14:00:00Z","2009-01-10T14:30:00Z","2009-01-10T15:00:00Z","2009-01-10T15:30:00Z","2009-01-10T16:00:00Z","2009-01-10T16:30:00Z","2009-01-10T17:00:00Z","2009-01-10T17:30:00Z","2009-01-10T18:00:00Z","2009-01-10T18:30:00Z","2009-01-10T19:00:00Z","2009-01-10T19:30:00Z","2009-01-10T20:00:00Z","2009-01-10T20:30:00Z","2009-01-10T21:00:00Z","2009-01-10T21:30:00Z","2009-01-10T22:00:00Z","2009-01-10T22:30:00Z","2009-01-10T23:00:00Z","2009-01-10T23:30:00Z","2009-01-11T00:00:00Z","2009-01-11T00:30:00Z","2009-01-11T01:00:00Z","2009-01-11T01:30:00Z","2009-01-11T02:00:00Z","2009-01-11T02:30:00Z","2009-01-11T03:00:00Z","2009-01-11T03:30:00Z","2009-01-11T04:00:00Z","2009-01-11T04:30:00Z","2009-01-11T05:00:00Z","2009-01-11T05:30:00Z","2009-01-11T06:00:00Z","2009-01-11T06:30:00Z","2009-01-11T07:00:00Z","2009-01-11T07:30:00Z","2009-01-11T08:00:00Z","2009-01-11T08:30:00Z","2009-01-11T09:00:00Z","2009-01-11T09:30:00Z","2009-01-11T10:00:00Z","2009-01-11T10:30:00Z","2009-01-11T11:00:00Z","2009-01-11T11:30:00Z","2009-01-11T12:00:00Z","2009-01-11T12:30:00Z","2009-01-11T13:00:00Z","2009-01-11T13:30:00Z","2009-01-11T14:00:00Z","2009-01-11T14:30:00Z","2009-01-11T15:00:00Z","2009-01-11T15:30:00Z","2009-01-11T16:00:00Z","2009-01-11T16:30:00Z","2009-01-11T17:00:00Z","2009-01-11T17:30:00Z","2009-01-11T18:00:00Z","2009-01-11T18:30:00Z","2009-01-11T19:00:00Z","2009-01-11T19:30:00Z","2009-01-11T20:00:00Z","2009-01-11T20:30:00Z","2009-01-11T21:00:00Z","2009-01-11T21:30:00Z","2009-01-11T22:00:00Z","2009-01-11T22:30:00Z","2009-01-11T23:00:00Z","2009-01-11T23:30:00Z","2009-01-12T00:00:00Z","2009-01-12T00:30:00Z","2009-01-12T01:00:00Z","2009-01-12T01:30:00Z","2009-01-12T02:00:00Z","2009-01-12T02:30:00Z","2009-01-12T03:00:00Z","2009-01-12T03:30:00Z","2009-01-12T04:00:00Z","2009-01-12T04:30:00Z","2009-01-12T05:00:00Z","2009-01-12T05:30:00Z","2009-01-12T06:00:00Z","2009-01-12T06:30:00Z","2009-01-12T07:00:00Z","2009-01-12T07:30:00Z","2009-01-12T08:00:00Z","2009-01-12T08:30:00Z","2009-01-12T09:00:00Z","2009-01-12T09:30:00Z","2009-01-12T10:00:00Z","2009-01-12T10:30:00Z","2009-01-12T11:00:00Z","2009-01-12T11:30:00Z","2009-01-12T12:00:00Z","2009-01-12T12:30:00Z","2009-01-12T13:00:00Z","2009-01-12T13:30:00Z","2009-01-12T14:00:00Z","2009-01-12T14:30:00Z","2009-01-12T15:00:00Z","2009-01-12T15:30:00Z","2009-01-12T16:00:00Z","2009-01-12T16:30:00Z","2009-01-12T17:00:00Z","2009-01-12T17:30:00Z","2009-01-12T18:00:00Z","2009-01-12T18:30:00Z","2009-01-12T19:00:00Z","2009-01-12T19:30:00Z","2009-01-12T20:00:00Z","2009-01-12T20:30:00Z","2009-01-12T21:00:00Z","2009-01-12T21:30:00Z","2009-01-12T22:00:00Z","2009-01-12T22:30:00Z","2009-01-12T23:00:00Z","2009-01-12T23:30:00Z","2009-01-13T00:00:00Z","2009-01-13T00:30:00Z","2009-01-13T01:00:00Z","2009-01-13T01:30:00Z","2009-01-13T02:00:00Z","2009-01-13T02:30:00Z","2009-01-13T03:00:00Z","2009-01-13T03:30:00Z","2009-01-13T04:00:00Z","2009-01-13T04:30:00Z","2009-01-13T05:00:00Z","2009-01-13T05:30:00Z","2009-01-13T06:00:00Z","2009-01-13T06:30:00Z","2009-01-13T07:00:00Z","2009-01-13T07:30:00Z","2009-01-13T08:00:00Z","2009-01-13T08:30:00Z","2009-01-13T09:00:00Z","2009-01-13T09:30:00Z","2009-01-13T10:00:00Z","2009-01-13T10:30:00Z","2009-01-13T11:00:00Z","2009-01-13T11:30:00Z","2009-01-13T12:00:00Z","2009-01-13T12:30:00Z","2009-01-13T13:00:00Z","2009-01-13T13:30:00Z","2009-01-13T14:00:00Z","2009-01-13T14:30:00Z","2009-01-13T15:00:00Z","2009-01-13T15:30:00Z","2009-01-13T16:00:00Z","2009-01-13T16:30:00Z","2009-01-13T17:00:00Z","2009-01-13T17:30:00Z","2009-01-13T18:00:00Z","2009-01-13T18:30:00Z","2009-01-13T19:00:00Z","2009-01-13T19:30:00Z","2009-01-13T20:00:00Z","2009-01-13T20:30:00Z","2009-01-13T21:00:00Z","2009-01-13T21:30:00Z","2009-01-13T22:00:00Z","2009-01-13T22:30:00Z","2009-01-13T23:00:00Z","2009-01-13T23:30:00Z","2009-01-14T00:00:00Z","2009-01-14T00:30:00Z","2009-01-14T01:00:00Z","2009-01-14T01:30:00Z","2009-01-14T02:00:00Z","2009-01-14T02:30:00Z","2009-01-14T03:00:00Z","2009-01-14T03:30:00Z","2009-01-14T04:00:00Z","2009-01-14T04:30:00Z","2009-01-14T05:00:00Z","2009-01-14T05:30:00Z","2009-01-14T06:00:00Z","2009-01-14T06:30:00Z","2009-01-14T07:00:00Z","2009-01-14T07:30:00Z","2009-01-14T08:00:00Z","2009-01-14T08:30:00Z","2009-01-14T09:00:00Z","2009-01-14T09:30:00Z","2009-01-14T10:00:00Z","2009-01-14T10:30:00Z","2009-01-14T11:00:00Z","2009-01-14T11:30:00Z","2009-01-14T12:00:00Z","2009-01-14T12:30:00Z","2009-01-14T13:00:00Z","2009-01-14T13:30:00Z","2009-01-14T14:00:00Z","2009-01-14T14:30:00Z","2009-01-14T15:00:00Z","2009-01-14T15:30:00Z","2009-01-14T16:00:00Z","2009-01-14T16:30:00Z","2009-01-14T17:00:00Z","2009-01-14T17:30:00Z","2009-01-14T18:00:00Z","2009-01-14T18:30:00Z","2009-01-14T19:00:00Z","2009-01-14T19:30:00Z","2009-01-14T20:00:00Z","2009-01-14T20:30:00Z","2009-01-14T21:00:00Z","2009-01-14T21:30:00Z","2009-01-14T22:00:00Z","2009-01-14T22:30:00Z","2009-01-14T23:00:00Z","2009-01-14T23:30:00Z","2009-01-15T00:00:00Z","2009-01-15T00:30:00Z","2009-01-15T01:00:00Z","2009-01-15T01:30:00Z","2009-01-15T02:00:00Z","2009-01-15T02:30:00Z","2009-01-15T03:00:00Z","2009-01-15T03:30:00Z","2009-01-15T04:00:00Z","2009-01-15T04:30:00Z","2009-01-15T05:00:00Z","2009-01-15T05:30:00Z","2009-01-15T06:00:00Z","2009-01-15T06:30:00Z","2009-01-15T07:00:00Z","2009-01-15T07:30:00Z","2009-01-15T08:00:00Z","2009-01-15T08:30:00Z","2009-01-15T09:00:00Z","2009-01-15T09:30:00Z","2009-01-15T10:00:00Z","2009-01-15T10:30:00Z","2009-01-15T11:00:00Z","2009-01-15T11:30:00Z","2009-01-15T12:00:00Z","2009-01-15T12:30:00Z","2009-01-15T13:00:00Z","2009-01-15T13:30:00Z","2009-01-15T14:00:00Z","2009-01-15T14:30:00Z","2009-01-15T15:00:00Z","2009-01-15T15:30:00Z","2009-01-15T16:00:00Z","2009-01-15T16:30:00Z","2009-01-15T17:00:00Z","2009-01-15T17:30:00Z","2009-01-15T18:00:00Z","2009-01-15T18:30:00Z","2009-01-15T19:00:00Z","2009-01-15T19:30:00Z","2009-01-15T20:00:00Z","2009-01-15T20:30:00Z","2009-01-15T21:00:00Z","2009-01-15T21:30:00Z","2009-01-15T22:00:00Z","2009-01-15T22:30:00Z","2009-01-15T23:00:00Z","2009-01-15T23:30:00Z","2009-01-16T00:00:00Z","2009-01-16T00:30:00Z","2009-01-16T01:00:00Z","2009-01-16T01:30:00Z","2009-01-16T02:00:00Z","2009-01-16T02:30:00Z","2009-01-16T03:00:00Z","2009-01-16T03:30:00Z","2009-01-16T04:00:00Z","2009-01-16T04:30:00Z","2009-01-16T05:00:00Z","2009-01-16T05:30:00Z","2009-01-16T06:00:00Z","2009-01-16T06:30:00Z","2009-01-16T07:00:00Z","2009-01-16T07:30:00Z","2009-01-16T08:00:00Z","2009-01-16T08:30:00Z","2009-01-16T09:00:00Z","2009-01-16T09:30:00Z","2009-01-16T10:00:00Z","2009-01-16T10:30:00Z","2009-01-16T11:00:00Z","2009-01-16T11:30:00Z","2009-01-16T12:00:00Z","2009-01-16T12:30:00Z","2009-01-16T13:00:00Z","2009-01-16T13:30:00Z","2009-01-16T14:00:00Z","2009-01-16T14:30:00Z","2009-01-16T15:00:00Z","2009-01-16T15:30:00Z","2009-01-16T16:00:00Z","2009-01-16T16:30:00Z","2009-01-16T17:00:00Z","2009-01-16T17:30:00Z","2009-01-16T18:00:00Z","2009-01-16T18:30:00Z","2009-01-16T19:00:00Z","2009-01-16T19:30:00Z","2009-01-16T20:00:00Z","2009-01-16T20:30:00Z","2009-01-16T21:00:00Z","2009-01-16T21:30:00Z","2009-01-16T22:00:00Z","2009-01-16T22:30:00Z","2009-01-16T23:00:00Z","2009-01-16T23:30:00Z","2009-01-17T00:00:00Z","2009-01-17T00:30:00Z","2009-01-17T01:00:00Z","2009-01-17T01:30:00Z","2009-01-17T02:00:00Z","2009-01-17T02:30:00Z","2009-01-17T03:00:00Z","2009-01-17T03:30:00Z","2009-01-17T04:00:00Z","2009-01-17T04:30:00Z","2009-01-17T05:00:00Z","2009-01-17T05:30:00Z","2009-01-17T06:00:00Z","2009-01-17T06:30:00Z","2009-01-17T07:00:00Z","2009-01-17T07:30:00Z","2009-01-17T08:00:00Z","2009-01-17T08:30:00Z","2009-01-17T09:00:00Z","2009-01-17T09:30:00Z","2009-01-17T10:00:00Z","2009-01-17T10:30:00Z","2009-01-17T11:00:00Z","2009-01-17T11:30:00Z","2009-01-17T12:00:00Z","2009-01-17T12:30:00Z","2009-01-17T13:00:00Z","2009-01-17T13:30:00Z","2009-01-17T14:00:00Z","2009-01-17T14:30:00Z","2009-01-17T15:00:00Z","2009-01-17T15:30:00Z","2009-01-17T16:00:00Z","2009-01-17T16:30:00Z","2009-01-17T17:00:00Z","2009-01-17T17:30:00Z","2009-01-17T18:00:00Z","2009-01-17T18:30:00Z","2009-01-17T19:00:00Z","2009-01-17T19:30:00Z","2009-01-17T20:00:00Z","2009-01-17T20:30:00Z","2009-01-17T21:00:00Z","2009-01-17T21:30:00Z","2009-01-17T22:00:00Z","2009-01-17T22:30:00Z","2009-01-17T23:00:00Z","2009-01-17T23:30:00Z","2009-01-18T00:00:00Z","2009-01-18T00:30:00Z","2009-01-18T01:00:00Z","2009-01-18T01:30:00Z","2009-01-18T02:00:00Z","2009-01-18T02:30:00Z","2009-01-18T03:00:00Z","2009-01-18T03:30:00Z","2009-01-18T04:00:00Z","2009-01-18T04:30:00Z","2009-01-18T05:00:00Z","2009-01-18T05:30:00Z","2009-01-18T06:00:00Z","2009-01-18T06:30:00Z","2009-01-18T07:00:00Z","2009-01-18T07:30:00Z","2009-01-18T08:00:00Z","2009-01-18T08:30:00Z","2009-01-18T09:00:00Z","2009-01-18T09:30:00Z","2009-01-18T10:00:00Z","2009-01-18T10:30:00Z","2009-01-18T11:00:00Z","2009-01-18T11:30:00Z","2009-01-18T12:00:00Z","2009-01-18T12:30:00Z","2009-01-18T13:00:00Z","2009-01-18T13:30:00Z","2009-01-18T14:00:00Z","2009-01-18T14:30:00Z","2009-01-18T15:00:00Z","2009-01-18T15:30:00Z","2009-01-18T16:00:00Z","2009-01-18T16:30:00Z","2009-01-18T17:00:00Z","2009-01-18T17:30:00Z","2009-01-18T18:00:00Z","2009-01-18T18:30:00Z","2009-01-18T19:00:00Z","2009-01-18T19:30:00Z","2009-01-18T20:00:00Z","2009-01-18T20:30:00Z","2009-01-18T21:00:00Z","2009-01-18T21:30:00Z","2009-01-18T22:00:00Z","2009-01-18T22:30:00Z","2009-01-18T23:00:00Z","2009-01-18T23:30:00Z","2009-01-19T00:00:00Z","2009-01-19T00:30:00Z","2009-01-19T01:00:00Z","2009-01-19T01:30:00Z","2009-01-19T02:00:00Z","2009-01-19T02:30:00Z","2009-01-19T03:00:00Z","2009-01-19T03:30:00Z","2009-01-19T04:00:00Z","2009-01-19T04:30:00Z","2009-01-19T05:00:00Z","2009-01-19T05:30:00Z","2009-01-19T06:00:00Z","2009-01-19T06:30:00Z","2009-01-19T07:00:00Z","2009-01-19T07:30:00Z","2009-01-19T08:00:00Z","2009-01-19T08:30:00Z","2009-01-19T09:00:00Z","2009-01-19T09:30:00Z","2009-01-19T10:00:00Z","2009-01-19T10:30:00Z","2009-01-19T11:00:00Z","2009-01-19T11:30:00Z","2009-01-19T12:00:00Z","2009-01-19T12:30:00Z","2009-01-19T13:00:00Z","2009-01-19T13:30:00Z","2009-01-19T14:00:00Z","2009-01-19T14:30:00Z","2009-01-19T15:00:00Z","2009-01-19T15:30:00Z","2009-01-19T16:00:00Z","2009-01-19T16:30:00Z","2009-01-19T17:00:00Z","2009-01-19T17:30:00Z","2009-01-19T18:00:00Z","2009-01-19T18:30:00Z","2009-01-19T19:00:00Z","2009-01-19T19:30:00Z","2009-01-19T20:00:00Z","2009-01-19T20:30:00Z","2009-01-19T21:00:00Z","2009-01-19T21:30:00Z","2009-01-19T22:00:00Z","2009-01-19T22:30:00Z","2009-01-19T23:00:00Z","2009-01-19T23:30:00Z","2009-01-20T00:00:00Z","2009-01-20T00:30:00Z","2009-01-20T01:00:00Z","2009-01-20T01:30:00Z","2009-01-20T02:00:00Z","2009-01-20T02:30:00Z","2009-01-20T03:00:00Z","2009-01-20T03:30:00Z","2009-01-20T04:00:00Z","2009-01-20T04:30:00Z","2009-01-20T05:00:00Z","2009-01-20T05:30:00Z","2009-01-20T06:00:00Z","2009-01-20T06:30:00Z","2009-01-20T07:00:00Z","2009-01-20T07:30:00Z","2009-01-20T08:00:00Z","2009-01-20T08:30:00Z","2009-01-20T09:00:00Z","2009-01-20T09:30:00Z","2009-01-20T10:00:00Z","2009-01-20T10:30:00Z","2009-01-20T11:00:00Z","2009-01-20T11:30:00Z","2009-01-20T12:00:00Z","2009-01-20T12:30:00Z","2009-01-20T13:00:00Z","2009-01-20T13:30:00Z","2009-01-20T14:00:00Z","2009-01-20T14:30:00Z","2009-01-20T15:00:00Z","2009-01-20T15:30:00Z","2009-01-20T16:00:00Z","2009-01-20T16:30:00Z","2009-01-20T17:00:00Z","2009-01-20T17:30:00Z","2009-01-20T18:00:00Z","2009-01-20T18:30:00Z","2009-01-20T19:00:00Z","2009-01-20T19:30:00Z","2009-01-20T20:00:00Z","2009-01-20T20:30:00Z","2009-01-20T21:00:00Z","2009-01-20T21:30:00Z","2009-01-20T22:00:00Z","2009-01-20T22:30:00Z","2009-01-20T23:00:00Z","2009-01-20T23:30:00Z","2009-01-21T00:00:00Z","2009-01-21T00:30:00Z","2009-01-21T01:00:00Z","2009-01-21T01:30:00Z","2009-01-21T02:00:00Z","2009-01-21T02:30:00Z","2009-01-21T03:00:00Z","2009-01-21T03:30:00Z","2009-01-21T04:00:00Z","2009-01-21T04:30:00Z","2009-01-21T05:00:00Z","2009-01-21T05:30:00Z","2009-01-21T06:00:00Z","2009-01-21T06:30:00Z","2009-01-21T07:00:00Z","2009-01-21T07:30:00Z","2009-01-21T08:00:00Z","2009-01-21T08:30:00Z","2009-01-21T09:00:00Z","2009-01-21T09:30:00Z","2009-01-21T10:00:00Z","2009-01-21T10:30:00Z","2009-01-21T11:00:00Z","2009-01-21T11:30:00Z","2009-01-21T12:00:00Z","2009-01-21T12:30:00Z","2009-01-21T13:00:00Z","2009-01-21T13:30:00Z","2009-01-21T14:00:00Z","2009-01-21T14:30:00Z","2009-01-21T15:00:00Z","2009-01-21T15:30:00Z","2009-01-21T16:00:00Z","2009-01-21T16:30:00Z","2009-01-21T17:00:00Z","2009-01-21T17:30:00Z","2009-01-21T18:00:00Z","2009-01-21T18:30:00Z","2009-01-21T19:00:00Z","2009-01-21T19:30:00Z","2009-01-21T20:00:00Z","2009-01-21T20:30:00Z","2009-01-21T21:00:00Z","2009-01-21T21:30:00Z","2009-01-21T22:00:00Z","2009-01-21T22:30:00Z","2009-01-21T23:00:00Z","2009-01-21T23:30:00Z","2009-01-22T00:00:00Z","2009-01-22T00:30:00Z","2009-01-22T01:00:00Z","2009-01-22T01:30:00Z","2009-01-22T02:00:00Z","2009-01-22T02:30:00Z","2009-01-22T03:00:00Z","2009-01-22T03:30:00Z","2009-01-22T04:00:00Z","2009-01-22T04:30:00Z","2009-01-22T05:00:00Z","2009-01-22T05:30:00Z","2009-01-22T06:00:00Z","2009-01-22T06:30:00Z","2009-01-22T07:00:00Z","2009-01-22T07:30:00Z","2009-01-22T08:00:00Z","2009-01-22T08:30:00Z","2009-01-22T09:00:00Z","2009-01-22T09:30:00Z","2009-01-22T10:00:00Z","2009-01-22T10:30:00Z","2009-01-22T11:00:00Z","2009-01-22T11:30:00Z","2009-01-22T12:00:00Z","2009-01-22T12:30:00Z","2009-01-22T13:00:00Z","2009-01-22T13:30:00Z","2009-01-22T14:00:00Z","2009-01-22T14:30:00Z","2009-01-22T15:00:00Z","2009-01-22T15:30:00Z","2009-01-22T16:00:00Z","2009-01-22T16:30:00Z","2009-01-22T17:00:00Z","2009-01-22T17:30:00Z","2009-01-22T18:00:00Z","2009-01-22T18:30:00Z","2009-01-22T19:00:00Z","2009-01-22T19:30:00Z","2009-01-22T20:00:00Z","2009-01-22T20:30:00Z","2009-01-22T21:00:00Z","2009-01-22T21:30:00Z","2009-01-22T22:00:00Z","2009-01-22T22:30:00Z","2009-01-22T23:00:00Z","2009-01-22T23:30:00Z","2009-01-23T00:00:00Z","2009-01-23T00:30:00Z","2009-01-23T01:00:00Z","2009-01-23T01:30:00Z","2009-01-23T02:00:00Z","2009-01-23T02:30:00Z","2009-01-23T03:00:00Z","2009-01-23T03:30:00Z","2009-01-23T04:00:00Z","2009-01-23T04:30:00Z","2009-01-23T05:00:00Z","2009-01-23T05:30:00Z","2009-01-23T06:00:00Z","2009-01-23T06:30:00Z","2009-01-23T07:00:00Z","2009-01-23T07:30:00Z","2009-01-23T08:00:00Z","2009-01-23T08:30:00Z","2009-01-23T09:00:00Z","2009-01-23T09:30:00Z","2009-01-23T10:00:00Z","2009-01-23T10:30:00Z","2009-01-23T11:00:00Z","2009-01-23T11:30:00Z","2009-01-23T12:00:00Z","2009-01-23T12:30:00Z","2009-01-23T13:00:00Z","2009-01-23T13:30:00Z","2009-01-23T14:00:00Z","2009-01-23T14:30:00Z","2009-01-23T15:00:00Z","2009-01-23T15:30:00Z","2009-01-23T16:00:00Z","2009-01-23T16:30:00Z","2009-01-23T17:00:00Z","2009-01-23T17:30:00Z","2009-01-23T18:00:00Z","2009-01-23T18:30:00Z","2009-01-23T19:00:00Z","2009-01-23T19:30:00Z","2009-01-23T20:00:00Z","2009-01-23T20:30:00Z","2009-01-23T21:00:00Z","2009-01-23T21:30:00Z","2009-01-23T22:00:00Z","2009-01-23T22:30:00Z","2009-01-23T23:00:00Z","2009-01-23T23:30:00Z","2009-01-24T00:00:00Z","2009-01-24T00:30:00Z","2009-01-24T01:00:00Z","2009-01-24T01:30:00Z","2009-01-24T02:00:00Z","2009-01-24T02:30:00Z","2009-01-24T03:00:00Z","2009-01-24T03:30:00Z","2009-01-24T04:00:00Z","2009-01-24T04:30:00Z","2009-01-24T05:00:00Z","2009-01-24T05:30:00Z","2009-01-24T06:00:00Z","2009-01-24T06:30:00Z","2009-01-24T07:00:00Z","2009-01-24T07:30:00Z","2009-01-24T08:00:00Z","2009-01-24T08:30:00Z","2009-01-24T09:00:00Z","2009-01-24T09:30:00Z","2009-01-24T10:00:00Z","2009-01-24T10:30:00Z","2009-01-24T11:00:00Z","2009-01-24T11:30:00Z","2009-01-24T12:00:00Z","2009-01-24T12:30:00Z","2009-01-24T13:00:00Z","2009-01-24T13:30:00Z","2009-01-24T14:00:00Z","2009-01-24T14:30:00Z","2009-01-24T15:00:00Z","2009-01-24T15:30:00Z","2009-01-24T16:00:00Z","2009-01-24T16:30:00Z","2009-01-24T17:00:00Z","2009-01-24T17:30:00Z","2009-01-24T18:00:00Z","2009-01-24T18:30:00Z","2009-01-24T19:00:00Z","2009-01-24T19:30:00Z","2009-01-24T20:00:00Z","2009-01-24T20:30:00Z","2009-01-24T21:00:00Z","2009-01-24T21:30:00Z","2009-01-24T22:00:00Z","2009-01-24T22:30:00Z","2009-01-24T23:00:00Z","2009-01-24T23:30:00Z","2009-01-25T00:00:00Z","2009-01-25T00:30:00Z","2009-01-25T01:00:00Z","2009-01-25T01:30:00Z","2009-01-25T02:00:00Z","2009-01-25T02:30:00Z","2009-01-25T03:00:00Z","2009-01-25T03:30:00Z","2009-01-25T04:00:00Z","2009-01-25T04:30:00Z","2009-01-25T05:00:00Z","2009-01-25T05:30:00Z","2009-01-25T06:00:00Z","2009-01-25T06:30:00Z","2009-01-25T07:00:00Z","2009-01-25T07:30:00Z","2009-01-25T08:00:00Z","2009-01-25T08:30:00Z","2009-01-25T09:00:00Z","2009-01-25T09:30:00Z","2009-01-25T10:00:00Z","2009-01-25T10:30:00Z","2009-01-25T11:00:00Z","2009-01-25T11:30:00Z","2009-01-25T12:00:00Z","2009-01-25T12:30:00Z","2009-01-25T13:00:00Z","2009-01-25T13:30:00Z","2009-01-25T14:00:00Z","2009-01-25T14:30:00Z","2009-01-25T15:00:00Z","2009-01-25T15:30:00Z","2009-01-25T16:00:00Z","2009-01-25T16:30:00Z","2009-01-25T17:00:00Z","2009-01-25T17:30:00Z","2009-01-25T18:00:00Z","2009-01-25T18:30:00Z","2009-01-25T19:00:00Z","2009-01-25T19:30:00Z","2009-01-25T20:00:00Z","2009-01-25T20:30:00Z","2009-01-25T21:00:00Z","2009-01-25T21:30:00Z","2009-01-25T22:00:00Z","2009-01-25T22:30:00Z","2009-01-25T23:00:00Z","2009-01-25T23:30:00Z","2009-01-26T00:00:00Z","2009-01-26T00:30:00Z","2009-01-26T01:00:00Z","2009-01-26T01:30:00Z","2009-01-26T02:00:00Z","2009-01-26T02:30:00Z","2009-01-26T03:00:00Z","2009-01-26T03:30:00Z","2009-01-26T04:00:00Z","2009-01-26T04:30:00Z","2009-01-26T05:00:00Z","2009-01-26T05:30:00Z","2009-01-26T06:00:00Z","2009-01-26T06:30:00Z","2009-01-26T07:00:00Z","2009-01-26T07:30:00Z","2009-01-26T08:00:00Z","2009-01-26T08:30:00Z","2009-01-26T09:00:00Z","2009-01-26T09:30:00Z","2009-01-26T10:00:00Z","2009-01-26T10:30:00Z","2009-01-26T11:00:00Z","2009-01-26T11:30:00Z","2009-01-26T12:00:00Z","2009-01-26T12:30:00Z","2009-01-26T13:00:00Z","2009-01-26T13:30:00Z","2009-01-26T14:00:00Z","2009-01-26T14:30:00Z","2009-01-26T15:00:00Z","2009-01-26T15:30:00Z","2009-01-26T16:00:00Z","2009-01-26T16:30:00Z","2009-01-26T17:00:00Z","2009-01-26T17:30:00Z","2009-01-26T18:00:00Z","2009-01-26T18:30:00Z","2009-01-26T19:00:00Z","2009-01-26T19:30:00Z","2009-01-26T20:00:00Z","2009-01-26T20:30:00Z","2009-01-26T21:00:00Z","2009-01-26T21:30:00Z","2009-01-26T22:00:00Z","2009-01-26T22:30:00Z","2009-01-26T23:00:00Z","2009-01-26T23:30:00Z","2009-01-27T00:00:00Z","2009-01-27T00:30:00Z","2009-01-27T01:00:00Z","2009-01-27T01:30:00Z","2009-01-27T02:00:00Z","2009-01-27T02:30:00Z","2009-01-27T03:00:00Z","2009-01-27T03:30:00Z","2009-01-27T04:00:00Z","2009-01-27T04:30:00Z","2009-01-27T05:00:00Z","2009-01-27T05:30:00Z","2009-01-27T06:00:00Z","2009-01-27T06:30:00Z","2009-01-27T07:00:00Z","2009-01-27T07:30:00Z","2009-01-27T08:00:00Z","2009-01-27T08:30:00Z","2009-01-27T09:00:00Z","2009-01-27T09:30:00Z","2009-01-27T10:00:00Z","2009-01-27T10:30:00Z","2009-01-27T11:00:00Z","2009-01-27T11:30:00Z","2009-01-27T12:00:00Z","2009-01-27T12:30:00Z","2009-01-27T13:00:00Z","2009-01-27T13:30:00Z","2009-01-27T14:00:00Z","2009-01-27T14:30:00Z","2009-01-27T15:00:00Z","2009-01-27T15:30:00Z","2009-01-27T16:00:00Z","2009-01-27T16:30:00Z","2009-01-27T17:00:00Z","2009-01-27T17:30:00Z","2009-01-27T18:00:00Z","2009-01-27T18:30:00Z","2009-01-27T19:00:00Z","2009-01-27T19:30:00Z","2009-01-27T20:00:00Z","2009-01-27T20:30:00Z","2009-01-27T21:00:00Z","2009-01-27T21:30:00Z","2009-01-27T22:00:00Z","2009-01-27T22:30:00Z","2009-01-27T23:00:00Z","2009-01-27T23:30:00Z","2009-01-28T00:00:00Z","2009-01-28T00:30:00Z","2009-01-28T01:00:00Z","2009-01-28T01:30:00Z","2009-01-28T02:00:00Z","2009-01-28T02:30:00Z","2009-01-28T03:00:00Z","2009-01-28T03:30:00Z","2009-01-28T04:00:00Z","2009-01-28T04:30:00Z","2009-01-28T05:00:00Z","2009-01-28T05:30:00Z","2009-01-28T06:00:00Z","2009-01-28T06:30:00Z","2009-01-28T07:00:00Z","2009-01-28T07:30:00Z","2009-01-28T08:00:00Z","2009-01-28T08:30:00Z","2009-01-28T09:00:00Z","2009-01-28T09:30:00Z","2009-01-28T10:00:00Z","2009-01-28T10:30:00Z","2009-01-28T11:00:00Z","2009-01-28T11:30:00Z","2009-01-28T12:00:00Z","2009-01-28T12:30:00Z","2009-01-28T13:00:00Z","2009-01-28T13:30:00Z","2009-01-28T14:00:00Z","2009-01-28T14:30:00Z","2009-01-28T15:00:00Z","2009-01-28T15:30:00Z","2009-01-28T16:00:00Z","2009-01-28T16:30:00Z","2009-01-28T17:00:00Z","2009-01-28T17:30:00Z","2009-01-28T18:00:00Z","2009-01-28T18:30:00Z","2009-01-28T19:00:00Z","2009-01-28T19:30:00Z","2009-01-28T20:00:00Z","2009-01-28T20:30:00Z","2009-01-28T21:00:00Z","2009-01-28T21:30:00Z","2009-01-28T22:00:00Z","2009-01-28T22:30:00Z","2009-01-28T23:00:00Z","2009-01-28T23:30:00Z","2009-01-29T00:00:00Z","2009-01-29T00:30:00Z","2009-01-29T01:00:00Z","2009-01-29T01:30:00Z","2009-01-29T02:00:00Z","2009-01-29T02:30:00Z","2009-01-29T03:00:00Z","2009-01-29T03:30:00Z","2009-01-29T04:00:00Z","2009-01-29T04:30:00Z","2009-01-29T05:00:00Z","2009-01-29T05:30:00Z","2009-01-29T06:00:00Z","2009-01-29T06:30:00Z","2009-01-29T07:00:00Z","2009-01-29T07:30:00Z","2009-01-29T08:00:00Z","2009-01-29T08:30:00Z","2009-01-29T09:00:00Z","2009-01-29T09:30:00Z","2009-01-29T10:00:00Z","2009-01-29T10:30:00Z","2009-01-29T11:00:00Z","2009-01-29T11:30:00Z","2009-01-29T12:00:00Z","2009-01-29T12:30:00Z","2009-01-29T13:00:00Z","2009-01-29T13:30:00Z","2009-01-29T14:00:00Z","2009-01-29T14:30:00Z","2009-01-29T15:00:00Z","2009-01-29T15:30:00Z","2009-01-29T16:00:00Z","2009-01-29T16:30:00Z","2009-01-29T17:00:00Z","2009-01-29T17:30:00Z","2009-01-29T18:00:00Z","2009-01-29T18:30:00Z","2009-01-29T19:00:00Z","2009-01-29T19:30:00Z","2009-01-29T20:00:00Z","2009-01-29T20:30:00Z","2009-01-29T21:00:00Z","2009-01-29T21:30:00Z","2009-01-29T22:00:00Z","2009-01-29T22:30:00Z","2009-01-29T23:00:00Z","2009-01-29T23:30:00Z","2009-01-30T00:00:00Z","2009-01-30T00:30:00Z","2009-01-30T01:00:00Z","2009-01-30T01:30:00Z","2009-01-30T02:00:00Z","2009-01-30T02:30:00Z","2009-01-30T03:00:00Z","2009-01-30T03:30:00Z","2009-01-30T04:00:00Z","2009-01-30T04:30:00Z","2009-01-30T05:00:00Z","2009-01-30T05:30:00Z","2009-01-30T06:00:00Z","2009-01-30T06:30:00Z","2009-01-30T07:00:00Z","2009-01-30T07:30:00Z","2009-01-30T08:00:00Z","2009-01-30T08:30:00Z","2009-01-30T09:00:00Z","2009-01-30T09:30:00Z","2009-01-30T10:00:00Z","2009-01-30T10:30:00Z","2009-01-30T11:00:00Z","2009-01-30T11:30:00Z","2009-01-30T12:00:00Z","2009-01-30T12:30:00Z","2009-01-30T13:00:00Z","2009-01-30T13:30:00Z","2009-01-30T14:00:00Z","2009-01-30T14:30:00Z","2009-01-30T15:00:00Z","2009-01-30T15:30:00Z","2009-01-30T16:00:00Z","2009-01-30T16:30:00Z","2009-01-30T17:00:00Z","2009-01-30T17:30:00Z","2009-01-30T18:00:00Z","2009-01-30T18:30:00Z","2009-01-30T19:00:00Z","2009-01-30T19:30:00Z","2009-01-30T20:00:00Z","2009-01-30T20:30:00Z","2009-01-30T21:00:00Z","2009-01-30T21:30:00Z","2009-01-30T22:00:00Z","2009-01-30T22:30:00Z","2009-01-30T23:00:00Z","2009-01-30T23:30:00Z","2009-01-31T00:00:00Z","2009-01-31T00:30:00Z","2009-01-31T01:00:00Z","2009-01-31T01:30:00Z","2009-01-31T02:00:00Z","2009-01-31T02:30:00Z","2009-01-31T03:00:00Z","2009-01-31T03:30:00Z","2009-01-31T04:00:00Z","2009-01-31T04:30:00Z","2009-01-31T05:00:00Z","2009-01-31T05:30:00Z","2009-01-31T06:00:00Z","2009-01-31T06:30:00Z","2009-01-31T07:00:00Z","2009-01-31T07:30:00Z","2009-01-31T08:00:00Z","2009-01-31T08:30:00Z","2009-01-31T09:00:00Z","2009-01-31T09:30:00Z","2009-01-31T10:00:00Z","2009-01-31T10:30:00Z","2009-01-31T11:00:00Z","2009-01-31T11:30:00Z","2009-01-31T12:00:00Z","2009-01-31T12:30:00Z","2009-01-31T13:00:00Z","2009-01-31T13:30:00Z","2009-01-31T14:00:00Z","2009-01-31T14:30:00Z","2009-01-31T15:00:00Z","2009-01-31T15:30:00Z","2009-01-31T16:00:00Z","2009-01-31T16:30:00Z","2009-01-31T17:00:00Z","2009-01-31T17:30:00Z","2009-01-31T18:00:00Z","2009-01-31T18:30:00Z","2009-01-31T19:00:00Z","2009-01-31T19:30:00Z","2009-01-31T20:00:00Z","2009-01-31T20:30:00Z","2009-01-31T21:00:00Z","2009-01-31T21:30:00Z","2009-01-31T22:00:00Z","2009-01-31T22:30:00Z","2009-01-31T23:00:00Z","2009-01-31T23:30:00Z","2009-02-01T00:00:00Z"],"Hp30":[1.667,1.667,1.333,2.333,1.333,1.333,1.0,1.333,3.0,3.0,2.667,2.0,2.333,2.667,3.0,3.667,3.0,2.333,2.0,1.667,1.667,1.333,2.0,2.333,2.667,2.0,1.333,2.0,1.333,0.667,1.0,2.333,2.333,1.333,1.0,1.0,0.667,0.333,1.0,1.0,0.667,0.667,1.0,0.667,2.333,2.333,1.333,1.333,1.667,0.667,1.0,0.667,0.667,0.667,0.333,0.667,1.333,0.667,0.667,0.667,0.333,0.0,0.333,0.333,0.333,0.0,0.0,0.667,0.0,0.333,0.333,0.667,0.333,0.667,0.333,0.667,1.0,1.333,1.333,1.667,1.0,1.0,2.0,1.667,1.333,1.667,2.333,2.667,1.667,1.667,2.0,3.333,3.333,2.333,2.667,2.0,2.667,2.0,2.0,2.333,2.667,3.0,4.0,3.0,2.667,2.667,3.0,3.333,2.667,3.0,1.333,2.333,2.333,3.333,4.667,4.0,4.0,3.667,3.0,3.333,2.667,2.0,2.0,1.667,2.0,1.333,2.667,1.667,1.333,2.667,2.667,2.667,1.333,1.0,0.667,1.0,0.667,0.667,1.333,2.333,2.333,2.333,1.667,1.667,2.0,1.333,1.667,3.0,2.333,1.0,0.333,0.0,0.667,1.0,1.667,1.333,1.0,1.333,1.0,0.0,0.667,0.667,0.667,0.667,1.667,1.333,1.667,1.0,0.667,0.667,0.333,0.333,0.333,0.667,1.333,1.333,1.333,1.667,2.0,2.333,1.667,1.333,1.333,1.0,0.667,1.0,0.333,1.0,0.333,0.333,0.667,1.0,1.333,1.0,0.333,1.0,0.667,1.333,2.333,2.0,1.0,0.333,0.0,0.0,0.667,0.667,0.333,0.333,1.333,1.667,1.333,1.333,1.333,1.333,1.0,0.333,1.333,1.667,1.0,1.0,1.0,1.0,2.333,2.0,2.333,1.0,1.333,2.0,2.0,1.333,0.667,1.0,1.0,1.0,2.667,2.333,1.667,1.667,1.0,1.0,0.333,0.333,0.333,1.0,2.667,2.667,2.333,2.0,1.0,1.333,0.667,1.333,0.667,0.333,1.0,1.0,0.667,0.333,0.333,0.667,1.667,1.333,1.333,1.333,1.0,1.0,0.667,0.333,0.667,1.0,2.0,2.333,1.667,0.667,1.0,0.667,0.0,0.333,0.333,0.0,0.0,0.0,0.0,0.0,0.667,0.0,0.0,0.667,0.667,0.333,0.333,0.667,0.333,0.333,0.667,1.0,1.0,0.667,0.667,0.667,0.333,0.667,1.0,1.333,1.333,1.333,0.667,0.333,0.333,0.667,0.667,0.667,0.333,0.667,0.333,0.333,0.0,0.0,0.0,0.667,1.0,0.667,1.0,0.667,0.333,0.333,0.0,0.333,0.0,0.0,0.0,0.667,0.667,1.333,1.0,1.333,1.333,0.667,0.0,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.667,0.333,1.0,1.333,0.667,0.667,0.333,0.667,0.667,1.0,0.667,1.0,2.333,2.333,2.0,1.333,1.0,1.667,1.333,1.667,1.667,1.667,1.333,0.333,1.333,1.333,1.667,0.667,0.667,2.0,1.0,1.0,1.0,1.667,1.667,2.333,2.0,1.333,1.667,1.0,2.0,1.0,1.333,1.333,0.667,2.333,1.333,1.0,1.0,0.667,1.333,1.333,1.0,0.667,0.667,0.667,0.667,0.667,1.0,2.0,2.667,3.0,1.667,1.0,1.333,0.667,1.333,1.667,0.667,3.0,2.667,1.333,1.0,1.0,1.667,1.667,2.0,1.333,1.333,1.0,0.667,0.667,1.667,2.0,2.667,3.0,3.0,3.0,2.667,2.333,2.0,2.333,2.0,2.333,2.667,1.0,0.333,1.667,0.667,1.0,0.667,0.667,1.0,1.667,1.667,1.333,1.667,0.333,0.0,0.0,0.333,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.333,1.0,0.667,0.0,0.333,0.333,0.667,0.667,0.333,1.0,1.333,0.667,1.0,1.333,1.0,1.0,1.0,2.0,1.667,0.667,0.0,0.667,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.333,0.0,0.333,1.333,1.0,0.333,0.333,0.333,0.0,0.0,0.0,0.0,0.333,0.333,0.667,0.667,0.667,0.667,0.0,0.333,0.333,0.0,0.0,0.0,0.333,0.0,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.333,0.333,0.0,0.0,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.667,0.333,0.667,0.667,0.0,0.667,0.333,0.0,0.0,0.333,0.333,0.333,0.333,1.333,1.667,1.333,2.333,2.333,2.0,1.333,1.667,1.667,2.0,2.0,1.667,1.667,0.667,0.333,0.0,0.0,0.333,0.0,0.0,0.333,0.667,1.667,0.667,0.667,0.667,1.667,1.333,1.0,0.667,0.667,1.333,1.333,1.333,0.667,1.333,1.0,1.667,1.667,1.333,2.0,1.667,1.0,0.667,0.667,0.333,1.0,3.333,2.667,2.0,1.667,2.333,2.667,2.0,1.667,2.0,2.0,1.333,1.667,1.333,1.0,1.333,1.0,1.667,1.0,1.0,1.333,2.0,2.333,2.0,2.0,3.0,3.0,2.667,1.667,1.0,1.0,0.333,1.0,1.0,1.0,2.333,2.0,0.333,0.667,1.0,1.0,1.333,1.333,0.667,1.0,1.667,1.667,2.0,2.0,2.0,1.0,1.667,1.0,2.333,2.333,1.667,1.667,1.333,1.333,1.667,1.667,1.333,1.333,1.667,1.0,1.0,1.0,1.667,1.667,1.333,1.0,1.0,1.0,0.667,0.333,0.333,0.333,1.0,1.0,1.0,1.333,1.0,1.667,2.667,2.333,1.333,2.333,2.333,2.667,2.333,2.333,2.333,3.0,2.667,1.667,1.667,2.0,2.0,2.333,2.667,2.0,3.333,1.333,1.0,1.0,1.333,1.0,1.0,0.667,0.0,0.333,0.667,0.667,0.0,0.0,0.667,1.667,0.667,1.0,1.667,0.333,0.333,0.333,0.667,0.667,0.667,0.667,0.667,1.0,0.667,1.333,1.667,1.333,0.667,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.333,0.0,0.0,0.333,0.667,1.667,1.333,1.0,1.0,0.667,0.333,0.667,0.333,0.333,0.667,0.667,1.0,0.667,0.333,0.333,0.667,1.0,0.667,0.333,0.333,0.333,0.667,0.667,1.333,1.333,0.667,0.667,1.333,1.333,1.333,0.667,0.667,0.667,0.333,0.333,0.667,0.667,0.333,0.0,0.333,0.0,1.0,0.667,1.0,0.0,0.0,0.333,0.0,0.333,0.333,0.333,0.667,0.333,0.667,0.333,0.333,0.333,0.667,1.0,2.0,1.333,1.0,0.667,0.333,0.333,0.0,0.0,0.667,0.0,0.667,0.333,0.667,1.0,0.333,1.0,1.0,1.0,1.0,1.333,0.667,0.333,1.0,1.333,1.333,2.333,1.667,2.333,3.0,3.333,5.0,5.333,3.667,3.0,1.667,1.333,1.0,1.667,2.667,3.0,2.667,1.667,0.667,0.667,1.333,1.0,0.667,1.0,0.667,0.667,1.667,0.667,0.333,1.667,1.0,0.667,2.0,1.333,1.667,2.0,2.0,2.0,2.333,1.667,1.667,1.667,2.333,2.0,2.0,3.0,2.333,2.333,1.667,1.667,3.0,2.333,2.0,1.333,2.0,1.667,2.0,0.667,0.0,0.667,1.667,1.0,1.0,0.667,1.0,1.0,1.667,0.333,1.0,0.667,0.333,0.667,1.0,0.667,0.333,0.667,1.0,0.333,0.0,0.333,0.0,0.333,0.0,0.0,0.333,1.0,1.0,1.0,1.0,1.333,2.333,2.0,1.333,1.0,1.667,1.333,1.0,0.667,0.667,1.0,0.667,0.333,0.667,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.333,0.667,0.667,1.333,1.0,1.0,1.333,1.0,1.333,0.333,0.333,0.333,0.333,0.667,1.333,1.0,0.667,1.333,2.0,1.333,2.0,2.0,1.667,1.0,1.333,2.0,1.333,0.667,1.0,0.667,0.667,0.667,1.333,1.333,0.667,0.0,0.0,0.0,0.333,0.0,0.0,0.667,0.0,0.667,0.333,1.0,0.667,0.0,0.0,0.333,1.0,0.333,1.0,0.333,0.333,0.667,0.333,0.333,0.333,1.0,0.667,0.333,0.667,0.667,0.0,0.0,0.333,0.667,1.0,0.667,1.333,0.667,1.0,1.0,0.667,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.667,1.0,0.333,0.333,0.333,0.0,0.0,0.333,0.667,1.0,0.667,1.0,0.667,0.333,0.667,0.333,0.0,0.333,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.667,1.0,0.667,1.0,0.667,0.333,0.333,0.0,0.0,0.0,0.333,2.0,2.333,0.333,0.667,0.667,0.0,0.0,0.0,0.667,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.667,0.0,0.0,0.333,0.667,0.667,1.333,0.667,1.0,1.667,1.667,1.333,0.667,0.333,0.667,0.667,0.333,0.333,0.333,0.667,0.0,0.0,0.333,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.333,1.333,0.333,0.667,0.333,0.667,0.667,0.333,0.333,0.333,0.0,0.333,0.0,0.0,0.333,0.0,0.0,0.333,1.0,0.333,1.0,3.0,3.0,1.667,2.333,4.0,4.0,3.0,3.0,2.333,1.667,1.333,1.333,3.333,2.667,2.0,2.667,1.667,1.667,2.0,3.333,3.0,3.0,3.0,1.667,2.333,2.667,2.333,2.333,2.0,3.0,3.667,3.667,3.333,3.0,3.0,3.333,3.333,3.0,3.333,2.667,2.333,2.333,1.667,1.333,0.667,0.333,0.333,0.333,0.667,0.333,0.333,0.333,0.667,0.667,1.0,1.0,0.333,0.0,0.0,1.0,1.333,1.333,1.667,1.333,0.667,0.667,0.0,0.333,0.0,0.667,0.333,0.0,1.333,1.0,0.667,0.333,0.333,0.333,1.0,0.667,0.667,0.333,1.0,1.0,1.333,1.667,1.333,1.333,1.0,1.333,1.333,1.667,2.0,2.333,2.333,1.667,1.333,1.0,0.333,0.667,0.333,0.0,0.0,0.0,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.333,0.0,0.0,0.0,0.333,1.333,0.667,1.0,1.0,0.667,0.667,0.667,0.667,0.333,0.333,0.333,1.667,0.333,0.0,0.0,0.0,0.0,0.333,0.667,0.333,0.333,0.667,0.667,2.0,1.667,0.667,1.333,0.667,1.0,0.333,0.333,0.0,0.667,0.0,0.0,1.333,0.333,1.333,2.333,2.333,2.0,2.333,3.333,3.333,2.667,2.333,2.333,1.0,1.333,1.667,1.667,1.0,0.667,1.667,0.667,2.333,0.667,0.333,0.667,0.333,0.0,0.333,0.667,0.333,0.667,0.667,1.0,1.333,0.0,0.0,0.0,0.0,0.667,0.0,0.0,0.333,0.333,0.333,0.0,0.0,0.0,0.333,1.0,1.667,1.333,1.333,2.0,1.333,0.667,0.333,1.0,0.667,0.333,0.667,0.333,1.0,1.0,1.667,1.333,1.333,1.0,0.333,0.333,0.333,0.667,0.333,0.667,0.667,0.667,0.667,0.0,1.0,0.667,1.0,1.0,1.0,2.0,2.0,1.333,1.667,3.333,2.333,2.0,2.0,2.0,2.333,1.667,0.667,1.0,1.0,1.333,1.333,1.333,1.333,1.333,2.0,2.0,2.333,1.333,2.0,1.333,3.0,3.333,2.0,2.333,1.333,1.333,1.667,2.333,3.333,3.0,2.333,3.333,2.0,2.667,1.667,1.0,1.0,2.0,1.0,2.0,2.667,2.333,1.333,2.0,1.667,1.0,1.0,1.333,2.667,2.667,2.0,2.0,1.667]} diff --git a/pysatSpaceWeather/tests/test_data/Hp60_2009-01.txt b/pysatSpaceWeather/tests/test_data/Hp60_2009-01.txt new file mode 100644 index 00000000..cc2906c9 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/Hp60_2009-01.txt @@ -0,0 +1 @@ +{"meta":{"source":"GFZ Potsdam","license":"CC BY 4.0"},"datetime":["2009-01-01T00:00:00Z","2009-01-01T01:00:00Z","2009-01-01T02:00:00Z","2009-01-01T03:00:00Z","2009-01-01T04:00:00Z","2009-01-01T05:00:00Z","2009-01-01T06:00:00Z","2009-01-01T07:00:00Z","2009-01-01T08:00:00Z","2009-01-01T09:00:00Z","2009-01-01T10:00:00Z","2009-01-01T11:00:00Z","2009-01-01T12:00:00Z","2009-01-01T13:00:00Z","2009-01-01T14:00:00Z","2009-01-01T15:00:00Z","2009-01-01T16:00:00Z","2009-01-01T17:00:00Z","2009-01-01T18:00:00Z","2009-01-01T19:00:00Z","2009-01-01T20:00:00Z","2009-01-01T21:00:00Z","2009-01-01T22:00:00Z","2009-01-01T23:00:00Z","2009-01-02T00:00:00Z","2009-01-02T01:00:00Z","2009-01-02T02:00:00Z","2009-01-02T03:00:00Z","2009-01-02T04:00:00Z","2009-01-02T05:00:00Z","2009-01-02T06:00:00Z","2009-01-02T07:00:00Z","2009-01-02T08:00:00Z","2009-01-02T09:00:00Z","2009-01-02T10:00:00Z","2009-01-02T11:00:00Z","2009-01-02T12:00:00Z","2009-01-02T13:00:00Z","2009-01-02T14:00:00Z","2009-01-02T15:00:00Z","2009-01-02T16:00:00Z","2009-01-02T17:00:00Z","2009-01-02T18:00:00Z","2009-01-02T19:00:00Z","2009-01-02T20:00:00Z","2009-01-02T21:00:00Z","2009-01-02T22:00:00Z","2009-01-02T23:00:00Z","2009-01-03T00:00:00Z","2009-01-03T01:00:00Z","2009-01-03T02:00:00Z","2009-01-03T03:00:00Z","2009-01-03T04:00:00Z","2009-01-03T05:00:00Z","2009-01-03T06:00:00Z","2009-01-03T07:00:00Z","2009-01-03T08:00:00Z","2009-01-03T09:00:00Z","2009-01-03T10:00:00Z","2009-01-03T11:00:00Z","2009-01-03T12:00:00Z","2009-01-03T13:00:00Z","2009-01-03T14:00:00Z","2009-01-03T15:00:00Z","2009-01-03T16:00:00Z","2009-01-03T17:00:00Z","2009-01-03T18:00:00Z","2009-01-03T19:00:00Z","2009-01-03T20:00:00Z","2009-01-03T21:00:00Z","2009-01-03T22:00:00Z","2009-01-03T23:00:00Z","2009-01-04T00:00:00Z","2009-01-04T01:00:00Z","2009-01-04T02:00:00Z","2009-01-04T03:00:00Z","2009-01-04T04:00:00Z","2009-01-04T05:00:00Z","2009-01-04T06:00:00Z","2009-01-04T07:00:00Z","2009-01-04T08:00:00Z","2009-01-04T09:00:00Z","2009-01-04T10:00:00Z","2009-01-04T11:00:00Z","2009-01-04T12:00:00Z","2009-01-04T13:00:00Z","2009-01-04T14:00:00Z","2009-01-04T15:00:00Z","2009-01-04T16:00:00Z","2009-01-04T17:00:00Z","2009-01-04T18:00:00Z","2009-01-04T19:00:00Z","2009-01-04T20:00:00Z","2009-01-04T21:00:00Z","2009-01-04T22:00:00Z","2009-01-04T23:00:00Z","2009-01-05T00:00:00Z","2009-01-05T01:00:00Z","2009-01-05T02:00:00Z","2009-01-05T03:00:00Z","2009-01-05T04:00:00Z","2009-01-05T05:00:00Z","2009-01-05T06:00:00Z","2009-01-05T07:00:00Z","2009-01-05T08:00:00Z","2009-01-05T09:00:00Z","2009-01-05T10:00:00Z","2009-01-05T11:00:00Z","2009-01-05T12:00:00Z","2009-01-05T13:00:00Z","2009-01-05T14:00:00Z","2009-01-05T15:00:00Z","2009-01-05T16:00:00Z","2009-01-05T17:00:00Z","2009-01-05T18:00:00Z","2009-01-05T19:00:00Z","2009-01-05T20:00:00Z","2009-01-05T21:00:00Z","2009-01-05T22:00:00Z","2009-01-05T23:00:00Z","2009-01-06T00:00:00Z","2009-01-06T01:00:00Z","2009-01-06T02:00:00Z","2009-01-06T03:00:00Z","2009-01-06T04:00:00Z","2009-01-06T05:00:00Z","2009-01-06T06:00:00Z","2009-01-06T07:00:00Z","2009-01-06T08:00:00Z","2009-01-06T09:00:00Z","2009-01-06T10:00:00Z","2009-01-06T11:00:00Z","2009-01-06T12:00:00Z","2009-01-06T13:00:00Z","2009-01-06T14:00:00Z","2009-01-06T15:00:00Z","2009-01-06T16:00:00Z","2009-01-06T17:00:00Z","2009-01-06T18:00:00Z","2009-01-06T19:00:00Z","2009-01-06T20:00:00Z","2009-01-06T21:00:00Z","2009-01-06T22:00:00Z","2009-01-06T23:00:00Z","2009-01-07T00:00:00Z","2009-01-07T01:00:00Z","2009-01-07T02:00:00Z","2009-01-07T03:00:00Z","2009-01-07T04:00:00Z","2009-01-07T05:00:00Z","2009-01-07T06:00:00Z","2009-01-07T07:00:00Z","2009-01-07T08:00:00Z","2009-01-07T09:00:00Z","2009-01-07T10:00:00Z","2009-01-07T11:00:00Z","2009-01-07T12:00:00Z","2009-01-07T13:00:00Z","2009-01-07T14:00:00Z","2009-01-07T15:00:00Z","2009-01-07T16:00:00Z","2009-01-07T17:00:00Z","2009-01-07T18:00:00Z","2009-01-07T19:00:00Z","2009-01-07T20:00:00Z","2009-01-07T21:00:00Z","2009-01-07T22:00:00Z","2009-01-07T23:00:00Z","2009-01-08T00:00:00Z","2009-01-08T01:00:00Z","2009-01-08T02:00:00Z","2009-01-08T03:00:00Z","2009-01-08T04:00:00Z","2009-01-08T05:00:00Z","2009-01-08T06:00:00Z","2009-01-08T07:00:00Z","2009-01-08T08:00:00Z","2009-01-08T09:00:00Z","2009-01-08T10:00:00Z","2009-01-08T11:00:00Z","2009-01-08T12:00:00Z","2009-01-08T13:00:00Z","2009-01-08T14:00:00Z","2009-01-08T15:00:00Z","2009-01-08T16:00:00Z","2009-01-08T17:00:00Z","2009-01-08T18:00:00Z","2009-01-08T19:00:00Z","2009-01-08T20:00:00Z","2009-01-08T21:00:00Z","2009-01-08T22:00:00Z","2009-01-08T23:00:00Z","2009-01-09T00:00:00Z","2009-01-09T01:00:00Z","2009-01-09T02:00:00Z","2009-01-09T03:00:00Z","2009-01-09T04:00:00Z","2009-01-09T05:00:00Z","2009-01-09T06:00:00Z","2009-01-09T07:00:00Z","2009-01-09T08:00:00Z","2009-01-09T09:00:00Z","2009-01-09T10:00:00Z","2009-01-09T11:00:00Z","2009-01-09T12:00:00Z","2009-01-09T13:00:00Z","2009-01-09T14:00:00Z","2009-01-09T15:00:00Z","2009-01-09T16:00:00Z","2009-01-09T17:00:00Z","2009-01-09T18:00:00Z","2009-01-09T19:00:00Z","2009-01-09T20:00:00Z","2009-01-09T21:00:00Z","2009-01-09T22:00:00Z","2009-01-09T23:00:00Z","2009-01-10T00:00:00Z","2009-01-10T01:00:00Z","2009-01-10T02:00:00Z","2009-01-10T03:00:00Z","2009-01-10T04:00:00Z","2009-01-10T05:00:00Z","2009-01-10T06:00:00Z","2009-01-10T07:00:00Z","2009-01-10T08:00:00Z","2009-01-10T09:00:00Z","2009-01-10T10:00:00Z","2009-01-10T11:00:00Z","2009-01-10T12:00:00Z","2009-01-10T13:00:00Z","2009-01-10T14:00:00Z","2009-01-10T15:00:00Z","2009-01-10T16:00:00Z","2009-01-10T17:00:00Z","2009-01-10T18:00:00Z","2009-01-10T19:00:00Z","2009-01-10T20:00:00Z","2009-01-10T21:00:00Z","2009-01-10T22:00:00Z","2009-01-10T23:00:00Z","2009-01-11T00:00:00Z","2009-01-11T01:00:00Z","2009-01-11T02:00:00Z","2009-01-11T03:00:00Z","2009-01-11T04:00:00Z","2009-01-11T05:00:00Z","2009-01-11T06:00:00Z","2009-01-11T07:00:00Z","2009-01-11T08:00:00Z","2009-01-11T09:00:00Z","2009-01-11T10:00:00Z","2009-01-11T11:00:00Z","2009-01-11T12:00:00Z","2009-01-11T13:00:00Z","2009-01-11T14:00:00Z","2009-01-11T15:00:00Z","2009-01-11T16:00:00Z","2009-01-11T17:00:00Z","2009-01-11T18:00:00Z","2009-01-11T19:00:00Z","2009-01-11T20:00:00Z","2009-01-11T21:00:00Z","2009-01-11T22:00:00Z","2009-01-11T23:00:00Z","2009-01-12T00:00:00Z","2009-01-12T01:00:00Z","2009-01-12T02:00:00Z","2009-01-12T03:00:00Z","2009-01-12T04:00:00Z","2009-01-12T05:00:00Z","2009-01-12T06:00:00Z","2009-01-12T07:00:00Z","2009-01-12T08:00:00Z","2009-01-12T09:00:00Z","2009-01-12T10:00:00Z","2009-01-12T11:00:00Z","2009-01-12T12:00:00Z","2009-01-12T13:00:00Z","2009-01-12T14:00:00Z","2009-01-12T15:00:00Z","2009-01-12T16:00:00Z","2009-01-12T17:00:00Z","2009-01-12T18:00:00Z","2009-01-12T19:00:00Z","2009-01-12T20:00:00Z","2009-01-12T21:00:00Z","2009-01-12T22:00:00Z","2009-01-12T23:00:00Z","2009-01-13T00:00:00Z","2009-01-13T01:00:00Z","2009-01-13T02:00:00Z","2009-01-13T03:00:00Z","2009-01-13T04:00:00Z","2009-01-13T05:00:00Z","2009-01-13T06:00:00Z","2009-01-13T07:00:00Z","2009-01-13T08:00:00Z","2009-01-13T09:00:00Z","2009-01-13T10:00:00Z","2009-01-13T11:00:00Z","2009-01-13T12:00:00Z","2009-01-13T13:00:00Z","2009-01-13T14:00:00Z","2009-01-13T15:00:00Z","2009-01-13T16:00:00Z","2009-01-13T17:00:00Z","2009-01-13T18:00:00Z","2009-01-13T19:00:00Z","2009-01-13T20:00:00Z","2009-01-13T21:00:00Z","2009-01-13T22:00:00Z","2009-01-13T23:00:00Z","2009-01-14T00:00:00Z","2009-01-14T01:00:00Z","2009-01-14T02:00:00Z","2009-01-14T03:00:00Z","2009-01-14T04:00:00Z","2009-01-14T05:00:00Z","2009-01-14T06:00:00Z","2009-01-14T07:00:00Z","2009-01-14T08:00:00Z","2009-01-14T09:00:00Z","2009-01-14T10:00:00Z","2009-01-14T11:00:00Z","2009-01-14T12:00:00Z","2009-01-14T13:00:00Z","2009-01-14T14:00:00Z","2009-01-14T15:00:00Z","2009-01-14T16:00:00Z","2009-01-14T17:00:00Z","2009-01-14T18:00:00Z","2009-01-14T19:00:00Z","2009-01-14T20:00:00Z","2009-01-14T21:00:00Z","2009-01-14T22:00:00Z","2009-01-14T23:00:00Z","2009-01-15T00:00:00Z","2009-01-15T01:00:00Z","2009-01-15T02:00:00Z","2009-01-15T03:00:00Z","2009-01-15T04:00:00Z","2009-01-15T05:00:00Z","2009-01-15T06:00:00Z","2009-01-15T07:00:00Z","2009-01-15T08:00:00Z","2009-01-15T09:00:00Z","2009-01-15T10:00:00Z","2009-01-15T11:00:00Z","2009-01-15T12:00:00Z","2009-01-15T13:00:00Z","2009-01-15T14:00:00Z","2009-01-15T15:00:00Z","2009-01-15T16:00:00Z","2009-01-15T17:00:00Z","2009-01-15T18:00:00Z","2009-01-15T19:00:00Z","2009-01-15T20:00:00Z","2009-01-15T21:00:00Z","2009-01-15T22:00:00Z","2009-01-15T23:00:00Z","2009-01-16T00:00:00Z","2009-01-16T01:00:00Z","2009-01-16T02:00:00Z","2009-01-16T03:00:00Z","2009-01-16T04:00:00Z","2009-01-16T05:00:00Z","2009-01-16T06:00:00Z","2009-01-16T07:00:00Z","2009-01-16T08:00:00Z","2009-01-16T09:00:00Z","2009-01-16T10:00:00Z","2009-01-16T11:00:00Z","2009-01-16T12:00:00Z","2009-01-16T13:00:00Z","2009-01-16T14:00:00Z","2009-01-16T15:00:00Z","2009-01-16T16:00:00Z","2009-01-16T17:00:00Z","2009-01-16T18:00:00Z","2009-01-16T19:00:00Z","2009-01-16T20:00:00Z","2009-01-16T21:00:00Z","2009-01-16T22:00:00Z","2009-01-16T23:00:00Z","2009-01-17T00:00:00Z","2009-01-17T01:00:00Z","2009-01-17T02:00:00Z","2009-01-17T03:00:00Z","2009-01-17T04:00:00Z","2009-01-17T05:00:00Z","2009-01-17T06:00:00Z","2009-01-17T07:00:00Z","2009-01-17T08:00:00Z","2009-01-17T09:00:00Z","2009-01-17T10:00:00Z","2009-01-17T11:00:00Z","2009-01-17T12:00:00Z","2009-01-17T13:00:00Z","2009-01-17T14:00:00Z","2009-01-17T15:00:00Z","2009-01-17T16:00:00Z","2009-01-17T17:00:00Z","2009-01-17T18:00:00Z","2009-01-17T19:00:00Z","2009-01-17T20:00:00Z","2009-01-17T21:00:00Z","2009-01-17T22:00:00Z","2009-01-17T23:00:00Z","2009-01-18T00:00:00Z","2009-01-18T01:00:00Z","2009-01-18T02:00:00Z","2009-01-18T03:00:00Z","2009-01-18T04:00:00Z","2009-01-18T05:00:00Z","2009-01-18T06:00:00Z","2009-01-18T07:00:00Z","2009-01-18T08:00:00Z","2009-01-18T09:00:00Z","2009-01-18T10:00:00Z","2009-01-18T11:00:00Z","2009-01-18T12:00:00Z","2009-01-18T13:00:00Z","2009-01-18T14:00:00Z","2009-01-18T15:00:00Z","2009-01-18T16:00:00Z","2009-01-18T17:00:00Z","2009-01-18T18:00:00Z","2009-01-18T19:00:00Z","2009-01-18T20:00:00Z","2009-01-18T21:00:00Z","2009-01-18T22:00:00Z","2009-01-18T23:00:00Z","2009-01-19T00:00:00Z","2009-01-19T01:00:00Z","2009-01-19T02:00:00Z","2009-01-19T03:00:00Z","2009-01-19T04:00:00Z","2009-01-19T05:00:00Z","2009-01-19T06:00:00Z","2009-01-19T07:00:00Z","2009-01-19T08:00:00Z","2009-01-19T09:00:00Z","2009-01-19T10:00:00Z","2009-01-19T11:00:00Z","2009-01-19T12:00:00Z","2009-01-19T13:00:00Z","2009-01-19T14:00:00Z","2009-01-19T15:00:00Z","2009-01-19T16:00:00Z","2009-01-19T17:00:00Z","2009-01-19T18:00:00Z","2009-01-19T19:00:00Z","2009-01-19T20:00:00Z","2009-01-19T21:00:00Z","2009-01-19T22:00:00Z","2009-01-19T23:00:00Z","2009-01-20T00:00:00Z","2009-01-20T01:00:00Z","2009-01-20T02:00:00Z","2009-01-20T03:00:00Z","2009-01-20T04:00:00Z","2009-01-20T05:00:00Z","2009-01-20T06:00:00Z","2009-01-20T07:00:00Z","2009-01-20T08:00:00Z","2009-01-20T09:00:00Z","2009-01-20T10:00:00Z","2009-01-20T11:00:00Z","2009-01-20T12:00:00Z","2009-01-20T13:00:00Z","2009-01-20T14:00:00Z","2009-01-20T15:00:00Z","2009-01-20T16:00:00Z","2009-01-20T17:00:00Z","2009-01-20T18:00:00Z","2009-01-20T19:00:00Z","2009-01-20T20:00:00Z","2009-01-20T21:00:00Z","2009-01-20T22:00:00Z","2009-01-20T23:00:00Z","2009-01-21T00:00:00Z","2009-01-21T01:00:00Z","2009-01-21T02:00:00Z","2009-01-21T03:00:00Z","2009-01-21T04:00:00Z","2009-01-21T05:00:00Z","2009-01-21T06:00:00Z","2009-01-21T07:00:00Z","2009-01-21T08:00:00Z","2009-01-21T09:00:00Z","2009-01-21T10:00:00Z","2009-01-21T11:00:00Z","2009-01-21T12:00:00Z","2009-01-21T13:00:00Z","2009-01-21T14:00:00Z","2009-01-21T15:00:00Z","2009-01-21T16:00:00Z","2009-01-21T17:00:00Z","2009-01-21T18:00:00Z","2009-01-21T19:00:00Z","2009-01-21T20:00:00Z","2009-01-21T21:00:00Z","2009-01-21T22:00:00Z","2009-01-21T23:00:00Z","2009-01-22T00:00:00Z","2009-01-22T01:00:00Z","2009-01-22T02:00:00Z","2009-01-22T03:00:00Z","2009-01-22T04:00:00Z","2009-01-22T05:00:00Z","2009-01-22T06:00:00Z","2009-01-22T07:00:00Z","2009-01-22T08:00:00Z","2009-01-22T09:00:00Z","2009-01-22T10:00:00Z","2009-01-22T11:00:00Z","2009-01-22T12:00:00Z","2009-01-22T13:00:00Z","2009-01-22T14:00:00Z","2009-01-22T15:00:00Z","2009-01-22T16:00:00Z","2009-01-22T17:00:00Z","2009-01-22T18:00:00Z","2009-01-22T19:00:00Z","2009-01-22T20:00:00Z","2009-01-22T21:00:00Z","2009-01-22T22:00:00Z","2009-01-22T23:00:00Z","2009-01-23T00:00:00Z","2009-01-23T01:00:00Z","2009-01-23T02:00:00Z","2009-01-23T03:00:00Z","2009-01-23T04:00:00Z","2009-01-23T05:00:00Z","2009-01-23T06:00:00Z","2009-01-23T07:00:00Z","2009-01-23T08:00:00Z","2009-01-23T09:00:00Z","2009-01-23T10:00:00Z","2009-01-23T11:00:00Z","2009-01-23T12:00:00Z","2009-01-23T13:00:00Z","2009-01-23T14:00:00Z","2009-01-23T15:00:00Z","2009-01-23T16:00:00Z","2009-01-23T17:00:00Z","2009-01-23T18:00:00Z","2009-01-23T19:00:00Z","2009-01-23T20:00:00Z","2009-01-23T21:00:00Z","2009-01-23T22:00:00Z","2009-01-23T23:00:00Z","2009-01-24T00:00:00Z","2009-01-24T01:00:00Z","2009-01-24T02:00:00Z","2009-01-24T03:00:00Z","2009-01-24T04:00:00Z","2009-01-24T05:00:00Z","2009-01-24T06:00:00Z","2009-01-24T07:00:00Z","2009-01-24T08:00:00Z","2009-01-24T09:00:00Z","2009-01-24T10:00:00Z","2009-01-24T11:00:00Z","2009-01-24T12:00:00Z","2009-01-24T13:00:00Z","2009-01-24T14:00:00Z","2009-01-24T15:00:00Z","2009-01-24T16:00:00Z","2009-01-24T17:00:00Z","2009-01-24T18:00:00Z","2009-01-24T19:00:00Z","2009-01-24T20:00:00Z","2009-01-24T21:00:00Z","2009-01-24T22:00:00Z","2009-01-24T23:00:00Z","2009-01-25T00:00:00Z","2009-01-25T01:00:00Z","2009-01-25T02:00:00Z","2009-01-25T03:00:00Z","2009-01-25T04:00:00Z","2009-01-25T05:00:00Z","2009-01-25T06:00:00Z","2009-01-25T07:00:00Z","2009-01-25T08:00:00Z","2009-01-25T09:00:00Z","2009-01-25T10:00:00Z","2009-01-25T11:00:00Z","2009-01-25T12:00:00Z","2009-01-25T13:00:00Z","2009-01-25T14:00:00Z","2009-01-25T15:00:00Z","2009-01-25T16:00:00Z","2009-01-25T17:00:00Z","2009-01-25T18:00:00Z","2009-01-25T19:00:00Z","2009-01-25T20:00:00Z","2009-01-25T21:00:00Z","2009-01-25T22:00:00Z","2009-01-25T23:00:00Z","2009-01-26T00:00:00Z","2009-01-26T01:00:00Z","2009-01-26T02:00:00Z","2009-01-26T03:00:00Z","2009-01-26T04:00:00Z","2009-01-26T05:00:00Z","2009-01-26T06:00:00Z","2009-01-26T07:00:00Z","2009-01-26T08:00:00Z","2009-01-26T09:00:00Z","2009-01-26T10:00:00Z","2009-01-26T11:00:00Z","2009-01-26T12:00:00Z","2009-01-26T13:00:00Z","2009-01-26T14:00:00Z","2009-01-26T15:00:00Z","2009-01-26T16:00:00Z","2009-01-26T17:00:00Z","2009-01-26T18:00:00Z","2009-01-26T19:00:00Z","2009-01-26T20:00:00Z","2009-01-26T21:00:00Z","2009-01-26T22:00:00Z","2009-01-26T23:00:00Z","2009-01-27T00:00:00Z","2009-01-27T01:00:00Z","2009-01-27T02:00:00Z","2009-01-27T03:00:00Z","2009-01-27T04:00:00Z","2009-01-27T05:00:00Z","2009-01-27T06:00:00Z","2009-01-27T07:00:00Z","2009-01-27T08:00:00Z","2009-01-27T09:00:00Z","2009-01-27T10:00:00Z","2009-01-27T11:00:00Z","2009-01-27T12:00:00Z","2009-01-27T13:00:00Z","2009-01-27T14:00:00Z","2009-01-27T15:00:00Z","2009-01-27T16:00:00Z","2009-01-27T17:00:00Z","2009-01-27T18:00:00Z","2009-01-27T19:00:00Z","2009-01-27T20:00:00Z","2009-01-27T21:00:00Z","2009-01-27T22:00:00Z","2009-01-27T23:00:00Z","2009-01-28T00:00:00Z","2009-01-28T01:00:00Z","2009-01-28T02:00:00Z","2009-01-28T03:00:00Z","2009-01-28T04:00:00Z","2009-01-28T05:00:00Z","2009-01-28T06:00:00Z","2009-01-28T07:00:00Z","2009-01-28T08:00:00Z","2009-01-28T09:00:00Z","2009-01-28T10:00:00Z","2009-01-28T11:00:00Z","2009-01-28T12:00:00Z","2009-01-28T13:00:00Z","2009-01-28T14:00:00Z","2009-01-28T15:00:00Z","2009-01-28T16:00:00Z","2009-01-28T17:00:00Z","2009-01-28T18:00:00Z","2009-01-28T19:00:00Z","2009-01-28T20:00:00Z","2009-01-28T21:00:00Z","2009-01-28T22:00:00Z","2009-01-28T23:00:00Z","2009-01-29T00:00:00Z","2009-01-29T01:00:00Z","2009-01-29T02:00:00Z","2009-01-29T03:00:00Z","2009-01-29T04:00:00Z","2009-01-29T05:00:00Z","2009-01-29T06:00:00Z","2009-01-29T07:00:00Z","2009-01-29T08:00:00Z","2009-01-29T09:00:00Z","2009-01-29T10:00:00Z","2009-01-29T11:00:00Z","2009-01-29T12:00:00Z","2009-01-29T13:00:00Z","2009-01-29T14:00:00Z","2009-01-29T15:00:00Z","2009-01-29T16:00:00Z","2009-01-29T17:00:00Z","2009-01-29T18:00:00Z","2009-01-29T19:00:00Z","2009-01-29T20:00:00Z","2009-01-29T21:00:00Z","2009-01-29T22:00:00Z","2009-01-29T23:00:00Z","2009-01-30T00:00:00Z","2009-01-30T01:00:00Z","2009-01-30T02:00:00Z","2009-01-30T03:00:00Z","2009-01-30T04:00:00Z","2009-01-30T05:00:00Z","2009-01-30T06:00:00Z","2009-01-30T07:00:00Z","2009-01-30T08:00:00Z","2009-01-30T09:00:00Z","2009-01-30T10:00:00Z","2009-01-30T11:00:00Z","2009-01-30T12:00:00Z","2009-01-30T13:00:00Z","2009-01-30T14:00:00Z","2009-01-30T15:00:00Z","2009-01-30T16:00:00Z","2009-01-30T17:00:00Z","2009-01-30T18:00:00Z","2009-01-30T19:00:00Z","2009-01-30T20:00:00Z","2009-01-30T21:00:00Z","2009-01-30T22:00:00Z","2009-01-30T23:00:00Z","2009-01-31T00:00:00Z","2009-01-31T01:00:00Z","2009-01-31T02:00:00Z","2009-01-31T03:00:00Z","2009-01-31T04:00:00Z","2009-01-31T05:00:00Z","2009-01-31T06:00:00Z","2009-01-31T07:00:00Z","2009-01-31T08:00:00Z","2009-01-31T09:00:00Z","2009-01-31T10:00:00Z","2009-01-31T11:00:00Z","2009-01-31T12:00:00Z","2009-01-31T13:00:00Z","2009-01-31T14:00:00Z","2009-01-31T15:00:00Z","2009-01-31T16:00:00Z","2009-01-31T17:00:00Z","2009-01-31T18:00:00Z","2009-01-31T19:00:00Z","2009-01-31T20:00:00Z","2009-01-31T21:00:00Z","2009-01-31T22:00:00Z","2009-01-31T23:00:00Z","2009-02-01T00:00:00Z"],"Hp60":[1.333,2.0,1.667,1.333,3.0,2.667,2.333,3.333,3.333,2.0,1.333,2.333,2.667,1.667,1.333,2.0,2.0,1.0,0.333,0.667,0.667,1.0,1.667,1.667,1.333,0.333,0.667,1.0,1.0,0.333,0.0,0.333,0.333,0.333,0.333,0.667,0.667,0.667,1.0,1.333,1.0,1.667,1.333,2.333,1.667,3.0,3.0,2.333,2.333,2.0,2.667,3.333,2.667,3.0,2.667,1.667,2.667,4.333,4.0,2.667,2.333,2.0,1.667,2.0,2.333,2.667,1.0,1.333,0.667,1.667,2.333,2.0,1.667,2.667,1.667,0.0,0.667,1.333,1.333,1.0,0.333,0.667,1.667,1.667,0.667,0.667,0.667,1.333,1.333,2.0,1.667,1.0,0.667,0.667,0.333,0.667,1.333,0.333,1.333,2.333,0.333,0.0,1.0,0.333,1.667,1.0,1.333,0.667,1.0,1.0,1.0,2.333,1.667,1.667,1.667,1.0,1.0,2.333,1.667,0.667,0.0,0.333,2.333,2.333,1.333,1.333,0.333,1.0,0.333,0.667,1.333,1.0,1.0,1.0,0.667,2.0,1.0,1.0,0.333,0.333,0.0,0.0,0.667,0.0,0.667,0.333,0.333,1.0,1.0,0.667,0.333,1.333,1.333,0.667,0.333,0.667,0.333,0.333,0.0,0.333,1.0,1.0,0.0,0.333,0.0,0.667,1.333,0.667,0.667,0.0,0.0,0.0,0.0,0.0,0.333,0.667,0.667,0.667,0.667,0.667,2.333,2.333,1.333,2.0,1.667,1.0,0.667,1.333,0.667,1.667,1.0,1.333,1.667,1.333,1.667,1.333,1.333,2.333,1.0,1.0,1.333,0.667,1.0,0.667,3.0,2.667,1.333,0.667,1.333,2.667,1.333,1.667,2.0,1.0,0.667,1.333,2.333,2.333,2.667,2.333,2.333,2.667,1.0,1.333,1.0,1.0,1.333,1.333,0.333,0.333,0.0,0.0,0.0,0.333,0.667,0.333,0.667,0.667,1.0,0.667,1.0,1.333,1.667,0.333,0.667,0.0,0.0,0.0,0.333,0.333,1.333,0.333,0.0,0.0,0.0,0.333,1.0,0.333,0.333,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.333,0.333,0.333,0.333,0.333,0.0,1.0,1.667,2.333,2.333,1.333,2.0,1.667,0.667,0.0,0.0,0.0,1.0,0.667,1.333,1.333,0.667,1.0,1.0,1.333,1.667,1.333,1.333,0.667,1.0,3.0,1.667,2.0,2.0,2.0,1.667,1.0,1.333,1.667,1.333,2.0,2.333,2.667,2.667,0.667,1.0,1.0,2.0,0.667,1.0,1.0,1.0,1.667,2.333,1.333,1.667,2.0,1.667,1.667,1.333,1.333,1.667,1.0,1.667,1.333,1.0,0.667,0.333,1.0,1.333,1.333,2.0,2.333,2.333,2.0,2.667,1.667,2.333,2.0,2.0,2.667,1.0,1.333,0.667,0.0,1.0,0.0,1.0,1.0,1.0,0.333,0.667,0.667,1.0,1.333,1.667,1.0,0.0,0.0,0.0,0.0,1.0,0.333,0.0,0.0,0.0,1.0,1.0,1.0,0.333,0.333,0.667,0.667,0.333,0.667,0.667,0.333,0.667,1.333,0.667,1.333,1.333,0.667,0.0,0.333,0.0,0.333,1.0,0.333,0.333,0.0,0.0,0.333,0.667,0.333,0.667,1.333,0.667,0.0,0.0,0.667,0.333,1.0,0.667,0.667,1.333,0.333,0.667,1.667,2.0,3.333,4.667,3.0,1.667,1.667,2.667,2.333,0.667,1.0,1.0,0.667,1.333,1.333,0.667,1.333,1.667,2.0,2.0,1.333,2.333,2.333,2.0,1.333,3.0,1.667,1.667,1.333,0.333,1.333,0.667,1.0,1.0,0.667,0.333,0.667,0.667,0.667,0.333,0.0,0.0,0.333,0.667,1.0,2.0,1.0,1.333,0.333,1.0,1.0,0.333,0.0,0.0,0.0,0.0,0.333,1.0,1.0,1.0,0.667,0.333,0.667,1.0,1.0,2.0,1.667,2.0,1.667,1.0,0.667,0.667,1.333,0.667,0.0,0.333,0.333,0.0,0.667,0.333,0.333,0.667,0.667,0.667,0.333,0.667,0.667,0.333,0.0,0.667,1.0,0.667,1.0,0.333,0.333,0.0,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.667,0.667,0.0,0.333,0.667,1.0,0.667,0.667,0.333,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.667,0.0,0.0,1.667,1.667,0.0,0.0,0.333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.333,0.0,0.0,0.333,0.667,0.0,0.333,1.0,0.667,1.333,1.0,0.333,0.333,0.333,0.667,0.0,0.0,0.0,0.0,0.0,0.0,0.667,0.333,0.667,0.667,0.0,0.0,0.333,0.0,1.0,1.0,2.667,2.0,4.0,2.667,2.0,1.667,3.0,2.333,1.0,3.333,3.333,3.0,2.0,2.0,3.0,3.333,3.333,3.0,3.0,3.0,2.0,1.667,0.333,0.333,0.333,0.333,1.0,0.667,0.0,0.667,1.0,1.333,0.667,0.333,0.333,0.333,1.333,0.333,0.333,0.667,0.667,1.0,1.667,1.0,1.0,1.667,2.333,2.0,1.0,0.333,0.333,0.0,0.0,0.0,0.0,0.0,0.333,0.333,0.0,1.333,1.0,0.667,0.667,0.667,0.333,1.0,0.0,0.0,0.667,0.333,0.333,1.333,1.0,0.667,0.333,0.333,0.0,0.667,2.333,2.0,3.0,3.333,2.333,1.0,1.333,1.0,1.333,1.333,0.667,0.0,0.333,0.333,1.0,1.0,0.0,0.333,0.0,0.333,0.333,0.0,1.0,1.667,1.667,1.333,0.333,0.333,0.667,1.0,2.0,1.0,0.333,0.333,0.667,0.667,0.667,1.0,0.667,1.0,1.667,3.0,2.0,1.667,2.0,0.333,1.0,1.0,1.0,1.667,2.0,1.333,3.0,2.0,1.333,2.0,3.0,3.333,2.333,1.333,1.333,1.333,2.0,1.333,1.333,1.0,2.667,2.0,1.333]} diff --git a/pysatSpaceWeather/tests/test_data/Kp_def2009.wdc b/pysatSpaceWeather/tests/test_data/Kp_def2009.wdc new file mode 100644 index 00000000..ccba0fcf --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/Kp_def2009.wdc @@ -0,0 +1,375 @@ +# DOI: https://doi.org/10.5880/Kp.0001 +# LICENCE: CC BY 4.0, please cite: +# Matzka, J., Bronkalla, O., Tornow, K., Elger, K. and Stolle, C., 2021. +# Geomagnetic Kp index. V. 1.0. GFZ Data Services, +# https://doi.org/10.5880/Kp.0001 +# Matzka, J., Stolle, C., Yamazaki, Y., Bronkalla, O. and Morschhauser, A., +# 2021. The geomagnetic Kp index and derived indices of geomagnetic activity. +# Space Weather, https://doi.org/10.1029/2020SW002641 +# The Kp index was introduced by Bartels (1949) and is produced by Geomagnetic +# Observatory Niemegk, GFZ German Research Centre for Geosciences. + 9 1 12394 1172327202317 717150 6 9 12 7 9 6 3 6 70.42 + 9 1 22394 2 7 7 0 3 7201727 87 3 3 0 2 3 7 6 12 40.21 + 9 1 32394 3273027372023 720190 12 15 12 22 7 9 3 7 110.63 + 9 1 42394 423 7 710 72317 3 97 9 3 3 4 3 9 6 2 50.21 + 9 1 52394 51013101010171020100 4 5 4 4 4 6 4 7 50.21 + 9 1 62394 62017 3101013 0 0 73 7 6 2 4 4 5 0 0 40.10 + 9 1 72394 7 3 710 3 3 7 0 7 40 2 3 4 2 2 3 0 3 20.00 + 9 1 82394 8 0 0 3 72013 713 63 0 0 2 3 7 5 3 5 30.10 + 9 1 92394 9171310 720171710110 6 5 4 3 7 6 6 4 50.21 + 9 11023941030231010 3 0 310 90 15 9 4 4 2 0 2 4 50.21 + 9 11123941110 0 0 7 0 0 0 0 17 4 0 0 3 0 0 0 0 10.00 + 9 112239412 0 0 0 0 0 0 3 0 3 0 0 0 0 0 0 2 0 00.00 + 9 113239413102017 010101310 90 4 7 6 0 4 4 5 4 40.10 + 9 1142394142320101723 71313127 9 7 4 6 9 3 5 5 60.31 + 9 11523941513201013 7202323130 5 7 4 5 3 7 9 9 60.31 + 9 1162394162020 0 7 71310 0 77 7 7 0 3 3 5 4 0 40.10 + 9 117239417 3 710 3 31310 3 53 2 3 4 2 2 5 4 2 30.10 + 9 118239418 3 0 3 7 3 71010 43 2 0 2 3 2 3 4 4 20.00 + 9 119239419402323 710171723160 27 9 9 3 4 6 6 9 90.52 + 9 12023942020 7 7 3 3 02013 73 7 3 3 2 2 0 7 5 40.10 + 9 121239421 0 0 010 7202010 67 0 0 0 4 3 7 7 4 30.10 + 9 122239422 0 7 3 3 3 3 3 0 23 0 3 2 2 2 2 2 0 20.00 + 9 123239423 0 0 3 3 7 0 0 7 20 0 0 2 2 3 0 0 3 10.00 + 9 1242394241010 0 0 0 3 0 3 27 4 4 0 0 0 2 0 2 20.00 + 9 125239425 7 0 0 0 7 3 317 37 3 0 0 0 3 2 2 6 20.00 + 9 12623942633232720303317 3187 18 9 12 7 15 18 6 2 110.63 + 9 127239427 310 3 3 3172017 77 2 4 2 2 2 6 7 6 40.10 + 9 1282395 1 0 0 010 7 7 3 7 33 0 0 0 4 3 3 2 3 20.00 + 9 1292395 2 020231313 3 3 0 77 0 7 9 5 5 2 2 0 40.10 + 9 1302395 3 313 310 3 31320 70 2 5 2 4 2 2 5 7 40.10 + 9 1312395 41310231727132020143 5 4 9 6 12 5 7 7 70.31 + 9 2 12395 5 72310 7 3 3 3 3 60 3 9 4 3 2 2 2 2 30.10 + 9 2 22395 6 3 0 0 3 3 3 0 0 13 2 0 0 2 2 2 0 0 10.00 + 9 2 32395 7 0 0 3 0 0 02037 60 0 0 2 0 0 0 7 22 40.10 + 9 2 42395 83710173330333027217 22 4 6 18 15 18 15 12 140.84 + 9 2 52395 93720101013 7 317117 22 7 4 4 5 3 2 6 70.31 + 9 2 623951020 3 0 0 0 0 0 3 27 7 2 0 0 0 0 0 2 10.00 + 9 2 7239511 320 3 0 3 3 0 0 33 2 7 2 0 2 2 0 0 20.00 + 9 2 8239512 0 0 3 0 0 0 0 3 7 0 0 2 0 0 0 0 2 00.00 + 9 2 923951317 3 0 0 0 3 010 33 6 2 0 0 0 2 0 4 20.00 + 9 210239514 3 3 0 3 3 3 3 7 27 2 2 0 2 2 2 2 3 20.00 + 9 21123951517 310 7 7 310 7 63 6 2 4 3 3 2 4 3 30.10 + 9 212239516 7 7 0 71017 7 0 53 3 3 0 3 4 6 3 0 30.00 + 9 213239517 3 0 0 0 71013 7 40 2 0 0 0 3 4 5 3 20.00 + 9 2142395181723373743331337240 6 9 22 22 32 18 5 22 170.94 + 9 2152395192737172030202020190 12 22 6 7 15 7 7 7 100.63 + 9 21623952020 3 0 7 7171010 73 7 2 0 3 3 6 4 4 40.10 + 9 217239521 0 0 0 0 0 0 310 13 0 0 0 0 0 0 2 4 10.00 + 9 21823952220 3 0 0 3 31020 60 7 2 0 0 2 2 4 7 30.10 + 9 219239523 0 0 0 0 013 3 7 23 0 0 0 0 0 5 2 3 10.00 + 9 2202395241010 7 3 7102023 90 4 4 3 2 3 4 7 9 40.21 + 9 221239525 3 3 01310 7 710 53 2 2 0 5 4 3 3 4 30.10 + 9 222239526 3 3132013 3 713 77 2 2 5 7 5 2 3 5 40.10 + 9 223239527 3 0 0 720302023103 2 0 0 3 7 15 7 9 50.21 + 9 2242396 13033231310 7 310130 15 18 9 5 4 3 2 4 80.42 + 9 2252396 21713 710 7 3 7 3 67 6 5 3 4 3 2 3 2 40.10 + 9 2262396 3 710 0 3 7 7 710 50 3 4 0 2 3 3 3 4 30.00 + 9 2272396 41717204033202020187 6 6 7 27 18 7 7 7 110.63 + 9 2282396 5272720 3 0 01013100 12 12 7 2 0 0 4 5 50.21 + 9 3 12396 62010 7 3 7 3 0 0 50 7 4 3 2 3 2 0 0 30.00 + 9 3 22396 7 0 0 0 3 3 0 3 0 10 0 0 0 2 2 0 2 0 10.00 + 9 3 32396 810 7172320232723150 4 3 6 9 7 9 12 9 70.42 + 9 3 42396 92027131317102027147 7 12 5 5 6 4 7 12 70.42 + 9 3 52396101727 3 3 0 3 3 7 63 6 12 2 2 0 2 2 3 40.10 + 9 3 623961113 7 7 3 0 0 0 7 37 5 3 3 2 0 0 0 3 20.00 + 9 3 7239612 3 3 3 0 0 3 3 3 20 2 2 2 0 0 2 2 2 20.00 + 9 3 8239613201030273027 7 3153 7 4 15 12 15 12 3 2 90.52 + 9 3 9239614 3 0 0 7 7 3 3 0 23 2 0 0 3 3 2 2 0 20.00 + 9 310239615 7 3 0 3172017 3 70 3 2 0 2 6 7 6 2 40.10 + 9 311239616 3 3 7 3 3 72327 77 2 2 3 2 2 3 9 12 40.21 + 9 3122396173030 713 7 71727137 15 15 3 5 3 3 6 12 80.42 + 9 3132396184740333027272023247 39 27 18 15 12 12 7 9 170.94 + 9 3142396193020202310272030180 15 7 7 9 4 12 7 15 100.52 + 9 315239620233027171717 320153 9 15 12 6 6 6 2 7 80.42 + 9 31623962123 71017 71717 3100 9 3 4 6 3 6 6 2 50.21 + 9 31723962210 7 7 310171713 83 4 3 3 2 4 6 6 5 40.10 + 9 318239623 3 3 3 3 3 3 3 7 30 2 2 2 2 2 2 2 3 20.00 + 9 31923962417 7 7 317 31013 77 6 3 3 2 6 2 4 5 40.10 + 9 32023962517 0 3 7 3171310 70 6 0 2 3 2 6 5 4 40.10 + 9 321239626 0 7172730102330143 0 3 6 12 15 4 9 15 80.42 + 9 322239627172710 7 3 01017 90 6 12 4 3 2 0 4 6 50.21 + 9 3232397 113 3 7 0 0 010 7 40 5 2 3 0 0 0 4 3 20.00 + 9 3242397 2 727202027201317150 3 12 7 7 12 7 5 6 70.42 + 9 3252397 333372020 7 71017150 18 22 7 7 3 3 4 6 90.52 + 9 3262397 42030271013131010133 7 15 12 4 5 5 4 4 70.42 + 9 3272397 5 3 0 0 310273017 90 2 0 0 2 4 12 15 6 50.21 + 9 3282397 613 0 0 7 7 72013 67 5 0 0 3 3 3 7 5 30.10 + 9 3292397 710 710 7 713 710 70 4 3 4 3 3 5 3 4 40.10 + 9 3302397 81313 31017 713 3 80 5 5 2 4 6 3 5 2 40.10 + 9 3312397 910 710 717 7 3 3 63 4 3 4 3 6 3 2 2 30.10 + 9 4 123971010 0 310 7 71320 70 4 0 2 4 3 3 5 7 40.10 + 9 4 2239711 3 3 7 310 3 3 3 37 2 2 3 2 4 2 2 2 20.00 + 9 4 3239712 7 0 3 0 313 7 3 37 3 0 2 0 2 5 3 2 20.00 + 9 4 4239713 0 0 0 3 3 3 3 3 17 0 0 0 2 2 2 2 2 10.00 + 9 4 523971413171710 713 7 3 87 5 6 6 4 3 5 3 2 40.10 + 9 4 6239715 7 3 3131013 3 7 60 3 2 2 5 4 5 2 3 30.10 + 9 4 7239716 7 710 7 3 3 3 3 43 3 3 4 3 2 2 2 2 30.00 + 9 4 8239717 313131323132020120 2 5 5 5 9 5 7 7 60.31 + 9 4 92397183033302017332323210 15 18 15 7 6 18 9 9 120.73 + 9 4102397192013201317203313150 7 5 7 5 6 7 18 5 80.42 + 9 4112397203327202023271723190 18 12 7 7 9 12 6 9 100.63 + 9 412239721232313 7 7132327137 9 9 5 3 3 5 9 12 70.31 + 9 413239722272010 3 7 3 3 3 77 12 7 4 2 3 2 2 2 40.10 + 9 41423972310 7 010 7 3 0 3 40 4 3 0 4 3 2 0 2 20.00 + 9 4152397241713 3 3131313 7 83 6 5 2 2 5 5 5 3 40.10 + 9 416239725 71013 717231020107 3 4 5 3 6 9 4 7 50.21 + 9 41723972617 7 7132013 720103 6 3 3 5 7 5 3 7 50.21 + 9 4182397271733271317171017150 6 18 12 5 6 6 4 6 80.42 + 9 4192398 1172317 310 31013 97 6 9 6 2 4 2 4 5 50.21 + 9 4202398 2201710 71013 3 3 83 7 6 4 3 4 5 2 2 40.10 + 9 4212398 310102313 7 310 7 83 4 4 9 5 3 2 4 3 40.10 + 9 4222398 41717 31310 3 313 80 6 6 2 5 4 2 2 5 40.10 + 9 4232398 5 7 3 3 3 3 7 3 0 30 3 2 2 2 2 3 2 0 20.00 + 9 4242398 62313171323131710130 9 5 6 5 9 5 6 4 60.31 + 9 4252398 7 710 31310171017 87 3 4 2 5 4 6 4 6 40.10 + 9 4262398 8 710 710 7 7 310 60 3 4 3 4 3 3 2 4 30.10 + 9 4272398 92317 0 7 3 3 7 3 63 9 6 0 3 2 2 3 2 30.10 + 9 428239810 0 7 3 3 7 710 7 43 0 3 2 2 3 3 4 3 20.00 + 9 429239811 0 3 710101013 3 57 0 2 3 4 4 4 5 2 30.10 + 9 430239812 7 7 7 7 7 3 0 3 40 3 3 3 3 3 2 0 2 20.00 + 9 5 1239813 3 31013 7 7 310 57 2 2 4 5 3 3 2 4 30.10 + 9 5 2239814 71013 713 3 713 73 3 4 5 3 5 2 3 5 40.10 + 9 5 323981517 3 3 71013 0 7 60 6 2 2 3 4 5 0 3 30.10 + 9 5 4239816 3171010 7 3 3 0 53 2 6 4 4 3 2 2 0 30.10 + 9 5 5239817 0 3 7 7 3 7 010 37 0 2 3 3 2 3 0 4 20.00 + 9 5 62398182010 71017172327130 7 4 3 4 6 6 9 12 60.31 + 9 5 723981927231010 7131727133 12 9 4 4 3 5 6 12 70.31 + 9 5 82398204030271717132320187 27 15 12 6 6 5 9 7 110.63 + 9 5 9239821 013172017171013107 0 5 6 7 6 6 4 5 50.21 + 9 5102398221010 7 710 71013 73 4 4 3 3 4 3 4 5 40.10 + 9 5112398232013 71013 7 7 3 80 7 5 3 4 5 3 3 2 40.10 + 9 512239824 0 0 0 0 3 3 3 7 17 0 0 0 0 2 2 2 3 10.00 + 9 513239825 7 3 3 3 313 7 3 43 3 2 2 2 2 5 3 2 30.00 + 9 514239826 713103023233017153 3 5 4 15 9 9 15 6 80.42 + 9 51523982710 7 0 7 3 7 3 3 40 4 3 0 3 2 3 2 2 20.00 + 9 5162399 11010 313 7101013 77 4 4 2 5 3 4 4 5 40.10 + 9 5172399 2 710 0 0 3 0 0 3 23 3 4 0 0 2 0 0 2 10.00 + 9 5182399 310 3 7 3 3 7 320 57 4 2 3 2 2 3 2 7 30.10 + 9 5192399 41010 7 7 7 7 7 3 57 4 4 3 3 3 3 3 2 30.10 + 9 5202399 5131010 7 7102717100 5 4 4 3 3 4 12 6 50.21 + 9 5212399 613 7131010 7 7 7 73 5 3 5 4 4 3 3 3 40.10 + 9 5222399 7 3 71320172010 7 97 2 3 5 7 6 7 4 3 50.21 + 9 5232399 8 3 01013 3101320 73 2 0 4 5 2 4 5 7 40.10 + 9 5242399 91313 710 310 7 7 70 5 5 3 4 2 4 3 3 40.10 + 9 525239910 3 0 3 7 3 3 3 3 27 2 0 2 3 2 2 2 2 20.00 + 9 526239911 3 310 3 7 7 7 3 43 2 2 4 2 3 3 3 2 30.00 + 9 527239912 0 3 0 3 3 0 3 7 20 0 2 0 2 2 0 2 3 10.00 + 9 528239913 02320232013 3 0103 0 9 7 9 7 5 2 0 50.21 + 9 529239914 713 71313131310 90 3 5 3 5 5 5 5 4 40.21 + 9 5302399151017 3 3 3 310 3 53 4 6 2 2 2 2 4 2 30.10 + 9 531239916 3 317 3 31013 7 60 2 2 6 2 2 4 5 3 30.10 + 9 6 1239917 3 7 7 0 3 3 3 3 30 2 3 3 0 2 2 2 2 20.00 + 9 6 2239918 3 3 0 7 7 7 310 40 2 2 0 3 3 3 2 4 20.00 + 9 6 323991910 3 0 7 7232313 87 4 2 0 3 3 9 9 5 40.21 + 9 6 4239920 723131010 7 717 93 3 9 5 4 4 3 3 6 50.21 + 9 6 5239921 71017171017 710 93 3 4 6 6 4 6 3 4 40.21 + 9 6 6239922 71010 310 7 7 7 60 3 4 4 2 4 3 3 3 30.10 + 9 6 7239923 3 3 71313231313 90 2 2 3 5 5 9 5 5 40.21 + 9 6 823992410 7 7 7 3 7 7 3 50 4 3 3 3 2 3 3 2 30.10 + 9 6 9239925 0 0 0 7 7 7 3 7 30 0 0 0 3 3 3 2 3 20.00 + 9 610239926 71317 7 7 7 3 0 60 3 5 6 3 3 3 2 0 30.10 + 9 611239927 7 7 310 3 3 3 7 43 3 3 2 4 2 2 2 3 30.00 + 9 6122400 1 3 3 3 3 3 0 0 0 17 2 2 2 2 2 0 0 0 10.00 + 9 6132400 2 0 313 3 710 713 57 0 2 5 2 3 4 3 5 30.10 + 9 6142400 317 7 3 720101717 97 6 3 2 3 7 4 6 6 50.21 + 9 6152400 4 717 7 3 7 7 3 3 53 3 6 3 2 3 3 2 2 30.10 + 9 6162400 5 0 3 3 32010 7 0 47 0 2 2 2 7 4 3 0 20.00 + 9 6172400 6 3 7 7 3 3 7 0 0 30 2 3 3 2 2 3 0 0 20.00 + 9 6182400 7 0 3 3 7 710 720 57 0 2 2 3 3 4 3 7 30.10 + 9 6192400 813 3 3 3 3 3 3 0 33 5 2 2 2 2 2 2 0 20.00 + 9 6202400 9 010171010102013 90 0 4 6 4 4 4 7 5 40.10 + 9 621240010172317172710 7 0117 6 9 6 6 12 4 3 0 60.31 + 9 622240011 310 3 3 7 7 3 3 40 2 4 2 2 3 3 2 2 20.00 + 9 623240012 3 3 710 3 7 733 73 2 2 3 4 2 3 3 18 50.21 + 9 6242400132330401717205027223 9 15 27 6 6 7 48 12 160.94 + 9 6252400142010131020131323123 7 4 5 4 7 5 5 9 60.31 + 9 62624001517 7 3 7 3 3 3 7 50 6 3 2 3 2 2 2 3 30.10 + 9 627240016 3 0 71013201717 87 2 0 3 4 5 7 6 6 40.10 + 9 628240017201010 717304033167 7 4 4 3 6 15 27 18 100.63 + 9 629240018372313172010 7 3130 22 9 5 6 7 4 3 2 70.42 + 9 630240019 7171010 31310 7 77 3 6 4 4 2 5 4 3 40.10 + 9 7 1240020 71310 7 3 3 3 3 50 3 5 4 3 2 2 2 2 30.10 + 9 7 2240021 3 7 7 3 3 3 3 0 30 2 3 3 2 2 2 2 0 20.00 + 9 7 3240022 3 7 310 7 7 713 57 2 3 2 4 3 3 3 5 30.10 + 9 7 424002310 7 3 3 710 710 57 4 3 2 2 3 4 3 4 30.10 + 9 7 52400242020 3 3 3102017 97 7 7 2 2 2 4 7 6 50.21 + 9 7 62400251317 7 3 3 3 710 63 5 6 3 2 2 2 3 4 30.10 + 9 7 7240026 7 7 310 71713 7 70 3 3 2 4 3 6 5 3 40.10 + 9 7 824002710 317131010 7 7 77 4 2 6 5 4 4 3 3 40.10 + 9 7 92401 113 71310 3172723113 5 3 5 4 2 6 12 9 60.31 + 9 7102401 2233013131717 713133 9 15 5 5 6 6 3 5 70.31 + 9 7112401 3101313 3 7 3 310 63 4 5 5 2 3 2 2 4 30.10 + 9 7122401 4 7 710 710 3 310 57 3 3 4 3 4 2 2 4 30.10 + 9 7132401 5 7 7 31027332330140 3 3 2 4 12 18 9 15 80.42 + 9 7142401 6372317132010 713140 22 9 6 5 7 4 3 5 80.42 + 9 7152401 7101713101010 3 3 77 4 6 5 4 4 4 2 2 40.10 + 9 7162401 8 7 310 3 3 0 3 3 33 3 2 4 2 2 0 2 2 20.00 + 9 7172401 9 0 3 0 3 0 3 0 0 10 0 2 0 2 0 2 0 0 10.00 + 9 718240110 0 7 3 3 7 0 3 0 23 0 3 2 2 3 0 2 0 20.00 + 9 719240111 0 3 3 3 3 0 0 0 13 0 2 2 2 2 0 0 0 10.00 + 9 720240112 31313201723 3 0 93 2 5 5 7 6 9 2 0 40.21 + 9 721240113 710 710 7101010 70 3 4 3 4 3 4 4 4 40.10 + 9 7222401143057504317172313250 15 67 48 32 6 6 9 5 241.15 + 9 7232401151313201717232320147 5 5 7 6 6 9 9 7 70.31 + 9 724240116201020131320 710113 7 4 7 5 5 7 3 4 50.21 + 9 7252401172020 31010 3 713 87 7 7 2 4 4 2 3 5 40.10 + 9 726240118 7 3 7 3 7 3 3 0 33 3 2 3 2 3 2 2 0 20.00 + 9 727240119 7 7 7 310 7 7 7 53 3 3 3 2 4 3 3 3 30.10 + 9 72824012010131010 710 0 7 67 4 5 4 4 3 4 0 3 30.10 + 9 729240121 710 3 7 7 3 0 0 37 3 4 2 3 3 2 0 0 20.00 + 9 730240122 3 0 013102013 3 63 2 0 0 5 4 7 5 2 30.10 + 9 731240123 0 723171310 7 7 83 0 3 9 6 5 4 3 3 40.10 + 9 8 1240124 010 7101013 3 7 60 0 4 3 4 4 5 2 3 30.10 + 9 8 2240125 3 3 0 3 3 31023 50 2 2 0 2 2 2 4 9 30.10 + 9 8 324012627202013131017 7127 12 7 7 5 5 4 6 3 60.31 + 9 8 4240127 710 7 3 7101010 63 3 4 3 2 3 4 4 4 30.10 + 9 8 52402 11313132020 7 317107 5 5 5 7 7 3 2 6 50.21 + 9 8 62402 22330401323201713180 9 15 27 5 9 7 6 5 100.63 + 9 8 72402 31717 71310272027137 6 6 3 5 4 12 7 12 70.31 + 9 8 82402 41013 3 3 710 7 3 57 4 5 2 2 3 4 3 2 30.10 + 9 8 92402 52020201713 71013120 7 7 7 6 5 3 4 5 60.21 + 9 8102402 620 0 0 3 71013 7 60 7 0 0 2 3 4 5 3 30.10 + 9 8112402 7 3 310 3 3 7 713 50 2 2 4 2 2 3 3 5 30.10 + 9 8122402 8 7 7101317 3 717 80 3 3 4 5 6 2 3 6 40.10 + 9 8132402 920 7101010 3 7 3 70 7 3 4 4 4 2 3 2 40.10 + 9 814240210 310 7 3 0 3 310 40 2 4 3 2 0 2 2 4 20.00 + 9 815240211 7 010 0 3 0 3 0 23 3 0 4 0 2 0 2 0 10.00 + 9 816240212 3 3 3 3 3 0 3 7 27 2 2 2 2 2 0 2 3 20.00 + 9 817240213 0 3 0 3 7 710 3 33 0 2 0 2 3 3 4 2 20.00 + 9 818240214 7 7 3 3 3 7 710 47 3 3 2 2 2 3 3 4 30.00 + 9 819240215 3 3 72030232730143 2 2 3 7 15 9 12 15 80.42 + 9 8202402163337202017 71723173 18 22 7 7 6 3 6 9 100.52 + 9 82124021717 7271327231317143 6 3 12 5 12 9 5 6 70.42 + 9 8222402181020101010 71310 90 4 7 4 4 4 3 5 4 40.21 + 9 82324021913231310 7 3 7 7 83 5 9 5 4 3 2 3 3 40.10 + 9 82424022010 3 0 3 3 3 3 0 27 4 2 0 2 2 2 2 0 20.00 + 9 825240221 310 0 3 7 7 3 7 40 2 4 0 2 3 3 2 3 20.00 + 9 82624022220101710 3 3 3 0 67 7 4 6 4 2 2 2 0 30.10 + 9 827240223 713 71013272310110 3 5 3 4 5 12 9 4 60.31 + 9 828240224 713 3 0 0 3 3 3 33 3 5 2 0 0 2 2 2 20.00 + 9 829240225 0 310 7 3 3 3 0 30 0 2 4 3 2 2 2 0 20.00 + 9 8302402262013272030574333243 7 5 12 7 15 67 32 18 201.05 + 9 83124022723131313131317 7113 9 5 5 5 5 5 6 3 50.21 + 9 9 12403 113 3 0 713 7 310 57 5 2 0 3 5 3 2 4 30.10 + 9 9 22403 217 7 0 310 7 310 57 6 3 0 2 4 3 2 4 30.10 + 9 9 32403 3 3 3 7 710232023 97 2 2 3 3 4 9 7 9 50.21 + 9 9 42403 420272020131713 3133 7 12 7 7 5 6 5 2 60.31 + 9 9 52403 51010 7 3 0 3 7 3 43 4 4 3 2 0 2 3 2 20.00 + 9 9 62403 6 017 317 7 710 7 67 0 6 2 6 3 3 4 3 30.10 + 9 9 72403 7 0 0 310 710 7 3 40 0 0 2 4 3 4 3 2 20.00 + 9 9 82403 8 7 0 0 0 010 710 33 3 0 0 0 0 4 3 4 20.00 + 9 9 92403 910 3 0 3 7 3 7 3 37 4 2 0 2 3 2 3 2 20.00 + 9 910240310 3 0 0 717 3 7 3 40 2 0 0 3 6 2 3 2 20.00 + 9 911240311 0 7 7 710101310 63 0 3 3 3 4 4 5 4 30.10 + 9 912240312 0 7 7 3 7 3 3 7 37 0 3 3 2 3 2 2 3 20.00 + 9 9132403131013 7 710232013103 4 5 3 3 4 9 7 5 50.21 + 9 91424031430101010 3131017103 15 4 4 4 2 5 4 6 60.21 + 9 915240315 32017 71017 723103 2 7 6 3 4 6 3 9 50.21 + 9 91624031620172013 3 7 7 7 93 7 6 7 5 2 3 3 3 40.21 + 9 917240317233320 7 7 71313123 9 18 7 3 3 3 5 5 70.31 + 9 9182403182010 0 3 7 0 3 0 43 7 4 0 2 3 0 2 0 20.00 + 9 919240319 3 0 7 7 3 3 3 0 27 2 0 3 3 2 2 2 0 20.00 + 9 920240320 0 0 3 713102727 87 0 0 2 3 5 4 12 12 50.21 + 9 92124032130172023171010 0127 15 6 7 9 6 4 4 0 60.31 + 9 922240322 7 0101013 7 0 3 50 3 0 4 4 5 3 0 2 30.00 + 9 923240323 3 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0 0 00.00 + 9 924240324 0 0 0 0 3 7 7 3 20 0 0 0 0 2 3 3 2 10.00 + 9 925240325 010 0 3 7 3 3 0 27 0 4 0 2 3 2 2 0 20.00 + 9 926240326 0 0 0 310 71027 57 0 0 0 2 4 3 4 12 30.10 + 9 9272403272033102010 71313127 7 18 4 7 4 3 5 5 70.31 + 9 9282404 12327331710 31320147 9 12 18 6 4 2 5 7 80.42 + 9 9292404 2 3 0 3 3 3 3 0 0 17 2 0 2 2 2 2 0 0 10.00 + 9 9302404 3171313 717 71713103 6 5 5 3 6 3 6 5 50.21 + 910 12404 4 713 3 3 0 3 3 3 37 3 5 2 2 0 2 2 2 20.00 + 910 22404 5 7 3 0 7 3 0 3 0 23 3 2 0 3 2 0 2 0 20.00 + 910 32404 6 3 0 0 0 3 0 7 0 13 2 0 0 0 2 0 3 0 10.00 + 910 42404 7 023102017 7 3 3 83 0 9 4 7 6 3 2 2 40.10 + 910 52404 8 710 0 3 310 7 7 47 3 4 0 2 2 4 3 3 30.00 + 910 62404 9 0 7 3 3 7 3 0 3 27 0 3 2 2 3 2 0 2 20.00 + 910 7240410 0 0 3 7 3 7 3 3 27 0 0 2 3 2 3 2 2 20.00 + 910 8240411 710 3 0 0 0 013 33 3 4 2 0 0 0 0 5 20.00 + 910 9240412 0 7 7 7 0 3 3 3 30 0 3 3 3 0 2 2 2 20.00 + 91010240413 0 0 0 7 3 0 0 0 10 0 0 0 3 2 0 0 0 10.00 + 910112404142023331313171010140 7 9 18 5 5 6 4 4 70.42 + 91012240415 0 3 7 0 3 0 7 3 23 0 2 3 0 2 0 3 2 20.00 + 91013240416 7 010 7 7 31010 53 3 0 4 3 3 2 4 4 30.10 + 91014240417 0 0 0 3 0 0 3 3 10 0 0 0 2 0 0 2 2 10.00 + 91015240418 0 0201317172310100 0 0 7 5 6 6 9 4 50.21 + 910162404192320 7 3 3 0 0 0 57 9 7 3 2 2 0 0 0 30.10 + 91017240420 0 0 0 7 0 0 0 3 10 0 0 0 3 0 0 0 2 10.00 + 91018240421 0 0 3 3 3 7 0 0 17 0 0 2 2 2 3 0 0 10.00 + 91019240422 0 0 7 01010 3 0 30 0 0 3 0 4 4 2 0 20.00 + 91020240423 7 0 0 0 0 0 0 0 7 3 0 0 0 0 0 0 0 00.00 + 91021240424 0 0 0 310 3 0 3 20 0 0 0 2 4 2 0 2 10.00 + 910222404253027203020173737217 15 12 7 15 7 6 22 22 130.84 + 910232404263733173713 7 3 7153 22 18 6 22 5 3 2 3 100.63 + 91024240427 7 3131317204027140 3 2 5 5 6 7 27 12 80.52 + 910252405 1301313132010 3 0103 15 5 5 5 7 4 2 0 50.21 + 910262405 2 3 0 713 3171710 70 2 0 3 5 2 6 6 4 40.10 + 910272405 3 7 3 71010 313 0 53 3 2 3 4 4 2 5 0 30.10 + 910282405 4 7 31013 3 3 3 3 47 3 2 4 5 2 2 2 2 30.00 + 910292405 5 710 7 320132317100 3 4 3 2 7 5 9 6 50.21 + 910302405 630333327 7 7 7 7150 15 18 18 12 3 3 3 3 90.52 + 910312405 7 3 0 0 3 7 31013 40 2 0 0 2 3 2 4 5 20.00 + 911 12405 81013 7 7 0 7 7 0 50 4 5 3 3 0 3 3 0 30.00 + 911 22405 9 0 32013 3 7 3 0 50 0 2 7 5 2 3 2 0 30.00 + 911 3240510 0 0 0 0 3 0 3 0 7 0 0 0 0 2 0 2 0 00.00 + 911 4240511 0 0 0 0 0 0 7 0 7 0 0 0 0 0 0 3 0 00.00 + 911 5240512 0 3 3 0 3 0 0 0 10 0 2 2 0 2 0 0 0 10.00 + 911 6240513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00.00 + 911 7240514 0 0 0 0 0 0 010 10 0 0 0 0 0 0 0 4 00.00 + 911 82405151013 71723232723143 4 5 3 6 9 9 12 9 70.42 + 911 924051617201713 3 7 0 3 80 6 7 6 5 2 3 0 2 40.10 + 91110240517 7 3 0 0 0 0 3 3 17 3 2 0 0 0 0 2 2 10.00 + 91111240518 7 0 0 0 0 0 0 0 7 3 0 0 0 0 0 0 0 00.00 + 91112240519 0 0 0 0 0 0 010 10 0 0 0 0 0 0 0 4 00.00 + 91113240520 0 3 0 0 3 31310 33 0 2 0 0 2 2 5 4 20.00 + 911142405211310172017101020117 5 4 6 7 6 4 4 7 50.21 + 91115240522231013 3172710 3107 9 4 5 2 6 12 4 2 60.21 + 91116240523 0 0 0 0 0 0 7 0 7 0 0 0 0 0 0 3 0 00.00 + 9111724052410 0 0 0 0 7 7 0 23 4 0 0 0 0 3 3 0 10.00 + 91118240525 0 010 7 3 3 0 7 30 0 0 4 3 2 2 0 3 20.00 + 91119240526 0 3 0 3 3 7 320 40 0 2 0 2 2 3 2 7 20.00 + 9112024052713 0 0 3 7 713 3 47 5 0 0 2 3 3 5 2 20.00 + 911212406 13020201713 32327153 15 7 7 6 5 2 9 12 80.42 + 911222406 227 717 31020 7 3 93 12 3 6 2 4 7 3 2 50.21 + 911232406 3 0 0 0 0 3 0 0 0 3 0 0 0 0 2 0 0 0 00.00 + 911242406 4 3 0 0 727303727130 2 0 0 3 12 15 22 12 80.42 + 911252406 52327171017 3 310110 9 12 6 4 6 2 2 4 60.31 + 911262406 613 7132010231713117 5 3 5 7 4 9 6 5 60.21 + 911272406 7 310 7 3 0 3 3 0 30 2 4 3 2 0 2 2 0 20.00 + 911282406 8 0 01310 3 7 3 3 40 0 0 5 4 2 3 2 2 20.00 + 911292406 9 0 0 3 0 0 0 0 0 3 0 0 2 0 0 0 0 0 00.00 + 91130240610 0 0 3 3 3 0 0 0 10 0 0 2 2 2 0 0 0 10.00 + 912 1240611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00.00 + 912 2240612 0 0 3 3 3 0 3 0 13 0 0 2 2 2 0 2 0 10.00 + 912 3240613 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00.00 + 912 4240614 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00.00 + 912 5240615 0 010 7 7 72320 73 0 0 4 3 3 3 9 7 40.10 + 912 62406162317 7 3 0 0 3 3 57 9 6 3 2 0 0 2 2 30.10 + 912 724061713 0 3 3101013 3 57 5 0 2 2 4 4 5 2 30.10 + 912 8240618 0 0 0 0 0 3 0 3 7 0 0 0 0 0 2 0 2 00.00 + 912 9240619 0 0 0 3 0 0 0 0 3 0 0 0 2 0 0 0 0 00.00 + 91210240620 0 0 3 3 3 3 3 0 17 0 0 2 2 2 2 2 0 10.00 + 91211240621 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00.00 + 91212240622 0 0 7 3 3 71010 40 0 0 3 2 2 3 4 4 20.00 + 91213240623 0 0 7 710 3 7 7 40 0 0 3 3 4 2 3 3 20.00 + 9121424062413302013 710 7 3103 5 15 7 5 3 4 3 2 60.21 + 91215240625 0 0 3 0 3 0 710 23 0 0 2 0 2 0 3 4 10.00 + 912162406262017 7101717 7 3 97 7 6 3 4 6 6 3 2 50.21 + 91217240627 0 3 0101010 7 3 43 0 2 0 4 4 4 3 2 20.00 + 912182407 1 0 010171013 3 0 53 0 0 4 6 4 5 2 0 30.00 + 912192407 2 7 3 3 7 0 0 0 3 23 3 2 2 3 0 0 0 2 20.00 + 912202407 3 7 0 0 7 713 3 0 37 3 0 0 3 3 5 2 0 20.00 + 912212407 410 7 0 3 0 320 7 50 4 3 0 2 0 2 7 3 30.00 + 912222407 5 3 0 3 3 3 71713 50 2 0 2 2 2 3 6 5 30.00 + 912232407 6 31013 7 7 7 713 67 2 4 5 3 3 3 3 5 40.10 + 912242407 7 710 7 3 3 3 0 3 37 3 4 3 2 2 2 0 2 20.00 + 912252407 8 0 0 3 310102023 70 0 0 2 2 4 4 7 9 40.10 + 912262407 9172010 7 317 3 0 77 6 7 4 3 2 6 2 0 40.10 + 91227240710 0 3 3101310 3 0 43 0 2 2 4 5 4 2 0 20.00 + 91228240711 0 0 0 7 0 7 3 0 17 0 0 0 3 0 3 2 0 10.00 + 91229240712 0 0 3 0 0 0 0 0 3 0 0 2 0 0 0 0 0 00.00 + 91230240713 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00.00 + 91231240714 0 0 0 0 3 0 0 0 3 0 0 0 0 2 0 0 0 00.00 diff --git a/pysatSpaceWeather/tests/test_data/Kp_now2020.wdc b/pysatSpaceWeather/tests/test_data/Kp_now2020.wdc new file mode 100644 index 00000000..d8a1b01a --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/Kp_now2020.wdc @@ -0,0 +1,376 @@ +# DOI: https://doi.org/10.5880/Kp.0001 +# LICENCE: CC BY 4.0, please cite: +# Matzka, J., Bronkalla, O., Tornow, K., Elger, K. and Stolle, C., 2021. +# Geomagnetic Kp index. V. 1.0. GFZ Data Services, +# https://doi.org/10.5880/Kp.0001 +# Matzka, J., Stolle, C., Yamazaki, Y., Bronkalla, O. and Morschhauser, A., +# 2021. The geomagnetic Kp index and derived indices of geomagnetic activity. +# Space Weather, https://doi.org/10.1029/2020SW002641 +# The Kp index was introduced by Bartels (1949) and is produced by Geomagnetic +# Observatory Niemegk, GFZ German Research Centre for Geosciences. +20 1 1254222 0 0 0 7 7131010 47 0 0 0 3 3 5 4 4 20.00 +20 1 2254223 0 0 3 7 3 71013 43 0 0 2 3 2 3 4 5 20.00 +20 1 32542241010272310 7 313103 4 4 12 9 4 3 2 5 50.21 +20 1 425422513 7 71010202320110 5 3 3 4 4 7 9 7 50.21 +20 1 52542261313171020233323153 5 5 6 4 7 9 18 9 80.42 +20 1 6254227333017 7 0 72317133 18 15 6 3 0 3 9 6 80.42 +20 1 72543 11017 7 3 7101323 90 4 6 3 2 3 4 5 9 40.21 +20 1 82543 21010 3 717271723113 4 4 2 3 6 12 6 9 60.31 +20 1 92543 32730372320272017200 12 15 22 9 7 12 7 6 110.63 +20 1102543 41310272317171010127 5 4 12 9 6 6 4 4 60.31 +20 1112543 520202013 313 710107 7 7 7 5 2 5 3 4 50.21 +20 1122543 61717 7 7 7 0 3 3 60 6 6 3 3 3 0 2 2 30.10 +20 1132543 7 7 7 7 3 3 0 710 43 3 3 3 2 2 0 3 4 20.00 +20 1142543 8 7 3 3 7 0 3 0 3 27 3 2 2 3 0 2 0 2 20.00 +20 1152543 9 7 0 320 7 7 710 60 3 0 2 7 3 3 3 4 30.10 +20 116254310 7231713 7 7 3 7 83 3 9 6 5 3 3 2 3 40.10 +20 11725431110 3 7 0 31310 3 50 4 2 3 0 2 5 4 2 30.00 +20 118254312131310 0 3 3 3 7 53 5 5 4 0 2 2 2 3 30.10 +20 119254313 310 0 3 0 3 3 3 27 2 4 0 2 0 2 2 2 20.00 +20 120254314 3 3 3 0 0 0 3 3 17 2 2 2 0 0 0 2 2 10.00 +20 121254315 0 0 31313232323100 0 0 2 5 5 9 9 9 50.21 +20 12225431617231310 7 31327113 6 9 5 4 3 2 5 12 60.31 +20 1232543171723 3 3 0 31310 73 6 9 2 2 0 2 5 4 40.10 +20 12425431810 0 0 0 3 3 3 3 23 4 0 0 0 2 2 2 2 20.00 +20 125254319 323 7 3 3 0 3 3 47 2 9 3 2 2 0 2 2 30.00 +20 12625432013 7 0 0 71710 3 57 5 3 0 0 3 6 4 2 30.10 +20 127254321 3 710 3 3 0 3 0 30 2 3 4 2 2 0 2 0 20.00 +20 128254322101310 3 0 31030 80 4 5 4 2 0 2 4 15 40.21 +20 12925432333331713 0131320143 18 18 6 5 0 5 5 7 80.42 +20 1302543242027231723303327200 7 12 9 6 9 15 18 12 110.63 +20 1312543252333172310 3 313127 9 18 6 9 4 2 2 5 70.31 +20 2 125432610 3 7 720171723103 4 2 3 3 7 6 6 9 50.21 +20 2 2254327231010 7 3132023110 9 4 4 3 2 5 7 9 50.21 +20 2 32544 1172010 3 3 710 3 73 6 7 4 2 2 3 4 2 40.10 +20 2 42544 217171010 7101727113 6 6 4 4 3 4 6 12 60.31 +20 2 52544 31320131710 7 7 3 90 5 7 5 6 4 3 3 2 40.21 +20 2 62544 4 727402727234030220 3 12 27 12 12 9 27 15 150.84 +20 2 72544 53030301327272733217 15 15 15 5 12 12 12 18 130.73 +20 2 82544 62713101017131013113 12 5 4 4 6 5 4 5 60.31 +20 2 92544 730171310 7171720130 15 6 5 4 3 6 6 7 60.31 +20 2102544 817131713 7 3 713 90 6 5 6 5 3 2 3 5 40.21 +20 2112544 9273013 3 0 0 713 93 12 15 5 2 0 0 3 5 50.21 +20 21225441017171320 3 0 010 80 6 6 5 7 2 0 0 4 40.10 +20 213254411 3 0 7 7 0 3 717 43 2 0 3 3 0 2 3 6 20.00 +20 2142544121710 3 0 0 0 010 40 6 4 2 0 0 0 0 4 20.00 +20 21525441310 0 02023101010 83 4 0 0 7 9 4 4 4 40.10 +20 21625441420 7 0 7 3 3 3 0 43 7 3 0 3 2 2 2 0 20.00 +20 21725441513 713 710132730120 5 3 5 3 4 5 12 15 60.31 +20 2182544161027372330303327217 4 12 22 9 15 15 18 12 130.84 +20 2192544172340333317171017190 9 27 18 18 6 6 4 6 120.73 +20 2202544182323171017102327150 9 9 6 4 6 4 9 12 70.42 +20 2212544193727273317301733220 22 12 12 18 6 15 6 18 140.84 +20 2222544202720131713202720157 12 7 5 6 5 7 12 7 80.42 +20 223254421 7 3 7 7 3102323 83 3 2 3 3 2 4 9 9 40.21 +20 2242544222017 0 3 3 0 713 63 7 6 0 2 2 0 3 5 30.10 +20 22525442317 3 3 0 7 0 0 3 33 6 2 2 0 3 0 0 2 20.00 +20 226254424 7 3 7 0 7 72013 63 3 2 3 0 3 3 7 5 30.10 +20 22725442517 0 310 7 3 7 7 53 6 0 2 4 3 2 3 3 30.10 +20 228254426171710171710 723117 6 6 4 6 6 4 3 9 60.21 +20 2292544272017202320302040190 7 6 7 9 7 15 7 27 110.63 +20 3 12545 133131323 7 3 313110 18 5 5 9 3 2 2 5 60.31 +20 3 22545 217 7 0102010 310 77 6 3 0 4 7 4 2 4 40.10 +20 3 32545 3201010132020 723123 7 4 4 5 7 7 3 9 60.31 +20 3 42545 4 013101017301713110 0 5 4 4 6 15 6 5 60.31 +20 3 52545 51010101013 7 7 0 67 4 4 4 4 5 3 3 0 30.10 +20 3 62545 610 313201713 0 0 77 4 2 5 7 6 5 0 0 40.10 +20 3 72545 7 310131020 7 3 3 70 2 4 5 4 7 3 2 2 40.10 +20 3 82545 8131713 3 3131717 97 5 6 5 2 2 5 6 6 50.21 +20 3 92545 9 320171010131710100 2 7 6 4 4 5 6 4 50.21 +20 31025451020 313 7 7 7 013 70 7 2 5 3 3 3 0 5 40.10 +20 31125451117 3 3 7 7 3 0 3 43 6 2 2 3 3 2 0 2 20.00 +20 3122545121013171013172710117 4 5 6 4 5 6 12 4 60.31 +20 3132545132027202010171010133 7 12 7 7 4 6 4 4 60.31 +20 314254514 3 0 3 7 7 310 3 37 2 0 2 3 3 2 4 2 20.00 +20 315254515 3 3 31710 71717 77 2 2 2 6 4 3 6 6 40.10 +20 31625451620 3 713131017 7 90 7 2 3 5 5 4 6 3 40.21 +20 31725451720 3131713171017110 7 2 5 6 5 6 4 6 50.21 +20 318254518 3 7 7 317233017107 2 3 3 2 6 9 15 6 60.31 +20 319254519432323202017 717170 32 9 9 7 7 6 3 6 100.63 +20 320254520271320 0 7202027133 12 5 7 0 3 7 7 12 70.31 +20 3212545211723302013171017147 6 9 15 7 5 6 4 6 70.42 +20 3222545222323131017172017140 9 9 5 4 6 6 7 6 60.31 +20 3232545232333172723173323197 9 18 6 12 9 6 18 9 110.63 +20 324254524271010 7 0 0 0 3 57 12 4 4 3 0 0 0 2 30.10 +20 32525452517 0 3 710 0 720 63 6 0 2 3 4 0 3 7 30.10 +20 32625452610 3 7101017 727 90 4 2 3 4 4 6 3 12 50.21 +20 327254527201310 7102017 3100 7 5 4 3 4 7 6 2 50.21 +20 3282546 1 0 7131713 31323 90 0 3 5 6 5 2 5 9 40.21 +20 3292546 210 3202030231710133 4 2 7 7 15 9 6 4 70.31 +20 3302546 31320131013303337170 5 7 5 4 5 15 18 22 100.63 +20 3312546 43340372027202313213 18 27 22 7 12 7 9 5 130.84 +20 4 12546 5202713 7 0101020107 7 12 5 3 0 4 4 7 50.21 +20 4 22546 61323231310 72023133 5 9 9 5 4 3 7 9 60.31 +20 4 32546 72323 7 7 7132037137 9 9 3 3 3 5 7 22 80.42 +20 4 42546 820 3 313 3 71317 80 7 2 2 5 2 3 5 6 40.10 +20 4 52546 92013 713 7 7 313 83 7 5 3 5 3 3 2 5 40.10 +20 4 62546101010 7 310 0 0 3 43 4 4 3 2 4 0 0 2 20.00 +20 4 7254611 3 0 0 3 0 32020 50 2 0 0 2 0 2 7 7 20.00 +20 4 82546121727202330331733200 6 12 7 9 15 18 6 18 110.73 +20 4 925461317 3 7 713 31313 77 6 2 3 3 5 2 5 5 40.10 +20 410254614 0 71017102010 7 80 0 3 4 6 4 7 4 3 40.10 +20 411254615101010 720272023127 4 4 4 3 7 12 7 9 60.31 +20 4122546161017171023132313127 4 6 6 4 9 5 9 5 60.31 +20 4132546171017 71017131317103 4 6 3 4 6 5 5 6 50.21 +20 41425461823332717 7 3 323137 9 18 12 6 3 2 2 9 80.42 +20 4152546193023171010 7 713117 15 9 6 4 4 3 3 5 60.31 +20 416254620201010 3 31310 3 73 7 4 4 2 2 5 4 2 40.10 +20 41725462110 31010 7 3 313 60 4 2 4 4 3 2 2 5 30.10 +20 41825462213171310 7 3 0 3 67 5 6 5 4 3 2 0 2 30.10 +20 419254623 0 0 3 0 7 3 0 3 17 0 0 2 0 3 2 0 2 10.00 +20 420254624203033474323 3 7207 7 15 18 39 32 9 2 3 160.94 +20 4212546251317101723332023157 5 6 4 6 9 18 7 9 80.42 +20 4222546263030131013101313133 15 15 5 4 5 4 5 5 70.42 +20 423254627 310 310 3 0 320 53 2 4 2 4 2 0 2 7 30.10 +20 4242547 123 7 71010202030127 9 3 3 4 4 7 7 15 60.31 +20 4252547 2202017 3 710 0 0 77 7 7 6 2 3 4 0 0 40.10 +20 4262547 3 720 71317172023123 3 7 3 5 6 6 7 9 60.31 +20 4272547 4271710 713201710120 12 6 4 3 5 7 6 4 60.31 +20 4282547 52713 3171013 713103 12 5 2 6 4 5 3 5 50.21 +20 4292547 613 3 0 3 7 3 7 7 43 5 2 0 2 3 2 3 3 20.00 +20 4302547 713 3 3 3 0 0 0 0 23 5 2 2 2 0 0 0 0 10.00 +20 5 12547 8 31023171710 3 7 90 2 4 9 6 6 4 2 3 40.21 +20 5 22547 9 31717131010 710 87 2 6 6 5 4 4 3 4 40.10 +20 5 3254710 713 7 3 3 31727 80 3 5 3 2 2 2 6 12 40.21 +20 5 42547111713 7131710 313 93 6 5 3 5 6 4 2 5 40.21 +20 5 52547121317131310171320117 5 6 5 5 4 6 5 7 50.21 +20 5 62547133023 3 3 7 3 3 3 77 15 9 2 2 3 2 2 2 50.21 +20 5 7254714 710171010 3 3 7 67 3 4 6 4 4 2 2 3 40.10 +20 5 825471513 3 7 710 0 010 50 5 2 3 3 4 0 0 4 30.00 +20 5 925471610 0 0 3 3 3 3 0 23 4 0 0 2 2 2 2 0 20.00 +20 510254717 3 0 3 3 3101323 60 2 0 2 2 2 4 5 9 30.10 +20 51125471813201713 3 3 3 7 80 5 7 6 5 2 2 2 3 40.10 +20 512254719 7 7 7 3 7 7 723 67 3 3 3 2 3 3 3 9 40.10 +20 51325472013 3 0 7 710 713 60 5 2 0 3 3 4 3 5 30.10 +20 514254721 7 7 3 3 3 3 3 3 33 3 3 2 2 2 2 2 2 20.00 +20 515254722 7101013 3 7 0 3 53 3 4 4 5 2 3 0 2 30.10 +20 516254723 3 3 3 71710 3 7 53 2 2 2 3 6 4 2 3 30.10 +20 517254724 3 3 010 3 7 310 40 2 2 0 4 2 3 2 4 20.00 +20 518254725 3 0 0 3 72017 7 57 2 0 0 2 3 7 6 3 30.10 +20 5192547261013172017 3 713100 4 5 6 7 6 2 3 5 50.21 +20 52025472713 3 0 3 3 3 7 7 40 5 2 0 2 2 2 3 3 20.00 +20 5212548 1132010 7 7131320103 5 7 4 3 3 5 5 7 50.21 +20 5222548 2171310 3202023 7113 6 5 4 2 7 7 9 3 50.21 +20 5232548 3131710 3 3 7 3 0 57 5 6 4 2 2 3 2 0 30.10 +20 5242548 410 3 0 3202317 7 83 4 2 0 2 7 9 6 3 40.10 +20 5252548 5201013 717 71020103 7 4 5 3 6 3 4 7 50.21 +20 5262548 613 7 7 7 3 3 317 60 5 3 3 3 2 2 2 6 30.10 +20 5272548 7 7 3 31010 713 3 57 3 2 2 4 4 3 5 2 30.10 +20 5282548 8 710 7 310 7 3 7 53 3 4 3 2 4 3 2 3 30.10 +20 5292548 9 7 3 3 3 7 0 317 43 3 2 2 2 3 0 2 6 20.00 +20 5302548102027333330233030227 7 12 18 18 15 9 15 15 140.84 +20 5312548111010 3 7 710 310 60 4 4 2 3 3 4 2 4 30.10 +20 6 1254812 713 710 3102727103 3 5 3 4 2 4 12 12 60.31 +20 6 22548131730131310 72013123 6 15 5 5 4 3 7 5 60.31 +20 6 32548141010 0 710 7 3 3 50 4 4 0 3 4 3 2 2 30.00 +20 6 4254815 7 313 3 3101717 73 3 2 5 2 2 4 6 6 40.10 +20 6 5254816 3 3 31313 7 7 3 53 2 2 2 5 5 3 3 2 30.10 +20 6 6254817 7 7 31013 3 3 3 50 3 3 2 4 5 2 2 2 30.10 +20 6 7254818 713 7 710233723127 3 5 3 3 4 9 22 9 70.42 +20 6 82548191720 7 3 710 7 3 73 6 7 3 2 3 4 3 2 40.10 +20 6 9254820 7 7 0 3 7102027 80 3 3 0 2 3 4 7 12 40.10 +20 6102548211723232710101013133 6 9 9 12 4 4 4 5 70.31 +20 6112548221713 7 3 7 3 3 0 53 6 5 3 2 3 2 2 0 30.10 +20 612254823 71010 7 7 7 3 3 53 3 4 4 3 3 3 2 2 30.10 +20 613254824 0 7 7 310 3 3 3 37 0 3 3 2 4 2 2 2 20.00 +20 614254825 3 3 3 3 3 3 7 7 33 2 2 2 2 2 2 3 3 20.00 +20 615254826 0 7101710 7 7 3 60 0 3 4 6 4 3 3 2 30.10 +20 616254827 7101710 7172317107 3 4 6 4 3 6 9 6 50.21 +20 6172549 117 7 7101710 0 0 67 6 3 3 4 6 4 0 0 30.10 +20 6182549 2 3171010131010 7 80 2 6 4 4 5 4 4 3 40.10 +20 6192549 3 710 713 7101720 90 3 4 3 5 3 4 6 7 40.21 +20 6202549 423202010 3 7 313100 9 7 7 4 2 3 2 5 50.21 +20 6212549 5 7 7 31010 7 7 3 53 3 3 2 4 4 3 3 2 30.10 +20 6222549 6 3 3 7 7 3 3 313 43 2 2 3 3 2 2 2 5 30.00 +20 6232549 7 7 313 3 7 3 313 53 3 2 5 2 3 2 2 5 30.10 +20 6242549 813131010 7 7 3 7 70 5 5 4 4 3 3 2 3 40.10 +20 6252549 9 710 3 7 3 7 013 50 3 4 2 3 2 3 0 5 30.00 +20 62625491017 3 3 710102330103 6 2 2 3 4 4 9 15 60.31 +20 6272549112713132323 3 320127 12 5 5 9 9 2 2 7 60.31 +20 6282549121313 3 7 0 3 310 53 5 5 2 3 0 2 2 4 30.10 +20 62925491310 7 0 3 3 3 7 7 40 4 3 0 2 2 2 3 3 20.00 +20 630254914201717 3 0 7 013 77 7 6 6 2 0 3 0 5 40.10 +20 7 1254915 7101010 3 32323 90 3 4 4 4 2 2 9 9 50.21 +20 7 2254916 7 7 3 3 710 7 7 50 3 3 2 2 3 4 3 3 30.10 +20 7 3254917 3101010 7 7 7 7 60 2 4 4 4 3 3 3 3 30.10 +20 7 42549181010131320102330130 4 4 5 5 7 4 9 15 70.31 +20 7 52549191727302713101727167 6 12 15 12 5 4 6 12 90.52 +20 7 6254920131317 7131313 3 93 5 5 6 3 5 5 5 2 40.21 +20 7 7254921 71320 7 3 3 310 67 3 5 7 3 2 2 2 4 40.10 +20 7 8254922 0 7 3 0 3 3 3 7 27 0 3 2 0 2 2 2 3 20.00 +20 7 9254923 7 310 7 7 7 7 3 50 3 2 4 3 3 3 3 2 30.10 +20 710254924 3 317 3 3 3 3 3 40 2 2 6 2 2 2 2 2 20.00 +20 71125492510 3 3 3 3 3 7 7 40 4 2 2 2 2 2 3 3 20.00 +20 712254926 3 3 3 7 3 3 0 7 30 2 2 2 3 2 2 0 3 20.00 +20 71325492713172017 7101327123 5 6 7 6 3 4 5 12 60.31 +20 7142550 1373737171710 3 7163 22 22 22 6 6 4 2 3 110.63 +20 7152550 2 31717131720 3 0 90 2 6 6 5 6 7 2 0 40.10 +20 7162550 3 0 3 31710101010 63 0 2 2 6 4 4 4 4 30.10 +20 7172550 410 7 3 7 7131317 77 4 3 2 3 3 5 5 6 40.10 +20 7182550 51310 7 7 7 7 313 67 5 4 3 3 3 3 2 5 40.10 +20 7192550 6 0 7101010 7 717 67 0 3 4 4 4 3 3 6 30.10 +20 7202550 7 71013 3 3 3 310 53 3 4 5 2 2 2 2 4 30.10 +20 7212550 8101310 3 710 717 77 4 5 4 2 3 4 3 6 40.10 +20 7222550 910 7 3 3 31310 3 53 4 3 2 2 2 5 4 2 30.10 +20 723255010 7 3 7 710 7 0 7 47 3 2 3 3 4 3 0 3 30.00 +20 724255011 723272023332327183 3 9 12 7 9 18 9 12 100.63 +20 7252550123727231717131340187 22 12 9 6 6 5 5 27 120.73 +20 72625501313 3 3 7 3 0 010 40 5 2 2 3 2 0 0 4 20.00 +20 727255014 7 710 3 710 710 60 3 3 4 2 3 4 3 4 30.10 +20 728255015231010 3 710 7 7 77 9 4 4 2 3 4 3 3 40.10 +20 72925501620 717 310 7 7 7 77 7 3 6 2 4 3 3 3 40.10 +20 730255017131020 7 3 3 0 7 63 5 4 7 3 2 2 0 3 30.10 +20 7312550181010 7101310 710 77 4 4 3 4 5 4 3 4 40.10 +20 8 1255019 3 7 7 310 7 7 7 50 2 3 3 2 4 3 3 3 30.10 +20 8 2255020 3 7102733271727150 2 3 4 12 18 12 6 12 90.52 +20 8 32550213733303020303333247 22 18 15 15 7 15 18 18 160.94 +20 8 42550222033171710101317137 7 18 6 6 4 4 5 6 70.42 +20 8 5255023171310 7 7101713 93 6 5 4 3 3 4 6 5 40.21 +20 8 6255024 713 3 71717 720 90 3 5 2 3 6 6 3 7 40.21 +20 8 72550251310 3 0 3 3 720 60 5 4 2 0 2 2 3 7 30.10 +20 8 82550262017131013 710 3 93 7 6 5 4 5 3 4 2 40.21 +20 8 9255027 3 3 3 7 3 0 0 7 27 2 2 2 3 2 0 0 3 20.00 +20 8102551 1 7 3 3 3 0 3 010 30 3 2 2 2 0 2 0 4 20.00 +20 8112551 21310 3 3 3 0 3 3 40 5 4 2 2 2 0 2 2 20.00 +20 8122551 3 31310 710 3 7 3 57 2 5 4 3 4 2 3 2 30.10 +20 8132551 417 7 3 310 3 313 60 6 3 2 2 4 2 2 5 30.10 +20 8142551 51017 3 3 7 71010 67 4 6 2 2 3 3 4 4 40.10 +20 8152551 6 0 010 7 3 3 3 7 33 0 0 4 3 2 2 2 3 20.00 +20 8162551 7101310 7 3 3 0 7 53 4 5 4 3 2 2 0 3 30.10 +20 8172551 8 7 7 713 7 3 310 57 3 3 3 5 3 2 2 4 30.10 +20 8182551 91013171717 31030117 4 5 6 6 6 2 4 15 60.31 +20 8192551102723 7 3 0 0 310 73 12 9 3 2 0 0 2 4 40.10 +20 820255111 7 7 0 710 3 3 7 43 3 3 0 3 4 2 2 3 20.00 +20 82125511210 3 7 3 3 71713 63 4 2 3 2 2 3 6 5 30.10 +20 8222551131020201713131323130 4 7 7 6 5 5 5 9 60.31 +20 8232551142020131720131023137 7 7 5 6 7 5 4 9 60.31 +20 8242551151010 3 0 3 7 3 0 37 4 4 2 0 2 3 2 0 20.00 +20 825255116 3 3 7 3 3 7 7 7 40 2 2 3 2 2 3 3 3 20.00 +20 82625511717231020 7231317130 6 9 4 7 3 9 5 6 60.31 +20 8272551182313201730101010133 9 5 7 6 15 4 4 4 70.31 +20 828255119 0 3 71727431727140 0 2 3 6 12 32 6 12 90.52 +20 8292551203327372313203333220 18 12 22 9 5 7 18 18 140.84 +20 830255121203720171720 730167 7 22 7 6 6 7 3 15 90.52 +20 8312551223343274740403730297 18 32 12 39 27 27 22 15 241.26 +20 9 12551232743303027372730250 12 32 15 15 12 22 12 15 170.94 +20 9 22551242727232723201317177 12 12 9 12 9 7 5 6 90.52 +20 9 3255125 0 010 710 7 017 50 0 0 4 3 4 3 0 6 20.00 +20 9 425512627171320171720 7137 12 6 5 7 6 6 7 3 60.31 +20 9 52551272017202020 310 7117 7 6 7 7 7 2 4 3 50.21 +20 9 62552 12010 310 7 0 717 73 7 4 2 4 3 0 3 6 40.10 +20 9 72552 2101313 7 7 7 3 0 60 4 5 5 3 3 3 2 0 30.10 +20 9 82552 3 7 3 710 71010 0 53 3 2 3 4 3 4 4 0 30.10 +20 9 92552 4 7 0 0 0 0 0 0 0 7 3 0 0 0 0 0 0 0 00.00 +20 9102552 5 0 0 0 0 0 010 3 13 0 0 0 0 0 0 4 2 10.00 +20 9112552 6 0 0 3 3 0 71010 33 0 0 2 2 0 3 4 4 20.00 +20 9122552 717202317 3 713 7107 6 7 9 6 2 3 5 3 50.21 +20 9132552 8131313 310131330110 5 5 5 2 4 5 5 15 60.31 +20 9142552 9333327232310 720177 18 18 12 9 9 4 3 7 100.63 +20 91525521023231313 0 71313107 9 9 5 5 0 3 5 5 50.21 +20 916255211 0 31010 310 7 0 43 0 2 4 4 2 4 3 0 20.00 +20 917255212 0 31710 3 0 313 50 0 2 6 4 2 0 2 5 30.00 +20 91825521310 3 0 7171310 0 60 4 2 0 3 6 5 4 0 30.10 +20 919255214 013 7 3 010 7 0 40 0 5 3 2 0 4 3 0 20.00 +20 920255215 0 0 02310 7 713 60 0 0 0 9 4 3 3 5 30.10 +20 921255216 7 3 0 3 3 010 7 33 3 2 0 2 2 0 4 3 20.00 +20 92225521717272017 7 7 3 7103 6 12 7 6 3 3 2 3 50.21 +20 9232552181710201737233723183 6 4 7 6 22 9 22 9 110.63 +20 924255219303753333327 317233 15 22 56 18 18 12 2 6 191.05 +20 9252552203033302320433340253 15 18 15 9 7 32 18 27 181.05 +20 9262552214043374047272033287 27 32 22 27 39 12 7 18 231.15 +20 9272552222340202017305057257 9 27 7 7 6 15 48 67 231.15 +20 9282552234750403337375050343 39 48 27 18 22 22 48 48 341.36 +20 9292552244333302727272733247 32 18 15 12 12 12 12 18 160.94 +20 9302552254037332320173033233 27 22 18 9 7 6 15 18 150.94 +2010 12552262313203027302317183 9 5 7 15 12 15 9 6 100.52 +2010 22552272323132720172017160 9 9 5 12 7 6 7 6 80.42 +2010 32553 120171317 7 7 710 97 7 6 5 6 3 3 3 4 50.21 +2010 42553 2 717 31017 7 313 77 3 6 2 4 6 3 2 5 40.10 +2010 52553 3 3 7101323334023153 2 3 4 5 9 18 27 9 100.52 +2010 62553 4273710 710 3 3 7103 12 22 4 3 4 2 2 3 60.31 +2010 72553 5 7 7 3102017 713 83 3 3 2 4 7 6 3 5 40.10 +2010 82553 610 0 7 3 0 3 3 7 33 4 0 3 2 0 2 2 3 20.00 +2010 92553 7 7 0 3 0 0 0 0 0 10 3 0 2 0 0 0 0 0 10.00 +2010102553 8 0 0 0 7 0 3 0 0 10 0 0 0 3 0 2 0 0 10.00 +2010112553 9 0 0 3 3 3 7 313 33 0 0 2 2 2 3 2 5 20.00 +201012255310 7 3 0 0 7 7 713 43 3 2 0 0 3 3 3 5 20.00 +2010132553111010 3 3 0 7 3 3 40 4 4 2 2 0 3 2 2 20.00 +201014255312 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00.00 +201015255313 0 0 0 0 0 0 713 20 0 0 0 0 0 0 3 5 10.00 +2010162553141310 710 7 3 717 73 5 4 3 4 3 2 3 6 40.10 +20101725531510172010 7 01313 90 4 6 7 4 3 0 5 5 40.10 +201018255316 3 3 3 0 0 0 713 30 2 2 2 0 0 0 3 5 20.00 +201019255317 710102030172017130 3 4 4 7 15 6 7 6 60.31 +20102025531823171010 0 01310 83 9 6 4 4 0 0 5 4 40.10 +2010212553192723372010 71020153 12 9 22 7 4 3 4 7 80.52 +20102225532033 7 3 3 7 31717 90 18 3 2 2 3 2 6 6 50.21 +2010232553211313 3 317274747170 5 5 2 2 6 12 39 39 140.84 +2010242553223743403317332723253 22 32 27 18 6 18 12 9 181.05 +2010252553232710202737334023217 12 4 7 12 22 18 27 9 140.84 +2010262553242037332733203030230 7 22 18 12 18 7 15 15 140.84 +20102725532517133027 7 32320140 6 5 15 12 3 2 9 7 70.42 +2010282553262027132027333020190 7 12 5 7 12 18 15 7 100.63 +2010292553272027273323371720203 7 12 12 18 9 22 6 7 120.73 +2010302554 11713 710 3 01023 83 6 5 3 4 2 0 4 9 40.10 +2010312554 2101327201720 0 7113 4 5 12 7 6 7 0 3 60.21 +2011 12554 3 3 7172330302313147 2 3 6 9 15 15 9 5 80.42 +2011 22554 4 0 0 7 3 0 0 7 7 23 0 0 3 2 0 0 3 3 10.00 +2011 32554 517 0 0 3 3 0 010 33 6 0 0 2 2 0 0 4 20.00 +2011 42554 6 7 3 3 3 3 3 3 0 27 3 2 2 2 2 2 2 0 20.00 +2011 52554 7 0 0 3 717 71020 63 0 0 2 3 6 3 4 7 30.10 +2011 62554 81720131720272317153 6 7 5 6 7 12 9 6 70.42 +2011 72554 913 7 713 3202730120 5 3 3 5 2 7 12 15 60.31 +2011 8255410131720101010 7 0 87 5 6 7 4 4 4 3 0 40.10 +2011 9255411 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00.00 +201110255412 0 0 3 3 0 0 0 0 7 0 0 2 2 0 0 0 0 00.00 +201111255413 0 0 3 3 3131020 53 0 0 2 2 2 5 4 7 30.00 +20111225541417 01713 7 3 3 7 67 6 0 6 5 3 2 2 3 30.10 +201113255415101013 7 3 0 3 7 53 4 4 5 3 2 0 2 3 30.10 +201114255416 0 0 3 0 7 31710 40 0 0 2 0 3 2 6 4 20.00 +2011152554171720 0 0 3 7 0 0 47 6 7 0 0 2 3 0 0 20.00 +201116255418 3 0 0 0 3 3 0 3 13 2 0 0 0 2 2 0 2 10.00 +201117255419 3 3 01010 0 010 37 2 2 0 4 4 0 0 4 20.00 +20111825542013 310 3 0 0 7 7 43 5 2 4 2 0 0 3 3 20.00 +201119255421 3 0 313 0 3 317 43 2 0 2 5 0 2 2 6 20.00 +20112025542227301723 7 31710133 12 15 6 9 3 2 6 4 70.42 +201121255423231713 730273337187 9 6 5 3 15 12 18 22 110.63 +2011222554242740434347433733313 12 27 32 32 39 32 22 18 271.26 +20112325542520272323 7131717147 7 12 9 9 3 5 6 6 70.42 +2011242554261310 0 7 7 7 310 57 5 4 0 3 3 3 2 4 30.10 +2011252554271027 71310131730127 4 12 3 5 4 5 6 15 70.31 +2011262555 117 3101023202017120 6 2 4 4 9 7 7 6 60.31 +2011272555 2102323232713 3 7130 4 9 9 9 12 5 2 3 70.31 +2011282555 33333271720131713173 18 18 12 6 7 5 6 5 100.52 +2011292555 4 01720171313 3 3 87 0 6 7 6 5 5 2 2 40.10 +2011302555 510333320 710 313130 4 18 18 7 3 4 2 5 80.42 +2012 12555 613 0 0 0 0 0 010 23 5 0 0 0 0 0 0 4 10.00 +2012 22555 713 713 7 0 0 3 7 50 5 3 5 3 0 0 2 3 30.00 +2012 32555 8 0 0 0 31017 3 0 33 0 0 0 2 4 6 2 0 20.00 +2012 42555 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00.00 +2012 5255510 0 0 31020102710 80 0 0 2 4 7 4 12 4 40.10 +2012 62555112010101017 71720110 7 4 4 4 6 3 6 7 50.21 +2012 7255512 7 0 7 7 0 3 0 0 23 3 0 3 3 0 2 0 0 10.00 +2012 8255513 713131310 0 313 73 3 5 5 5 4 0 2 5 40.10 +2012 9255514203020 7 0133013133 7 15 7 3 0 5 15 5 70.42 +201210255515332710 7 3 31323120 18 12 4 3 2 2 5 9 70.31 +20121125551630231310 3 71713117 15 9 5 4 2 3 6 5 60.31 +20121225551713 710 7 3 71017 73 5 3 4 3 2 3 4 6 40.10 +2012132555183010 0 0 7 31710 77 15 4 0 0 3 2 6 4 40.10 +201214255519 0 3 0 3 0 71313 40 0 2 0 2 0 3 5 5 20.00 +20121525552017 010 0 0 0 710 43 6 0 4 0 0 0 3 4 20.00 +20121625552110 3 0 0 3 3 3 7 30 4 2 0 0 2 2 2 3 20.00 +201217255522 7 3 0 0 0 3 0 3 17 3 2 0 0 0 2 0 2 10.00 +201218255523 3 0 3 3 3 7 3 3 27 2 0 2 2 2 3 2 2 20.00 +20121925552413 7132017 71310100 5 3 5 7 6 3 5 4 50.21 +20122025552510 713101010 313 77 4 3 5 4 4 4 2 5 40.10 +2012212555262033232317 72043187 7 18 9 9 6 3 7 32 110.73 +2012222555273333302727232713213 18 18 15 12 12 9 12 5 130.73 +2012232556 13043272720101317187 15 32 12 12 7 4 5 6 120.73 +2012242556 2 727202327301317163 3 12 7 9 12 15 5 6 90.52 +2012252556 3231710102010 0 0 90 9 6 4 4 7 4 0 0 40.10 +2012262556 4 02010 3 7 72020 87 0 7 4 2 3 3 7 7 40.10 +2012272556 51317 31713 71017 97 5 6 2 6 5 3 4 6 50.21 +2012282556 62023232320131313150 7 9 9 9 7 5 5 5 70.42 +2012292556 723271010 7131323127 9 12 4 4 3 5 5 9 60.31 +2012302556 82327172017 7 727143 9 12 6 7 6 3 3 12 70.42 +2012312556 92310 713 3 7 3 7 73 9 4 3 5 2 3 2 3 40.10 diff --git a/pysatSpaceWeather/tests/test_data/SN_2009-01.txt b/pysatSpaceWeather/tests/test_data/SN_2009-01.txt new file mode 100644 index 00000000..dda6945f --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/SN_2009-01.txt @@ -0,0 +1 @@ +{"meta":{"source":"GFZ Potsdam","license":"CC BY 4.0"},"datetime":["2009-01-01T00:00:00Z","2009-01-02T00:00:00Z","2009-01-03T00:00:00Z","2009-01-04T00:00:00Z","2009-01-05T00:00:00Z","2009-01-06T00:00:00Z","2009-01-07T00:00:00Z","2009-01-08T00:00:00Z","2009-01-09T00:00:00Z","2009-01-10T00:00:00Z","2009-01-11T00:00:00Z","2009-01-12T00:00:00Z","2009-01-13T00:00:00Z","2009-01-14T00:00:00Z","2009-01-15T00:00:00Z","2009-01-16T00:00:00Z","2009-01-17T00:00:00Z","2009-01-18T00:00:00Z","2009-01-19T00:00:00Z","2009-01-20T00:00:00Z","2009-01-21T00:00:00Z","2009-01-22T00:00:00Z","2009-01-23T00:00:00Z","2009-01-24T00:00:00Z","2009-01-25T00:00:00Z","2009-01-26T00:00:00Z","2009-01-27T00:00:00Z","2009-01-28T00:00:00Z","2009-01-29T00:00:00Z","2009-01-30T00:00:00Z","2009-01-31T00:00:00Z","2009-02-01T00:00:00Z"],"SN":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,7.0,9.0,10.0,8.0,0.0,0.0,0.0,0.0,0.0,0.0,7.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"SNstatus":["def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def","def"]} diff --git a/pysatSpaceWeather/tests/test_data/ace-epam.txt b/pysatSpaceWeather/tests/test_data/ace-epam.txt new file mode 100644 index 00000000..9e3f5900 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/ace-epam.txt @@ -0,0 +1,42 @@ +:Data_list: ace_epam_5m.txt +:Created: 2023 Nov 01 1731 UT +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comments and suggestions to SWPC.Webmaster@noaa.gov +# +# Units: Differential Flux particles/cm2-s-ster-MeV +# Units: Anisotropy Index 0.0 - 2.0 +# Status(S): 0 = nominal, 4,6,7,8 = bad data, unable to process, 9 = no data +# Missing data values: -1.00e+05, index = -1.00 +# Source: ACE Satellite - Electron, Proton, and Alpha Monitor +# +# +# 5-minute averaged Real-time Differential Electron and Proton Flux +# +# Modified Seconds ---------------------------- Differential Flux --------------------------- +# UT Date Time Julian of the ----- Electron ----- ------------------- Protons keV ------------------- Anis. +# YR MO DA HHMM Day Day S 38-53 175-315 S 47-68 115-195 310-580 795-1193 1060-1900 Index +#------------------------------------------------------------------------------------------------------------------- +2023 11 01 1530 60249 55800 0 3.97e+03 1.63e+01 0 4.91e+03 3.40e+02 6.26e+01 2.15e+01 5.51e+00 -1.00 +2023 11 01 1535 60249 56100 0 3.90e+03 1.35e+01 0 5.26e+03 3.61e+02 6.54e+01 1.95e+01 5.26e+00 -1.00 +2023 11 01 1540 60249 56400 0 3.67e+03 1.37e+01 0 5.23e+03 3.88e+02 7.22e+01 2.08e+01 5.92e+00 -1.00 +2023 11 01 1545 60249 56700 0 3.60e+03 1.39e+01 0 5.28e+03 4.09e+02 7.04e+01 1.93e+01 6.16e+00 -1.00 +2023 11 01 1550 60249 57000 0 3.70e+03 1.34e+01 0 5.21e+03 3.97e+02 6.81e+01 1.95e+01 6.39e+00 -1.00 +2023 11 01 1555 60249 57300 0 3.77e+03 1.31e+01 0 5.59e+03 3.95e+02 6.53e+01 1.98e+01 6.52e+00 -1.00 +2023 11 01 1600 60249 57600 0 3.72e+03 1.31e+01 0 5.21e+03 3.11e+02 5.62e+01 2.19e+01 4.94e+00 -1.00 +2023 11 01 1605 60249 57900 0 4.14e+03 1.28e+01 0 4.86e+03 3.30e+02 5.89e+01 2.13e+01 4.95e+00 -1.00 +2023 11 01 1610 60249 58200 0 4.22e+03 1.80e+01 0 5.22e+03 3.35e+02 6.05e+01 2.24e+01 5.62e+00 -1.00 +2023 11 01 1615 60249 58500 0 4.13e+03 1.53e+01 0 5.06e+03 3.21e+02 6.09e+01 2.14e+01 5.57e+00 -1.00 +2023 11 01 1620 60249 58800 0 3.74e+03 9.66e+00 0 4.91e+03 3.49e+02 6.16e+01 2.36e+01 6.00e+00 -1.00 +2023 11 01 1625 60249 59100 0 3.41e+03 2.13e+01 0 4.76e+03 3.46e+02 6.78e+01 1.72e+01 7.23e+00 -1.00 +2023 11 01 1630 60249 59400 9 -1.00e+05 -1.00e+05 0 5.36e+03 3.32e+02 5.52e+01 1.46e+01 6.49e+00 -1.00 +2023 11 01 1635 60249 59700 0 3.86e+03 1.23e+01 0 5.16e+03 3.39e+02 6.06e+01 2.37e+01 6.02e+00 -1.00 +2023 11 01 1640 60249 60000 0 3.65e+03 1.77e+01 0 4.97e+03 3.31e+02 6.25e+01 2.29e+01 5.72e+00 -1.00 +2023 11 01 1645 60249 60300 0 3.77e+03 1.70e+01 0 4.60e+03 3.56e+02 6.35e+01 2.85e+01 4.24e+00 -1.00 +2023 11 01 1650 60249 60600 0 3.57e+03 1.28e+01 0 4.94e+03 3.96e+02 6.15e+01 2.50e+01 6.18e+00 -1.00 +2023 11 01 1655 60249 60900 0 3.50e+03 1.65e+01 0 4.77e+03 3.21e+02 6.24e+01 1.99e+01 5.02e+00 -1.00 +2023 11 01 1700 60249 61200 0 4.15e+03 1.12e+01 0 5.43e+03 3.59e+02 6.32e+01 2.17e+01 5.51e+00 -1.00 +2023 11 01 1705 60249 61500 0 3.73e+03 1.60e+01 0 5.11e+03 3.52e+02 6.38e+01 1.99e+01 5.50e+00 -1.00 +2023 11 01 1710 60249 61800 0 3.44e+03 1.71e+01 0 5.15e+03 3.66e+02 6.57e+01 2.10e+01 5.37e+00 -1.00 +2023 11 01 1715 60249 62100 0 3.71e+03 1.11e+01 0 4.91e+03 3.39e+02 6.19e+01 2.07e+01 5.53e+00 -1.00 +2023 11 01 1720 60249 62400 0 3.90e+03 1.54e+01 0 5.19e+03 3.45e+02 6.20e+01 2.03e+01 5.56e+00 -1.00 +2023 11 01 1725 60249 62700 0 3.63e+03 1.11e+01 0 5.16e+03 3.16e+02 5.66e+01 2.10e+01 5.39e+00 -1.00 diff --git a/pysatSpaceWeather/tests/test_data/ace-magnetometer.txt b/pysatSpaceWeather/tests/test_data/ace-magnetometer.txt new file mode 100644 index 00000000..bd2af0dd --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/ace-magnetometer.txt @@ -0,0 +1,139 @@ +:Data_list: ace_mag_1m.txt +:Created: 2023 Nov 01 1741 UT +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comments and suggestions to SWPC.Webmaster@noaa.gov +# +# Magnetometer values are in GSM coordinates. +# +# Units: Bx, By, Bz, Bt in nT +# Units: Latitude degrees +/- 90.0 +# Units: Longitude degrees 0.0 - 360.0 +# Status(S): 0 = nominal data, 1 to 8 = bad data record, 9 = no data +# Missing data values: -999.9 +# Source: ACE Satellite - Magnetometer +# +# 1-minute averaged Real-time Interplanetary Magnetic Field Values +# +# Modified Seconds +# UT Date Time Julian of the ---------------- GSM Coordinates --------------- +# YR MO DA HHMM Day Day S Bx By Bz Bt Lat. Long. +#------------------------------------------------------------------------------------ +2023 11 01 1541 60249 56460 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1542 60249 56520 0 -4.1 -0.2 -1.1 4.3 -14.8 182.8 +2023 11 01 1543 60249 56580 0 -4.1 -0.0 -1.1 4.3 -15.2 180.2 +2023 11 01 1544 60249 56640 0 -4.1 -0.2 -1.3 4.3 -16.9 182.4 +2023 11 01 1545 60249 56700 0 -4.2 -0.3 -1.3 4.4 -17.2 184.1 +2023 11 01 1546 60249 56760 0 -4.2 -0.0 -1.4 4.4 -18.3 180.5 +2023 11 01 1547 60249 56820 0 -4.1 -0.2 -1.4 4.4 -19.3 183.3 +2023 11 01 1548 60249 56880 0 -4.2 0.5 -1.3 4.4 -16.8 173.0 +2023 11 01 1549 60249 56940 0 -4.0 0.7 -1.0 4.2 -13.8 169.8 +2023 11 01 1550 60249 57000 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1551 60249 57060 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1552 60249 57120 0 -3.3 -1.3 -2.4 4.3 -34.2 201.3 +2023 11 01 1553 60249 57180 0 -3.1 -1.6 -2.5 4.2 -35.3 207.7 +2023 11 01 1554 60249 57240 0 -3.0 -1.8 -2.3 4.2 -33.1 211.7 +2023 11 01 1555 60249 57300 0 -2.8 -2.0 -2.3 4.2 -34.4 215.3 +2023 11 01 1556 60249 57360 0 -2.4 -2.0 -2.5 4.0 -38.4 219.7 +2023 11 01 1557 60249 57420 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1558 60249 57480 0 -2.3 -1.6 -2.9 4.0 -45.8 215.9 +2023 11 01 1559 60249 57540 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1600 60249 57600 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1601 60249 57660 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1602 60249 57720 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1603 60249 57780 0 0.9 3.5 1.0 3.7 15.4 76.2 +2023 11 01 1604 60249 57840 0 0.5 3.6 0.3 3.6 5.3 81.3 +2023 11 01 1605 60249 57900 0 0.6 3.5 0.3 3.6 5.4 80.1 +2023 11 01 1606 60249 57960 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1607 60249 58020 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1608 60249 58080 0 0.4 2.8 2.0 3.5 35.4 82.0 +2023 11 01 1609 60249 58140 0 -0.2 3.2 1.6 3.6 26.9 93.4 +2023 11 01 1610 60249 58200 0 -0.5 3.3 1.7 3.7 26.4 98.2 +2023 11 01 1611 60249 58260 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1612 60249 58320 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1613 60249 58380 0 -0.5 3.4 1.7 3.8 25.8 98.1 +2023 11 01 1614 60249 58440 0 -0.9 3.7 1.4 4.1 20.4 103.6 +2023 11 01 1615 60249 58500 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1616 60249 58560 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1617 60249 58620 0 0.1 3.8 0.9 3.9 12.8 88.0 +2023 11 01 1618 60249 58680 0 -0.2 4.0 0.9 4.1 12.2 93.1 +2023 11 01 1619 60249 58740 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1620 60249 58800 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1621 60249 58860 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1622 60249 58920 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1623 60249 58980 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1624 60249 59040 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1625 60249 59100 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1626 60249 59160 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1627 60249 59220 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1628 60249 59280 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1629 60249 59340 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1630 60249 59400 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1631 60249 59460 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1632 60249 59520 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1633 60249 59580 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1634 60249 59640 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1635 60249 59700 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1636 60249 59760 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1637 60249 59820 0 -0.2 3.6 -1.0 3.7 -15.9 93.4 +2023 11 01 1638 60249 59880 0 -1.1 3.3 0.4 3.5 6.2 108.4 +2023 11 01 1639 60249 59940 0 -1.6 3.6 0.9 4.0 13.0 114.4 +2023 11 01 1640 60249 60000 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1641 60249 60060 0 -1.8 3.4 -0.7 3.9 -11.1 117.7 +2023 11 01 1642 60249 60120 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1643 60249 60180 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1644 60249 60240 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1645 60249 60300 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1646 60249 60360 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1647 60249 60420 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1648 60249 60480 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1649 60249 60540 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1650 60249 60600 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1651 60249 60660 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1652 60249 60720 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1653 60249 60780 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1654 60249 60840 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1655 60249 60900 0 -2.1 2.4 1.3 3.5 22.1 131.1 +2023 11 01 1656 60249 60960 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1657 60249 61020 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1658 60249 61080 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1659 60249 61140 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1700 60249 61200 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1701 60249 61260 9 -999.9 -999.9 -999.9 -999.9 -999.9 -999.9 +2023 11 01 1702 60249 61320 0 -2.7 1.7 2.2 3.8 34.5 148.1 +2023 11 01 1703 60249 61380 0 -2.8 2.0 1.9 3.9 28.9 144.3 +2023 11 01 1704 60249 61440 0 -2.6 2.3 1.7 3.9 25.7 139.1 +2023 11 01 1705 60249 61500 0 -2.7 2.1 2.0 3.9 30.4 142.3 +2023 11 01 1706 60249 61560 0 -2.8 2.1 2.1 4.0 30.7 142.8 +2023 11 01 1707 60249 61620 0 -2.9 2.3 1.3 4.0 18.9 141.3 +2023 11 01 1708 60249 61680 0 -2.8 2.6 0.6 3.9 9.5 137.1 +2023 11 01 1709 60249 61740 0 -3.3 2.3 0.5 4.0 6.8 145.2 +2023 11 01 1710 60249 61800 0 -2.5 2.8 0.7 3.8 11.0 131.9 +2023 11 01 1711 60249 61860 0 -2.6 2.9 0.4 3.9 5.2 131.7 +2023 11 01 1712 60249 61920 0 -2.9 2.6 -0.0 3.9 -0.1 137.8 +2023 11 01 1713 60249 61980 0 -2.5 2.9 0.5 3.9 7.5 131.7 +2023 11 01 1714 60249 62040 0 -2.3 2.9 1.0 3.8 15.3 128.6 +2023 11 01 1715 60249 62100 0 -2.4 2.9 -0.1 3.8 -1.2 129.2 +2023 11 01 1716 60249 62160 0 -2.1 3.0 -0.5 3.7 -7.1 124.9 +2023 11 01 1717 60249 62220 0 -0.9 1.8 -3.2 3.8 -57.7 117.2 +2023 11 01 1718 60249 62280 0 -0.9 2.0 -3.1 3.9 -54.6 114.9 +2023 11 01 1719 60249 62340 0 -1.4 2.9 -2.2 3.9 -35.3 115.4 +2023 11 01 1720 60249 62400 0 -1.8 2.4 -2.6 3.9 -40.5 127.7 +2023 11 01 1721 60249 62460 0 -1.8 2.7 -2.0 3.8 -31.6 123.1 +2023 11 01 1722 60249 62520 0 -1.7 1.8 -2.2 3.3 -42.1 134.4 +2023 11 01 1723 60249 62580 0 -0.8 1.3 3.1 3.4 63.6 121.4 +2023 11 01 1724 60249 62640 0 -0.6 1.0 3.4 3.6 70.8 122.6 +2023 11 01 1725 60249 62700 0 -0.4 0.7 3.4 3.5 77.3 121.7 +2023 11 01 1726 60249 62760 0 -0.5 2.0 3.0 3.6 54.8 104.0 +2023 11 01 1727 60249 62820 0 -1.0 2.8 2.2 3.7 35.9 110.4 +2023 11 01 1728 60249 62880 0 -1.0 3.1 1.8 3.7 28.5 107.0 +2023 11 01 1729 60249 62940 0 -1.8 3.3 1.1 4.0 16.9 117.6 +2023 11 01 1730 60249 63000 0 -1.6 3.5 1.0 4.0 14.3 113.8 +2023 11 01 1731 60249 63060 0 -1.6 3.6 0.5 4.0 7.6 114.1 +2023 11 01 1732 60249 63120 0 -1.9 3.4 -1.1 4.0 -15.3 119.5 +2023 11 01 1733 60249 63180 0 -1.6 2.8 -2.1 3.9 -33.3 119.1 +2023 11 01 1734 60249 63240 0 -1.8 3.1 -1.1 3.8 -17.0 119.6 +2023 11 01 1735 60249 63300 0 -1.7 3.5 -0.0 3.9 -0.3 115.7 +2023 11 01 1736 60249 63360 0 -1.8 3.5 -0.3 3.9 -4.2 118.0 +2023 11 01 1737 60249 63420 0 -2.2 3.2 -0.2 3.9 -3.3 124.2 +2023 11 01 1738 60249 63480 0 -1.8 3.1 -1.0 3.7 -15.2 120.6 +2023 11 01 1739 60249 63540 0 -1.4 2.9 -2.1 3.9 -33.0 115.4 diff --git a/pysatSpaceWeather/tests/test_data/ace-sis.txt b/pysatSpaceWeather/tests/test_data/ace-sis.txt new file mode 100644 index 00000000..85de3368 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/ace-sis.txt @@ -0,0 +1,40 @@ +:Data_list: ace_sis_5m.txt +:Created: 2023 Nov 01 1741 UT +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comments and suggestions to SWPC.Webmaster@noaa.gov +# +# Units: proton flux p/cs2-sec-ster +# Status(S): 0 = nominal data, 1 to 8 = bad data record, 9 = no data +# Missing data values: -1.00e+05 +# Source: ACE Satellite - Solar Isotope Spectrometer +# +# 5-minute averaged Real-time Integral Flux of High-energy Solar Protons +# +# Modified Seconds +# UT Date Time Julian of the ---- Integral Proton Flux ---- +# YR MO DA HHMM Day Day S > 10 MeV S > 30 MeV +#-------------------------------------------------------------------- +2023 11 01 1540 60249 56400 0 1.01e+00 0 7.14e-01 +2023 11 01 1545 60249 56700 0 9.73e-01 0 6.94e-01 +2023 11 01 1550 60249 57000 0 9.78e-01 0 6.89e-01 +2023 11 01 1555 60249 57300 0 9.69e-01 0 6.92e-01 +2023 11 01 1600 60249 57600 0 9.88e-01 0 6.95e-01 +2023 11 01 1605 60249 57900 0 1.00e+00 0 7.18e-01 +2023 11 01 1610 60249 58200 0 1.01e+00 0 7.27e-01 +2023 11 01 1615 60249 58500 0 1.03e+00 0 7.40e-01 +2023 11 01 1620 60249 58800 0 9.47e-01 0 6.94e-01 +2023 11 01 1625 60249 59100 9 -1.00e+05 9 -1.00e+05 +2023 11 01 1630 60249 59400 9 -1.00e+05 9 -1.00e+05 +2023 11 01 1635 60249 59700 0 1.01e+00 0 7.14e-01 +2023 11 01 1640 60249 60000 0 9.57e-01 0 6.70e-01 +2023 11 01 1645 60249 60300 9 -1.00e+05 9 -1.00e+05 +2023 11 01 1650 60249 60600 9 -1.00e+05 9 -1.00e+05 +2023 11 01 1655 60249 60900 9 -1.00e+05 9 -1.00e+05 +2023 11 01 1700 60249 61200 0 9.79e-01 0 6.93e-01 +2023 11 01 1705 60249 61500 0 9.58e-01 0 6.80e-01 +2023 11 01 1710 60249 61800 0 9.95e-01 0 7.05e-01 +2023 11 01 1715 60249 62100 0 9.74e-01 0 6.94e-01 +2023 11 01 1720 60249 62400 0 9.98e-01 0 7.10e-01 +2023 11 01 1725 60249 62700 0 1.01e+00 0 7.08e-01 +2023 11 01 1730 60249 63000 0 9.70e-01 0 6.83e-01 +2023 11 01 1735 60249 63300 0 9.84e-01 0 6.96e-01 diff --git a/pysatSpaceWeather/tests/test_data/ace-swepam.txt b/pysatSpaceWeather/tests/test_data/ace-swepam.txt new file mode 100644 index 00000000..5cadc21b --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/ace-swepam.txt @@ -0,0 +1,137 @@ +:Data_list: ace_swepam_1m.txt +:Created: 2023 Nov 01 1742 UT +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comments and suggestions to SWPC.Webmaster@noaa.gov +# +# Units: Proton density p/cc +# Units: Bulk speed km/s +# Units: Ion tempeture degrees K +# Status(S): 0 = nominal data, 1 to 8 = bad data record, 9 = no data +# Missing data values: Density and Speed = -9999.9, Temp. = -1.00e+05 +# Source: ACE Satellite - Solar Wind Electron Proton Alpha Monitor +# +# 1-minute averaged Real-time Bulk Parameters of the Solar Wind Plasma +# +# Modified Seconds ------------- Solar Wind ----------- +# UT Date Time Julian of the Proton Bulk Ion +# YR MO DA HHMM Day Day S Density Speed Temperature +#------------------------------------------------------------------------- +2023 11 01 1542 60249 56520 1 1.6 437.8 9.17e+04 +2023 11 01 1543 60249 56580 0 1.8 439.2 1.13e+05 +2023 11 01 1544 60249 56640 1 1.6 434.1 9.07e+04 +2023 11 01 1545 60249 56700 1 1.7 436.4 9.70e+04 +2023 11 01 1546 60249 56760 0 1.7 431.1 7.45e+04 +2023 11 01 1547 60249 56820 0 1.0 418.7 5.73e+04 +2023 11 01 1548 60249 56880 0 1.9 442.7 1.38e+05 +2023 11 01 1549 60249 56940 1 2.8 445.1 1.54e+05 +2023 11 01 1550 60249 57000 0 2.5 449.0 1.41e+05 +2023 11 01 1551 60249 57060 0 2.3 453.5 1.39e+05 +2023 11 01 1552 60249 57120 0 2.4 454.6 1.42e+05 +2023 11 01 1553 60249 57180 0 1.6 442.0 7.79e+04 +2023 11 01 1554 60249 57240 0 1.6 441.1 7.35e+04 +2023 11 01 1555 60249 57300 0 1.6 443.0 8.17e+04 +2023 11 01 1556 60249 57360 0 1.7 449.6 1.11e+05 +2023 11 01 1557 60249 57420 1 1.3 446.1 7.19e+04 +2023 11 01 1558 60249 57480 1 1.3 446.1 7.19e+04 +2023 11 01 1559 60249 57540 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1600 60249 57600 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1601 60249 57660 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1602 60249 57720 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1603 60249 57780 0 1.0 454.0 5.94e+04 +2023 11 01 1604 60249 57840 0 1.2 460.6 8.00e+04 +2023 11 01 1605 60249 57900 0 1.5 457.8 5.49e+04 +2023 11 01 1606 60249 57960 0 2.1 469.7 7.56e+04 +2023 11 01 1607 60249 58020 0 2.4 476.5 9.14e+04 +2023 11 01 1608 60249 58080 0 2.5 485.2 1.15e+05 +2023 11 01 1609 60249 58140 0 1.8 468.2 8.24e+04 +2023 11 01 1610 60249 58200 0 1.3 456.8 6.37e+04 +2023 11 01 1611 60249 58260 0 1.9 471.0 1.04e+05 +2023 11 01 1612 60249 58320 0 2.2 475.3 1.30e+05 +2023 11 01 1613 60249 58380 0 1.5 455.7 5.44e+04 +2023 11 01 1614 60249 58440 0 1.5 455.7 5.44e+04 +2023 11 01 1615 60249 58500 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1616 60249 58560 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1617 60249 58620 0 1.4 453.9 3.91e+04 +2023 11 01 1618 60249 58680 0 1.6 463.0 6.35e+04 +2023 11 01 1619 60249 58740 0 1.7 463.7 6.52e+04 +2023 11 01 1620 60249 58800 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1621 60249 58860 0 1.4 449.4 3.94e+04 +2023 11 01 1622 60249 58920 0 1.4 449.4 3.94e+04 +2023 11 01 1623 60249 58980 0 2.0 458.0 5.09e+04 +2023 11 01 1624 60249 59040 0 2.0 458.0 5.09e+04 +2023 11 01 1625 60249 59100 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1626 60249 59160 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1627 60249 59220 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1628 60249 59280 0 0.6 432.3 1.96e+04 +2023 11 01 1629 60249 59340 0 0.6 432.3 1.96e+04 +2023 11 01 1630 60249 59400 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1631 60249 59460 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1632 60249 59520 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1633 60249 59580 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1634 60249 59640 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1635 60249 59700 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1636 60249 59760 0 1.2 447.3 3.66e+04 +2023 11 01 1637 60249 59820 0 1.2 447.3 3.66e+04 +2023 11 01 1638 60249 59880 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1639 60249 59940 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1640 60249 60000 0 3.3 470.8 1.21e+05 +2023 11 01 1641 60249 60060 0 3.3 470.8 1.21e+05 +2023 11 01 1642 60249 60120 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1643 60249 60180 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1644 60249 60240 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1645 60249 60300 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1646 60249 60360 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1647 60249 60420 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1648 60249 60480 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1649 60249 60540 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1650 60249 60600 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1651 60249 60660 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1652 60249 60720 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1653 60249 60780 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1654 60249 60840 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1655 60249 60900 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1656 60249 60960 0 1.1 436.9 4.04e+04 +2023 11 01 1657 60249 61020 0 1.1 436.9 4.04e+04 +2023 11 01 1658 60249 61080 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1659 60249 61140 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1700 60249 61200 9 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1701 60249 61260 1 1.2 428.8 4.27e+04 +2023 11 01 1702 60249 61320 1 1.3 431.4 5.09e+04 +2023 11 01 1703 60249 61380 0 1.4 448.2 1.01e+05 +2023 11 01 1704 60249 61440 0 1.3 447.6 6.73e+04 +2023 11 01 1705 60249 61500 0 1.6 449.8 9.80e+04 +2023 11 01 1706 60249 61560 0 1.6 449.8 9.80e+04 +2023 11 01 1707 60249 61620 3 -9999.9 -9999.9 -1.00e+05 +2023 11 01 1708 60249 61680 0 0.8 416.2 3.10e+04 +2023 11 01 1709 60249 61740 1 2.1 443.0 1.40e+05 +2023 11 01 1710 60249 61800 1 2.2 443.0 1.24e+05 +2023 11 01 1711 60249 61860 0 2.0 438.8 8.62e+04 +2023 11 01 1712 60249 61920 1 2.0 438.5 8.64e+04 +2023 11 01 1713 60249 61980 1 2.1 439.4 9.51e+04 +2023 11 01 1714 60249 62040 1 2.0 443.7 8.89e+04 +2023 11 01 1715 60249 62100 0 1.7 447.5 7.30e+04 +2023 11 01 1716 60249 62160 0 1.9 448.7 7.50e+04 +2023 11 01 1717 60249 62220 0 2.1 453.3 8.96e+04 +2023 11 01 1718 60249 62280 0 1.7 458.9 7.30e+04 +2023 11 01 1719 60249 62340 0 1.8 457.0 5.98e+04 +2023 11 01 1720 60249 62400 0 2.2 449.6 6.27e+04 +2023 11 01 1721 60249 62460 0 1.8 450.3 6.75e+04 +2023 11 01 1722 60249 62520 0 1.6 452.0 8.20e+04 +2023 11 01 1723 60249 62580 0 1.7 450.0 8.44e+04 +2023 11 01 1724 60249 62640 0 1.4 457.7 6.44e+04 +2023 11 01 1725 60249 62700 0 1.3 462.1 5.61e+04 +2023 11 01 1726 60249 62760 0 1.2 461.3 6.12e+04 +2023 11 01 1727 60249 62820 0 1.2 460.4 5.94e+04 +2023 11 01 1728 60249 62880 0 1.3 459.6 5.89e+04 +2023 11 01 1729 60249 62940 0 1.6 454.0 6.35e+04 +2023 11 01 1730 60249 63000 0 1.8 449.3 6.38e+04 +2023 11 01 1731 60249 63060 0 2.1 453.6 7.05e+04 +2023 11 01 1732 60249 63120 0 2.8 459.7 7.93e+04 +2023 11 01 1733 60249 63180 0 3.5 455.5 4.87e+04 +2023 11 01 1734 60249 63240 0 1.1 436.5 5.70e+04 +2023 11 01 1735 60249 63300 1 2.6 454.7 1.19e+05 +2023 11 01 1736 60249 63360 0 2.5 460.4 7.11e+04 +2023 11 01 1737 60249 63420 0 2.1 450.0 7.41e+04 +2023 11 01 1738 60249 63480 0 0.7 419.9 2.99e+04 +2023 11 01 1739 60249 63540 0 0.6 417.7 2.68e+04 +2023 11 01 1740 60249 63600 3 -9999.9 -9999.9 -1.00e+05 diff --git a/pysatSpaceWeather/tests/test_data/ap30_2009-01.txt b/pysatSpaceWeather/tests/test_data/ap30_2009-01.txt new file mode 100644 index 00000000..7d887c57 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/ap30_2009-01.txt @@ -0,0 +1 @@ +{"meta":{"source":"GFZ Potsdam","license":"CC BY 4.0"},"datetime":["2009-01-01T00:00:00Z","2009-01-01T00:30:00Z","2009-01-01T01:00:00Z","2009-01-01T01:30:00Z","2009-01-01T02:00:00Z","2009-01-01T02:30:00Z","2009-01-01T03:00:00Z","2009-01-01T03:30:00Z","2009-01-01T04:00:00Z","2009-01-01T04:30:00Z","2009-01-01T05:00:00Z","2009-01-01T05:30:00Z","2009-01-01T06:00:00Z","2009-01-01T06:30:00Z","2009-01-01T07:00:00Z","2009-01-01T07:30:00Z","2009-01-01T08:00:00Z","2009-01-01T08:30:00Z","2009-01-01T09:00:00Z","2009-01-01T09:30:00Z","2009-01-01T10:00:00Z","2009-01-01T10:30:00Z","2009-01-01T11:00:00Z","2009-01-01T11:30:00Z","2009-01-01T12:00:00Z","2009-01-01T12:30:00Z","2009-01-01T13:00:00Z","2009-01-01T13:30:00Z","2009-01-01T14:00:00Z","2009-01-01T14:30:00Z","2009-01-01T15:00:00Z","2009-01-01T15:30:00Z","2009-01-01T16:00:00Z","2009-01-01T16:30:00Z","2009-01-01T17:00:00Z","2009-01-01T17:30:00Z","2009-01-01T18:00:00Z","2009-01-01T18:30:00Z","2009-01-01T19:00:00Z","2009-01-01T19:30:00Z","2009-01-01T20:00:00Z","2009-01-01T20:30:00Z","2009-01-01T21:00:00Z","2009-01-01T21:30:00Z","2009-01-01T22:00:00Z","2009-01-01T22:30:00Z","2009-01-01T23:00:00Z","2009-01-01T23:30:00Z","2009-01-02T00:00:00Z","2009-01-02T00:30:00Z","2009-01-02T01:00:00Z","2009-01-02T01:30:00Z","2009-01-02T02:00:00Z","2009-01-02T02:30:00Z","2009-01-02T03:00:00Z","2009-01-02T03:30:00Z","2009-01-02T04:00:00Z","2009-01-02T04:30:00Z","2009-01-02T05:00:00Z","2009-01-02T05:30:00Z","2009-01-02T06:00:00Z","2009-01-02T06:30:00Z","2009-01-02T07:00:00Z","2009-01-02T07:30:00Z","2009-01-02T08:00:00Z","2009-01-02T08:30:00Z","2009-01-02T09:00:00Z","2009-01-02T09:30:00Z","2009-01-02T10:00:00Z","2009-01-02T10:30:00Z","2009-01-02T11:00:00Z","2009-01-02T11:30:00Z","2009-01-02T12:00:00Z","2009-01-02T12:30:00Z","2009-01-02T13:00:00Z","2009-01-02T13:30:00Z","2009-01-02T14:00:00Z","2009-01-02T14:30:00Z","2009-01-02T15:00:00Z","2009-01-02T15:30:00Z","2009-01-02T16:00:00Z","2009-01-02T16:30:00Z","2009-01-02T17:00:00Z","2009-01-02T17:30:00Z","2009-01-02T18:00:00Z","2009-01-02T18:30:00Z","2009-01-02T19:00:00Z","2009-01-02T19:30:00Z","2009-01-02T20:00:00Z","2009-01-02T20:30:00Z","2009-01-02T21:00:00Z","2009-01-02T21:30:00Z","2009-01-02T22:00:00Z","2009-01-02T22:30:00Z","2009-01-02T23:00:00Z","2009-01-02T23:30:00Z","2009-01-03T00:00:00Z","2009-01-03T00:30:00Z","2009-01-03T01:00:00Z","2009-01-03T01:30:00Z","2009-01-03T02:00:00Z","2009-01-03T02:30:00Z","2009-01-03T03:00:00Z","2009-01-03T03:30:00Z","2009-01-03T04:00:00Z","2009-01-03T04:30:00Z","2009-01-03T05:00:00Z","2009-01-03T05:30:00Z","2009-01-03T06:00:00Z","2009-01-03T06:30:00Z","2009-01-03T07:00:00Z","2009-01-03T07:30:00Z","2009-01-03T08:00:00Z","2009-01-03T08:30:00Z","2009-01-03T09:00:00Z","2009-01-03T09:30:00Z","2009-01-03T10:00:00Z","2009-01-03T10:30:00Z","2009-01-03T11:00:00Z","2009-01-03T11:30:00Z","2009-01-03T12:00:00Z","2009-01-03T12:30:00Z","2009-01-03T13:00:00Z","2009-01-03T13:30:00Z","2009-01-03T14:00:00Z","2009-01-03T14:30:00Z","2009-01-03T15:00:00Z","2009-01-03T15:30:00Z","2009-01-03T16:00:00Z","2009-01-03T16:30:00Z","2009-01-03T17:00:00Z","2009-01-03T17:30:00Z","2009-01-03T18:00:00Z","2009-01-03T18:30:00Z","2009-01-03T19:00:00Z","2009-01-03T19:30:00Z","2009-01-03T20:00:00Z","2009-01-03T20:30:00Z","2009-01-03T21:00:00Z","2009-01-03T21:30:00Z","2009-01-03T22:00:00Z","2009-01-03T22:30:00Z","2009-01-03T23:00:00Z","2009-01-03T23:30:00Z","2009-01-04T00:00:00Z","2009-01-04T00:30:00Z","2009-01-04T01:00:00Z","2009-01-04T01:30:00Z","2009-01-04T02:00:00Z","2009-01-04T02:30:00Z","2009-01-04T03:00:00Z","2009-01-04T03:30:00Z","2009-01-04T04:00:00Z","2009-01-04T04:30:00Z","2009-01-04T05:00:00Z","2009-01-04T05:30:00Z","2009-01-04T06:00:00Z","2009-01-04T06:30:00Z","2009-01-04T07:00:00Z","2009-01-04T07:30:00Z","2009-01-04T08:00:00Z","2009-01-04T08:30:00Z","2009-01-04T09:00:00Z","2009-01-04T09:30:00Z","2009-01-04T10:00:00Z","2009-01-04T10:30:00Z","2009-01-04T11:00:00Z","2009-01-04T11:30:00Z","2009-01-04T12:00:00Z","2009-01-04T12:30:00Z","2009-01-04T13:00:00Z","2009-01-04T13:30:00Z","2009-01-04T14:00:00Z","2009-01-04T14:30:00Z","2009-01-04T15:00:00Z","2009-01-04T15:30:00Z","2009-01-04T16:00:00Z","2009-01-04T16:30:00Z","2009-01-04T17:00:00Z","2009-01-04T17:30:00Z","2009-01-04T18:00:00Z","2009-01-04T18:30:00Z","2009-01-04T19:00:00Z","2009-01-04T19:30:00Z","2009-01-04T20:00:00Z","2009-01-04T20:30:00Z","2009-01-04T21:00:00Z","2009-01-04T21:30:00Z","2009-01-04T22:00:00Z","2009-01-04T22:30:00Z","2009-01-04T23:00:00Z","2009-01-04T23:30:00Z","2009-01-05T00:00:00Z","2009-01-05T00:30:00Z","2009-01-05T01:00:00Z","2009-01-05T01:30:00Z","2009-01-05T02:00:00Z","2009-01-05T02:30:00Z","2009-01-05T03:00:00Z","2009-01-05T03:30:00Z","2009-01-05T04:00:00Z","2009-01-05T04:30:00Z","2009-01-05T05:00:00Z","2009-01-05T05:30:00Z","2009-01-05T06:00:00Z","2009-01-05T06:30:00Z","2009-01-05T07:00:00Z","2009-01-05T07:30:00Z","2009-01-05T08:00:00Z","2009-01-05T08:30:00Z","2009-01-05T09:00:00Z","2009-01-05T09:30:00Z","2009-01-05T10:00:00Z","2009-01-05T10:30:00Z","2009-01-05T11:00:00Z","2009-01-05T11:30:00Z","2009-01-05T12:00:00Z","2009-01-05T12:30:00Z","2009-01-05T13:00:00Z","2009-01-05T13:30:00Z","2009-01-05T14:00:00Z","2009-01-05T14:30:00Z","2009-01-05T15:00:00Z","2009-01-05T15:30:00Z","2009-01-05T16:00:00Z","2009-01-05T16:30:00Z","2009-01-05T17:00:00Z","2009-01-05T17:30:00Z","2009-01-05T18:00:00Z","2009-01-05T18:30:00Z","2009-01-05T19:00:00Z","2009-01-05T19:30:00Z","2009-01-05T20:00:00Z","2009-01-05T20:30:00Z","2009-01-05T21:00:00Z","2009-01-05T21:30:00Z","2009-01-05T22:00:00Z","2009-01-05T22:30:00Z","2009-01-05T23:00:00Z","2009-01-05T23:30:00Z","2009-01-06T00:00:00Z","2009-01-06T00:30:00Z","2009-01-06T01:00:00Z","2009-01-06T01:30:00Z","2009-01-06T02:00:00Z","2009-01-06T02:30:00Z","2009-01-06T03:00:00Z","2009-01-06T03:30:00Z","2009-01-06T04:00:00Z","2009-01-06T04:30:00Z","2009-01-06T05:00:00Z","2009-01-06T05:30:00Z","2009-01-06T06:00:00Z","2009-01-06T06:30:00Z","2009-01-06T07:00:00Z","2009-01-06T07:30:00Z","2009-01-06T08:00:00Z","2009-01-06T08:30:00Z","2009-01-06T09:00:00Z","2009-01-06T09:30:00Z","2009-01-06T10:00:00Z","2009-01-06T10:30:00Z","2009-01-06T11:00:00Z","2009-01-06T11:30:00Z","2009-01-06T12:00:00Z","2009-01-06T12:30:00Z","2009-01-06T13:00:00Z","2009-01-06T13:30:00Z","2009-01-06T14:00:00Z","2009-01-06T14:30:00Z","2009-01-06T15:00:00Z","2009-01-06T15:30:00Z","2009-01-06T16:00:00Z","2009-01-06T16:30:00Z","2009-01-06T17:00:00Z","2009-01-06T17:30:00Z","2009-01-06T18:00:00Z","2009-01-06T18:30:00Z","2009-01-06T19:00:00Z","2009-01-06T19:30:00Z","2009-01-06T20:00:00Z","2009-01-06T20:30:00Z","2009-01-06T21:00:00Z","2009-01-06T21:30:00Z","2009-01-06T22:00:00Z","2009-01-06T22:30:00Z","2009-01-06T23:00:00Z","2009-01-06T23:30:00Z","2009-01-07T00:00:00Z","2009-01-07T00:30:00Z","2009-01-07T01:00:00Z","2009-01-07T01:30:00Z","2009-01-07T02:00:00Z","2009-01-07T02:30:00Z","2009-01-07T03:00:00Z","2009-01-07T03:30:00Z","2009-01-07T04:00:00Z","2009-01-07T04:30:00Z","2009-01-07T05:00:00Z","2009-01-07T05:30:00Z","2009-01-07T06:00:00Z","2009-01-07T06:30:00Z","2009-01-07T07:00:00Z","2009-01-07T07:30:00Z","2009-01-07T08:00:00Z","2009-01-07T08:30:00Z","2009-01-07T09:00:00Z","2009-01-07T09:30:00Z","2009-01-07T10:00:00Z","2009-01-07T10:30:00Z","2009-01-07T11:00:00Z","2009-01-07T11:30:00Z","2009-01-07T12:00:00Z","2009-01-07T12:30:00Z","2009-01-07T13:00:00Z","2009-01-07T13:30:00Z","2009-01-07T14:00:00Z","2009-01-07T14:30:00Z","2009-01-07T15:00:00Z","2009-01-07T15:30:00Z","2009-01-07T16:00:00Z","2009-01-07T16:30:00Z","2009-01-07T17:00:00Z","2009-01-07T17:30:00Z","2009-01-07T18:00:00Z","2009-01-07T18:30:00Z","2009-01-07T19:00:00Z","2009-01-07T19:30:00Z","2009-01-07T20:00:00Z","2009-01-07T20:30:00Z","2009-01-07T21:00:00Z","2009-01-07T21:30:00Z","2009-01-07T22:00:00Z","2009-01-07T22:30:00Z","2009-01-07T23:00:00Z","2009-01-07T23:30:00Z","2009-01-08T00:00:00Z","2009-01-08T00:30:00Z","2009-01-08T01:00:00Z","2009-01-08T01:30:00Z","2009-01-08T02:00:00Z","2009-01-08T02:30:00Z","2009-01-08T03:00:00Z","2009-01-08T03:30:00Z","2009-01-08T04:00:00Z","2009-01-08T04:30:00Z","2009-01-08T05:00:00Z","2009-01-08T05:30:00Z","2009-01-08T06:00:00Z","2009-01-08T06:30:00Z","2009-01-08T07:00:00Z","2009-01-08T07:30:00Z","2009-01-08T08:00:00Z","2009-01-08T08:30:00Z","2009-01-08T09:00:00Z","2009-01-08T09:30:00Z","2009-01-08T10:00:00Z","2009-01-08T10:30:00Z","2009-01-08T11:00:00Z","2009-01-08T11:30:00Z","2009-01-08T12:00:00Z","2009-01-08T12:30:00Z","2009-01-08T13:00:00Z","2009-01-08T13:30:00Z","2009-01-08T14:00:00Z","2009-01-08T14:30:00Z","2009-01-08T15:00:00Z","2009-01-08T15:30:00Z","2009-01-08T16:00:00Z","2009-01-08T16:30:00Z","2009-01-08T17:00:00Z","2009-01-08T17:30:00Z","2009-01-08T18:00:00Z","2009-01-08T18:30:00Z","2009-01-08T19:00:00Z","2009-01-08T19:30:00Z","2009-01-08T20:00:00Z","2009-01-08T20:30:00Z","2009-01-08T21:00:00Z","2009-01-08T21:30:00Z","2009-01-08T22:00:00Z","2009-01-08T22:30:00Z","2009-01-08T23:00:00Z","2009-01-08T23:30:00Z","2009-01-09T00:00:00Z","2009-01-09T00:30:00Z","2009-01-09T01:00:00Z","2009-01-09T01:30:00Z","2009-01-09T02:00:00Z","2009-01-09T02:30:00Z","2009-01-09T03:00:00Z","2009-01-09T03:30:00Z","2009-01-09T04:00:00Z","2009-01-09T04:30:00Z","2009-01-09T05:00:00Z","2009-01-09T05:30:00Z","2009-01-09T06:00:00Z","2009-01-09T06:30:00Z","2009-01-09T07:00:00Z","2009-01-09T07:30:00Z","2009-01-09T08:00:00Z","2009-01-09T08:30:00Z","2009-01-09T09:00:00Z","2009-01-09T09:30:00Z","2009-01-09T10:00:00Z","2009-01-09T10:30:00Z","2009-01-09T11:00:00Z","2009-01-09T11:30:00Z","2009-01-09T12:00:00Z","2009-01-09T12:30:00Z","2009-01-09T13:00:00Z","2009-01-09T13:30:00Z","2009-01-09T14:00:00Z","2009-01-09T14:30:00Z","2009-01-09T15:00:00Z","2009-01-09T15:30:00Z","2009-01-09T16:00:00Z","2009-01-09T16:30:00Z","2009-01-09T17:00:00Z","2009-01-09T17:30:00Z","2009-01-09T18:00:00Z","2009-01-09T18:30:00Z","2009-01-09T19:00:00Z","2009-01-09T19:30:00Z","2009-01-09T20:00:00Z","2009-01-09T20:30:00Z","2009-01-09T21:00:00Z","2009-01-09T21:30:00Z","2009-01-09T22:00:00Z","2009-01-09T22:30:00Z","2009-01-09T23:00:00Z","2009-01-09T23:30:00Z","2009-01-10T00:00:00Z","2009-01-10T00:30:00Z","2009-01-10T01:00:00Z","2009-01-10T01:30:00Z","2009-01-10T02:00:00Z","2009-01-10T02:30:00Z","2009-01-10T03:00:00Z","2009-01-10T03:30:00Z","2009-01-10T04:00:00Z","2009-01-10T04:30:00Z","2009-01-10T05:00:00Z","2009-01-10T05:30:00Z","2009-01-10T06:00:00Z","2009-01-10T06:30:00Z","2009-01-10T07:00:00Z","2009-01-10T07:30:00Z","2009-01-10T08:00:00Z","2009-01-10T08:30:00Z","2009-01-10T09:00:00Z","2009-01-10T09:30:00Z","2009-01-10T10:00:00Z","2009-01-10T10:30:00Z","2009-01-10T11:00:00Z","2009-01-10T11:30:00Z","2009-01-10T12:00:00Z","2009-01-10T12:30:00Z","2009-01-10T13:00:00Z","2009-01-10T13:30:00Z","2009-01-10T14:00:00Z","2009-01-10T14:30:00Z","2009-01-10T15:00:00Z","2009-01-10T15:30:00Z","2009-01-10T16:00:00Z","2009-01-10T16:30:00Z","2009-01-10T17:00:00Z","2009-01-10T17:30:00Z","2009-01-10T18:00:00Z","2009-01-10T18:30:00Z","2009-01-10T19:00:00Z","2009-01-10T19:30:00Z","2009-01-10T20:00:00Z","2009-01-10T20:30:00Z","2009-01-10T21:00:00Z","2009-01-10T21:30:00Z","2009-01-10T22:00:00Z","2009-01-10T22:30:00Z","2009-01-10T23:00:00Z","2009-01-10T23:30:00Z","2009-01-11T00:00:00Z","2009-01-11T00:30:00Z","2009-01-11T01:00:00Z","2009-01-11T01:30:00Z","2009-01-11T02:00:00Z","2009-01-11T02:30:00Z","2009-01-11T03:00:00Z","2009-01-11T03:30:00Z","2009-01-11T04:00:00Z","2009-01-11T04:30:00Z","2009-01-11T05:00:00Z","2009-01-11T05:30:00Z","2009-01-11T06:00:00Z","2009-01-11T06:30:00Z","2009-01-11T07:00:00Z","2009-01-11T07:30:00Z","2009-01-11T08:00:00Z","2009-01-11T08:30:00Z","2009-01-11T09:00:00Z","2009-01-11T09:30:00Z","2009-01-11T10:00:00Z","2009-01-11T10:30:00Z","2009-01-11T11:00:00Z","2009-01-11T11:30:00Z","2009-01-11T12:00:00Z","2009-01-11T12:30:00Z","2009-01-11T13:00:00Z","2009-01-11T13:30:00Z","2009-01-11T14:00:00Z","2009-01-11T14:30:00Z","2009-01-11T15:00:00Z","2009-01-11T15:30:00Z","2009-01-11T16:00:00Z","2009-01-11T16:30:00Z","2009-01-11T17:00:00Z","2009-01-11T17:30:00Z","2009-01-11T18:00:00Z","2009-01-11T18:30:00Z","2009-01-11T19:00:00Z","2009-01-11T19:30:00Z","2009-01-11T20:00:00Z","2009-01-11T20:30:00Z","2009-01-11T21:00:00Z","2009-01-11T21:30:00Z","2009-01-11T22:00:00Z","2009-01-11T22:30:00Z","2009-01-11T23:00:00Z","2009-01-11T23:30:00Z","2009-01-12T00:00:00Z","2009-01-12T00:30:00Z","2009-01-12T01:00:00Z","2009-01-12T01:30:00Z","2009-01-12T02:00:00Z","2009-01-12T02:30:00Z","2009-01-12T03:00:00Z","2009-01-12T03:30:00Z","2009-01-12T04:00:00Z","2009-01-12T04:30:00Z","2009-01-12T05:00:00Z","2009-01-12T05:30:00Z","2009-01-12T06:00:00Z","2009-01-12T06:30:00Z","2009-01-12T07:00:00Z","2009-01-12T07:30:00Z","2009-01-12T08:00:00Z","2009-01-12T08:30:00Z","2009-01-12T09:00:00Z","2009-01-12T09:30:00Z","2009-01-12T10:00:00Z","2009-01-12T10:30:00Z","2009-01-12T11:00:00Z","2009-01-12T11:30:00Z","2009-01-12T12:00:00Z","2009-01-12T12:30:00Z","2009-01-12T13:00:00Z","2009-01-12T13:30:00Z","2009-01-12T14:00:00Z","2009-01-12T14:30:00Z","2009-01-12T15:00:00Z","2009-01-12T15:30:00Z","2009-01-12T16:00:00Z","2009-01-12T16:30:00Z","2009-01-12T17:00:00Z","2009-01-12T17:30:00Z","2009-01-12T18:00:00Z","2009-01-12T18:30:00Z","2009-01-12T19:00:00Z","2009-01-12T19:30:00Z","2009-01-12T20:00:00Z","2009-01-12T20:30:00Z","2009-01-12T21:00:00Z","2009-01-12T21:30:00Z","2009-01-12T22:00:00Z","2009-01-12T22:30:00Z","2009-01-12T23:00:00Z","2009-01-12T23:30:00Z","2009-01-13T00:00:00Z","2009-01-13T00:30:00Z","2009-01-13T01:00:00Z","2009-01-13T01:30:00Z","2009-01-13T02:00:00Z","2009-01-13T02:30:00Z","2009-01-13T03:00:00Z","2009-01-13T03:30:00Z","2009-01-13T04:00:00Z","2009-01-13T04:30:00Z","2009-01-13T05:00:00Z","2009-01-13T05:30:00Z","2009-01-13T06:00:00Z","2009-01-13T06:30:00Z","2009-01-13T07:00:00Z","2009-01-13T07:30:00Z","2009-01-13T08:00:00Z","2009-01-13T08:30:00Z","2009-01-13T09:00:00Z","2009-01-13T09:30:00Z","2009-01-13T10:00:00Z","2009-01-13T10:30:00Z","2009-01-13T11:00:00Z","2009-01-13T11:30:00Z","2009-01-13T12:00:00Z","2009-01-13T12:30:00Z","2009-01-13T13:00:00Z","2009-01-13T13:30:00Z","2009-01-13T14:00:00Z","2009-01-13T14:30:00Z","2009-01-13T15:00:00Z","2009-01-13T15:30:00Z","2009-01-13T16:00:00Z","2009-01-13T16:30:00Z","2009-01-13T17:00:00Z","2009-01-13T17:30:00Z","2009-01-13T18:00:00Z","2009-01-13T18:30:00Z","2009-01-13T19:00:00Z","2009-01-13T19:30:00Z","2009-01-13T20:00:00Z","2009-01-13T20:30:00Z","2009-01-13T21:00:00Z","2009-01-13T21:30:00Z","2009-01-13T22:00:00Z","2009-01-13T22:30:00Z","2009-01-13T23:00:00Z","2009-01-13T23:30:00Z","2009-01-14T00:00:00Z","2009-01-14T00:30:00Z","2009-01-14T01:00:00Z","2009-01-14T01:30:00Z","2009-01-14T02:00:00Z","2009-01-14T02:30:00Z","2009-01-14T03:00:00Z","2009-01-14T03:30:00Z","2009-01-14T04:00:00Z","2009-01-14T04:30:00Z","2009-01-14T05:00:00Z","2009-01-14T05:30:00Z","2009-01-14T06:00:00Z","2009-01-14T06:30:00Z","2009-01-14T07:00:00Z","2009-01-14T07:30:00Z","2009-01-14T08:00:00Z","2009-01-14T08:30:00Z","2009-01-14T09:00:00Z","2009-01-14T09:30:00Z","2009-01-14T10:00:00Z","2009-01-14T10:30:00Z","2009-01-14T11:00:00Z","2009-01-14T11:30:00Z","2009-01-14T12:00:00Z","2009-01-14T12:30:00Z","2009-01-14T13:00:00Z","2009-01-14T13:30:00Z","2009-01-14T14:00:00Z","2009-01-14T14:30:00Z","2009-01-14T15:00:00Z","2009-01-14T15:30:00Z","2009-01-14T16:00:00Z","2009-01-14T16:30:00Z","2009-01-14T17:00:00Z","2009-01-14T17:30:00Z","2009-01-14T18:00:00Z","2009-01-14T18:30:00Z","2009-01-14T19:00:00Z","2009-01-14T19:30:00Z","2009-01-14T20:00:00Z","2009-01-14T20:30:00Z","2009-01-14T21:00:00Z","2009-01-14T21:30:00Z","2009-01-14T22:00:00Z","2009-01-14T22:30:00Z","2009-01-14T23:00:00Z","2009-01-14T23:30:00Z","2009-01-15T00:00:00Z","2009-01-15T00:30:00Z","2009-01-15T01:00:00Z","2009-01-15T01:30:00Z","2009-01-15T02:00:00Z","2009-01-15T02:30:00Z","2009-01-15T03:00:00Z","2009-01-15T03:30:00Z","2009-01-15T04:00:00Z","2009-01-15T04:30:00Z","2009-01-15T05:00:00Z","2009-01-15T05:30:00Z","2009-01-15T06:00:00Z","2009-01-15T06:30:00Z","2009-01-15T07:00:00Z","2009-01-15T07:30:00Z","2009-01-15T08:00:00Z","2009-01-15T08:30:00Z","2009-01-15T09:00:00Z","2009-01-15T09:30:00Z","2009-01-15T10:00:00Z","2009-01-15T10:30:00Z","2009-01-15T11:00:00Z","2009-01-15T11:30:00Z","2009-01-15T12:00:00Z","2009-01-15T12:30:00Z","2009-01-15T13:00:00Z","2009-01-15T13:30:00Z","2009-01-15T14:00:00Z","2009-01-15T14:30:00Z","2009-01-15T15:00:00Z","2009-01-15T15:30:00Z","2009-01-15T16:00:00Z","2009-01-15T16:30:00Z","2009-01-15T17:00:00Z","2009-01-15T17:30:00Z","2009-01-15T18:00:00Z","2009-01-15T18:30:00Z","2009-01-15T19:00:00Z","2009-01-15T19:30:00Z","2009-01-15T20:00:00Z","2009-01-15T20:30:00Z","2009-01-15T21:00:00Z","2009-01-15T21:30:00Z","2009-01-15T22:00:00Z","2009-01-15T22:30:00Z","2009-01-15T23:00:00Z","2009-01-15T23:30:00Z","2009-01-16T00:00:00Z","2009-01-16T00:30:00Z","2009-01-16T01:00:00Z","2009-01-16T01:30:00Z","2009-01-16T02:00:00Z","2009-01-16T02:30:00Z","2009-01-16T03:00:00Z","2009-01-16T03:30:00Z","2009-01-16T04:00:00Z","2009-01-16T04:30:00Z","2009-01-16T05:00:00Z","2009-01-16T05:30:00Z","2009-01-16T06:00:00Z","2009-01-16T06:30:00Z","2009-01-16T07:00:00Z","2009-01-16T07:30:00Z","2009-01-16T08:00:00Z","2009-01-16T08:30:00Z","2009-01-16T09:00:00Z","2009-01-16T09:30:00Z","2009-01-16T10:00:00Z","2009-01-16T10:30:00Z","2009-01-16T11:00:00Z","2009-01-16T11:30:00Z","2009-01-16T12:00:00Z","2009-01-16T12:30:00Z","2009-01-16T13:00:00Z","2009-01-16T13:30:00Z","2009-01-16T14:00:00Z","2009-01-16T14:30:00Z","2009-01-16T15:00:00Z","2009-01-16T15:30:00Z","2009-01-16T16:00:00Z","2009-01-16T16:30:00Z","2009-01-16T17:00:00Z","2009-01-16T17:30:00Z","2009-01-16T18:00:00Z","2009-01-16T18:30:00Z","2009-01-16T19:00:00Z","2009-01-16T19:30:00Z","2009-01-16T20:00:00Z","2009-01-16T20:30:00Z","2009-01-16T21:00:00Z","2009-01-16T21:30:00Z","2009-01-16T22:00:00Z","2009-01-16T22:30:00Z","2009-01-16T23:00:00Z","2009-01-16T23:30:00Z","2009-01-17T00:00:00Z","2009-01-17T00:30:00Z","2009-01-17T01:00:00Z","2009-01-17T01:30:00Z","2009-01-17T02:00:00Z","2009-01-17T02:30:00Z","2009-01-17T03:00:00Z","2009-01-17T03:30:00Z","2009-01-17T04:00:00Z","2009-01-17T04:30:00Z","2009-01-17T05:00:00Z","2009-01-17T05:30:00Z","2009-01-17T06:00:00Z","2009-01-17T06:30:00Z","2009-01-17T07:00:00Z","2009-01-17T07:30:00Z","2009-01-17T08:00:00Z","2009-01-17T08:30:00Z","2009-01-17T09:00:00Z","2009-01-17T09:30:00Z","2009-01-17T10:00:00Z","2009-01-17T10:30:00Z","2009-01-17T11:00:00Z","2009-01-17T11:30:00Z","2009-01-17T12:00:00Z","2009-01-17T12:30:00Z","2009-01-17T13:00:00Z","2009-01-17T13:30:00Z","2009-01-17T14:00:00Z","2009-01-17T14:30:00Z","2009-01-17T15:00:00Z","2009-01-17T15:30:00Z","2009-01-17T16:00:00Z","2009-01-17T16:30:00Z","2009-01-17T17:00:00Z","2009-01-17T17:30:00Z","2009-01-17T18:00:00Z","2009-01-17T18:30:00Z","2009-01-17T19:00:00Z","2009-01-17T19:30:00Z","2009-01-17T20:00:00Z","2009-01-17T20:30:00Z","2009-01-17T21:00:00Z","2009-01-17T21:30:00Z","2009-01-17T22:00:00Z","2009-01-17T22:30:00Z","2009-01-17T23:00:00Z","2009-01-17T23:30:00Z","2009-01-18T00:00:00Z","2009-01-18T00:30:00Z","2009-01-18T01:00:00Z","2009-01-18T01:30:00Z","2009-01-18T02:00:00Z","2009-01-18T02:30:00Z","2009-01-18T03:00:00Z","2009-01-18T03:30:00Z","2009-01-18T04:00:00Z","2009-01-18T04:30:00Z","2009-01-18T05:00:00Z","2009-01-18T05:30:00Z","2009-01-18T06:00:00Z","2009-01-18T06:30:00Z","2009-01-18T07:00:00Z","2009-01-18T07:30:00Z","2009-01-18T08:00:00Z","2009-01-18T08:30:00Z","2009-01-18T09:00:00Z","2009-01-18T09:30:00Z","2009-01-18T10:00:00Z","2009-01-18T10:30:00Z","2009-01-18T11:00:00Z","2009-01-18T11:30:00Z","2009-01-18T12:00:00Z","2009-01-18T12:30:00Z","2009-01-18T13:00:00Z","2009-01-18T13:30:00Z","2009-01-18T14:00:00Z","2009-01-18T14:30:00Z","2009-01-18T15:00:00Z","2009-01-18T15:30:00Z","2009-01-18T16:00:00Z","2009-01-18T16:30:00Z","2009-01-18T17:00:00Z","2009-01-18T17:30:00Z","2009-01-18T18:00:00Z","2009-01-18T18:30:00Z","2009-01-18T19:00:00Z","2009-01-18T19:30:00Z","2009-01-18T20:00:00Z","2009-01-18T20:30:00Z","2009-01-18T21:00:00Z","2009-01-18T21:30:00Z","2009-01-18T22:00:00Z","2009-01-18T22:30:00Z","2009-01-18T23:00:00Z","2009-01-18T23:30:00Z","2009-01-19T00:00:00Z","2009-01-19T00:30:00Z","2009-01-19T01:00:00Z","2009-01-19T01:30:00Z","2009-01-19T02:00:00Z","2009-01-19T02:30:00Z","2009-01-19T03:00:00Z","2009-01-19T03:30:00Z","2009-01-19T04:00:00Z","2009-01-19T04:30:00Z","2009-01-19T05:00:00Z","2009-01-19T05:30:00Z","2009-01-19T06:00:00Z","2009-01-19T06:30:00Z","2009-01-19T07:00:00Z","2009-01-19T07:30:00Z","2009-01-19T08:00:00Z","2009-01-19T08:30:00Z","2009-01-19T09:00:00Z","2009-01-19T09:30:00Z","2009-01-19T10:00:00Z","2009-01-19T10:30:00Z","2009-01-19T11:00:00Z","2009-01-19T11:30:00Z","2009-01-19T12:00:00Z","2009-01-19T12:30:00Z","2009-01-19T13:00:00Z","2009-01-19T13:30:00Z","2009-01-19T14:00:00Z","2009-01-19T14:30:00Z","2009-01-19T15:00:00Z","2009-01-19T15:30:00Z","2009-01-19T16:00:00Z","2009-01-19T16:30:00Z","2009-01-19T17:00:00Z","2009-01-19T17:30:00Z","2009-01-19T18:00:00Z","2009-01-19T18:30:00Z","2009-01-19T19:00:00Z","2009-01-19T19:30:00Z","2009-01-19T20:00:00Z","2009-01-19T20:30:00Z","2009-01-19T21:00:00Z","2009-01-19T21:30:00Z","2009-01-19T22:00:00Z","2009-01-19T22:30:00Z","2009-01-19T23:00:00Z","2009-01-19T23:30:00Z","2009-01-20T00:00:00Z","2009-01-20T00:30:00Z","2009-01-20T01:00:00Z","2009-01-20T01:30:00Z","2009-01-20T02:00:00Z","2009-01-20T02:30:00Z","2009-01-20T03:00:00Z","2009-01-20T03:30:00Z","2009-01-20T04:00:00Z","2009-01-20T04:30:00Z","2009-01-20T05:00:00Z","2009-01-20T05:30:00Z","2009-01-20T06:00:00Z","2009-01-20T06:30:00Z","2009-01-20T07:00:00Z","2009-01-20T07:30:00Z","2009-01-20T08:00:00Z","2009-01-20T08:30:00Z","2009-01-20T09:00:00Z","2009-01-20T09:30:00Z","2009-01-20T10:00:00Z","2009-01-20T10:30:00Z","2009-01-20T11:00:00Z","2009-01-20T11:30:00Z","2009-01-20T12:00:00Z","2009-01-20T12:30:00Z","2009-01-20T13:00:00Z","2009-01-20T13:30:00Z","2009-01-20T14:00:00Z","2009-01-20T14:30:00Z","2009-01-20T15:00:00Z","2009-01-20T15:30:00Z","2009-01-20T16:00:00Z","2009-01-20T16:30:00Z","2009-01-20T17:00:00Z","2009-01-20T17:30:00Z","2009-01-20T18:00:00Z","2009-01-20T18:30:00Z","2009-01-20T19:00:00Z","2009-01-20T19:30:00Z","2009-01-20T20:00:00Z","2009-01-20T20:30:00Z","2009-01-20T21:00:00Z","2009-01-20T21:30:00Z","2009-01-20T22:00:00Z","2009-01-20T22:30:00Z","2009-01-20T23:00:00Z","2009-01-20T23:30:00Z","2009-01-21T00:00:00Z","2009-01-21T00:30:00Z","2009-01-21T01:00:00Z","2009-01-21T01:30:00Z","2009-01-21T02:00:00Z","2009-01-21T02:30:00Z","2009-01-21T03:00:00Z","2009-01-21T03:30:00Z","2009-01-21T04:00:00Z","2009-01-21T04:30:00Z","2009-01-21T05:00:00Z","2009-01-21T05:30:00Z","2009-01-21T06:00:00Z","2009-01-21T06:30:00Z","2009-01-21T07:00:00Z","2009-01-21T07:30:00Z","2009-01-21T08:00:00Z","2009-01-21T08:30:00Z","2009-01-21T09:00:00Z","2009-01-21T09:30:00Z","2009-01-21T10:00:00Z","2009-01-21T10:30:00Z","2009-01-21T11:00:00Z","2009-01-21T11:30:00Z","2009-01-21T12:00:00Z","2009-01-21T12:30:00Z","2009-01-21T13:00:00Z","2009-01-21T13:30:00Z","2009-01-21T14:00:00Z","2009-01-21T14:30:00Z","2009-01-21T15:00:00Z","2009-01-21T15:30:00Z","2009-01-21T16:00:00Z","2009-01-21T16:30:00Z","2009-01-21T17:00:00Z","2009-01-21T17:30:00Z","2009-01-21T18:00:00Z","2009-01-21T18:30:00Z","2009-01-21T19:00:00Z","2009-01-21T19:30:00Z","2009-01-21T20:00:00Z","2009-01-21T20:30:00Z","2009-01-21T21:00:00Z","2009-01-21T21:30:00Z","2009-01-21T22:00:00Z","2009-01-21T22:30:00Z","2009-01-21T23:00:00Z","2009-01-21T23:30:00Z","2009-01-22T00:00:00Z","2009-01-22T00:30:00Z","2009-01-22T01:00:00Z","2009-01-22T01:30:00Z","2009-01-22T02:00:00Z","2009-01-22T02:30:00Z","2009-01-22T03:00:00Z","2009-01-22T03:30:00Z","2009-01-22T04:00:00Z","2009-01-22T04:30:00Z","2009-01-22T05:00:00Z","2009-01-22T05:30:00Z","2009-01-22T06:00:00Z","2009-01-22T06:30:00Z","2009-01-22T07:00:00Z","2009-01-22T07:30:00Z","2009-01-22T08:00:00Z","2009-01-22T08:30:00Z","2009-01-22T09:00:00Z","2009-01-22T09:30:00Z","2009-01-22T10:00:00Z","2009-01-22T10:30:00Z","2009-01-22T11:00:00Z","2009-01-22T11:30:00Z","2009-01-22T12:00:00Z","2009-01-22T12:30:00Z","2009-01-22T13:00:00Z","2009-01-22T13:30:00Z","2009-01-22T14:00:00Z","2009-01-22T14:30:00Z","2009-01-22T15:00:00Z","2009-01-22T15:30:00Z","2009-01-22T16:00:00Z","2009-01-22T16:30:00Z","2009-01-22T17:00:00Z","2009-01-22T17:30:00Z","2009-01-22T18:00:00Z","2009-01-22T18:30:00Z","2009-01-22T19:00:00Z","2009-01-22T19:30:00Z","2009-01-22T20:00:00Z","2009-01-22T20:30:00Z","2009-01-22T21:00:00Z","2009-01-22T21:30:00Z","2009-01-22T22:00:00Z","2009-01-22T22:30:00Z","2009-01-22T23:00:00Z","2009-01-22T23:30:00Z","2009-01-23T00:00:00Z","2009-01-23T00:30:00Z","2009-01-23T01:00:00Z","2009-01-23T01:30:00Z","2009-01-23T02:00:00Z","2009-01-23T02:30:00Z","2009-01-23T03:00:00Z","2009-01-23T03:30:00Z","2009-01-23T04:00:00Z","2009-01-23T04:30:00Z","2009-01-23T05:00:00Z","2009-01-23T05:30:00Z","2009-01-23T06:00:00Z","2009-01-23T06:30:00Z","2009-01-23T07:00:00Z","2009-01-23T07:30:00Z","2009-01-23T08:00:00Z","2009-01-23T08:30:00Z","2009-01-23T09:00:00Z","2009-01-23T09:30:00Z","2009-01-23T10:00:00Z","2009-01-23T10:30:00Z","2009-01-23T11:00:00Z","2009-01-23T11:30:00Z","2009-01-23T12:00:00Z","2009-01-23T12:30:00Z","2009-01-23T13:00:00Z","2009-01-23T13:30:00Z","2009-01-23T14:00:00Z","2009-01-23T14:30:00Z","2009-01-23T15:00:00Z","2009-01-23T15:30:00Z","2009-01-23T16:00:00Z","2009-01-23T16:30:00Z","2009-01-23T17:00:00Z","2009-01-23T17:30:00Z","2009-01-23T18:00:00Z","2009-01-23T18:30:00Z","2009-01-23T19:00:00Z","2009-01-23T19:30:00Z","2009-01-23T20:00:00Z","2009-01-23T20:30:00Z","2009-01-23T21:00:00Z","2009-01-23T21:30:00Z","2009-01-23T22:00:00Z","2009-01-23T22:30:00Z","2009-01-23T23:00:00Z","2009-01-23T23:30:00Z","2009-01-24T00:00:00Z","2009-01-24T00:30:00Z","2009-01-24T01:00:00Z","2009-01-24T01:30:00Z","2009-01-24T02:00:00Z","2009-01-24T02:30:00Z","2009-01-24T03:00:00Z","2009-01-24T03:30:00Z","2009-01-24T04:00:00Z","2009-01-24T04:30:00Z","2009-01-24T05:00:00Z","2009-01-24T05:30:00Z","2009-01-24T06:00:00Z","2009-01-24T06:30:00Z","2009-01-24T07:00:00Z","2009-01-24T07:30:00Z","2009-01-24T08:00:00Z","2009-01-24T08:30:00Z","2009-01-24T09:00:00Z","2009-01-24T09:30:00Z","2009-01-24T10:00:00Z","2009-01-24T10:30:00Z","2009-01-24T11:00:00Z","2009-01-24T11:30:00Z","2009-01-24T12:00:00Z","2009-01-24T12:30:00Z","2009-01-24T13:00:00Z","2009-01-24T13:30:00Z","2009-01-24T14:00:00Z","2009-01-24T14:30:00Z","2009-01-24T15:00:00Z","2009-01-24T15:30:00Z","2009-01-24T16:00:00Z","2009-01-24T16:30:00Z","2009-01-24T17:00:00Z","2009-01-24T17:30:00Z","2009-01-24T18:00:00Z","2009-01-24T18:30:00Z","2009-01-24T19:00:00Z","2009-01-24T19:30:00Z","2009-01-24T20:00:00Z","2009-01-24T20:30:00Z","2009-01-24T21:00:00Z","2009-01-24T21:30:00Z","2009-01-24T22:00:00Z","2009-01-24T22:30:00Z","2009-01-24T23:00:00Z","2009-01-24T23:30:00Z","2009-01-25T00:00:00Z","2009-01-25T00:30:00Z","2009-01-25T01:00:00Z","2009-01-25T01:30:00Z","2009-01-25T02:00:00Z","2009-01-25T02:30:00Z","2009-01-25T03:00:00Z","2009-01-25T03:30:00Z","2009-01-25T04:00:00Z","2009-01-25T04:30:00Z","2009-01-25T05:00:00Z","2009-01-25T05:30:00Z","2009-01-25T06:00:00Z","2009-01-25T06:30:00Z","2009-01-25T07:00:00Z","2009-01-25T07:30:00Z","2009-01-25T08:00:00Z","2009-01-25T08:30:00Z","2009-01-25T09:00:00Z","2009-01-25T09:30:00Z","2009-01-25T10:00:00Z","2009-01-25T10:30:00Z","2009-01-25T11:00:00Z","2009-01-25T11:30:00Z","2009-01-25T12:00:00Z","2009-01-25T12:30:00Z","2009-01-25T13:00:00Z","2009-01-25T13:30:00Z","2009-01-25T14:00:00Z","2009-01-25T14:30:00Z","2009-01-25T15:00:00Z","2009-01-25T15:30:00Z","2009-01-25T16:00:00Z","2009-01-25T16:30:00Z","2009-01-25T17:00:00Z","2009-01-25T17:30:00Z","2009-01-25T18:00:00Z","2009-01-25T18:30:00Z","2009-01-25T19:00:00Z","2009-01-25T19:30:00Z","2009-01-25T20:00:00Z","2009-01-25T20:30:00Z","2009-01-25T21:00:00Z","2009-01-25T21:30:00Z","2009-01-25T22:00:00Z","2009-01-25T22:30:00Z","2009-01-25T23:00:00Z","2009-01-25T23:30:00Z","2009-01-26T00:00:00Z","2009-01-26T00:30:00Z","2009-01-26T01:00:00Z","2009-01-26T01:30:00Z","2009-01-26T02:00:00Z","2009-01-26T02:30:00Z","2009-01-26T03:00:00Z","2009-01-26T03:30:00Z","2009-01-26T04:00:00Z","2009-01-26T04:30:00Z","2009-01-26T05:00:00Z","2009-01-26T05:30:00Z","2009-01-26T06:00:00Z","2009-01-26T06:30:00Z","2009-01-26T07:00:00Z","2009-01-26T07:30:00Z","2009-01-26T08:00:00Z","2009-01-26T08:30:00Z","2009-01-26T09:00:00Z","2009-01-26T09:30:00Z","2009-01-26T10:00:00Z","2009-01-26T10:30:00Z","2009-01-26T11:00:00Z","2009-01-26T11:30:00Z","2009-01-26T12:00:00Z","2009-01-26T12:30:00Z","2009-01-26T13:00:00Z","2009-01-26T13:30:00Z","2009-01-26T14:00:00Z","2009-01-26T14:30:00Z","2009-01-26T15:00:00Z","2009-01-26T15:30:00Z","2009-01-26T16:00:00Z","2009-01-26T16:30:00Z","2009-01-26T17:00:00Z","2009-01-26T17:30:00Z","2009-01-26T18:00:00Z","2009-01-26T18:30:00Z","2009-01-26T19:00:00Z","2009-01-26T19:30:00Z","2009-01-26T20:00:00Z","2009-01-26T20:30:00Z","2009-01-26T21:00:00Z","2009-01-26T21:30:00Z","2009-01-26T22:00:00Z","2009-01-26T22:30:00Z","2009-01-26T23:00:00Z","2009-01-26T23:30:00Z","2009-01-27T00:00:00Z","2009-01-27T00:30:00Z","2009-01-27T01:00:00Z","2009-01-27T01:30:00Z","2009-01-27T02:00:00Z","2009-01-27T02:30:00Z","2009-01-27T03:00:00Z","2009-01-27T03:30:00Z","2009-01-27T04:00:00Z","2009-01-27T04:30:00Z","2009-01-27T05:00:00Z","2009-01-27T05:30:00Z","2009-01-27T06:00:00Z","2009-01-27T06:30:00Z","2009-01-27T07:00:00Z","2009-01-27T07:30:00Z","2009-01-27T08:00:00Z","2009-01-27T08:30:00Z","2009-01-27T09:00:00Z","2009-01-27T09:30:00Z","2009-01-27T10:00:00Z","2009-01-27T10:30:00Z","2009-01-27T11:00:00Z","2009-01-27T11:30:00Z","2009-01-27T12:00:00Z","2009-01-27T12:30:00Z","2009-01-27T13:00:00Z","2009-01-27T13:30:00Z","2009-01-27T14:00:00Z","2009-01-27T14:30:00Z","2009-01-27T15:00:00Z","2009-01-27T15:30:00Z","2009-01-27T16:00:00Z","2009-01-27T16:30:00Z","2009-01-27T17:00:00Z","2009-01-27T17:30:00Z","2009-01-27T18:00:00Z","2009-01-27T18:30:00Z","2009-01-27T19:00:00Z","2009-01-27T19:30:00Z","2009-01-27T20:00:00Z","2009-01-27T20:30:00Z","2009-01-27T21:00:00Z","2009-01-27T21:30:00Z","2009-01-27T22:00:00Z","2009-01-27T22:30:00Z","2009-01-27T23:00:00Z","2009-01-27T23:30:00Z","2009-01-28T00:00:00Z","2009-01-28T00:30:00Z","2009-01-28T01:00:00Z","2009-01-28T01:30:00Z","2009-01-28T02:00:00Z","2009-01-28T02:30:00Z","2009-01-28T03:00:00Z","2009-01-28T03:30:00Z","2009-01-28T04:00:00Z","2009-01-28T04:30:00Z","2009-01-28T05:00:00Z","2009-01-28T05:30:00Z","2009-01-28T06:00:00Z","2009-01-28T06:30:00Z","2009-01-28T07:00:00Z","2009-01-28T07:30:00Z","2009-01-28T08:00:00Z","2009-01-28T08:30:00Z","2009-01-28T09:00:00Z","2009-01-28T09:30:00Z","2009-01-28T10:00:00Z","2009-01-28T10:30:00Z","2009-01-28T11:00:00Z","2009-01-28T11:30:00Z","2009-01-28T12:00:00Z","2009-01-28T12:30:00Z","2009-01-28T13:00:00Z","2009-01-28T13:30:00Z","2009-01-28T14:00:00Z","2009-01-28T14:30:00Z","2009-01-28T15:00:00Z","2009-01-28T15:30:00Z","2009-01-28T16:00:00Z","2009-01-28T16:30:00Z","2009-01-28T17:00:00Z","2009-01-28T17:30:00Z","2009-01-28T18:00:00Z","2009-01-28T18:30:00Z","2009-01-28T19:00:00Z","2009-01-28T19:30:00Z","2009-01-28T20:00:00Z","2009-01-28T20:30:00Z","2009-01-28T21:00:00Z","2009-01-28T21:30:00Z","2009-01-28T22:00:00Z","2009-01-28T22:30:00Z","2009-01-28T23:00:00Z","2009-01-28T23:30:00Z","2009-01-29T00:00:00Z","2009-01-29T00:30:00Z","2009-01-29T01:00:00Z","2009-01-29T01:30:00Z","2009-01-29T02:00:00Z","2009-01-29T02:30:00Z","2009-01-29T03:00:00Z","2009-01-29T03:30:00Z","2009-01-29T04:00:00Z","2009-01-29T04:30:00Z","2009-01-29T05:00:00Z","2009-01-29T05:30:00Z","2009-01-29T06:00:00Z","2009-01-29T06:30:00Z","2009-01-29T07:00:00Z","2009-01-29T07:30:00Z","2009-01-29T08:00:00Z","2009-01-29T08:30:00Z","2009-01-29T09:00:00Z","2009-01-29T09:30:00Z","2009-01-29T10:00:00Z","2009-01-29T10:30:00Z","2009-01-29T11:00:00Z","2009-01-29T11:30:00Z","2009-01-29T12:00:00Z","2009-01-29T12:30:00Z","2009-01-29T13:00:00Z","2009-01-29T13:30:00Z","2009-01-29T14:00:00Z","2009-01-29T14:30:00Z","2009-01-29T15:00:00Z","2009-01-29T15:30:00Z","2009-01-29T16:00:00Z","2009-01-29T16:30:00Z","2009-01-29T17:00:00Z","2009-01-29T17:30:00Z","2009-01-29T18:00:00Z","2009-01-29T18:30:00Z","2009-01-29T19:00:00Z","2009-01-29T19:30:00Z","2009-01-29T20:00:00Z","2009-01-29T20:30:00Z","2009-01-29T21:00:00Z","2009-01-29T21:30:00Z","2009-01-29T22:00:00Z","2009-01-29T22:30:00Z","2009-01-29T23:00:00Z","2009-01-29T23:30:00Z","2009-01-30T00:00:00Z","2009-01-30T00:30:00Z","2009-01-30T01:00:00Z","2009-01-30T01:30:00Z","2009-01-30T02:00:00Z","2009-01-30T02:30:00Z","2009-01-30T03:00:00Z","2009-01-30T03:30:00Z","2009-01-30T04:00:00Z","2009-01-30T04:30:00Z","2009-01-30T05:00:00Z","2009-01-30T05:30:00Z","2009-01-30T06:00:00Z","2009-01-30T06:30:00Z","2009-01-30T07:00:00Z","2009-01-30T07:30:00Z","2009-01-30T08:00:00Z","2009-01-30T08:30:00Z","2009-01-30T09:00:00Z","2009-01-30T09:30:00Z","2009-01-30T10:00:00Z","2009-01-30T10:30:00Z","2009-01-30T11:00:00Z","2009-01-30T11:30:00Z","2009-01-30T12:00:00Z","2009-01-30T12:30:00Z","2009-01-30T13:00:00Z","2009-01-30T13:30:00Z","2009-01-30T14:00:00Z","2009-01-30T14:30:00Z","2009-01-30T15:00:00Z","2009-01-30T15:30:00Z","2009-01-30T16:00:00Z","2009-01-30T16:30:00Z","2009-01-30T17:00:00Z","2009-01-30T17:30:00Z","2009-01-30T18:00:00Z","2009-01-30T18:30:00Z","2009-01-30T19:00:00Z","2009-01-30T19:30:00Z","2009-01-30T20:00:00Z","2009-01-30T20:30:00Z","2009-01-30T21:00:00Z","2009-01-30T21:30:00Z","2009-01-30T22:00:00Z","2009-01-30T22:30:00Z","2009-01-30T23:00:00Z","2009-01-30T23:30:00Z","2009-01-31T00:00:00Z","2009-01-31T00:30:00Z","2009-01-31T01:00:00Z","2009-01-31T01:30:00Z","2009-01-31T02:00:00Z","2009-01-31T02:30:00Z","2009-01-31T03:00:00Z","2009-01-31T03:30:00Z","2009-01-31T04:00:00Z","2009-01-31T04:30:00Z","2009-01-31T05:00:00Z","2009-01-31T05:30:00Z","2009-01-31T06:00:00Z","2009-01-31T06:30:00Z","2009-01-31T07:00:00Z","2009-01-31T07:30:00Z","2009-01-31T08:00:00Z","2009-01-31T08:30:00Z","2009-01-31T09:00:00Z","2009-01-31T09:30:00Z","2009-01-31T10:00:00Z","2009-01-31T10:30:00Z","2009-01-31T11:00:00Z","2009-01-31T11:30:00Z","2009-01-31T12:00:00Z","2009-01-31T12:30:00Z","2009-01-31T13:00:00Z","2009-01-31T13:30:00Z","2009-01-31T14:00:00Z","2009-01-31T14:30:00Z","2009-01-31T15:00:00Z","2009-01-31T15:30:00Z","2009-01-31T16:00:00Z","2009-01-31T16:30:00Z","2009-01-31T17:00:00Z","2009-01-31T17:30:00Z","2009-01-31T18:00:00Z","2009-01-31T18:30:00Z","2009-01-31T19:00:00Z","2009-01-31T19:30:00Z","2009-01-31T20:00:00Z","2009-01-31T20:30:00Z","2009-01-31T21:00:00Z","2009-01-31T21:30:00Z","2009-01-31T22:00:00Z","2009-01-31T22:30:00Z","2009-01-31T23:00:00Z","2009-01-31T23:30:00Z","2009-02-01T00:00:00Z"],"ap30":[6.0,6.0,5.0,9.0,5.0,5.0,4.0,5.0,15.0,15.0,12.0,7.0,9.0,12.0,15.0,22.0,15.0,9.0,7.0,6.0,6.0,5.0,7.0,9.0,12.0,7.0,5.0,7.0,5.0,3.0,4.0,9.0,9.0,5.0,4.0,4.0,3.0,2.0,4.0,4.0,3.0,3.0,4.0,3.0,9.0,9.0,5.0,5.0,6.0,3.0,4.0,3.0,3.0,3.0,2.0,3.0,5.0,3.0,3.0,3.0,2.0,0.0,2.0,2.0,2.0,0.0,0.0,3.0,0.0,2.0,2.0,3.0,2.0,3.0,2.0,3.0,4.0,5.0,5.0,6.0,4.0,4.0,7.0,6.0,5.0,6.0,9.0,12.0,6.0,6.0,7.0,18.0,18.0,9.0,12.0,7.0,12.0,7.0,7.0,9.0,12.0,15.0,27.0,15.0,12.0,12.0,15.0,18.0,12.0,15.0,5.0,9.0,9.0,18.0,39.0,27.0,27.0,22.0,15.0,18.0,12.0,7.0,7.0,6.0,7.0,5.0,12.0,6.0,5.0,12.0,12.0,12.0,5.0,4.0,3.0,4.0,3.0,3.0,5.0,9.0,9.0,9.0,6.0,6.0,7.0,5.0,6.0,15.0,9.0,4.0,2.0,0.0,3.0,4.0,6.0,5.0,4.0,5.0,4.0,0.0,3.0,3.0,3.0,3.0,6.0,5.0,6.0,4.0,3.0,3.0,2.0,2.0,2.0,3.0,5.0,5.0,5.0,6.0,7.0,9.0,6.0,5.0,5.0,4.0,3.0,4.0,2.0,4.0,2.0,2.0,3.0,4.0,5.0,4.0,2.0,4.0,3.0,5.0,9.0,7.0,4.0,2.0,0.0,0.0,3.0,3.0,2.0,2.0,5.0,6.0,5.0,5.0,5.0,5.0,4.0,2.0,5.0,6.0,4.0,4.0,4.0,4.0,9.0,7.0,9.0,4.0,5.0,7.0,7.0,5.0,3.0,4.0,4.0,4.0,12.0,9.0,6.0,6.0,4.0,4.0,2.0,2.0,2.0,4.0,12.0,12.0,9.0,7.0,4.0,5.0,3.0,5.0,3.0,2.0,4.0,4.0,3.0,2.0,2.0,3.0,6.0,5.0,5.0,5.0,4.0,4.0,3.0,2.0,3.0,4.0,7.0,9.0,6.0,3.0,4.0,3.0,0.0,2.0,2.0,0.0,0.0,0.0,0.0,0.0,3.0,0.0,0.0,3.0,3.0,2.0,2.0,3.0,2.0,2.0,3.0,4.0,4.0,3.0,3.0,3.0,2.0,3.0,4.0,5.0,5.0,5.0,3.0,2.0,2.0,3.0,3.0,3.0,2.0,3.0,2.0,2.0,0.0,0.0,0.0,3.0,4.0,3.0,4.0,3.0,2.0,2.0,0.0,2.0,0.0,0.0,0.0,3.0,3.0,5.0,4.0,5.0,5.0,3.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,3.0,2.0,4.0,5.0,3.0,3.0,2.0,3.0,3.0,4.0,3.0,4.0,9.0,9.0,7.0,5.0,4.0,6.0,5.0,6.0,6.0,6.0,5.0,2.0,5.0,5.0,6.0,3.0,3.0,7.0,4.0,4.0,4.0,6.0,6.0,9.0,7.0,5.0,6.0,4.0,7.0,4.0,5.0,5.0,3.0,9.0,5.0,4.0,4.0,3.0,5.0,5.0,4.0,3.0,3.0,3.0,3.0,3.0,4.0,7.0,12.0,15.0,6.0,4.0,5.0,3.0,5.0,6.0,3.0,15.0,12.0,5.0,4.0,4.0,6.0,6.0,7.0,5.0,5.0,4.0,3.0,3.0,6.0,7.0,12.0,15.0,15.0,15.0,12.0,9.0,7.0,9.0,7.0,9.0,12.0,4.0,2.0,6.0,3.0,4.0,3.0,3.0,4.0,6.0,6.0,5.0,6.0,2.0,0.0,0.0,2.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,4.0,3.0,0.0,2.0,2.0,3.0,3.0,2.0,4.0,5.0,3.0,4.0,5.0,4.0,4.0,4.0,7.0,6.0,3.0,0.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,0.0,2.0,5.0,4.0,2.0,2.0,2.0,0.0,0.0,0.0,0.0,2.0,2.0,3.0,3.0,3.0,3.0,0.0,2.0,2.0,0.0,0.0,0.0,2.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,2.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,3.0,2.0,3.0,3.0,0.0,3.0,2.0,0.0,0.0,2.0,2.0,2.0,2.0,5.0,6.0,5.0,9.0,9.0,7.0,5.0,6.0,6.0,7.0,7.0,6.0,6.0,3.0,2.0,0.0,0.0,2.0,0.0,0.0,2.0,3.0,6.0,3.0,3.0,3.0,6.0,5.0,4.0,3.0,3.0,5.0,5.0,5.0,3.0,5.0,4.0,6.0,6.0,5.0,7.0,6.0,4.0,3.0,3.0,2.0,4.0,18.0,12.0,7.0,6.0,9.0,12.0,7.0,6.0,7.0,7.0,5.0,6.0,5.0,4.0,5.0,4.0,6.0,4.0,4.0,5.0,7.0,9.0,7.0,7.0,15.0,15.0,12.0,6.0,4.0,4.0,2.0,4.0,4.0,4.0,9.0,7.0,2.0,3.0,4.0,4.0,5.0,5.0,3.0,4.0,6.0,6.0,7.0,7.0,7.0,4.0,6.0,4.0,9.0,9.0,6.0,6.0,5.0,5.0,6.0,6.0,5.0,5.0,6.0,4.0,4.0,4.0,6.0,6.0,5.0,4.0,4.0,4.0,3.0,2.0,2.0,2.0,4.0,4.0,4.0,5.0,4.0,6.0,12.0,9.0,5.0,9.0,9.0,12.0,9.0,9.0,9.0,15.0,12.0,6.0,6.0,7.0,7.0,9.0,12.0,7.0,18.0,5.0,4.0,4.0,5.0,4.0,4.0,3.0,0.0,2.0,3.0,3.0,0.0,0.0,3.0,6.0,3.0,4.0,6.0,2.0,2.0,2.0,3.0,3.0,3.0,3.0,3.0,4.0,3.0,5.0,6.0,5.0,3.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,4.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,2.0,3.0,6.0,5.0,4.0,4.0,3.0,2.0,3.0,2.0,2.0,3.0,3.0,4.0,3.0,2.0,2.0,3.0,4.0,3.0,2.0,2.0,2.0,3.0,3.0,5.0,5.0,3.0,3.0,5.0,5.0,5.0,3.0,3.0,3.0,2.0,2.0,3.0,3.0,2.0,0.0,2.0,0.0,4.0,3.0,4.0,0.0,0.0,2.0,0.0,2.0,2.0,2.0,3.0,2.0,3.0,2.0,2.0,2.0,3.0,4.0,7.0,5.0,4.0,3.0,2.0,2.0,0.0,0.0,3.0,0.0,3.0,2.0,3.0,4.0,2.0,4.0,4.0,4.0,4.0,5.0,3.0,2.0,4.0,5.0,5.0,9.0,6.0,9.0,15.0,18.0,48.0,56.0,22.0,15.0,6.0,5.0,4.0,6.0,12.0,15.0,12.0,6.0,3.0,3.0,5.0,4.0,3.0,4.0,3.0,3.0,6.0,3.0,2.0,6.0,4.0,3.0,7.0,5.0,6.0,7.0,7.0,7.0,9.0,6.0,6.0,6.0,9.0,7.0,7.0,15.0,9.0,9.0,6.0,6.0,15.0,9.0,7.0,5.0,7.0,6.0,7.0,3.0,0.0,3.0,6.0,4.0,4.0,3.0,4.0,4.0,6.0,2.0,4.0,3.0,2.0,3.0,4.0,3.0,2.0,3.0,4.0,2.0,0.0,2.0,0.0,2.0,0.0,0.0,2.0,4.0,4.0,4.0,4.0,5.0,9.0,7.0,5.0,4.0,6.0,5.0,4.0,3.0,3.0,4.0,3.0,2.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,3.0,3.0,5.0,4.0,4.0,5.0,4.0,5.0,2.0,2.0,2.0,2.0,3.0,5.0,4.0,3.0,5.0,7.0,5.0,7.0,7.0,6.0,4.0,5.0,7.0,5.0,3.0,4.0,3.0,3.0,3.0,5.0,5.0,3.0,0.0,0.0,0.0,2.0,0.0,0.0,3.0,0.0,3.0,2.0,4.0,3.0,0.0,0.0,2.0,4.0,2.0,4.0,2.0,2.0,3.0,2.0,2.0,2.0,4.0,3.0,2.0,3.0,3.0,0.0,0.0,2.0,3.0,4.0,3.0,5.0,3.0,4.0,4.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,3.0,4.0,2.0,2.0,2.0,0.0,0.0,2.0,3.0,4.0,3.0,4.0,3.0,2.0,3.0,2.0,0.0,2.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,3.0,4.0,3.0,4.0,3.0,2.0,2.0,0.0,0.0,0.0,2.0,7.0,9.0,2.0,3.0,3.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,3.0,0.0,0.0,2.0,3.0,3.0,5.0,3.0,4.0,6.0,6.0,5.0,3.0,2.0,3.0,3.0,2.0,2.0,2.0,3.0,0.0,0.0,2.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,5.0,2.0,3.0,2.0,3.0,3.0,2.0,2.0,2.0,0.0,2.0,0.0,0.0,2.0,0.0,0.0,2.0,4.0,2.0,4.0,15.0,15.0,6.0,9.0,27.0,27.0,15.0,15.0,9.0,6.0,5.0,5.0,18.0,12.0,7.0,12.0,6.0,6.0,7.0,18.0,15.0,15.0,15.0,6.0,9.0,12.0,9.0,9.0,7.0,15.0,22.0,22.0,18.0,15.0,15.0,18.0,18.0,15.0,18.0,12.0,9.0,9.0,6.0,5.0,3.0,2.0,2.0,2.0,3.0,2.0,2.0,2.0,3.0,3.0,4.0,4.0,2.0,0.0,0.0,4.0,5.0,5.0,6.0,5.0,3.0,3.0,0.0,2.0,0.0,3.0,2.0,0.0,5.0,4.0,3.0,2.0,2.0,2.0,4.0,3.0,3.0,2.0,4.0,4.0,5.0,6.0,5.0,5.0,4.0,5.0,5.0,6.0,7.0,9.0,9.0,6.0,5.0,4.0,2.0,3.0,2.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,0.0,0.0,0.0,2.0,5.0,3.0,4.0,4.0,3.0,3.0,3.0,3.0,2.0,2.0,2.0,6.0,2.0,0.0,0.0,0.0,0.0,2.0,3.0,2.0,2.0,3.0,3.0,7.0,6.0,3.0,5.0,3.0,4.0,2.0,2.0,0.0,3.0,0.0,0.0,5.0,2.0,5.0,9.0,9.0,7.0,9.0,18.0,18.0,12.0,9.0,9.0,4.0,5.0,6.0,6.0,4.0,3.0,6.0,3.0,9.0,3.0,2.0,3.0,2.0,0.0,2.0,3.0,2.0,3.0,3.0,4.0,5.0,0.0,0.0,0.0,0.0,3.0,0.0,0.0,2.0,2.0,2.0,0.0,0.0,0.0,2.0,4.0,6.0,5.0,5.0,7.0,5.0,3.0,2.0,4.0,3.0,2.0,3.0,2.0,4.0,4.0,6.0,5.0,5.0,4.0,2.0,2.0,2.0,3.0,2.0,3.0,3.0,3.0,3.0,0.0,4.0,3.0,4.0,4.0,4.0,7.0,7.0,5.0,6.0,18.0,9.0,7.0,7.0,7.0,9.0,6.0,3.0,4.0,4.0,5.0,5.0,5.0,5.0,5.0,7.0,7.0,9.0,5.0,7.0,5.0,15.0,18.0,7.0,9.0,5.0,5.0,6.0,9.0,18.0,15.0,9.0,18.0,7.0,12.0,6.0,4.0,4.0,7.0,4.0,7.0,12.0,9.0,5.0,7.0,6.0,4.0,4.0,5.0,12.0,12.0,7.0,7.0,6.0]} diff --git a/pysatSpaceWeather/tests/test_data/ap60_2009-01.txt b/pysatSpaceWeather/tests/test_data/ap60_2009-01.txt new file mode 100644 index 00000000..5c27871d --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/ap60_2009-01.txt @@ -0,0 +1 @@ +{"meta":{"source":"GFZ Potsdam","license":"CC BY 4.0"},"datetime":["2009-01-01T00:00:00Z","2009-01-01T01:00:00Z","2009-01-01T02:00:00Z","2009-01-01T03:00:00Z","2009-01-01T04:00:00Z","2009-01-01T05:00:00Z","2009-01-01T06:00:00Z","2009-01-01T07:00:00Z","2009-01-01T08:00:00Z","2009-01-01T09:00:00Z","2009-01-01T10:00:00Z","2009-01-01T11:00:00Z","2009-01-01T12:00:00Z","2009-01-01T13:00:00Z","2009-01-01T14:00:00Z","2009-01-01T15:00:00Z","2009-01-01T16:00:00Z","2009-01-01T17:00:00Z","2009-01-01T18:00:00Z","2009-01-01T19:00:00Z","2009-01-01T20:00:00Z","2009-01-01T21:00:00Z","2009-01-01T22:00:00Z","2009-01-01T23:00:00Z","2009-01-02T00:00:00Z","2009-01-02T01:00:00Z","2009-01-02T02:00:00Z","2009-01-02T03:00:00Z","2009-01-02T04:00:00Z","2009-01-02T05:00:00Z","2009-01-02T06:00:00Z","2009-01-02T07:00:00Z","2009-01-02T08:00:00Z","2009-01-02T09:00:00Z","2009-01-02T10:00:00Z","2009-01-02T11:00:00Z","2009-01-02T12:00:00Z","2009-01-02T13:00:00Z","2009-01-02T14:00:00Z","2009-01-02T15:00:00Z","2009-01-02T16:00:00Z","2009-01-02T17:00:00Z","2009-01-02T18:00:00Z","2009-01-02T19:00:00Z","2009-01-02T20:00:00Z","2009-01-02T21:00:00Z","2009-01-02T22:00:00Z","2009-01-02T23:00:00Z","2009-01-03T00:00:00Z","2009-01-03T01:00:00Z","2009-01-03T02:00:00Z","2009-01-03T03:00:00Z","2009-01-03T04:00:00Z","2009-01-03T05:00:00Z","2009-01-03T06:00:00Z","2009-01-03T07:00:00Z","2009-01-03T08:00:00Z","2009-01-03T09:00:00Z","2009-01-03T10:00:00Z","2009-01-03T11:00:00Z","2009-01-03T12:00:00Z","2009-01-03T13:00:00Z","2009-01-03T14:00:00Z","2009-01-03T15:00:00Z","2009-01-03T16:00:00Z","2009-01-03T17:00:00Z","2009-01-03T18:00:00Z","2009-01-03T19:00:00Z","2009-01-03T20:00:00Z","2009-01-03T21:00:00Z","2009-01-03T22:00:00Z","2009-01-03T23:00:00Z","2009-01-04T00:00:00Z","2009-01-04T01:00:00Z","2009-01-04T02:00:00Z","2009-01-04T03:00:00Z","2009-01-04T04:00:00Z","2009-01-04T05:00:00Z","2009-01-04T06:00:00Z","2009-01-04T07:00:00Z","2009-01-04T08:00:00Z","2009-01-04T09:00:00Z","2009-01-04T10:00:00Z","2009-01-04T11:00:00Z","2009-01-04T12:00:00Z","2009-01-04T13:00:00Z","2009-01-04T14:00:00Z","2009-01-04T15:00:00Z","2009-01-04T16:00:00Z","2009-01-04T17:00:00Z","2009-01-04T18:00:00Z","2009-01-04T19:00:00Z","2009-01-04T20:00:00Z","2009-01-04T21:00:00Z","2009-01-04T22:00:00Z","2009-01-04T23:00:00Z","2009-01-05T00:00:00Z","2009-01-05T01:00:00Z","2009-01-05T02:00:00Z","2009-01-05T03:00:00Z","2009-01-05T04:00:00Z","2009-01-05T05:00:00Z","2009-01-05T06:00:00Z","2009-01-05T07:00:00Z","2009-01-05T08:00:00Z","2009-01-05T09:00:00Z","2009-01-05T10:00:00Z","2009-01-05T11:00:00Z","2009-01-05T12:00:00Z","2009-01-05T13:00:00Z","2009-01-05T14:00:00Z","2009-01-05T15:00:00Z","2009-01-05T16:00:00Z","2009-01-05T17:00:00Z","2009-01-05T18:00:00Z","2009-01-05T19:00:00Z","2009-01-05T20:00:00Z","2009-01-05T21:00:00Z","2009-01-05T22:00:00Z","2009-01-05T23:00:00Z","2009-01-06T00:00:00Z","2009-01-06T01:00:00Z","2009-01-06T02:00:00Z","2009-01-06T03:00:00Z","2009-01-06T04:00:00Z","2009-01-06T05:00:00Z","2009-01-06T06:00:00Z","2009-01-06T07:00:00Z","2009-01-06T08:00:00Z","2009-01-06T09:00:00Z","2009-01-06T10:00:00Z","2009-01-06T11:00:00Z","2009-01-06T12:00:00Z","2009-01-06T13:00:00Z","2009-01-06T14:00:00Z","2009-01-06T15:00:00Z","2009-01-06T16:00:00Z","2009-01-06T17:00:00Z","2009-01-06T18:00:00Z","2009-01-06T19:00:00Z","2009-01-06T20:00:00Z","2009-01-06T21:00:00Z","2009-01-06T22:00:00Z","2009-01-06T23:00:00Z","2009-01-07T00:00:00Z","2009-01-07T01:00:00Z","2009-01-07T02:00:00Z","2009-01-07T03:00:00Z","2009-01-07T04:00:00Z","2009-01-07T05:00:00Z","2009-01-07T06:00:00Z","2009-01-07T07:00:00Z","2009-01-07T08:00:00Z","2009-01-07T09:00:00Z","2009-01-07T10:00:00Z","2009-01-07T11:00:00Z","2009-01-07T12:00:00Z","2009-01-07T13:00:00Z","2009-01-07T14:00:00Z","2009-01-07T15:00:00Z","2009-01-07T16:00:00Z","2009-01-07T17:00:00Z","2009-01-07T18:00:00Z","2009-01-07T19:00:00Z","2009-01-07T20:00:00Z","2009-01-07T21:00:00Z","2009-01-07T22:00:00Z","2009-01-07T23:00:00Z","2009-01-08T00:00:00Z","2009-01-08T01:00:00Z","2009-01-08T02:00:00Z","2009-01-08T03:00:00Z","2009-01-08T04:00:00Z","2009-01-08T05:00:00Z","2009-01-08T06:00:00Z","2009-01-08T07:00:00Z","2009-01-08T08:00:00Z","2009-01-08T09:00:00Z","2009-01-08T10:00:00Z","2009-01-08T11:00:00Z","2009-01-08T12:00:00Z","2009-01-08T13:00:00Z","2009-01-08T14:00:00Z","2009-01-08T15:00:00Z","2009-01-08T16:00:00Z","2009-01-08T17:00:00Z","2009-01-08T18:00:00Z","2009-01-08T19:00:00Z","2009-01-08T20:00:00Z","2009-01-08T21:00:00Z","2009-01-08T22:00:00Z","2009-01-08T23:00:00Z","2009-01-09T00:00:00Z","2009-01-09T01:00:00Z","2009-01-09T02:00:00Z","2009-01-09T03:00:00Z","2009-01-09T04:00:00Z","2009-01-09T05:00:00Z","2009-01-09T06:00:00Z","2009-01-09T07:00:00Z","2009-01-09T08:00:00Z","2009-01-09T09:00:00Z","2009-01-09T10:00:00Z","2009-01-09T11:00:00Z","2009-01-09T12:00:00Z","2009-01-09T13:00:00Z","2009-01-09T14:00:00Z","2009-01-09T15:00:00Z","2009-01-09T16:00:00Z","2009-01-09T17:00:00Z","2009-01-09T18:00:00Z","2009-01-09T19:00:00Z","2009-01-09T20:00:00Z","2009-01-09T21:00:00Z","2009-01-09T22:00:00Z","2009-01-09T23:00:00Z","2009-01-10T00:00:00Z","2009-01-10T01:00:00Z","2009-01-10T02:00:00Z","2009-01-10T03:00:00Z","2009-01-10T04:00:00Z","2009-01-10T05:00:00Z","2009-01-10T06:00:00Z","2009-01-10T07:00:00Z","2009-01-10T08:00:00Z","2009-01-10T09:00:00Z","2009-01-10T10:00:00Z","2009-01-10T11:00:00Z","2009-01-10T12:00:00Z","2009-01-10T13:00:00Z","2009-01-10T14:00:00Z","2009-01-10T15:00:00Z","2009-01-10T16:00:00Z","2009-01-10T17:00:00Z","2009-01-10T18:00:00Z","2009-01-10T19:00:00Z","2009-01-10T20:00:00Z","2009-01-10T21:00:00Z","2009-01-10T22:00:00Z","2009-01-10T23:00:00Z","2009-01-11T00:00:00Z","2009-01-11T01:00:00Z","2009-01-11T02:00:00Z","2009-01-11T03:00:00Z","2009-01-11T04:00:00Z","2009-01-11T05:00:00Z","2009-01-11T06:00:00Z","2009-01-11T07:00:00Z","2009-01-11T08:00:00Z","2009-01-11T09:00:00Z","2009-01-11T10:00:00Z","2009-01-11T11:00:00Z","2009-01-11T12:00:00Z","2009-01-11T13:00:00Z","2009-01-11T14:00:00Z","2009-01-11T15:00:00Z","2009-01-11T16:00:00Z","2009-01-11T17:00:00Z","2009-01-11T18:00:00Z","2009-01-11T19:00:00Z","2009-01-11T20:00:00Z","2009-01-11T21:00:00Z","2009-01-11T22:00:00Z","2009-01-11T23:00:00Z","2009-01-12T00:00:00Z","2009-01-12T01:00:00Z","2009-01-12T02:00:00Z","2009-01-12T03:00:00Z","2009-01-12T04:00:00Z","2009-01-12T05:00:00Z","2009-01-12T06:00:00Z","2009-01-12T07:00:00Z","2009-01-12T08:00:00Z","2009-01-12T09:00:00Z","2009-01-12T10:00:00Z","2009-01-12T11:00:00Z","2009-01-12T12:00:00Z","2009-01-12T13:00:00Z","2009-01-12T14:00:00Z","2009-01-12T15:00:00Z","2009-01-12T16:00:00Z","2009-01-12T17:00:00Z","2009-01-12T18:00:00Z","2009-01-12T19:00:00Z","2009-01-12T20:00:00Z","2009-01-12T21:00:00Z","2009-01-12T22:00:00Z","2009-01-12T23:00:00Z","2009-01-13T00:00:00Z","2009-01-13T01:00:00Z","2009-01-13T02:00:00Z","2009-01-13T03:00:00Z","2009-01-13T04:00:00Z","2009-01-13T05:00:00Z","2009-01-13T06:00:00Z","2009-01-13T07:00:00Z","2009-01-13T08:00:00Z","2009-01-13T09:00:00Z","2009-01-13T10:00:00Z","2009-01-13T11:00:00Z","2009-01-13T12:00:00Z","2009-01-13T13:00:00Z","2009-01-13T14:00:00Z","2009-01-13T15:00:00Z","2009-01-13T16:00:00Z","2009-01-13T17:00:00Z","2009-01-13T18:00:00Z","2009-01-13T19:00:00Z","2009-01-13T20:00:00Z","2009-01-13T21:00:00Z","2009-01-13T22:00:00Z","2009-01-13T23:00:00Z","2009-01-14T00:00:00Z","2009-01-14T01:00:00Z","2009-01-14T02:00:00Z","2009-01-14T03:00:00Z","2009-01-14T04:00:00Z","2009-01-14T05:00:00Z","2009-01-14T06:00:00Z","2009-01-14T07:00:00Z","2009-01-14T08:00:00Z","2009-01-14T09:00:00Z","2009-01-14T10:00:00Z","2009-01-14T11:00:00Z","2009-01-14T12:00:00Z","2009-01-14T13:00:00Z","2009-01-14T14:00:00Z","2009-01-14T15:00:00Z","2009-01-14T16:00:00Z","2009-01-14T17:00:00Z","2009-01-14T18:00:00Z","2009-01-14T19:00:00Z","2009-01-14T20:00:00Z","2009-01-14T21:00:00Z","2009-01-14T22:00:00Z","2009-01-14T23:00:00Z","2009-01-15T00:00:00Z","2009-01-15T01:00:00Z","2009-01-15T02:00:00Z","2009-01-15T03:00:00Z","2009-01-15T04:00:00Z","2009-01-15T05:00:00Z","2009-01-15T06:00:00Z","2009-01-15T07:00:00Z","2009-01-15T08:00:00Z","2009-01-15T09:00:00Z","2009-01-15T10:00:00Z","2009-01-15T11:00:00Z","2009-01-15T12:00:00Z","2009-01-15T13:00:00Z","2009-01-15T14:00:00Z","2009-01-15T15:00:00Z","2009-01-15T16:00:00Z","2009-01-15T17:00:00Z","2009-01-15T18:00:00Z","2009-01-15T19:00:00Z","2009-01-15T20:00:00Z","2009-01-15T21:00:00Z","2009-01-15T22:00:00Z","2009-01-15T23:00:00Z","2009-01-16T00:00:00Z","2009-01-16T01:00:00Z","2009-01-16T02:00:00Z","2009-01-16T03:00:00Z","2009-01-16T04:00:00Z","2009-01-16T05:00:00Z","2009-01-16T06:00:00Z","2009-01-16T07:00:00Z","2009-01-16T08:00:00Z","2009-01-16T09:00:00Z","2009-01-16T10:00:00Z","2009-01-16T11:00:00Z","2009-01-16T12:00:00Z","2009-01-16T13:00:00Z","2009-01-16T14:00:00Z","2009-01-16T15:00:00Z","2009-01-16T16:00:00Z","2009-01-16T17:00:00Z","2009-01-16T18:00:00Z","2009-01-16T19:00:00Z","2009-01-16T20:00:00Z","2009-01-16T21:00:00Z","2009-01-16T22:00:00Z","2009-01-16T23:00:00Z","2009-01-17T00:00:00Z","2009-01-17T01:00:00Z","2009-01-17T02:00:00Z","2009-01-17T03:00:00Z","2009-01-17T04:00:00Z","2009-01-17T05:00:00Z","2009-01-17T06:00:00Z","2009-01-17T07:00:00Z","2009-01-17T08:00:00Z","2009-01-17T09:00:00Z","2009-01-17T10:00:00Z","2009-01-17T11:00:00Z","2009-01-17T12:00:00Z","2009-01-17T13:00:00Z","2009-01-17T14:00:00Z","2009-01-17T15:00:00Z","2009-01-17T16:00:00Z","2009-01-17T17:00:00Z","2009-01-17T18:00:00Z","2009-01-17T19:00:00Z","2009-01-17T20:00:00Z","2009-01-17T21:00:00Z","2009-01-17T22:00:00Z","2009-01-17T23:00:00Z","2009-01-18T00:00:00Z","2009-01-18T01:00:00Z","2009-01-18T02:00:00Z","2009-01-18T03:00:00Z","2009-01-18T04:00:00Z","2009-01-18T05:00:00Z","2009-01-18T06:00:00Z","2009-01-18T07:00:00Z","2009-01-18T08:00:00Z","2009-01-18T09:00:00Z","2009-01-18T10:00:00Z","2009-01-18T11:00:00Z","2009-01-18T12:00:00Z","2009-01-18T13:00:00Z","2009-01-18T14:00:00Z","2009-01-18T15:00:00Z","2009-01-18T16:00:00Z","2009-01-18T17:00:00Z","2009-01-18T18:00:00Z","2009-01-18T19:00:00Z","2009-01-18T20:00:00Z","2009-01-18T21:00:00Z","2009-01-18T22:00:00Z","2009-01-18T23:00:00Z","2009-01-19T00:00:00Z","2009-01-19T01:00:00Z","2009-01-19T02:00:00Z","2009-01-19T03:00:00Z","2009-01-19T04:00:00Z","2009-01-19T05:00:00Z","2009-01-19T06:00:00Z","2009-01-19T07:00:00Z","2009-01-19T08:00:00Z","2009-01-19T09:00:00Z","2009-01-19T10:00:00Z","2009-01-19T11:00:00Z","2009-01-19T12:00:00Z","2009-01-19T13:00:00Z","2009-01-19T14:00:00Z","2009-01-19T15:00:00Z","2009-01-19T16:00:00Z","2009-01-19T17:00:00Z","2009-01-19T18:00:00Z","2009-01-19T19:00:00Z","2009-01-19T20:00:00Z","2009-01-19T21:00:00Z","2009-01-19T22:00:00Z","2009-01-19T23:00:00Z","2009-01-20T00:00:00Z","2009-01-20T01:00:00Z","2009-01-20T02:00:00Z","2009-01-20T03:00:00Z","2009-01-20T04:00:00Z","2009-01-20T05:00:00Z","2009-01-20T06:00:00Z","2009-01-20T07:00:00Z","2009-01-20T08:00:00Z","2009-01-20T09:00:00Z","2009-01-20T10:00:00Z","2009-01-20T11:00:00Z","2009-01-20T12:00:00Z","2009-01-20T13:00:00Z","2009-01-20T14:00:00Z","2009-01-20T15:00:00Z","2009-01-20T16:00:00Z","2009-01-20T17:00:00Z","2009-01-20T18:00:00Z","2009-01-20T19:00:00Z","2009-01-20T20:00:00Z","2009-01-20T21:00:00Z","2009-01-20T22:00:00Z","2009-01-20T23:00:00Z","2009-01-21T00:00:00Z","2009-01-21T01:00:00Z","2009-01-21T02:00:00Z","2009-01-21T03:00:00Z","2009-01-21T04:00:00Z","2009-01-21T05:00:00Z","2009-01-21T06:00:00Z","2009-01-21T07:00:00Z","2009-01-21T08:00:00Z","2009-01-21T09:00:00Z","2009-01-21T10:00:00Z","2009-01-21T11:00:00Z","2009-01-21T12:00:00Z","2009-01-21T13:00:00Z","2009-01-21T14:00:00Z","2009-01-21T15:00:00Z","2009-01-21T16:00:00Z","2009-01-21T17:00:00Z","2009-01-21T18:00:00Z","2009-01-21T19:00:00Z","2009-01-21T20:00:00Z","2009-01-21T21:00:00Z","2009-01-21T22:00:00Z","2009-01-21T23:00:00Z","2009-01-22T00:00:00Z","2009-01-22T01:00:00Z","2009-01-22T02:00:00Z","2009-01-22T03:00:00Z","2009-01-22T04:00:00Z","2009-01-22T05:00:00Z","2009-01-22T06:00:00Z","2009-01-22T07:00:00Z","2009-01-22T08:00:00Z","2009-01-22T09:00:00Z","2009-01-22T10:00:00Z","2009-01-22T11:00:00Z","2009-01-22T12:00:00Z","2009-01-22T13:00:00Z","2009-01-22T14:00:00Z","2009-01-22T15:00:00Z","2009-01-22T16:00:00Z","2009-01-22T17:00:00Z","2009-01-22T18:00:00Z","2009-01-22T19:00:00Z","2009-01-22T20:00:00Z","2009-01-22T21:00:00Z","2009-01-22T22:00:00Z","2009-01-22T23:00:00Z","2009-01-23T00:00:00Z","2009-01-23T01:00:00Z","2009-01-23T02:00:00Z","2009-01-23T03:00:00Z","2009-01-23T04:00:00Z","2009-01-23T05:00:00Z","2009-01-23T06:00:00Z","2009-01-23T07:00:00Z","2009-01-23T08:00:00Z","2009-01-23T09:00:00Z","2009-01-23T10:00:00Z","2009-01-23T11:00:00Z","2009-01-23T12:00:00Z","2009-01-23T13:00:00Z","2009-01-23T14:00:00Z","2009-01-23T15:00:00Z","2009-01-23T16:00:00Z","2009-01-23T17:00:00Z","2009-01-23T18:00:00Z","2009-01-23T19:00:00Z","2009-01-23T20:00:00Z","2009-01-23T21:00:00Z","2009-01-23T22:00:00Z","2009-01-23T23:00:00Z","2009-01-24T00:00:00Z","2009-01-24T01:00:00Z","2009-01-24T02:00:00Z","2009-01-24T03:00:00Z","2009-01-24T04:00:00Z","2009-01-24T05:00:00Z","2009-01-24T06:00:00Z","2009-01-24T07:00:00Z","2009-01-24T08:00:00Z","2009-01-24T09:00:00Z","2009-01-24T10:00:00Z","2009-01-24T11:00:00Z","2009-01-24T12:00:00Z","2009-01-24T13:00:00Z","2009-01-24T14:00:00Z","2009-01-24T15:00:00Z","2009-01-24T16:00:00Z","2009-01-24T17:00:00Z","2009-01-24T18:00:00Z","2009-01-24T19:00:00Z","2009-01-24T20:00:00Z","2009-01-24T21:00:00Z","2009-01-24T22:00:00Z","2009-01-24T23:00:00Z","2009-01-25T00:00:00Z","2009-01-25T01:00:00Z","2009-01-25T02:00:00Z","2009-01-25T03:00:00Z","2009-01-25T04:00:00Z","2009-01-25T05:00:00Z","2009-01-25T06:00:00Z","2009-01-25T07:00:00Z","2009-01-25T08:00:00Z","2009-01-25T09:00:00Z","2009-01-25T10:00:00Z","2009-01-25T11:00:00Z","2009-01-25T12:00:00Z","2009-01-25T13:00:00Z","2009-01-25T14:00:00Z","2009-01-25T15:00:00Z","2009-01-25T16:00:00Z","2009-01-25T17:00:00Z","2009-01-25T18:00:00Z","2009-01-25T19:00:00Z","2009-01-25T20:00:00Z","2009-01-25T21:00:00Z","2009-01-25T22:00:00Z","2009-01-25T23:00:00Z","2009-01-26T00:00:00Z","2009-01-26T01:00:00Z","2009-01-26T02:00:00Z","2009-01-26T03:00:00Z","2009-01-26T04:00:00Z","2009-01-26T05:00:00Z","2009-01-26T06:00:00Z","2009-01-26T07:00:00Z","2009-01-26T08:00:00Z","2009-01-26T09:00:00Z","2009-01-26T10:00:00Z","2009-01-26T11:00:00Z","2009-01-26T12:00:00Z","2009-01-26T13:00:00Z","2009-01-26T14:00:00Z","2009-01-26T15:00:00Z","2009-01-26T16:00:00Z","2009-01-26T17:00:00Z","2009-01-26T18:00:00Z","2009-01-26T19:00:00Z","2009-01-26T20:00:00Z","2009-01-26T21:00:00Z","2009-01-26T22:00:00Z","2009-01-26T23:00:00Z","2009-01-27T00:00:00Z","2009-01-27T01:00:00Z","2009-01-27T02:00:00Z","2009-01-27T03:00:00Z","2009-01-27T04:00:00Z","2009-01-27T05:00:00Z","2009-01-27T06:00:00Z","2009-01-27T07:00:00Z","2009-01-27T08:00:00Z","2009-01-27T09:00:00Z","2009-01-27T10:00:00Z","2009-01-27T11:00:00Z","2009-01-27T12:00:00Z","2009-01-27T13:00:00Z","2009-01-27T14:00:00Z","2009-01-27T15:00:00Z","2009-01-27T16:00:00Z","2009-01-27T17:00:00Z","2009-01-27T18:00:00Z","2009-01-27T19:00:00Z","2009-01-27T20:00:00Z","2009-01-27T21:00:00Z","2009-01-27T22:00:00Z","2009-01-27T23:00:00Z","2009-01-28T00:00:00Z","2009-01-28T01:00:00Z","2009-01-28T02:00:00Z","2009-01-28T03:00:00Z","2009-01-28T04:00:00Z","2009-01-28T05:00:00Z","2009-01-28T06:00:00Z","2009-01-28T07:00:00Z","2009-01-28T08:00:00Z","2009-01-28T09:00:00Z","2009-01-28T10:00:00Z","2009-01-28T11:00:00Z","2009-01-28T12:00:00Z","2009-01-28T13:00:00Z","2009-01-28T14:00:00Z","2009-01-28T15:00:00Z","2009-01-28T16:00:00Z","2009-01-28T17:00:00Z","2009-01-28T18:00:00Z","2009-01-28T19:00:00Z","2009-01-28T20:00:00Z","2009-01-28T21:00:00Z","2009-01-28T22:00:00Z","2009-01-28T23:00:00Z","2009-01-29T00:00:00Z","2009-01-29T01:00:00Z","2009-01-29T02:00:00Z","2009-01-29T03:00:00Z","2009-01-29T04:00:00Z","2009-01-29T05:00:00Z","2009-01-29T06:00:00Z","2009-01-29T07:00:00Z","2009-01-29T08:00:00Z","2009-01-29T09:00:00Z","2009-01-29T10:00:00Z","2009-01-29T11:00:00Z","2009-01-29T12:00:00Z","2009-01-29T13:00:00Z","2009-01-29T14:00:00Z","2009-01-29T15:00:00Z","2009-01-29T16:00:00Z","2009-01-29T17:00:00Z","2009-01-29T18:00:00Z","2009-01-29T19:00:00Z","2009-01-29T20:00:00Z","2009-01-29T21:00:00Z","2009-01-29T22:00:00Z","2009-01-29T23:00:00Z","2009-01-30T00:00:00Z","2009-01-30T01:00:00Z","2009-01-30T02:00:00Z","2009-01-30T03:00:00Z","2009-01-30T04:00:00Z","2009-01-30T05:00:00Z","2009-01-30T06:00:00Z","2009-01-30T07:00:00Z","2009-01-30T08:00:00Z","2009-01-30T09:00:00Z","2009-01-30T10:00:00Z","2009-01-30T11:00:00Z","2009-01-30T12:00:00Z","2009-01-30T13:00:00Z","2009-01-30T14:00:00Z","2009-01-30T15:00:00Z","2009-01-30T16:00:00Z","2009-01-30T17:00:00Z","2009-01-30T18:00:00Z","2009-01-30T19:00:00Z","2009-01-30T20:00:00Z","2009-01-30T21:00:00Z","2009-01-30T22:00:00Z","2009-01-30T23:00:00Z","2009-01-31T00:00:00Z","2009-01-31T01:00:00Z","2009-01-31T02:00:00Z","2009-01-31T03:00:00Z","2009-01-31T04:00:00Z","2009-01-31T05:00:00Z","2009-01-31T06:00:00Z","2009-01-31T07:00:00Z","2009-01-31T08:00:00Z","2009-01-31T09:00:00Z","2009-01-31T10:00:00Z","2009-01-31T11:00:00Z","2009-01-31T12:00:00Z","2009-01-31T13:00:00Z","2009-01-31T14:00:00Z","2009-01-31T15:00:00Z","2009-01-31T16:00:00Z","2009-01-31T17:00:00Z","2009-01-31T18:00:00Z","2009-01-31T19:00:00Z","2009-01-31T20:00:00Z","2009-01-31T21:00:00Z","2009-01-31T22:00:00Z","2009-01-31T23:00:00Z","2009-02-01T00:00:00Z"],"ap60":[5.0,7.0,6.0,5.0,15.0,12.0,9.0,18.0,18.0,7.0,5.0,9.0,12.0,6.0,5.0,7.0,7.0,4.0,2.0,3.0,3.0,4.0,6.0,6.0,5.0,2.0,3.0,4.0,4.0,2.0,0.0,2.0,2.0,2.0,2.0,3.0,3.0,3.0,4.0,5.0,4.0,6.0,5.0,9.0,6.0,15.0,15.0,9.0,9.0,7.0,12.0,18.0,12.0,15.0,12.0,6.0,12.0,32.0,27.0,12.0,9.0,7.0,6.0,7.0,9.0,12.0,4.0,5.0,3.0,6.0,9.0,7.0,6.0,12.0,6.0,0.0,3.0,5.0,5.0,4.0,2.0,3.0,6.0,6.0,3.0,3.0,3.0,5.0,5.0,7.0,6.0,4.0,3.0,3.0,2.0,3.0,5.0,2.0,5.0,9.0,2.0,0.0,4.0,2.0,6.0,4.0,5.0,3.0,4.0,4.0,4.0,9.0,6.0,6.0,6.0,4.0,4.0,9.0,6.0,3.0,0.0,2.0,9.0,9.0,5.0,5.0,2.0,4.0,2.0,3.0,5.0,4.0,4.0,4.0,3.0,7.0,4.0,4.0,2.0,2.0,0.0,0.0,3.0,0.0,3.0,2.0,2.0,4.0,4.0,3.0,2.0,5.0,5.0,3.0,2.0,3.0,2.0,2.0,0.0,2.0,4.0,4.0,0.0,2.0,0.0,3.0,5.0,3.0,3.0,0.0,0.0,0.0,0.0,0.0,2.0,3.0,3.0,3.0,3.0,3.0,9.0,9.0,5.0,7.0,6.0,4.0,3.0,5.0,3.0,6.0,4.0,5.0,6.0,5.0,6.0,5.0,5.0,9.0,4.0,4.0,5.0,3.0,4.0,3.0,15.0,12.0,5.0,3.0,5.0,12.0,5.0,6.0,7.0,4.0,3.0,5.0,9.0,9.0,12.0,9.0,9.0,12.0,4.0,5.0,4.0,4.0,5.0,5.0,2.0,2.0,0.0,0.0,0.0,2.0,3.0,2.0,3.0,3.0,4.0,3.0,4.0,5.0,6.0,2.0,3.0,0.0,0.0,0.0,2.0,2.0,5.0,2.0,0.0,0.0,0.0,2.0,4.0,2.0,2.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,2.0,2.0,2.0,2.0,0.0,4.0,6.0,9.0,9.0,5.0,7.0,6.0,3.0,0.0,0.0,0.0,4.0,3.0,5.0,5.0,3.0,4.0,4.0,5.0,6.0,5.0,5.0,3.0,4.0,15.0,6.0,7.0,7.0,7.0,6.0,4.0,5.0,6.0,5.0,7.0,9.0,12.0,12.0,3.0,4.0,4.0,7.0,3.0,4.0,4.0,4.0,6.0,9.0,5.0,6.0,7.0,6.0,6.0,5.0,5.0,6.0,4.0,6.0,5.0,4.0,3.0,2.0,4.0,5.0,5.0,7.0,9.0,9.0,7.0,12.0,6.0,9.0,7.0,7.0,12.0,4.0,5.0,3.0,0.0,4.0,0.0,4.0,4.0,4.0,2.0,3.0,3.0,4.0,5.0,6.0,4.0,0.0,0.0,0.0,0.0,4.0,2.0,0.0,0.0,0.0,4.0,4.0,4.0,2.0,2.0,3.0,3.0,2.0,3.0,3.0,2.0,3.0,5.0,3.0,5.0,5.0,3.0,0.0,2.0,0.0,2.0,4.0,2.0,2.0,0.0,0.0,2.0,3.0,2.0,3.0,5.0,3.0,0.0,0.0,3.0,2.0,4.0,3.0,3.0,5.0,2.0,3.0,6.0,7.0,18.0,39.0,15.0,6.0,6.0,12.0,9.0,3.0,4.0,4.0,3.0,5.0,5.0,3.0,5.0,6.0,7.0,7.0,5.0,9.0,9.0,7.0,5.0,15.0,6.0,6.0,5.0,2.0,5.0,3.0,4.0,4.0,3.0,2.0,3.0,3.0,3.0,2.0,0.0,0.0,2.0,3.0,4.0,7.0,4.0,5.0,2.0,4.0,4.0,2.0,0.0,0.0,0.0,0.0,2.0,4.0,4.0,4.0,3.0,2.0,3.0,4.0,4.0,7.0,6.0,7.0,6.0,4.0,3.0,3.0,5.0,3.0,0.0,2.0,2.0,0.0,3.0,2.0,2.0,3.0,3.0,3.0,2.0,3.0,3.0,2.0,0.0,3.0,4.0,3.0,4.0,2.0,2.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,3.0,3.0,0.0,2.0,3.0,4.0,3.0,3.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,4.0,4.0,3.0,0.0,0.0,6.0,6.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,2.0,3.0,0.0,2.0,4.0,3.0,5.0,4.0,2.0,2.0,2.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,3.0,2.0,3.0,3.0,0.0,0.0,2.0,0.0,4.0,4.0,12.0,7.0,27.0,12.0,7.0,6.0,15.0,9.0,4.0,18.0,18.0,15.0,7.0,7.0,15.0,18.0,18.0,15.0,15.0,15.0,7.0,6.0,2.0,2.0,2.0,2.0,4.0,3.0,0.0,3.0,4.0,5.0,3.0,2.0,2.0,2.0,5.0,2.0,2.0,3.0,3.0,4.0,6.0,4.0,4.0,6.0,9.0,7.0,4.0,2.0,2.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,0.0,5.0,4.0,3.0,3.0,3.0,2.0,4.0,0.0,0.0,3.0,2.0,2.0,5.0,4.0,3.0,2.0,2.0,0.0,3.0,9.0,7.0,15.0,18.0,9.0,4.0,5.0,4.0,5.0,5.0,3.0,0.0,2.0,2.0,4.0,4.0,0.0,2.0,0.0,2.0,2.0,0.0,4.0,6.0,6.0,5.0,2.0,2.0,3.0,4.0,7.0,4.0,2.0,2.0,3.0,3.0,3.0,4.0,3.0,4.0,6.0,15.0,7.0,6.0,7.0,2.0,4.0,4.0,4.0,6.0,7.0,5.0,15.0,7.0,5.0,7.0,15.0,18.0,9.0,5.0,5.0,5.0,7.0,5.0,5.0,4.0,12.0,7.0,5.0]} diff --git a/pysatSpaceWeather/tests/test_data/daily-geomagnetic-indices.txt b/pysatSpaceWeather/tests/test_data/daily-geomagnetic-indices.txt new file mode 100644 index 00000000..39c45e85 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/daily-geomagnetic-indices.txt @@ -0,0 +1,42 @@ +:Product: Daily Geomagnetic Data DGD.txt +:Issued: 1530 UT 01 Nov 2023 +# +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comment and suggestions to SWPC.Webmaster@noaa.gov +# +# Last 30 Days Daily Geomagnetic Data +# +# +# Middle Latitude High Latitude Estimated +# - Fredericksburg - ---- College ---- --- Planetary --- +# Date A K-indices A K-indices A K-indices +2023 10 03 6 1 2 2 1 3 2 1 1 19 2 0 2 4 5 5 3 0 8 1.33 2.67 1.67 1.33 2.33 2.33 2.33 1.67 +2023 10 04 8 2 2 2 2 2 1 2 3 19 1 1 5 5 4 2 2 2 10 2.67 2.33 2.67 2.67 2.00 1.67 2.00 3.33 +2023 10 05 11 3 4 2 3 2 1 2 2 22 3 4 3 6 4 1 1 2 16 4.33 5.00 2.33 3.00 2.00 1.00 1.33 2.33 +2023 10 06 7 2 2 2 2 1 2 1 3 10 2 3 4 1 2 3 0 2 9 2.33 2.67 2.33 1.67 1.33 1.67 1.00 3.33 +2023 10 07 -1 1 2-1-1-1-1-1-1 2 1 1 1 0 0 0 1 0 5 1.33 2.00 1.33 0.67 0.33 0.33 1.67 1.67 +2023 10 08 -1 -1-1-1-1-1-1-1-1 7 1 2 3 3 1 1 1 1 7 2.00 2.00 2.33 1.67 0.67 1.00 1.67 2.67 +2023 10 09 -1 -1-1-1-1-1-1-1-1 14 0 0 4 4 4 3 3 1 8 2.33 1.33 2.00 1.67 2.00 2.00 3.33 1.67 +2023 10 10 -1 -1-1-1-1-1-1-1-1 4 1 2 1 3 0 0 0 0 4 1.00 2.00 1.67 1.67 0.33 0.67 0.67 0.33 +2023 10 11 3 -1-1-1-1-1 0 1 2 2 0 0 1 2 1 0 0 0 4 0.67 0.67 1.33 1.33 1.00 1.00 0.67 1.00 +2023 10 12 3 -1 1 1 1 2 1 0 1 0 0 0 0 0 0 0 0 0 4 1.33 1.00 1.33 1.00 0.67 1.00 0.67 1.00 +2023 10 13 11 -1 1 3 2 3 3 3 2 15 0 3 3 3 4 4 3 1 13 1.00 2.67 3.33 2.67 3.00 3.67 2.67 2.33 +2023 10 14 6 1 1 1 3 2 1 2 1 5 1 1 1 3 1 0 2 1 8 2.00 1.67 2.00 3.00 1.67 1.00 2.67 1.00 +2023 10 15 2 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0 0 0 4 0.67 0.33 1.00 0.67 0.67 0.67 1.00 2.00 +2023 10 16 3 2 0 1 1 2 1 0 0 0 0 0 0 0 0 0 0 0 4 2.00 0.33 0.67 1.00 1.33 0.67 0.33 0.33 +2023 10 17 2 0 0 0 0 2 1 1 1 0 0 0 0 0 0 0 0 0 3 0.67 0.33 0.67 1.00 1.00 0.33 0.00 0.67 +2023 10 18 8 0 2 2 2 3 3 2 2 12 0 1 0 3 5 4 1 1 9 0.33 2.00 1.33 2.33 3.00 3.00 2.33 2.33 +2023 10 19 8 2 3 2 3 2 1 1 1 24 2 4 4 6 3 4 2 1 10 2.67 3.67 2.33 2.67 1.67 1.67 1.67 1.00 +2023 10 20 8 2 2 2 2 2 1 2 3 10 1 1 3 4 3 1 1 2 8 1.33 2.33 2.33 2.33 2.00 1.00 2.33 2.67 +2023 10 21 13 3 3 4 4 2 2 1 1 39 3 5 6 6 4 5 2 2 22 4.00 4.67 5.00 3.33 2.67 3.33 1.67 1.00 +2023 10 22 7 2 1 2 2 1 2 3 1 17 1 1 4 5 4 3 2 2 8 2.33 1.67 2.33 2.33 1.33 1.67 3.00 1.67 +2023 10 23 2 1 0 0 0 1 1 0 1 1 1 0 0 0 1 1 0 0 3 1.00 0.33 0.33 0.33 1.00 0.67 0.67 0.67 +2023 10 24 2 1 0 0 1 1 1 1 1 3 1 0 1 2 0 1 1 1 4 0.33 0.33 0.67 1.33 0.67 1.00 1.33 1.33 +2023 10 25 3 1 0 0 1 2 1 1 1 2 0 0 0 1 1 1 1 0 4 0.67 1.00 0.33 0.67 1.00 0.67 1.33 1.67 +2023 10 26 18 2 2 2 4 4 3 4 4 29 1 2 1 6 6 5 2 1 23 2.67 2.67 2.00 4.67 4.00 3.33 4.33 4.67 +2023 10 27 9 3 4 2 2 2 1 1 1 33 3 5 4 5 3 3 3 6 11 3.33 4.00 2.67 2.33 1.67 1.67 1.33 1.00 +2023 10 28 13 1 2 2 4 4 2 2 3 86 6 6 7 7 7 6 3 3 19 1.00 3.00 3.33 4.00 4.33 3.33 3.00 3.67 +2023 10 29 21 4 3 4 4 4 3 3 3 49 4 5 6 6 6 5 3 3 28 4.67 3.67 4.67 3.67 4.00 4.00 3.33 4.00 +2023 10 30 10 3 2 1 3 3 2 2 2 31 5 2 1 6 6 3 2 2 12 4.00 2.00 1.33 3.33 3.33 1.67 2.33 2.33 +2023 10 31 6 2 2 1 2 2 2 1 1 18 2 2 3 5 5 3 1 1 9 2.67 2.33 2.00 2.67 2.67 1.33 1.67 2.00 +2023 11 01 -1 2 2 1 2 2-1-1-1 -1 1 2 3 4 4-1-1-1 9 2.33 2.67 2.33 2.67 2.33 -1.00 -1.00 -1.00 diff --git a/pysatSpaceWeather/tests/test_data/daily-solar-indices.txt b/pysatSpaceWeather/tests/test_data/daily-solar-indices.txt new file mode 100644 index 00000000..6a5f3354 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/daily-solar-indices.txt @@ -0,0 +1,43 @@ +:Product: Daily Solar Data DSD.txt +:Issued: 1425 UT 01 Nov 2023 +# +# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center +# Please send comments and suggestions to SWPC.Webmaster@noaa.gov +# +# Last 30 Days Daily Solar Data +# +# Sunspot Stanford GOES15 +# Radio SESC Area Solar X-Ray ------ Flares ------ +# Flux Sunspot 10E-6 New Mean Bkgd X-Ray Optical +# Date 10.7cm Number Hemis. Regions Field Flux C M X S 1 2 3 +#--------------------------------------------------------------------------- +2023 10 02 158 146 810 1 -999 * 11 1 0 11 1 0 0 +2023 10 03 154 150 530 1 -999 * 14 0 0 14 0 0 0 +2023 10 04 155 151 630 1 -999 * 6 0 0 4 0 0 0 +2023 10 05 156 179 580 2 -999 * 10 0 0 9 0 0 0 +2023 10 06 155 138 460 0 -999 * 5 0 0 4 0 0 0 +2023 10 07 157 145 490 1 -999 * 9 1 0 11 0 0 0 +2023 10 08 157 149 570 2 -999 * 7 0 0 13 0 0 0 +2023 10 09 166 129 495 1 -999 * 16 0 0 23 1 0 0 +2023 10 10 164 120 560 1 -999 * 8 2 0 9 1 0 0 +2023 10 11 158 149 805 2 -999 * 8 0 0 6 0 0 0 +2023 10 12 157 126 580 0 -999 * 3 1 0 8 0 0 0 +2023 10 13 149 91 440 0 -999 * 5 0 0 11 0 0 0 +2023 10 14 148 100 490 1 -999 * 2 0 0 2 0 0 0 +2023 10 15 145 92 510 0 -999 * 3 0 0 4 0 0 0 +2023 10 16 144 106 430 1 -999 * 7 0 0 3 0 0 0 +2023 10 17 137 57 440 0 -999 * 2 0 0 3 0 0 0 +2023 10 18 135 54 330 0 -999 * 0 0 0 0 0 0 0 +2023 10 19 129 39 220 0 -999 * 8 0 0 1 0 0 0 +2023 10 20 126 56 180 1 -999 * 5 0 0 1 0 0 0 +2023 10 21 123 65 160 1 -999 * 2 0 0 0 0 0 0 +2023 10 22 119 48 90 1 -999 * 0 0 0 0 0 0 0 +2023 10 23 122 25 70 0 -999 * 2 0 0 4 0 0 0 +2023 10 24 121 34 40 0 -999 * 3 0 0 0 0 0 0 +2023 10 25 126 26 60 0 -999 * 10 0 0 1 0 0 0 +2023 10 26 126 57 90 2 -999 * 9 1 0 3 0 0 0 +2023 10 27 128 66 60 1 -999 * 1 0 0 0 0 0 0 +2023 10 28 128 70 80 1 -999 * 3 0 0 4 0 0 0 +2023 10 29 135 61 70 0 -999 * 8 0 0 5 0 0 0 +2023 10 30 140 62 220 0 -999 * 2 0 0 4 0 0 0 +2023 10 31 147 116 670 2 -999 * 7 0 0 1 0 0 0 diff --git a/pysatSpaceWeather/tests/test_data/f107_monthly_2009-01.txt b/pysatSpaceWeather/tests/test_data/f107_monthly_2009-01.txt new file mode 100644 index 00000000..0f1cded5 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/f107_monthly_2009-01.txt @@ -0,0 +1,33 @@ +{"noaa_radio_flux": { +"samples": [{"time": "2009-01-01T00:00:00.000", "f107_adjusted": 66.6, "f107_observed": 68.9}, +{"time": "2009-01-02T00:00:00.000", "f107_adjusted": 67.6, "f107_observed": 69.9}, +{"time": "2009-01-03T00:00:00.000", "f107_adjusted": 67.2, "f107_observed": 69.5}, +{"time": "2009-01-04T00:00:00.000", "f107_adjusted": 66.6, "f107_observed": 68.8}, +{"time": "2009-01-05T00:00:00.000", "f107_adjusted": 66.9, "f107_observed": 69.2}, +{"time": "2009-01-06T00:00:00.000", "f107_adjusted": 66.5, "f107_observed": 68.7}, +{"time": "2009-01-07T00:00:00.000", "f107_adjusted": 66.7, "f107_observed": 69.0}, +{"time": "2009-01-08T00:00:00.000", "f107_adjusted": 66.5, "f107_observed": 68.7}, +{"time": "2009-01-09T00:00:00.000", "f107_adjusted": 67.4, "f107_observed": 69.7}, +{"time": "2009-01-10T00:00:00.000", "f107_adjusted": 68.5, "f107_observed": 70.9}, +{"time": "2009-01-11T00:00:00.000", "f107_adjusted": 67.7, "f107_observed": 70.0}, +{"time": "2009-01-12T00:00:00.000", "f107_adjusted": 67.0, "f107_observed": 69.3}, +{"time": "2009-01-13T00:00:00.000", "f107_adjusted": 68.2, "f107_observed": 70.5}, +{"time": "2009-01-14T00:00:00.000", "f107_adjusted": 68.9, "f107_observed": 71.2}, +{"time": "2009-01-15T00:00:00.000", "f107_adjusted": 68.8, "f107_observed": 71.1}, +{"time": "2009-01-16T00:00:00.000", "f107_adjusted": 68.5, "f107_observed": 70.8}, +{"time": "2009-01-17T00:00:00.000", "f107_adjusted": 69.6, "f107_observed": 71.9}, +{"time": "2009-01-18T00:00:00.000", "f107_adjusted": 68.8, "f107_observed": 71.1}, +{"time": "2009-01-19T00:00:00.000", "f107_adjusted": 68.6, "f107_observed": 70.8}, +{"time": "2009-01-20T00:00:00.000", "f107_adjusted": 68.1, "f107_observed": 70.4}, +{"time": "2009-01-21T00:00:00.000", "f107_adjusted": 67.2, "f107_observed": 69.4}, +{"time": "2009-01-22T00:00:00.000", "f107_adjusted": 66.9, "f107_observed": 69.0}, +{"time": "2009-01-23T00:00:00.000", "f107_adjusted": 67.8, "f107_observed": 70.0}, +{"time": "2009-01-24T00:00:00.000", "f107_adjusted": 66.6, "f107_observed": 68.8}, +{"time": "2009-01-25T00:00:00.000", "f107_adjusted": 67.7, "f107_observed": 69.8}, +{"time": "2009-01-26T00:00:00.000", "f107_adjusted": 67.8, "f107_observed": 69.9}, +{"time": "2009-01-27T00:00:00.000", "f107_adjusted": 67.6, "f107_observed": 69.7}, +{"time": "2009-01-28T00:00:00.000", "f107_adjusted": 67.4, "f107_observed": 69.5}, +{"time": "2009-01-29T00:00:00.000", "f107_adjusted": 67.3, "f107_observed": 69.3}, +{"time": "2009-01-30T00:00:00.000", "f107_adjusted": 67.1, "f107_observed": 69.1}, +{"time": "2009-01-31T00:00:00.000", "f107_adjusted": 67.4, "f107_observed": 69.4}] +}} diff --git a/pysatSpaceWeather/tests/test_data/mgii_composite_1981-11.txt b/pysatSpaceWeather/tests/test_data/mgii_composite_1981-11.txt new file mode 100644 index 00000000..a2f0cab4 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/mgii_composite_1981-11.txt @@ -0,0 +1,32 @@ +{"composite_mg_index": { +"samples": [{"time": "1981-11-01T12:00:00.000", "mg_index": 0.28507999}, +{"time": "1981-11-02T12:00:00.000", "mg_index": 0.28593001}, +{"time": "1981-11-03T12:00:00.000", "mg_index": 0.28575}, +{"time": "1981-11-04T12:00:00.000", "mg_index": 0.28606001}, +{"time": "1981-11-05T12:00:00.000", "mg_index": 0.28619}, +{"time": "1981-11-06T12:00:00.000", "mg_index": 0.28536999}, +{"time": "1981-11-07T12:00:00.000", "mg_index": 0.28512999}, +{"time": "1981-11-08T12:00:00.000", "mg_index": 0.28494999}, +{"time": "1981-11-09T12:00:00.000", "mg_index": 0.28479999}, +{"time": "1981-11-10T12:00:00.000", "mg_index": 0.28476}, +{"time": "1981-11-11T12:00:00.000", "mg_index": 0.28437001}, +{"time": "1981-11-12T12:00:00.000", "mg_index": 0.28417999}, +{"time": "1981-11-13T12:00:00.000", "mg_index": 0.28415999}, +{"time": "1981-11-14T12:00:00.000", "mg_index": 0.28352001}, +{"time": "1981-11-15T12:00:00.000", "mg_index": 0.28095001}, +{"time": "1981-11-16T12:00:00.000", "mg_index": 0.27991}, +{"time": "1981-11-17T12:00:00.000", "mg_index": 0.27932999}, +{"time": "1981-11-18T12:00:00.000", "mg_index": 0.27779999}, +{"time": "1981-11-19T12:00:00.000", "mg_index": 0.27737001}, +{"time": "1981-11-20T12:00:00.000", "mg_index": 0.27680001}, +{"time": "1981-11-21T12:00:00.000", "mg_index": 0.27621999}, +{"time": "1981-11-22T12:00:00.000", "mg_index": 0.27632001}, +{"time": "1981-11-23T12:00:00.000", "mg_index": 0.27715001}, +{"time": "1981-11-24T12:00:00.000", "mg_index": 0.27801999}, +{"time": "1981-11-25T12:00:00.000", "mg_index": 0.27903}, +{"time": "1981-11-26T12:00:00.000", "mg_index": 0.28042999}, +{"time": "1981-11-27T12:00:00.000", "mg_index": 0.28198999}, +{"time": "1981-11-28T12:00:00.000", "mg_index": 0.28318}, +{"time": "1981-11-29T12:00:00.000", "mg_index": 0.28408}, +{"time": "1981-11-30T12:00:00.000", "mg_index": 0.28488001}] +}} diff --git a/pysatSpaceWeather/tests/test_data/mgii_sorce_2005-03-06.txt b/pysatSpaceWeather/tests/test_data/mgii_sorce_2005-03-06.txt new file mode 100644 index 00000000..c6c0bd6d --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/mgii_sorce_2005-03-06.txt @@ -0,0 +1,20 @@ +{"sorce_mg_index": { +"samples": [{"time": "2005-03-06T01:49:00.480", "mg_index": 0.26555, "unc": 0.006454}, +{"time": "2005-03-06T02:01:32.160", "mg_index": 0.26729, "unc": 0.006337}, +{"time": "2005-03-06T03:13:40.800", "mg_index": 0.26726, "unc": 0.002008}, +{"time": "2005-03-06T06:04:10.560", "mg_index": 0.26695, "unc": 0.002009}, +{"time": "2005-03-06T06:40:36.480", "mg_index": 0.26827, "unc": 0.006307}, +{"time": "2005-03-06T06:53:08.160", "mg_index": 0.26758, "unc": 0.006332}, +{"time": "2005-03-06T12:56:44.160", "mg_index": 0.26864, "unc": 0.001999}, +{"time": "2005-03-06T14:10:10.560", "mg_index": 0.26812, "unc": 0.001994}, +{"time": "2005-03-06T14:46:45.119", "mg_index": 0.26704, "unc": 0.006361}, +{"time": "2005-03-06T14:59:16.800", "mg_index": 0.26806, "unc": 0.006313}, +{"time": "2005-03-06T16:11:08.160", "mg_index": 0.26801, "unc": 0.001997}, +{"time": "2005-03-06T19:01:46.559", "mg_index": 0.2687, "unc": 0.001989}, +{"time": "2005-03-06T19:38:29.760", "mg_index": 0.26766, "unc": 0.006343}, +{"time": "2005-03-06T19:51:01.440", "mg_index": 0.26846, "unc": 0.006295}, +{"time": "2005-03-06T20:38:58.560", "mg_index": 0.26755, "unc": 0.002012}, +{"time": "2005-03-06T22:39:56.160", "mg_index": 0.26842, "unc": 0.001993}, +{"time": "2005-03-06T22:52:45.120", "mg_index": 0.26803, "unc": 0.006319}, +{"time": "2005-03-06T23:05:16.800", "mg_index": 0.26844, "unc": 0.006296}] +}} From 5b554d7e790dcb15a545cf2dc0d310410966ade8 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 17:28:03 -0400 Subject: [PATCH 130/171] TST: added more data Added more data files for mock download testing. --- .../tests/test_data/ae_last_96_hrs.txt | 574 +++++++++++++++++ .../tests/test_data/al_last_96_hrs.txt | 574 +++++++++++++++++ .../tests/test_data/au_last_96_hrs.txt | 575 ++++++++++++++++++ .../tests/test_data/dst_last_96_hrs.txt | 575 ++++++++++++++++++ 4 files changed, 2298 insertions(+) create mode 100644 pysatSpaceWeather/tests/test_data/ae_last_96_hrs.txt create mode 100644 pysatSpaceWeather/tests/test_data/al_last_96_hrs.txt create mode 100644 pysatSpaceWeather/tests/test_data/au_last_96_hrs.txt create mode 100644 pysatSpaceWeather/tests/test_data/dst_last_96_hrs.txt diff --git a/pysatSpaceWeather/tests/test_data/ae_last_96_hrs.txt b/pysatSpaceWeather/tests/test_data/ae_last_96_hrs.txt new file mode 100644 index 00000000..c94e3d29 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/ae_last_96_hrs.txt @@ -0,0 +1,574 @@ + Time Predicted AE +2023/301-21:09:23 91.2 +2023/301-21:19:23 118.3 +2023/301-21:29:23 160.0 +2023/301-21:39:23 178.2 +2023/301-21:49:23 193.0 +2023/301-21:59:23 211.5 +2023/301-22:09:23 278.9 +2023/301-22:19:23 355.9 +2023/301-22:29:23 389.3 +2023/301-22:39:23 394.6 +2023/301-22:49:23 360.7 +2023/301-22:59:23 342.6 +2023/301-23:09:23 333.5 +2023/301-23:19:23 347.1 +2023/301-23:29:23 388.4 +2023/301-23:39:23 456.3 +2023/301-23:49:23 514.6 +2023/301-23:59:23 555.7 +2023/302-00:09:23 578.1 +2023/302-00:19:23 595.7 +2023/302-00:29:23 601.7 +2023/302-00:39:23 552.7 +2023/302-00:49:23 494.7 +2023/302-00:59:23 487.5 +2023/302-01:09:23 511.2 +2023/302-01:19:23 516.0 +2023/302-01:29:23 500.7 +2023/302-01:39:23 443.6 +2023/302-01:49:23 386.2 +2023/302-01:59:23 342.2 +2023/302-02:09:23 297.7 +2023/302-02:19:23 253.1 +2023/302-02:29:23 222.5 +2023/302-02:39:23 190.2 +2023/302-02:49:23 161.8 +2023/302-02:59:23 142.1 +2023/302-03:09:23 133.6 +2023/302-03:19:23 139.7 +2023/302-03:29:23 175.8 +2023/302-03:39:23 235.6 +2023/302-03:49:23 281.7 +2023/302-03:59:23 313.5 +2023/302-04:09:23 355.0 +2023/302-04:19:23 414.0 +2023/302-04:29:23 472.2 +2023/302-04:39:23 507.6 +2023/302-04:49:23 510.6 +2023/302-04:59:23 505.4 +2023/302-05:09:23 515.3 +2023/302-05:19:23 456.1 +2023/302-05:29:23 402.5 +2023/302-05:39:23 386.3 +2023/302-05:49:23 350.2 +2023/302-05:59:23 289.9 +2023/302-06:09:23 244.3 +2023/302-06:19:23 209.3 +2023/302-06:29:23 175.0 +2023/302-06:39:23 146.7 +2023/302-06:49:23 124.2 +2023/302-06:59:23 107.4 +2023/302-07:09:23 96.3 +2023/302-07:19:23 94.0 +2023/302-07:29:23 98.8 +2023/302-07:39:23 203.8 +2023/302-07:49:23 345.6 +2023/302-07:59:23 457.0 +2023/302-08:09:23 574.8 +2023/302-08:19:23 674.0 +2023/302-08:29:23 743.2 +2023/302-08:39:23 797.0 +2023/302-08:49:23 835.8 +2023/302-08:59:23 850.7 +2023/302-09:09:23 847.3 +2023/302-09:19:23 872.2 +2023/302-09:29:23 875.9 +2023/302-09:39:23 840.5 +2023/302-09:49:23 774.4 +2023/302-09:59:23 680.8 +2023/302-10:09:23 591.3 +2023/302-10:19:23 513.0 +2023/302-10:29:23 489.1 +2023/302-10:39:23 464.8 +2023/302-10:49:23 461.1 +2023/302-10:59:23 471.9 +2023/302-11:09:23 470.7 +2023/302-11:19:23 458.2 +2023/302-11:29:23 442.9 +2023/302-11:39:23 424.1 +2023/302-11:49:23 384.0 +2023/302-11:59:23 338.7 +2023/302-12:09:23 336.0 +2023/302-12:19:23 384.3 +2023/302-12:29:23 420.5 +2023/302-12:39:23 388.1 +2023/302-12:49:23 341.8 +2023/302-12:59:23 315.1 +2023/302-13:09:23 304.3 +2023/302-13:19:23 304.2 +2023/302-13:29:23 350.8 +2023/302-13:39:23 397.2 +2023/302-13:49:23 487.8 +2023/302-13:59:23 534.8 +2023/302-14:09:23 597.4 +2023/302-14:19:23 654.5 +2023/302-14:29:23 694.9 +2023/302-14:39:23 746.9 +2023/302-14:49:23 795.8 +2023/302-14:59:23 818.5 +2023/302-15:09:23 809.8 +2023/302-15:19:23 753.1 +2023/302-15:29:23 666.8 +2023/302-15:39:23 612.5 +2023/302-15:49:23 527.7 +2023/302-15:59:23 482.3 +2023/302-16:09:23 432.1 +2023/302-16:19:23 404.2 +2023/302-16:29:23 352.6 +2023/302-16:39:23 299.7 +2023/302-16:49:23 256.3 +2023/302-16:59:23 235.6 +2023/302-17:09:23 223.7 +2023/302-17:19:23 222.5 +2023/302-17:29:23 226.8 +2023/302-17:39:23 237.4 +2023/302-17:49:23 216.8 +2023/302-17:59:23 199.8 +2023/302-18:09:23 193.6 +2023/302-18:19:23 210.6 +2023/302-18:29:23 270.3 +2023/302-18:39:23 354.9 +2023/302-18:49:23 426.1 +2023/302-18:59:23 452.5 +2023/302-19:09:23 485.5 +2023/302-19:19:23 461.3 +2023/302-19:29:23 462.5 +2023/302-19:39:23 496.3 +2023/302-19:49:23 488.7 +2023/302-19:59:23 428.1 +2023/302-20:09:23 391.3 +2023/302-20:19:23 384.4 +2023/302-20:29:23 368.5 +2023/302-20:39:23 348.9 +2023/302-20:49:23 334.5 +2023/302-20:59:23 327.0 +2023/302-21:09:23 322.2 +2023/302-21:19:23 316.1 +2023/302-21:29:23 310.7 +2023/302-21:39:23 307.8 +2023/302-21:49:23 304.5 +2023/302-21:59:23 300.1 +2023/302-22:09:23 295.7 +2023/302-22:19:23 291.7 +2023/302-22:29:23 287.5 +2023/302-22:39:23 282.2 +2023/302-22:49:23 276.4 +2023/302-22:59:23 273.8 +2023/302-23:09:23 277.4 +2023/302-23:19:23 316.6 +2023/302-23:29:23 359.4 +2023/302-23:39:23 393.3 +2023/302-23:49:23 422.0 +2023/302-23:59:23 446.5 +2023/303-00:09:23 464.1 +2023/303-00:19:23 474.7 +2023/303-00:29:23 480.9 +2023/303-00:39:23 482.4 +2023/303-00:49:23 485.3 +2023/303-00:59:23 466.2 +2023/303-01:09:23 448.8 +2023/303-01:19:23 455.4 +2023/303-01:29:23 458.0 +2023/303-01:39:23 450.1 +2023/303-01:49:23 455.5 +2023/303-01:59:23 449.5 +2023/303-02:09:23 437.7 +2023/303-02:19:23 425.5 +2023/303-02:29:23 410.2 +2023/303-02:39:23 380.4 +2023/303-02:49:23 343.7 +2023/303-02:59:23 306.8 +2023/303-03:09:23 267.3 +2023/303-03:19:23 227.9 +2023/303-03:29:23 193.1 +2023/303-03:39:23 165.6 +2023/303-03:49:23 140.1 +2023/303-03:59:23 118.1 +2023/303-04:09:23 99.8 +2023/303-04:19:23 85.1 +2023/303-04:29:23 72.7 +2023/303-04:39:23 62.8 +2023/303-04:49:23 55.9 +2023/303-04:59:23 59.1 +2023/303-05:09:23 67.1 +2023/303-05:19:23 76.3 +2023/303-05:29:23 85.9 +2023/303-05:39:23 96.0 +2023/303-05:49:23 105.6 +2023/303-05:59:23 114.6 +2023/303-06:09:23 124.2 +2023/303-06:19:23 133.5 +2023/303-06:29:23 141.4 +2023/303-06:39:23 148.1 +2023/303-06:49:23 154.0 +2023/303-06:59:23 158.8 +2023/303-07:09:23 162.0 +2023/303-07:19:23 163.9 +2023/303-07:29:23 165.6 +2023/303-07:39:23 167.4 +2023/303-07:49:23 169.3 +2023/303-07:59:23 170.9 +2023/303-08:09:23 171.9 +2023/303-08:19:23 152.1 +2023/303-08:29:23 135.9 +2023/303-08:39:23 122.6 +2023/303-08:49:23 111.5 +2023/303-08:59:23 98.6 +2023/303-09:09:23 87.9 +2023/303-09:19:23 78.9 +2023/303-09:29:23 71.2 +2023/303-09:39:23 64.9 +2023/303-09:49:23 59.5 +2023/303-09:59:23 55.4 +2023/303-10:09:23 52.1 +2023/303-10:19:23 49.5 +2023/303-10:29:23 49.0 +2023/303-10:39:23 51.1 +2023/303-10:49:23 94.6 +2023/303-10:59:23 134.2 +2023/303-11:09:23 148.5 +2023/303-11:19:23 161.2 +2023/303-11:29:23 179.7 +2023/303-11:39:23 193.8 +2023/303-11:49:23 200.6 +2023/303-11:59:23 206.2 +2023/303-12:09:23 211.3 +2023/303-12:19:23 217.4 +2023/303-12:29:23 237.4 +2023/303-12:39:23 291.4 +2023/303-12:49:23 355.8 +2023/303-12:59:23 438.1 +2023/303-13:09:23 524.6 +2023/303-13:19:23 596.4 +2023/303-13:29:23 642.2 +2023/303-13:39:23 673.1 +2023/303-13:49:23 698.5 +2023/303-13:59:23 710.8 +2023/303-14:09:23 669.8 +2023/303-14:19:23 574.4 +2023/303-14:29:23 499.6 +2023/303-14:39:23 436.7 +2023/303-14:49:23 364.6 +2023/303-14:59:23 294.3 +2023/303-15:09:23 240.4 +2023/303-15:19:23 198.6 +2023/303-15:29:23 165.5 +2023/303-15:39:23 138.8 +2023/303-15:49:23 118.0 +2023/303-15:59:23 102.2 +2023/303-16:09:23 89.8 +2023/303-16:19:23 79.8 +2023/303-16:29:23 71.7 +2023/303-16:39:23 66.2 +2023/303-16:49:23 65.1 +2023/303-16:59:23 88.0 +2023/303-17:09:23 108.0 +2023/303-17:19:23 131.2 +2023/303-17:29:23 152.5 +2023/303-17:39:23 174.4 +2023/303-17:49:23 192.2 +2023/303-17:59:23 206.5 +2023/303-18:09:23 217.7 +2023/303-18:19:23 226.4 +2023/303-18:29:23 232.7 +2023/303-18:39:23 236.9 +2023/303-18:49:23 239.3 +2023/303-18:59:23 240.3 +2023/303-19:09:23 240.2 +2023/303-19:19:23 239.1 +2023/303-19:29:23 237.4 +2023/303-19:39:23 235.2 +2023/303-19:49:23 232.6 +2023/303-19:59:23 229.8 +2023/303-20:09:23 226.7 +2023/303-20:19:23 223.5 +2023/303-20:29:23 220.3 +2023/303-20:39:23 217.1 +2023/303-20:49:23 213.9 +2023/303-20:59:23 210.8 +2023/303-21:09:23 207.7 +2023/303-21:19:23 204.7 +2023/303-21:29:23 201.8 +2023/303-21:39:23 198.9 +2023/303-21:49:23 196.2 +2023/303-21:59:23 193.4 +2023/303-22:09:23 190.7 +2023/303-22:19:23 187.7 +2023/303-22:29:23 184.0 +2023/303-22:39:23 172.3 +2023/303-22:49:23 152.1 +2023/303-22:59:23 136.9 +2023/303-23:09:23 125.1 +2023/303-23:19:23 116.5 +2023/303-23:29:23 116.5 +2023/303-23:39:23 127.6 +2023/303-23:49:23 128.1 +2023/303-23:59:23 114.2 +2023/304-00:09:23 108.2 +2023/304-00:19:23 105.4 +2023/304-00:29:23 101.3 +2023/304-00:39:23 139.5 +2023/304-00:49:23 183.9 +2023/304-00:59:23 219.0 +2023/304-01:09:23 247.2 +2023/304-01:19:23 271.9 +2023/304-01:29:23 290.3 +2023/304-01:39:23 308.6 +2023/304-01:49:23 328.9 +2023/304-01:59:23 331.2 +2023/304-02:09:23 315.0 +2023/304-02:19:23 284.3 +2023/304-02:29:23 249.1 +2023/304-02:39:23 216.8 +2023/304-02:49:23 186.4 +2023/304-02:59:23 165.5 +2023/304-03:09:23 144.3 +2023/304-03:19:23 124.3 +2023/304-03:29:23 111.0 +2023/304-03:39:23 115.3 +2023/304-03:49:23 115.1 +2023/304-03:59:23 105.8 +2023/304-04:09:23 92.6 +2023/304-04:19:23 84.1 +2023/304-04:29:23 84.2 +2023/304-04:39:23 93.9 +2023/304-04:49:23 116.7 +2023/304-04:59:23 142.9 +2023/304-05:09:23 140.0 +2023/304-05:19:23 131.3 +2023/304-05:29:23 122.1 +2023/304-05:39:23 115.7 +2023/304-05:49:23 104.9 +2023/304-05:59:23 98.2 +2023/304-06:09:23 96.1 +2023/304-06:19:23 94.6 +2023/304-06:29:23 92.4 +2023/304-06:39:23 90.1 +2023/304-06:49:23 89.8 +2023/304-06:59:23 84.8 +2023/304-07:09:23 79.7 +2023/304-07:19:23 75.8 +2023/304-07:29:23 73.7 +2023/304-07:39:23 73.2 +2023/304-07:49:23 73.9 +2023/304-07:59:23 75.4 +2023/304-08:09:23 84.6 +2023/304-08:19:23 106.3 +2023/304-08:29:23 156.7 +2023/304-08:39:23 198.3 +2023/304-08:49:23 248.8 +2023/304-08:59:23 300.4 +2023/304-09:09:23 350.9 +2023/304-09:19:23 399.8 +2023/304-09:29:23 440.5 +2023/304-09:39:23 470.9 +2023/304-09:49:23 511.8 +2023/304-09:59:23 545.4 +2023/304-10:09:23 576.3 +2023/304-10:19:23 597.3 +2023/304-10:29:23 607.7 +2023/304-10:39:23 612.8 +2023/304-10:49:23 602.1 +2023/304-10:59:23 557.2 +2023/304-11:09:23 501.6 +2023/304-11:19:23 472.7 +2023/304-11:29:23 458.1 +2023/304-11:39:23 450.9 +2023/304-11:49:23 455.3 +2023/304-11:59:23 474.1 +2023/304-12:09:23 476.1 +2023/304-12:19:23 481.9 +2023/304-12:29:23 428.6 +2023/304-12:39:23 392.2 +2023/304-12:49:23 363.3 +2023/304-12:59:23 341.8 +2023/304-13:09:23 311.8 +2023/304-13:19:23 288.3 +2023/304-13:29:23 269.3 +2023/304-13:39:23 253.3 +2023/304-13:49:23 239.6 +2023/304-13:59:23 223.6 +2023/304-14:09:23 195.0 +2023/304-14:19:23 173.8 +2023/304-14:29:23 173.9 +2023/304-14:39:23 180.0 +2023/304-14:49:23 157.0 +2023/304-14:59:23 137.9 +2023/304-15:09:23 127.2 +2023/304-15:19:23 119.9 +2023/304-15:29:23 106.8 +2023/304-15:39:23 95.4 +2023/304-15:49:23 87.3 +2023/304-15:59:23 81.2 +2023/304-16:09:23 73.3 +2023/304-16:19:23 66.2 +2023/304-16:29:23 60.4 +2023/304-16:39:23 55.9 +2023/304-16:49:23 51.6 +2023/304-16:59:23 48.0 +2023/304-17:09:23 46.5 +2023/304-17:19:23 46.5 +2023/304-17:29:23 45.2 +2023/304-17:39:23 43.4 +2023/304-17:49:23 42.2 +2023/304-17:59:23 42.5 +2023/304-18:09:23 42.3 +2023/304-18:19:23 40.8 +2023/304-18:29:23 40.4 +2023/304-18:39:23 46.0 +2023/304-18:49:23 53.8 +2023/304-18:59:23 63.1 +2023/304-19:09:23 86.7 +2023/304-19:19:23 127.6 +2023/304-19:29:23 161.3 +2023/304-19:39:23 185.1 +2023/304-19:49:23 208.9 +2023/304-19:59:23 213.4 +2023/304-20:09:23 224.3 +2023/304-20:19:23 203.4 +2023/304-20:29:23 197.2 +2023/304-20:39:23 178.6 +2023/304-20:49:23 161.4 +2023/304-20:59:23 141.4 +2023/304-21:09:23 131.6 +2023/304-21:19:23 131.7 +2023/304-21:29:23 124.1 +2023/304-21:39:23 119.6 +2023/304-21:49:23 111.4 +2023/304-21:59:23 105.1 +2023/304-22:09:23 96.8 +2023/304-22:19:23 89.8 +2023/304-22:29:23 84.3 +2023/304-22:39:23 81.3 +2023/304-22:49:23 81.6 +2023/304-22:59:23 90.2 +2023/304-23:09:23 110.7 +2023/304-23:19:23 138.3 +2023/304-23:29:23 169.5 +2023/304-23:39:23 191.9 +2023/304-23:49:23 201.9 +2023/304-23:59:23 220.2 +2023/305-00:09:23 239.4 +2023/305-00:19:23 240.4 +2023/305-00:29:23 233.1 +2023/305-00:39:23 221.6 +2023/305-00:49:23 210.0 +2023/305-00:59:23 200.2 +2023/305-01:09:23 193.4 +2023/305-01:19:23 190.1 +2023/305-01:29:23 187.7 +2023/305-01:39:23 179.1 +2023/305-01:49:23 167.4 +2023/305-01:59:23 154.8 +2023/305-02:09:23 145.6 +2023/305-02:19:23 129.3 +2023/305-02:29:23 116.7 +2023/305-02:39:23 119.2 +2023/305-02:49:23 139.0 +2023/305-02:59:23 167.6 +2023/305-03:09:23 196.7 +2023/305-03:19:23 223.9 +2023/305-03:29:23 248.5 +2023/305-03:39:23 262.8 +2023/305-03:49:23 264.5 +2023/305-03:59:23 251.7 +2023/305-04:09:23 224.8 +2023/305-04:19:23 200.7 +2023/305-04:29:23 177.4 +2023/305-04:39:23 153.9 +2023/305-04:49:23 130.7 +2023/305-04:59:23 111.4 +2023/305-05:09:23 95.1 +2023/305-05:19:23 81.8 +2023/305-05:29:23 71.0 +2023/305-05:39:23 62.2 +2023/305-05:49:23 55.2 +2023/305-05:59:23 50.4 +2023/305-06:09:23 48.2 +2023/305-06:19:23 64.2 +2023/305-06:29:23 89.9 +2023/305-06:39:23 122.2 +2023/305-06:49:23 157.4 +2023/305-06:59:23 197.2 +2023/305-07:09:23 237.6 +2023/305-07:19:23 271.8 +2023/305-07:29:23 303.4 +2023/305-07:39:23 334.0 +2023/305-07:49:23 359.2 +2023/305-07:59:23 387.0 +2023/305-08:09:23 396.1 +2023/305-08:19:23 395.8 +2023/305-08:29:23 388.9 +2023/305-08:39:23 373.8 +2023/305-08:49:23 347.3 +2023/305-08:59:23 325.0 +2023/305-09:09:23 314.8 +2023/305-09:19:23 298.7 +2023/305-09:29:23 286.4 +2023/305-09:39:23 302.3 +2023/305-09:49:23 314.5 +2023/305-09:59:23 315.2 +2023/305-10:09:23 308.8 +2023/305-10:19:23 300.9 +2023/305-10:29:23 287.7 +2023/305-10:39:23 269.4 +2023/305-10:49:23 244.9 +2023/305-10:59:23 219.5 +2023/305-11:09:23 194.7 +2023/305-11:19:23 170.4 +2023/305-11:29:23 148.7 +2023/305-11:39:23 130.5 +2023/305-11:49:23 115.8 +2023/305-11:59:23 105.0 +2023/305-12:09:23 112.1 +2023/305-12:19:23 141.0 +2023/305-12:29:23 149.8 +2023/305-12:39:23 148.4 +2023/305-12:49:23 145.0 +2023/305-12:59:23 147.3 +2023/305-13:09:23 146.6 +2023/305-13:19:23 144.1 +2023/305-13:29:23 145.8 +2023/305-13:39:23 158.7 +2023/305-13:49:23 184.7 +2023/305-13:59:23 238.3 +2023/305-14:09:23 283.7 +2023/305-14:19:23 311.3 +2023/305-14:29:23 327.6 +2023/305-14:39:23 345.7 +2023/305-14:49:23 348.5 +2023/305-14:59:23 352.7 +2023/305-15:09:23 374.8 +2023/305-15:19:23 382.9 +2023/305-15:29:23 371.5 +2023/305-15:39:23 347.9 +2023/305-15:49:23 321.3 +2023/305-15:59:23 290.4 +2023/305-16:09:23 259.3 +2023/305-16:19:23 234.3 +2023/305-16:29:23 213.3 +2023/305-16:39:23 194.1 +2023/305-16:49:23 182.6 +2023/305-16:59:23 182.7 +2023/305-17:09:23 170.7 +2023/305-17:19:23 151.3 +2023/305-17:29:23 136.0 +2023/305-17:39:23 126.4 +2023/305-17:49:23 115.9 +2023/305-17:59:23 103.6 +2023/305-18:09:23 92.5 +2023/305-18:19:23 83.5 +2023/305-18:29:23 78.0 +2023/305-18:39:23 78.8 +2023/305-18:49:23 87.2 +2023/305-18:59:23 114.1 +2023/305-19:09:23 140.7 +2023/305-19:19:23 150.0 +2023/305-19:29:23 147.9 +2023/305-19:39:23 140.3 +2023/305-19:49:23 131.4 +2023/305-19:59:23 122.8 +2023/305-20:09:23 128.6 +2023/305-20:19:23 152.1 +2023/305-20:29:23 172.4 diff --git a/pysatSpaceWeather/tests/test_data/al_last_96_hrs.txt b/pysatSpaceWeather/tests/test_data/al_last_96_hrs.txt new file mode 100644 index 00000000..6717f548 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/al_last_96_hrs.txt @@ -0,0 +1,574 @@ + Time Predicted AL +2023/301-21:09:23 -52.6 +2023/301-21:19:23 -74.3 +2023/301-21:29:23 -110.2 +2023/301-21:39:23 -122.6 +2023/301-21:49:23 -129.3 +2023/301-21:59:23 -137.7 +2023/301-22:09:23 -194.0 +2023/301-22:19:23 -259.9 +2023/301-22:29:23 -286.0 +2023/301-22:39:23 -290.7 +2023/301-22:49:23 -261.4 +2023/301-22:59:23 -247.4 +2023/301-23:09:23 -238.7 +2023/301-23:19:23 -245.0 +2023/301-23:29:23 -273.8 +2023/301-23:39:23 -327.3 +2023/301-23:49:23 -373.3 +2023/301-23:59:23 -405.3 +2023/302-00:09:23 -422.6 +2023/302-00:19:23 -440.6 +2023/302-00:29:23 -450.6 +2023/302-00:39:23 -405.6 +2023/302-00:49:23 -350.1 +2023/302-00:59:23 -344.3 +2023/302-01:09:23 -367.0 +2023/302-01:19:23 -370.9 +2023/302-01:29:23 -359.6 +2023/302-01:39:23 -311.8 +2023/302-01:49:23 -266.8 +2023/302-01:59:23 -235.0 +2023/302-02:09:23 -199.8 +2023/302-02:19:23 -161.1 +2023/302-02:29:23 -134.9 +2023/302-02:39:23 -107.0 +2023/302-02:49:23 -84.6 +2023/302-02:59:23 -71.1 +2023/302-03:09:23 -65.7 +2023/302-03:19:23 -69.4 +2023/302-03:29:23 -98.8 +2023/302-03:39:23 -149.5 +2023/302-03:49:23 -185.3 +2023/302-03:59:23 -206.7 +2023/302-04:09:23 -239.3 +2023/302-04:19:23 -291.0 +2023/302-04:29:23 -342.7 +2023/302-04:39:23 -373.5 +2023/302-04:49:23 -373.9 +2023/302-04:59:23 -371.7 +2023/302-05:09:23 -387.3 +2023/302-05:19:23 -333.9 +2023/302-05:29:23 -286.7 +2023/302-05:39:23 -279.2 +2023/302-05:49:23 -249.9 +2023/302-05:59:23 -196.3 +2023/302-06:09:23 -159.1 +2023/302-06:19:23 -133.1 +2023/302-06:29:23 -106.8 +2023/302-06:39:23 -85.3 +2023/302-06:49:23 -68.7 +2023/302-06:59:23 -56.1 +2023/302-07:09:23 -48.0 +2023/302-07:19:23 -43.1 +2023/302-07:29:23 -37.2 +2023/302-07:39:23 -125.0 +2023/302-07:49:23 -245.0 +2023/302-07:59:23 -332.2 +2023/302-08:09:23 -429.7 +2023/302-08:19:23 -515.1 +2023/302-08:29:23 -575.2 +2023/302-08:39:23 -623.5 +2023/302-08:49:23 -659.3 +2023/302-08:59:23 -670.4 +2023/302-09:09:23 -663.2 +2023/302-09:19:23 -686.5 +2023/302-09:29:23 -691.2 +2023/302-09:39:23 -659.5 +2023/302-09:49:23 -602.2 +2023/302-09:59:23 -521.4 +2023/302-10:09:23 -442.9 +2023/302-10:19:23 -372.5 +2023/302-10:29:23 -352.8 +2023/302-10:39:23 -329.2 +2023/302-10:49:23 -324.1 +2023/302-10:59:23 -336.4 +2023/302-11:09:23 -339.4 +2023/302-11:19:23 -333.3 +2023/302-11:29:23 -326.8 +2023/302-11:39:23 -317.8 +2023/302-11:49:23 -286.3 +2023/302-11:59:23 -246.1 +2023/302-12:09:23 -245.1 +2023/302-12:19:23 -294.7 +2023/302-12:29:23 -332.1 +2023/302-12:39:23 -302.8 +2023/302-12:49:23 -262.7 +2023/302-12:59:23 -243.7 +2023/302-13:09:23 -236.1 +2023/302-13:19:23 -235.0 +2023/302-13:29:23 -275.0 +2023/302-13:39:23 -312.2 +2023/302-13:49:23 -391.8 +2023/302-13:59:23 -428.8 +2023/302-14:09:23 -482.6 +2023/302-14:19:23 -532.2 +2023/302-14:29:23 -564.2 +2023/302-14:39:23 -608.5 +2023/302-14:49:23 -651.3 +2023/302-14:59:23 -671.0 +2023/302-15:09:23 -664.3 +2023/302-15:19:23 -613.2 +2023/302-15:29:23 -535.1 +2023/302-15:39:23 -488.7 +2023/302-15:49:23 -409.9 +2023/302-15:59:23 -368.1 +2023/302-16:09:23 -321.9 +2023/302-16:19:23 -299.5 +2023/302-16:29:23 -255.8 +2023/302-16:39:23 -212.1 +2023/302-16:49:23 -178.1 +2023/302-16:59:23 -164.9 +2023/302-17:09:23 -157.4 +2023/302-17:19:23 -158.2 +2023/302-17:29:23 -164.8 +2023/302-17:39:23 -178.3 +2023/302-17:49:23 -161.4 +2023/302-17:59:23 -147.8 +2023/302-18:09:23 -142.0 +2023/302-18:19:23 -153.2 +2023/302-18:29:23 -202.6 +2023/302-18:39:23 -275.4 +2023/302-18:49:23 -334.4 +2023/302-18:59:23 -354.4 +2023/302-19:09:23 -385.9 +2023/302-19:19:23 -360.4 +2023/302-19:29:23 -360.1 +2023/302-19:39:23 -395.3 +2023/302-19:49:23 -387.6 +2023/302-19:59:23 -326.7 +2023/302-20:09:23 -292.8 +2023/302-20:19:23 -289.7 +2023/302-20:29:23 -275.3 +2023/302-20:39:23 -255.8 +2023/302-20:49:23 -241.8 +2023/302-20:59:23 -234.7 +2023/302-21:09:23 -230.3 +2023/302-21:19:23 -225.2 +2023/302-21:29:23 -221.0 +2023/302-21:39:23 -219.1 +2023/302-21:49:23 -216.7 +2023/302-21:59:23 -213.5 +2023/302-22:09:23 -210.3 +2023/302-22:19:23 -207.5 +2023/302-22:29:23 -204.7 +2023/302-22:39:23 -200.8 +2023/302-22:49:23 -196.1 +2023/302-22:59:23 -191.8 +2023/302-23:09:23 -190.9 +2023/302-23:19:23 -223.5 +2023/302-23:29:23 -258.3 +2023/302-23:39:23 -283.6 +2023/302-23:49:23 -305.6 +2023/302-23:59:23 -325.7 +2023/303-00:09:23 -340.3 +2023/303-00:19:23 -349.0 +2023/303-00:29:23 -353.6 +2023/303-00:39:23 -355.1 +2023/303-00:49:23 -359.0 +2023/303-00:59:23 -340.5 +2023/303-01:09:23 -323.6 +2023/303-01:19:23 -330.7 +2023/303-01:29:23 -332.0 +2023/303-01:39:23 -321.9 +2023/303-01:49:23 -326.6 +2023/303-01:59:23 -320.8 +2023/303-02:09:23 -310.0 +2023/303-02:19:23 -301.1 +2023/303-02:29:23 -290.9 +2023/303-02:39:23 -267.0 +2023/303-02:49:23 -237.3 +2023/303-02:59:23 -208.5 +2023/303-03:09:23 -177.2 +2023/303-03:19:23 -145.4 +2023/303-03:29:23 -118.3 +2023/303-03:39:23 -98.2 +2023/303-03:49:23 -79.3 +2023/303-03:59:23 -63.5 +2023/303-04:09:23 -51.3 +2023/303-04:19:23 -42.1 +2023/303-04:29:23 -34.5 +2023/303-04:39:23 -28.6 +2023/303-04:49:23 -24.6 +2023/303-04:59:23 -29.4 +2023/303-05:09:23 -38.3 +2023/303-05:19:23 -47.7 +2023/303-05:29:23 -57.0 +2023/303-05:39:23 -66.7 +2023/303-05:49:23 -75.5 +2023/303-05:59:23 -83.4 +2023/303-06:09:23 -91.5 +2023/303-06:19:23 -99.2 +2023/303-06:29:23 -105.5 +2023/303-06:39:23 -110.8 +2023/303-06:49:23 -115.6 +2023/303-06:59:23 -119.5 +2023/303-07:09:23 -122.0 +2023/303-07:19:23 -123.4 +2023/303-07:29:23 -124.6 +2023/303-07:39:23 -126.1 +2023/303-07:49:23 -127.8 +2023/303-07:59:23 -129.9 +2023/303-08:09:23 -132.0 +2023/303-08:19:23 -114.0 +2023/303-08:29:23 -99.8 +2023/303-08:39:23 -88.8 +2023/303-08:49:23 -79.7 +2023/303-08:59:23 -68.4 +2023/303-09:09:23 -59.4 +2023/303-09:19:23 -52.0 +2023/303-09:29:23 -45.8 +2023/303-09:39:23 -40.9 +2023/303-09:49:23 -36.7 +2023/303-09:59:23 -33.5 +2023/303-10:09:23 -31.0 +2023/303-10:19:23 -29.0 +2023/303-10:29:23 -27.3 +2023/303-10:39:23 -26.6 +2023/303-10:49:23 -67.0 +2023/303-10:59:23 -103.3 +2023/303-11:09:23 -114.2 +2023/303-11:19:23 -125.0 +2023/303-11:29:23 -143.0 +2023/303-11:39:23 -156.6 +2023/303-11:49:23 -162.5 +2023/303-11:59:23 -167.4 +2023/303-12:09:23 -171.3 +2023/303-12:19:23 -174.1 +2023/303-12:29:23 -188.6 +2023/303-12:39:23 -233.8 +2023/303-12:49:23 -286.0 +2023/303-12:59:23 -354.2 +2023/303-13:09:23 -427.7 +2023/303-13:19:23 -488.6 +2023/303-13:29:23 -526.3 +2023/303-13:39:23 -551.8 +2023/303-13:49:23 -575.7 +2023/303-13:59:23 -590.0 +2023/303-14:09:23 -553.5 +2023/303-14:19:23 -465.4 +2023/303-14:29:23 -400.1 +2023/303-14:39:23 -346.8 +2023/303-14:49:23 -282.7 +2023/303-14:59:23 -219.7 +2023/303-15:09:23 -172.8 +2023/303-15:19:23 -137.4 +2023/303-15:29:23 -110.5 +2023/303-15:39:23 -90.0 +2023/303-15:49:23 -74.9 +2023/303-15:59:23 -63.9 +2023/303-16:09:23 -55.8 +2023/303-16:19:23 -49.7 +2023/303-16:29:23 -44.9 +2023/303-16:39:23 -41.2 +2023/303-16:49:23 -40.5 +2023/303-16:59:23 -62.5 +2023/303-17:09:23 -80.2 +2023/303-17:19:23 -100.1 +2023/303-17:29:23 -118.4 +2023/303-17:39:23 -137.5 +2023/303-17:49:23 -152.6 +2023/303-17:59:23 -164.4 +2023/303-18:09:23 -173.2 +2023/303-18:19:23 -179.7 +2023/303-18:29:23 -184.1 +2023/303-18:39:23 -186.8 +2023/303-18:49:23 -187.9 +2023/303-18:59:23 -187.8 +2023/303-19:09:23 -186.9 +2023/303-19:19:23 -185.2 +2023/303-19:29:23 -183.0 +2023/303-19:39:23 -180.5 +2023/303-19:49:23 -177.7 +2023/303-19:59:23 -174.8 +2023/303-20:09:23 -171.8 +2023/303-20:19:23 -168.9 +2023/303-20:29:23 -165.9 +2023/303-20:39:23 -163.0 +2023/303-20:49:23 -160.1 +2023/303-20:59:23 -157.3 +2023/303-21:09:23 -154.6 +2023/303-21:19:23 -152.0 +2023/303-21:29:23 -149.4 +2023/303-21:39:23 -146.9 +2023/303-21:49:23 -144.5 +2023/303-21:59:23 -142.1 +2023/303-22:09:23 -139.8 +2023/303-22:19:23 -137.5 +2023/303-22:29:23 -135.3 +2023/303-22:39:23 -125.5 +2023/303-22:49:23 -107.5 +2023/303-22:59:23 -94.9 +2023/303-23:09:23 -85.1 +2023/303-23:19:23 -76.7 +2023/303-23:29:23 -76.1 +2023/303-23:39:23 -87.1 +2023/303-23:49:23 -87.1 +2023/303-23:59:23 -73.1 +2023/304-00:09:23 -68.8 +2023/304-00:19:23 -65.6 +2023/304-00:29:23 -57.5 +2023/304-00:39:23 -89.6 +2023/304-00:49:23 -126.7 +2023/304-00:59:23 -153.4 +2023/304-01:09:23 -175.4 +2023/304-01:19:23 -196.5 +2023/304-01:29:23 -212.1 +2023/304-01:39:23 -228.3 +2023/304-01:49:23 -247.8 +2023/304-01:59:23 -250.7 +2023/304-02:09:23 -237.0 +2023/304-02:19:23 -211.0 +2023/304-02:29:23 -181.6 +2023/304-02:39:23 -154.7 +2023/304-02:49:23 -128.7 +2023/304-02:59:23 -111.5 +2023/304-03:09:23 -93.6 +2023/304-03:19:23 -76.0 +2023/304-03:29:23 -64.8 +2023/304-03:39:23 -71.3 +2023/304-03:49:23 -73.1 +2023/304-03:59:23 -65.9 +2023/304-04:09:23 -55.4 +2023/304-04:19:23 -49.3 +2023/304-04:29:23 -49.6 +2023/304-04:39:23 -56.7 +2023/304-04:49:23 -76.6 +2023/304-04:59:23 -100.1 +2023/304-05:09:23 -95.7 +2023/304-05:19:23 -87.8 +2023/304-05:29:23 -82.1 +2023/304-05:39:23 -78.6 +2023/304-05:49:23 -69.6 +2023/304-05:59:23 -63.9 +2023/304-06:09:23 -62.4 +2023/304-06:19:23 -61.3 +2023/304-06:29:23 -59.6 +2023/304-06:39:23 -58.5 +2023/304-06:49:23 -59.5 +2023/304-06:59:23 -55.6 +2023/304-07:09:23 -51.4 +2023/304-07:19:23 -48.2 +2023/304-07:29:23 -46.5 +2023/304-07:39:23 -45.8 +2023/304-07:49:23 -45.8 +2023/304-07:59:23 -45.7 +2023/304-08:09:23 -50.5 +2023/304-08:19:23 -66.2 +2023/304-08:29:23 -108.4 +2023/304-08:39:23 -140.1 +2023/304-08:49:23 -179.9 +2023/304-08:59:23 -221.7 +2023/304-09:09:23 -262.9 +2023/304-09:19:23 -303.9 +2023/304-09:29:23 -337.3 +2023/304-09:39:23 -361.0 +2023/304-09:49:23 -395.6 +2023/304-09:59:23 -423.6 +2023/304-10:09:23 -449.6 +2023/304-10:19:23 -466.7 +2023/304-10:29:23 -474.8 +2023/304-10:39:23 -480.9 +2023/304-10:49:23 -474.1 +2023/304-10:59:23 -434.2 +2023/304-11:09:23 -384.0 +2023/304-11:19:23 -359.5 +2023/304-11:29:23 -346.9 +2023/304-11:39:23 -338.2 +2023/304-11:49:23 -340.4 +2023/304-11:59:23 -357.3 +2023/304-12:09:23 -360.8 +2023/304-12:19:23 -371.0 +2023/304-12:29:23 -324.5 +2023/304-12:39:23 -295.6 +2023/304-12:49:23 -274.3 +2023/304-12:59:23 -258.1 +2023/304-13:09:23 -232.1 +2023/304-13:19:23 -212.2 +2023/304-13:29:23 -197.2 +2023/304-13:39:23 -185.5 +2023/304-13:49:23 -176.8 +2023/304-13:59:23 -165.9 +2023/304-14:09:23 -141.4 +2023/304-14:19:23 -123.4 +2023/304-14:29:23 -126.7 +2023/304-14:39:23 -135.7 +2023/304-14:49:23 -115.4 +2023/304-14:59:23 -99.5 +2023/304-15:09:23 -92.6 +2023/304-15:19:23 -88.6 +2023/304-15:29:23 -78.2 +2023/304-15:39:23 -69.4 +2023/304-15:49:23 -63.6 +2023/304-15:59:23 -59.6 +2023/304-16:09:23 -53.6 +2023/304-16:19:23 -48.5 +2023/304-16:29:23 -44.4 +2023/304-16:39:23 -41.3 +2023/304-16:49:23 -38.2 +2023/304-16:59:23 -35.5 +2023/304-17:09:23 -34.5 +2023/304-17:19:23 -34.9 +2023/304-17:29:23 -33.9 +2023/304-17:39:23 -32.3 +2023/304-17:49:23 -31.3 +2023/304-17:59:23 -31.7 +2023/304-18:09:23 -31.6 +2023/304-18:19:23 -29.8 +2023/304-18:29:23 -28.8 +2023/304-18:39:23 -33.4 +2023/304-18:49:23 -38.8 +2023/304-18:59:23 -43.5 +2023/304-19:09:23 -60.7 +2023/304-19:19:23 -94.7 +2023/304-19:29:23 -120.8 +2023/304-19:39:23 -138.7 +2023/304-19:49:23 -158.6 +2023/304-19:59:23 -162.1 +2023/304-20:09:23 -173.2 +2023/304-20:19:23 -154.0 +2023/304-20:29:23 -149.7 +2023/304-20:39:23 -134.0 +2023/304-20:49:23 -119.2 +2023/304-20:59:23 -100.9 +2023/304-21:09:23 -92.7 +2023/304-21:19:23 -93.7 +2023/304-21:29:23 -86.9 +2023/304-21:39:23 -83.2 +2023/304-21:49:23 -76.6 +2023/304-21:59:23 -72.1 +2023/304-22:09:23 -65.5 +2023/304-22:19:23 -59.9 +2023/304-22:29:23 -55.4 +2023/304-22:39:23 -52.7 +2023/304-22:49:23 -52.1 +2023/304-22:59:23 -58.2 +2023/304-23:09:23 -74.5 +2023/304-23:19:23 -96.9 +2023/304-23:29:23 -123.0 +2023/304-23:39:23 -140.6 +2023/304-23:49:23 -146.3 +2023/304-23:59:23 -162.0 +2023/305-00:09:23 -179.9 +2023/305-00:19:23 -180.1 +2023/305-00:29:23 -173.2 +2023/305-00:39:23 -163.4 +2023/305-00:49:23 -153.3 +2023/305-00:59:23 -144.5 +2023/305-01:09:23 -138.2 +2023/305-01:19:23 -135.1 +2023/305-01:29:23 -133.0 +2023/305-01:39:23 -125.4 +2023/305-01:49:23 -115.5 +2023/305-01:59:23 -105.4 +2023/305-02:09:23 -98.9 +2023/305-02:19:23 -84.8 +2023/305-02:29:23 -72.9 +2023/305-02:39:23 -74.0 +2023/305-02:49:23 -90.4 +2023/305-02:59:23 -113.9 +2023/305-03:09:23 -137.0 +2023/305-03:19:23 -158.6 +2023/305-03:29:23 -179.6 +2023/305-03:39:23 -192.5 +2023/305-03:49:23 -195.3 +2023/305-03:59:23 -185.4 +2023/305-04:09:23 -162.7 +2023/305-04:19:23 -143.2 +2023/305-04:29:23 -124.4 +2023/305-04:39:23 -105.0 +2023/305-04:49:23 -85.6 +2023/305-04:59:23 -69.9 +2023/305-05:09:23 -57.0 +2023/305-05:19:23 -46.6 +2023/305-05:29:23 -38.4 +2023/305-05:39:23 -32.0 +2023/305-05:49:23 -27.0 +2023/305-05:59:23 -23.1 +2023/305-06:09:23 -20.1 +2023/305-06:19:23 -33.3 +2023/305-06:29:23 -54.0 +2023/305-06:39:23 -79.3 +2023/305-06:49:23 -106.6 +2023/305-06:59:23 -138.4 +2023/305-07:09:23 -171.1 +2023/305-07:19:23 -197.8 +2023/305-07:29:23 -222.3 +2023/305-07:39:23 -246.1 +2023/305-07:49:23 -265.8 +2023/305-07:59:23 -290.0 +2023/305-08:09:23 -297.4 +2023/305-08:19:23 -297.6 +2023/305-08:29:23 -293.7 +2023/305-08:39:23 -282.3 +2023/305-08:49:23 -259.2 +2023/305-08:59:23 -240.5 +2023/305-09:09:23 -233.3 +2023/305-09:19:23 -218.2 +2023/305-09:29:23 -205.7 +2023/305-09:39:23 -221.4 +2023/305-09:49:23 -233.4 +2023/305-09:59:23 -234.3 +2023/305-10:09:23 -230.1 +2023/305-10:19:23 -226.0 +2023/305-10:29:23 -217.2 +2023/305-10:39:23 -203.6 +2023/305-10:49:23 -183.9 +2023/305-10:59:23 -163.2 +2023/305-11:09:23 -142.8 +2023/305-11:19:23 -122.9 +2023/305-11:29:23 -105.2 +2023/305-11:39:23 -90.7 +2023/305-11:49:23 -78.5 +2023/305-11:59:23 -68.2 +2023/305-12:09:23 -75.0 +2023/305-12:19:23 -103.4 +2023/305-12:29:23 -111.8 +2023/305-12:39:23 -110.3 +2023/305-12:49:23 -108.3 +2023/305-12:59:23 -112.3 +2023/305-13:09:23 -112.7 +2023/305-13:19:23 -110.2 +2023/305-13:29:23 -110.6 +2023/305-13:39:23 -119.5 +2023/305-13:49:23 -139.4 +2023/305-13:59:23 -186.1 +2023/305-14:09:23 -224.7 +2023/305-14:19:23 -246.0 +2023/305-14:29:23 -258.5 +2023/305-14:39:23 -274.5 +2023/305-14:49:23 -274.7 +2023/305-14:59:23 -276.1 +2023/305-15:09:23 -296.2 +2023/305-15:19:23 -303.0 +2023/305-15:29:23 -291.8 +2023/305-15:39:23 -270.8 +2023/305-15:49:23 -248.7 +2023/305-15:59:23 -222.6 +2023/305-16:09:23 -195.8 +2023/305-16:19:23 -174.8 +2023/305-16:29:23 -156.8 +2023/305-16:39:23 -139.6 +2023/305-16:49:23 -130.5 +2023/305-16:59:23 -133.5 +2023/305-17:09:23 -124.6 +2023/305-17:19:23 -108.4 +2023/305-17:29:23 -97.1 +2023/305-17:39:23 -91.3 +2023/305-17:49:23 -83.9 +2023/305-17:59:23 -74.5 +2023/305-18:09:23 -66.0 +2023/305-18:19:23 -59.1 +2023/305-18:29:23 -54.6 +2023/305-18:39:23 -54.3 +2023/305-18:49:23 -59.3 +2023/305-18:59:23 -81.6 +2023/305-19:09:23 -104.0 +2023/305-19:19:23 -110.3 +2023/305-19:29:23 -107.7 +2023/305-19:39:23 -101.9 +2023/305-19:49:23 -95.1 +2023/305-19:59:23 -86.3 +2023/305-20:09:23 -89.8 +2023/305-20:19:23 -110.1 +2023/305-20:29:23 -122.6 diff --git a/pysatSpaceWeather/tests/test_data/au_last_96_hrs.txt b/pysatSpaceWeather/tests/test_data/au_last_96_hrs.txt new file mode 100644 index 00000000..8e37b098 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/au_last_96_hrs.txt @@ -0,0 +1,575 @@ + Time Predicted AU +2023/301-21:01:23 34.4 +2023/301-21:11:23 38.5 +2023/301-21:21:23 44.0 +2023/301-21:31:23 49.7 +2023/301-21:41:23 55.5 +2023/301-21:51:23 63.7 +2023/301-22:01:23 73.8 +2023/301-22:11:23 85.0 +2023/301-22:21:23 96.0 +2023/301-22:31:23 103.3 +2023/301-22:41:23 103.9 +2023/301-22:51:23 99.3 +2023/301-23:01:23 95.1 +2023/301-23:11:23 94.9 +2023/301-23:21:23 102.0 +2023/301-23:31:23 114.6 +2023/301-23:41:23 129.0 +2023/301-23:51:23 141.4 +2023/302-00:01:23 150.4 +2023/302-00:11:23 155.5 +2023/302-00:21:23 155.1 +2023/302-00:31:23 151.1 +2023/302-00:41:23 147.1 +2023/302-00:51:23 144.6 +2023/302-01:01:23 143.1 +2023/302-01:11:23 144.3 +2023/302-01:21:23 145.0 +2023/302-01:31:23 141.1 +2023/302-01:41:23 131.8 +2023/302-01:51:23 119.4 +2023/302-02:01:23 107.3 +2023/302-02:11:23 97.9 +2023/302-02:21:23 92.0 +2023/302-02:31:23 87.6 +2023/302-02:41:23 83.2 +2023/302-02:51:23 77.2 +2023/302-03:01:23 71.0 +2023/302-03:11:23 67.9 +2023/302-03:21:23 70.3 +2023/302-03:31:23 77.0 +2023/302-03:41:23 86.1 +2023/302-03:51:23 96.4 +2023/302-04:01:23 106.8 +2023/302-04:11:23 115.6 +2023/302-04:21:23 123.1 +2023/302-04:31:23 129.5 +2023/302-04:41:23 134.1 +2023/302-04:51:23 136.8 +2023/302-05:01:23 133.7 +2023/302-05:11:23 128.1 +2023/302-05:21:23 122.3 +2023/302-05:31:23 115.8 +2023/302-05:41:23 107.1 +2023/302-05:51:23 100.3 +2023/302-06:01:23 93.7 +2023/302-06:11:23 85.1 +2023/302-06:21:23 76.2 +2023/302-06:31:23 68.2 +2023/302-06:41:23 61.4 +2023/302-06:51:23 55.5 +2023/302-07:01:23 51.2 +2023/302-07:11:23 48.3 +2023/302-07:21:23 50.9 +2023/302-07:31:23 61.6 +2023/302-07:41:23 78.8 +2023/302-07:51:23 100.6 +2023/302-08:01:23 124.8 +2023/302-08:11:23 145.1 +2023/302-08:21:23 158.9 +2023/302-08:31:23 168.0 +2023/302-08:41:23 173.5 +2023/302-08:51:23 176.5 +2023/302-09:01:23 180.3 +2023/302-09:11:23 184.0 +2023/302-09:21:23 185.7 +2023/302-09:31:23 184.7 +2023/302-09:41:23 181.0 +2023/302-09:51:23 172.2 +2023/302-10:01:23 159.3 +2023/302-10:11:23 148.3 +2023/302-10:21:23 140.5 +2023/302-10:31:23 136.2 +2023/302-10:41:23 135.6 +2023/302-10:51:23 136.9 +2023/302-11:01:23 135.5 +2023/302-11:11:23 131.3 +2023/302-11:21:23 124.9 +2023/302-11:31:23 116.1 +2023/302-11:41:23 106.3 +2023/302-11:51:23 97.8 +2023/302-12:01:23 92.6 +2023/302-12:11:23 90.9 +2023/302-12:21:23 89.6 +2023/302-12:31:23 88.4 +2023/302-12:41:23 85.3 +2023/302-12:51:23 79.1 +2023/302-13:01:23 71.5 +2023/302-13:11:23 68.1 +2023/302-13:21:23 69.3 +2023/302-13:31:23 75.8 +2023/302-13:41:23 85.0 +2023/302-13:51:23 96.0 +2023/302-14:01:23 106.0 +2023/302-14:11:23 114.8 +2023/302-14:21:23 122.3 +2023/302-14:31:23 130.8 +2023/302-14:41:23 138.4 +2023/302-14:51:23 144.5 +2023/302-15:01:23 147.5 +2023/302-15:11:23 145.5 +2023/302-15:21:23 139.9 +2023/302-15:31:23 131.7 +2023/302-15:41:23 123.8 +2023/302-15:51:23 117.8 +2023/302-16:01:23 114.2 +2023/302-16:11:23 110.2 +2023/302-16:21:23 104.7 +2023/302-16:31:23 96.8 +2023/302-16:41:23 87.6 +2023/302-16:51:23 78.2 +2023/302-17:01:23 70.7 +2023/302-17:11:23 66.3 +2023/302-17:21:23 64.3 +2023/302-17:31:23 62.1 +2023/302-17:41:23 59.1 +2023/302-17:51:23 55.5 +2023/302-18:01:23 52.0 +2023/302-18:11:23 51.6 +2023/302-18:21:23 57.4 +2023/302-18:31:23 67.7 +2023/302-18:41:23 79.4 +2023/302-18:51:23 91.7 +2023/302-19:01:23 98.1 +2023/302-19:11:23 99.6 +2023/302-19:21:23 100.9 +2023/302-19:31:23 102.4 +2023/302-19:41:23 101.0 +2023/302-19:51:23 101.1 +2023/302-20:01:23 101.4 +2023/302-20:11:23 98.5 +2023/302-20:21:23 94.7 +2023/302-20:31:23 93.2 +2023/302-20:41:23 93.1 +2023/302-20:51:23 92.7 +2023/302-21:01:23 92.3 +2023/302-21:11:23 91.9 +2023/302-21:21:23 90.9 +2023/302-21:31:23 89.7 +2023/302-21:41:23 88.7 +2023/302-21:51:23 87.8 +2023/302-22:01:23 86.6 +2023/302-22:11:23 85.4 +2023/302-22:21:23 84.2 +2023/302-22:31:23 82.8 +2023/302-22:41:23 81.4 +2023/302-22:51:23 80.4 +2023/302-23:01:23 82.0 +2023/302-23:11:23 86.5 +2023/302-23:21:23 93.1 +2023/302-23:31:23 101.0 +2023/302-23:41:23 109.7 +2023/302-23:51:23 116.4 +2023/303-00:01:23 120.8 +2023/303-00:11:23 123.8 +2023/303-00:21:23 125.8 +2023/303-00:31:23 127.3 +2023/303-00:41:23 127.3 +2023/303-00:51:23 126.3 +2023/303-01:01:23 125.7 +2023/303-01:11:23 125.2 +2023/303-01:21:23 124.7 +2023/303-01:31:23 126.1 +2023/303-01:41:23 128.1 +2023/303-01:51:23 128.9 +2023/303-02:01:23 128.7 +2023/303-02:11:23 127.7 +2023/303-02:21:23 124.4 +2023/303-02:31:23 119.3 +2023/303-02:41:23 113.4 +2023/303-02:51:23 106.4 +2023/303-03:01:23 98.3 +2023/303-03:11:23 90.1 +2023/303-03:21:23 82.4 +2023/303-03:31:23 74.7 +2023/303-03:41:23 67.5 +2023/303-03:51:23 60.8 +2023/303-04:01:23 54.5 +2023/303-04:11:23 48.5 +2023/303-04:21:23 43.1 +2023/303-04:31:23 38.2 +2023/303-04:41:23 34.2 +2023/303-04:51:23 31.4 +2023/303-05:01:23 29.7 +2023/303-05:11:23 28.8 +2023/303-05:21:23 28.7 +2023/303-05:31:23 28.9 +2023/303-05:41:23 29.4 +2023/303-05:51:23 30.1 +2023/303-06:01:23 31.2 +2023/303-06:11:23 32.7 +2023/303-06:21:23 34.3 +2023/303-06:31:23 35.9 +2023/303-06:41:23 37.3 +2023/303-06:51:23 38.4 +2023/303-07:01:23 39.3 +2023/303-07:11:23 40.0 +2023/303-07:21:23 40.5 +2023/303-07:31:23 40.9 +2023/303-07:41:23 41.3 +2023/303-07:51:23 41.6 +2023/303-08:01:23 41.0 +2023/303-08:11:23 39.8 +2023/303-08:21:23 38.1 +2023/303-08:31:23 36.1 +2023/303-08:41:23 33.7 +2023/303-08:51:23 31.8 +2023/303-09:01:23 30.1 +2023/303-09:11:23 28.5 +2023/303-09:21:23 26.9 +2023/303-09:31:23 25.4 +2023/303-09:41:23 24.0 +2023/303-09:51:23 22.8 +2023/303-10:01:23 21.8 +2023/303-10:11:23 21.1 +2023/303-10:21:23 20.5 +2023/303-10:31:23 21.7 +2023/303-10:41:23 24.5 +2023/303-10:51:23 27.6 +2023/303-11:01:23 30.9 +2023/303-11:11:23 34.4 +2023/303-11:21:23 36.2 +2023/303-11:31:23 36.6 +2023/303-11:41:23 37.3 +2023/303-11:51:23 38.1 +2023/303-12:01:23 38.8 +2023/303-12:11:23 40.0 +2023/303-12:21:23 43.3 +2023/303-12:31:23 48.8 +2023/303-12:41:23 57.6 +2023/303-12:51:23 69.7 +2023/303-13:01:23 83.9 +2023/303-13:11:23 96.9 +2023/303-13:21:23 107.8 +2023/303-13:31:23 115.9 +2023/303-13:41:23 121.3 +2023/303-13:51:23 122.8 +2023/303-14:01:23 120.8 +2023/303-14:11:23 116.3 +2023/303-14:21:23 109.1 +2023/303-14:31:23 99.4 +2023/303-14:41:23 89.9 +2023/303-14:51:23 81.9 +2023/303-15:01:23 74.5 +2023/303-15:11:23 67.6 +2023/303-15:21:23 61.2 +2023/303-15:31:23 55.0 +2023/303-15:41:23 48.8 +2023/303-15:51:23 43.2 +2023/303-16:01:23 38.3 +2023/303-16:11:23 34.0 +2023/303-16:21:23 30.1 +2023/303-16:31:23 26.8 +2023/303-16:41:23 25.0 +2023/303-16:51:23 24.6 +2023/303-17:01:23 25.5 +2023/303-17:11:23 27.8 +2023/303-17:21:23 31.0 +2023/303-17:31:23 34.1 +2023/303-17:41:23 36.9 +2023/303-17:51:23 39.6 +2023/303-18:01:23 42.1 +2023/303-18:11:23 44.5 +2023/303-18:21:23 46.7 +2023/303-18:31:23 48.6 +2023/303-18:41:23 50.2 +2023/303-18:51:23 51.4 +2023/303-19:01:23 52.5 +2023/303-19:11:23 53.3 +2023/303-19:21:23 54.0 +2023/303-19:31:23 54.4 +2023/303-19:41:23 54.8 +2023/303-19:51:23 54.9 +2023/303-20:01:23 55.0 +2023/303-20:11:23 54.8 +2023/303-20:21:23 54.6 +2023/303-20:31:23 54.4 +2023/303-20:41:23 54.1 +2023/303-20:51:23 53.8 +2023/303-21:01:23 53.4 +2023/303-21:11:23 53.1 +2023/303-21:21:23 52.7 +2023/303-21:31:23 52.4 +2023/303-21:41:23 52.1 +2023/303-21:51:23 51.7 +2023/303-22:01:23 51.4 +2023/303-22:11:23 51.0 +2023/303-22:21:23 50.2 +2023/303-22:31:23 48.7 +2023/303-22:41:23 46.8 +2023/303-22:51:23 44.5 +2023/303-23:01:23 42.0 +2023/303-23:11:23 40.0 +2023/303-23:21:23 39.8 +2023/303-23:31:23 40.3 +2023/303-23:41:23 40.5 +2023/303-23:51:23 41.0 +2023/304-00:01:23 41.1 +2023/304-00:11:23 39.4 +2023/304-00:21:23 39.7 +2023/304-00:31:23 43.8 +2023/304-00:41:23 49.8 +2023/304-00:51:23 57.1 +2023/304-01:01:23 65.6 +2023/304-01:11:23 71.8 +2023/304-01:21:23 75.5 +2023/304-01:31:23 78.3 +2023/304-01:41:23 80.3 +2023/304-01:51:23 81.1 +2023/304-02:01:23 80.5 +2023/304-02:11:23 78.0 +2023/304-02:21:23 73.3 +2023/304-02:31:23 67.5 +2023/304-02:41:23 62.1 +2023/304-02:51:23 57.7 +2023/304-03:01:23 54.0 +2023/304-03:11:23 50.7 +2023/304-03:21:23 48.3 +2023/304-03:31:23 46.2 +2023/304-03:41:23 44.0 +2023/304-03:51:23 42.0 +2023/304-04:01:23 39.9 +2023/304-04:11:23 37.2 +2023/304-04:21:23 34.8 +2023/304-04:31:23 34.6 +2023/304-04:41:23 37.1 +2023/304-04:51:23 40.1 +2023/304-05:01:23 42.8 +2023/304-05:11:23 44.3 +2023/304-05:21:23 43.5 +2023/304-05:31:23 40.0 +2023/304-05:41:23 37.1 +2023/304-05:51:23 35.3 +2023/304-06:01:23 34.3 +2023/304-06:11:23 33.7 +2023/304-06:21:23 33.3 +2023/304-06:31:23 32.8 +2023/304-06:41:23 31.7 +2023/304-06:51:23 30.3 +2023/304-07:01:23 29.2 +2023/304-07:11:23 28.3 +2023/304-07:21:23 27.6 +2023/304-07:31:23 27.2 +2023/304-07:41:23 27.4 +2023/304-07:51:23 28.1 +2023/304-08:01:23 29.7 +2023/304-08:11:23 34.1 +2023/304-08:21:23 40.1 +2023/304-08:31:23 48.3 +2023/304-08:41:23 58.2 +2023/304-08:51:23 68.9 +2023/304-09:01:23 78.7 +2023/304-09:11:23 88.0 +2023/304-09:21:23 95.9 +2023/304-09:31:23 103.2 +2023/304-09:41:23 110.0 +2023/304-09:51:23 116.2 +2023/304-10:01:23 121.8 +2023/304-10:11:23 126.8 +2023/304-10:21:23 130.6 +2023/304-10:31:23 132.9 +2023/304-10:41:23 131.9 +2023/304-10:51:23 128.0 +2023/304-11:01:23 123.0 +2023/304-11:11:23 117.7 +2023/304-11:21:23 113.1 +2023/304-11:31:23 111.2 +2023/304-11:41:23 112.7 +2023/304-11:51:23 114.8 +2023/304-12:01:23 116.8 +2023/304-12:11:23 115.3 +2023/304-12:21:23 110.9 +2023/304-12:31:23 104.1 +2023/304-12:41:23 96.6 +2023/304-12:51:23 89.0 +2023/304-13:01:23 83.7 +2023/304-13:11:23 79.8 +2023/304-13:21:23 76.0 +2023/304-13:31:23 72.2 +2023/304-13:41:23 67.7 +2023/304-13:51:23 62.8 +2023/304-14:01:23 57.7 +2023/304-14:11:23 53.6 +2023/304-14:21:23 50.4 +2023/304-14:31:23 47.2 +2023/304-14:41:23 44.3 +2023/304-14:51:23 41.6 +2023/304-15:01:23 38.4 +2023/304-15:11:23 34.6 +2023/304-15:21:23 31.3 +2023/304-15:31:23 28.5 +2023/304-15:41:23 26.0 +2023/304-15:51:23 23.7 +2023/304-16:01:23 21.6 +2023/304-16:11:23 19.6 +2023/304-16:21:23 17.7 +2023/304-16:31:23 16.0 +2023/304-16:41:23 14.6 +2023/304-16:51:23 13.3 +2023/304-17:01:23 12.6 +2023/304-17:11:23 12.1 +2023/304-17:21:23 11.7 +2023/304-17:31:23 11.4 +2023/304-17:41:23 11.2 +2023/304-17:51:23 11.0 +2023/304-18:01:23 10.8 +2023/304-18:11:23 10.7 +2023/304-18:21:23 11.0 +2023/304-18:31:23 11.6 +2023/304-18:41:23 12.6 +2023/304-18:51:23 15.0 +2023/304-19:01:23 19.7 +2023/304-19:11:23 25.9 +2023/304-19:21:23 33.0 +2023/304-19:31:23 40.5 +2023/304-19:41:23 46.4 +2023/304-19:51:23 50.2 +2023/304-20:01:23 51.3 +2023/304-20:11:23 51.1 +2023/304-20:21:23 49.4 +2023/304-20:31:23 47.4 +2023/304-20:41:23 44.6 +2023/304-20:51:23 42.3 +2023/304-21:01:23 40.5 +2023/304-21:11:23 39.0 +2023/304-21:21:23 38.0 +2023/304-21:31:23 37.2 +2023/304-21:41:23 36.4 +2023/304-21:51:23 34.8 +2023/304-22:01:23 33.0 +2023/304-22:11:23 31.3 +2023/304-22:21:23 29.9 +2023/304-22:31:23 28.9 +2023/304-22:41:23 28.6 +2023/304-22:51:23 29.5 +2023/304-23:01:23 32.0 +2023/304-23:11:23 36.2 +2023/304-23:21:23 41.5 +2023/304-23:31:23 46.5 +2023/304-23:41:23 51.3 +2023/304-23:51:23 55.6 +2023/305-00:01:23 58.2 +2023/305-00:11:23 59.5 +2023/305-00:21:23 60.3 +2023/305-00:31:23 59.9 +2023/305-00:41:23 58.2 +2023/305-00:51:23 56.7 +2023/305-01:01:23 55.6 +2023/305-01:11:23 55.2 +2023/305-01:21:23 55.1 +2023/305-01:31:23 54.7 +2023/305-01:41:23 53.7 +2023/305-01:51:23 51.9 +2023/305-02:01:23 49.4 +2023/305-02:11:23 46.7 +2023/305-02:21:23 44.5 +2023/305-02:31:23 43.8 +2023/305-02:41:23 45.2 +2023/305-02:51:23 48.6 +2023/305-03:01:23 53.6 +2023/305-03:11:23 59.7 +2023/305-03:21:23 65.3 +2023/305-03:31:23 68.9 +2023/305-03:41:23 70.3 +2023/305-03:51:23 69.2 +2023/305-04:01:23 66.3 +2023/305-04:11:23 62.2 +2023/305-04:21:23 57.5 +2023/305-04:31:23 53.0 +2023/305-04:41:23 49.0 +2023/305-04:51:23 45.1 +2023/305-05:01:23 41.5 +2023/305-05:11:23 38.2 +2023/305-05:21:23 35.2 +2023/305-05:31:23 32.5 +2023/305-05:41:23 30.2 +2023/305-05:51:23 28.2 +2023/305-06:01:23 27.2 +2023/305-06:11:23 28.0 +2023/305-06:21:23 31.0 +2023/305-06:31:23 35.9 +2023/305-06:41:23 42.8 +2023/305-06:51:23 50.8 +2023/305-07:01:23 58.7 +2023/305-07:11:23 66.5 +2023/305-07:21:23 74.0 +2023/305-07:31:23 81.1 +2023/305-07:41:23 87.9 +2023/305-07:51:23 93.4 +2023/305-08:01:23 97.0 +2023/305-08:11:23 98.6 +2023/305-08:21:23 98.2 +2023/305-08:31:23 95.2 +2023/305-08:41:23 91.5 +2023/305-08:51:23 88.0 +2023/305-09:01:23 84.6 +2023/305-09:11:23 81.5 +2023/305-09:21:23 80.5 +2023/305-09:31:23 80.8 +2023/305-09:41:23 80.9 +2023/305-09:51:23 81.1 +2023/305-10:01:23 80.9 +2023/305-10:11:23 78.8 +2023/305-10:21:23 75.0 +2023/305-10:31:23 70.5 +2023/305-10:41:23 65.8 +2023/305-10:51:23 61.0 +2023/305-11:01:23 56.3 +2023/305-11:11:23 51.8 +2023/305-11:21:23 47.5 +2023/305-11:31:23 43.5 +2023/305-11:41:23 39.9 +2023/305-11:51:23 37.3 +2023/305-12:01:23 36.8 +2023/305-12:11:23 37.1 +2023/305-12:21:23 37.6 +2023/305-12:31:23 38.1 +2023/305-12:41:23 38.1 +2023/305-12:51:23 36.7 +2023/305-13:01:23 35.0 +2023/305-13:11:23 33.9 +2023/305-13:21:23 33.9 +2023/305-13:31:23 35.2 +2023/305-13:41:23 39.2 +2023/305-13:51:23 45.3 +2023/305-14:01:23 52.2 +2023/305-14:11:23 59.0 +2023/305-14:21:23 65.3 +2023/305-14:31:23 69.1 +2023/305-14:41:23 71.2 +2023/305-14:51:23 73.8 +2023/305-15:01:23 76.6 +2023/305-15:11:23 78.6 +2023/305-15:21:23 79.8 +2023/305-15:31:23 79.8 +2023/305-15:41:23 77.0 +2023/305-15:51:23 72.6 +2023/305-16:01:23 67.8 +2023/305-16:11:23 63.5 +2023/305-16:21:23 59.6 +2023/305-16:31:23 56.5 +2023/305-16:41:23 54.5 +2023/305-16:51:23 52.2 +2023/305-17:01:23 49.2 +2023/305-17:11:23 46.1 +2023/305-17:21:23 42.9 +2023/305-17:31:23 38.9 +2023/305-17:41:23 35.1 +2023/305-17:51:23 32.0 +2023/305-18:01:23 29.2 +2023/305-18:11:23 26.5 +2023/305-18:21:23 24.4 +2023/305-18:31:23 23.4 +2023/305-18:41:23 24.5 +2023/305-18:51:23 28.0 +2023/305-19:01:23 32.5 +2023/305-19:11:23 36.8 +2023/305-19:21:23 39.7 +2023/305-19:31:23 40.3 +2023/305-19:41:23 38.4 +2023/305-19:51:23 36.3 +2023/305-20:01:23 36.6 +2023/305-20:11:23 38.9 +2023/305-20:21:23 41.9 +2023/305-20:31:23 49.8 diff --git a/pysatSpaceWeather/tests/test_data/dst_last_96_hrs.txt b/pysatSpaceWeather/tests/test_data/dst_last_96_hrs.txt new file mode 100644 index 00000000..1d648690 --- /dev/null +++ b/pysatSpaceWeather/tests/test_data/dst_last_96_hrs.txt @@ -0,0 +1,575 @@ + Time Predicted Dst +2023/301-21:10:16 -40.5 +2023/301-21:20:59 -39.9 +2023/301-21:30:56 -39.8 +2023/301-21:40:19 -41.0 +2023/301-21:49:52 -41.1 +2023/301-21:59:32 -41.6 +2023/301-22:09:00 -42.8 +2023/301-22:18:46 -43.0 +2023/301-22:28:40 -42.5 +2023/301-22:38:23 -42.0 +2023/301-22:48:07 -42.3 +2023/301-22:58:22 -44.2 +2023/301-23:09:04 -45.0 +2023/301-23:18:47 -43.7 +2023/301-23:27:44 -42.6 +2023/301-23:37:15 -40.3 +2023/301-23:46:57 -40.9 +2023/301-23:56:35 -43.2 +2023/302-00:05:58 -45.4 +2023/302-00:15:13 -47.8 +2023/302-00:24:46 -49.8 +2023/302-00:34:39 -50.3 +2023/302-00:44:41 -50.4 +2023/302-00:53:52 -50.4 +2023/302-01:03:19 -51.2 +2023/302-01:13:54 -51.7 +2023/302-01:25:02 -49.9 +2023/302-01:35:49 -47.6 +2023/302-01:45:21 -48.5 +2023/302-01:54:29 -51.3 +2023/302-02:04:04 -52.6 +2023/302-02:14:16 -52.1 +2023/302-02:24:34 -50.0 +2023/302-02:34:32 -47.0 +2023/302-02:44:18 -44.6 +2023/302-02:53:49 -43.8 +2023/302-03:03:59 -44.3 +2023/302-03:14:38 -45.3 +2023/302-03:24:15 -44.8 +2023/302-03:34:02 -43.4 +2023/302-03:44:28 -42.7 +2023/302-03:54:38 -42.6 +2023/302-04:04:32 -43.3 +2023/302-04:14:01 -45.4 +2023/302-04:23:39 -47.7 +2023/302-04:33:49 -48.7 +2023/302-04:44:09 -48.3 +2023/302-04:53:42 -49.1 +2023/302-05:03:23 -50.4 +2023/302-05:13:25 -51.4 +2023/302-05:23:24 -51.8 +2023/302-05:33:29 -51.3 +2023/302-05:42:46 -50.7 +2023/302-05:52:05 -50.8 +2023/302-06:02:03 -49.7 +2023/302-06:11:47 -47.7 +2023/302-06:21:47 -48.9 +2023/302-06:32:06 -48.8 +2023/302-06:42:52 -47.1 +2023/302-06:53:32 -45.3 +2023/302-07:02:27 -43.7 +2023/302-07:11:13 -41.3 +2023/302-07:20:56 -40.4 +2023/302-07:31:10 -40.5 +2023/302-07:41:02 -40.0 +2023/302-07:50:29 -40.8 +2023/302-08:00:15 -42.6 +2023/302-08:10:08 -43.3 +2023/302-08:20:07 -45.1 +2023/302-08:29:29 -49.9 +2023/302-08:39:35 -53.3 +2023/302-08:50:43 -54.7 +2023/302-09:01:09 -55.7 +2023/302-09:11:12 -56.3 +2023/302-09:20:53 -57.4 +2023/302-09:30:46 -58.9 +2023/302-09:41:31 -59.6 +2023/302-09:52:34 -59.0 +2023/302-10:02:54 -59.4 +2023/302-10:12:47 -60.9 +2023/302-10:22:16 -60.4 +2023/302-10:31:29 -59.0 +2023/302-10:40:24 -57.1 +2023/302-10:49:08 -55.2 +2023/302-10:59:04 -54.6 +2023/302-11:10:06 -55.7 +2023/302-11:20:27 -56.6 +2023/302-11:29:58 -56.4 +2023/302-11:40:34 -56.3 +2023/302-11:52:02 -56.2 +2023/302-12:02:26 -55.8 +2023/302-12:12:10 -55.8 +2023/302-12:22:29 -55.3 +2023/302-12:32:49 -54.6 +2023/302-12:42:24 -53.3 +2023/302-12:52:14 -53.0 +2023/302-13:02:35 -54.7 +2023/302-13:12:37 -55.4 +2023/302-13:22:19 -54.6 +2023/302-13:32:11 -53.1 +2023/302-13:42:40 -52.2 +2023/302-13:53:31 -51.6 +2023/302-14:03:16 -52.0 +2023/302-14:12:41 -53.3 +2023/302-14:22:53 -54.2 +2023/302-14:32:27 -54.9 +2023/302-14:42:12 -55.7 +2023/302-14:52:40 -55.9 +2023/302-15:02:32 -56.6 +2023/302-15:12:15 -56.5 +2023/302-15:22:04 -56.7 +2023/302-15:31:45 -57.1 +2023/302-15:41:45 -57.2 +2023/302-15:52:28 -56.6 +2023/302-16:02:47 -55.5 +2023/302-16:12:38 -54.1 +2023/302-16:22:53 -53.6 +2023/302-16:33:10 -53.7 +2023/302-16:43:19 -53.5 +2023/302-16:53:26 -53.9 +2023/302-17:03:26 -53.6 +2023/302-17:13:18 -53.0 +2023/302-17:23:25 -51.8 +2023/302-17:33:29 -50.8 +2023/302-17:42:58 -50.7 +2023/302-17:52:15 -50.9 +2023/302-18:02:13 -50.9 +2023/302-18:12:59 -50.6 +2023/302-18:23:24 -50.3 +2023/302-18:33:27 -49.6 +2023/302-18:43:43 -48.3 +2023/302-18:53:18 -48.5 +2023/302-19:02:53 -49.6 +2023/302-19:12:45 -50.9 +2023/302-19:22:55 -51.8 +2023/302-19:33:13 -51.9 +2023/302-19:43:06 -51.2 +2023/302-19:53:26 -50.6 +2023/302-20:03:50 -50.2 +2023/302-20:13:39 -49.6 +2023/302-20:23:19 -50.4 +2023/302-20:33:23 -50.5 +2023/302-20:43:24 -49.0 +2023/302-20:53:14 -48.0 +2023/302-21:02:48 -48.2 +2023/302-21:12:49 -48.2 +2023/302-21:22:48 -47.8 +2023/302-21:32:42 -47.5 +2023/302-21:43:13 -47.3 +2023/302-21:53:24 -47.2 +2023/302-22:03:20 -47.2 +2023/302-22:13:14 -47.0 +2023/302-22:23:09 -46.9 +2023/302-22:33:35 -46.9 +2023/302-22:43:58 -46.8 +2023/302-22:53:47 -46.7 +2023/302-23:03:40 -46.6 +2023/302-23:13:47 -46.5 +2023/302-23:24:01 -46.4 +2023/302-23:34:02 -46.1 +2023/302-23:44:01 -46.0 +2023/302-23:54:00 -46.2 +2023/303-00:03:59 -47.0 +2023/303-00:13:57 -48.3 +2023/303-00:23:52 -48.6 +2023/303-00:33:35 -48.7 +2023/303-00:43:22 -48.9 +2023/303-00:53:23 -49.0 +2023/303-01:03:26 -49.2 +2023/303-01:13:29 -49.4 +2023/303-01:23:39 -49.4 +2023/303-01:33:47 -49.5 +2023/303-01:43:47 -49.4 +2023/303-01:54:02 -49.0 +2023/303-02:04:28 -49.7 +2023/303-02:14:40 -50.4 +2023/303-02:24:48 -50.3 +2023/303-02:35:00 -50.6 +2023/303-02:45:08 -50.7 +2023/303-02:55:14 -50.2 +2023/303-03:05:11 -50.1 +2023/303-03:14:58 -49.9 +2023/303-03:24:59 -49.3 +2023/303-03:35:09 -48.6 +2023/303-03:45:09 -48.2 +2023/303-03:55:01 -47.7 +2023/303-04:04:49 -46.9 +2023/303-04:14:28 -46.7 +2023/303-04:23:42 -47.1 +2023/303-04:33:24 -47.3 +2023/303-04:44:16 -46.7 +2023/303-04:54:40 -46.6 +2023/303-05:04:25 -46.3 +2023/303-05:14:42 -45.6 +2023/303-05:24:39 -44.7 +2023/303-05:34:28 -45.7 +2023/303-05:44:48 -47.2 +2023/303-05:54:34 -47.4 +2023/303-06:03:45 -47.1 +2023/303-06:13:30 -46.7 +2023/303-06:23:47 -46.3 +2023/303-06:34:09 -46.0 +2023/303-06:44:12 -45.7 +2023/303-06:54:34 -45.5 +2023/303-07:05:28 -45.3 +2023/303-07:15:54 -45.3 +2023/303-07:25:42 -45.2 +2023/303-07:35:26 -45.0 +2023/303-07:45:14 -44.7 +2023/303-07:54:43 -44.7 +2023/303-08:04:36 -44.5 +2023/303-08:15:37 -44.4 +2023/303-08:26:16 -44.2 +2023/303-08:36:17 -43.8 +2023/303-08:46:37 -43.3 +2023/303-08:56:57 -42.9 +2023/303-09:06:59 -41.8 +2023/303-09:16:46 -40.4 +2023/303-09:26:40 -40.9 +2023/303-09:36:33 -40.8 +2023/303-09:46:39 -40.5 +2023/303-09:56:46 -40.0 +2023/303-10:05:50 -39.6 +2023/303-10:15:07 -39.8 +2023/303-10:25:15 -40.3 +2023/303-10:36:05 -40.0 +2023/303-10:46:55 -39.1 +2023/303-10:56:35 -38.2 +2023/303-11:06:29 -37.6 +2023/303-11:17:06 -37.6 +2023/303-11:27:33 -38.7 +2023/303-11:37:47 -40.1 +2023/303-11:48:02 -40.1 +2023/303-11:58:18 -39.1 +2023/303-12:08:33 -38.9 +2023/303-12:18:47 -38.9 +2023/303-12:28:50 -39.0 +2023/303-12:38:34 -39.1 +2023/303-12:47:49 -39.1 +2023/303-12:56:51 -39.3 +2023/303-13:06:15 -39.5 +2023/303-13:15:10 -40.3 +2023/303-13:24:27 -41.9 +2023/303-13:35:28 -43.1 +2023/303-13:46:56 -44.3 +2023/303-13:57:26 -45.2 +2023/303-14:06:54 -45.5 +2023/303-14:16:13 -45.6 +2023/303-14:26:05 -45.8 +2023/303-14:35:47 -46.3 +2023/303-14:45:21 -46.7 +2023/303-14:55:41 -45.8 +2023/303-15:05:49 -43.5 +2023/303-15:15:33 -41.9 +2023/303-15:25:50 -41.2 +2023/303-15:36:18 -40.7 +2023/303-15:46:13 -40.1 +2023/303-15:56:03 -39.6 +2023/303-16:05:52 -39.0 +2023/303-16:15:47 -38.5 +2023/303-16:25:30 -38.1 +2023/303-16:34:57 -38.1 +2023/303-16:44:52 -38.0 +2023/303-16:54:58 -37.8 +2023/303-17:05:04 -37.5 +2023/303-17:15:10 -37.2 +2023/303-17:25:16 -37.0 +2023/303-17:35:22 -37.7 +2023/303-17:45:28 -39.2 +2023/303-17:55:34 -39.1 +2023/303-18:05:40 -38.9 +2023/303-18:15:46 -38.8 +2023/303-18:25:52 -38.7 +2023/303-18:35:59 -38.6 +2023/303-18:46:05 -38.5 +2023/303-18:56:11 -38.4 +2023/303-19:06:17 -38.2 +2023/303-19:16:24 -38.1 +2023/303-19:26:30 -38.0 +2023/303-19:36:36 -37.9 +2023/303-19:46:43 -37.7 +2023/303-19:56:49 -37.6 +2023/303-20:06:56 -37.5 +2023/303-20:17:02 -37.4 +2023/303-20:27:09 -37.3 +2023/303-20:37:15 -37.2 +2023/303-20:47:22 -37.1 +2023/303-20:57:28 -37.0 +2023/303-21:07:35 -36.8 +2023/303-21:17:42 -36.7 +2023/303-21:27:48 -36.6 +2023/303-21:37:55 -36.5 +2023/303-21:48:02 -36.4 +2023/303-21:58:09 -36.4 +2023/303-22:08:15 -36.3 +2023/303-22:18:22 -36.2 +2023/303-22:28:29 -36.2 +2023/303-22:38:30 -36.0 +2023/303-22:48:21 -35.7 +2023/303-22:58:03 -35.4 +2023/303-23:07:40 -35.2 +2023/303-23:17:45 -35.1 +2023/303-23:28:34 -34.7 +2023/303-23:39:14 -34.1 +2023/303-23:49:20 -32.9 +2023/303-23:59:16 -32.0 +2023/304-00:08:50 -31.8 +2023/304-00:18:30 -32.0 +2023/304-00:28:32 -32.2 +2023/304-00:38:37 -32.3 +2023/304-00:48:51 -31.6 +2023/304-00:59:11 -31.1 +2023/304-01:09:31 -31.1 +2023/304-01:19:51 -32.0 +2023/304-01:30:04 -33.8 +2023/304-01:39:53 -34.8 +2023/304-01:49:31 -35.7 +2023/304-01:59:36 -36.8 +2023/304-02:09:55 -37.4 +2023/304-02:19:39 -37.3 +2023/304-02:28:53 -37.1 +2023/304-02:38:10 -36.4 +2023/304-02:47:32 -35.6 +2023/304-02:57:05 -35.1 +2023/304-03:07:09 -34.9 +2023/304-03:17:27 -34.4 +2023/304-03:27:24 -33.8 +2023/304-03:37:36 -33.4 +2023/304-03:48:12 -33.9 +2023/304-03:59:02 -34.1 +2023/304-04:09:08 -33.3 +2023/304-04:18:31 -33.2 +2023/304-04:28:56 -33.8 +2023/304-04:39:40 -33.4 +2023/304-04:49:44 -32.9 +2023/304-04:59:39 -32.3 +2023/304-05:09:33 -32.2 +2023/304-05:19:09 -32.7 +2023/304-05:29:15 -33.6 +2023/304-05:40:03 -35.2 +2023/304-05:50:51 -35.2 +2023/304-06:01:16 -33.2 +2023/304-06:11:22 -32.1 +2023/304-06:21:27 -31.7 +2023/304-06:31:27 -32.5 +2023/304-06:41:04 -33.4 +2023/304-06:50:01 -33.6 +2023/304-06:59:51 -33.7 +2023/304-07:10:17 -33.4 +2023/304-07:20:21 -33.0 +2023/304-07:30:52 -32.6 +2023/304-07:41:16 -31.9 +2023/304-07:51:04 -30.6 +2023/304-08:00:36 -30.3 +2023/304-08:10:48 -30.3 +2023/304-08:21:30 -30.7 +2023/304-08:31:45 -31.2 +2023/304-08:41:52 -31.5 +2023/304-08:51:55 -32.3 +2023/304-09:01:55 -33.4 +2023/304-09:11:48 -34.7 +2023/304-09:22:04 -36.1 +2023/304-09:32:07 -36.7 +2023/304-09:41:38 -37.7 +2023/304-09:51:40 -38.6 +2023/304-10:01:53 -39.5 +2023/304-10:12:04 -40.1 +2023/304-10:22:15 -40.7 +2023/304-10:32:22 -41.6 +2023/304-10:42:41 -42.8 +2023/304-10:52:38 -43.4 +2023/304-11:02:02 -43.9 +2023/304-11:11:36 -43.9 +2023/304-11:21:35 -43.9 +2023/304-11:32:05 -43.8 +2023/304-11:42:26 -43.2 +2023/304-11:52:18 -42.4 +2023/304-12:02:08 -42.3 +2023/304-12:12:12 -42.9 +2023/304-12:22:13 -43.2 +2023/304-12:32:04 -43.5 +2023/304-12:41:56 -43.7 +2023/304-12:51:48 -43.5 +2023/304-13:01:39 -42.9 +2023/304-13:11:31 -41.9 +2023/304-13:21:23 -40.4 +2023/304-13:31:15 -40.0 +2023/304-13:41:06 -39.7 +2023/304-13:50:58 -39.5 +2023/304-14:01:41 -39.4 +2023/304-14:12:40 -39.2 +2023/304-14:22:43 -39.1 +2023/304-14:32:42 -38.9 +2023/304-14:42:56 -38.7 +2023/304-14:53:06 -37.9 +2023/304-15:03:14 -37.1 +2023/304-15:13:24 -37.8 +2023/304-15:23:16 -38.3 +2023/304-15:32:59 -37.9 +2023/304-15:42:44 -37.4 +2023/304-15:52:41 -37.9 +2023/304-16:02:36 -38.0 +2023/304-16:12:01 -37.6 +2023/304-16:21:18 -37.2 +2023/304-16:30:41 -37.3 +2023/304-16:40:26 -37.4 +2023/304-16:51:30 -36.8 +2023/304-17:02:41 -35.7 +2023/304-17:12:50 -35.0 +2023/304-17:22:10 -34.3 +2023/304-17:31:11 -33.9 +2023/304-17:41:28 -33.8 +2023/304-17:52:13 -34.0 +2023/304-18:02:15 -34.3 +2023/304-18:12:20 -34.1 +2023/304-18:22:53 -33.4 +2023/304-18:33:30 -33.1 +2023/304-18:43:38 -33.2 +2023/304-18:53:28 -33.3 +2023/304-19:03:09 -33.0 +2023/304-19:12:34 -33.2 +2023/304-19:22:25 -34.0 +2023/304-19:32:29 -34.5 +2023/304-19:42:09 -34.7 +2023/304-19:51:45 -34.9 +2023/304-20:01:35 -35.5 +2023/304-20:11:28 -35.8 +2023/304-20:21:06 -35.6 +2023/304-20:31:13 -35.4 +2023/304-20:41:28 -35.1 +2023/304-20:51:31 -34.8 +2023/304-21:02:17 -34.1 +2023/304-21:13:17 -33.3 +2023/304-21:23:39 -33.5 +2023/304-21:33:25 -32.7 +2023/304-21:43:18 -31.8 +2023/304-21:53:33 -32.1 +2023/304-22:03:38 -33.1 +2023/304-22:13:26 -33.1 +2023/304-22:22:42 -32.6 +2023/304-22:31:36 -32.6 +2023/304-22:40:47 -32.2 +2023/304-22:50:44 -32.2 +2023/304-23:01:31 -32.2 +2023/304-23:12:28 -32.3 +2023/304-23:23:04 -32.5 +2023/304-23:33:16 -32.6 +2023/304-23:43:09 -33.0 +2023/304-23:52:58 -33.9 +2023/305-00:02:52 -34.8 +2023/305-00:13:13 -35.3 +2023/305-00:24:02 -35.6 +2023/305-00:34:28 -35.3 +2023/305-00:44:20 -35.1 +2023/305-00:54:07 -35.4 +2023/305-01:04:26 -35.2 +2023/305-01:14:37 -34.7 +2023/305-01:24:40 -34.3 +2023/305-01:34:53 -33.9 +2023/305-01:44:56 -33.9 +2023/305-01:55:02 -34.1 +2023/305-02:04:57 -34.3 +2023/305-02:14:17 -34.5 +2023/305-02:23:18 -34.3 +2023/305-02:32:56 -34.0 +2023/305-02:43:25 -33.8 +2023/305-02:53:38 -33.7 +2023/305-03:03:14 -33.2 +2023/305-03:13:19 -32.7 +2023/305-03:23:36 -34.1 +2023/305-03:33:33 -35.3 +2023/305-03:43:55 -36.3 +2023/305-03:54:10 -36.9 +2023/305-04:03:40 -37.1 +2023/305-04:13:00 -37.3 +2023/305-04:22:22 -37.4 +2023/305-04:32:07 -37.1 +2023/305-04:42:24 -36.5 +2023/305-04:52:58 -35.1 +2023/305-05:03:05 -33.8 +2023/305-05:13:20 -33.6 +2023/305-05:23:10 -32.7 +2023/305-05:32:41 -32.4 +2023/305-05:42:55 -31.7 +2023/305-05:53:34 -31.3 +2023/305-06:04:31 -30.6 +2023/305-06:14:45 -30.0 +2023/305-06:24:38 -30.2 +2023/305-06:34:35 -30.7 +2023/305-06:44:28 -31.0 +2023/305-06:54:30 -31.5 +2023/305-07:04:38 -33.7 +2023/305-07:14:19 -34.9 +2023/305-07:23:28 -35.5 +2023/305-07:33:06 -35.9 +2023/305-07:43:09 -36.5 +2023/305-07:53:08 -37.0 +2023/305-08:03:30 -37.3 +2023/305-08:14:32 -37.5 +2023/305-08:25:46 -37.8 +2023/305-08:36:32 -37.9 +2023/305-08:46:36 -38.1 +2023/305-08:55:51 -38.0 +2023/305-09:05:55 -37.5 +2023/305-09:15:58 -37.4 +2023/305-09:24:18 -37.0 +2023/305-09:33:35 -36.6 +2023/305-09:44:09 -36.6 +2023/305-09:54:45 -36.9 +2023/305-10:05:22 -36.9 +2023/305-10:16:00 -36.6 +2023/305-10:26:39 -37.3 +2023/305-10:37:12 -37.6 +2023/305-10:47:27 -37.1 +2023/305-10:57:34 -36.7 +2023/305-11:07:31 -36.3 +2023/305-11:17:13 -35.7 +2023/305-11:26:57 -35.3 +2023/305-11:36:52 -34.8 +2023/305-11:46:54 -34.1 +2023/305-11:56:35 -33.5 +2023/305-12:06:21 -32.8 +2023/305-12:17:03 -32.1 +2023/305-12:27:51 -31.8 +2023/305-12:38:10 -31.9 +2023/305-12:48:25 -32.3 +2023/305-12:58:35 -33.6 +2023/305-13:08:39 -34.8 +2023/305-13:18:23 -34.1 +2023/305-13:28:23 -33.7 +2023/305-13:38:05 -33.6 +2023/305-13:46:51 -33.6 +2023/305-13:56:08 -33.7 +2023/305-14:06:18 -33.8 +2023/305-14:16:49 -34.1 +2023/305-14:26:51 -34.4 +2023/305-14:35:57 -35.0 +2023/305-14:45:15 -35.8 +2023/305-14:54:24 -35.7 +2023/305-15:03:48 -35.3 +2023/305-15:14:11 -35.0 +2023/305-15:24:35 -34.9 +2023/305-15:34:58 -34.6 +2023/305-15:45:22 -34.3 +2023/305-15:55:47 -34.8 +2023/305-16:06:00 -34.9 +2023/305-16:16:06 -34.4 +2023/305-16:26:08 -33.9 +2023/305-16:36:18 -33.4 +2023/305-16:46:47 -33.1 +2023/305-16:56:22 -32.5 +2023/305-17:04:56 -32.4 +2023/305-17:14:42 -32.6 +2023/305-17:26:01 -32.3 +2023/305-17:35:24 -32.4 +2023/305-17:44:32 -32.6 +2023/305-17:55:52 -32.3 +2023/305-18:06:53 -31.2 +2023/305-18:16:31 -30.7 +2023/305-18:25:59 -30.9 +2023/305-18:36:19 -31.0 +2023/305-18:46:35 -30.4 +2023/305-18:56:10 -29.9 +2023/305-19:05:51 -30.0 +2023/305-19:16:12 -30.7 +2023/305-19:26:58 -31.1 +2023/305-19:36:28 -31.3 +2023/305-19:45:21 -31.9 +2023/305-19:55:19 -32.0 +2023/305-20:05:54 -31.3 +2023/305-20:16:21 -30.3 +2023/305-20:26:23 -29.5 +2023/305-20:36:29 -28.5 +2023/305-20:46:42 -28.9 From 2eb041a66cb4795333e69270dc9e24d33b88d931 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 17:28:30 -0400 Subject: [PATCH 131/171] DOC: fixed CP docstrings Fixed the docstrings and descrptions in the sw_cp.py file. --- pysatSpaceWeather/instruments/sw_cp.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_cp.py b/pysatSpaceWeather/instruments/sw_cp.py index 538a31b3..1bd629b6 100644 --- a/pysatSpaceWeather/instruments/sw_cp.py +++ b/pysatSpaceWeather/instruments/sw_cp.py @@ -28,7 +28,7 @@ -------- :: - cp_ind = pysat.Instrument('gfz', 'cp', tag='def') + cp_ind = pysat.Instrument('sw', 'cp', tag='def') cp_ind.download(start=dt.datetime(2010, 1, 1)) cp_ind.load(2010, 1) @@ -47,8 +47,8 @@ platform = 'sw' name = 'cp' -tags = {'def': 'Definitive Kp data from GFZ', - 'now': 'Nowcast Kp data from GFZ'} +tags = {'def': 'Definitive Cp data from GFZ', + 'now': 'Nowcast Cp data from GFZ'} inst_ids = {'': list(tags.keys())} # ---------------------------------------------------------------------------- From 6e87fba29f47e52b57b4c0031a8a3add0cb70f97 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 17:28:54 -0400 Subject: [PATCH 132/171] BUG: updated logger warning Updated logger warning to reflect more data types. --- pysatSpaceWeather/instruments/methods/lasp.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/lasp.py b/pysatSpaceWeather/instruments/methods/lasp.py index bf0a6263..0b4fcca8 100644 --- a/pysatSpaceWeather/instruments/methods/lasp.py +++ b/pysatSpaceWeather/instruments/methods/lasp.py @@ -64,8 +64,8 @@ def prediction_downloads(name, tag, data_path, mock_download_dir=None): with open(url, 'r') as fpin: raw_txt = fpin.read() else: - pysat.logger.warning(''.join(['LASP last 96 hour Dst file not ', - 'found in local directory: ', url, + pysat.logger.warning(''.join(['LASP last 96 hour file not found in', + 'the local directory: ', url, ", data may have been saved to an ", "unexpected filename"])) raw_txt = None From 97d4c2e06362aac9807eebde3ebed090dbe7428c Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 17:29:18 -0400 Subject: [PATCH 133/171] DOC: added mock download example Added an example of using mock downloads. --- docs/examples.rst | 1 + docs/examples/ex_mock_downloads.rst | 81 +++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 docs/examples/ex_mock_downloads.rst diff --git a/docs/examples.rst b/docs/examples.rst index 3ffaf70b..bad19bf7 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -10,3 +10,4 @@ tools examples/ex_kp.rst examples/ex_ace.rst examples/ex_mult_downloads.rst + examples/ex_mock_downloads.rst diff --git a/docs/examples/ex_mock_downloads.rst b/docs/examples/ex_mock_downloads.rst new file mode 100644 index 00000000..11ed72d5 --- /dev/null +++ b/docs/examples/ex_mock_downloads.rst @@ -0,0 +1,81 @@ +.. _exmockdown: + +Mock downloads +============== + +:py:mod:`pysatSpaceWeather` differs from :py:mod:`pysat` by allowing +:py:class:`~pysat._instrument.Instrument` downloads to "download" data from +a local directory. This allows the user to have full control over the remote +access, while still allowing :py:mod:`pysat` to handle the data extraction and +file handling. + +When using the mock-download option, :py:mod:`pysatSpaceWeather` requires that +you specify the local directory where you have stored the desired data files. +If you don't employ this option, downloads will be attempted from the remote +source. If you do employ this option and the directory is wrong, and IOError +will be raised. If instead the expected file is missing, a logging Information +message will be returned. + +:: + + import pysat + import pysatSpaceWeather as py_sw + + f107 = pysat.Instrument(inst_module=py_sw.instruments.sw_f107, tag='45day') + + # 'Download' the data from a local directory + f107.download(start=f107.tomorrow(), mock_download_dir='my/data/directory') + + +These data files must have the same name as the remote file. In instances where +there is no remote filename (e.g., when "downloading" data from LISIRD), the +filename should reflect the internal name used by :py:mod:`pysatSpaceWeather`. +The locations and expected filenames for each of the Instruments are provided +in the table below. In this table, YYYY stands for the 4-digit year, MM stands +for the 2-digit month, and DD stands for the 2-digit day-of-month. QUERY is a +placeholder for a index and date dependent query needed to return the desired +data. See the GFZ and LISIRD methods to see how the queries are constructed. + ++------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| Remote Location | Filename | Instrument(s) | ++========================================================================+====================================+============================================================================================================================+ +| https://services.swpc.noaa.gov/text/ | 3-day-geomag-forecast.txt | sw-ap-forecast, sw-kp-forecast, sw-stormprob-forecast | +| | 3-day-solar-geomag-predictions.txt | sw-ap-preciction, sw-f107-forecast, sw-flare-prediction, sw-kp-preciction, sw-polarcap-prediction, sw-stormprob-prediction | +| | 45-day-ap-forecast.txt | sw-f107-45day, sw-ap-45day | +| | ace-epam.txt | ace-epam-realtime | +| | ace-magnetometer.txt | ace-mag-realtime | +| | ace-sis.txt | ace-sis-realtime | +| | ace-swepam.txt | ace-swepam-realtime | +| | daily-geomagnetic-indices.txt | sw-ap-recent, sw-kp-recent | +| | daily-solar-indices.txt | sw-ssn-daily, sw-f107-daily, sw-flare-daily, sw-sbfield-daily | ++------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| https://sohoftp.nascom.nasa.gov/sdb/ace/daily/ | YYYYMMDD_ace_epam_5m.txt | ace-epam-historic | +| | YYYYMMDD_ace_mag_1m.txt | ace-mag-historic | +| | YYYYMMDD_ace_sis_5m.txt | ace-sis-historic | +| | YYYYMMDD_ace_swepam_1m.txt | ace-swepam-historic | ++------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ftp://ftp.swpc.noaa.gov/pub/indices/old_indices | YYYY_DSD.txt | sw-ssn-prelim, sw-f107-prelim, sw-flare-prelim, sw-sbfield-prelim | ++------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| https://kp.gfz-potsdam.de/app/json/?QUERY | Fadj_YYYY-MM.txt | sw-f107-now-adj | +| | Fobs_YYYY-MM.txt | sw-f107-now-obs | +| | Hp30_YYYY-MM.txt | sw-hpo-now-30min | +| | Hp60_YYYY-MM.txt | sw-hpo-now-60min | +| | SN_YYYY-MM.txt | sw-ssn-now | +| | ap30_YYYY-MM.txt | sw-apo-now-30min | +| | ap60_YYYY-MM.txt | sw-apo-now-60min | ++------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| https://datapub.gfz-potsdam.de/download/10.5880.Kp.0001/Kp_nowcast/ | Kp_nowYYYY.wdc | sw-ap-now, sw-cp-now, sw-kp-now | ++------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| https://datapub.gfz-potsdam.de/download/10.5880.Kp.0001/Kp_definitive/ | kp_defYYYY.wdc | sw-ap-def, sw-cp-def, sw-kp-def | ++------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| ftp://ftp.ngdc.noaa.gov/STP/GEOMAGNETIC_DATA/INDICES/DST | dstYYYY.txt | sw-dst-noaa | ++------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| https://lasp.colorado.edu/lisird/latis/dap/QUERY | f107_monthly_YYYY-MM.txt | sw-f107-historic | +| | mgii_composite_YYYY-MM.txt | sw-mgii-composite | +| | mgii_sorce_YYYY-MM-DD.txt | sw-mgii-sorce | ++------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| https://lasp.colorado.edu/space_weather/dsttemerin/ | ae_last_96_hrs.txt | sw-ae-lasp | +| | al_last_96_hrs.txt | sw-al-lasp | +| | au_last_96_hrs.txt | sw-au-lasp | +| | dst_last_96_hrs.txt | sw-dst-lasp | ++------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ From 99aeb5029cde353d5e742da51b4f71149ee944ab Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 17:36:00 -0400 Subject: [PATCH 134/171] TST: expand mock download tests Ensure all instruments are covered in the mock download tests. --- pysatSpaceWeather/tests/test_instruments.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index b77927f5..24070a1e 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -347,7 +347,8 @@ def teardown_method(self): del self.dkwargs, self.tempdir, self.saved_path return - @pytest.mark.parametrize("inst_dict", instruments['download']) + @pytest.mark.parametrize("inst_dict", instruments['download'] + + instruments['no_download']) def test_error_bad_dir(self, inst_dict): """Test IOError is raised for a bad mock-download directory. @@ -369,7 +370,8 @@ def test_error_bad_dir(self, inst_dict): input_args=[date], input_kwargs=self.dkwargs) return - @pytest.mark.parametrize("inst_dict", instruments['download']) + @pytest.mark.parametrize("inst_dict", instruments['download'] + + instruments['no_download']) def test_loginfo_missing_file(self, inst_dict, caplog): """Test log for info about a missing file when using mock downloads. @@ -395,7 +397,8 @@ def test_loginfo_missing_file(self, inst_dict, caplog): captured) return - @pytest.mark.parametrize("inst_dict", instruments['download']) + @pytest.mark.parametrize("inst_dict", instruments['download'] + + instruments['no_download']) def test_mock_download(self, inst_dict): """Test pysat's ability to process files downloaded by a user. From 944fc6d5aa9e0b3a2280a56e15b4673def240510 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 17:53:33 -0400 Subject: [PATCH 135/171] TST: added linkcheck_ignore Attempt at adding a linkcheck_ignore for the query links in the mock_download table. --- docs/conf.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index 49e13af9..da7df7f6 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -178,3 +178,8 @@ # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = {'https://docs.python.org/': None} + +# Links to ignore when checking for stability +linkcheck_ignore = [r'https://lasp.colorado.edu/space_weather/dsttemerin/', + r'https://lasp.colorado.edu/lisird/latis/dap/QUERY', + r'https://kp.gfz-potsdam.de/app/json/?QUERY'] From d983c319096b1752e861b95574c9c849134479b9 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 18:04:09 -0400 Subject: [PATCH 136/171] DOC: updated table formatting Fixed table formatting and unlinked remote locations that require queries/file additions. --- docs/examples/ex_mock_downloads.rst | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/docs/examples/ex_mock_downloads.rst b/docs/examples/ex_mock_downloads.rst index 11ed72d5..fb319e7a 100644 --- a/docs/examples/ex_mock_downloads.rst +++ b/docs/examples/ex_mock_downloads.rst @@ -40,28 +40,45 @@ data. See the GFZ and LISIRD methods to see how the queries are constructed. | Remote Location | Filename | Instrument(s) | +========================================================================+====================================+============================================================================================================================+ | https://services.swpc.noaa.gov/text/ | 3-day-geomag-forecast.txt | sw-ap-forecast, sw-kp-forecast, sw-stormprob-forecast | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | 3-day-solar-geomag-predictions.txt | sw-ap-preciction, sw-f107-forecast, sw-flare-prediction, sw-kp-preciction, sw-polarcap-prediction, sw-stormprob-prediction | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | 45-day-ap-forecast.txt | sw-f107-45day, sw-ap-45day | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | ace-epam.txt | ace-epam-realtime | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | ace-magnetometer.txt | ace-mag-realtime | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | ace-sis.txt | ace-sis-realtime | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | ace-swepam.txt | ace-swepam-realtime | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | daily-geomagnetic-indices.txt | sw-ap-recent, sw-kp-recent | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | daily-solar-indices.txt | sw-ssn-daily, sw-f107-daily, sw-flare-daily, sw-sbfield-daily | +------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | https://sohoftp.nascom.nasa.gov/sdb/ace/daily/ | YYYYMMDD_ace_epam_5m.txt | ace-epam-historic | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | YYYYMMDD_ace_mag_1m.txt | ace-mag-historic | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | YYYYMMDD_ace_sis_5m.txt | ace-sis-historic | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | YYYYMMDD_ace_swepam_1m.txt | ace-swepam-historic | +------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | ftp://ftp.swpc.noaa.gov/pub/indices/old_indices | YYYY_DSD.txt | sw-ssn-prelim, sw-f107-prelim, sw-flare-prelim, sw-sbfield-prelim | +------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ -| https://kp.gfz-potsdam.de/app/json/?QUERY | Fadj_YYYY-MM.txt | sw-f107-now-adj | +| \https://kp.gfz-potsdam.de/app/json/?QUERY | Fadj_YYYY-MM.txt | sw-f107-now-adj | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | Fobs_YYYY-MM.txt | sw-f107-now-obs | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | Hp30_YYYY-MM.txt | sw-hpo-now-30min | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | Hp60_YYYY-MM.txt | sw-hpo-now-60min | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | SN_YYYY-MM.txt | sw-ssn-now | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | ap30_YYYY-MM.txt | sw-apo-now-30min | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | ap60_YYYY-MM.txt | sw-apo-now-60min | +------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | https://datapub.gfz-potsdam.de/download/10.5880.Kp.0001/Kp_nowcast/ | Kp_nowYYYY.wdc | sw-ap-now, sw-cp-now, sw-kp-now | @@ -70,12 +87,17 @@ data. See the GFZ and LISIRD methods to see how the queries are constructed. +------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | ftp://ftp.ngdc.noaa.gov/STP/GEOMAGNETIC_DATA/INDICES/DST | dstYYYY.txt | sw-dst-noaa | +------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ -| https://lasp.colorado.edu/lisird/latis/dap/QUERY | f107_monthly_YYYY-MM.txt | sw-f107-historic | +| \https://lasp.colorado.edu/lisird/latis/dap/QUERY | f107_monthly_YYYY-MM.txt | sw-f107-historic | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | mgii_composite_YYYY-MM.txt | sw-mgii-composite | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | mgii_sorce_YYYY-MM-DD.txt | sw-mgii-sorce | +------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ -| https://lasp.colorado.edu/space_weather/dsttemerin/ | ae_last_96_hrs.txt | sw-ae-lasp | +| \https://lasp.colorado.edu/space_weather/dsttemerin/ | ae_last_96_hrs.txt | sw-ae-lasp | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | al_last_96_hrs.txt | sw-al-lasp | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | au_last_96_hrs.txt | sw-au-lasp | ++ +------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ | | dst_last_96_hrs.txt | sw-dst-lasp | +------------------------------------------------------------------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ From 39ccadf7fa7516b11fbaf13b69ee4ded8fc5964a Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 1 Nov 2023 18:08:54 -0400 Subject: [PATCH 137/171] DOC: update linkcheck regrex Use a wildcard for QUERY links. --- docs/conf.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index da7df7f6..975bccdd 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -180,6 +180,5 @@ intersphinx_mapping = {'https://docs.python.org/': None} # Links to ignore when checking for stability -linkcheck_ignore = [r'https://lasp.colorado.edu/space_weather/dsttemerin/', - r'https://lasp.colorado.edu/lisird/latis/dap/QUERY', - r'https://kp.gfz-potsdam.de/app/json/?QUERY'] +linkcheck_ignore = ['https://lasp.colorado.edu/space_weather/dsttemerin/', + 'https://*QUERY'] From eb36c5e67878467d675b8d32303e4d313618d10a Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 27 Nov 2023 09:40:10 -0500 Subject: [PATCH 138/171] TST: updated parameterize Updated the parameterize input and added a TODO statement. --- pysatSpaceWeather/tests/test_instruments.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index 24070a1e..9f4f9502 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -347,8 +347,8 @@ def teardown_method(self): del self.dkwargs, self.tempdir, self.saved_path return - @pytest.mark.parametrize("inst_dict", instruments['download'] - + instruments['no_download']) + # TODO(#134): update 'download' key when possible + @pytest.mark.parametrize("inst_dict", instruments['download']) def test_error_bad_dir(self, inst_dict): """Test IOError is raised for a bad mock-download directory. @@ -370,8 +370,8 @@ def test_error_bad_dir(self, inst_dict): input_args=[date], input_kwargs=self.dkwargs) return - @pytest.mark.parametrize("inst_dict", instruments['download'] - + instruments['no_download']) + # TODO(#134): update 'download' key when possible + @pytest.mark.parametrize("inst_dict", instruments['download']) def test_loginfo_missing_file(self, inst_dict, caplog): """Test log for info about a missing file when using mock downloads. @@ -397,8 +397,8 @@ def test_loginfo_missing_file(self, inst_dict, caplog): captured) return - @pytest.mark.parametrize("inst_dict", instruments['download'] - + instruments['no_download']) + # TODO(#134): update 'download' key when possible + @pytest.mark.parametrize("inst_dict", instruments['download']) def test_mock_download(self, inst_dict): """Test pysat's ability to process files downloaded by a user. From 3ccc9a22ebdcc545b2798287a20e82ee3393b344 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Mon, 27 Nov 2023 10:02:33 -0500 Subject: [PATCH 139/171] DOC: updated docstrings Updated the description of `mock_download_dir` in the docstrings. --- pysatSpaceWeather/instruments/methods/ace.py | 5 ++-- .../instruments/methods/general.py | 4 ++- pysatSpaceWeather/instruments/methods/gfz.py | 11 +++---- pysatSpaceWeather/instruments/methods/lasp.py | 5 ++-- .../instruments/methods/lisird.py | 5 ++-- pysatSpaceWeather/instruments/methods/swpc.py | 30 +++++++++++-------- pysatSpaceWeather/instruments/sw_ae.py | 5 ++-- pysatSpaceWeather/instruments/sw_al.py | 5 ++-- pysatSpaceWeather/instruments/sw_ap.py | 5 ++-- pysatSpaceWeather/instruments/sw_apo.py | 5 ++-- pysatSpaceWeather/instruments/sw_au.py | 5 ++-- pysatSpaceWeather/instruments/sw_dst.py | 6 +++- pysatSpaceWeather/instruments/sw_f107.py | 5 ++-- pysatSpaceWeather/instruments/sw_flare.py | 5 ++-- pysatSpaceWeather/instruments/sw_hpo.py | 5 ++-- pysatSpaceWeather/instruments/sw_kp.py | 5 ++-- pysatSpaceWeather/instruments/sw_mgii.py | 5 ++-- pysatSpaceWeather/instruments/sw_polarcap.py | 5 ++-- pysatSpaceWeather/instruments/sw_sbfield.py | 5 ++-- pysatSpaceWeather/instruments/sw_ssn.py | 5 ++-- pysatSpaceWeather/instruments/sw_stormprob.py | 5 ++-- 21 files changed, 83 insertions(+), 53 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index c5dcf76f..ab180acc 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -177,8 +177,9 @@ def download(date_array, name, tag='', inst_id='', data_path='', now=None, Current universal time, if None this is determined for each download. (default=None) mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/methods/general.py b/pysatSpaceWeather/instruments/methods/general.py index f2f0e8c1..eea99d2e 100644 --- a/pysatSpaceWeather/instruments/methods/general.py +++ b/pysatSpaceWeather/instruments/methods/general.py @@ -80,7 +80,9 @@ def get_local_or_remote_text(url, mock_download_dir, filename): url : str Remote URL where file is located mock_download_dir : str or NoneType - If not None, directory where file is located + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Returns ------- diff --git a/pysatSpaceWeather/instruments/methods/gfz.py b/pysatSpaceWeather/instruments/methods/gfz.py index b1376919..6ff684f5 100644 --- a/pysatSpaceWeather/instruments/methods/gfz.py +++ b/pysatSpaceWeather/instruments/methods/gfz.py @@ -80,9 +80,9 @@ def json_downloads(date_array, data_path, local_file_prefix, local_date_fmt, If true, selects only the definitive data, otherwise also includes nowcast data (default=False) mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - (following the local file prefix and date format) as if they were - downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date (following the local + file prefix and date format) as if they were downloaded (default=None) Raises ------ @@ -188,8 +188,9 @@ def kp_ap_cp_download(platform, name, date_array, tag, inst_id, data_path, data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date (following the local + file prefix and date format) as if they were downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/methods/lasp.py b/pysatSpaceWeather/instruments/methods/lasp.py index 0b4fcca8..c8688d44 100644 --- a/pysatSpaceWeather/instruments/methods/lasp.py +++ b/pysatSpaceWeather/instruments/methods/lasp.py @@ -22,8 +22,9 @@ def prediction_downloads(name, tag, data_path, mock_download_dir=None): data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date (following the local + file prefix and date format) as if they were downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/methods/lisird.py b/pysatSpaceWeather/instruments/methods/lisird.py index 88264a5c..9e444914 100644 --- a/pysatSpaceWeather/instruments/methods/lisird.py +++ b/pysatSpaceWeather/instruments/methods/lisird.py @@ -117,8 +117,9 @@ def download(date_array, data_path, local_file_prefix, local_date_fmt, Dict of fill values to replace with NaN by variable name or None to leave alone (default=None) mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date (following the local + file prefix and date format) as if they were downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index 21a020c4..f6c58569 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -41,8 +41,9 @@ def daily_dsd_download(name, today, data_path, mock_download_dir=None): data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ @@ -106,8 +107,9 @@ def old_indices_dsd_download(name, date_array, data_path, local_files, today, today : dt.datetime Datetime for current day mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ @@ -394,8 +396,9 @@ def solar_geomag_predictions_download(name, date_array, data_path, data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ @@ -570,8 +573,9 @@ def geomag_forecast_download(name, date_array, data_path, data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ @@ -697,8 +701,9 @@ def kp_ap_recent_download(name, date_array, data_path, mock_download_dir=None): data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ @@ -810,8 +815,9 @@ def recent_ap_f107_download(name, date_array, data_path, data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_ae.py b/pysatSpaceWeather/instruments/sw_ae.py index b4297484..aa907273 100644 --- a/pysatSpaceWeather/instruments/sw_ae.py +++ b/pysatSpaceWeather/instruments/sw_ae.py @@ -153,8 +153,9 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_al.py b/pysatSpaceWeather/instruments/sw_al.py index 1173bd5f..012614af 100644 --- a/pysatSpaceWeather/instruments/sw_al.py +++ b/pysatSpaceWeather/instruments/sw_al.py @@ -153,8 +153,9 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_ap.py b/pysatSpaceWeather/instruments/sw_ap.py index ee061931..620a3aac 100644 --- a/pysatSpaceWeather/instruments/sw_ap.py +++ b/pysatSpaceWeather/instruments/sw_ap.py @@ -228,8 +228,9 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Note ---- diff --git a/pysatSpaceWeather/instruments/sw_apo.py b/pysatSpaceWeather/instruments/sw_apo.py index d192768c..c2a1a25a 100644 --- a/pysatSpaceWeather/instruments/sw_apo.py +++ b/pysatSpaceWeather/instruments/sw_apo.py @@ -182,8 +182,9 @@ def download(date_array, tag, inst_id, data_path, update_files=False, update_files : bool Re-download data for files that already exist if True (default=False) mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Note ---- diff --git a/pysatSpaceWeather/instruments/sw_au.py b/pysatSpaceWeather/instruments/sw_au.py index 50fa351f..e759c179 100644 --- a/pysatSpaceWeather/instruments/sw_au.py +++ b/pysatSpaceWeather/instruments/sw_au.py @@ -153,8 +153,9 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_dst.py b/pysatSpaceWeather/instruments/sw_dst.py index fbafcc1c..ed64a664 100644 --- a/pysatSpaceWeather/instruments/sw_dst.py +++ b/pysatSpaceWeather/instruments/sw_dst.py @@ -254,7 +254,11 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): data_path : str Path to data directory. If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + as if they were downloaded + mock_download_dir : str or NoneType + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index 3a262241..ffd54136 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -375,8 +375,9 @@ def download(date_array, tag, inst_id, data_path, update_files=False, update_files : bool Re-download data for files that already exist if True (default=False) mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_flare.py b/pysatSpaceWeather/instruments/sw_flare.py index 38ebe72d..e510811d 100644 --- a/pysatSpaceWeather/instruments/sw_flare.py +++ b/pysatSpaceWeather/instruments/sw_flare.py @@ -327,8 +327,9 @@ def download(date_array, tag, inst_id, data_path, update_files=False, update_files : bool Re-download data for files that already exist if True (default=False) mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_hpo.py b/pysatSpaceWeather/instruments/sw_hpo.py index 44ab971a..d0c822bc 100644 --- a/pysatSpaceWeather/instruments/sw_hpo.py +++ b/pysatSpaceWeather/instruments/sw_hpo.py @@ -181,8 +181,9 @@ def download(date_array, tag, inst_id, data_path, update_files=False, update_files : bool Re-download data for files that already exist if True (default=False) mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Note ---- diff --git a/pysatSpaceWeather/instruments/sw_kp.py b/pysatSpaceWeather/instruments/sw_kp.py index e060b3c9..13b6a13e 100644 --- a/pysatSpaceWeather/instruments/sw_kp.py +++ b/pysatSpaceWeather/instruments/sw_kp.py @@ -380,8 +380,9 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_mgii.py b/pysatSpaceWeather/instruments/sw_mgii.py index a8900f8a..9379c9b3 100644 --- a/pysatSpaceWeather/instruments/sw_mgii.py +++ b/pysatSpaceWeather/instruments/sw_mgii.py @@ -269,8 +269,9 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_polarcap.py b/pysatSpaceWeather/instruments/sw_polarcap.py index 398d0ec8..0db8f0f3 100644 --- a/pysatSpaceWeather/instruments/sw_polarcap.py +++ b/pysatSpaceWeather/instruments/sw_polarcap.py @@ -166,8 +166,9 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_sbfield.py b/pysatSpaceWeather/instruments/sw_sbfield.py index d17be17a..04a89c3b 100644 --- a/pysatSpaceWeather/instruments/sw_sbfield.py +++ b/pysatSpaceWeather/instruments/sw_sbfield.py @@ -241,8 +241,9 @@ def download(date_array, tag, inst_id, data_path, update_files=False, update_files : bool Re-download data for files that already exist if True (default=False) mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py index 81079eb9..6ecfd378 100644 --- a/pysatSpaceWeather/instruments/sw_ssn.py +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -277,8 +277,9 @@ def download(date_array, tag, inst_id, data_path, update_files=False, update_files : bool Re-download data for files that already exist if True (default=False) mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_stormprob.py b/pysatSpaceWeather/instruments/sw_stormprob.py index d91ea2d9..0fef92c9 100644 --- a/pysatSpaceWeather/instruments/sw_stormprob.py +++ b/pysatSpaceWeather/instruments/sw_stormprob.py @@ -167,8 +167,9 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): data_path : str Path to data directory. mock_download_dir : str or NoneType - If not None, will process any files with the correct name and date - as if they were downloaded (default=None) + Local directory with downloaded files or None. If not None, will + process any files with the correct name and date as if they were + downloaded (default=None) Raises ------ From b63573083708a897c31f6cbb89b94b50f73a29b8 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 27 Nov 2023 13:08:52 -0500 Subject: [PATCH 140/171] TST: added coveralls fix Changed coveralls to run in parallel. --- .github/workflows/main.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ed513fd3..6d132627 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -75,4 +75,17 @@ jobs: - name: Publish results to coveralls env: GITHUB_TOKEN: ${{ secrets.github_token }} - run: coveralls --rcfile=setup.cfg --service=github + COVERALLS_PARALLEL: true + run: coveralls --rcfile=pyproject.toml --service=github + + finish: + name: Finish Coverage Analysis + needs: build + runs-on: ubuntu-latest + steps: + - name: Coveralls Finished + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + pip install --upgrade coveralls + coveralls --service=github --finish From 96b020fd25a4e81d0a073a3f0f562de0d875ae8a Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Fri, 1 Dec 2023 19:14:52 -0500 Subject: [PATCH 141/171] DOC: update instrument headers Update the instrument headers to include license, reference, and pub release information. --- pysatSpaceWeather/instruments/ace_epam.py | 11 ++++++++++- pysatSpaceWeather/instruments/ace_mag.py | 11 ++++++++++- pysatSpaceWeather/instruments/ace_sis.py | 11 ++++++++++- pysatSpaceWeather/instruments/ace_swepam.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_ae.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_al.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_ap.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_apo.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_au.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_cp.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_dst.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_f107.py | 4 ++++ pysatSpaceWeather/instruments/sw_flare.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_hpo.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_kp.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_mgii.py | 4 ++++ pysatSpaceWeather/instruments/sw_polarcap.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_sbfield.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_ssn.py | 11 ++++++++++- pysatSpaceWeather/instruments/sw_stormprob.py | 11 ++++++++++- 20 files changed, 188 insertions(+), 18 deletions(-) diff --git a/pysatSpaceWeather/instruments/ace_epam.py b/pysatSpaceWeather/instruments/ace_epam.py index 40ddf5dd..171e069d 100644 --- a/pysatSpaceWeather/instruments/ace_epam.py +++ b/pysatSpaceWeather/instruments/ace_epam.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports ACE Electron, Proton, and Alpha Monitor data. Properties diff --git a/pysatSpaceWeather/instruments/ace_mag.py b/pysatSpaceWeather/instruments/ace_mag.py index cfccde8c..f8529708 100644 --- a/pysatSpaceWeather/instruments/ace_mag.py +++ b/pysatSpaceWeather/instruments/ace_mag.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports ACE Magnetometer data. Properties diff --git a/pysatSpaceWeather/instruments/ace_sis.py b/pysatSpaceWeather/instruments/ace_sis.py index 32147ac7..1c8a5a7c 100644 --- a/pysatSpaceWeather/instruments/ace_sis.py +++ b/pysatSpaceWeather/instruments/ace_sis.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports ACE Solar Isotope Spectrometer data. Properties diff --git a/pysatSpaceWeather/instruments/ace_swepam.py b/pysatSpaceWeather/instruments/ace_swepam.py index d3178f5d..3388d6d2 100644 --- a/pysatSpaceWeather/instruments/ace_swepam.py +++ b/pysatSpaceWeather/instruments/ace_swepam.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports ACE Solar Wind Electron Proton Alpha Monitor data. Properties diff --git a/pysatSpaceWeather/instruments/sw_ae.py b/pysatSpaceWeather/instruments/sw_ae.py index aa907273..a5e63b23 100644 --- a/pysatSpaceWeather/instruments/sw_ae.py +++ b/pysatSpaceWeather/instruments/sw_ae.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports the auroral electrojet AE values. Properties diff --git a/pysatSpaceWeather/instruments/sw_al.py b/pysatSpaceWeather/instruments/sw_al.py index 012614af..eff8c377 100644 --- a/pysatSpaceWeather/instruments/sw_al.py +++ b/pysatSpaceWeather/instruments/sw_al.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports the auroral electrojet AL values. Properties diff --git a/pysatSpaceWeather/instruments/sw_ap.py b/pysatSpaceWeather/instruments/sw_ap.py index 620a3aac..dc26c129 100644 --- a/pysatSpaceWeather/instruments/sw_ap.py +++ b/pysatSpaceWeather/instruments/sw_ap.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports ap index values. Properties diff --git a/pysatSpaceWeather/instruments/sw_apo.py b/pysatSpaceWeather/instruments/sw_apo.py index c2a1a25a..0357bfb1 100644 --- a/pysatSpaceWeather/instruments/sw_apo.py +++ b/pysatSpaceWeather/instruments/sw_apo.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports apo index values. Properties diff --git a/pysatSpaceWeather/instruments/sw_au.py b/pysatSpaceWeather/instruments/sw_au.py index e759c179..392fca5f 100644 --- a/pysatSpaceWeather/instruments/sw_au.py +++ b/pysatSpaceWeather/instruments/sw_au.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports the auroral electrojet AU values. Properties diff --git a/pysatSpaceWeather/instruments/sw_cp.py b/pysatSpaceWeather/instruments/sw_cp.py index 1bd629b6..f2788bf6 100644 --- a/pysatSpaceWeather/instruments/sw_cp.py +++ b/pysatSpaceWeather/instruments/sw_cp.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports Cp index values. Properties diff --git a/pysatSpaceWeather/instruments/sw_dst.py b/pysatSpaceWeather/instruments/sw_dst.py index ed64a664..a9325b36 100644 --- a/pysatSpaceWeather/instruments/sw_dst.py +++ b/pysatSpaceWeather/instruments/sw_dst.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports Dst values. Downloads data from NGDC. Properties diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index ffd54136..92e33e42 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -3,6 +3,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports F10.7 index values. diff --git a/pysatSpaceWeather/instruments/sw_flare.py b/pysatSpaceWeather/instruments/sw_flare.py index e510811d..83d3da45 100644 --- a/pysatSpaceWeather/instruments/sw_flare.py +++ b/pysatSpaceWeather/instruments/sw_flare.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports solar flare values. Properties diff --git a/pysatSpaceWeather/instruments/sw_hpo.py b/pysatSpaceWeather/instruments/sw_hpo.py index d0c822bc..758c4221 100644 --- a/pysatSpaceWeather/instruments/sw_hpo.py +++ b/pysatSpaceWeather/instruments/sw_hpo.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports Hpo index values. Properties diff --git a/pysatSpaceWeather/instruments/sw_kp.py b/pysatSpaceWeather/instruments/sw_kp.py index 13b6a13e..76aadb2f 100644 --- a/pysatSpaceWeather/instruments/sw_kp.py +++ b/pysatSpaceWeather/instruments/sw_kp.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports Kp index values. Properties diff --git a/pysatSpaceWeather/instruments/sw_mgii.py b/pysatSpaceWeather/instruments/sw_mgii.py index 9379c9b3..a9e2831e 100644 --- a/pysatSpaceWeather/instruments/sw_mgii.py +++ b/pysatSpaceWeather/instruments/sw_mgii.py @@ -3,6 +3,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports the MgII core-to-wing ratio index. diff --git a/pysatSpaceWeather/instruments/sw_polarcap.py b/pysatSpaceWeather/instruments/sw_polarcap.py index 0db8f0f3..e55abd7c 100644 --- a/pysatSpaceWeather/instruments/sw_polarcap.py +++ b/pysatSpaceWeather/instruments/sw_polarcap.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports polar cap indexes. Properties diff --git a/pysatSpaceWeather/instruments/sw_sbfield.py b/pysatSpaceWeather/instruments/sw_sbfield.py index 04a89c3b..c1361ed9 100644 --- a/pysatSpaceWeather/instruments/sw_sbfield.py +++ b/pysatSpaceWeather/instruments/sw_sbfield.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports solar magnetic field values. Properties diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py index 6ecfd378..c70d7f74 100644 --- a/pysatSpaceWeather/instruments/sw_ssn.py +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports Sunspot Number (SSN) and related indices. Properties diff --git a/pysatSpaceWeather/instruments/sw_stormprob.py b/pysatSpaceWeather/instruments/sw_stormprob.py index 0fef92c9..345866d0 100644 --- a/pysatSpaceWeather/instruments/sw_stormprob.py +++ b/pysatSpaceWeather/instruments/sw_stormprob.py @@ -1,4 +1,13 @@ -# -*- coding: utf-8 -*- +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Supports storm probabilities. Properties From a20187db4642ccebc40bf5141119845360b20369 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Fri, 1 Dec 2023 19:15:29 -0500 Subject: [PATCH 142/171] DOC: update method headers Update the instrument method headers to include license, reference, and pub release information. --- pysatSpaceWeather/instruments/methods/ace.py | 4 ++++ .../instruments/methods/auroral_electrojet.py | 9 +++++++++ pysatSpaceWeather/instruments/methods/dst.py | 9 +++++++++ pysatSpaceWeather/instruments/methods/f107.py | 4 ++++ pysatSpaceWeather/instruments/methods/general.py | 9 +++++++++ pysatSpaceWeather/instruments/methods/gfz.py | 4 ++++ pysatSpaceWeather/instruments/methods/kp_ap.py | 4 ++++ pysatSpaceWeather/instruments/methods/lasp.py | 9 +++++++++ pysatSpaceWeather/instruments/methods/lisird.py | 4 ++++ pysatSpaceWeather/instruments/methods/swpc.py | 4 ++++ 10 files changed, 60 insertions(+) diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index ab180acc..4f52ed71 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -3,6 +3,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides general routines for the ACE space weather instruments.""" diff --git a/pysatSpaceWeather/instruments/methods/auroral_electrojet.py b/pysatSpaceWeather/instruments/methods/auroral_electrojet.py index 62835441..91864507 100644 --- a/pysatSpaceWeather/instruments/methods/auroral_electrojet.py +++ b/pysatSpaceWeather/instruments/methods/auroral_electrojet.py @@ -1,4 +1,13 @@ +#!/usr/bin/env python # -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Provides support routines for auroral electrojet indices.""" diff --git a/pysatSpaceWeather/instruments/methods/dst.py b/pysatSpaceWeather/instruments/methods/dst.py index 0eee65ae..ac062a51 100644 --- a/pysatSpaceWeather/instruments/methods/dst.py +++ b/pysatSpaceWeather/instruments/methods/dst.py @@ -1,4 +1,13 @@ +#!/usr/bin/env python # -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Provides default routines for Dst.""" diff --git a/pysatSpaceWeather/instruments/methods/f107.py b/pysatSpaceWeather/instruments/methods/f107.py index 775cef7d..1e5278d1 100644 --- a/pysatSpaceWeather/instruments/methods/f107.py +++ b/pysatSpaceWeather/instruments/methods/f107.py @@ -3,6 +3,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Routines for the F10.7 solar index.""" diff --git a/pysatSpaceWeather/instruments/methods/general.py b/pysatSpaceWeather/instruments/methods/general.py index eea99d2e..9bdff66b 100644 --- a/pysatSpaceWeather/instruments/methods/general.py +++ b/pysatSpaceWeather/instruments/methods/general.py @@ -1,4 +1,13 @@ +#!/usr/bin/env python # -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Provides routines that support general space weather instruments.""" import importlib diff --git a/pysatSpaceWeather/instruments/methods/gfz.py b/pysatSpaceWeather/instruments/methods/gfz.py index 6ff684f5..53ca3e35 100644 --- a/pysatSpaceWeather/instruments/methods/gfz.py +++ b/pysatSpaceWeather/instruments/methods/gfz.py @@ -3,6 +3,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides routines that support GFZ space weather instruments.""" diff --git a/pysatSpaceWeather/instruments/methods/kp_ap.py b/pysatSpaceWeather/instruments/methods/kp_ap.py index b6498bbf..8454ffdb 100644 --- a/pysatSpaceWeather/instruments/methods/kp_ap.py +++ b/pysatSpaceWeather/instruments/methods/kp_ap.py @@ -3,6 +3,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides routines to support the geomagnetic indices, Kp and Ap.""" diff --git a/pysatSpaceWeather/instruments/methods/lasp.py b/pysatSpaceWeather/instruments/methods/lasp.py index c8688d44..98fdd709 100644 --- a/pysatSpaceWeather/instruments/methods/lasp.py +++ b/pysatSpaceWeather/instruments/methods/lasp.py @@ -1,4 +1,13 @@ +#!/usr/bin/env python # -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Provides support routines for LASP data.""" import datetime as dt diff --git a/pysatSpaceWeather/instruments/methods/lisird.py b/pysatSpaceWeather/instruments/methods/lisird.py index 9e444914..48e819a5 100644 --- a/pysatSpaceWeather/instruments/methods/lisird.py +++ b/pysatSpaceWeather/instruments/methods/lisird.py @@ -3,6 +3,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides support functions for the LASP LISIRD data base.""" diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index f6c58569..f5df5492 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -3,6 +3,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides routines that support SWPC space weather instruments.""" From bd3d34a7c155260a5abb9e235964366697965dcb Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Fri, 1 Dec 2023 19:15:46 -0500 Subject: [PATCH 143/171] DOC: update test headers Update the test file headers to include license, reference, and pub release information. --- pysatSpaceWeather/tests/test_instruments.py | 10 ++++++++++ pysatSpaceWeather/tests/test_methods_ace.py | 4 ++++ pysatSpaceWeather/tests/test_methods_ae.py | 4 ++++ pysatSpaceWeather/tests/test_methods_f107.py | 4 ++++ pysatSpaceWeather/tests/test_methods_general.py | 4 ++++ pysatSpaceWeather/tests/test_methods_gfz.py | 4 ++++ pysatSpaceWeather/tests/test_methods_kp.py | 4 ++++ pysatSpaceWeather/tests/test_methods_lisird.py | 4 ++++ 8 files changed, 38 insertions(+) diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index 9f4f9502..5c572cb5 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -1,3 +1,13 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*-. +# Full license can be found in License.md +# Full author list can be found in .zenodo.json file +# DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. +# ---------------------------------------------------------------------------- """Unit and Integration Tests for each instrument module. Note diff --git a/pysatSpaceWeather/tests/test_methods_ace.py b/pysatSpaceWeather/tests/test_methods_ace.py index b84b7bdd..52f982df 100644 --- a/pysatSpaceWeather/tests/test_methods_ace.py +++ b/pysatSpaceWeather/tests/test_methods_ace.py @@ -2,6 +2,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Integration and unit test suite for ACE methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_ae.py b/pysatSpaceWeather/tests/test_methods_ae.py index 6ce68847..d9339e5b 100644 --- a/pysatSpaceWeather/tests/test_methods_ae.py +++ b/pysatSpaceWeather/tests/test_methods_ae.py @@ -2,6 +2,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Integration and unit test suite for AE methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_f107.py b/pysatSpaceWeather/tests/test_methods_f107.py index 70c98451..d35910c2 100644 --- a/pysatSpaceWeather/tests/test_methods_f107.py +++ b/pysatSpaceWeather/tests/test_methods_f107.py @@ -2,6 +2,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Test suite for F10.7 methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_general.py b/pysatSpaceWeather/tests/test_methods_general.py index 031ec5c5..da244760 100644 --- a/pysatSpaceWeather/tests/test_methods_general.py +++ b/pysatSpaceWeather/tests/test_methods_general.py @@ -2,6 +2,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Integration and unit test suite for ACE methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_gfz.py b/pysatSpaceWeather/tests/test_methods_gfz.py index 87436aaf..cae7b50a 100644 --- a/pysatSpaceWeather/tests/test_methods_gfz.py +++ b/pysatSpaceWeather/tests/test_methods_gfz.py @@ -2,6 +2,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Integration and unit test suite for ACE methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_kp.py b/pysatSpaceWeather/tests/test_methods_kp.py index 88b4b9aa..8cfbacf5 100644 --- a/pysatSpaceWeather/tests/test_methods_kp.py +++ b/pysatSpaceWeather/tests/test_methods_kp.py @@ -2,6 +2,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Test suite for Kp and Ap methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_lisird.py b/pysatSpaceWeather/tests/test_methods_lisird.py index 7ea36189..77018a18 100644 --- a/pysatSpaceWeather/tests/test_methods_lisird.py +++ b/pysatSpaceWeather/tests/test_methods_lisird.py @@ -3,6 +3,10 @@ # Full license can be found in License.md # Full author list can be found in .zenodo.json file # DOI:10.5281/zenodo.3986138 +# +# DISTRIBUTION STATEMENT A: Approved for public release. Distribution is +# unlimited. +# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Tests for the LISIRD functions.""" From 818260fe36f0de0e9ae90ed7891e4ea1fc678c7a Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Fri, 1 Dec 2023 19:16:54 -0500 Subject: [PATCH 144/171] DOC: update changelog Added a summary of changes to the changelog. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2428eebd..c2cc5e11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). * Changed F10.7 daily test day to ensure new pysat padding tests work * Removed try/except loop that was a fix for pysat < 3.1.0 * Updated 'use_header' kwarg use for pysat 3.2.0 changes + * Updated code headers to include license, reference, and pub release info [0.0.10] - 2023-06-01 --------------------- From 0c83ed99dd06e6513a274025b66b49361f6e61c8 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 9 Jan 2024 14:15:00 -0500 Subject: [PATCH 145/171] DOC: added pub release to docs Added a pub release statement to the online docs. --- docs/index.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/index.rst b/docs/index.rst index 6b5cb9dc..db161e38 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -21,6 +21,13 @@ indices as pysat.Instrument objects. history.rst +.. admonition:: DISTRIBUTION STATEMENT A: Approved for public release. + Distribution is unlimited. + + This work was supported by the Office of Naval Research. + + + Indices and tables ================== From cade857a5de0f5c80fea705220894e0536ce7911 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 9 Jan 2024 14:15:16 -0500 Subject: [PATCH 146/171] REL: updated version number Updated the version number in preparation for the release. --- docs/conf.py | 2 +- pyproject.toml | 4 ++-- setup.cfg | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 975bccdd..e35e7b25 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -71,7 +71,7 @@ version = info.project['version'].base_version # The full version, including alpha/beta/rc tags. -release = '{:s}-alpha'.format(version) +release = '{:s}-beta'.format(version) # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/pyproject.toml b/pyproject.toml index badab311..aac7c139 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "pysatSpaceWeather" -version = "0.0.10" +version = "0.1.0" description = 'pysat support for Space Weather Indices' readme = "README.md" requires-python = ">=3.6" @@ -13,7 +13,7 @@ authors = [ {name = "Angeline Burrell", email = "pysat.developers@gmail.com"} ] classifiers = [ - "Development Status :: 3 - Alpha", + "Development Status :: 4 - Beta", "Topic :: Scientific/Engineering :: Astronomy", "Topic :: Scientific/Engineering :: Physics", "Topic :: Scientific/Engineering :: Atmospheric Science", diff --git a/setup.cfg b/setup.cfg index a0a8a7ce..3d5d145f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = pysatSpaceWeather -version = 0.0.10 +version = 0.1.0 url = https://github.com/pysat/pysatSpaceWeather [flake8] From 6a357ef7a8461946a90c88060c2e08d2aa91c109 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 16 Jan 2024 11:55:21 -0500 Subject: [PATCH 147/171] MAINT: updated Instrument kwargs Updated Instrument kwargs to apply to all supported pysat versions. --- pysatSpaceWeather/instruments/methods/kp_ap.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/kp_ap.py b/pysatSpaceWeather/instruments/methods/kp_ap.py index 8454ffdb..a4fe1d96 100644 --- a/pysatSpaceWeather/instruments/methods/kp_ap.py +++ b/pysatSpaceWeather/instruments/methods/kp_ap.py @@ -588,12 +588,19 @@ def combine_kp(standard_inst=None, recent_inst=None, forecast_inst=None, "provide starting and ending times"))) # Initialize the output instrument - kp_inst = pysat.Instrument(labels=all_inst[0].meta_labels) + # TODO(#136): Remove if/else when pysat is 3.2.0+ + if hasattr(all_inst[0], "meta_labels"): + meta_kwargs = {"labels": all_inst[0].meta_labels} + kp_inst = pysat.Instrument(labels=all_inst[0].meta_labels) + else: + meta_kwargs = all_inst[0].meta_kwargs + kp_inst = pysat.Instrument(meta_kwargs=meta_kwargs) + kp_inst.inst_module = pysat_sw.instruments.sw_kp kp_inst.tag = tag kp_inst.date = start kp_inst.doy = np.int64(start.strftime("%j")) - kp_inst.meta = pysat.Meta(labels=kp_inst.meta_labels) + kp_inst.meta = pysat.Meta(**meta_kwargs) initialize_kp_metadata(kp_inst.meta, 'Kp', fill_val=fill_val) kp_times = list() From 3a035cc85c29a402a235ac1a6423c60ba0e19159 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 16 Jan 2024 11:57:19 -0500 Subject: [PATCH 148/171] MAINT: removed deprecation warnings Removed deprecation warnings for the new instruments and the supporting tests. --- pysatSpaceWeather/instruments/sw_f107.py | 20 ------ pysatSpaceWeather/instruments/sw_kp.py | 10 --- pysatSpaceWeather/tests/test_instruments.py | 71 +-------------------- 3 files changed, 1 insertion(+), 100 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index 92e33e42..3818989b 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -136,26 +136,6 @@ def init(self): if self.tag == 'historic': self.lasp_stime = lasp_stime - # Raise Deprecation warnings - if self.tag in ['daily', 'prelim']: - # This tag loads more than just F10.7 data, and the behaviour will be - # deprecated in v0.1.0 - warnings.warn("".join(["Upcoming structural changes will prevent ", - "Instruments from loading multiple data sets in", - " one Instrument. In version 0.1.0+ the SSN, ", - "solar flare, and solar mean field data will be", - " accessable from the `sw_ssn`, `sw_flare`, ", - "and `sw_sbfield` Instruments."]), - DeprecationWarning, stacklevel=2) - elif self.tag == '45day': - # This tag loads more than just F10.7 data, and the behaviour will be - # deprecated in v0.1.0 - warnings.warn("".join(["Upcoming structural changes will prevent ", - "Instruments from loading multiple data sets in", - " one Instrument. In version 0.1.0+ the Ap will", - " be accessable from the `sw_ap` Instrument."]), - DeprecationWarning, stacklevel=2) - return diff --git a/pysatSpaceWeather/instruments/sw_kp.py b/pysatSpaceWeather/instruments/sw_kp.py index 76aadb2f..25d307aa 100644 --- a/pysatSpaceWeather/instruments/sw_kp.py +++ b/pysatSpaceWeather/instruments/sw_kp.py @@ -126,16 +126,6 @@ def init(self): self.references = methods.kp_ap.references(self.name, self.tag) pysat.logger.info(self.acknowledgements) - if self.tag in ["def", "now"]: - # This tag loads more than just Kp data, and the behaviour will be - # deprecated in v0.1.0 - warnings.warn("".join(["Upcoming structural changes will prevent ", - "Instruments from loading multiple data sets ", - "in one Instrument. In version 0.1.0+ the Ap ", - "and Cp data will be accessable from the ", - "`sw_ap` and `sw_cp` Instruments."]), - DeprecationWarning, stacklevel=2) - return diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index 5c572cb5..fb578010 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -58,11 +58,7 @@ def setup_method(self): warnings.simplefilter("always", DeprecationWarning) self.in_kwargs = [ - {"inst_module": pysatSpaceWeather.instruments.sw_kp, 'tag': ''}, - {"inst_module": pysatSpaceWeather.instruments.sw_kp}, - {"inst_module": pysatSpaceWeather.instruments.sw_f107, - 'tag': '45day'}, - {"inst_module": pysatSpaceWeather.instruments.sw_f107}] + {"inst_module": pysatSpaceWeather.instruments.sw_kp, 'tag': ''}] self.ref_time = dt.datetime(2001, 1, 1) self.warn_msgs = [] self.war = "" @@ -99,71 +95,6 @@ def test_sw_kp_default_tag_deprecation(self): self.eval_warnings() return - @pytest.mark.parametrize("tag", ["def", "now"]) - def test_sw_kp_gfz_extra_data_deprecation(self, tag): - """Test the deprecation for loading extra data for the GFZ sw_kp data. - - Parameters - ---------- - tag : str - Instrument tag - - """ - - with warnings.catch_warnings(record=True) as self.war: - pysat.Instrument(tag=tag, **self.in_kwargs[1]) - - self.warn_msgs = [ - "".join(["Upcoming structural changes will prevent Instruments ", - "from loading multiple data sets in one Instrument. In ", - "version 0.1.0+ the Ap and Cp data will be accessable ", - "from the `sw_ap` and `sw_cp` Instruments."])] - - # Evaluate the warning output - self.eval_warnings() - return - - def test_sw_f107_45day_extra_data_deprecation(self): - """Test the deprecation for loading extra data by 45day sw_f107.""" - - with warnings.catch_warnings(record=True) as self.war: - pysat.Instrument(**self.in_kwargs[2]) - - self.warn_msgs = ["".join(["Upcoming structural changes will prevent ", - "Instruments from loading multiple data ", - "sets in one Instrument. In version 0.1.0+", - " the Ap will be accessable from the ", - "`sw_ap` Instrument."])] - - # Evaluate the warning output - self.eval_warnings() - return - - @pytest.mark.parametrize("tag", ["daily", "prelim"]) - def test_sw_f107_extra_data_deprecation(self, tag): - """Test the deprecation for loading extra data using SWPC sw_f107 data. - - Parameters - ---------- - tag : str - Instrument tag - - """ - - with warnings.catch_warnings(record=True) as self.war: - pysat.Instrument(tag=tag, **self.in_kwargs[3]) - - self.warn_msgs = [ - "".join(["Upcoming structural changes will prevent Instruments ", - "from loading multiple data sets in one Instrument. In ", - "version 0.1.0+ the SSN, solar flare, and solar mean ", - "field data will be accessable from the `sw_ssn`, ", - "`sw_flare`, and `sw_sbfield` Instruments."])] - - # Evaluate the warning output - self.eval_warnings() - return - class TestSWInstrumentLogging(object): """Test logging messages raised under instrument-specific conditions.""" From ac8503b7d31554353ad4f4fec7847d44d9637f8e Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 16 Jan 2024 13:50:16 -0500 Subject: [PATCH 149/171] STY: remove unused import Remove warnings module, as it is no longer used. --- pysatSpaceWeather/instruments/sw_f107.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index 3818989b..754fbe45 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -73,7 +73,6 @@ import numpy as np import os import pandas as pds -import warnings import pysat From ede7755e6bf20b3f45084b0ee3002c5b3ec3feae Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 16 Jan 2024 13:50:35 -0500 Subject: [PATCH 150/171] TST: update theme versions Update the RTD theme limits. --- test_requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_requirements.txt b/test_requirements.txt index b8a41858..3bfdc26d 100644 --- a/test_requirements.txt +++ b/test_requirements.txt @@ -7,4 +7,4 @@ numpydoc pytest-cov pytest-ordering sphinx -sphinx_rtd_theme +sphinx_rtd_theme>=1.2.2,<2.0.0 From b97adc5956328c71440bd5cd0fe6cc34c14cb3a2 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 16 Jan 2024 13:54:58 -0500 Subject: [PATCH 151/171] TST: update test modules Update test module version in the pyproject.toml. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index aac7c139..59a3b31d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,7 +65,7 @@ doc = [ "numpydoc", "pyproject_parser", "sphinx", - "sphinx_rtd_theme >= 1.2.2" + "sphinx_rtd_theme >= 1.2.2,<2.0.0" ] [project.urls] From 687d3ea74dbaf0fbd34212f0dfe87ef830cbd999 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Fri, 19 Jan 2024 10:27:01 -0500 Subject: [PATCH 152/171] BUG: remove unneeded if Removed an if statement that caused test failure. --- .github/workflows/pysat_rc.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pysat_rc.yml b/.github/workflows/pysat_rc.yml index 84b7d83b..480bb7c4 100644 --- a/.github/workflows/pysat_rc.yml +++ b/.github/workflows/pysat_rc.yml @@ -27,7 +27,6 @@ jobs: run: pip install --no-deps --pre -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ pysat - name: Install standard dependencies and package - if: ${{ matrix.test_config == 'latest'}} run: pip install .[test] - name: Set up pysat From 456ce47d1fa82b1f7c2cffb2ee5ed7339ccd52ac Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 24 Jan 2024 09:25:15 -0500 Subject: [PATCH 153/171] MAINT: grammar fixes Made grammar fixes suggested in code review. Co-authored-by: Russell Stoneback --- CHANGELOG.md | 2 +- docs/supported_instruments.rst | 14 +++++++------- pysatSpaceWeather/instruments/methods/ace.py | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2cc5e11..9d717278 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). [0.1.0] - 2023-XX-XX -------------------- * Enhancements - * Changed downloads to write files across multiple Instruments, when the + * Changed downloads to write files across multiple Instruments when the remote files contain a mix of data products * Added new instruments: sw_ae, sw_al, sw_au, sw_ap, sw_apo, sw_cp, sw_flare, sw_hpo, sw_polar-cap, sw_sbfield, sw_ssn, and sw_storm-prob diff --git a/docs/supported_instruments.rst b/docs/supported_instruments.rst index 69cec7fd..efb508a6 100644 --- a/docs/supported_instruments.rst +++ b/docs/supported_instruments.rst @@ -84,7 +84,7 @@ AE ^^^ AE is an auroral electrojet index that reflects the level of magnetic deflection -in the auroral zone, due to the difference between the eastward and westward +in the auroral zone due to the difference between the eastward and westward electroject currents at Earth. Real-time predictions (last 96 hours) are provided by `LASP `_. @@ -132,7 +132,7 @@ Ap ^^^ Ap is a geomagnetic index that reflects the magnitude of geomagnetic -disturbances at Earth, but unlike the Kp uses a linear scale. Historic, recent +disturbances at Earth but unlike Kp uses a linear scale. Historic, recent (last 30 days), and forecasted values are available from `GFZ `_ and the `SWPC Forecasts page `_. @@ -148,7 +148,7 @@ apo ^^^ apo is a linear (half)-hourly, planetary, open-ended, geomagnetic index that -reflects the magnitude of geomagnetic disturbances at Earth. It is like Ap, but +reflects the magnitude of geomagnetic disturbances at Earth. It is like Ap but does not have an upper limit. Values from 1995 onwards are available from `GFZ `_. @@ -214,7 +214,7 @@ Historic indices, real-time indices, and forecasted indices are available from Solar Flares ^^^^^^^^^^^^ -Solar flares have been monitored for decades, and the data has been compiled +Solar flares have been monitored for decades and the data has been compiled into standard measurements from different data sets. Historic indices, real-time indices, and forecasted indices are available from `SWPC `_. @@ -229,8 +229,8 @@ real-time indices, and forecasted indices are available from Hpo ^^^ -Hpo is a (half)-Hourly, Planetary, Open-ended, geomagnetic index that -reflects the magnitude of geomagnetic disturbances at Earth. It is like Kp, but +Hpo is a (half)-Hourly, planetary, open-ended, geomagnetic index that +reflects the magnitude of geomagnetic disturbances at Earth. It is like Kp but does not have an upper limit. Values from 1995 onwards are available from `GFZ `_. @@ -276,7 +276,7 @@ Polar Cap Polar cap indices have been developed to provide information about high-latitude conditions and inform ionospheric space weather models. Currently, this -Instrument provides absorption predictions from SWPC. +:py:class:`~pysat._instrument.Instrument` provides absorption predictions from SWPC. .. automodule:: pysatSpaceWeather.instruments.sw_polarcap :members: diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index 4f52ed71..ef1695c4 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -216,7 +216,7 @@ def download(date_array, name, tag='', inst_id='', data_path='', now=None, date_array[0].day != now.day]): logger.warning(''.join(['real-time data only available for current', ' day, data in this file will have the ', - 'wrong date'])) + 'wrong date.'])) else: data_rate = 1 if name in ['mag', 'swepam'] else 5 file_fmt = '_'.join(["%Y%m%d", "ace", name, From 71bb58e05a2c03b60c3628125b242e974d307682 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 24 Jan 2024 12:55:10 -0500 Subject: [PATCH 154/171] MAINT: updated NEP Updated NEP and classifiers. Co-authored-by: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> --- .github/workflows/main.yml | 2 +- pyproject.toml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6d132627..2ada2185 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,7 +22,7 @@ jobs: include: # NEP29 compliance settings - python-version: "3.9" - numpy_ver: "1.21" + numpy_ver: "1.23" os: ubuntu-latest test_config: "NEP29" # Operational compliance settings diff --git a/pyproject.toml b/pyproject.toml index 59a3b31d..d60bf564 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,6 @@ classifiers = [ "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", From c5995ee5ca10b3edcfc79fe6d596cf521c4dbc00 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Fri, 26 Jan 2024 18:21:35 -0500 Subject: [PATCH 155/171] MAINT: added review suggestions Added more pytest markers and made grammar updates. Co-authored-by: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> --- pysatSpaceWeather/instruments/methods/swpc.py | 2 +- pysatSpaceWeather/instruments/sw_dst.py | 4 ++-- pysatSpaceWeather/instruments/sw_hpo.py | 4 ++-- pysatSpaceWeather/instruments/sw_mgii.py | 2 +- pysatSpaceWeather/instruments/sw_polarcap.py | 2 +- pysatSpaceWeather/instruments/sw_sbfield.py | 2 +- pysatSpaceWeather/instruments/sw_ssn.py | 4 ++-- pysatSpaceWeather/instruments/sw_stormprob.py | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index f5df5492..62581225 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -41,7 +41,7 @@ def daily_dsd_download(name, today, data_path, mock_download_dir=None): name : str Instrument name, expects one of 'f107', 'flare', 'ssn', or 'sbfield'. today : dt.datetime - Datetime for current day + Datetime for current day. data_path : str Path to data directory. mock_download_dir : str or NoneType diff --git a/pysatSpaceWeather/instruments/sw_dst.py b/pysatSpaceWeather/instruments/sw_dst.py index a9325b36..87c9b031 100644 --- a/pysatSpaceWeather/instruments/sw_dst.py +++ b/pysatSpaceWeather/instruments/sw_dst.py @@ -263,11 +263,11 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): data_path : str Path to data directory. If not None, will process any files with the correct name and date - as if they were downloaded + as if they were downloaded. mock_download_dir : str or NoneType Local directory with downloaded files or None. If not None, will process any files with the correct name and date as if they were - downloaded (default=None) + downloaded. (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_hpo.py b/pysatSpaceWeather/instruments/sw_hpo.py index 758c4221..fd878ff3 100644 --- a/pysatSpaceWeather/instruments/sw_hpo.py +++ b/pysatSpaceWeather/instruments/sw_hpo.py @@ -91,9 +91,9 @@ def load(fnames, tag='', inst_id=''): Parameters ---------- fnames : pandas.Series - Series of filenames + Series of filenames. tag : str - Instrument tag (default='') + Instrument tag. (default='') inst_id : str Instrument ID, not used. (default='') diff --git a/pysatSpaceWeather/instruments/sw_mgii.py b/pysatSpaceWeather/instruments/sw_mgii.py index a9e2831e..5d5471b8 100644 --- a/pysatSpaceWeather/instruments/sw_mgii.py +++ b/pysatSpaceWeather/instruments/sw_mgii.py @@ -275,7 +275,7 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): mock_download_dir : str or NoneType Local directory with downloaded files or None. If not None, will process any files with the correct name and date as if they were - downloaded (default=None) + downloaded. (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_polarcap.py b/pysatSpaceWeather/instruments/sw_polarcap.py index e55abd7c..69dc15ee 100644 --- a/pysatSpaceWeather/instruments/sw_polarcap.py +++ b/pysatSpaceWeather/instruments/sw_polarcap.py @@ -177,7 +177,7 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): mock_download_dir : str or NoneType Local directory with downloaded files or None. If not None, will process any files with the correct name and date as if they were - downloaded (default=None) + downloaded. (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_sbfield.py b/pysatSpaceWeather/instruments/sw_sbfield.py index c1361ed9..e2a50184 100644 --- a/pysatSpaceWeather/instruments/sw_sbfield.py +++ b/pysatSpaceWeather/instruments/sw_sbfield.py @@ -252,7 +252,7 @@ def download(date_array, tag, inst_id, data_path, update_files=False, mock_download_dir : str or NoneType Local directory with downloaded files or None. If not None, will process any files with the correct name and date as if they were - downloaded (default=None) + downloaded. (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py index c70d7f74..43244ff2 100644 --- a/pysatSpaceWeather/instruments/sw_ssn.py +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -284,11 +284,11 @@ def download(date_array, tag, inst_id, data_path, update_files=False, data_path : str Path to data directory. update_files : bool - Re-download data for files that already exist if True (default=False) + Re-download data for files that already exist if True. (default=False) mock_download_dir : str or NoneType Local directory with downloaded files or None. If not None, will process any files with the correct name and date as if they were - downloaded (default=None) + downloaded. (default=None) Raises ------ diff --git a/pysatSpaceWeather/instruments/sw_stormprob.py b/pysatSpaceWeather/instruments/sw_stormprob.py index 345866d0..dab7d23a 100644 --- a/pysatSpaceWeather/instruments/sw_stormprob.py +++ b/pysatSpaceWeather/instruments/sw_stormprob.py @@ -178,7 +178,7 @@ def download(date_array, tag, inst_id, data_path, mock_download_dir=None): mock_download_dir : str or NoneType Local directory with downloaded files or None. If not None, will process any files with the correct name and date as if they were - downloaded (default=None) + downloaded. (default=None) Raises ------ From 122373f6f86d623ec1ddbfa592e4e1b772313be5 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 30 Jan 2024 11:20:11 -0500 Subject: [PATCH 156/171] MAINT: applying some review comments Addressing more of the reviewer comments. Co-authored-by: Russell Stoneback Co-authored-by: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> --- pysatSpaceWeather/instruments/methods/swpc.py | 4 ++-- pysatSpaceWeather/instruments/sw_cp.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index 62581225..a7ac0858 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -584,7 +584,7 @@ def geomag_forecast_download(name, date_array, data_path, Raises ------ IOError - If an unknown mock download directory is supplied or the desored file + If an unknown mock download directory is supplied or the desired file is missing. Note @@ -958,7 +958,7 @@ def list_files(name, tag, inst_id, data_path, format_str=None): # Pad list of files data to include most recent file under tomorrow if not files.empty: - pds_offset = pds.DateOffset(days=1) + pds_offset = dt.timedelta(days=1) files.loc[files.index[-1] + pds_offset] = files.values[-1] files.loc[files.index[-1] + pds_offset] = files.values[-1] diff --git a/pysatSpaceWeather/instruments/sw_cp.py b/pysatSpaceWeather/instruments/sw_cp.py index f2788bf6..6d2207da 100644 --- a/pysatSpaceWeather/instruments/sw_cp.py +++ b/pysatSpaceWeather/instruments/sw_cp.py @@ -101,9 +101,9 @@ def load(fnames, tag='', inst_id=''): Parameters ---------- fnames : pandas.Series - Series of filenames + Series of filenames. tag : str - Instrument tag (default='') + Instrument tag. (default='') inst_id : str Instrument ID, not used. (default='') From e0e081a4d533bbe413110673dd843dd74f05521f Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 31 Jan 2024 12:03:31 -0500 Subject: [PATCH 157/171] ENH: added acknowledgements file Added an acknowledgements file to the main directory and the docs. --- ACKNOWLEDGEMENTS.md | 23 +++++++++++++++++++++++ docs/acknowledgements.rst | 1 + docs/index.rst | 3 +-- 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 ACKNOWLEDGEMENTS.md create mode 100644 docs/acknowledgements.rst diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md new file mode 100644 index 00000000..a7323a5a --- /dev/null +++ b/ACKNOWLEDGEMENTS.md @@ -0,0 +1,23 @@ +Funding +======= +The following institutions, missions, and programs have provided funding +for pysatSpaceWeather development. + +Institutions +------------ + - Cosmic Studio + - Defense Advanced Research Projects Agency (DARPA) Defense Sciences Office + - Office of Naval Research (ONR) + - National Aeronautics and Space Administration (NASA) + - National Science Foundation (NSF) + +Programs +-------- + - NSF 125908, AGS-1651393 + - Naval Research Laboratory N00173191G016 and N0017322P0744 + +Disclaimers +=========== +Any opinions, findings, and conclusions or recommendations expressed in this +material are those of the author(s) and do not necessarily reflect the views +of the funding agencies. diff --git a/docs/acknowledgements.rst b/docs/acknowledgements.rst new file mode 100644 index 00000000..dd1f917a --- /dev/null +++ b/docs/acknowledgements.rst @@ -0,0 +1 @@ +.. mdinclude:: ../ACKNOWLEDGEMENTS.md diff --git a/docs/index.rst b/docs/index.rst index db161e38..c9275979 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -19,13 +19,12 @@ indices as pysat.Instrument objects. examples.rst develop_guide.rst history.rst + acknowledgements.rst .. admonition:: DISTRIBUTION STATEMENT A: Approved for public release. Distribution is unlimited. - This work was supported by the Office of Naval Research. - Indices and tables From 664370b14380c2aa7408bcad40ad060cc016de37 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 31 Jan 2024 12:03:52 -0500 Subject: [PATCH 158/171] DOC: updated the changelog Added a summary of the changes to the changelog. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d717278..a1bed077 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). * Added new examples to the documentation * Added new test attributes for clean messages to the ACE instruments * Added the ability to 'download' files from a local directory + * Added an acknowledgements file with detailed funding information * Maintenance * Updated package documentation, yamls, and other supporting files * Updated the LISIRD download routine to reflect new behaviour From 9f188e8c3bb5ad7d2ee2b67e4ecfd7b2366a3549 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 31 Jan 2024 12:04:12 -0500 Subject: [PATCH 159/171] DOC: updated file headers Updated the file headers to remove funding information. --- pysatSpaceWeather/instruments/ace_epam.py | 1 - pysatSpaceWeather/instruments/ace_mag.py | 1 - pysatSpaceWeather/instruments/ace_sis.py | 1 - pysatSpaceWeather/instruments/ace_swepam.py | 1 - pysatSpaceWeather/instruments/methods/ace.py | 1 - .../instruments/methods/auroral_electrojet.py | 1 - pysatSpaceWeather/instruments/methods/dst.py | 1 - pysatSpaceWeather/instruments/methods/f107.py | 1 - pysatSpaceWeather/instruments/methods/general.py | 1 - pysatSpaceWeather/instruments/methods/gfz.py | 1 - pysatSpaceWeather/instruments/methods/kp_ap.py | 1 - pysatSpaceWeather/instruments/methods/lasp.py | 1 - pysatSpaceWeather/instruments/methods/lisird.py | 1 - pysatSpaceWeather/instruments/methods/swpc.py | 1 - pysatSpaceWeather/instruments/sw_ae.py | 1 - pysatSpaceWeather/instruments/sw_al.py | 1 - pysatSpaceWeather/instruments/sw_ap.py | 1 - pysatSpaceWeather/instruments/sw_apo.py | 1 - pysatSpaceWeather/instruments/sw_au.py | 1 - pysatSpaceWeather/instruments/sw_cp.py | 1 - pysatSpaceWeather/instruments/sw_dst.py | 8 -------- pysatSpaceWeather/instruments/sw_f107.py | 1 - pysatSpaceWeather/instruments/sw_flare.py | 1 - pysatSpaceWeather/instruments/sw_hpo.py | 1 - pysatSpaceWeather/instruments/sw_kp.py | 8 -------- pysatSpaceWeather/instruments/sw_mgii.py | 1 - pysatSpaceWeather/instruments/sw_polarcap.py | 1 - pysatSpaceWeather/instruments/sw_sbfield.py | 1 - pysatSpaceWeather/instruments/sw_ssn.py | 1 - pysatSpaceWeather/instruments/sw_stormprob.py | 1 - pysatSpaceWeather/tests/test_instruments.py | 1 - pysatSpaceWeather/tests/test_methods_ace.py | 1 - pysatSpaceWeather/tests/test_methods_ae.py | 1 - pysatSpaceWeather/tests/test_methods_f107.py | 1 - pysatSpaceWeather/tests/test_methods_general.py | 1 - pysatSpaceWeather/tests/test_methods_gfz.py | 1 - pysatSpaceWeather/tests/test_methods_kp.py | 1 - pysatSpaceWeather/tests/test_methods_lisird.py | 1 - 38 files changed, 52 deletions(-) diff --git a/pysatSpaceWeather/instruments/ace_epam.py b/pysatSpaceWeather/instruments/ace_epam.py index 171e069d..ae439c6c 100644 --- a/pysatSpaceWeather/instruments/ace_epam.py +++ b/pysatSpaceWeather/instruments/ace_epam.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports ACE Electron, Proton, and Alpha Monitor data. diff --git a/pysatSpaceWeather/instruments/ace_mag.py b/pysatSpaceWeather/instruments/ace_mag.py index f8529708..27e82fbd 100644 --- a/pysatSpaceWeather/instruments/ace_mag.py +++ b/pysatSpaceWeather/instruments/ace_mag.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports ACE Magnetometer data. diff --git a/pysatSpaceWeather/instruments/ace_sis.py b/pysatSpaceWeather/instruments/ace_sis.py index 1c8a5a7c..61f6546a 100644 --- a/pysatSpaceWeather/instruments/ace_sis.py +++ b/pysatSpaceWeather/instruments/ace_sis.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports ACE Solar Isotope Spectrometer data. diff --git a/pysatSpaceWeather/instruments/ace_swepam.py b/pysatSpaceWeather/instruments/ace_swepam.py index 3388d6d2..174d4245 100644 --- a/pysatSpaceWeather/instruments/ace_swepam.py +++ b/pysatSpaceWeather/instruments/ace_swepam.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports ACE Solar Wind Electron Proton Alpha Monitor data. diff --git a/pysatSpaceWeather/instruments/methods/ace.py b/pysatSpaceWeather/instruments/methods/ace.py index ef1695c4..83f756fa 100644 --- a/pysatSpaceWeather/instruments/methods/ace.py +++ b/pysatSpaceWeather/instruments/methods/ace.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides general routines for the ACE space weather instruments.""" diff --git a/pysatSpaceWeather/instruments/methods/auroral_electrojet.py b/pysatSpaceWeather/instruments/methods/auroral_electrojet.py index 91864507..2c0b179d 100644 --- a/pysatSpaceWeather/instruments/methods/auroral_electrojet.py +++ b/pysatSpaceWeather/instruments/methods/auroral_electrojet.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides support routines for auroral electrojet indices.""" diff --git a/pysatSpaceWeather/instruments/methods/dst.py b/pysatSpaceWeather/instruments/methods/dst.py index ac062a51..b4831a64 100644 --- a/pysatSpaceWeather/instruments/methods/dst.py +++ b/pysatSpaceWeather/instruments/methods/dst.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides default routines for Dst.""" diff --git a/pysatSpaceWeather/instruments/methods/f107.py b/pysatSpaceWeather/instruments/methods/f107.py index 1e5278d1..3fe7edf7 100644 --- a/pysatSpaceWeather/instruments/methods/f107.py +++ b/pysatSpaceWeather/instruments/methods/f107.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Routines for the F10.7 solar index.""" diff --git a/pysatSpaceWeather/instruments/methods/general.py b/pysatSpaceWeather/instruments/methods/general.py index 9bdff66b..eccccbeb 100644 --- a/pysatSpaceWeather/instruments/methods/general.py +++ b/pysatSpaceWeather/instruments/methods/general.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides routines that support general space weather instruments.""" diff --git a/pysatSpaceWeather/instruments/methods/gfz.py b/pysatSpaceWeather/instruments/methods/gfz.py index 53ca3e35..12ffcebb 100644 --- a/pysatSpaceWeather/instruments/methods/gfz.py +++ b/pysatSpaceWeather/instruments/methods/gfz.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides routines that support GFZ space weather instruments.""" diff --git a/pysatSpaceWeather/instruments/methods/kp_ap.py b/pysatSpaceWeather/instruments/methods/kp_ap.py index a4fe1d96..efc2eec0 100644 --- a/pysatSpaceWeather/instruments/methods/kp_ap.py +++ b/pysatSpaceWeather/instruments/methods/kp_ap.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides routines to support the geomagnetic indices, Kp and Ap.""" diff --git a/pysatSpaceWeather/instruments/methods/lasp.py b/pysatSpaceWeather/instruments/methods/lasp.py index 98fdd709..a3ddfaf0 100644 --- a/pysatSpaceWeather/instruments/methods/lasp.py +++ b/pysatSpaceWeather/instruments/methods/lasp.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides support routines for LASP data.""" diff --git a/pysatSpaceWeather/instruments/methods/lisird.py b/pysatSpaceWeather/instruments/methods/lisird.py index 48e819a5..58327499 100644 --- a/pysatSpaceWeather/instruments/methods/lisird.py +++ b/pysatSpaceWeather/instruments/methods/lisird.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides support functions for the LASP LISIRD data base.""" diff --git a/pysatSpaceWeather/instruments/methods/swpc.py b/pysatSpaceWeather/instruments/methods/swpc.py index a7ac0858..0635a599 100644 --- a/pysatSpaceWeather/instruments/methods/swpc.py +++ b/pysatSpaceWeather/instruments/methods/swpc.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Provides routines that support SWPC space weather instruments.""" diff --git a/pysatSpaceWeather/instruments/sw_ae.py b/pysatSpaceWeather/instruments/sw_ae.py index a5e63b23..73d2db43 100644 --- a/pysatSpaceWeather/instruments/sw_ae.py +++ b/pysatSpaceWeather/instruments/sw_ae.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports the auroral electrojet AE values. diff --git a/pysatSpaceWeather/instruments/sw_al.py b/pysatSpaceWeather/instruments/sw_al.py index eff8c377..72f07ed5 100644 --- a/pysatSpaceWeather/instruments/sw_al.py +++ b/pysatSpaceWeather/instruments/sw_al.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports the auroral electrojet AL values. diff --git a/pysatSpaceWeather/instruments/sw_ap.py b/pysatSpaceWeather/instruments/sw_ap.py index dc26c129..147ca5fa 100644 --- a/pysatSpaceWeather/instruments/sw_ap.py +++ b/pysatSpaceWeather/instruments/sw_ap.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports ap index values. diff --git a/pysatSpaceWeather/instruments/sw_apo.py b/pysatSpaceWeather/instruments/sw_apo.py index 0357bfb1..be5f139e 100644 --- a/pysatSpaceWeather/instruments/sw_apo.py +++ b/pysatSpaceWeather/instruments/sw_apo.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports apo index values. diff --git a/pysatSpaceWeather/instruments/sw_au.py b/pysatSpaceWeather/instruments/sw_au.py index 392fca5f..4c490855 100644 --- a/pysatSpaceWeather/instruments/sw_au.py +++ b/pysatSpaceWeather/instruments/sw_au.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports the auroral electrojet AU values. diff --git a/pysatSpaceWeather/instruments/sw_cp.py b/pysatSpaceWeather/instruments/sw_cp.py index 6d2207da..009e9f05 100644 --- a/pysatSpaceWeather/instruments/sw_cp.py +++ b/pysatSpaceWeather/instruments/sw_cp.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports Cp index values. diff --git a/pysatSpaceWeather/instruments/sw_dst.py b/pysatSpaceWeather/instruments/sw_dst.py index 87c9b031..6d6fc407 100644 --- a/pysatSpaceWeather/instruments/sw_dst.py +++ b/pysatSpaceWeather/instruments/sw_dst.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports Dst values. Downloads data from NGDC. @@ -26,13 +25,6 @@ ---- Will only work until 2057. -This material is based upon work supported by the -National Science Foundation under Grant Number 1259508. - -Any opinions, findings, and conclusions or recommendations expressed in this -material are those of the author(s) and do not necessarily reflect the views -of the National Science Foundation. - """ import datetime as dt diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index 754fbe45..53854ebb 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports F10.7 index values. diff --git a/pysatSpaceWeather/instruments/sw_flare.py b/pysatSpaceWeather/instruments/sw_flare.py index 83d3da45..54bd1470 100644 --- a/pysatSpaceWeather/instruments/sw_flare.py +++ b/pysatSpaceWeather/instruments/sw_flare.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports solar flare values. diff --git a/pysatSpaceWeather/instruments/sw_hpo.py b/pysatSpaceWeather/instruments/sw_hpo.py index fd878ff3..9db5a1cf 100644 --- a/pysatSpaceWeather/instruments/sw_hpo.py +++ b/pysatSpaceWeather/instruments/sw_hpo.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports Hpo index values. diff --git a/pysatSpaceWeather/instruments/sw_kp.py b/pysatSpaceWeather/instruments/sw_kp.py index 25d307aa..030b93b9 100644 --- a/pysatSpaceWeather/instruments/sw_kp.py +++ b/pysatSpaceWeather/instruments/sw_kp.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports Kp index values. @@ -65,13 +64,6 @@ feature, and multi_file_day feature available from the pyast.Instrument object is not appropriate for these tags data. -This material is based upon work supported by the -National Science Foundation under Grant Number 1259508. - -Any opinions, findings, and conclusions or recommendations expressed in this -material are those of the author(s) and do not necessarily reflect the views -of the National Science Foundation. - """ import datetime as dt diff --git a/pysatSpaceWeather/instruments/sw_mgii.py b/pysatSpaceWeather/instruments/sw_mgii.py index 5d5471b8..c624a196 100644 --- a/pysatSpaceWeather/instruments/sw_mgii.py +++ b/pysatSpaceWeather/instruments/sw_mgii.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports the MgII core-to-wing ratio index. diff --git a/pysatSpaceWeather/instruments/sw_polarcap.py b/pysatSpaceWeather/instruments/sw_polarcap.py index 69dc15ee..9a85df01 100644 --- a/pysatSpaceWeather/instruments/sw_polarcap.py +++ b/pysatSpaceWeather/instruments/sw_polarcap.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports polar cap indexes. diff --git a/pysatSpaceWeather/instruments/sw_sbfield.py b/pysatSpaceWeather/instruments/sw_sbfield.py index e2a50184..f4207f41 100644 --- a/pysatSpaceWeather/instruments/sw_sbfield.py +++ b/pysatSpaceWeather/instruments/sw_sbfield.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports solar magnetic field values. diff --git a/pysatSpaceWeather/instruments/sw_ssn.py b/pysatSpaceWeather/instruments/sw_ssn.py index 43244ff2..77eafba2 100644 --- a/pysatSpaceWeather/instruments/sw_ssn.py +++ b/pysatSpaceWeather/instruments/sw_ssn.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports Sunspot Number (SSN) and related indices. diff --git a/pysatSpaceWeather/instruments/sw_stormprob.py b/pysatSpaceWeather/instruments/sw_stormprob.py index dab7d23a..1dea8079 100644 --- a/pysatSpaceWeather/instruments/sw_stormprob.py +++ b/pysatSpaceWeather/instruments/sw_stormprob.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Supports storm probabilities. diff --git a/pysatSpaceWeather/tests/test_instruments.py b/pysatSpaceWeather/tests/test_instruments.py index fb578010..ac685c45 100644 --- a/pysatSpaceWeather/tests/test_instruments.py +++ b/pysatSpaceWeather/tests/test_instruments.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Unit and Integration Tests for each instrument module. diff --git a/pysatSpaceWeather/tests/test_methods_ace.py b/pysatSpaceWeather/tests/test_methods_ace.py index 52f982df..41be5173 100644 --- a/pysatSpaceWeather/tests/test_methods_ace.py +++ b/pysatSpaceWeather/tests/test_methods_ace.py @@ -5,7 +5,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Integration and unit test suite for ACE methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_ae.py b/pysatSpaceWeather/tests/test_methods_ae.py index d9339e5b..705330ed 100644 --- a/pysatSpaceWeather/tests/test_methods_ae.py +++ b/pysatSpaceWeather/tests/test_methods_ae.py @@ -5,7 +5,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Integration and unit test suite for AE methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_f107.py b/pysatSpaceWeather/tests/test_methods_f107.py index d35910c2..30bc16e5 100644 --- a/pysatSpaceWeather/tests/test_methods_f107.py +++ b/pysatSpaceWeather/tests/test_methods_f107.py @@ -5,7 +5,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Test suite for F10.7 methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_general.py b/pysatSpaceWeather/tests/test_methods_general.py index da244760..bc7db985 100644 --- a/pysatSpaceWeather/tests/test_methods_general.py +++ b/pysatSpaceWeather/tests/test_methods_general.py @@ -5,7 +5,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Integration and unit test suite for ACE methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_gfz.py b/pysatSpaceWeather/tests/test_methods_gfz.py index cae7b50a..c3954336 100644 --- a/pysatSpaceWeather/tests/test_methods_gfz.py +++ b/pysatSpaceWeather/tests/test_methods_gfz.py @@ -5,7 +5,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Integration and unit test suite for ACE methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_kp.py b/pysatSpaceWeather/tests/test_methods_kp.py index 8cfbacf5..9f10e3c1 100644 --- a/pysatSpaceWeather/tests/test_methods_kp.py +++ b/pysatSpaceWeather/tests/test_methods_kp.py @@ -5,7 +5,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Test suite for Kp and Ap methods.""" diff --git a/pysatSpaceWeather/tests/test_methods_lisird.py b/pysatSpaceWeather/tests/test_methods_lisird.py index 77018a18..75a2c397 100644 --- a/pysatSpaceWeather/tests/test_methods_lisird.py +++ b/pysatSpaceWeather/tests/test_methods_lisird.py @@ -6,7 +6,6 @@ # # DISTRIBUTION STATEMENT A: Approved for public release. Distribution is # unlimited. -# This work was supported by the Office of Naval Research. # ---------------------------------------------------------------------------- """Tests for the LISIRD functions.""" From 1ce79906edb9d88b4957244cc7ff2fa2a4357c03 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 31 Jan 2024 15:26:58 -0500 Subject: [PATCH 160/171] DOC: Update ACKNOWLEDGEMENTS.md Updated Jeff's contributions. Co-authored-by: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> --- ACKNOWLEDGEMENTS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md index a7323a5a..c6e5a876 100644 --- a/ACKNOWLEDGEMENTS.md +++ b/ACKNOWLEDGEMENTS.md @@ -15,6 +15,7 @@ Programs -------- - NSF 125908, AGS-1651393 - Naval Research Laboratory N00173191G016 and N0017322P0744 + - The Space Precipitation Impacts (SPI) project at Goddard Space Flight Center through the Heliophysics Internal Science Funding Model Disclaimers =========== From 080ecf4541a146d516f7cb62b95cfa5964ce6ef6 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 31 Jan 2024 15:37:23 -0500 Subject: [PATCH 161/171] ENH: updated pyproject.toml Updated the pytest codes for future pysat compatibility. Co-authored-by: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index d60bf564..80bd9d32 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -80,6 +80,7 @@ markers = [ "download", "no_download", "load_options", + "new_tests", "first", "second" ] From 8aa7ea71bd97e2e8165ebac0c10a02e0205ea705 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 31 Jan 2024 16:53:49 -0500 Subject: [PATCH 162/171] DOC: update acknowledgements Put institutions in alphabetical order and add CUA for Jonathan. --- ACKNOWLEDGEMENTS.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md index c6e5a876..3d23c705 100644 --- a/ACKNOWLEDGEMENTS.md +++ b/ACKNOWLEDGEMENTS.md @@ -5,11 +5,12 @@ for pysatSpaceWeather development. Institutions ------------ + - Catholic University of America (CUA) - Cosmic Studio - Defense Advanced Research Projects Agency (DARPA) Defense Sciences Office - - Office of Naval Research (ONR) - National Aeronautics and Space Administration (NASA) - National Science Foundation (NSF) + - Office of Naval Research (ONR) Programs -------- From 2b5f7e1fc008d1da63f74e2966c48f38714a66cb Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Thu, 1 Feb 2024 11:04:08 -0500 Subject: [PATCH 163/171] MAINT: Update ACKNOWLEDGEMENTS.md Add article to institution name. Co-authored-by: Russell Stoneback --- ACKNOWLEDGEMENTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md index 3d23c705..1aa5a0d3 100644 --- a/ACKNOWLEDGEMENTS.md +++ b/ACKNOWLEDGEMENTS.md @@ -5,7 +5,7 @@ for pysatSpaceWeather development. Institutions ------------ - - Catholic University of America (CUA) + - The Catholic University of America (CUA) - Cosmic Studio - Defense Advanced Research Projects Agency (DARPA) Defense Sciences Office - National Aeronautics and Space Administration (NASA) From 38f098b0a07c2fc890349c273776cdb229a54e6c Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Thu, 1 Feb 2024 14:34:10 -0500 Subject: [PATCH 164/171] MAINT: updated classifiers Updated the python version classifiers. --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 80bd9d32..9d75a5e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,6 +25,7 @@ classifiers = [ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Operating System :: POSIX :: Linux", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows" From c42eff7da9d9e1f20aacd0c7a947c2311a13310c Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Thu, 1 Feb 2024 14:35:14 -0500 Subject: [PATCH 165/171] DOC: updated installation instructions Updated the installation instructions in the docs and the README. --- README.md | 3 ++- docs/installation.rst | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c28ab292..88f51490 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,8 @@ a local install use the "--user" flag after "install". ``` cd pysatSpaceWeather/ -python setup.py install +python -m build . +pip install . ``` # Examples diff --git a/docs/installation.rst b/docs/installation.rst index 748d3e32..35c0eda9 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -19,7 +19,7 @@ Prerequisites pysatSpaceWeather uses common Python modules, as well as modules developed by and for the Space Physics community. This module officially supports -Python 3.7+. +Python 3.6 and 3.9+. ============== ================= Common modules Community modules From 0a933df57daca752df903c120c6515663b39dfc6 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Thu, 1 Feb 2024 14:35:44 -0500 Subject: [PATCH 166/171] TST: updated CI versions Added python 3.12 to the testing and updated the action versions used. --- .github/workflows/docs.yml | 6 +++--- .github/workflows/main.yml | 6 +++--- .github/workflows/pip_rc_install.yml | 6 +++--- .github/workflows/pysat_rc.yml | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 3d9f3988..3522b6c3 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -13,13 +13,13 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.10"] + python-version: ["3.11"] name: Documentation tests steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2ada2185..d6efa7db 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: fail-fast: false matrix: os: ["ubuntu-latest", "macos-latest", "windows-latest"] - python-version: ["3.10", "3.11"] + python-version: ["3.10", "3.11", "3.12"] numpy_ver: ["latest"] test_config: ["latest"] include: @@ -34,9 +34,9 @@ jobs: name: Python ${{ matrix.python-version }} on ${{ matrix.os }} with numpy ${{ matrix.numpy_ver }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/pip_rc_install.yml b/.github/workflows/pip_rc_install.yml index 1cbfe441..322ed53b 100644 --- a/.github/workflows/pip_rc_install.yml +++ b/.github/workflows/pip_rc_install.yml @@ -13,14 +13,14 @@ jobs: fail-fast: false matrix: os: ["ubuntu-latest", "macos-latest", "windows-latest"] - python-version: ["3.11"] # Keep this version at the highest supported Python version + python-version: ["3.12"] # Keep this version at the highest supported Python version name: Python ${{ matrix.python-version }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/pysat_rc.yml b/.github/workflows/pysat_rc.yml index 480bb7c4..ec5b3174 100644 --- a/.github/workflows/pysat_rc.yml +++ b/.github/workflows/pysat_rc.yml @@ -12,14 +12,14 @@ jobs: fail-fast: false matrix: os: ["ubuntu-latest", "macos-latest", "windows-latest"] - python-version: ["3.10"] + python-version: ["3.11"] name: Python ${{ matrix.python-version }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} From 648789d85e9e819d4a5dd5198149e81532e95b5d Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Thu, 1 Feb 2024 14:36:03 -0500 Subject: [PATCH 167/171] DOC: update changelog Update the changelog to include the python version bump. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d717278..3948c4cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). * Removed try/except loop that was a fix for pysat < 3.1.0 * Updated 'use_header' kwarg use for pysat 3.2.0 changes * Updated code headers to include license, reference, and pub release info + * Updated the supported python versions [0.0.10] - 2023-06-01 --------------------- From 587ae422464b08a4903335d138671a1742178fc7 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Thu, 1 Feb 2024 14:51:47 -0500 Subject: [PATCH 168/171] MAINT: updated RTD python version Updated the RTD python version. --- .readthedocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index e1667025..b198cf86 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -9,7 +9,7 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.10" + python: "3.11" # Build documentation in the docs/ directory with Sphinx sphinx: From 213ed1156b9d3b8f98b429a3585ed6c11b373a5c Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Wed, 7 Feb 2024 14:13:40 -0500 Subject: [PATCH 169/171] DOC: Update ACKNOWLEDGEMENTS.md Expanded wording on disclaimer. Co-authored-by: Russell Stoneback --- ACKNOWLEDGEMENTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md index 1aa5a0d3..16086257 100644 --- a/ACKNOWLEDGEMENTS.md +++ b/ACKNOWLEDGEMENTS.md @@ -20,6 +20,6 @@ Programs Disclaimers =========== -Any opinions, findings, and conclusions or recommendations expressed in this +Any opinions or actions taken by the listed funding institutions are those of the institutions and do not necessarily reflect the views of the pysat development team or individual authors. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the funding agencies. From 7ca8576cbdb28daa2315023c6880a4e4be6d9a77 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Thu, 15 Feb 2024 18:01:05 -0500 Subject: [PATCH 170/171] REL: updated release date Updated the release date for tomorrow. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdc66eaf..e14b8991 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ Change Log All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). -[0.1.0] - 2023-XX-XX +[0.1.0] - 2024-02-16 -------------------- * Enhancements * Changed downloads to write files across multiple Instruments when the From acef67c63b43bb3c954077d8adf9d7ca1e66a7a3 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Fri, 16 Feb 2024 16:29:33 -0500 Subject: [PATCH 171/171] BUG: updated test dates Updated test dates for 45 day file, which may not be updated frequently. --- pysatSpaceWeather/instruments/sw_ap.py | 2 +- pysatSpaceWeather/instruments/sw_f107.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatSpaceWeather/instruments/sw_ap.py b/pysatSpaceWeather/instruments/sw_ap.py index 147ca5fa..cc20853e 100644 --- a/pysatSpaceWeather/instruments/sw_ap.py +++ b/pysatSpaceWeather/instruments/sw_ap.py @@ -102,7 +102,7 @@ 'forecast': tomorrow, 'prediction': tomorrow, 'recent': today, - '45day': tomorrow}} + '45day': today}} # ---------------------------------------------------------------------------- # Instrument methods diff --git a/pysatSpaceWeather/instruments/sw_f107.py b/pysatSpaceWeather/instruments/sw_f107.py index 53854ebb..d3ca6b54 100644 --- a/pysatSpaceWeather/instruments/sw_f107.py +++ b/pysatSpaceWeather/instruments/sw_f107.py @@ -109,7 +109,7 @@ 'prelim': dt.datetime(2009, 1, 1), 'daily': today, 'forecast': tomorrow, - '45day': tomorrow}, + '45day': today}, 'obs': {'now': dt.datetime(2009, 1, 1)}, 'adj': {'now': dt.datetime(2009, 1, 1)}}