From 308c6d20e1a5345f077d2f807f6ffc3c6168df3d Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 16 Oct 2024 07:14:53 -0700 Subject: [PATCH 1/2] Code and example for classifying snow effects (#209) * initial load of snow mode detection * lint * fix file opens * add README * formatting * fix import * fix file name * fix up horizon code, add test * fix horizon file name * update mask function * linting * work toward vectorizing categorize * lint, use mode None instead of -1 * use None in test * use dtype object to have both int and None * handle mixed types * add tests * handle equals * Fixed the horizon masking section * Linting * Added argument to test_categorize() to reflect changes made to categorize() * last lint i promise! * remove old categorize * Fixed failing test * fix offline * 0 not None * edit definitions of mode * use pvlib function, punctuation * lint, add note at head * lint * api, whatsnew * implemented mode -1 * fixed import error that failed readthedocs * linting (W291 flags on snow.py) * more mode -1 changes * linting * Fixing readthedocs rendering * fixed failing test * Apply suggestions from code review * doc build * spaces * maybe its this extra line? * docstring edits * addressed Kevin's comments * Fixed import statements * Uncomment directory definition * Removed unused import statement * Shorted line length to 79 characters * Update pvanalytics/features/snow.py Co-authored-by: Kevin Anderson * Update pvanalytics/features/snow.py Co-authored-by: Kevin Anderson * Update pvanalytics/features/snow.py Co-authored-by: Kevin Anderson * Update pvanalytics/features/snow.py Co-authored-by: Kevin Anderson * Madking changes recommended by Kevin * Linting * changed name of hidden function in test * Linting again * put Bug fixes back in whatsnew * doc improvements * save the file first * adjust colors * figure nidges * figure nidges * Update docs/examples/snow-detection/snow-mode.py * small edits * Apply suggestions from code review Suggestions from review Co-authored-by: Kevin Anderson * overhaul example, remove horizon * edits, I forget what * major edits to example * yet more edits * lint * Update docs/api.rst * review comments --------- Co-authored-by: eccoope <125493409+eccoope@users.noreply.github.com> Co-authored-by: Emma Cooper Co-authored-by: Kevin Anderson --- docs/api.rst | 15 +- docs/examples/snow-detection/README.rst | 4 + docs/examples/snow-detection/snow-mode.py | 564 +++++++++++++++++++++ docs/index.rst | 2 + docs/whatsnew/0.2.1.rst | 13 +- pvanalytics/data/snow_data.csv | 577 ++++++++++++++++++++++ pvanalytics/data/snow_snowfall.csv | 7 + pvanalytics/features/snow.py | 260 ++++++++++ pvanalytics/tests/features/test_snow.py | 77 +++ 9 files changed, 1514 insertions(+), 5 deletions(-) create mode 100644 docs/examples/snow-detection/README.rst create mode 100644 docs/examples/snow-detection/snow-mode.py create mode 100644 pvanalytics/data/snow_data.csv create mode 100644 pvanalytics/data/snow_snowfall.csv create mode 100644 pvanalytics/features/snow.py create mode 100644 pvanalytics/tests/features/test_snow.py diff --git a/docs/api.rst b/docs/api.rst index 78d482fa..fd1c9150 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -69,7 +69,7 @@ There is function for calculating the component sum for GHI, DHI, and DNI, and correcting for nighttime periods. Using this function, we can estimate one irradiance field using the two other irradiance fields. This can be useful for comparison, as well as to -calculate missing data fields. +calculate missing data fields. .. autosummary:: :toctree: generated/ @@ -269,6 +269,19 @@ Functions for labeling shadows. features.shading.fixed +Snow +---- + +Functions for identifying and quantifying the effects of snow. + +.. autosummary:: + :toctree: generated/ + + features.snow.get_irradiance_sapm + features.snow.get_irradiance_imp + features.snow.categorize + features.snow.get_transmission + System ====== diff --git a/docs/examples/snow-detection/README.rst b/docs/examples/snow-detection/README.rst new file mode 100644 index 00000000..43f93201 --- /dev/null +++ b/docs/examples/snow-detection/README.rst @@ -0,0 +1,4 @@ +Snow +---- + +Examples for identifying the effects of snow. \ No newline at end of file diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py new file mode 100644 index 00000000..280df69d --- /dev/null +++ b/docs/examples/snow-detection/snow-mode.py @@ -0,0 +1,564 @@ +""" +Quantifying the effects of snow cover +===================================== + +We classify the effect of snow on a PV system's DC array. Snow on an array's +modules may reduce string voltage and/or string current, by reducing or +blocking irradiance from reaching the cells. These effects may vary across +the array since snow cover may not be uniform. + +In this analysis, all differences between measured power and power modeled +from snow-free irradiance measurements are ascribed to the effects of snow. The +effect of snow is classified into one of five categories: + + * Mode 0: Indicates periods with enough opaque snow that the system is not + producing power. Specifically, Mode 0 is when the measured voltage is + below the lower bound of the inverter's MPPT range but the voltage + modeled using measured irradiance and ideal transmission is above the + lower bound of the inverter's MPPT range. + * Mode 1: Indicates periods when the system has non-uniform snow which + affects all strings. Mode 1 is assigned when both operating voltage and + current are reduced. Operating voltage is reduced when snow causes + mismatch. Current is decreased due to reduced transmission. + * Mode 2: Indicates periods when the system has non-uniform snow which + affects some strings, causing mismatch for some modules, + but not reducing light transmission for other modules. + * Mode 3: Indicates periods when the the system has snow that reduces + light transmission but doesn't create mismatch. Operating voltage is + consistent with snow-free conditions but current is reduced. + * Mode 4: Voltage and current are consistent with snow-free conditions. + + * Mode -1: Indicates periods when it is unknown if or how snow impacts + power output. Mode -1 includes periods when: + + 1. Voltage modeled using measured irradiance and ideal transmission + is outside the inverter's MPPT range, OR + 2. Measured voltage exceeds the upper bound of the inverter's MPPT + algorithm. + +The procedure involves four steps: + 1. Model the module's maximum power current (Imp) and voltage (Vmp) + assuming that all the measured POA irradiance reaches the module's + cells. + 2. Use the modeled Imp and measured Imp, determine the fraction of + plane-of-array irradiance that reaches the module's cells. This fraction + is called the transmittance. + 3. Model the Vmp that would result from the POA irradiance reduced by + the transmittance. + 4. Classify the effect of snow using the ratio of modeled Vmp (from step 3) + and measured Vmp. +We demonstrate this analysis using measurements made at the combiner boxes +for a utility-scale system. + +""" + +# %% Import packages + +import pathlib +import pandas as pd +import numpy as np + +import pvlib +import matplotlib.pyplot as plt +import matplotlib.dates as mdates +import matplotlib.patches as mpatches +from matplotlib.lines import Line2D + +import pvanalytics + +# Functions needed for the analysis procedure +from pvanalytics.features import snow + +pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent + +# %% +# Read in 15-minute DC voltage, DC current and AC power data. +# DC voltage and DC current are measured at the input to the inverter from +# one combiner box. AC power is measured at the inverter output. +# Module temperature is collected by a back-of-module sensor. +# Plane-of-array irradiance data is collected by a heated pyranometer. +# Data sample was provided by an electric utility. Solar position and other +# data were added by Sandia to avoid publishing a geographic location. + +# Load in utility data +data_file = pvanalytics_dir / 'data' / 'snow_data.csv' +data = pd.read_csv(data_file, index_col='Timestamp', parse_dates=True) + +# Explore utility datatset +print('Utility-scale dataset') +print('Start: {}'.format(data.index[0])) +print('End: {}'.format(data.index[-1])) +print('Columns : ' + ', '.join(data.columns)) + +voltage_col = 'INV1 CB2 Voltage [V]' +power_col = 'INV1 AC Power [kW]' +current_col = 'INV1 CB2 Current [A]' + + +# %% +# Retrieve and print system inverter specs and DC electrical configuration + +cec_inverter_db = pvlib.pvsystem.retrieve_sam('CECInverter') +my_inverter = cec_inverter_db["Yaskawa_Solectria_Solar__PVI_60TL_480__480V_"] + +max_ac_power = my_inverter['Paco']*0.001 # convert from W to kW +mppt_low_voltage = my_inverter['Mppt_low'] # [V] +mppt_high_voltage = my_inverter['Mppt_high'] # [V] + +print(f"Inverter AC power rating: {max_ac_power} kW") +print(f"Inverter MPPT range: {mppt_low_voltage} V - {mppt_high_voltage} V") + +num_str_per_cb = 4 +num_mods_per_str = 18 + + +# %% +# Plot AC power relative to inverter nameplate limits. We are looking for +# periods of clipping, as these values are outside of MPP operating +# conditions. In these data, there is no clipping so no need to filter +# points out. + +fig, ax = plt.subplots(figsize=(10, 6)) +ax.xaxis.set_major_locator(mdates.DayLocator(interval=1)) +ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d')) +ax.plot(data[power_col], '.-', alpha=0.5, fillstyle='full', + label='AC Power [kW]') +ax.axhline(max_ac_power, c='r', ls='--') +ax.text(0.02, max_ac_power - 5, 'Maximum AC power: {} kW'.format(max_ac_power), + transform=ax.get_yaxis_transform()) +ax.set_xlabel('Date', fontsize='large') +ax.set_ylabel('AC Power [kW]', fontsize='large') +ax.legend() +fig.tight_layout() +plt.show() + +# %% +# Model DC voltage and power. Here we use the SAPM. Alternatively, one +# could use a single diode model. + +# SAPM coefficients derived from data from CFV Solar Test Laboratory, 2013. +sapm_coeffs = { + "Cells_in_Series": 72, + "Isco": 9.36992857142857, + "Voco": 46.78626811224489, + "Impo": 8.895117736670294, + "Vmpo": 37.88508962264151, + "Aisc": 0.0002, + "Aimp": -0.0004, + "C0": 1.0145, + "C1": -0.0145, + "Bvoco": -0.1205, + "Mbvoc": 0, + "Bvmpo": -0.1337, + "Mbvmp": 0, + "N": 1.0925, + "C2": -0.4647, + "C3": -11.900781, + "FD": 1, + "A": -3.4247, + "B": -0.0951, + "C4": np.nan, + "C5": np.nan, + "IXO": np.nan, + "IXXO": np.nan, + "C6": np.nan, + "C7": np.nan, + } + +# Model cell temperature using the SAPM model. + +irrad_ref = 1000 +data['Cell Temp [C]'] = pvlib.temperature.sapm_cell_from_module( + data['Module Temp [C]'], data['POA [W/m²]'], deltaT=3) + +# %% +# Demonstrate the transmission calculation and plot the result. + +# We scale measured current to that of a single string, assuming +# that all strings have the same current. + +string_current = data['INV1 CB2 Current [A]'] / num_str_per_cb + +# Use SAPM to model effective irradiance from single-string current. + + +modeled_e_e1 = snow.get_irradiance_sapm( + data['Cell Temp [C]'], string_current, sapm_coeffs['Impo'], + sapm_coeffs['C0'], sapm_coeffs['C1'], sapm_coeffs['Aimp']) + +T1 = snow.get_transmission(data['POA [W/m²]'], modeled_e_e1, string_current) + + +fig, ax = plt.subplots(figsize=(10, 6)) +date_form = mdates.DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) + +ax.plot(T1, '.-', alpha=0.5, c='b', fillstyle='full') + +ax.set_ylabel('Transmission', fontsize='large') +ax.set_xlabel('Date', fontsize='large') +fig.tight_layout() +plt.show() + +# %% +# Visualize measured and modeled DC voltage. + +# Model DC output of a single module without the effect of snow. +# Here we use the pyranometer irradiance. +model_no_snow = pvlib.pvsystem.sapm(data['POA [W/m²]'], + data['Cell Temp [C]'], + sapm_coeffs) + +# Replaced modeled voltage with NaN when no voltage was measured to make +# comparision between modeled and measured easier. + +model_no_snow.loc[data['INV1 CB2 Voltage [V]'].isna(), 'v_mp'] = np.nan + +# Scale modeled Vmp to that of a string +modeled_vmp_no_snow = model_no_snow['v_mp'] * num_mods_per_str + + +# Model DC output of a single module with the effect of snow. +# Here we use the pyranmeter irradiance reduced by the estimated transmission. +model_with_snow = pvlib.pvsystem.sapm(data['POA [W/m²]'] * T1, + data['Cell Temp [C]'], + sapm_coeffs) + +# Scale modeled Vmp to that of a string +modeled_vmp_with_snow = model_with_snow['v_mp'] * num_mods_per_str + +fig, ax = plt.subplots(figsize=(10, 6)) +date_form = mdates.DateFormatter("%H:%M") +ax.xaxis.set_major_formatter(date_form) + +ax.plot(modeled_vmp_no_snow, '.-', c='b', fillstyle='full', label='No snow') +ax.plot(modeled_vmp_with_snow, '.-', c='r', fillstyle='full', + label='With snow') +ax.scatter(data.index, data[voltage_col], s=3, c='k', label='Measured') + +ax.xaxis.set_major_locator(mdates.DayLocator(interval=1)) +ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d')) + +ax.axhline(mppt_high_voltage, c='r', ls='--') +ax.text(0.02, mppt_high_voltage - 30, + 'Maximum MPPT voltage: {} V'.format(mppt_high_voltage), + transform=ax.get_yaxis_transform()) +ax.axhline(mppt_low_voltage, c='g', ls='--') +ax.text(0.02, mppt_low_voltage + 20, + 'Minimum MPPT voltage: {} V'.format(mppt_low_voltage), + transform=ax.get_yaxis_transform()) + +ax.legend(fontsize='large') +ax.set_ylabel('Voltage [V]', fontsize='large') +ax.set_xlabel('Date', fontsize='large') + +fig.tight_layout() +plt.show() + +# %% +# We write a function to assign snow categories, so that we could loop over +# additional combiner boxes. + + +def assign_snow_modes(voltage, current, temp_cell, effective_irradiance, + coeffs, min_dcv, max_dcv, threshold_vratio, + threshold_transmission, num_mods_per_str, + num_str_per_cb, temp_ref=25, irrad_ref=1000): + + ''' + Categorizes each data point as Mode 0-4 based on transmission and the + ratio between measured and modeled votlage. + + This function illustrates a workflow to get to snow mode: + + 1. Model effective irradiance based on measured current using the SAPM. + 2. Calculate transmission. + 3. Model voltage from measured irradiance reduced by transmission. Assume + that all strings are producing voltage. + 4. Determine the snow mode for each point in time. + + Parameters + ---------- + voltage : array + Voltage [V] measured at inverter. + current : array + Current [A] measured at combiner. + temp_cell : array + Cell temperature. [degrees C] + effective_irradiance : array + Snow-free POA irradiance measured by a heated pyranometer. [W/m²] + coeffs : dict + A dict defining the SAPM parameters, used for pvlib.pvsystem.sapm. + min_dcv : float + The lower voltage bound on the inverter's maximum power point + tracking (MPPT) algorithm. [V] + max_dcv : numeric + Upper bound voltage for the MPPT algorithm. [V] + threshold_vratio : float + The lower bound on vratio that is found under snow-free conditions, + determined empirically. + threshold_transmission : float + The lower bound on transmission that is found under snow-free + conditions, determined empirically. + num_mods_per_str : int + Number of modules in series in each string. + num_str_per_cb : int + Number of strings in parallel at the combiner. + + Returns + ------- + my_dict : dict + Keys are ``'transmission'``, + ``'modeled_voltage_with_calculated_transmission'``, + ``'modeled_voltage_with_ideal_transmission'``, + ``'vmp_ratio'``, and ``'mode'``. + + 'transmission' is the fracton of POA irradiance that is estimated + to reach the cells, after being reduced by snow cover. + + 'modeled_voltage_with_calculated_transmission' is the Vmp modeled + with POA irradiance x transmission + + 'modeled_voltage_with_ideal_transmission' is the Vmp modeled with + POA irradiance and assuming transmission is 1. + + 'vmp_ratio' is modeled_voltage_with_calculated_transmission divided + by measured voltage. + + 'mode' is the snow mode assigned. + See :py:func:`pvanalytics.features.snow.categorize` + + ''' + + # Calculate transmission + modeled_e_e = snow.get_irradiance_sapm( + temp_cell, current / num_str_per_cb, coeffs['Impo'], + coeffs['C0'], coeffs['C1'], coeffs['Aimp']) + + transmission = snow.get_transmission(effective_irradiance, modeled_e_e, + current / num_str_per_cb) + + # Model voltage for a single module, scale up to array + modeled_voltage_with_calculated_transmission =\ + pvlib.pvsystem.sapm(effective_irradiance*transmission, temp_cell, + coeffs)['v_mp'] * num_mods_per_str + modeled_voltage_with_ideal_transmission =\ + pvlib.pvsystem.sapm(effective_irradiance, temp_cell, + coeffs)['v_mp'] * num_mods_per_str + + mode, vmp_ratio = snow.categorize( + transmission, voltage, modeled_voltage_with_calculated_transmission, + modeled_voltage_with_ideal_transmission, min_dcv, max_dcv, + threshold_vratio, threshold_transmission) + + result = pd.DataFrame( + index=voltage.index, + data={ + 'transmission': transmission, + 'modeled_voltage_with_calculated_transmission': + modeled_voltage_with_calculated_transmission, + 'modeled_voltage_with_ideal_transmission': + modeled_voltage_with_ideal_transmission, + 'vmp_ratio': vmp_ratio, + 'mode': mode}) + + return result + + +# %% +# Demonstrate transmission, modeled voltage calculation and mode categorization +# on voltage, current pair. + +# threshold_vratio and threshold_transmission were empirically determined +# using data collected on this system over five summers. Transmission and +# vratio were calculated for all data collected in the summer (under the +# assumption that there was no snow present at this time), and histograms +# of the spread of transmission and vratio values were made. +# threshold_vratio is the lower bound on the 95th percentile of all vratios +# calculated for summer data - as in, 95% of all data collected in the summer +# has a vratio that is higher than threshold_vratio. threshold_transmission +# is the same value, but for transmission calculated from data recorded +# during the summer. + +threshold_vratio = 0.933 +threshold_transmission = 0.598 + +# Calculate the transmission, model the voltage, and categorize snow mode. +# Use the SAPM to calculate transmission and model the voltage. + +inv_cb = 'INV1 CB2' + +snow_results = assign_snow_modes(data[voltage_col], data[current_col], + data['Cell Temp [C]'], + data['POA [W/m²]'], sapm_coeffs, + mppt_low_voltage, mppt_high_voltage, + threshold_vratio, + threshold_transmission, + num_mods_per_str, + num_str_per_cb) + +# Plot transmission + +fig, ax = plt.subplots(figsize=(10, 6)) +date_form = mdates.DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) + +ax.plot(snow_results['transmission'], '.-', + label='INV1 CB2 Transmission') +ax.set_xlabel('Date', fontsize='large') +ax.legend() +fig.tight_layout() +plt.show() + +# %% +# Look at voltage ratio. + +fig, ax = plt.subplots(figsize=(10, 6)) +date_form = mdates.DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) + +ax.plot(snow_results['vmp_ratio'], label='INV1 CB2 Voltage Ratio') + +ax.set_xlabel('Date', fontsize='large') +ax.set_ylabel('Voltage Ratio (measured/modeled)', fontsize='large') +ax.axhline(1, c='k', alpha=0.1, ls='--') +ax.legend() +fig.tight_layout() +plt.show() + +# %% +# Calculate total DC power loss as the difference between modeled and measured +# power. Total power loss includes losses caused by snow and by other factors, +# e.g., shading from structures. + +model_results = pvlib.pvsystem.sapm(data['POA [W/m²]'], + data['Cell Temp [C]'], + sapm_coeffs) + + +modeled_power = model_results['p_mp'] * num_str_per_cb * num_mods_per_str +measured_power = data['INV1 CB2 Voltage [V]'] * data['INV1 CB2 Current [A]'] +loss_total = np.maximum(modeled_power - measured_power, 0) + +# Calculate snow losses. Snow loss occurs when the mode is 0, 1, 2, or 3. +# When the snow loss occurs we assume that all the DC power loss is due to +# snow. +snow_loss_filter = snow_results['mode'].isin([0, 1, 2, 3]) +loss_snow = loss_total.copy() +loss_snow[~snow_loss_filter] = 0.0 + + +# %% +# Plot measured and modeled power, and show snow mode with colored bars. + +N = 6 +alpha = 0.5 +cmap = plt.get_cmap('plasma', N) + +fig, ax = plt.subplots(figsize=(10, 6)) +date_form = mdates.DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) +exclude = modeled_power.isna() | snow_results['mode'].isna() +temp = data[~exclude] + +# Plot each day individually so we are not exaggerating losses +days_mapped = temp.index.map(lambda x: x.date()) +days = np.unique(temp.index.date) +grouped = temp.groupby(temp.index.date) + +for d in days: + temp_grouped = grouped.get_group(d) + model_power = modeled_power[temp_grouped.index] + meas_power = measured_power[temp_grouped.index] + mode = snow_results['mode'][temp_grouped.index] + ax.plot(model_power, c='k', ls='--') + ax.plot(meas_power, c='k') + ax.fill_between(temp_grouped.index, meas_power, + model_power, color='k', alpha=alpha) + + chng_pts = np.ravel(np.where(mode.values[:-1] + - mode.values[1:] != 0)) + + if len(chng_pts) == 0: + ax.axvspan(temp_grouped.index[0], temp_grouped.index[-1], + color=cmap.colors[mode.at[temp_grouped.index[-1]]], + alpha=alpha) + else: + set1 = np.append([0], chng_pts) + set2 = np.append(chng_pts, [-1]) + + for start, end in zip(set1, set2): + my_index = temp_grouped.index[start:end] + ax.axvspan( + temp_grouped.index[start], temp_grouped.index[end], + color=cmap.colors[mode.at[temp_grouped.index[end]]], + alpha=alpha, ec=None) + +# Add different colored intervals to legend +handles, labels = ax.get_legend_handles_labels() + +modeled_line = Line2D([0], [0], label='Modeled power', color='k', ls='--') +measured_line = Line2D([0], [0], label='Measured power', color='k') +handles.append(measured_line) +handles.append(modeled_line) + +for i in [-1, 0, 1, 2, 3, 4]: # modes + color_idx = i + 1 + my_patch = mpatches.Patch(color=cmap.colors[color_idx], label=f'Mode {i}', + alpha=alpha) + handles.append(my_patch) + +ax.set_xlabel('Date', fontsize='large') +ax.set_ylabel('DC Power [W]', fontsize='large') +ax.legend(handles=handles, fontsize='large', loc='upper left') +ax.set_title('Snow modes for INV1 CB2', + fontsize='large') +fig.tight_layout() +plt.show() + +# %% +# Calculate daily DC energy loss due to snow as a percentage of potential +# (modeled) DC power. + +# DataFrame so that we can group by days. +loss_df = pd.DataFrame(data={'modeled_power': modeled_power, + 'loss_snow': loss_snow}) + +# Read in daily snowfall is measured at 7:00 am of each day. +# Daily snowfall will be plotted beside losses, for context. + +snowfall_file = pvanalytics_dir / 'data' / 'snow_snowfall.csv' +snowfall = pd.read_csv(snowfall_file, index_col='DATE', parse_dates=True) +snowfall['SNOW'] *= 1/(10*2.54) # convert from mm depth to inches +snowfall.index = snowfall.index + pd.Timedelta('7H') + + +days_mapped = loss_df.index.map(lambda x: x.date()) +days = np.unique(days_mapped) +loss_df_gped = loss_df.groupby(days_mapped) + +snow_loss_daily = pd.Series(index=days, dtype=float) + +for d in days: + temp = loss_df_gped.get_group(d) + snow_loss_daily.at[d] = 100 * temp['loss_snow'].sum() / \ + temp['modeled_power'].sum() + +# Plot daily DC energy loss and daily snowfall totals. +fig, ax = plt.subplots(figsize=(10, 6)) +ax2 = ax.twinx() +snow_loss_daily.plot(kind='bar', ax=ax, width=-0.4, align='edge', + label='Snow loss (%)') +snowfall['SNOW'].plot(kind='bar', ax=ax2, width=0.4, alpha=0.2, + align='edge', + label='Snow fall in prior 24 hours') + +ax.legend(loc='upper left') +ax2.legend(loc='upper right') +ax.set_ylabel('DC energy loss [%]', fontsize='large') +ax2.set_ylabel('Inches') +date_form = mdates.DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) +ax.set_title('Daily energy loss and snowfall', fontsize='large') +fig.tight_layout() +plt.show() diff --git a/docs/index.rst b/docs/index.rst index 305dcb31..be4e5b43 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -57,6 +57,8 @@ library status. features of data rather than properties of the system that produced the data. - :py:mod:`features.shading` functions for identifying shadows. + - :py:mod:`features.snow` functions for identifying snow coverage and + classifying the effects of snow coverage. - :py:mod:`system` identification of PV system characteristics from data (e.g. nameplate power, tilt, azimuth) diff --git a/docs/whatsnew/0.2.1.rst b/docs/whatsnew/0.2.1.rst index b54d3aef..e4432e00 100644 --- a/docs/whatsnew/0.2.1.rst +++ b/docs/whatsnew/0.2.1.rst @@ -1,12 +1,15 @@ .. _whatsnew_021: -0.2.1 (not yet released) ------------------------- +Breaking Changes +~~~~~~~~~~~~~~~~ Enhancements ~~~~~~~~~~~~ * Compatibility with numpy 2.0. (:pull:`211`) +* Added functions :py:func:`~pvanalytics.features.snow.categorize` + and :py:func:`~pvanalytics.features.snow.get_transmission` to categorize + data by the effect of snow on DC voltage and current. (:pull:`209`) Bug Fixes @@ -20,12 +23,14 @@ Requirements Documentation ~~~~~~~~~~~~~ - +* Added a gallery example for snow effects categorization (:pull:`209`) Testing ~~~~~~~ - Contributors ~~~~~~~~~~~~ +* Cliff Hansen (:ghuser:`cwhanse`) +* Emma Cooper (:ghuser:`eccoope`) +* Kevin Anderson (:ghuser:`kandersolar`) diff --git a/pvanalytics/data/snow_data.csv b/pvanalytics/data/snow_data.csv new file mode 100644 index 00000000..bbc081a5 --- /dev/null +++ b/pvanalytics/data/snow_data.csv @@ -0,0 +1,577 @@ +Timestamp,POA [W/m²],INV1 CB2 Voltage [V],INV1 CB2 Current [A],INV1 AC Power [kW],Module Temp [C],Ambient Temp [C],apparent_zenith,zenith,apparent_elevation,elevation,azimuth,equation_of_time,aoi +1/5/2022 0:00,1.069027,,,,-11.67601,-8.526217,160.0099802,160.0099802,-70.0099802,-70.0099802,3.164023188,-5.244508919,156.3326313 +1/5/2022 0:15,1.218347,,,,-10.71838,-7.358494,159.6165864,159.6165864,-69.61658636,-69.61658636,13.13832831,-5.249180892,159.6415873 +1/5/2022 0:30,0.5797986,,,,-9.996516,-6.536161,158.7670349,158.7670349,-68.76703493,-68.76703493,22.59251819,-5.253852055,162.8599405 +1/5/2022 0:45,0.6020421,,,,-9.189205,-5.791483,157.5139686,157.5139686,-67.51396865,-67.51396865,31.26630312,-5.258522407,165.9233878 +1/5/2022 1:00,0.2589272,,,,-8.529516,-5.298972,155.9217677,155.9217677,-65.92176773,-65.92176773,39.04886195,-5.263191949,168.7032133 +1/5/2022 1:15,0.02859372,,,,-8.239856,-5.170183,154.0546547,154.0546547,-64.05465466,-64.05465466,45.94790818,-5.267860679,170.9328509 +1/5/2022 1:30,0.02541689,,,,-8.140345,-4.9114,151.9697154,151.9697154,-61.96971537,-61.96971537,52.04068144,-5.272528597,172.1285747 +1/5/2022 1:45,-0.08419616,,,,-8.281861,-5.063289,149.7144041,149.7144041,-59.71440411,-59.71440411,57.43305431,-5.277195701,171.8228698 +1/5/2022 2:00,-0.393975,,,,-8.922639,-5.946322,147.3267452,147.3267452,-57.32674522,-57.32674522,62.23423946,-5.281861993,170.1546961 +1/5/2022 2:15,-0.3066016,,,,-9.644333,-6.723111,144.8366899,144.8366899,-54.83668992,-54.83668992,66.54437534,-5.28652747,167.6654856 +1/5/2022 2:30,0.003177027,,,,-10.00414,-7.043106,142.2677294,142.2677294,-52.26772938,-52.26772938,70.4500626,-5.291192133,164.7529653 +1/5/2022 2:45,0.1096092,,,,-10.09863,-7.008945,139.6383646,139.6383646,-49.63836461,-49.63836461,74.02398846,-5.29585598,161.6182219 +1/5/2022 3:00,0.1064322,,,,-10.28779,-7.137044,136.9633118,136.9633118,-46.96331177,-46.96331177,77.32630553,-5.300519011,158.3587062 +1/5/2022 3:15,0,,,,-10.70247,-7.4041,134.2544414,134.2544414,-44.25444143,-44.25444143,80.40655734,-5.305181226,155.0244272 +1/5/2022 3:30,0,,,,-11.10306,-7.509205,131.5214919,131.5214919,-41.52149194,-41.52149194,83.30559608,-5.309842624,151.6430417 +1/5/2022 3:45,0,,,,-11.41071,-7.805861,128.7726081,128.7726081,-38.77260809,-38.77260809,86.05727438,-5.314503204,148.2309676 +1/5/2022 4:00,0,,,,-11.81071,-8.3981,126.0147472,126.0147472,-36.01474716,-36.01474716,88.68985754,-5.319162966,144.7985898 +1/5/2022 4:15,0,,,,-12.17561,-8.920567,123.2539857,123.2539857,-33.25398571,-33.25398571,91.22716995,-5.323821909,141.352862 +1/5/2022 4:30,0,,,,-12.04299,-8.910183,120.4957554,120.4957554,-30.4957554,-30.4957554,93.68951073,-5.328480032,137.8986929 +1/5/2022 4:45,0.0873676,,,,-11.5078,-8.678711,117.745026,117.745026,-27.74502603,-27.74502603,96.09438101,-5.333137335,134.4397265 +1/5/2022 5:00,0.0873676,,,,-10.52836,-8.186017,115.006449,115.006449,-25.00644895,-25.00644895,98.45706135,-5.337793817,130.9788028 +1/5/2022 5:15,0.3177018,,,,-9.649034,-7.738228,112.2844733,112.2844733,-22.28447328,-22.28447328,100.7910688,-5.342449479,127.5182442 +1/5/2022 5:30,1.345465,,,,-8.792339,-7.476972,109.5834414,109.5834414,-19.58344138,-19.58344138,103.1085198,-5.347104318,124.0600414 +1/5/2022 5:45,2.12069,,,,-7.662806,-7.020505,106.907668,106.907668,-16.90766795,-16.90766795,105.4204193,-5.351758334,120.6059778 +1/5/2022 6:00,2.10169,,,,-6.689061,-6.506834,104.2615091,104.2615091,-14.26150905,-14.26150905,107.7368895,-5.356411528,117.1577195 +1/5/2022 6:15,1.979401,,,,-5.890139,-5.942461,101.6494226,101.6494226,-11.6494226,-11.6494226,110.0673501,-5.361063898,113.716882 +1/5/2022 6:30,1.512287,,,,-5.264884,-5.4799,99.07602147,99.07602147,-9.076021475,-9.076021475,112.4206586,-5.365715443,110.2850834 +1/5/2022 6:45,1.440562,,,,-4.775061,-5.103017,96.54612261,96.54612261,-6.546122613,-6.546122613,114.8052157,-5.370366163,106.8639894 +1/5/2022 7:00,2.279092,256.2846,0,0,-4.283155,-4.373294,94.06479171,94.06479171,-4.064791715,-4.064791715,117.2290397,-5.375016058,103.4553554 +1/5/2022 7:15,2.822341,387.1234,0.009913795,0.03965517,-3.770317,-3.570317,91.63738283,91.63738283,-1.637382831,-1.637382831,119.6998123,-5.379665127,100.0610659 +1/5/2022 7:30,3.26234,496.5162,0.05814388,0.2396552,-3.314744,-2.990978,88.88434591,89.26957455,1.115654086,0.730425447,122.224897,-5.384313369,96.6831757 +1/5/2022 7:45,4.394756,502.8697,0.09823009,0.4480469,-2.867678,-2.717878,86.74411978,86.96740093,3.255880221,3.032599069,124.8113275,-5.388960784,93.32395469 +1/5/2022 8:00,6.341689,530.4985,0.1273504,0.5377905,-2.22215,-2.649089,84.58420803,84.73727491,5.415791971,5.262725087,127.46577,-5.39360737,89.9859364 +1/5/2022 8:15,9.50158,561.6168,0.2346538,0.7470469,-1.911483,-2.950828,82.47008808,82.58600432,7.529911917,7.413995675,130.1944527,-5.398253129,86.67197452 +1/5/2022 8:30,17.47532,602.7585,0.4330846,1.234256,-1.847694,-3.278228,80.42740483,80.52079695,9.572595166,9.479203048,133.0030643,-5.402898057,83.38530861 +1/5/2022 8:45,27.68384,637.2244,0.7064382,1.875128,-1.20765,-3.001067,78.47080161,78.54925099,11.52919839,11.45074901,135.8966212,-5.407542157,80.12963996 +1/5/2022 9:00,54.13859,673.6044,1.579364,3.752917,-0.5778555,-2.383795,76.61142434,76.6793292,13.38857566,13.3206708,138.8793022,-5.412185426,76.90922295 +1/5/2022 9:15,82.93109,704.5355,2.593245,5.989615,-0.2303111,-1.635106,74.85917941,74.9193122,15.14082059,15.0806878,141.9542537,-5.416827864,73.72897367 +1/5/2022 9:30,85.68211,706.6226,2.719244,6.307815,-0.05290556,-1.241533,73.22350256,73.27772668,16.77649744,16.72227332,145.1233734,-5.42146947,70.59459794 +1/5/2022 9:45,81.89581,697.9531,2.58131,5.977227,-0.04693333,-1.089439,71.71361241,71.76324678,18.28638759,18.23675322,148.3870801,-5.426110245,67.51274519 +1/5/2022 10:00,95.24964,703.9135,2.981795,6.816117,0.08261666,-0.8457611,70.3385461,70.38456601,19.6614539,19.61543399,151.7440837,-5.430750186,64.49119034 +1/5/2022 10:15,112.4451,709.1207,3.439897,7.802028,1.059355,-0.5234833,69.10708379,69.15023865,20.89291621,20.84976135,155.191178,-5.435389295,61.53904574 +1/5/2022 10:30,90.24828,685.5192,2.701441,6.158053,2.073883,-0.2815389,68.02760802,68.06849424,21.97239198,21.93150576,158.723076,-5.440027569,58.667007 +1/5/2022 10:45,74.26115,672.4007,2.174359,4.964887,2.179517,-0.1622222,67.10792152,67.14702967,22.89207848,22.85297033,162.3323147,-5.444665009,55.88762932 +1/5/2022 11:00,83.69518,683.1378,2.574858,5.837101,2.522033,0.09223889,66.3550408,66.39278752,23.6449592,23.60721248,166.0092571,-5.449301614,53.21562444 +1/5/2022 11:15,99.909,696.4601,3.292742,7.416766,3.147772,0.3917778,65.77498303,65.81173347,24.22501697,24.18826653,169.7422076,-5.453937383,50.668161 +1/5/2022 11:30,98.77921,693.6614,3.262419,7.335231,3.411294,0.6336111,65.37256281,65.40864715,24.62743719,24.59135285,173.5176551,-5.458572316,48.26512977 +1/5/2022 11:45,83.96643,682.2324,2.69451,6.107737,3.670956,0.9635667,65.15121599,65.1869423,24.84878401,24.8130577,177.3206424,-5.463206412,46.02931048 +1/5/2022 12:00,75.41232,674.7064,2.398623,5.462979,3.766117,1.2543,65.11286688,65.14853175,24.88713312,24.85146825,181.1352427,-5.467839671,43.98634836 +1/5/2022 12:15,60.06609,663.1763,1.897936,4.347672,3.567539,1.436278,65.25785116,65.29374924,24.74214884,24.70625076,184.9451127,-5.472472091,42.16441147 +1/5/2022 12:30,60.27884,662.4284,1.920557,4.386229,3.597144,1.699072,65.58490222,65.62133555,24.41509778,24.37866445,188.7340819,-5.477103673,40.59338117 +1/5/2022 12:45,55.42746,659.1337,1.733645,3.990028,3.739917,2.029994,66.0912023,66.12849042,23.9087977,23.87150958,192.486725,-5.481734416,39.30345001 +1/5/2022 13:00,60.47979,663.8647,1.877099,4.311738,3.987206,2.356395,66.77249324,66.81098491,23.22750676,23.18901509,196.1888756,-5.486364319,38.32308946 +1/5/2022 13:15,57.50068,661.16,1.802328,4.182762,4.210311,2.586161,67.62323636,67.66332436,22.37676364,22.33667564,199.8280439,-5.490993381,37.67653018 +1/5/2022 13:30,35.39885,646.2947,1.074775,2.640988,3.990505,2.598294,68.63680638,68.67894713,21.36319362,21.32105287,203.3937128,-5.495621602,37.38113534 +1/5/2022 13:45,28.48105,637.3043,0.8426348,2.128207,3.593911,2.434733,69.80570244,69.8504434,20.19429756,20.1495566,206.8775064,-5.500248982,37.44523577 +1/5/2022 14:00,20.0643,606.9224,0.5859998,1.553771,3.281367,2.274872,71.12175953,71.16977904,18.87824047,18.83022096,210.2732375,-5.50487552,37.86700599 +1/5/2022 14:15,12.03206,576.1127,0.338365,1.001472,2.953317,2.202833,72.57634264,72.62851036,17.42365736,17.37148964,213.5768501,-5.509501215,38.63471555 +1/5/2022 14:30,11.54156,573.7137,0.3043655,0.9327453,2.747917,2.1629,74.16050709,74.21797976,15.83949291,15.78202024,216.7862801,-5.514126066,39.72827872 +1/5/2022 14:45,11.7781,569.4493,0.3009109,0.9341089,2.681978,2.153795,75.8651053,75.92948624,14.1348947,14.07051376,219.9012636,-5.518750074,41.12165469 +1/5/2022 15:00,10.06,560.8682,0.2601818,0.8278282,2.672578,2.213839,77.68080531,77.7544261,12.31919469,12.2455739,222.9231137,-5.523373237,42.78549423 +1/5/2022 15:15,7.197282,540.0151,0.1728114,0.6499579,2.686544,2.323233,79.59794876,79.6844036,10.40205124,10.3155964,225.8544879,-5.527995555,44.68951649 +1/5/2022 15:30,5.768328,514.1613,0.1070335,0.5219374,2.7563,2.476383,81.60605832,81.71131395,8.393941679,8.288686046,228.6991653,-5.532617027,46.8043233 +1/5/2022 15:45,5.069704,493.3478,0.1075626,0.4881411,2.870844,2.608283,83.69241156,83.82739972,6.30758844,6.172600281,231.4618417,-5.537237653,49.1025799 +1/5/2022 16:00,3.499427,502.7438,0.06652238,0.2983333,3.047011,2.931589,85.83759391,86.02528487,4.162406094,3.974715128,234.1479513,-5.541857432,51.55964113 +1/5/2022 16:15,1.945011,434.3824,0.01136363,0.065,3.282778,3.387633,87.99919082,88.29799103,2.000809179,1.70200897,236.7635209,-5.546476363,54.15376525 +1/5/2022 16:30,0.5525505,340.6613,0,0,3.454261,3.5978,90.06162196,90.63893768,-0.061621963,-0.638937682,239.315055,-5.551094447,56.86605663 +1/5/2022 16:45,0,,,,3.559789,3.683561,93.04193034,93.04193034,-3.041930344,-3.041930344,241.8094527,-5.555711682,59.68025419 +1/5/2022 17:00,0,,,,3.618305,3.767767,95.50114027,95.50114027,-5.501140274,-5.501140274,244.2539569,-5.560328067,62.58244916 +1/5/2022 17:15,0,,,,3.639333,3.789972,98.01107599,98.01107599,-8.011075994,-8.011075994,246.6561323,-5.564943603,65.56078245 +1/5/2022 17:30,0,,,,3.5844,3.761444,100.566549,100.566549,-10.56654901,-10.56654901,249.0238707,-5.569558289,68.60515264 +1/5/2022 17:45,0,,,,3.468411,3.7482,103.1626359,103.1626359,-13.16263587,-13.16263587,251.3654271,-5.574172123,71.70695119 +1/5/2022 18:00,0,,,,3.353839,3.74555,105.7946349,105.7946349,-15.79463491,-15.79463491,253.6894812,-5.578785107,74.85882824 +1/5/2022 18:15,0,,,,3.341539,3.734205,108.4580189,108.4580189,-18.45801889,-18.45801889,256.0052303,-5.583397237,78.05449088 +1/5/2022 18:30,0,,,,3.3907,3.7541,111.1483837,111.1483837,-21.14838375,-21.14838375,258.3225149,-5.588008515,81.28853285 +1/5/2022 18:45,0,,,,3.377056,3.73785,113.8613906,113.8613906,-23.86139061,-23.86139061,260.6519824,-5.59261894,84.55629 +1/5/2022 19:00,0,,,,3.361028,3.661195,116.5927002,116.5927002,-26.59270018,-26.59270018,263.0052944,-5.597228511,87.85371867 +1/5/2022 19:15,0,,,,3.371022,3.600578,119.3378982,119.3378982,-29.33789817,-29.33789817,265.3953899,-5.601837228,91.17729502 +1/5/2022 19:30,0,,,,3.375444,3.532639,122.092406,122.092406,-32.09240601,-32.09240601,267.836816,-5.60644509,94.52392911 +1/5/2022 19:45,0,,,,3.327011,3.430722,124.8513733,124.8513733,-34.85137329,-34.85137329,270.346143,-5.611052095,97.89089222 +1/5/2022 20:00,0,,,,3.144139,3.343006,127.6095461,127.6095461,-37.60954614,-37.60954614,272.9424885,-5.615658245,101.275756 +1/5/2022 20:15,0,,,,2.824372,3.250855,130.3611005,130.3611005,-40.36110046,-40.36110046,275.6481769,-5.620263538,104.6763388 +1/5/2022 20:30,0,,,,2.491167,3.118528,133.0994285,133.0994285,-43.09942852,-43.09942852,278.4895693,-5.624867974,108.0906579 +1/5/2022 20:45,0,,,,2.307678,3.000839,135.8168632,135.8168632,-45.81686321,-45.81686321,281.4981041,-5.629471551,111.5168881 +1/5/2022 21:00,0,,,,1.7709,2.888272,138.5043145,138.5043145,-48.50431447,-48.50431447,284.7115857,-5.634074271,114.9533208 +1/5/2022 21:15,0,,,,0.9201111,2.717283,141.1507886,141.1507886,-51.15078862,-51.15078862,288.175743,-5.638676131,118.3983237 +1/5/2022 21:30,0.06509745,,,,0.4537278,2.50225,143.7427523,143.7427523,-53.74275231,-53.74275231,291.9460388,-5.643277131,121.8503002 +1/5/2022 21:45,0.1349576,,,,0.6946833,2.38955,146.2632927,146.2632927,-56.26329269,-56.26329269,296.0895819,-5.647877272,125.3076418 +1/5/2022 22:00,0.1238432,,,,1.349,2.426222,148.6910297,148.6910297,-58.69102971,-58.69102971,300.6867509,-5.652476551,128.7686717 +1/5/2022 22:15,0.05398305,,,,1.658111,2.46515,150.9987618,150.9987618,-60.9987618,-60.9987618,305.8316263,-5.657074969,132.2315734 +1/5/2022 22:30,0,,,,1.763967,2.424556,153.1519076,153.1519076,-63.15190758,-63.15190758,311.6294226,-5.661672525,135.6942925 +1/5/2022 22:45,0,,,,1.856689,2.288389,155.1070126,155.1070126,-65.10701258,-65.10701258,318.1877443,-5.666269219,139.1543958 +1/5/2022 23:00,0,,,,1.776428,2.0909,156.8109898,156.8109898,-66.81098985,-66.81098985,325.5971129,-5.670865049,142.6088625 +1/5/2022 23:15,0,,,,1.535172,1.8706,158.2023623,158.2023623,-68.20236227,-68.20236227,333.8966969,-5.675460016,146.0537531 +1/5/2022 23:30,0,,,,1.226222,1.668444,159.2162637,159.2162637,-69.21626372,-69.21626372,343.0276065,-5.680054119,149.4836677 +1/5/2022 23:45,0,,,,0.9569556,1.491645,159.7943856,159.7943856,-69.79438564,-69.79438564,352.791736,-5.684647357,152.8908142 +1/6/2022 0:00,0,,,,0.8543167,1.358478,159.8983151,159.8983151,-69.8983151,-69.8983151,2.850582577,-5.689239729,156.2633153 +1/6/2022 0:15,0,,,,0.9645444,1.310061,159.5206818,159.5206818,-69.52068181,-69.52068181,12.78949135,-5.693831235,159.581949 +1/6/2022 0:30,0,,,,1.079178,1.24485,158.6875128,158.6875128,-68.6875128,-68.6875128,22.22564132,-5.698421875,162.81345 +1/6/2022 0:45,0,,,,1.060778,1.163022,157.4502224,157.4502224,-67.45022243,-67.45022243,30.89710642,-5.703011648,165.8957789 +1/6/2022 1:00,0,,,,0.8913778,0.9668722,155.872344,155.872344,-65.87234396,-65.87234396,38.6887511,-5.707600553,168.7041632 +1/6/2022 1:15,0,,,,0.6817,0.7114444,154.0176946,154.0176946,-64.01769456,-64.01769456,45.60363267,-5.71218859,170.9772092 +1/6/2022 1:30,0,,,,0.4881722,0.5320611,151.9432901,151.9432901,-61.94329006,-61.94329006,51.7153087,-5.716775758,172.228597 +1/6/2022 1:45,0.03334815,,,,0.1596667,0.3558556,149.6967072,149.6967072,-59.69670723,-59.69670723,57.12722889,-5.721362057,171.9652171 +1/6/2022 2:00,0.05716803,,,,0.001344444,0.3103889,147.3161755,147.3161755,-57.31617547,-57.31617547,61.94721819,-5.725947485,170.3098671 +1/6/2022 2:15,0.02381988,,,,0.01885555,0.2290167,144.8318681,144.8318681,-54.83186809,-54.83186809,66.27472768,-5.730532044,167.8178318 +1/6/2022 2:30,0.004763797,,,,-0.08493889,0.07783333,142.2674833,142.2674833,-52.26748331,-52.26748331,70.19609273,-5.735115731,164.8985503 +1/6/2022 2:45,0.0349345,,,,-0.3250833,-0.003361111,139.6417018,139.6417018,-49.64170179,-49.64170179,73.78396835,-5.739698546,161.7569403 +1/6/2022 3:00,0.0301707,,,,-0.6285222,-0.1409111,136.9693899,136.9693899,-46.96938989,-46.96938989,77.09859244,-5.74428049,158.4912929 +1/6/2022 3:15,0,,,,-0.7735777,-0.3065833,134.262541,134.262541,-44.26254103,-44.26254103,80.18964506,-5.74886156,155.151661 +1/6/2022 3:30,0,,,,-0.8563611,-0.5573056,131.5309929,131.5309929,-41.53099293,-41.53099293,83.09813033,-5.753441757,151.7655725 +1/6/2022 3:45,-0.870305,,,,-1.239194,-0.9946111,128.7829702,128.7829702,-38.78297016,-38.78297016,85.85805003,-5.75802108,148.3493045 +1/6/2022 4:00,-0.7924885,,,,-2.046611,-1.26925,126.0254938,126.0254938,-36.02549377,-36.02549377,88.49780732,-5.762599529,144.913123 +1/6/2022 4:15,0.150866,,,,-2.45495,-1.252161,123.2646911,123.2646911,-33.26469111,-33.26469111,91.04135004,-5.767177102,141.4638881 +1/6/2022 4:30,0.2318532,,,,-2.031011,-1.122422,120.506034,120.506034,-30.50603405,-30.50603405,93.50908601,-5.7717538,138.0064355 +1/6/2022 4:45,0.1588037,,,,-1.796811,-1.093739,117.7545241,117.7545241,-27.75452406,-27.75452406,95.91861128,-5.776329622,134.5443522 +1/6/2022 5:00,-0.1746864,,,,-2.581,-1.304094,115.0148372,115.0148372,-25.01483716,-25.01483716,98.28528904,-5.780904567,131.0804328 +1/6/2022 5:15,-0.1746864,,,,-3.530378,-1.726,112.2914414,112.2914414,-22.29144143,-22.29144143,100.6227084,-5.785478635,127.6169628 +1/6/2022 5:30,0.07146155,,,,-3.995489,-2.037511,109.5886934,109.5886934,-19.58869345,-19.58869345,102.9430492,-5.790051825,124.1559021 +1/6/2022 5:45,0.07146155,,,,-4.192728,-2.136161,106.9109183,106.9109183,-16.9109183,-16.9109183,105.2573723,-5.794624136,120.6990078 +1/6/2022 6:00,-0.4811659,,,,-4.746555,-2.377461,104.2624792,104.2624792,-14.26247918,-14.26247918,107.5758506,-5.799195569,117.2479226 +1/6/2022 6:15,-0.4811659,,,,-5.632017,-2.750128,101.6478386,101.6478386,-11.64783857,-11.64783857,109.9079496,-5.803766121,113.804241 +1/6/2022 6:30,0,,,,-6.101083,-3.141011,99.07161176,99.07161176,-9.071611763,-9.071611763,112.26257,-5.808335794,110.3695612 +1/6/2022 6:45,0.3683806,,,,-5.895072,-3.007511,96.53861652,96.53861652,-6.538616524,-6.538616524,114.6481538,-5.812904586,106.94553 +1/6/2022 7:00,1.753085,465.6378,0.05166665,0.2045833,-5.184039,-2.581906,94.0539182,94.0539182,-4.053918196,-4.053918196,117.0727599,-5.817472497,103.5338838 +1/6/2022 7:15,7.846389,579.4651,0.2396296,0.7656943,-4.676161,-2.451144,91.62286978,91.62286978,-1.622869781,-1.622869781,119.544111,-5.822039526,100.136488 +1/6/2022 7:30,13.07112,606.8611,0.3791394,1.127288,-3.681178,-2.106211,88.86790167,89.25114862,1.132098328,0.748851384,122.069613,-5.826605673,96.7553773 +1/6/2022 7:45,11.46397,595.8135,0.3493397,1.041687,-2.338272,-1.384739,86.72249887,86.94478783,3.277501126,3.055212166,124.6563446,-5.831170936,93.39280068 +1/6/2022 8:00,11.37953,595.637,0.3593444,1.061731,-1.682683,-0.6361,84.55773518,84.7102004,5.442264824,5.289799597,127.3110202,-5.835735317,90.05126904 +1/6/2022 8:15,20.92199,633.3779,0.6507094,1.736692,-1.431672,-0.2329889,82.43870217,82.55419577,7.561297831,7.445804233,130.0399202,-5.840298813,86.73361145 +1/6/2022 8:30,31.02679,665.817,0.9613208,2.427358,-1.287094,-0.1538167,80.39092055,80.48398567,9.609079445,9.516014327,132.8487904,-5.844861425,83.44304047 +1/6/2022 8:45,33.68489,668.6655,1.068126,2.666219,-1.283078,-0.1502722,78.42899627,78.50717542,11.57100373,11.49282458,135.7427093,-5.849423151,80.18322752 +1/6/2022 9:00,43.01748,671.0504,1.406,3.368666,-1.228089,-0.15465,76.56406813,76.63173887,13.43593187,13.36826113,138.7259226,-5.853983992,76.9583938 +1/6/2022 9:15,82.23788,696.3527,2.636667,6.069334,-0.9912722,-0.1533,74.80604994,74.86597263,15.19395006,15.13402737,141.8016481,-5.858543946,73.77341838 +1/6/2022 9:30,220.22,724.9883,7.398665,16.082,-0.3129,-0.07955556,73.16439474,73.21842504,16.83560526,16.78157496,144.9718582,-5.863103014,70.63396592 +1/6/2022 9:45,413.4356,722.2573,13.893,29.34867,3.148522,0.3541445,71.64834674,71.69779835,18.35165326,18.30220165,148.2370476,-5.867661194,67.54664006 +1/6/2022 10:00,523.0793,710.5743,17.58734,36.607,7.507367,0.5718889,70.26697664,70.31282109,19.73302336,19.68717891,151.5960008,-5.872218486,64.51916528 +1/6/2022 10:15,497.6176,704.0493,17.13833,35.65067,10.18374,0.5465444,69.02910586,69.0720897,20.97089414,20.9279103,155.0455814,-5.87677489,61.56059896 +1/6/2022 10:30,327.9948,707.1246,11.093,23.613,8.779006,0.2662278,67.94316545,67.98388277,22.05683455,22.01611723,158.5805631,-5.881330405,58.68157798 +1/6/2022 10:45,194.5929,711.5383,6.341667,14.26667,5.652555,-0.15175,67.01701301,67.05595246,22.98298699,22.94404754,162.19353,-5.88588503,55.89459663 +1/6/2022 11:00,214.22,711.0153,7.534,16.55766,5.101833,-0.1208944,66.25772497,66.29530146,23.74227503,23.70469854,165.8748742,-5.890438765,53.21430663 +1/6/2022 11:15,212.72,713.975,7.25,15.567,4.473161,-0.09305555,65.67138151,65.70795856,24.32861849,24.29204144,169.6129075,-5.89499161,50.65782242 +1/6/2022 11:30,150.7271,715.8734,4.661,10.209,3.266678,-0.1179333,65.26286102,65.29876719,24.73713898,24.70123281,173.3941015,-5.899543563,48.24499397 +1/6/2022 11:45,154.7395,718.2617,4.751667,10.409,2.884389,-0.05601111,65.03566116,65.07120285,24.96433884,24.92879715,177.2034561,-5.904094624,45.99858462 +1/6/2022 12:00,191.0155,720.735,5.908,12.78,3.574139,0.1450556,64.99176341,65.02723538,25.00823659,24.97276462,181.0249773,-5.908644793,43.94426195 +1/6/2022 12:15,176.3237,718.3493,5.514334,11.94933,3.901961,0.2318444,65.1315534,65.16724819,24.8684466,24.83275181,184.8422338,-5.913194069,42.11027241 +1/6/2022 12:30,198.5793,719.1923,6.394333,13.676,3.511139,0.1229111,65.45380512,65.49002235,24.54619488,24.50997765,188.6389502,-5.917742451,40.52664897 +1/6/2022 12:45,290.4542,720.9183,9.143668,19.05433,4.509261,0.2223056,65.95573071,65.99278691,24.04426929,24.00721309,192.3995872,-5.92228994,39.22382118 +1/6/2022 13:00,459.5916,715.4033,13.065,26.46833,7.645878,0.6094444,66.63309053,66.67133074,23.36690947,23.32866926,196.1098611,-5.926836534,38.23058271 +1/6/2022 13:15,622.8762,710.2863,16.93266,33.62899,10.93925,1.051105,67.48035327,67.52016549,22.51964673,22.47983451,199.7571685,-5.931382232,37.57155194 +1/6/2022 13:30,561.97,704.54,15.84066,31.25867,12.42031,1.271606,68.49089086,68.53272521,21.50910914,21.46727479,203.3308881,-5.935927036,37.2645035 +1/6/2022 13:45,481.5651,705.393,12.90133,25.44934,11.93007,1.187817,69.65719104,69.70158648,20.34280896,20.29841352,206.822553,-5.940470942,37.3181464 +1/6/2022 14:00,483.7181,710.305,11.096,21.633,9.879911,1.092128,70.97107091,71.01869399,19.02892909,18.98130601,210.2259015,-5.945013952,37.73094321 +1/6/2022 14:15,329.8465,712.1003,7.743999,15.45033,6.309933,0.8539444,72.42387368,72.47557712,17.57612632,17.52442288,213.5368196,-5.949556065,38.49132326 +1/6/2022 14:30,170.5367,714.27,4.875667,10.46766,3.367805,0.462,74.00663209,74.06354743,15.99336791,15.93645257,216.7532028,-5.95409728,39.57922403 +1/6/2022 14:45,202.6853,718.38,5.062666,10.48767,2.126528,0.4375167,75.7101795,75.77387082,14.2898205,14.22612918,219.8747619,-5.958637597,40.96851137 +1/6/2022 15:00,198.7523,716.2584,4.406333,9.021998,1.022578,0.4257222,77.5251753,77.59790957,12.4748247,12.40209043,222.9027984,-5.963177014,42.62966318 +1/6/2022 15:15,88.30872,692.2283,2.038333,4.548,-0.1268333,0.1095833,79.44197682,79.52723421,10.55802318,10.47276579,225.8399696,-5.967715532,44.53218611 +1/6/2022 15:30,32.48571,664.7483,0.9749998,2.424,-0.9756,-0.1854444,81.45018034,81.55370731,8.549819662,8.446292693,228.6900634,-5.97225315,46.64646273 +1/6/2022 15:45,21.3757,644.4483,0.6283333,1.688,-1.584767,-0.3650444,83.53729228,83.66954046,6.462707722,6.330459541,231.4577911,-5.976789868,48.94495417 +1/6/2022 16:00,12.29699,593.8734,0.384,1.112666,-2.008689,-0.5742278,85.68462157,85.86732871,4.315378428,4.132671289,234.1486072,-5.981325684,51.40283782 +1/6/2022 16:15,2.404122,537.0034,0.097,0.3433333,-2.556733,-0.8131389,87.85236122,88.14006696,2.147638779,1.859933038,236.7685621,-5.985860599,53.99822485 +1/6/2022 16:30,0.03652245,360.2563,0.005,0.02033333,-3.218555,-1.002267,89.93008641,90.48115023,0.069913586,-0.481150231,239.324185,-5.990394611,56.71210194 +1/6/2022 16:45,-0.6955609,199.4125,0,0,-3.940455,-1.180394,92.88436174,92.88436174,-2.884361738,-2.884361738,241.8224005,-5.99492772,59.52811631 +1/6/2022 17:00,-1.327597,,,,-4.779561,-1.423322,95.34385248,95.34385248,-5.343852484,-5.343852484,244.2704764,-5.999459927,62.43228927 +1/6/2022 17:15,-0.8559415,,,,-5.574255,-1.881789,97.85411258,97.85411258,-7.854112576,-7.854112576,246.6760008,-6.003991229,65.41270938 +1/6/2022 17:30,-0.1651498,,,,-5.637055,-1.994622,100.4099367,100.4099367,-10.40993674,-10.40993674,249.0468873,-6.008521627,68.45923677 +1/6/2022 17:45,0.06193225,,,,-5.223094,-1.685056,103.0063861,103.0063861,-13.00638614,-13.00638614,251.3914097,-6.01305112,71.5632352 +1/6/2022 18:00,0,,,,-4.897984,-1.664944,105.6387449,105.6387449,-15.63874492,-15.63874492,253.7182639,-6.017579707,74.71733546 +1/6/2022 18:15,0,,,,-4.805539,-2.037028,108.3024726,108.3024726,-18.30247257,-18.30247257,256.0366592,-6.022107389,77.91523162 +1/6/2022 18:30,0.05399175,,,,-4.699616,-2.121411,110.9931525,110.9931525,-20.99315253,-20.99315253,258.356444,-6.026634164,81.1515093 +1/6/2022 18:45,0.1460928,,,,-4.188828,-1.883894,113.706434,113.706434,-23.706434,-23.706434,260.6882673,-6.031160032,84.42149998 +1/6/2022 19:00,0.142916,,,,-3.781661,-1.863556,116.4379661,116.4379661,-26.43796615,-26.43796615,263.0437858,-6.035684992,87.72115859 +1/6/2022 19:15,0.09051446,,,,-3.564644,-1.855772,119.1833235,119.1833235,-29.18332345,-29.18332345,265.4359242,-6.040209043,91.04696224 +1/6/2022 19:30,0.03969956,,,,-3.360522,-1.843117,121.9379164,121.9379164,-31.93791643,-31.93791643,267.8792035,-6.044732187,94.39582391 +1/6/2022 19:45,0,,,,-3.307083,-2.002172,124.6968841,124.6968841,-34.69688405,-34.69688405,270.3901521,-6.049254421,97.76501946 +1/6/2022 20:00,0.03652399,,,,-3.326667,-2.142222,127.4549624,127.4549624,-37.45496244,-37.45496244,272.9878243,-6.053775744,101.1521267 +1/6/2022 20:15,0.03652399,,,,-3.679128,-2.282317,130.2063185,130.2063185,-40.20631851,-40.20631851,275.694452,-6.058296158,104.5549718 +1/6/2022 20:30,-0.4017676,,,,-4.785517,-2.724183,132.9443376,132.9443376,-42.94433755,-42.94433755,278.5362634,-6.062815661,107.9715816 +1/6/2022 20:45,-0.4017676,,,,-6.021272,-3.315283,135.6613489,135.6613489,-45.6613489,-45.6613489,281.5445079,-6.067334252,111.400142 +1/6/2022 21:00,0,,,,-6.608911,-3.839411,138.348265,138.348265,-48.34826497,-48.34826497,284.7567227,-6.071851932,114.8389582 +1/6/2022 21:15,0.1206796,,,,-6.675761,-4.2051,140.9941047,140.9941047,-50.99410466,-50.99410466,288.2182611,-6.076368699,118.2864143 +1/6/2022 21:30,0.5700672,,,,-6.226028,-4.1685,143.585364,143.585364,-53.58536398,-53.58536398,291.9840602,-6.080884553,121.7409337 +1/6/2022 21:45,0.5684883,,,,-5.569361,-3.876767,146.1051865,146.1051865,-56.10518654,-56.10518654,296.1205015,-6.085399493,125.2009329 +1/6/2022 22:00,0.1191007,,,,-5.240917,-3.751111,148.5322917,148.5322917,-58.53229168,-58.53229168,300.7069744,-6.089913519,128.664766 +1/6/2022 22:15,0,,,,-5.202689,-3.779806,150.8396433,150.8396433,-60.83964329,-60.83964329,305.8362607,-6.09442663,132.1306566 +1/6/2022 22:30,0.1921536,,,,-5.120828,-3.797378,152.992922,152.992922,-62.99292201,-62.99292201,311.6119734,-6.098938827,135.596602 +1/6/2022 22:45,0.349368,,,,-4.9167,-3.74395,154.9490657,154.9490657,-64.94906569,-64.94906569,318.1399735,-6.103450107,139.0602387 +1/6/2022 23:00,0.4525908,,,,-4.678333,-3.578739,156.6555301,156.6555301,-66.65553006,-66.65553006,325.5093684,-6.107960472,142.5186406 +1/6/2022 23:15,0.4287716,,,,-4.36555,-3.339061,158.0515004,158.0515004,-68.05150035,-68.05150035,333.7591757,-6.112469919,145.9680018 +1/6/2022 23:30,0.1572153,,,,-4.06965,-3.140022,159.0727579,159.0727579,-69.07275786,-69.07275786,342.8328902,-6.11697845,149.4031161 +1/6/2022 23:45,0.02382012,,,,-3.903128,-3.0482,159.6613655,159.6613655,-69.66136549,-69.66136549,352.538143,-6.121486062,152.8164826 +1/7/2022 0:00,0,,,,-3.945294,-3.111194,159.7787147,159.7787147,-69.7787147,-69.7787147,2.544555466,-6.125992756,156.1966801 +1/7/2022 0:15,0,,,,-4.135767,-3.2714,159.4165764,159.4165764,-69.41657638,-69.41657638,12.44488755,-6.130498531,159.5252331 +1/7/2022 0:30,0,,,,-4.413628,-3.410861,158.5997021,158.5997021,-68.5997021,-68.5997021,21.85980196,-6.135003387,162.7701567 +1/7/2022 0:45,0,,,,-4.751283,-3.588239,157.3782555,157.3782555,-67.37825551,-67.37825551,30.52616891,-6.139507322,165.8716898 +1/7/2022 1:00,0,,,,-4.948961,-3.717261,155.8148765,155.8148765,-65.81487645,-65.81487645,38.32475767,-6.144010338,168.7090469 +1/7/2022 1:15,0.004763506,,,,-4.887533,-3.768133,153.9729277,153.9729277,-63.97292774,-63.97292774,45.25398145,-6.148512432,171.0261639 +1/7/2022 1:30,0.06351496,,,,-4.578439,-3.650817,151.9093163,151.9093163,-61.9093163,-61.9093163,51.38361199,-6.153013604,172.3343032 +1/7/2022 1:45,0.05875145,,,,-4.295455,-3.460572,149.6717159,149.6717159,-59.67171586,-59.67171586,56.81454014,-6.157513855,172.1135939 +1/7/2022 2:00,0,,,,-4.181111,-3.423255,147.2985464,147.2985464,-57.29854644,-57.29854644,61.65307999,-6.162013182,170.469711 +1/7/2022 2:15,0,,,,-4.04805,-3.35715,144.8201966,144.8201966,-54.82019658,-54.82019658,65.99789954,-6.166511587,167.973194 +1/7/2022 2:30,0,,,,-3.927517,-3.319933,142.2605693,142.2605693,-52.26056932,-52.26056932,69.93500024,-6.171009068,165.0458944 +1/7/2022 2:45,0,,,,-3.876806,-3.341105,139.6385254,139.6385254,-49.63852536,-49.63852536,73.5369579,-6.175505625,161.8965335 +1/7/2022 3:00,0.1063942,,,,-3.730611,-3.193894,136.9690828,136.9690828,-46.96908282,-46.96908282,76.86406438,-6.180001257,158.6241182 +1/7/2022 3:15,0.1063942,,,,-3.566517,-3.2481,134.2643602,134.2643602,-44.26436017,-44.26436017,79.96611591,-6.184495964,155.2786547 +1/7/2022 3:30,0,,,,-3.585561,-3.5801,131.5342967,131.5342967,-41.53429672,-41.53429672,82.88425555,-6.188989744,151.8874872 +1/7/2022 3:45,0,,,,-3.660883,-3.788189,128.787199,128.787199,-38.78719903,-38.78719903,85.65262603,-6.193482599,148.466718 +1/7/2022 4:00,0,,,,-3.711022,-3.924017,126.0301539,126.0301539,-36.03015394,-36.03015394,88.29976344,-6.197974527,145.0264729 +1/7/2022 4:15,0,,,,-3.765744,-4.024689,123.2693413,123.2693413,-33.26934133,-33.26934133,90.84973634,-6.202465527,141.5735049 +1/7/2022 4:30,0,,,,-3.805211,-4.08745,120.5102749,120.5102749,-30.51027488,-30.51027488,93.32305985,-6.2069556,138.1125675 +1/7/2022 4:45,0,,,,-3.823356,-4.1241,117.7579891,117.7579891,-27.75798911,-27.75798911,95.73742446,-6.211444744,134.6471844 +1/7/2022 5:00,0,,,,-3.837055,-4.134967,115.0171859,115.0171859,-25.01718591,-25.01718591,98.10827616,-6.215932959,131.1801001 +1/7/2022 5:15,0,,,,-3.841733,-4.118455,112.2923534,112.2923534,-22.29235335,-22.29235335,100.4492768,-6.220420245,127.7135599 +1/7/2022 5:30,0,,,,-3.835744,-4.093961,109.5878632,109.5878632,-19.58786319,-19.58786319,102.7726701,-6.2249066,124.2494902 +1/7/2022 5:45,0,,,,-3.826711,-4.075395,106.9080517,106.9080517,-16.90805169,-16.90805169,105.0895744,-6.229392026,120.7896199 +1/7/2022 6:00,0,,,,-3.813189,-4.049628,104.2572899,104.2572899,-14.25728994,-14.25728994,107.4102139,-6.23387652,117.3355667 +1/7/2022 6:15,0,,,,-3.786167,-4.020878,101.6400456,101.6400456,-11.64004564,-11.64004564,109.7441016,-6.238360082,113.8889029 +1/7/2022 6:30,0,,,,-3.755328,-4.020289,99.0609372,99.0609372,-9.060937199,-9.060937199,112.1001827,-6.242842713,110.4512057 +1/7/2022 6:45,0,,,,-3.75075,-4.067333,96.5247838,96.5247838,-6.524783799,-6.524783799,114.486942,-6.247324411,107.0241019 +1/7/2022 7:00,0.1333893,,,,-3.768922,-4.11775,94.03665107,94.03665107,-4.036651067,-4.036651067,116.9124804,-6.251805175,103.6093082 +1/7/2022 7:15,1.181461,,,,-3.781889,-4.139067,91.6018916,91.6018916,-1.601891599,-1.601891599,119.3845635,-6.256285007,100.2086701 +1/7/2022 7:30,3.561775,,,,-3.771578,-4.132672,88.84559647,89.22618216,1.154403534,0.773817837,121.9106413,-6.260763904,96.82420164 +1/7/2022 7:45,8.125428,,,,-3.727695,-4.0965,86.69453792,86.91555572,3.30546208,3.084444278,124.4978393,-6.265241866,93.45813015 +1/7/2022 8:00,15.33006,338.6569,0,0,-3.633405,-4.018922,84.52470533,84.67642607,5.475294672,5.323573925,127.1529221,-6.269718893,90.11294327 +1/7/2022 8:15,20.75788,419.4476,0,0,-3.496767,-3.910428,82.40062052,82.5156052,7.599379477,7.4843948,129.8822244,-6.274194984,86.79144489 +1/7/2022 8:30,20.92868,409.8139,0,0,-3.389678,-3.859578,80.34762993,80.44030983,9.652370067,9.559690169,132.691551,-6.278670139,83.49682 +1/7/2022 8:45,26.04571,429.5949,0,0,-3.263778,-3.802072,78.38028705,78.45815352,11.61971295,11.54184648,135.5860446,-6.283144358,80.23270958 +1/7/2022 9:00,34.30027,497.926,0,0.02164949,-3.050278,-3.631178,76.50971866,76.57712255,13.49028134,13.42287745,138.5700198,-6.287617639,77.00330106 +1/7/2022 9:15,38.87812,516.2335,0,0.1257035,-2.811244,-3.443845,74.74584473,74.80553093,15.25415527,15.19446907,141.6467679,-6.292089982,73.81343604 +1/7/2022 9:30,48.53915,517.5884,0.03416667,0.2648874,-2.575578,-3.34465,73.09813579,73.15195029,16.90186421,16.84804971,144.8183376,-6.296561387,70.66873745 +1/7/2022 9:45,57.60896,496.1731,0.08416667,0.3608333,-2.353633,-3.289017,71.57586268,71.62511271,18.42413732,18.37488729,148.0853009,-6.301031853,67.5757628 +1/7/2022 10:00,61.17714,494.354,0.1,0.4,-2.12685,-3.179144,70.18813112,70.23378362,19.81186888,19.76621638,151.4465178,-6.30550138,64.54218576 +1/7/2022 10:15,67.70007,508.5787,0.09999999,0.4042453,-1.890939,-3.092628,68.94380546,68.98660353,21.05619454,21.01339647,154.898922,-6.309969967,61.5770086 +1/7/2022 10:30,86.6965,527.4274,0.09999999,0.4542453,-1.5688,-2.962233,67.85136705,67.89190211,22.14863295,22.10809789,158.4373473,-6.314437614,58.69080949 +1/7/2022 10:45,105.7074,484.3116,0.2775281,0.5685393,-1.170594,-2.688039,66.91873024,66.95748867,23.08126976,23.04251133,162.0544238,-6.318904319,55.89602226 +1/7/2022 11:00,110.4,508.8279,0.5285807,0.7638025,-0.2566889,-2.39105,66.15303306,66.19042782,23.84696694,23.80957218,165.7405702,-6.323370084,53.20723948 +1/7/2022 11:15,110.3226,600.3652,0.6010526,0.9645616,0.9650667,-2.223567,65.56042024,65.59681305,24.43957976,24.40318695,169.4841025,-6.327834906,50.64152293 +1/7/2022 11:30,105.6924,615.5881,0.5980769,1.076221,1.531144,-2.169106,65.14583513,65.18155281,24.85416487,24.81844719,173.2714705,-6.332298786,48.21868431 +1/7/2022 11:45,105.2917,611.0892,0.7674047,1.229192,1.803978,-2.064967,64.91283804,64.94818519,25.08716196,25.05181481,177.0876264,-6.336761723,45.96147428 +1/7/2022 12:00,102.1628,521.4692,1.238661,1.552269,2.223839,-1.841322,64.86346792,64.89873735,25.13653208,25.10126265,180.9165035,-6.341223717,43.89558818 +1/7/2022 12:15,96.32237,487.8633,1.503,1.949667,2.138933,-1.650233,64.99816008,65.03364219,25.00183992,24.96635781,184.7415761,-6.345684766,42.0493581 +1/7/2022 12:30,143.7885,544.625,2.117333,3.093,2.360611,-1.527828,65.31572837,65.35172023,24.68427163,24.64827977,188.5464588,-6.350144871,40.45297807 +1/7/2022 12:45,165.7928,616.5817,2.362,3.757,3.183956,-1.329194,65.81341351,65.85022862,24.18658649,24.14977138,192.3154924,-6.354604032,39.13712612 +1/7/2022 13:00,126.437,675.2277,1.725333,3.102333,3.010217,-1.220033,66.48699265,66.52497224,23.51300735,23.47502776,196.0342716,-6.359062246,38.13093098 +1/7/2022 13:15,112.4722,678.9883,1.520666,2.794333,2.219894,-1.238211,67.33093975,67.37046697,22.66906025,22.62953303,199.6900757,-6.363519515,37.45941154 +1/7/2022 13:30,127.631,690.219,1.716333,3.155667,1.911044,-1.23505,68.33862155,68.38014018,21.66137845,21.61985982,203.2721767,-6.367975837,37.14076453 +1/7/2022 13:45,142.3569,702.334,1.920333,3.537667,2.127306,-1.192778,69.5025119,69.54655236,20.4974881,20.45344764,206.7720154,-6.372431212,37.18408321 +1/7/2022 14:00,129.9533,700.301,1.777666,3.304667,2.230717,-1.139111,70.8144075,70.86162449,19.1855925,19.13837551,210.183255,-6.376885639,37.5881179 +1/7/2022 14:15,96.34621,687.5457,1.318666,2.509666,1.553089,-1.146722,72.26562728,72.31685659,17.73437272,17.68314341,213.5017248,-6.381339119,38.34145064 +1/7/2022 14:30,74.638,681.9157,0.9909998,1.960667,0.5257334,-1.187556,73.84717903,73.90352709,16.15282097,16.09647291,216.7252807,-6.38579165,39.42402939 +1/7/2022 14:45,138.0183,676.8654,1.554667,2.864333,0.005088889,-1.185894,75.54987474,75.61286664,14.45012526,14.38713336,219.8536106,-6.390243232,40.80961084 +1/7/2022 15:00,210.6866,687.2197,2.321667,4.185999,0.4677333,-0.9690334,77.36436283,77.43620166,12.63563717,12.56379834,222.8880069,-6.394693864,42.46848361 +1/7/2022 15:15,133.4755,684.4459,1.562333,2.978333,0.8207667,-0.9459,79.28101351,79.36506732,10.71898649,10.63493268,225.8311295,-6.399143546,44.36992699 +1/7/2022 15:30,39.6675,638.4503,0.5606666,1.237666,-0.6053944,-1.447078,81.28949199,81.39129215,8.710508005,8.60870785,228.6867779,-6.403592278,46.48409228 +1/7/2022 15:45,24.70225,599.2067,0.3756666,0.8899999,-2.619289,-1.903339,83.37752198,83.5070556,6.622478019,6.492944397,231.459682,-6.408040058,48.78322763 +1/7/2022 16:00,13.65703,577.9257,0.2163688,0.6248298,-3.859317,-2.128983,85.52709594,85.70492283,4.472904063,4.295077171,234.1553197,-6.412486887,51.24232695 +1/7/2022 16:15,5.189687,550.6369,0.09412222,0.3302681,-4.439567,-2.284311,87.70085374,87.97786121,2.299146257,2.022138789,236.7797671,-6.416932764,53.83935084 +1/7/2022 16:30,0.9972842,479.1688,0.01575343,0.06643835,-3.997772,-2.350583,89.79429283,90.31924064,0.20570717,-0.319240645,239.3395813,-6.421377688,56.55516657 +1/7/2022 16:45,0.08257575,425.5,0,0,-3.394628,-2.5242,92.72282151,92.72282151,-2.722821515,-2.722821515,241.8417147,-6.425821659,59.37332925 +1/7/2022 17:00,-1.47368,,,,-3.952356,-2.8963,95.18273411,95.18273411,-5.18273411,-5.18273411,244.2934623,-6.430264677,62.27979073 +1/7/2022 17:15,-1.47368,,,,-4.831272,-3.140772,97.69344973,97.69344973,-7.693449725,-7.693449725,246.702438,-6.43470674,65.26258823 +1/7/2022 17:30,0,,,,-5.08535,-3.217594,100.2497459,100.2497459,-10.24974594,-10.24974594,249.0765791,-6.439147849,68.31154473 +1/7/2022 17:45,-0.0698717,,,,-5.22455,-3.3523,102.8466682,102.8466682,-12.84666817,-12.84666817,251.4241806,-6.443588002,71.41799775 +1/7/2022 18:00,-1.043298,,,,-5.717044,-3.599972,105.479486,105.479486,-15.47948599,-15.47948599,253.7539563,-6.4480272,74.57456021 +1/7/2022 18:15,-0.973426,,,,-5.798061,-3.740672,108.1436452,108.1436452,-18.14364521,-18.14364521,256.0751297,-6.452465442,77.77491462 +1/7/2022 18:30,0,,,,-5.366611,-3.80415,110.8347163,110.8347163,-20.83471628,-20.83471628,258.3975587,-6.456902727,81.01363988 +1/7/2022 18:45,-0.0873381,,,,-5.516122,-4.058444,113.5483359,113.5483359,-23.54833588,-23.54833588,260.7318967,-6.461339055,84.28606441 +1/7/2022 19:00,-0.1222733,,,,-6.121878,-4.428844,116.280141,116.280141,-26.28014097,-26.28014097,263.0897969,-6.465774426,87.58814297 +1/7/2022 19:15,-0.1397457,,,,-6.474306,-4.740767,119.025694,119.025694,-29.02569396,-29.02569396,265.4841726,-6.470208838,90.91635475 +1/7/2022 19:30,-0.1048104,,,,-6.710128,-4.997944,121.7803934,121.7803934,-31.78039341,-31.78039341,267.9295207,-6.474642291,94.26761669 +1/7/2022 19:45,0,,,,-7.022356,-5.234372,124.5393665,124.5393665,-34.53936645,-34.53936645,270.4423304,-6.479074786,97.63921024 +1/7/2022 20:00,0,,,,-7.249239,-5.508744,127.2973377,127.2973377,-37.29733767,-37.29733767,273.0415955,-6.48350632,101.0287204 +1/7/2022 20:15,-0.3144808,,,,-7.446567,-5.80825,130.0484632,130.0484632,-40.04846319,-40.04846319,275.749458,-6.487936895,104.4339818 +1/7/2022 20:30,-0.9958563,,,,-7.947661,-6.117278,132.7861191,132.7861191,-42.78611906,-42.78611906,278.592016,-6.492366509,107.8530315 +1/7/2022 20:45,-0.7687314,,,,-8.494005,-6.359033,135.5026284,135.5026284,-45.50262839,-45.50262839,281.600333,-6.496795162,111.2840679 +1/7/2022 21:00,-0.6194314,,,,-8.854767,-6.520661,138.1889028,138.1889028,-48.18890282,-48.18890282,284.8116811,-6.501222853,114.7254102 +1/7/2022 21:15,-0.697252,,,,-9.295989,-6.715178,140.83397,140.83397,-50.83396999,-50.83396999,288.2710391,-6.505649582,118.17546 +1/7/2022 21:30,-0.992618,,,,-9.554094,-6.920817,143.4243507,143.4243507,-53.42435065,-53.42435065,292.0328177,-6.510075348,121.6326615 +1/7/2022 21:45,-2.555346,,,,-10.12879,-7.241678,145.9432396,145.9432396,-55.94323955,-55.94323955,296.1626662,-6.514500152,125.0954567 +1/7/2022 22:00,-2.036005,,,,-10.68048,-7.560995,148.3694495,148.3694495,-58.36944948,-58.36944948,300.7389742,-6.518923991,128.562232 +1/7/2022 22:15,-0.3779792,,,,-10.33177,-7.470278,150.6761034,150.6761034,-60.67610339,-60.67610339,305.8532019,-6.523346867,132.0312515 +1/7/2022 22:30,-0.06987845,,,,-9.950922,-7.371833,152.8291381,152.8291381,-62.82913807,-62.82913807,311.6073192,-6.527768778,135.5005661 +1/7/2022 22:45,0.0111197,,,,-10.01073,-7.491661,154.7858799,154.7858799,-64.78587992,-64.78587992,318.1053708,-6.532189724,138.9678826 +1/7/2022 23:00,0.03494857,,,,-9.893439,-7.519978,156.494329,156.494329,-66.49432896,-66.49432896,325.4349315,-6.536609704,142.4303715 +1/7/2022 23:15,-0.1858671,,,,-9.8712,-7.587089,157.8943451,157.8943451,-67.8943451,-67.8943451,333.6346919,-6.541028718,145.8843623 +1/7/2022 23:30,-0.209696,,,,-10.19898,-7.762411,158.9223867,158.9223867,-68.92238674,-68.92238674,342.6503142,-6.545446765,149.3248448 +1/7/2022 23:45,0,,,,-10.25116,-7.8838,159.5209391,159.5209391,-69.52093905,-69.52093905,352.2949862,-6.549863846,152.7446124 +1/8/2022 0:00,-0.2970718,,,,-10.36102,-8.056595,159.6512624,159.6512624,-69.65126244,-69.65126244,2.246449041,-6.554279958,156.1327035 +1/8/2022 0:15,-0.2970718,,,,-10.60195,-8.284994,159.3043251,159.3043251,-69.30432513,-69.30432513,12.10514725,-6.558695103,159.471394 +1/8/2022 0:30,-0.4622878,,,,-10.71136,-8.447406,158.503626,158.503626,-68.50362605,-68.50362605,21.4956895,-6.563109279,162.7299861 +1/8/2022 0:45,-0.4972368,,,,-11.06382,-8.654256,157.2980608,157.2980608,-67.29806078,-67.29806078,30.15417616,-6.567522486,165.8510112 +1/8/2022 1:00,-0.03494901,,,,-11.11996,-8.750794,155.7493326,155.7493326,-65.74933264,-65.74933264,37.95752069,-6.571934724,168.7177184 +1/8/2022 1:15,0,,,,-10.72502,-8.775811,153.9203022,153.9203022,-63.92030218,-63.92030218,44.89952719,-6.576345991,171.0795546 +1/8/2022 1:30,-0.2271561,,,,-10.60435,-8.904612,151.8677283,151.8677283,-61.86772825,-61.86772825,51.04609424,-6.580756288,172.4456016 +1/8/2022 1:45,-1.15326,,,,-11.08099,-9.171284,149.639355,149.639355,-59.63935497,-59.63935497,56.49542668,-6.585165614,172.2679762 +1/8/2022 2:00,-1.329587,,,,-11.75401,-9.452066,147.2737774,147.2737774,-57.27377739,-57.27377739,61.35220788,-6.589573968,170.634122 +1/8/2022 2:15,-0.5607475,,,,-11.97044,-9.577711,144.8015915,144.8015915,-54.80159153,-54.80159153,65.71422745,-6.59398135,168.131389 +1/8/2022 2:30,-0.6052343,,,,-12.13846,-9.721811,142.2469023,142.2469023,-52.24690226,-52.24690226,69.66708338,-6.59838776,165.1947854 +1/8/2022 2:45,-0.6576563,,,,-12.50051,-9.945933,139.6287502,139.6287502,-49.62875016,-49.62875016,73.28322402,-6.602793197,162.0367859 +1/8/2022 3:00,-1.3693,,,,-13.12477,-10.34272,136.9623063,136.9623063,-46.96230634,-46.96230634,76.62296267,-6.60719766,158.7569723 +1/8/2022 3:15,-1.628208,,,,-13.96871,-10.84715,134.2598162,134.2598162,-44.25981618,-44.25981618,79.7361902,-6.61160115,155.4052077 +1/8/2022 3:30,-0.5067173,,,,-14.61965,-11.09577,131.5313227,131.5313227,-41.53132272,-41.53132272,82.66417465,-6.616003664,152.0085948 +1/8/2022 3:45,-0.3129166,,,,-14.72328,-11.10042,128.7852165,128.7852165,-38.78521654,-38.78521654,85.44119086,-6.620405204,148.5830261 +1/8/2022 4:00,-0.3097402,,,,-14.6243,-11.10162,126.0286522,126.0286522,-36.02865216,-36.02865216,88.09590237,-6.624805769,145.1384664 +1/8/2022 4:15,-0.03494641,,,,-14.57242,-11.14842,123.2678638,123.2678638,-33.26786377,-33.26786377,90.65249517,-6.629205357,141.6815473 +1/8/2022 4:30,0,,,,-14.15417,-11.13223,120.5084084,120.5084084,-30.50840837,-30.50840837,93.13158999,-6.63360397,138.2169314 +1/8/2022 4:45,0,,,,-13.89198,-11.09788,117.7553549,117.7553549,-27.75535485,-27.75535485,95.550971,-6.638001605,134.7480724 +1/8/2022 5:00,0,,,,-14.18661,-11.17035,115.0134322,115.0134322,-25.01343218,-25.01343218,97.92616692,-6.642398263,131.2776604 +1/8/2022 5:15,0,,,,-14.44067,-11.26411,112.2871495,112.2871495,-22.28714947,-22.28714947,100.2709126,-6.646793943,127.8078971 +1/8/2022 5:30,-0.1223483,,,,-14.41698,-11.36823,109.5808945,109.5808945,-19.58089454,-19.58089454,102.5975167,-6.651188645,124.3406732 +1/8/2022 5:45,-0.3066581,,,,-14.34408,-11.46503,106.8990157,106.8990157,-16.89901565,-16.89901565,104.9171556,-6.655582367,120.8776871 +1/8/2022 6:00,-0.1843099,,,,-14.31771,-11.51355,104.2458926,104.2458926,-14.24589256,-14.24589256,107.240106,-6.659975111,117.4205303 +1/8/2022 6:15,-0.2923628,,,,-14.76622,-11.83004,101.6259989,101.6259989,-11.62599887,-11.62599887,109.5759296,-6.664366875,113.9707514 +1/8/2022 6:30,-2.575647,,,,-15.92494,-12.76758,99.0439567,99.0439567,-9.043956696,-9.043956696,111.9336175,-6.668757658,110.5299056 +1/8/2022 6:45,-3.352647,,,,-17.29004,-14.04743,96.50458731,96.50458731,-6.504587309,-6.504587309,114.3216985,-6.673147461,107.0995988 +1/8/2022 7:00,-0.001648,405.2158,0.01970803,0.1029197,-18.28233,-14.9612,94.01295723,94.01295723,-4.012957232,-4.012957232,116.7483174,-6.677536282,103.6815274 +1/8/2022 7:15,4.056357,556.1341,0.06970803,0.3542354,-18.72362,-15.40866,91.5744193,91.5744193,-1.574419302,-1.574419302,119.221284,-6.681924122,100.277516 +1/8/2022 7:30,10.58355,610.482,0.1438016,0.5754961,-18.94737,-15.72746,88.81738686,89.1946504,1.182613142,0.8053496,121.7480943,-6.68631098,96.88955751 +1/8/2022 7:45,20.03842,674.0253,0.2806017,0.8281804,-18.67734,-15.92859,86.66020871,86.87968405,3.339791287,3.120315951,124.3359224,-6.690696854,93.5198569 +1/8/2022 8:00,53.7159,712.7328,0.5639276,1.317298,-17.23039,-15.48065,84.48509871,84.6359357,5.51490129,5.364064302,126.9915848,-6.695081746,90.17087799 +1/8/2022 8:15,118.4393,712.9135,1.060974,2.160605,-15.0431,-14.27914,82.35582928,82.47022076,7.644170716,7.529779236,129.7214726,-6.699465654,86.84539892 +1/8/2022 8:30,178.7119,727.8467,1.70792,3.267678,-12.56351,-12.68872,80.29752422,80.38976198,9.702475781,9.610238019,132.531452,-6.703848578,83.54657655 +1/8/2022 8:45,229.1344,744.0621,2.403464,4.43831,-9.7091,-10.86712,78.32467001,78.40218232,11.67532999,11.59781768,135.4267316,-6.708230517,80.27802086 +1/8/2022 9:00,283.3393,742.9146,3.183663,5.727341,-6.632256,-9.698561,76.4483767,76.51548173,13.5516233,13.48451827,138.4116971,-6.712611471,77.04388503 +1/8/2022 9:15,340.4345,737.559,4.049728,7.135538,-3.476189,-9.229922,74.67856917,74.73799312,15.32143083,15.26200688,141.4897151,-6.71699144,73.84897261 +1/8/2022 9:30,397.3871,734.9936,4.948856,8.591103,-0.6373556,-8.824478,73.02473571,73.07831296,16.97526429,16.92168704,144.6629123,-6.721370422,70.6988644 +1/8/2022 9:45,448.8757,740.6627,5.799555,10.00797,1.997194,-8.212961,71.49617483,71.54520493,18.50382517,18.45479507,147.9319396,-6.725748418,67.6000713 +1/8/2022 10:00,496.998,744.7946,6.598347,11.35083,4.388484,-7.733106,70.1020287,70.14747317,19.8979713,19.85252683,151.2957333,-6.730125427,64.56021591 +1/8/2022 10:15,545.2042,742.1495,7.356701,12.59512,6.355134,-7.279706,68.8512063,68.89380427,21.1487937,21.10619573,154.7512975,-6.734501449,61.58824516 +1/8/2022 10:30,587.3698,739.6846,8.013463,13.71229,7.31905,-6.8926,67.75224112,67.79258089,22.24775888,22.20741911,158.2935256,-6.738876482,58.69467861 +1/8/2022 10:45,625.1849,735.5093,8.627288,14.775,7.956905,-6.943189,66.81310603,66.85167147,23.18689397,23.14832853,161.9150923,-6.743250527,55.89188993 +1/8/2022 11:00,663.0563,731.7748,9.188962,15.77063,9.277022,-6.302939,66.04100243,66.07820433,23.95899757,23.92179567,165.606441,-6.747623583,53.1944134 +1/8/2022 11:15,696.7172,728.2745,9.66405,16.59958,10.44983,-5.504172,65.44214114,65.47833923,24.55785886,24.52166077,169.3558878,-6.75199565,50.61925963 +1/8/2022 11:30,725.6235,724.3461,10.12142,17.32495,12.53246,-5.148506,65.02153166,65.05705089,24.97846834,24.94294911,173.1498572,-6.756366727,48.18620445 +1/8/2022 11:45,749.7322,721.3585,10.56052,18.00509,15.51984,-4.740611,64.78279775,64.81794078,25.21720225,25.18205922,176.9732482,-6.760736813,45.91798949 +1/8/2022 12:00,769.2346,689.2787,11.56418,18.60409,16.51859,-4.404428,64.7280361,64.76309375,25.2719639,25.23690625,180.8099156,-6.765105909,43.84034308 +1/8/2022 12:15,779.9653,645.754,13.07733,19.363,17.58196,-3.612078,64.8577315,64.89299192,25.1422685,25.10700808,184.6432336,-6.769474014,41.98169019 +1/8/2022 12:30,782.1226,664.85,12.818,19.53,19.63173,-2.644939,65.17073684,65.2064945,24.82926316,24.7935055,188.4567006,-6.773841126,40.37239528 +1/8/2022 12:45,783.1979,709.5833,11.64067,19.19733,18.84575,-2.716406,65.66432011,65.70088538,24.33567989,24.29911462,192.2345324,-6.778207247,39.04339647 +1/8/2022 13:00,784.975,725.1216,11.42,19.17167,15.61306,-3.587117,66.33427343,66.37198371,23.66572657,23.62801629,195.9621973,-6.782572374,38.02417062 +1/8/2022 13:15,780.9112,727.6367,11.346,19.129,14.00154,-3.869656,67.17507388,67.21430743,22.82492612,22.78569257,199.6268537,-6.786936509,37.34015025 +1/8/2022 13:30,765.2518,727.3134,11.177,18.92133,13.82588,-3.610361,68.18008064,68.22127484,21.81991936,21.77872516,203.2176641,-6.79129965,37.00996526 +1/8/2022 13:45,740.9526,726.7657,10.708,18.299,14.56244,-2.793789,69.3417511,69.38542778,20.6582489,20.61457222,206.725976,-6.795661796,37.04309952 +1/8/2022 14:00,709.5437,620.98,12.18467,15.79634,13.53716,-1.912639,70.65185897,70.69866099,19.34814103,19.30133901,210.1453771,-6.800022949,37.43859094 +1/8/2022 14:15,671.825,441.404,15.7,13.63367,6.257056,-1.29185,72.10169639,72.15244264,17.89830361,17.84755736,213.4716405,-6.804383106,38.18516698 +1/8/2022 14:30,630.3785,379.8184,16.26266,13.11433,-0.3917278,-1.087939,73.68224376,73.7380157,16.31775624,16.2619843,216.7025844,-6.808742267,39.26277307 +1/8/2022 14:45,581.6162,417.499,13.15166,12.01033,-2.716489,-1.364267,75.38428938,75.44657347,14.61571062,14.55342653,219.8378758,-6.813100432,40.64504035 +1/8/2022 15:00,483.0581,524.0798,8.609937,10.20707,-3.975006,-1.509856,77.19846832,77.26940462,12.80153168,12.73059538,222.8788004,-6.817457602,42.30205125 +1/8/2022 15:15,262.1823,657.8612,5.115272,8.424401,-4.714045,-2.453372,79.11516078,79.19800734,10.88483922,10.80199266,225.8280238,-6.821813774,44.20284253 +1/8/2022 15:30,64.45077,713.389,3.642,6.856,-6.03235,-3.901322,81.1240961,81.2241747,8.8759039,8.775825302,228.6893601,-6.826168948,46.3173219 +1/8/2022 15:45,12.33504,588.8594,1.779109,3.455068,-8.106678,-5.397406,83.21320354,83.34005287,6.786796463,6.659947126,231.4675607,-6.830523125,48.61751553 +1/8/2022 16:00,5.303792,434.3088,0.3371089,0.7417347,-9.913333,-6.731661,85.36511951,85.53817616,4.63488049,4.461823845,234.1681294,-6.834876303,51.07822796 +1/8/2022 16:15,1.399042,438.295,0.1483333,0.4066667,-11.47135,-7.768722,87.54477142,87.81148363,2.455228582,2.188516371,236.7971715,-6.839228483,53.67726569 +1/8/2022 16:30,0.03017192,483.3435,0.03333334,0.135,-12.78197,-8.635422,89.65401458,90.15331943,0.345985424,-0.153319431,239.3612744,-6.843579663,56.39537499 +1/8/2022 16:45,-0.662256,497.6038,0,0,-13.73166,-9.240155,92.55742059,92.55742059,-2.557420591,-2.557420591,241.8674207,-6.847929843,59.21601862 +1/8/2022 17:00,-0.662256,,,,-14.38842,-9.818117,95.01789625,95.01789625,-5.017896248,-5.017896248,244.3229351,-6.852279023,62.12507955 +1/8/2022 17:15,0.0476446,,,,-14.86515,-10.43469,97.52919851,97.52919851,-7.529198507,-7.529198507,246.7354593,-6.856627203,65.11054476 +1/8/2022 17:30,-0.03971964,,,,-15.17625,-10.84608,100.0860875,100.0860875,-10.08608745,-10.08608745,249.1129567,-6.860974381,68.16220148 +1/8/2022 17:45,0.1223278,,,,-15.38373,-11.07439,102.6835924,102.6835924,-12.68359242,-12.68359242,251.4637454,-6.865320558,71.27136256 +1/8/2022 18:00,0.2478162,,,,-15.46451,-11.23753,105.316968,105.316968,-15.31696804,-15.31696804,253.796559,-6.869665732,74.43062456 +1/8/2022 18:15,0.03812412,,,,-15.66088,-11.59304,107.981646,107.981646,-17.98164604,-17.98164604,256.1206373,-6.874009904,77.63365998 +1/8/2022 18:30,0,,,,-16.08951,-12.13976,110.6731834,110.6731834,-20.67318342,-20.67318342,258.4458498,-6.878353073,80.87504241 +1/8/2022 18:45,0.03018606,,,,-16.45156,-12.34192,113.3872038,113.3872038,-23.38720378,-23.38720378,260.7828559,-6.882695239,84.15009861 +1/8/2022 19:00,0.1970177,,,,-16.55363,-12.35369,116.1193312,116.1193312,-26.11933119,-26.11933119,263.1433079,-6.8870364,87.45478438 +1/8/2022 19:15,0.1668316,,,,-16.66676,-12.79165,118.8651152,118.8651152,-28.86511519,-28.86511519,265.5401094,-6.891376557,90.78558216 +1/8/2022 19:30,0,,,,-16.94557,-13.31894,121.6199414,121.6199414,-31.61994137,-31.61994137,267.987736,-6.89571571,94.13941391 +1/8/2022 19:45,0,,,,-17.07684,-13.32877,124.3789238,124.3789238,-34.3789238,-34.3789238,270.50264,-6.900053856,97.51356765 +1/8/2022 20:00,0.1191648,,,,-17.17077,-13.27779,127.1367741,127.1367741,-37.13677406,-37.13677406,273.1037572,-6.904390997,100.9056364 +1/8/2022 20:15,0.1191648,,,,-17.27254,-13.51332,129.8876357,129.8876357,-39.88763567,-39.88763567,275.8131427,-6.908727132,104.3134642 +1/8/2022 20:30,0.009533565,,,,-17.46061,-13.81308,132.6248733,132.6248733,-42.62487328,-42.62487328,278.6567673,-6.91306226,107.7350994 +1/8/2022 20:45,0.009533565,,,,-17.63806,-13.97781,135.3408011,135.3408011,-45.34080113,-45.34080113,281.6655108,-6.917396381,111.1687531 +1/8/2022 21:00,0.01748044,,,,-17.65191,-14.04951,138.0263269,138.0263269,-48.02632694,-48.02632694,284.8763828,-6.921729494,114.6127597 +1/8/2022 21:15,0.1303134,,,,-17.55046,-14.23335,140.6704833,140.6704833,-50.67048329,-50.67048329,288.3339888,-6.926061599,118.0655388 +1/8/2022 21:30,0.619807,,,,-16.90331,-14.26877,143.2598113,143.2598113,-53.25981125,-53.25981125,292.0922125,-6.930392695,121.5255561 +1/8/2022 21:45,1.827706,,,,-15.7325,-13.88346,145.7775515,145.7775515,-55.77755152,-55.77755152,296.2159671,-6.934722783,124.9912802 +1/8/2022 22:00,2.787635,,,,-14.3485,-12.8051,148.2026045,148.2026045,-58.20260449,-58.20260449,300.7826323,-6.939051861,128.4611302 +1/8/2022 22:15,1.694152,,,,-13.05991,-11.82164,150.508246,150.508246,-60.508246,-60.508246,305.8823267,-6.943379928,131.9334121 +1/8/2022 22:30,0.2590311,,,,-12.40802,-11.60614,152.6606631,152.6606631,-62.66066313,-62.66066313,311.6153395,-6.947706986,135.4062307 +1/8/2022 22:45,0.03178115,,,,-12.63093,-11.55431,154.6175669,154.6175669,-64.61756688,-64.61756688,318.0838331,-6.952033032,138.8773648 +1/8/2022 23:00,0,,,,-13.36034,-11.64495,156.3275025,156.3275025,-66.32750245,-66.32750245,325.3737408,-6.956358068,142.3440827 +1/8/2022 23:15,0,,,,-13.96755,-11.90703,157.7310151,157.7310151,-67.73101511,-67.73101511,333.5232612,-6.960682091,145.8028508 +1/8/2022 23:30,0.1541228,,,,-13.96076,-12.05774,158.7652675,158.7652675,-68.76526745,-68.76526745,342.4800142,-6.965005102,149.2488568 +1/8/2022 23:45,0.1604783,,,,-13.51169,-11.79733,159.3732147,159.3732147,-69.37321466,-69.37321466,352.0625567,-6.969327101,152.6751907 +1/9/2022 0:00,0.00635551,,,,-13.40725,-11.5301,159.5160487,159.5160487,-69.51604875,-69.51604875,1.956718267,-6.973648086,156.0713534 +1/9/2022 0:15,0,,,,-13.64297,-11.567,159.1839923,159.1839923,-69.18399233,-69.18399233,11.77085741,-6.977968058,159.4203756 +1/9/2022 0:30,0,,,,-13.71872,-11.48884,158.3993186,158.3993186,-68.39931861,-68.39931861,21.13396252,-6.982287015,162.6928527 +1/9/2022 0:45,0.00953331,,,,-13.92492,-11.60888,157.2096426,157.2096426,-67.20964257,-67.20964257,29.78179551,-6.986604958,165.8336218 +1/9/2022 1:00,1.361695,,,,-13.54214,-11.50422,155.6756914,155.6756914,-65.67569141,-65.67569141,37.58767099,-6.990921886,168.7300181 +1/9/2022 1:15,2.817148,,,,-11.59972,-9.968322,153.859777,153.859777,-63.85977698,-63.85977698,44.54084117,-6.995237799,171.1372049 +1/9/2022 1:30,2.249904,,,,-9.700678,-8.435923,151.8184707,151.8184707,-61.81847071,-61.81847071,50.70326112,-6.999552696,172.5623888 +1/9/2022 1:45,1.645994,,,,-8.824189,-7.863945,149.5995597,149.5995597,-59.59955966,-59.59955966,56.17033197,-7.003866576,172.4283366 +1/9/2022 2:00,1.453575,,,,-8.324639,-7.297378,147.2417973,147.2417973,-57.24179734,-57.24179734,61.0449906,-7.008179439,170.8029834 +1/9/2022 2:15,1.262848,,,,-7.924272,-6.700695,144.7759784,144.7759784,-54.77597844,-54.77597844,65.42405382,-7.012491286,168.2922197 +1/9/2022 2:30,1.159624,,,,-7.296667,-6.223367,142.2264061,142.2264061,-52.22640607,-52.22640607,69.39264612,-7.016802114,165.3450002 +1/9/2022 2:45,0.9118455,,,,-6.514361,-5.847961,139.6122999,139.6122999,-49.61229988,-49.61229988,73.02303898,-7.021111925,162.1774742 +1/9/2022 3:00,0.6290829,,,,-5.891955,-5.596139,136.9489849,136.9489849,-46.94898489,-46.94898489,76.37553346,-7.025420716,158.8896408 +1/9/2022 3:15,0.5400403,,,,-5.426033,-5.423083,134.248835,134.248835,-44.24883498,-44.24883498,79.50009253,-7.029728489,155.5311169 +1/9/2022 3:30,0.6019191,,,,-5.103567,-5.246367,131.5219988,131.5219988,-41.52199881,-41.52199881,82.43809439,-7.034035242,152.1287033 +1/9/2022 3:45,0.4430993,,,,-4.891228,-5.078378,128.7769529,128.7769529,-38.7769529,-38.7769529,85.22393638,-7.038340975,148.6980477 +1/9/2022 4:00,0.6146593,,,,-4.699261,-4.842522,126.0209213,126.0209213,-36.02092129,-36.02092129,87.88640345,-7.042645688,145.2489319 +1/9/2022 4:15,0.5177783,,,,-4.485039,-4.637522,123.2601941,123.2601941,-33.26019413,-33.26019413,90.44979533,-7.04694938,141.7878528 +1/9/2022 4:30,0.2287135,,,,-4.312117,-4.544483,120.5003732,120.5003732,-30.50037323,-30.50037323,92.93483623,-7.05125205,138.3193726 +1/9/2022 4:45,0.2318901,,,,-4.174628,-4.452839,117.7465632,117.7465632,-27.74656319,-27.74656319,95.35940302,-7.055553699,134.8468692 +1/9/2022 5:00,0.2239488,,,,-4.059383,-4.344995,115.0035212,115.0035212,-25.00352119,-25.00352119,97.73910684,-7.059854325,131.3729738 +1/9/2022 5:15,0.5130196,,,,-3.927867,-4.205622,112.2757784,112.2757784,-22.27577839,-22.27577839,100.0877558,-7.064153929,127.8998411 +1/9/2022 5:30,0.784606,,,,-3.75625,-4.044583,109.5677396,109.5677396,-19.56773962,-19.56773962,102.4177239,-7.06845251,124.4293238 +1/9/2022 5:45,0.7512316,,,,-3.581239,-3.868789,106.8837659,106.8837659,-16.88376594,-16.88376594,104.7402463,-7.072750067,120.9630882 +1/9/2022 6:00,0.6447884,,,,-3.415433,-3.689111,104.2282465,104.2282465,-14.22824648,-14.22824648,107.0656535,-7.0770466,117.5026978 +1/9/2022 6:15,0.4891289,,,,-3.236506,-3.508717,101.6056614,101.6056614,-11.60566142,-11.60566142,109.4035569,-7.081342108,114.0496763 +1/9/2022 6:30,0.2667922,,,,-2.910433,-3.441333,99.02063728,99.02063728,-9.020637284,-9.020637284,111.7629946,-7.085636592,110.6055561 +1/9/2022 6:45,0.6082185,,,,-2.442728,-3.547633,96.477998,96.477998,-6.477998003,-6.477998003,114.1525409,-7.08993005,107.1719214 +1/9/2022 7:00,0.8956422,,,,-2.557844,-3.571678,93.98281163,93.98281163,-3.982811631,-3.982811631,116.5803859,-7.094222483,103.7504471 +1/9/2022 7:15,3.072767,387.8831,0.0569149,0.1739361,-2.628611,-3.3921,91.54043189,91.54043189,-1.540431886,-1.540431886,119.0543852,-7.098513889,100.3429366 +1/9/2022 7:30,8.81303,415.2222,0.2065084,0.4788142,-2.292044,-3.19885,88.78323124,89.15653644,1.216768756,0.843463563,121.5820824,-7.102804269,96.95136092 +1/9/2022 7:45,21.56192,427.5607,0.5023713,0.8650631,-1.863439,-2.979739,86.61948882,86.8371601,3.380511176,3.162839899,124.1707021,-7.107093621,93.57790213 +1/9/2022 8:00,30.89223,447.6251,0.7532163,1.17422,-1.424039,-2.725489,84.43890244,84.58872078,5.561097559,5.41127922,126.8271147,-7.111381945,90.22499964 +1/9/2022 8:15,25.76554,437.6198,0.6206141,1.025439,-1.259967,-2.494806,82.30432179,82.41803822,7.695678209,7.581961775,129.5577697,-7.115669242,86.8954053 +1/9/2022 8:30,25.84596,435.9352,0.5874832,0.9969805,-1.161594,-2.344511,80.24060192,80.33234219,9.759398079,9.667657813,132.3685963,-7.11995551,83.59224726 +1/9/2022 8:45,35.99024,451.5883,0.9061007,1.359082,-1.176889,-2.213256,78.26214844,78.33926618,11.73785156,11.66073382,135.2648715,-7.124240749,80.31910403 +1/9/2022 9:00,32.7191,450.0129,0.8504952,1.288767,-1.329556,-2.044894,76.38005012,76.44682513,13.61994988,13.55317487,138.251054,-7.128524959,77.08009398 +1/9/2022 9:15,37.71581,451.7602,0.9896302,1.445263,-1.142839,-1.827717,74.60423562,74.66337224,15.39576438,15.33662776,141.3305876,-7.132808139,73.87998217 +1/9/2022 9:30,51.26643,459.1383,1.303992,1.81,-0.55685,-1.645961,72.94421131,72.99753043,17.05578869,17.00246957,144.5056789,-7.137090289,70.72430676 +1/9/2022 9:45,42.73662,450.0847,1.038259,1.510488,-0.2955389,-1.599039,71.40930438,71.45809668,18.59069562,18.54190332,147.7770587,-7.141371408,67.61953165 +1/9/2022 10:00,31.53484,440.6633,0.7415429,1.161647,-0.30645,-1.531078,70.00869492,70.05391575,19.99130508,19.94608425,151.143741,-7.145651496,64.57322804 +1/9/2022 10:15,31.07614,442.0604,0.7312346,1.153801,-0.2672722,-1.374339,68.75133825,68.7937222,21.24866175,21.2062778,154.6028002,-7.149930552,61.59428735 +1/9/2022 10:30,36.09766,445.5299,0.8779284,1.32785,-0.1983556,-1.21085,67.6458218,67.68595369,22.3541782,22.31404631,158.1491894,-7.154208577,58.6931705 +1/9/2022 10:45,52.39709,455.2073,1.303918,1.807421,-0.1203889,-1.112961,66.70017882,66.7385397,23.29982118,23.2614603,161.7756263,-7.158485569,55.88219139 +1/9/2022 11:00,64.61899,465.7863,1.663139,2.219054,-0.02253889,-1.0043,65.92167582,65.9586741,24.07832418,24.0413259,165.4725763,-7.162761527,53.17582673 +1/9/2022 11:15,68.83768,468.8048,1.848625,2.41598,0.07267223,-0.8706111,65.31659121,65.35258447,24.68340879,24.64741553,169.228353,-7.167036453,50.59103739 +1/9/2022 11:30,69.20121,468.2476,1.887293,2.458967,0.13605,-0.7171834,64.8900019,64.92531307,25.1099981,25.07468693,173.0293506,-7.171310345,48.14756563 +1/9/2022 11:45,56.9426,461.7179,1.501948,2.046467,0.1126556,-0.6008278,64.64559585,64.6805256,25.35440415,25.3194744,176.86041,-7.175583202,45.86814758 +1/9/2022 12:00,56.80862,462.2952,1.458844,2.006563,0.1285778,-0.5316556,64.58552784,64.62036486,25.41447216,25.37963514,180.7053017,-7.179855025,43.77854968 +1/9/2022 12:15,68.8506,469.1627,1.863639,2.451175,0.1907889,-0.4643889,64.71033185,64.74536197,25.28966815,25.25463803,184.5472937,-7.184125813,41.9072969 +1/9/2022 12:30,82.78529,471.9665,2.334018,2.924021,0.2629667,-0.3776389,65.01889899,65.05441403,24.98110101,24.94558597,188.3697623,-7.188395565,40.28493357 +1/9/2022 12:45,99.85497,475.1663,2.862092,3.4589,0.3741944,-0.2492056,65.50852315,65.54483032,24.49147685,24.45516968,192.1567928,-7.192664281,38.94266952 +1/9/2022 13:00,89.62246,475.0538,2.693471,3.311073,0.4039389,-0.1354278,66.17500964,66.21244243,23.82499036,23.78755757,195.8937221,-7.196931961,37.91034308 +1/9/2022 13:15,55.17453,462.2144,1.613204,2.173238,0.3310167,-0.07841667,67.01283643,67.05176816,22.98716357,22.94823184,199.5675842,-7.201198603,37.21381395 +1/9/2022 13:30,37.38332,451.7408,0.9267408,1.437777,0.2778445,-0.03804445,68.01535268,68.05621431,21.98464732,21.94378569,203.1674296,-7.205464209,36.87215661 +1/9/2022 13:45,37.25303,453.8198,0.927223,1.472868,0.3871111,-0.01590556,69.17499674,69.21830151,20.82500326,20.78169849,206.6845107,-7.209728777,36.89525229 +1/9/2022 14:00,41.64345,457.6722,1.079572,1.652161,0.6049278,0.02986111,70.48351672,70.52989565,19.51648328,19.47010435,210.11234,-7.213992306,37.28242643 +1/9/2022 14:15,39.3651,456.8824,1.029052,1.579552,0.7462167,0.1289778,71.93217538,71.98243056,18.06782462,18.01756944,213.4466349,-7.218254797,38.02254449 +1/9/2022 14:30,35.24826,456.2649,0.8736153,1.402661,0.8213111,0.2454944,73.51192329,73.56711137,16.48807671,16.43288863,216.6851777,-7.222516249,39.09553592 +1/9/2022 14:45,32.03051,460.0766,0.7254503,1.231116,0.9793278,0.3769445,75.21352267,75.27509191,14.78647733,14.72490809,219.8276164,-7.226776661,40.47488938 +1/9/2022 15:00,22.40017,451.11,0.4576428,0.8928917,1.0494,0.4924555,77.02759281,77.09762123,12.97240719,12.90237877,222.8752332,-7.231036034,42.13046376 +1/9/2022 15:15,13.03565,448.6428,0.2574566,0.6145698,0.9437389,0.5760167,78.94452094,79.02615886,11.05547906,10.97384114,225.8307016,-7.235294366,44.03103764 +1/9/2022 15:30,7.546001,491.0407,0.1322314,0.4409091,0.8371111,0.6136222,80.95409567,81.05246109,9.045904327,8.947538914,228.6978539,-7.239551657,46.14626264 +1/9/2022 15:45,5.510188,529.8298,0.08489208,0.3482014,0.7872722,0.6512445,83.04444003,83.16863962,6.955559969,6.831360378,231.4814656,-7.243807908,48.44793385 +1/9/2022 16:00,3.456938,519.7018,0.03489209,0.1482014,0.7574278,0.6798667,85.19879549,85.36719696,4.801204506,4.63280304,234.1870699,-7.248063116,50.9106605 +1/9/2022 16:15,1.259233,362.2063,0,0,0.6990889,0.6826167,87.38422079,87.64104313,2.615779212,2.358956871,236.8208038,-7.252317282,53.5120916 +1/9/2022 16:30,0.1730865,219.288,0,0,0.6839667,0.7227722,89.50910226,89.98349588,0.490897741,0.016504116,239.3892875,-7.256570406,56.23285099 +1/9/2022 16:45,0,,,,0.6773111,0.74395,92.3882684,92.3882684,-2.3882684,-2.3882684,241.8995366,-7.260822487,59.05630889 +1/9/2022 17:00,0,,,,0.6896945,0.7746056,94.84944825,94.84944825,-4.84944825,-4.84944825,244.3589076,-7.265073524,61.96828012 +1/9/2022 17:15,0,,,,0.7283,0.8204167,97.36146799,97.36146799,-7.361467993,-7.361467993,246.7750727,-7.269323518,64.95670267 +1/9/2022 17:30,0,,,,0.7478889,0.8272333,99.91906989,99.91906989,-9.919069888,-9.919069888,249.156023,-7.273572467,68.01132953 +1/9/2022 17:45,0,,,,0.7464667,0.7939722,102.5172669,102.5172669,-12.51726686,-12.51726686,251.5101019,-7.277820372,71.12345046 +1/9/2022 18:00,0,,,,0.7157778,0.77275,105.1512983,105.1512983,-15.15129826,-15.15129826,253.8460649,-7.282067231,74.28564733 +1/9/2022 18:15,0,,,,0.7197889,0.7926,107.8165814,107.8165814,-17.81658136,-17.81658136,256.1731698,-7.286313045,77.49158416 +1/9/2022 18:30,0,,,,0.7552,0.8033444,110.5086592,110.5086592,-20.50865924,-20.50865924,258.5012996,-7.290557813,80.73583078 +1/9/2022 18:45,0,,,,0.7590055,0.8400834,113.2231419,113.2231419,-23.22314189,-23.22314189,260.8411218,-7.294801535,84.01371359 +1/9/2022 19:00,0,,,,0.7670722,0.8812444,115.9556398,115.9556398,-25.95563984,-25.95563984,263.2042901,-7.299044209,87.32119077 +1/9/2022 19:15,0,,,,0.7748778,0.8736111,118.7016889,118.7016889,-28.70168894,-28.70168894,265.6037001,-7.303285837,90.65474916 +1/9/2022 19:30,0,,,,0.7825111,0.8762611,121.4566608,121.4566608,-31.45666084,-31.45666084,268.0538086,-7.307526417,94.0113168 +1/9/2022 19:45,0,,,,0.8273,0.8817611,124.2156554,124.2156554,-34.21565537,-34.21565537,270.5710334,-7.311765948,97.38818927 +1/9/2022 20:00,0,,,,0.7757056,0.7750056,126.9733696,126.9733696,-36.97336963,-36.97336963,273.1742547,-7.316004431,100.7829685 +1/9/2022 20:15,0,,,,0.6372445,0.6124055,129.7239328,129.7239328,-39.72393282,-39.72393282,275.8854435,-7.320241865,104.193509 +1/9/2022 20:30,0,,,,0.6011944,0.5915889,132.460696,132.460696,-42.46069601,-42.46069601,278.730446,-7.32447825,107.6178707 +1/9/2022 20:45,0,,,,0.7408056,0.8735278,135.175962,135.175962,-45.17596205,-45.17596205,281.7399608,-7.328713584,111.0542785 +1/9/2022 21:00,0,,,,0.8743111,1.126167,137.8606316,137.8606316,-47.86063163,-47.86063163,284.950737,-7.332947869,114.5010827 +1/9/2022 21:15,0,,,,0.9024944,1.153844,140.5037386,140.5037386,-50.50373864,-50.50373864,288.4070082,-7.337181102,117.9567215 +1/9/2022 21:30,0,,,,0.9392444,1.252283,143.0918401,143.0918401,-53.09184009,-53.09184009,292.1621308,-7.341413285,121.419683 +1/9/2022 21:45,0,,,,1.027428,1.58825,145.6082176,145.6082176,-55.60821764,-55.60821764,296.2802784,-7.345644416,124.8884627 +1/9/2022 22:00,0.1222684,,,,1.113867,2.017889,148.0318537,148.0318537,-58.03185366,-58.03185366,300.8378119,-7.349874495,128.3615136 +1/9/2022 22:15,0.1953116,,,,1.076989,2.221778,150.3361708,150.3361708,-60.33617084,-60.33617084,305.9234904,-7.354103522,131.837184 +1/9/2022 22:30,0.3985631,,,,1.089172,2.086005,152.4876008,152.4876008,-62.48760081,-62.48760081,311.6358885,-7.358331496,135.3136337 +1/9/2022 22:45,1.03692,,,,1.201961,1.98915,154.4442351,154.4442351,-64.44423507,-64.44423507,318.0752274,-7.362558416,138.7887144 +1/9/2022 23:00,1.41484,,,,1.361289,2.035178,156.1551642,156.1551642,-66.15516422,-66.15516422,325.3256989,-7.366784283,142.2597931 +1/9/2022 23:15,1.082945,,,,1.361522,1.920817,157.5616281,157.5616281,-67.56162815,-67.56162815,333.4248568,-7.371009096,145.7234744 +1/9/2022 23:30,0.465252,,,,1.065783,1.708306,158.6015182,158.6015182,-68.60151819,-68.60151819,342.3220768,-7.375232854,149.1751456 +1/9/2022 23:45,0.08574665,,,,0.6295056,1.495756,159.2183041,159.2183041,-69.21830414,-69.21830414,351.8410932,-7.379455557,152.6081948 +1/10/2022 0:00,0,,,,0.05334444,1.249272,159.3731701,159.3731701,-69.37317006,-69.37317006,1.675766729,-7.383677205,156.0125874 +1/10/2022 0:15,0,,,,-0.4892444,0.97405,159.0556506,159.0556506,-69.05565063,-69.05565063,11.44256091,-7.387897797,159.3721118 +1/10/2022 0:30,0,,,,-0.7173667,0.7203611,158.2868237,158.2868237,-68.28682371,-68.28682371,20.775247,-7.392117333,162.6586604 +1/10/2022 0:45,0,,,,-0.7944222,0.4369389,157.1130159,157.1130159,-67.11301594,-67.11301594,29.4096738,-7.396335812,165.819389 +1/10/2022 1:00,0,,,,-1.066556,0.1304667,155.5939425,155.5939425,-65.59394255,-65.59394255,37.21582893,-7.400553235,168.7457735 +1/10/2022 1:15,0,,,,-1.391644,-0.1779611,153.7913219,153.7913219,-63.79132188,-63.79132188,44.17849131,-7.404769599,171.1989224 +1/10/2022 1:30,0,,,,-1.754378,-0.4308056,151.7614987,151.7614987,-61.7614987,-61.7614987,50.35561925,-7.408984906,172.6845485 +1/10/2022 1:45,0,,,,-2.028239,-0.5691778,149.5522748,149.5522748,-59.55227482,-59.55227482,55.83970285,-7.413199154,172.5946448 +1/10/2022 2:00,0,,,,-2.195017,-0.7263556,147.2025446,147.2025446,-57.20254458,-57.20254458,60.73182145,-7.417412344,170.9761666 +1/10/2022 2:15,0,,,,-2.3734,-1.00645,144.7432918,144.7432918,-54.74329178,-54.74329178,65.12772605,-7.421624475,168.4554746 +1/10/2022 2:30,0,,,,-2.690961,-1.396917,142.1990133,142.1990133,-52.1990133,-52.1990133,69.11199733,-7.425835545,165.4963043 +1/10/2022 2:45,0,,,,-3.095078,-1.788644,139.5891066,139.5891066,-49.58910663,-49.58910663,72.75667967,-7.430045556,162.3183675 +1/10/2022 3:00,0,,,,-3.387289,-2.036833,136.9290511,136.9290511,-46.92905114,-46.92905114,76.12202714,-7.434254507,159.0219046 +1/10/2022 3:15,0,,,,-3.382306,-2.182945,134.2313505,134.2313505,-44.23135054,-44.23135054,79.25805131,-7.438462396,155.6561767 +1/10/2022 3:30,0,,,,-3.229517,-2.317889,131.5062608,131.5062608,-41.5062608,-41.5062608,82.20622485,-7.442669225,152.2476202 +1/10/2022 3:45,0,,,,-3.423872,-2.480894,128.7623462,128.7623462,-38.76234619,-38.76234619,85.00105735,-7.446874991,148.811602 +1/10/2022 4:00,0,,,,-3.889989,-2.664594,126.006902,126.006902,-36.00690199,-36.00690199,87.6714485,-7.451079696,145.3576995 +1/10/2022 4:15,0,,,,-4.36165,-2.860628,123.2462759,123.2462759,-33.24627587,-33.24627587,90.24180766,-7.455283338,141.892261 +1/10/2022 4:30,0,,,,-4.661489,-3.063028,120.4861159,120.4861159,-30.48611592,-30.48611592,92.73296009,-7.459485917,138.4197398 +1/10/2022 4:45,-0.1921244,,,,-5.099833,-3.314428,117.7315637,117.7315637,-27.73156372,-27.73156372,95.162874,-7.463687433,134.9434315 +1/10/2022 5:00,-0.331865,,,,-5.619717,-3.599161,114.9874058,114.9874058,-24.9874058,-24.9874058,97.54724245,-7.467887885,131.4659043 +1/10/2022 5:15,-0.1397406,,,,-5.727172,-3.761294,112.2581964,112.2581964,-22.25819638,-22.25819638,99.89994681,-7.472087273,127.9892631 +1/10/2022 5:30,0,,,,-5.737972,-3.888778,109.5483582,109.5483582,-19.54835817,-19.54835817,102.2334269,-7.476285596,124.5153198 +1/10/2022 5:45,0,,,,-5.996439,-4.031561,106.8622659,106.8622659,-16.86226586,-16.86226586,104.5589772,-7.480482854,121.045707 +1/10/2022 6:00,0,,,,-6.216061,-4.148594,104.2043187,104.2043187,-14.20431866,-14.20431866,106.886983,-7.484679047,117.581959 +1/10/2022 6:15,0,,,,-6.455728,-4.293417,101.579004,101.579004,-11.57900402,-11.57900402,109.2271062,-7.488874173,114.1255733 +1/10/2022 6:30,0,,,,-6.314078,-4.456339,98.99095347,98.99095347,-8.990953474,-8.990953474,111.5884333,-7.493068234,110.6780585 +1/10/2022 6:45,0.01905953,,,,-5.833139,-4.530222,96.44499426,96.44499426,-6.444994262,-6.444994262,113.9795855,-7.497261228,107.2409762 +1/10/2022 7:00,0.692495,383.188,0.02409638,0.0987952,-5.634478,-4.550517,93.94619658,93.94619658,-3.946196579,-3.946196579,116.4087993,-7.501453155,103.8159793 +1/10/2022 7:15,4.051762,526.9511,0.1061139,0.4018654,-5.548989,-4.618139,91.49991566,91.49991566,-1.499915657,-1.499915657,118.8839779,-7.505644014,100.4048493 +1/10/2022 7:30,12.19816,595.6187,0.2772382,0.8527027,-5.502817,-4.685505,88.74308961,89.11183062,1.256910393,0.888169376,121.4127142,-7.509833805,97.00953462 +1/10/2022 7:45,26.1817,650.2922,0.5858189,1.496214,-5.593117,-4.756772,86.57236112,86.78797831,3.427638884,3.212021685,124.0022847,-7.514022528,93.63219392 +1/10/2022 8:00,53.04212,674.6829,1.191891,2.648305,-5.328667,-4.744622,84.38610992,84.53477988,5.61389008,5.465220119,126.6596159,-7.518210183,90.27524166 +1/10/2022 8:15,63.54718,672.733,1.516714,3.262005,-4.698855,-4.707622,82.24609794,82.3590603,7.75390206,7.640939701,129.3912175,-7.522396768,86.94140286 +1/10/2022 8:30,68.67855,673.4453,1.789825,3.803138,-4.078267,-4.803972,80.17686814,80.26805733,9.823131859,9.731942665,132.2030838,-7.526582283,83.63377649 +1/10/2022 8:45,128.1625,690.8863,3.159209,6.298739,-3.396989,-4.881983,78.19273215,78.26941617,11.80726785,11.73058383,135.1005621,-7.530766729,80.35590904 +1/10/2022 9:00,258.7075,707.278,6.407966,12.33971,-1.426189,-4.716417,76.30475321,76.37116799,13.69524679,13.62883201,138.0881864,-7.534950104,77.1118836 +1/10/2022 9:15,302.9229,703.8668,7.857469,15.01594,1.02055,-4.513289,74.52286273,74.58168769,15.47713727,15.41831231,141.1694794,-7.539132409,73.90642621 +1/10/2022 9:30,342.8206,706.5677,8.353184,16.15252,2.246606,-4.417528,72.85658549,72.90962625,17.14341451,17.09037375,144.3467293,-7.543313642,70.74503199 +1/10/2022 9:45,401.7205,709.0213,9.823538,19.08778,4.194889,-4.218417,71.31527845,71.36381565,18.68472155,18.63618435,147.6207487,-7.547493803,67.63411743 +1/10/2022 10:00,304.8503,716.7634,7.813375,15.29169,3.4033,-4.382744,69.90816105,69.95314311,20.09183895,20.04685689,150.9906296,-7.551672893,64.58120197 +1/10/2022 10:15,205.1662,730.3998,5.165438,10.36973,-0.04825,-4.857044,68.64423667,68.68639313,21.35576333,21.31360687,154.4535178,-7.55585091,61.59512133 +1/10/2022 10:30,267.5282,735.8053,6.616628,13.21098,-0.7569278,-5.012455,67.53214852,67.57206034,22.46785148,22.42793966,158.0044251,-7.560027854,58.6862778 +1/10/2022 10:45,523.0055,724.6243,14.00415,27.09476,3.920489,-4.552516,66.57999208,66.61813722,23.42000792,23.38186278,161.6361109,-7.564203725,55.86692575 +1/10/2022 11:00,483.6143,719.5889,13.37476,25.8814,7.599189,-4.255789,65.7951007,65.83188497,24.2048993,24.16811503,165.3390608,-7.568378522,53.15148506 +1/10/2022 11:15,218.3991,735.9229,5.694468,11.52701,3.228567,-4.7219,65.18382195,65.21960064,24.81617805,24.78039936,169.101582,-7.572552245,50.55686817 +1/10/2022 11:30,266.6568,747.065,6.320264,12.6918,0.2843722,-4.821116,64.75130134,64.78639523,25.24869866,25.21360477,172.9100341,-7.576724894,48.10278596 +1/10/2022 11:45,360.4281,749.3061,9.423651,18.70288,1.362289,-4.67395,64.50129188,64.53599953,25.49870812,25.46400047,176.7491948,-7.580896468,45.81197248 +1/10/2022 12:00,446.2309,738.8746,11.98311,23.68973,5.042383,-4.289011,64.43600668,64.4706146,25.56399332,25.5293854,180.6027444,-7.585066966,43.71023729 +1/10/2022 12:15,516.1099,734.2482,13.68329,27.06325,6.931684,-3.955055,64.55602868,64.59082031,25.44397132,25.40917969,184.4538384,-7.589236389,41.82621238 +1/10/2022 12:30,666.6237,744.389,16.89801,34.13988,8.079233,-3.915461,64.86028636,64.8955508,25.13971364,25.1044492,188.2857249,-7.593404736,40.19063136 +1/10/2022 12:45,836.6114,745.2263,18.96199,38.32774,11.36502,-3.718539,65.34609814,65.38213937,24.65390186,24.61786063,192.0823531,-7.597572006,38.83498756 +1/10/2022 13:00,849.2806,738.7607,18.70629,37.07943,12.64396,-3.686628,66.0092806,66.04642819,23.9907194,23.95357181,195.828924,-7.601738199,37.78949435 +1/10/2022 13:15,849.4475,731.1484,19.22781,37.45869,15.15191,-3.299989,66.84431043,66.88293272,23.15568957,23.11706728,199.5123429,-7.605903315,37.08045254 +1/10/2022 13:30,689.2693,725.7772,16.70634,32.56181,13.95149,-3.339422,67.84452422,67.88504574,22.15547578,22.11495426,203.1215461,-7.610067353,36.72739307 +1/10/2022 13:45,401.7318,731.951,11.21815,22.17096,7.797722,-3.889472,69.00233867,69.04526406,20.99766133,20.95473594,206.6476895,-7.614230313,36.74060166 +1/10/2022 14:00,248.8409,743.2861,7.27232,14.49127,3.417867,-4.0823,70.30947361,70.3554221,19.69052639,19.6445779,210.08421,-7.618392194,37.11969131 +1/10/2022 14:15,209.2755,747.0358,5.687728,11.34636,1.027011,-4.301672,71.75715982,71.80691679,18.24284018,18.19308321,213.4267703,-7.622552997,37.85365794 +1/10/2022 14:30,138.7578,744.8886,3.675613,7.419622,-1.688361,-4.709672,73.33631555,73.39091307,16.66368445,16.60908693,216.6731183,-7.62671272,38.92240107 +1/10/2022 14:45,112.0935,743.9083,3.05655,6.338306,-3.195194,-4.9793,75.03767452,75.09852316,14.96232548,14.90147684,219.8228855,-7.630871363,40.29924949 +1/10/2022 15:00,110.0491,735.4326,3.003352,6.220262,-2.988489,-5.111539,76.85183776,76.92095457,13.14816224,13.07904543,222.877353,-7.635028926,41.95382054 +1/10/2022 15:15,84.4995,718.4418,2.096101,4.409246,-3.576683,-5.452211,78.76919653,78.84962656,11.23080347,11.15037344,225.8392058,-7.639185409,43.85461866 +1/10/2022 15:30,85.69917,733.3431,2.810674,5.6119,-4.267167,-5.605467,80.77959378,80.87625722,9.220406217,9.123742779,228.7122967,-7.64334081,45.97102661 +1/10/2022 15:45,71.49798,719.3654,2.496457,5.001792,-4.142139,-5.439145,82.8713346,82.9929227,7.128665401,7.007077303,231.5014291,-7.647495131,48.27459921 +1/10/2022 16:00,28.72262,665.4918,0.7309195,1.728717,-4.668067,-5.321567,85.02822755,85.19209275,4.971772451,4.807907253,234.2121682,-7.651648369,50.73974444 +1/10/2022 16:15,8.039383,600.9518,0.2523111,0.7754,-6.170833,-5.369822,87.21931115,87.46664759,2.78068885,2.533352409,236.8506855,-7.655800525,53.34395059 +1/10/2022 16:30,0.6811908,557.5711,0.0611111,0.235,-7.765211,-5.613572,89.35947568,89.80987801,0.640524316,0.190121991,239.4236369,-7.659951599,56.06771768 +1/10/2022 16:45,0.03334783,561.4745,0,0,-8.945694,-5.943511,92.21547284,92.21547284,-2.215472839,-2.215472839,241.9380735,-7.66410159,58.89432343 +1/10/2022 17:00,-0.08735405,,,,-9.4763,-6.182117,94.67749769,94.67749769,-4.677497692,-4.677497692,244.4013861,-7.668250497,61.80951533 +1/10/2022 17:15,-0.1048252,,,,-9.784122,-6.464261,97.19036524,97.19036524,-7.19036524,-7.19036524,246.8212791,-7.67239832,64.80118376 +1/10/2022 17:30,-1.440561,,,,-10.57104,-7.003133,99.74879961,99.74879961,-9.748799609,-9.748799609,249.2057739,-7.67654506,67.85904905 +1/10/2022 17:45,-2.712758,,,,-11.73181,-7.986522,102.347797,102.347797,-12.34779702,-12.34779702,251.5632408,-7.680690714,70.97437961 +1/10/2022 18:00,-0.195458,,,,-11.89225,-8.36065,104.9825812,104.9825812,-14.98258119,-14.98258119,253.9024594,-7.684835284,74.13974428 +1/10/2022 18:15,1.497619,,,,-10.66256,-7.672122,107.6485546,107.6485546,-17.64855459,-17.64855459,256.2327073,-7.688978768,77.34880028 +1/10/2022 18:30,0.9736995,,,,-9.324455,-7.27885,110.341246,110.341246,-20.34124596,-20.34124596,258.5638831,-7.693121167,80.59611515 +1/10/2022 18:45,0.8054042,,,,-8.122817,-7.230422,113.0562511,113.0562511,-23.05625114,-23.05625114,260.906664,-7.697262479,83.87701639 +1/10/2022 19:00,0.2351132,,,,-7.357272,-7.237372,,,,,,, +1/10/2022 19:15,-2.423988,,,,-7.488067,-7.472116,,,,,,, +1/10/2022 19:30,-5.39413,,,,-8.607639,-8.047572,,,,,,, +1/10/2022 19:45,-6.316714,,,,-10.22274,-9.069683,,,,,,, +1/10/2022 20:00,-5.722897,,,,-11.68762,-10.1064,,,,,,, +1/10/2022 20:15,-3.769511,,,,-12.80632,-10.84562,,,,,,, +1/10/2022 20:30,-3.452007,,,,-13.68255,-11.46631,,,,,,, +1/10/2022 20:45,-2.206551,,,,-13.97515,-11.35991,,,,,,, +1/10/2022 21:00,0.2080746,,,,-13.39726,-10.4194,,,,,,, +1/10/2022 21:15,0.2080833,,,,-12.32311,-9.299583,,,,,,, +1/10/2022 21:30,-1.345389,,,,-11.53553,-8.764911,,,,,,, +1/10/2022 21:45,-1.42481,,,,-11.19843,-8.651484,,,,,,, +1/10/2022 22:00,-0.2970335,,,,-11.02538,-8.529866,,,,,,, +1/10/2022 22:15,-0.04924034,,,,-11.01999,-8.61165,,,,,,, +1/10/2022 22:30,0.02700322,,,,-10.84902,-8.547039,,,,,,, +1/10/2022 22:45,0.06671461,,,,-10.64079,-8.525689,,,,,,, +1/10/2022 23:00,0.0603609,,,,-10.38599,-8.548889,,,,,,, +1/10/2022 23:15,-0.01747335,,,,-10.26169,-8.659889,,,,,,, +1/10/2022 23:30,-0.01747335,,,,-10.3576,-8.866811,,,,,,, +1/10/2022 23:45,0,,,,-10.43267,-9.007706,,,,,,, diff --git a/pvanalytics/data/snow_snowfall.csv b/pvanalytics/data/snow_snowfall.csv new file mode 100644 index 00000000..48aec755 --- /dev/null +++ b/pvanalytics/data/snow_snowfall.csv @@ -0,0 +1,7 @@ +DATE,SNOW +2022-01-05,0.0 +2022-01-06,0.0 +2022-01-07,38.0 +2022-01-08,25.0 +2022-01-09,0.0 +2022-01-10,0.0 diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py new file mode 100644 index 00000000..c3b542db --- /dev/null +++ b/pvanalytics/features/snow.py @@ -0,0 +1,260 @@ +import numpy as np + + +def get_irradiance_sapm(temp_cell, i_mp, imp0, c0, c1, alpha_imp, + irrad_ref=1000, temp_ref=25): + """ + Model effective irradiance from current at maximum power and cell + temperature. + + Solves Eqn. 2 from [1]_. + + Parameters + ---------- + temp_cell : array-like + Temperature of cells inside module. [degrees C] + i_mp : array-like + Maximum power current at the resolution of a single module. [A] + imp0 : float + Short-circuit current at reference condition. [A] + c0, c1 : float + Empirically determined coefficients relating ``i_mp`` to effective + irradiance. + alpha_imp : float + Normalized temperature coefficient for short-circuit current. [1/°C] + irrad_ref : float, default 1000 + Reference irradiance. [W/m2] + temp_ref : float, default 25 + Reference cell temperature. [degrees C] + + Returns + ------- + effective_irradiance : array-like + Effective irradiance. [W/m2] + + References + ---------- + .. [1] D. L. King, E.E. Boyson, and J.A. Kratochvil, "Photovoltaic Array + Performance Model", SAND2004-3535, Sandia National Laboratories, + Albuquerque, NM, 2004. + """ + + a = imp0*c1*(1 + alpha_imp*(temp_cell - temp_ref)) + b = imp0*c0*(1 + alpha_imp*(temp_cell - temp_ref)) + c = -i_mp + discriminant = np.square(b) - 4*a*c + effective_irradiance = (-b + np.sqrt(discriminant))/(2*a) * irrad_ref + return effective_irradiance + + +def get_irradiance_imp(i_mp, imp0, irrad_ref=1000): + """ + Model effective irradiance from maximum power current. + + Assumes a linear relationship between effective irradiance and maximum + power current, i.e., Eqn. 8 from [1]_. + + Parameters + ---------- + i_mp : array-like + Maximum power current at the resolution of a single module. [A] + imp0 : float + Short-circuit current at reference condition. [A] + irrad_ref : float + The reference irradiance used to determine ``imp0``. [W/m2] + + Returns + ------- + effective_irradiance : array-like + Effective irradiance. [W/m2] + + References + ---------- + .. [1] C. F. Abe, J. B. Dias, G. Notton, G. A. Faggianelli, G. Pigelet, + and D. Ouvrard, "Estimation of the effective irradiance and bifacial + gain for PV arrays using the maximum power current", IEEE Journal of + Photovoltaics, 2022, pp. 432-441. :doi:`10.1109/JPHOTOV.2023.3242117` + """ + return i_mp / imp0 * irrad_ref + + +def get_transmission(measured_e_e, modeled_e_e, current_dc): + + """ + Estimate transmission as the ratio of modeled effective irradiance to + measured irradiance. + + Measured irradiance should be in the array's plane and represent snow-free + conditions. For example, the measured irradiance could be obtained with a + heated plane-of-array pyranometer. When necessary, the irradiance should be + adjusted for reflections and spectral content. + + Parameters + ---------- + measured_e_e : array-like + Plane-of-array irradiance without the effect of snow. [W/m2] + modeled_e_e : array-like + Effective irradiance modeled from measured current at maximum power. + [W/m2] + current_dc : array-like + Measured DC current at the resolution of a single module. [A] + + Returns + ------- + T : array-like + Effective transmission. [unitless] Returns NaN where measured DC + current is NaN and where measured irradiance is zero. Returns zero + where measured current is zero. Returns 1 where the ratio between + measured and modeled irradiance exceeds 1. + + References + ---------- + .. [1] E. C. Cooper, J. L. Braid and L. Burnham, "Identifying the + Electrical Signature of Snow in Photovoltaic Inverter Data," 2023 IEEE + 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, + 2023, pp. 1-5. :doi:`10.1109/PVSC48320.2023.10360065` + """ + transmission = modeled_e_e / measured_e_e + # no transmission if no current + transmission[np.isnan(current_dc)] = np.nan + transmission[current_dc == 0] = 0 + # no transmission if no irradiance + transmission[measured_e_e == 0] = np.nan + # bound transmission between 0 and 1 + transmission[transmission < 0] = np.nan + transmission[transmission > 1] = 1 + + return transmission + + +def categorize(transmission, measured_voltage, + modeled_voltage_with_snow, + modeled_voltage_no_snow, + min_dcv, max_dcv, threshold_vratio, threshold_transmission): + + """ + Categorizes electrical behavior into a snow-related mode. + + Parameters + ---------- + transmission : array-like + Fraction of plane-of-array irradiance that can reach the array's cells + through the snow cover. [dimensionless] + measured_voltage : array-like + Measured DC voltage. [V] + modeled_voltage_with_snow : array-like + DC voltage modeled using measured plane-of-array irradiance reduced by + calculated transmission. [V] + modeled_voltage_no_snow : array-like + DC voltage modeled using measured plane-of-array irradiance and + assuming transmission equals 1. [V] + min_dcv : float + The lower voltage bound on the inverter's maximum power point + tracking (MPPT) algorithm. [V] + max_dcv : float + The upper voltage bound on the inverter's maximum power point + tracking (MPPT) algorithm. [V] + threshold_vratio : float + The lower bound for vratio that is representative of snow-free + conditions. Determined empirically. Depends on system configuration and + site conditions. [unitless] + threshold_transmission : float + The lower bound on transmission that is found under snow-free + conditions, determined empirically. [unitless] + + Returns + ------- + mode : array-like + ``mode`` is ``None`` when any of the inputs used to determine ``mode`` + is ``nan``. + vmp_ratio : array-like + Ratio between measured DC voltage and DC voltage modeled with + calculated transmission. + + Notes + ----- + Modes are defined in [1]_: + + * Mode 0: Indicates periods with enough opaque snow that the system is not + producing power. Specifically, Mode 0 is when the measured voltage is + below the lower bound of the inverter's MPPT range but the voltage + modeled using measured irradiance and ideal transmission is above the + lower bound of the inverter's MPPT range. + * Mode 1: Indicates periods when the system has non-uniform snow which + affects all strings. Mode 1 is assigned when both operating voltage and + current are reduced. Operating voltage is reduced when snow causes + mismatch and current is decreased due to reduced transmission. + * Mode 2: Indicates periods when the system has non-uniform snow which + causes mismatch for some modules, but doesn't reduce light transmission + to other modules. + * Mode 3: Indicates periods when the the system has snow that reduces + light transmission but doesn't create mismatch. Operating voltage is + consistent with snow-free conditions but current is reduced. + * Mode 4: Voltage and current are consistent with snow-free conditions. + + * Mode -1: Indicates periods where it is unknown if or how snow impacts + power output. Mode -1 includes periods when: + + 1. Voltage modeled using measured irradiance and ideal transmission + is outside the inverter's MPPT range, OR + 2. measured voltage exceeds the upper bound of the inverter's MPPT + algorithm. + + Mode -1 is added in this function to cover a case that was not addressed + in [1]_. + + Mode is None when measured values (voltage, current, irradiance or + temperature) are either missing or produce modeled voltage that is + invalid. + + References + ---------- + .. [1] E. C. Cooper, J. L. Braid and L. M. Burnham, "Identifying the + Electrical Signature of Snow in Photovoltaic Inverter Data," 2023 IEEE + 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, + 2023, pp. 1-5, :doi:`10.1109/PVSC48320.2023.10360065`. + """ + umin_meas = measured_voltage >= min_dcv + umax_meas = measured_voltage < max_dcv + + umin_model = modeled_voltage_no_snow >= min_dcv + umax_model = modeled_voltage_no_snow < max_dcv + + # Voltage is modeled as NaN if transmission = 0, but V = 0 makes more sense + modeled_voltage_with_snow_copy = np.where( + transmission == 0, 0, modeled_voltage_with_snow) + + with np.errstate(divide='ignore'): + vmp_ratio =\ + measured_voltage /\ + modeled_voltage_with_snow_copy + + # take care of divide by zero + vmp_ratio = np.where(modeled_voltage_with_snow_copy == 0, 1, + vmp_ratio) + + # vmp_ratio discriminates between states (1,2) and (3,4) + uvr = np.where(vmp_ratio >= threshold_vratio, 3, 1) + + # transmission discriminates within (1,2) and (3,4) + utrans = np.where(transmission >= threshold_transmission, 1, 0) + + # None if transmission, vmp_ratio, modeled_voltage_no_snow, + # modeled_voltage_with_snow_copy, or measured_voltage is nan + + # 0 if umin_meas is 0, i.e., measurement indicate no power + # state 1, 2, 3, 4 defined by uvr + utrans + mode = umin_meas * (uvr + utrans) + + # -1 if umax_model is 0 + # -1 if umax_meas is 0 or umin_meas is 0 + mode = np.where(~umin_model | ~umax_model | ~umax_meas, -1, mode) + + # replace nan with None + mode = np.where(np.isnan(vmp_ratio) | np.isnan(transmission) | + np.isnan(measured_voltage) | + np.isnan(modeled_voltage_with_snow_copy) | + np.isnan(modeled_voltage_no_snow), + None, mode) + + return mode, vmp_ratio diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py new file mode 100644 index 00000000..8d62f5a9 --- /dev/null +++ b/pvanalytics/tests/features/test_snow.py @@ -0,0 +1,77 @@ +import numpy as np +import pandas as pd +from numpy.testing import assert_array_equal +from pandas.testing import assert_series_equal +from pvanalytics.features import snow + + +def test_get_irradiance_sapm(): + # solve Ee^2 + 2 Ee - 3 = 0 + c0, c1 = (2, 1) + imp0 = 6. + alpha_imp = -2. / 3 + temp_cell = 26. + # effective irradiance = i_mp / factor + i_mp = np.array([6., 0., np.nan]) + result = snow.get_irradiance_sapm(temp_cell, i_mp, imp0, c0, c1, alpha_imp) + expected = np.array([1000., 0., np.nan]) # from suns to W/m2 + assert_array_equal(result, expected) + # test with Series + i_mp = pd.Series(data=i_mp) + temp_cell = pd.Series(index=i_mp.index, data=26.) + result = snow.get_irradiance_sapm(temp_cell, i_mp, imp0, c0, c1, alpha_imp) + assert_series_equal(result, pd.Series(index=i_mp.index, data=expected)) + + +def test_get_irradiance_imp(): + # solve Ee = Imp / Imp0 + imp0 = 6. + i_mp = np.array([6., 0., np.nan]) + result = snow.get_irradiance_imp(i_mp, imp0) + expected = np.array([1000., 0, np.nan]) + assert_array_equal(result, expected) + # test with Series + i_mp = pd.Series(data=i_mp) + result = snow.get_irradiance_imp(i_mp, imp0) + assert_series_equal(result, pd.Series(index=i_mp.index, data=expected)) + + +def test_get_transmission(): + # solve modeled_ee / measured_ee, subject to i_mp>0, with bounds + # T[T.isna()] = np.nan + # T[i_mp == 0] = 0 + # T[T < 0] = np.nan + # T[T > 1] = 1 + measured_ee = pd.Series(data=[1., 0.5, 1., -1., np.nan]) + modeled_ee = pd.Series(data=[1., 1., 1., 1., 1.]) + i_mp = pd.Series(data=[1., 1., 0., 1., 1.]) + result = snow.get_transmission(measured_ee, modeled_ee, i_mp) + expected = pd.Series(data=[1., 1., 0., np.nan, np.nan]) + assert_series_equal(result, expected) + + +def test_categorize(): + measured_voltage = np.array([400., 450., 350., 420., 420., 495., 270., + 200., 850., 0., 700.]) + modeled_voltage_with_calculated_transmission = np.array([np.nan, 500, 700, + 700, 600, 550, + 300, 200, 600, + 0, 700]) + modeled_voltage_with_ideal_transmission = np.array([700, 600, 700, 750, + 700, 700, 350, 250, + 600, 400, 850]) + transmission = np.array([0.5, np.nan, 0.5, 0.9, 0.5, 0.9, 0.9, 0.9, 1, 0, + 0.9]) + + min_dcv = 300 + max_dcv = 800 + threshold_vratio = 0.7 + threshold_transmission = 0.6 + + expected = np.array([None, None, 1, 2, 3, 4, 0, -1, -1, 0, -1]) + result, _ = snow.categorize(transmission, measured_voltage, + modeled_voltage_with_calculated_transmission, + modeled_voltage_with_ideal_transmission, + min_dcv, max_dcv, threshold_vratio, + threshold_transmission) + assert_array_equal(result, expected) From 2c6a7afc3b53999b1f074c9f7f4a58a4738a95a9 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Wed, 16 Oct 2024 10:54:51 -0400 Subject: [PATCH 2/2] Finalize v0.2.1 (#216) * clean up 0.2.1 whatsnew page * include 0.2.1 whatsnew in docs * add blank whatsnew page for 0.2.2 --- docs/whatsnew/0.2.1.rst | 13 ++++--------- docs/whatsnew/0.2.2.rst | 28 ++++++++++++++++++++++++++++ docs/whatsnew/index.rst | 1 + 3 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 docs/whatsnew/0.2.2.rst diff --git a/docs/whatsnew/0.2.1.rst b/docs/whatsnew/0.2.1.rst index e4432e00..d1ec27af 100644 --- a/docs/whatsnew/0.2.1.rst +++ b/docs/whatsnew/0.2.1.rst @@ -1,7 +1,8 @@ .. _whatsnew_021: -Breaking Changes -~~~~~~~~~~~~~~~~ + +0.2.1 (October 16, 2024) +------------------------ Enhancements @@ -12,22 +13,16 @@ Enhancements data by the effect of snow on DC voltage and current. (:pull:`209`) -Bug Fixes -~~~~~~~~~ - - Requirements ~~~~~~~~~~~~ * Minimum python advanced to 3.8. (:pull:`210`) * Minimum statsmodels advanced to 0.10.0 and numpy to 1.17.0. (:pull:`210`) + Documentation ~~~~~~~~~~~~~ * Added a gallery example for snow effects categorization (:pull:`209`) -Testing -~~~~~~~ - Contributors ~~~~~~~~~~~~ diff --git a/docs/whatsnew/0.2.2.rst b/docs/whatsnew/0.2.2.rst new file mode 100644 index 00000000..82983d6d --- /dev/null +++ b/docs/whatsnew/0.2.2.rst @@ -0,0 +1,28 @@ +.. _whatsnew_022: + +0.2.2 (not yet released) +------------------------ + + +Enhancements +~~~~~~~~~~~~ + + +Bug Fixes +~~~~~~~~~ + + +Requirements +~~~~~~~~~~~~ + + +Documentation +~~~~~~~~~~~~~ + + +Testing +~~~~~~~ + + +Contributors +~~~~~~~~~~~~ diff --git a/docs/whatsnew/index.rst b/docs/whatsnew/index.rst index 3b236bbb..a4478e37 100644 --- a/docs/whatsnew/index.rst +++ b/docs/whatsnew/index.rst @@ -7,6 +7,7 @@ These are the bug-fixes, new features, and improvements for each release. .. toctree:: :maxdepth: 2 + 0.2.1 0.2.0 0.1.3 0.1.2