From 455a1ae7a6dcd67d06dfc0458d8251eeb9ce4a1e Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 8 Apr 2024 08:59:41 -0600 Subject: [PATCH 01/72] initial load of snow mode detection --- .../examples/snow-detection/plot_snow_mode.py | 723 ++++++++++++++++++ pvanalytics/features/snow.py | 215 ++++++ 2 files changed, 938 insertions(+) create mode 100644 docs/examples/snow-detection/plot_snow_mode.py create mode 100644 pvanalytics/features/snow.py diff --git a/docs/examples/snow-detection/plot_snow_mode.py b/docs/examples/snow-detection/plot_snow_mode.py new file mode 100644 index 000000000..837d1e649 --- /dev/null +++ b/docs/examples/snow-detection/plot_snow_mode.py @@ -0,0 +1,723 @@ + +""" +Quantifying the effects of snow cover +===================================== + +We classify the effect of snow on a PV system's DC array. + +The effect of snow is classified into one of five categories: + + Mode 0: The system is covered with enough opaque snow that the system is + offline due to voltage below the inverter's turn-on voltage. + Mode 1: The system is online and covered with non-uniform snow, such that + both operating voltage and current are reduced. + Mode 2: The system is online and covered with opaque snow, such that + operating voltage is reduced by the snow, but transmission + is consistent with snow-free conditions. #TODO seems contradictory + Mode 3: The system is online and covered with light-transmissive snow, + such that current is decreased but voltage is consistent with all + system substrings being online. + Mode 4: Current and voltage are consistent with snow-free conditions. + +The procedure involves four steps: + 1. Using measured plane-of-array (POA) irradiance and temperature, model + the module's maximum power current (Imp) and voltage (Vmp) assuming + that all the 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 os +import json +import pandas as pd +import numpy as np +import re +import pvlib +import matplotlib.pyplot as plt +from matplotlib.dates import DateFormatter +import matplotlib.patches as mpatches +from matplotlib.lines import Line2D +from pvanalytics.features import clipping + +# Functions needed for the analysis procedure +from pvanalytics.snow import (get_irradiance_sapm, get_irradiance_imp, + get_transmission, categorize, apply_mask) + +# %% Load in system configuration parameters (dict) + +base_dir = pathlib.Path('.') +data_dir = os.path.join(base_dir, 'data') +data_path = os.path.join(data_dir, 'data.csv') +snow_path = os.path.join(data_dir, 'snow.csv') +mask_path = os.path.join(data_dir, 'mask.csv') +config_path = os.path.join(data_dir, 'config.json') + +with open(config_path) as json_data: + config = json.load(json_data) + +#%% Retrieve and print system inverter specs and electrical configuration + +cec_inverter_db = pvlib.pvsystem.retrieve_sam('CECInverter') +my_inverter = cec_inverter_db[config['inverter']] + +max_ac_power = my_inverter['Paco']*0.001 # originally in [W], converted 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 = config['num_str_per_cb']['INV1 CB1'] +num_mods_per_str = config['num_mods_per_str']['INV1 CB1'] +print(f"There are {num_str_per_cb} modules connected in series in each string," + f" and there are {num_mods_per_str} strings connected in" + f" parallel at each combiner") + + +#%% +# Read in 15-minute sampled DC voltage and current time series data, AC power, +# module temperature collected by a BOM sensor and plane-of-array +# irradiance data collected by a heated pyranometer. This sample is provided +# by an electric utility. + +# Load in utility data +data = pd.read_csv(data_path, index_col='Timestamp') +data.set_index(pd.DatetimeIndex(data.index,ambiguous='infer'), inplace=True) +data = data[~data.index.duplicated()] + +# Explore utility datatset +print('Utility-scale dataset') +print('Start: {}'.format(data.index[0])) +print('End: {}'.format(data.index[-1])) +print('Frequency: {}'.format(data.index.inferred_freq)) +print('Columns : ' + ', '.join(data.columns)) +data.between_time('8:00', '16:00').head() + +# Identify current, voltage, and AC power columns +dc_voltage_cols = [c for c in data.columns if 'Voltage' in c] +dc_current_cols = [c for c in data.columns if 'Current' in c] +ac_power_cols = [c for c in data.columns if 'AC' in c] + +# Set negative or Nan current, voltage, AC power values to zero. This is +# allows us to calculate losses later. + +data.loc[:, dc_voltage_cols] = np.maximum(data[dc_voltage_cols], 0) +data.loc[:, dc_current_cols] = np.maximum(data[dc_current_cols], 0) +data.loc[:, ac_power_cols] = np.maximum(data[ac_power_cols], 0) + +data[dc_voltage_cols] = data[dc_voltage_cols].replace({np.nan: 0, None: 0}) +data[dc_current_cols] = data[dc_current_cols].replace({np.nan: 0, None: 0}) +data.loc[:, ac_power_cols] = data[ac_power_cols].replace({np.nan: 0, None: 0}) + +# %% Plot DC voltage for each combiner input relative to inverter nameplate limits +fig, ax = plt.subplots(figsize=(10,10)) +date_form = DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) +for v in dc_voltage_cols: + ax.scatter(data.index, data[v], s=0.5, label=v) + ax.plot(data.index, data[v], alpha=0.2) +ax.axhline(mppt_high_voltage, c='r', ls='--', + label='Maximum MPPT voltage: {} V'.format(mppt_high_voltage)) +ax.axhline(mppt_low_voltage, c='g', ls='--', + label='Minimum MPPT voltage: {} V'.format(mppt_low_voltage)) +ax.set_xlabel('Date', fontsize='large') +ax.set_ylabel('Voltage [V]', fontsize='large') +ax.legend(loc='lower left') + +# %% Plot AC power relative to inverter nameplate limits + +fig, ax = plt.subplots(figsize=(10,10)) +date_form = DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) +for a in ac_power_cols: + ax.scatter(data.index, data[a], s=0.5, label=a) + ax.plot(data.index, data[a], alpha=0.2) +ax.axhline(max_ac_power, c='r', ls='--', + label='Maximum allowed AC power: {} kW'.format(max_ac_power)) +ax.set_xlabel('Date', fontsize='large') +ax.set_ylabel('AC Power [kW]', fontsize='large') +ax.legend(loc='upper left') + +# %% Filter data. +# Identify periods where the system is operating off of its maximum power +# point (MPP), and correct or mask. Conditions outside of the MPP cannot +# be accurately modeled without external information on the system's +# operating point. To allow us to make a valid comparison between system +# measurements and modeled power at MMP, we set measurements collected below +# the MPPT minimum voltage to zero, which emulates the condition where the +# inverter turns off when it cannot meet the turn-on voltage. When the inverter +# is clipping power, we replace voltage and current measurements with NaN as +# these measurements reflect current and voltage that has been artificially +# adjusted away from the MMP. This masking may result in an omission of some +# snow loss conditions where a very light-transmissive snow cover allows the +# system to reach the inverter's clipping voltage. + +ac_power_cols_repeated = ac_power_cols + ac_power_cols + ac_power_cols +for v, i, a in zip(dc_voltage_cols, dc_current_cols, ac_power_cols_repeated): + + # Data where V > MPPT maximum + data.loc[data[v] > mppt_high_voltage, v] = np.nan + data.loc[data[v] > mppt_high_voltage, i] = np.nan + data.loc[data[v] > mppt_high_voltage, a] = np.nan + + # Data where V < MPPT minimum + data.loc[data[v] < mppt_low_voltage, v] = 0 + data.loc[data[v] < mppt_low_voltage, i] = 0 + data.loc[data[v] < mppt_low_voltage, a] = 0 + + # Data where system is at Voc + data.loc[data[i] == 0, v] = 0 + + # Data where inverter is clipping based on AC power + mask1 = data[a] > max_ac_power + mask2 = clipping.geometric(ac_power=data[a], freq='15T') + mask3 = np.logical_or(mask1.values, mask2.values) + + data.loc[mask3, v] = np.nan + data.loc[mask3, i] = np.nan + data.loc[mask3, a] = np.nan + +# %% Plot DC voltage for each combiner inputm with inverter nameplate limits + +fig, ax = plt.subplots(figsize=(10,10)) +date_form = DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) +for v in dc_voltage_cols: + ax.scatter(data.index, data[v], s=0.5, label=v) + ax.plot(data.index, data[v], alpha=0.2) +ax.axhline(mppt_high_voltage, c='r', ls='--', + label='Maximum MPPT voltage: {} V'.format(mppt_high_voltage)) +ax.axhline(mppt_low_voltage, c='g', ls='--', + label='Minimum MPPT voltage: {} V'.format(mppt_low_voltage)) +ax.set_xlabel('Date', fontsize='large') +ax.set_ylabel('Voltage [V]', fontsize='large') +ax.legend(loc='lower left') + +# %% We want to exclude periods where array voltage is affected by horizon +# shading +''' +Load in and apply horizon profiling created using approach described in [1]. + +[1] J. L. Braid and B. G. Pierce, "Horizon Profiling Methods for Photovoltaic +Arrays," 2023 IEEE 50th Photovoltaic Specialists Conference (PVSC), +San Juan, PR, USA, 2023, pp. 1-7. doi:`10.1109/PVSC48320.2023.10359914` + +''' + +horizon_mask = pd.read_csv(mask_path, index_col='Unnamed: 0').squeeze("columns") + +data.loc[:, 'Horizon Mask'] = data.apply(lambda x: apply_mask( + horizon_mask, x['azimuth'], x['elevation']), axis = 1) + +# Exclude data collected while the sun is below the horizon +data = data[data['Horizon Mask'] == False] + +# %% + +# Define coefficients for modeling transmission and voltage. User can either +# use the SAPM to calculate transmission or an approach based on the ratio +# between measured current and nameplate current. For modeling voltage, the +# user can use the SAPM or a single diode equivalent. + +sapm_coeffs = config['sapm_coeff'] +cec_module_db = pvlib.pvsystem.retrieve_sam('cecmod') +sde_coeffs = cec_module_db[config['panel']] + +# %% +""" +Model cell temperature using procedure outlined in Eqn. 12 of [1] +and model effective irradiance using Eqn. 23 of [2]. + +[1] D. L. King, E.E. Boyson, and J.A. Kratochvil, Photovoltaic Array +Performance Model, SAND2004-3535, Sandia National Laboratories, +Albuquerque, NM, 2004. +[2] B. H. King, C. W. Hansen, D. Riley, C. D. Robinson and L. Pratt, +“Procedure to Determine Coefficients for the Sandia Array Performance +Model (SAPM)," SAND2016-5284, June 2016. +""" + +irrad_ref = 1000 +data['Cell Temp [C]'] = data['Module Temp [C]'] + \ + 3*data['POA [W/m²]']/irrad_ref + +# %% Plot cell temperature +fig, ax = plt.subplots(figsize=(10,10)) +date_form = DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) +ax.scatter(data.index, data['Cell Temp [C]'], s=0.5, c='b') +ax.plot(data.index, data['Cell Temp [C]'], alpha=0.3, c='b') +ax.set_ylabel('Cell Temp [C]', c='b', fontsize='xx-large') +ax.set_xlabel('Date', fontsize='xx-large') + +# %% For one combiner, demonstrate the transmission calculation using two +# different approaches to modeling effective irradiance from measured Imp. + +# Choose one combiner box +j = 0 + +# Get key for configuration dict +matched = re.match(r'INV(\d+) CB(\d+)', dc_current_cols[j]) +inv_cb = matched.group(0) + +# Number of strings connected in parallel to combiner. +# Used to scale measured current down to the resolution +# of a single string connected in series, which should +# be the same current as a single module. + +i_scaling_factor = int(config['num_str_per_cb'][f'{inv_cb}']) +# String current +imp = data[dc_current_cols[j]] / i_scaling_factor + +# Approach 1 using SAPM +modeled_e_e1 = get_irradiance_sapm(data['Cell Temp [C]'], + imp, + sapm_coeffs['Impo'], sapm_coeffs['C0'], + sapm_coeffs['C1'], sapm_coeffs['Aimp']) + +T1 = get_transmission(data['POA [W/m²]'], modeled_e_e1, imp) + +# Approach 2 using a linear irradiance-Imp model +modeled_e_e2 = get_irradiance_imp(imp, sapm_coeffs['Impo']) + +T2 = get_transmission(data['POA [W/m²]'], modeled_e_e2, imp) + +# %% +# Plot transmission calculated using two different approaches + +fig, ax = plt.subplots(figsize=(10,10)) +date_form = DateFormatter("%m/%d \n%H:%M") +ax.xaxis.set_major_formatter(date_form) + +ax.scatter(T1.index, T1, s=0.5, c='b', label='SAPM') +ax.plot(T1.index, T1, alpha=0.3, c='b') + +ax.scatter(T2.index, T2, s=0.3, c='g', label='Linear model') +ax.plot(T2.index, T2, alpha=0.3, c='g') + +ax.legend() +ax.set_ylabel('Transmission', fontsize='xx-large') +ax.set_xlabel('Date + Time', fontsize='large') + +# %% +# Model voltage using calculated transmission (two different approaches) + +# Number of modules in series in a string +v_scaling_factor = int(config['num_mods_per_str'][inv_cb]) + +# Approach 1. Reduce measured POA using the transmission. +modeled_vmp_sapm = pvlib.pvsystem.sapm(data['POA [W/m²]']*T1, + data['Cell Temp [C]'], + sapm_coeffs)['v_mp'] +modeled_vmp_sapm *= v_scaling_factor + +# Approach 2 %TODO not sure we need this +# Code borrowed from pvlib-python/docs/examples/iv-modeling/plot_singlediode.py + +# adjust the reference parameters according to the operating +# conditions using the De Soto model: +IL, I0, Rs, Rsh, nNsVth = pvlib.pvsystem.calcparams_desoto( + data['POA [W/m²]']*T1, + data['Cell Temp [C]'], + alpha_sc=sde_coeffs['alpha_sc'], + a_ref=sde_coeffs['a_ref'], + I_L_ref=sde_coeffs['I_L_ref'], + I_o_ref=sde_coeffs['I_o_ref'], + R_sh_ref=sde_coeffs['R_sh_ref'], + R_s=sde_coeffs['R_s'], + ) + +# plug the parameters into the SDE and solve for IV curves: +SDE_params = { + 'photocurrent': IL, + 'saturation_current': I0, + 'resistance_series': Rs, + 'resistance_shunt': Rsh, + 'nNsVth': nNsVth +} +modeled_vmp_sde = pvlib.pvsystem.singlediode(**SDE_params)['v_mp'] +modeled_vmp_sde *= v_scaling_factor + +# %% Plot modeled and measured voltage + +fig, ax = plt.subplots(figsize=(10,10)) +date_form = DateFormatter("%H:%M") +ax.xaxis.set_major_formatter(date_form) + +ax.scatter(modeled_vmp_sapm.index, modeled_vmp_sapm, s=1, c='b', label='SAPM') +ax.scatter(modeled_vmp_sde.index, modeled_vmp_sde, s=1, c='g', label='SDE') + +ax.scatter(data.index, data[inv_cb + ' Voltage [V]'], s=1, c = 'r', + label='Measured') +ax.legend(fontsize='xx-large') +ax.set_ylabel('Voltage [V]', fontsize='xx-large') +ax.set_xlabel('Date', fontsize='large') + + +# %% Function to do analysis so we can loop over combiner boxes + +def wrapper(voltage, current, temp_cell, effective_irradiance, + coeffs, config, 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. Uses transmission to model voltage with the SAPM. # How is this voltage different than measured (snow-affected voltage)? + 4. Determine the snow mode for each point. + + 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. + config : dict + 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_vmp", "vmp_ratio", and "mode" + + ''' + + # Calculate transmission + modeled_e_e = get_irradiance_sapm(temp_cell, + current/config['num_str_per_cb'], + coeffs['Impo'], coeffs['C0'], + coeffs['C1'], coeffs['Aimp']) + + T = get_transmission(effective_irradiance, modeled_e_e, + current/config['num_str_per_cb']) + + name_T = inv_cb + ' Transmission' + data[name_T] = T + + # Model voltage for a single module, scale up to array + modeled_vmp = pvlib.pvsystem.sapm(effective_irradiance*T, temp_cell, + coeffs)['v_mp'] + modeled_vmp *= config['num_mods_per_str'] + + # Voltage is modeled as NaN if T = 0, but V = 0 makes more sense + modeled_vmp[T == 0] = 0 + + # Identify periods where modeled voltage is outside of MPPT range, + # and correct values + modeled_vmp[modeled_vmp > config['max_dcv']] = np.nan + modeled_vmp[modeled_vmp < config['min_dcv']] = 0 + + # Calculate voltage ratio + with np.errstate(divide='ignore'): + vmp_ratio = voltage / modeled_vmp + + # take care of divide by zero + vmp_ratio[modeled_vmp==0] = 0 + # Both quantities in the "where" argument of np.divide must be arrays, or + # else a RecursionError is raised + + # vmp_ratio = np.divide(voltage, modeled_vmp, + # where=((voltage > 0) & (modeled_vmp>0))) + # vmp_ratio[modeled_vmp==0] = 0 + + categorize_v = np.vectorize(categorize) #TODO lets vectorize the function itself + + mode = categorize_v(vmp_ratio, T, voltage, config['min_dcv'], + config['threshold_vratio'], + config['threshold_transmission']) + my_dict = {'transmission' : T, + 'modeled_vmp' : modeled_vmp, + 'vmp_ratio' : vmp_ratio, + 'mode' : mode} + + return my_dict + +# %% +# Demonstrate transmission, modeled voltage calculation and mode categorization +# on voltage, current pair + +j = 0 +v = dc_voltage_cols[j] +i = dc_current_cols[j] + +# Used to get key for configuration dict +matched = re.match(r'INV(\d+) CB(\d+)', i) +inv_cb = matched.group(0) + +# Number of strings connected in parallel at the combiner +i_scaling_factor = int(config['num_str_per_cb'][f'{inv_cb}']) + +# 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 = config['threshold_vratio'] +threshold_transmission = config['threshold_transmission'] + +my_config = {'threshold_vratio' : threshold_vratio, + 'threshold_transmission' : threshold_transmission, + 'min_dcv' : mppt_low_voltage, + 'max_dcv' : mppt_high_voltage, + 'num_str_per_cb' : int(config['num_str_per_cb'][f'{inv_cb}']), + 'num_mods_per_str' : int(config['num_mods_per_str'][f'{inv_cb}'])} + +out = wrapper(data[v], data[i], + data['Cell Temp [C]'], + data['POA [W/m²]'], sapm_coeffs, + my_config) + +# %% +# Calculate the transmission, model the voltage, and categorize into modes for +# all combiners. Use the SAPM to calculate transmission and model the voltage. + +for v_col, i_col in zip(dc_voltage_cols, dc_current_cols): + + matched = re.match(r'INV(\d+) CB(\d+) Current', i_col) + inv_num = matched.group(1) + cb_num = matched.group(2) + inv_cb = f'INV{inv_num} CB{cb_num}' + + v_scaling_factor = int(config['num_mods_per_str'][inv_cb]) + i_scaling_factor = int( + config['num_str_per_cb'][f'INV{inv_num} CB{cb_num}']) + + my_config = { + 'threshold_vratio' : threshold_vratio, + 'threshold_transmission' : threshold_transmission, + 'min_dcv' : mppt_low_voltage, + 'max_dcv' : mppt_high_voltage, + 'num_str_per_cb' : int(config['num_str_per_cb'][f'{inv_cb}']), + 'num_mods_per_str' : int(config['num_mods_per_str'][f'{inv_cb}'])} + + out = wrapper(data[v_col], data[i_col], + data['Cell Temp [C]'], + data['POA [W/m²]'], sapm_coeffs, + my_config) + + for k, v in out.items(): + data[inv_cb + ' ' + k] = v + + +# %% +# Look at transmission for all DC inputs + +transmission_cols = [c for c in data.columns if 'transmission' in c] +fig, ax = plt.subplots(figsize=(10,10)) +date_form = DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) +temp = data['2022-01-06 07:45:00': '2022-01-09 17:45:00'] + +for c in transmission_cols: + ax.scatter(temp.index, temp[c], s=0.5, label=c) +ax.set_xlabel('Date', fontsize='xx-large') +ax.legend() + +# %% +# Look at voltage ratios for all DC inputs + +vratio_cols = [c for c in data.columns if "vmp_ratio" in c] +fig, ax = plt.subplots(figsize=(10,10)) +date_form = DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) +temp = data['2022-01-06 07:45:00': '2022-01-09 17:45:00'] + +for c in vratio_cols: + ax.scatter(temp.index, temp[c], s=0.5, label=c) + +ax.set_xlabel('Date', fontsize='xx-large') +ax.set_ylabel('Voltage Ratio (measured/modeled)', fontsize='xx-large') +ax.axhline(1, c='k', alpha=0.1, ls='--') +ax.legend(); + +# %% Calculate all power losses - snow and non-snow + +modeled_df = pvlib.pvsystem.sapm(data['POA [W/m²]'], + data['Cell Temp [C]'], + sapm_coeffs) + +for v_col, i_col in zip(dc_voltage_cols, dc_current_cols): + matched = re.match(r'INV(\d+) CB(\d+) Current', i_col) + inv_num = matched.group(1) + cb_num = matched.group(2) + inv_cb = f'INV{inv_num} CB{cb_num}' + i_scaling_factor = int( + config['num_str_per_cb'][f'INV{inv_num} CB{cb_num}']) + v_scaling_factor = int(config['num_mods_per_str'][inv_cb]) + + modeled_power = modeled_df['p_mp']*v_scaling_factor*i_scaling_factor + name_modeled_power = inv_cb + ' Modeled Power [W]' + data[name_modeled_power] = modeled_power + + name_loss = inv_cb + ' Loss [W]' + loss = np.maximum(data[name_modeled_power] - data[i_col]*data[v_col], 0) + data[name_loss] = loss + +# %% + +loss_cols = [c for c in data.columns if "Loss" in c] +mode_cols = [c for c in data.columns if "mode" in c and "modeled" not in c] +modeled_power_cols = [c for c in data.columns if "Modeled Power" in c] + +i = 1 +l = loss_cols[i] +m = mode_cols[i] +p = modeled_power_cols[i] + +# Color intervals by mode +cmap = {0 : 'r', + 1: 'b', + 2: 'yellow', + 3: 'cyan', + 4: 'g'} + +fig, ax = plt.subplots(figsize=(10,10)) +date_form = DateFormatter("%m/%d") +ax.xaxis.set_major_formatter(date_form) +temp = data[~data[m].isna()] + +# Plot each day individually so we are not exaggerating losses +days_mapped = temp.index.map(lambda x : x.date()) +days = np.unique(days_mapped) +grouped = temp.groupby(days_mapped) + +for d in days: + temp_grouped = grouped.get_group(d) + ax.plot(temp_grouped.index, temp_grouped[p], c='k', ls='--') + ax.plot(temp_grouped.index, temp_grouped[p]- temp_grouped[l], c='k') + ax.fill_between(temp_grouped.index, temp_grouped[p] - temp_grouped[l], + temp_grouped[p], color='k', alpha=0.2) + + chng_pts = np.ravel(np.where(temp_grouped[m].values[:-1] + - temp_grouped[m].values[1:] != 0)) + + if len(chng_pts) == 0: + ax.axvspan(temp_grouped.index[0], temp_grouped.index[-1], + color=cmap[temp_grouped.at[temp_grouped.index[-1], m]], + alpha=0.05) + 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[temp_grouped.at[temp_grouped.index[end], m]], + alpha=0.05) + +# # Add different colored intervals to legend +handles, labels = ax.get_legend_handles_labels() + +modeled_line = Line2D([0], [0], label='Modeled', color='k', ls='--') +measured_line = Line2D([0], [0], label='Measured', color='k') + +red_patch = mpatches.Patch(color='r', alpha=0.05, label='Mode 0') +blue_patch = mpatches.Patch(color='b', alpha=0.05, label='Mode 1') +yellow_patch = mpatches.Patch(color='y', alpha=0.05, label='Mode 2') +purple_patch = mpatches.Patch(color='cyan', alpha=0.05, label='Mode 3') +green_patch = mpatches.Patch(color='g', alpha=0.05, label='Mode 4') + +handles.append(measured_line) +handles.append(modeled_line) +handles.append(red_patch) +handles.append(green_patch) +handles.append(blue_patch) +handles.append(yellow_patch) +handles.append(purple_patch) +# handles.append(gray_patch) + +ax.set_xlabel('Date', fontsize='xx-large') +ax.set_ylabel('DC Power [W]', fontsize='xx-large') +ax.legend(handles=handles, fontsize='xx-large', loc='upper left') +ax.set_title('Measured and modeled production for INV1 CB2', fontsize='xx-large') + +#%% + +# Calculate daily losses occuring while the system is operating in one of the +# four modes that are associated with the presence of snow. + +# Daily snowfall is measured at 7:00 am of each day +snow = pd.read_csv(snow_path, index_col='DATE') # originally in [mm] +snow['SNOW'] *= 1/(10*2.54) # convert to [in] + +loss_cols = [c for c in data.columns if "Loss" in c] +mode_cols = [c for c in data.columns if "mode" in c and "modeled" not in c] +modeled_power_cols = [c for c in data.columns if "Modeled Power" in c] + +days_mapped = data.index.map(lambda x: x.date()) +days = np.unique(days_mapped) +data_gped = data.groupby(days_mapped) + +columns = [re.match(r'INV(\d) CB(\d)', c).group(0) for c in loss_cols] + +snow_loss = pd.DataFrame(index=days, columns=columns) + +for d in days: + temp = data_gped.get_group(d) + + for c, m, l, p in zip(columns, mode_cols, loss_cols, modeled_power_cols): + snow_loss_filter = ~(temp[m].isna()) & (temp[m] != 4) + daily_snow_loss = 100*temp[snow_loss_filter][l].sum()/temp[p].sum() + snow_loss.at[d, c] = daily_snow_loss + + +fig, ax = plt.subplots() +date_form = DateFormatter("%m/%d") + +days_mapped = data.index.map(lambda x: x.date()) +days = np.unique(days_mapped) + +xvals = np.arange(0, len(days), 1) +xwidth = 0.05 +colors = plt.rcParams['axes.prop_cycle'].by_key()['color'] + +for i, c in enumerate(columns): + ax.bar(xvals + xwidth*i, snow_loss[c], width=xwidth, color=colors[i], + ec='k', label=c) + +ax.legend() +ax.set_ylabel('[%]', fontsize='xx-large') +ax.set_xticks(xvals, days) +ax.xaxis.set_major_formatter(date_form) +ax.set_title('Losses incurred in modes 0 -3', fontsize='xx-large'); + +# %% diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py new file mode 100644 index 000000000..5dea4a91c --- /dev/null +++ b/pvanalytics/features/snow.py @@ -0,0 +1,215 @@ +import numpy as np + +def apply_mask(mask, azimuth, elevation): + + """ + Used to determine whether a given (azimuth, elevation) pair is above or + below a horizon profile + + Parameters + ---------- + mask : pd.Series + Series with int index of 0 - 360 (represents azimuth) and float values + (represents elevation [deg] of horizon profile) + azimuth : numeric + Solar azimuth angle [deg] + elevation : numeric + Solar elevation angle [deg] + + Returns + ------- + out : bool or NaN + """ + if np.isnan(azimuth) == False: + if elevation > mask[int(np.floor(azimuth))]: + out = False + else: + out = True + else: + out = np.nan + + return out + +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 + Temperature of cells inside module. [degrees C] + i_mp : array + 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] + temp_ref : float + Reference cell temperature. [degrees C] + + Returns + ------- + effective_irradiance : array + 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 + Maximum power current at the resolution of a single module. [A] + imp0 : float + Short-circuit current at reference condition. [A] + + Returns + ------- + effective_irradiance : array + Effective irradiance. [W/m2] + + References + ---------- + .. [1] C. F. Abe, J. B. Dias, G. Notton, G. A. Faggianelli, G. Pigelet, and + D. Ouvrard, David, "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, i_mp): + + """ + Estimate transmittance as the ratio of modeled effective irradiance to + measured irradiance. + + Measured irradiance should be in the array's plane and represent snow-free + conditions. When possible, the irradiance should be adjusted for + reflections and spectral content. For example, the measured irradiance + could be obtained with a heated plane-of-array pyranometer. + + Parameters + ---------- + measured_e_e : array + Plane-of-array irradiance absent the effect of snow. [W/m2] + modeled_e_e : array + Effective irradiance modeled from measured current at maximum power. + [W/m2] + i_mp : array + Maximum power current at the resolution of a single module. [A] + + Returns + ------- + T : array + Effective transmission. [unitless] + + 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` + """ + + T = modeled_e_e/measured_e_e + T[T.isna()] = np.nan + T[i_mp == 0] = 0 + T[T < 0] = np.nan + T[T > 1] = 1 + + return T + + +def categorize(vmp_ratio, transmission, voltage, min_dcv, + threshold_vratio, threshold_transmission): + + """ + Categorizes electrical behavior into a snow-related mode. + + Modes are defined in [1]_: + + * Mode 0: system is covered with enough opaque snow that the system is + offline due to voltage below the inverter's turn-on voltage. + * Mode 1: system is online and covered with non-uniform snow, such that + both operating voltage and current are decreased by the presence of snow. + * Mode 2: system is online and covered with opaque snow, such that + operating voltage is decreased by the presence of snow, but transmission + is consistent with snow-free conditions. + * Mode 3: system is online and covered with light-transmissive snow, such + that transmission is decreased but voltage is consistent with all + system substrings being online. + * Mode 4: transmisison and voltage are consistent with snow-free + conditions. + + Parameters + ---------- + vratio : float + Ratio between measured voltage and voltage modeled using + calculated values of transmission. [dimensionless] + transmission : float + Fraction of plane-of-array irradiance that can reach the array's cells + through the snow cover. [dimensionless] + voltage : float + [V] + min_dcv : float + The lower 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 : int + + .. [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`. + """ + + if np.isnan(vmp_ratio) or np.isnan(transmission): + return np.nan + elif voltage < min_dcv: + return 0 + elif vmp_ratio < threshold_vratio: + if transmission < threshold_transmission: + return 1 + elif transmission > threshold_transmission: + return 2 + elif vmp_ratio > threshold_vratio: + if transmission < threshold_transmission: + return 3 + elif transmission > threshold_transmission: + return 4 + return np.nan \ No newline at end of file From 096d480526246aba3a55775c623301a77a921e12 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 8 Apr 2024 09:09:57 -0600 Subject: [PATCH 02/72] lint --- .../examples/snow-detection/plot_snow_mode.py | 108 +++++++++--------- 1 file changed, 56 insertions(+), 52 deletions(-) diff --git a/docs/examples/snow-detection/plot_snow_mode.py b/docs/examples/snow-detection/plot_snow_mode.py index 837d1e649..936994cc3 100644 --- a/docs/examples/snow-detection/plot_snow_mode.py +++ b/docs/examples/snow-detection/plot_snow_mode.py @@ -67,7 +67,7 @@ config = json.load(json_data) #%% Retrieve and print system inverter specs and electrical configuration - + cec_inverter_db = pvlib.pvsystem.retrieve_sam('CECInverter') my_inverter = cec_inverter_db[config['inverter']] @@ -119,8 +119,9 @@ data[dc_current_cols] = data[dc_current_cols].replace({np.nan: 0, None: 0}) data.loc[:, ac_power_cols] = data[ac_power_cols].replace({np.nan: 0, None: 0}) -# %% Plot DC voltage for each combiner input relative to inverter nameplate limits -fig, ax = plt.subplots(figsize=(10,10)) +# %% Plot DC voltage for each combiner input relative to inverter nameplate +# limits +fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) for v in dc_voltage_cols: @@ -136,7 +137,7 @@ # %% Plot AC power relative to inverter nameplate limits -fig, ax = plt.subplots(figsize=(10,10)) +fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) for a in ac_power_cols: @@ -169,12 +170,12 @@ data.loc[data[v] > mppt_high_voltage, v] = np.nan data.loc[data[v] > mppt_high_voltage, i] = np.nan data.loc[data[v] > mppt_high_voltage, a] = np.nan - + # Data where V < MPPT minimum data.loc[data[v] < mppt_low_voltage, v] = 0 data.loc[data[v] < mppt_low_voltage, i] = 0 data.loc[data[v] < mppt_low_voltage, a] = 0 - + # Data where system is at Voc data.loc[data[i] == 0, v] = 0 @@ -189,7 +190,7 @@ # %% Plot DC voltage for each combiner inputm with inverter nameplate limits -fig, ax = plt.subplots(figsize=(10,10)) +fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) for v in dc_voltage_cols: @@ -214,15 +215,16 @@ ''' -horizon_mask = pd.read_csv(mask_path, index_col='Unnamed: 0').squeeze("columns") +horizon_mask = pd.read_csv(mask_path, + index_col='Unnamed: 0').squeeze("columns") data.loc[:, 'Horizon Mask'] = data.apply(lambda x: apply_mask( - horizon_mask, x['azimuth'], x['elevation']), axis = 1) + horizon_mask, x['azimuth'], x['elevation']), axis=1) # Exclude data collected while the sun is below the horizon -data = data[data['Horizon Mask'] == False] +data = data[~data['Horizon Mask']] -# %% +# %% # Define coefficients for modeling transmission and voltage. User can either # use the SAPM to calculate transmission or an approach based on the ratio @@ -251,7 +253,7 @@ 3*data['POA [W/m²]']/irrad_ref # %% Plot cell temperature -fig, ax = plt.subplots(figsize=(10,10)) +fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) ax.scatter(data.index, data['Cell Temp [C]'], s=0.5, c='b') @@ -259,7 +261,7 @@ ax.set_ylabel('Cell Temp [C]', c='b', fontsize='xx-large') ax.set_xlabel('Date', fontsize='xx-large') -# %% For one combiner, demonstrate the transmission calculation using two +# %% For one combiner, demonstrate the transmission calculation using two # different approaches to modeling effective irradiance from measured Imp. # Choose one combiner box @@ -291,10 +293,10 @@ T2 = get_transmission(data['POA [W/m²]'], modeled_e_e2, imp) -# %% +# %% # Plot transmission calculated using two different approaches -fig, ax = plt.subplots(figsize=(10,10)) +fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d \n%H:%M") ax.xaxis.set_major_formatter(date_form) @@ -308,7 +310,7 @@ ax.set_ylabel('Transmission', fontsize='xx-large') ax.set_xlabel('Date + Time', fontsize='large') -# %% +# %% # Model voltage using calculated transmission (two different approaches) # Number of modules in series in a string @@ -349,7 +351,7 @@ # %% Plot modeled and measured voltage -fig, ax = plt.subplots(figsize=(10,10)) +fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%H:%M") ax.xaxis.set_major_formatter(date_form) @@ -367,7 +369,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, coeffs, config, 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. @@ -376,7 +378,8 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 1. Model effective irradiance based on measured current using the SAPM 2. Calculate transmission - 3. Uses transmission to model voltage with the SAPM. # How is this voltage different than measured (snow-affected voltage)? + 3. Uses transmission to model voltage with the SAPM. + #TODO How is this voltage different than measured (snow-affected voltage)? 4. Determine the snow mode for each point. Parameters @@ -388,7 +391,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, temp_cell : array Cell temperature. [degrees C] effective_irradiance : array - Snow-free POA irradiance measured by a heated pyranometer. [W/m²] + Snow-free POA irradiance measured by a heated pyranometer. [W/m²] coeffs : dict A dict defining the SAPM parameters, used for pvlib.pvsystem.sapm. config : dict @@ -407,14 +410,14 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 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_vmp", "vmp_ratio", and "mode" - + ''' - + # Calculate transmission modeled_e_e = get_irradiance_sapm(temp_cell, current/config['num_str_per_cb'], @@ -428,13 +431,13 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, data[name_T] = T # Model voltage for a single module, scale up to array - modeled_vmp = pvlib.pvsystem.sapm(effective_irradiance*T, temp_cell, + modeled_vmp = pvlib.pvsystem.sapm(effective_irradiance*T, temp_cell, coeffs)['v_mp'] modeled_vmp *= config['num_mods_per_str'] # Voltage is modeled as NaN if T = 0, but V = 0 makes more sense modeled_vmp[T == 0] = 0 - + # Identify periods where modeled voltage is outside of MPPT range, # and correct values modeled_vmp[modeled_vmp > config['max_dcv']] = np.nan @@ -443,7 +446,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # Calculate voltage ratio with np.errstate(divide='ignore'): vmp_ratio = voltage / modeled_vmp - + # take care of divide by zero vmp_ratio[modeled_vmp==0] = 0 # Both quantities in the "where" argument of np.divide must be arrays, or @@ -452,8 +455,9 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # vmp_ratio = np.divide(voltage, modeled_vmp, # where=((voltage > 0) & (modeled_vmp>0))) # vmp_ratio[modeled_vmp==0] = 0 - - categorize_v = np.vectorize(categorize) #TODO lets vectorize the function itself + + #TODO lets vectorize the function itself + categorize_v = np.vectorize(categorize) mode = categorize_v(vmp_ratio, T, voltage, config['min_dcv'], config['threshold_vratio'], @@ -462,10 +466,10 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 'modeled_vmp' : modeled_vmp, 'vmp_ratio' : vmp_ratio, 'mode' : mode} - + return my_dict -# %% +# %% # Demonstrate transmission, modeled voltage calculation and mode categorization # on voltage, current pair @@ -511,16 +515,16 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # all combiners. Use the SAPM to calculate transmission and model the voltage. for v_col, i_col in zip(dc_voltage_cols, dc_current_cols): - + matched = re.match(r'INV(\d+) CB(\d+) Current', i_col) inv_num = matched.group(1) cb_num = matched.group(2) - inv_cb = f'INV{inv_num} CB{cb_num}' - + inv_cb = f'INV{inv_num} CB{cb_num}' + v_scaling_factor = int(config['num_mods_per_str'][inv_cb]) i_scaling_factor = int( config['num_str_per_cb'][f'INV{inv_num} CB{cb_num}']) - + my_config = { 'threshold_vratio' : threshold_vratio, 'threshold_transmission' : threshold_transmission, @@ -528,21 +532,21 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 'max_dcv' : mppt_high_voltage, 'num_str_per_cb' : int(config['num_str_per_cb'][f'{inv_cb}']), 'num_mods_per_str' : int(config['num_mods_per_str'][f'{inv_cb}'])} - + out = wrapper(data[v_col], data[i_col], data['Cell Temp [C]'], data['POA [W/m²]'], sapm_coeffs, my_config) - + for k, v in out.items(): data[inv_cb + ' ' + k] = v # %% # Look at transmission for all DC inputs - + transmission_cols = [c for c in data.columns if 'transmission' in c] -fig, ax = plt.subplots(figsize=(10,10)) +fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) temp = data['2022-01-06 07:45:00': '2022-01-09 17:45:00'] @@ -556,7 +560,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # Look at voltage ratios for all DC inputs vratio_cols = [c for c in data.columns if "vmp_ratio" in c] -fig, ax = plt.subplots(figsize=(10,10)) +fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) temp = data['2022-01-06 07:45:00': '2022-01-09 17:45:00'] @@ -569,7 +573,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.axhline(1, c='k', alpha=0.1, ls='--') ax.legend(); -# %% Calculate all power losses - snow and non-snow +# %% Calculate all power losses - snow and non-snow modeled_df = pvlib.pvsystem.sapm(data['POA [W/m²]'], data['Cell Temp [C]'], @@ -610,7 +614,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 3: 'cyan', 4: 'g'} -fig, ax = plt.subplots(figsize=(10,10)) +fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) temp = data[~data[m].isna()] @@ -627,7 +631,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.fill_between(temp_grouped.index, temp_grouped[p] - temp_grouped[l], temp_grouped[p], color='k', alpha=0.2) - chng_pts = np.ravel(np.where(temp_grouped[m].values[:-1] + chng_pts = np.ravel(np.where(temp_grouped[m].values[:-1] - temp_grouped[m].values[1:] != 0)) if len(chng_pts) == 0: @@ -640,9 +644,10 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 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[temp_grouped.at[temp_grouped.index[end], m]], - alpha=0.05) + ax.axvspan( + temp_grouped.index[start], temp_grouped.index[end], + color=cmap[temp_grouped.at[temp_grouped.index[end], m]], + alpha=0.05) # # Add different colored intervals to legend handles, labels = ax.get_legend_handles_labels() @@ -656,9 +661,9 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, purple_patch = mpatches.Patch(color='cyan', alpha=0.05, label='Mode 3') green_patch = mpatches.Patch(color='g', alpha=0.05, label='Mode 4') -handles.append(measured_line) -handles.append(modeled_line) -handles.append(red_patch) +handles.append(measured_line) +handles.append(modeled_line) +handles.append(red_patch) handles.append(green_patch) handles.append(blue_patch) handles.append(yellow_patch) @@ -668,7 +673,8 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_xlabel('Date', fontsize='xx-large') ax.set_ylabel('DC Power [W]', fontsize='xx-large') ax.legend(handles=handles, fontsize='xx-large', loc='upper left') -ax.set_title('Measured and modeled production for INV1 CB2', fontsize='xx-large') +ax.set_title('Measured and modeled production for INV1 CB2', + fontsize='xx-large') #%% @@ -718,6 +724,4 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_ylabel('[%]', fontsize='xx-large') ax.set_xticks(xvals, days) ax.xaxis.set_major_formatter(date_form) -ax.set_title('Losses incurred in modes 0 -3', fontsize='xx-large'); - -# %% +ax.set_title('Losses incurred in modes 0 -3', fontsize='xx-large'); From bfe364228c05780ace9797117048906f84a74180 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 8 Apr 2024 09:44:04 -0600 Subject: [PATCH 03/72] fix file opens --- .../{plot_snow_mode.py => snow-mode.py} | 25 +- pvanalytics/data/snow_config.json | 71 +++ pvanalytics/data/snow_data.csv | 577 ++++++++++++++++++ pvanalytics/data/snow_mask.csv | 361 +++++++++++ pvanalytics/data/snow_snowfall.csv | 7 + 5 files changed, 1027 insertions(+), 14 deletions(-) rename docs/examples/snow-detection/{plot_snow_mode.py => snow-mode.py} (98%) create mode 100644 pvanalytics/data/snow_config.json create mode 100644 pvanalytics/data/snow_data.csv create mode 100644 pvanalytics/data/snow_mask.csv create mode 100644 pvanalytics/data/snow_snowfall.csv diff --git a/docs/examples/snow-detection/plot_snow_mode.py b/docs/examples/snow-detection/snow-mode.py similarity index 98% rename from docs/examples/snow-detection/plot_snow_mode.py rename to docs/examples/snow-detection/snow-mode.py index 936994cc3..0043d3a9e 100644 --- a/docs/examples/snow-detection/plot_snow_mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -1,4 +1,3 @@ - """ Quantifying the effects of snow cover ===================================== @@ -38,7 +37,6 @@ #%% Import packages import pathlib -import os import json import pandas as pd import numpy as np @@ -48,22 +46,21 @@ from matplotlib.dates import DateFormatter import matplotlib.patches as mpatches from matplotlib.lines import Line2D -from pvanalytics.features import clipping +import pvanalytics # Functions needed for the analysis procedure +from pvanalytics.features import clipping from pvanalytics.snow import (get_irradiance_sapm, get_irradiance_imp, get_transmission, categorize, apply_mask) # %% Load in system configuration parameters (dict) +pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent +data_file = pvanalytics_dir / 'data' / 'snow_data.csv' +snowfall_file = pvanalytics_dir / 'data' / 'snow_snowfall.csv' +mask_file = pvanalytics_dir / 'data' / 'snow_mask.csv' +config_file = pvanalytics_dir / 'data' / 'snowconfig.json' -base_dir = pathlib.Path('.') -data_dir = os.path.join(base_dir, 'data') -data_path = os.path.join(data_dir, 'data.csv') -snow_path = os.path.join(data_dir, 'snow.csv') -mask_path = os.path.join(data_dir, 'mask.csv') -config_path = os.path.join(data_dir, 'config.json') - -with open(config_path) as json_data: +with open(config_file) as json_data: config = json.load(json_data) #%% Retrieve and print system inverter specs and electrical configuration @@ -91,7 +88,7 @@ # by an electric utility. # Load in utility data -data = pd.read_csv(data_path, index_col='Timestamp') +data = pd.read_csv(data_file, index_col='Timestamp') data.set_index(pd.DatetimeIndex(data.index,ambiguous='infer'), inplace=True) data = data[~data.index.duplicated()] @@ -215,7 +212,7 @@ ''' -horizon_mask = pd.read_csv(mask_path, +horizon_mask = pd.read_csv(mask_file, index_col='Unnamed: 0').squeeze("columns") data.loc[:, 'Horizon Mask'] = data.apply(lambda x: apply_mask( @@ -682,7 +679,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # four modes that are associated with the presence of snow. # Daily snowfall is measured at 7:00 am of each day -snow = pd.read_csv(snow_path, index_col='DATE') # originally in [mm] +snow = pd.read_csv(snowfall_file, index_col='DATE') # originally in [mm] snow['SNOW'] *= 1/(10*2.54) # convert to [in] loss_cols = [c for c in data.columns if "Loss" in c] diff --git a/pvanalytics/data/snow_config.json b/pvanalytics/data/snow_config.json new file mode 100644 index 000000000..a08d29643 --- /dev/null +++ b/pvanalytics/data/snow_config.json @@ -0,0 +1,71 @@ +{ "panel": "REC_Solar_REC340TP_72_BLK", + "inverter" : "Yaskawa_Solectria_Solar__PVI_60TL_480__480V_", + "threshold_vratio" : 0.933, + "threshold_transmission" : 0.598, + "num_mods_per_str": { + "INV1 CB1": "18", + "INV1 CB2": "18", + "INV1 CB3": "18", + "INV2 CB1": "18", + "INV2 CB2": "18", + "INV2 CB3": "18", + "INV3 CB1": "18", + "INV3 CB2": "18", + "INV3 CB3": "18" + }, + "num_str_per_cb": { + "INV1 CB1": "4", + "INV1 CB2": "4", + "INV1 CB3": "4", + "INV2 CB1": "4", + "INV2 CB2": "4", + "INV2 CB3": "4", + "INV3 CB1": "4", + "INV3 CB2": "4", + "INV3 CB3": "4" + }, + "sapm_coeff": { + "Vintage": "2013", + "Area": 1.64, + "Material": "c-Si", + "Cells_in_Series": 72, + "Parallel_Strings": 1, + "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, + "A0": 0.9731, + "A1": 0.02966, + "A2": -0.01024, + "A3": 0.001793, + "A4": -0.0001286, + "B0": 1, + "B1": -0.0154, + "B2": 0.001572, + "B3": -5.525e-05, + "B4": 8.04e-07, + "B5": -4.202e-09, + "DTC": 3.05, + "FD": 1, + "A": -3.4247, + "B": -0.0951, + "C4": NaN, + "C5": NaN, + "IXO": NaN, + "IXXO": NaN, + "C6": NaN, + "C7": NaN, + "Notes": "Source: CFV Solar Test Lab. Tested 2013. Module 13022-11" + } +} \ No newline at end of file diff --git a/pvanalytics/data/snow_data.csv b/pvanalytics/data/snow_data.csv new file mode 100644 index 000000000..aab894d3f --- /dev/null +++ b/pvanalytics/data/snow_data.csv @@ -0,0 +1,577 @@ +Timestamp,POA [W/m²],INV1 CB1 Voltage [V],INV1 CB2 Voltage [V],INV1 CB3 Voltage [V],INV2 CB1 Voltage [V],INV2 CB2 Voltage [V],INV2 CB3 Voltage [V],INV3 CB1 Voltage [V],INV3 CB2 Voltage [V],INV3 CB3 Voltage [V],Module Temp [C],Ambient Temp [C],INV1 CB1 Current [A],INV1 CB2 Current [A],INV1 CB3 Current [A],INV2 CB1 Current [A],INV2 CB2 Current [A],INV2 CB3 Current [A],INV3 CB1 Current [A],INV3 CB2 Current [A],INV3 CB3 Current [A],INV1 AC Power [kW],INV2 AC Power [kW],INV3 AC Power [kW],apparent_zenith,zenith,apparent_elevation,elevation,azimuth,equation_of_time,aoi +2022-01-05 00:00:00,1.069027,,,,,,,,,,-11.67601,-8.526217,,,,,,,,,,,,,160.00998020281045,160.00998020281045,-70.00998020281045,-70.00998020281045,3.16402318811231,-5.244508918804058,156.33263130086794 +2022-01-05 00:15:00,1.218347,,,,,,,,,,-10.71838,-7.358494,,,,,,,,,,,,,159.61658636000453,159.61658636000453,-69.61658636000455,-69.61658636000455,13.138328308505265,-5.249180891598371,159.64158725879298 +2022-01-05 00:30:00,0.5797986,,,,,,,,,,-9.996516,-6.536161,,,,,,,,,,,,,158.76703492902075,158.76703492902075,-68.76703492902075,-68.76703492902075,22.592518191033605,-5.253852054578601,162.85994049254788 +2022-01-05 00:45:00,0.6020421,,,,,,,,,,-9.189205,-5.791483,,,,,,,,,,,,,157.51396864859737,157.51396864859737,-67.51396864859738,-67.51396864859738,31.26630311690792,-5.258522407337296,165.92338777433648 +2022-01-05 01:00:00,0.2589272,,,,,,,,,,-8.529516,-5.298972,,,,,,,,,,,,,155.92176772569897,155.92176772569897,-65.92176772569897,-65.92176772569897,39.04886194710639,-5.263191948852182,168.70321333852985 +2022-01-05 01:15:00,0.02859372,,,,,,,,,,-8.239856,-5.170183,,,,,,,,,,,,,154.05465465734278,154.05465465734278,-64.05465465734278,-64.05465465734278,45.947908175885686,-5.267860678752186,170.932850931797 +2022-01-05 01:30:00,0.02541689,,,,,,,,,,-8.140345,-4.9114,,,,,,,,,,,,,151.96971537017262,151.96971537017262,-61.969715370172615,-61.969715370172615,52.04068144150165,-5.2725285965934745,172.12857466230247 +2022-01-05 01:45:00,-0.08419616,,,,,,,,,,-8.281861,-5.063289,,,,,,,,,,,,,149.7144041070441,149.7144041070441,-59.714404107044096,-59.714404107044096,57.433054311722344,-5.277195701339224,171.82286980935507 +2022-01-05 02:00:00,-0.393975,,,,,,,,,,-8.922639,-5.946322,,,,,,,,,,,,,147.32674522011925,147.32674522011925,-57.32674522011926,-57.32674522011926,62.234239460743936,-5.281861992625636,170.15469609774138 +2022-01-05 02:15:00,-0.3066016,,,,,,,,,,-9.644333,-6.723111,,,,,,,,,,,,,144.83668991800857,144.83668991800857,-54.83668991800857,-54.83668991800857,66.54437533547343,-5.286527470034343,167.6654856041906 +2022-01-05 02:30:00,0.003177027,,,,,,,,,,-10.00414,-7.043106,,,,,,,,,,,,,142.26772938394447,142.26772938394447,-52.26772938394446,-52.26772938394446,70.45006260294002,-5.291192132564902,164.75296525848407 +2022-01-05 02:45:00,0.1096092,,,,,,,,,,-10.09863,-7.008945,,,,,,,,,,,,,139.63836460500417,139.63836460500417,-49.63836460500418,-49.63836460500418,74.02398845534589,-5.295855979820772,161.6182219412408 +2022-01-05 03:00:00,0.1064322,,,,,,,,,,-10.28779,-7.137044,,,,,,,,,,,,,136.96331176587802,136.96331176587802,-46.96331176587803,-46.96331176587803,77.32630552915259,-5.300519011347205,158.35870620632895 +2022-01-05 03:15:00,0.0,,,,,,,,,,-10.70247,-7.4041,,,,,,,,,,,,,134.254441429276,134.254441429276,-44.25444142927601,-44.25444142927601,80.40655734345904,-5.305181226198329,155.0244272401752 +2022-01-05 03:30:00,0.0,,,,,,,,,,-11.10306,-7.509205,,,,,,,,,,,,,131.5214919437005,131.5214919437005,-41.52149194370052,-41.52149194370052,83.30559607663838,-5.309842623901204,151.64304165610508 +2022-01-05 03:45:00,0.0,,,,,,,,,,-11.41071,-7.805861,,,,,,,,,,,,,128.77260809363668,128.77260809363668,-38.772608093636684,-38.772608093636684,86.0572743810452,-5.314503204110224,148.23096757259958 +2022-01-05 04:00:00,0.0,,,,,,,,,,-11.81071,-8.3981,,,,,,,,,,,,,126.01474716361818,126.01474716361818,-36.01474716361819,-36.01474716361819,88.68985754252844,-5.319162965763098,144.79858977620793 +2022-01-05 04:15:00,0.0,,,,,,,,,,-12.17561,-8.920567,,,,,,,,,,,,,123.25398571488945,123.25398571488945,-33.25398571488945,-33.25398571488945,91.2271699500613,-5.323821908532409,141.3528619843301 +2022-01-05 04:30:00,0.0,,,,,,,,,,-12.04299,-8.910183,,,,,,,,,,,,,120.49575539793695,120.49575539793695,-30.49575539793695,-30.49575539793695,93.6895107271722,-5.328480031952495,137.89869287970768 +2022-01-05 04:45:00,0.0873676,,,,,,,,,,-11.5078,-8.678711,,,,,,,,,,,,,117.7450260260348,117.7450260260348,-27.745026026034797,-27.745026026034797,96.09438100681837,-5.333137335037463,134.4397264758418 +2022-01-05 05:00:00,0.0873676,,,,,,,,,,-10.52836,-8.186017,,,,,,,,,,,,,115.00644895049655,115.00644895049655,-25.006448950496544,-25.006448950496544,98.45706134895721,-5.337793817434431,130.97880275153042 +2022-01-05 05:15:00,0.3177018,,,,,,,,,,-9.649034,-7.738228,,,,,,,,,,,,,112.28447328424406,112.28447328424406,-22.284473284244058,-22.284473284244058,100.79106879576204,-5.342449478663184,127.51824415818993 +2022-01-05 05:30:00,1.345465,,,,,,,,,,-8.792339,-7.476972,,,,,,,,,,,,,109.58344137895637,109.58344137895637,-19.58344137895636,-19.58344137895636,103.10851976477034,-5.347104317734193,124.06004136517386 +2022-01-05 05:45:00,2.12069,,,,,,,,,,-7.662806,-7.020505,,,,,,,,,,,,,106.90766795233628,106.90766795233628,-16.907667952336276,-16.907667952336276,105.42041926969011,-5.351758334283659,120.60597783467668 +2022-01-05 06:00:00,2.10169,,,,,,,,,,-6.689061,-6.506834,,,,,,,,,,,,,104.26150905226844,104.26150905226844,-14.261509052268442,-14.261509052268442,107.73688953357794,-5.356411527853197,117.1577194869516 +2022-01-05 06:15:00,1.979401,,,,,,,,,,-5.890139,-5.942461,,,,,,,,,,,,,101.64942259901575,101.64942259901575,-11.649422599015754,-11.649422599015754,110.0673501125608,-5.361063897551503,113.71688204746307 +2022-01-05 06:30:00,1.512287,,,,,,,,,,-5.264884,-5.4799,,,,,,,,,,,,,99.07602147493955,99.07602147493955,-9.076021474939557,-9.076021474939557,112.42065859697857,-5.3657154428365175,110.28508339591922 +2022-01-05 06:45:00,1.440562,,,,,,,,,,-4.775061,-5.103017,,,,,,,,,,,,,96.5461226128259,96.5461226128259,-6.546122612825892,-6.546122612825892,114.80521574274269,-5.370366163406288,106.86398935680212 +2022-01-05 07:00:00,2.279092,256.7679,256.2846,256.5718,267.4807,266.5852,267.1176,278.9096,279.3651,279.4882,-4.283155,-4.373294,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,94.0647917145137,94.0647917145137,-4.064791714513705,-4.064791714513705,117.22903968268088,-5.375016058220353,103.45535542779938 +2022-01-05 07:15:00,2.822341,388.7431,387.1234,388.2163,377.9597,353.7957,377.8745,384.4873,381.7642,382.3477,-3.770317,-3.570317,0.009913795,0.009913795,0.0,0.01333333,0.01333333,0.01333333,0.0107438,0.0107438,0.006198345,0.03965517,0.04944444,0.0107438,91.63738283139236,91.63738283139236,-1.637382831392359,-1.637382831392359,119.69981233752253,-5.379665126882173,100.06106594192738 +2022-01-05 07:30:00,3.26234,494.7114,496.5162,484.3743,499.6245,423.2599,495.4251,502.8521,500.1427,503.7253,-3.314744,-2.990978,0.05991379,0.05814388,0.03303571,0.06333333,0.06333333,0.06333333,0.04741047,0.04741047,0.04286501,0.2396552,0.2345929,0.04741047,88.88434591402789,89.26957455309372,1.1156540859721096,0.7304254469062778,122.22489695211402,-5.38431336900976,96.68317570140422 +2022-01-05 07:45:00,4.394756,492.5038,502.8697,480.7201,518.624,460.3073,499.9526,518.028,525.375,515.3932,-2.867678,-2.717878,0.09999999,0.09823009,0.08303571,0.09999999,0.09999999,0.09999999,0.08666666,0.08666666,0.08666666,0.4480469,0.4253271,0.1206116,86.74411977902948,86.96740093092653,3.255880220970527,3.0325990690734654,124.81132748456866,-5.388960783577204,93.32395468641471 +2022-01-05 08:00:00,6.341689,519.8452,530.4985,516.1296,538.2413,536.2116,511.0573,524.2973,536.7109,513.8563,-2.22215,-2.649089,0.1273504,0.1273504,0.1064103,0.1213334,0.1213334,0.1213334,0.1261905,0.1259615,0.1158654,0.5377905,0.5208452,0.2148973,84.58420802923317,84.73727491292887,5.41579197076683,5.262725087071132,127.46576999099801,-5.393607370209793,89.98593639990837 +2022-01-05 08:15:00,9.50158,557.3946,561.6168,556.8163,572.9615,581.6041,550.8978,560.9218,568.201,559.8977,-1.911483,-2.950828,0.2318448,0.2346538,0.1811294,0.230049,0.230049,0.230049,0.2294615,0.232906,0.2121617,0.7470469,0.7540612,0.4608589,82.47008808272044,82.58600432455486,7.52991191727956,7.413995675445136,130.19445267338853,-5.398253128510987,86.67197451937481 +2022-01-05 08:30:00,17.47532,603.6666,602.7585,603.7078,608.5931,618.8737,593.1352,605.7507,607.8348,611.527,-1.847694,-3.278228,0.4212912,0.4330846,0.3801878,0.4182093,0.4182093,0.4182093,0.4171365,0.4241713,0.4021786,1.234256,1.201519,0.926125,80.42740483440626,80.52079695248398,9.572595165593738,9.479203047516018,133.00306426019188,-5.402898057480343,83.38530860897369 +2022-01-05 08:45:00,27.68384,636.7689,637.2244,636.6835,634.3732,641.5668,626.8843,636.4623,638.1898,642.2595,-1.20765,-3.001067,0.6974538,0.7064382,0.6507242,0.6828544,0.686133,0.6840839,0.6956837,0.7044996,0.6758823,1.875128,1.806173,1.548036,78.47080161242897,78.54925098897326,11.52919838757103,11.450749011026748,135.8966212162057,-5.407542156710406,80.12963996025661 +2022-01-05 09:00:00,54.13859,668.2807,673.6044,668.9899,664.8721,649.3834,660.564,669.7222,670.6644,671.3162,-0.5778555,-2.383795,1.572036,1.579364,1.498704,1.573361,1.576639,1.57459,1.57688,1.599001,1.571234,3.752917,3.663049,3.489472,76.61142434378215,76.67932919706303,13.388575656217853,13.320670802936968,138.87930221578415,-5.412185425779171,76.90922295315988 +2022-01-05 09:15:00,82.93109,698.0595,704.5355,698.5138,694.6389,675.1807,689.9506,698.5702,698.8366,699.6783,-0.2303111,-1.635106,2.56953,2.593245,2.48286,2.542233,2.542233,2.542233,2.554521,2.582449,2.561594,5.989615,5.816554,5.722339,74.85917940595097,74.91931220399323,15.140820594049034,15.08068779600677,141.95425366588438,-5.416827863751678,73.72897366779351 +2022-01-05 09:30:00,85.68211,701.0784,706.6226,703.8977,704.4694,701.5593,700.045,699.6959,702.0238,709.1528,-0.05290556,-1.241533,2.703445,2.719244,2.595294,2.66193,2.664455,2.664455,2.621104,2.646748,2.600771,6.307815,6.20226,5.915507,73.22350256376413,73.27772667581235,16.776497436235875,16.72227332418766,145.1233734177053,-5.421469470173179,70.59459794286605 +2022-01-05 09:45:00,81.89581,694.6993,697.9531,696.4498,693.7531,691.1578,687.1659,696.6524,698.0536,703.1678,-0.04693333,-1.089439,2.567747,2.58131,2.45692,2.47075,2.469064,2.473274,2.531537,2.561512,2.506002,5.977227,5.724963,5.697488,71.71361241054161,71.76324677835811,18.286387589458382,18.236753221641898,148.3870801045398,-5.426110244734446,67.51274519371401 +2022-01-05 10:00:00,95.24964,701.9952,703.9135,702.0649,699.006,693.4661,693.4584,708.1381,708.0665,708.804,0.08261666,-0.8457611,2.941308,2.981795,2.841419,2.848167,2.843957,2.848167,3.107013,3.141545,3.102712,6.816117,6.545922,6.949242,70.33854610409713,70.38456601226785,19.661453895902866,19.61543398773215,151.74408370190457,-5.430750186329533,64.49119034003344 +2022-01-05 10:15:00,112.4451,707.2263,709.1207,707.4144,711.0668,703.3551,706.9276,709.6713,710.4283,711.1548,1.059355,-0.5234833,3.385129,3.439897,3.286656,3.440125,3.442814,3.443889,3.536546,3.567555,3.541718,7.802028,7.882526,7.883739,69.10708379200777,69.15023865301754,20.89291620799223,20.84976134698247,155.19117802520327,-5.435389294620109,61.53904573672582 +2022-01-05 10:30:00,90.24828,686.0576,685.5192,684.4316,689.0811,685.8887,680.2935,685.1116,690.0568,688.392,2.073883,-0.2815389,2.663826,2.701441,2.578111,2.759356,2.756757,2.76312,2.744738,2.754724,2.741056,6.158053,6.300956,6.080851,68.02760802171206,68.06849423672,21.97239197828794,21.931505763280004,158.7230759927843,-5.440027569198719,58.66700700406369 +2022-01-05 10:45:00,74.26115,674.5531,672.4007,671.4797,674.4031,674.1002,663.2898,673.8268,680.7122,679.0284,2.179517,-0.1622222,2.134976,2.174359,2.065104,2.205235,2.199946,2.205631,2.318842,2.311465,2.301164,4.964887,5.026237,5.061083,67.10792152497692,67.147029674479,22.89207847502309,22.852970325520992,162.33231471213253,-5.444665009108576,55.88762931916387 +2022-01-05 11:00:00,83.69518,682.1403,683.1378,677.858,684.7149,682.5598,676.6188,681.5537,685.6182,686.2438,2.522033,0.09223889,2.524092,2.574858,2.456246,2.580043,2.584658,2.585054,2.688624,2.693235,2.672253,5.837101,5.870372,5.864253,66.35504080260068,66.39278752473614,23.64495919739931,23.607212475263868,166.00925708571492,-5.449301613916759,53.21562443547494 +2022-01-05 11:15:00,99.909,693.6894,696.4601,691.0527,699.0983,693.7806,693.3125,694.8394,695.7477,697.5314,3.147772,0.3917778,3.243361,3.292742,3.157979,3.3688,3.369298,3.373416,3.386996,3.408058,3.381927,7.416766,7.614819,7.44608,65.77498302828248,65.81173346788475,24.225016971717523,24.18826653211525,169.74220761611832,-5.453937383266748,50.6681610034042 +2022-01-05 11:30:00,98.77921,692.5628,693.6614,692.2521,694.925,690.2365,688.9215,697.6206,697.2559,698.0062,3.411294,0.6336111,3.214906,3.262419,3.116057,3.319954,3.315837,3.319954,3.479678,3.502502,3.488825,7.335231,7.5053,7.671556,65.37256280907678,65.40864715267648,24.62743719092321,24.591352847323527,173.5176551452721,-5.458572316074424,48.26512976722817 +2022-01-05 11:45:00,83.96643,681.813,682.2324,681.5742,684.4619,683.1263,677.6793,688.4916,690.1172,690.3926,3.670956,0.9635667,2.657012,2.69451,2.553857,2.703815,2.699054,2.699054,2.98665,3.006768,2.99543,6.107737,6.167727,6.587911,65.15121598929971,65.18694230400021,24.848784010700285,24.813057695999785,177.32064243456057,-5.463206412052386,46.02931048057619 +2022-01-05 12:00:00,75.41232,673.7775,674.7064,672.8231,678.122,679.3292,669.6417,677.9534,679.806,682.4819,3.766117,1.2543,2.370769,2.398623,2.271461,2.436227,2.428094,2.434019,2.571002,2.584083,2.553671,5.462979,5.56796,5.657818,65.11286688129039,65.14853175304447,24.88713311870961,24.851468246955537,181.13524267112155,-5.467839670760441,43.986348362341346 +2022-01-05 12:15:00,60.06609,662.7966,663.1763,657.7267,664.1335,666.9415,654.3842,663.8904,664.0193,667.9169,3.567539,1.436278,1.87613,1.897936,1.799266,1.948529,1.945158,1.951082,1.89213,1.903229,1.863861,4.347672,4.433039,4.142947,65.25785116492838,65.29374923739778,24.742148835071617,24.706250762602217,184.9451127297846,-5.47247209123816,42.16441146579847 +2022-01-05 12:30:00,60.27884,662.1061,662.4284,658.8806,662.7977,665.3964,652.7141,663.2478,662.1768,664.7816,3.597144,1.699072,1.896124,1.920557,1.814436,1.925462,1.922983,1.927529,1.822289,1.848639,1.815273,4.386229,4.357357,4.000248,65.58490222225727,65.62133555258356,24.415097777742726,24.378664447416448,188.73408190055088,-5.477103673052625,40.59338116615426 +2022-01-05 12:45:00,55.42746,656.3521,659.1337,658.7725,659.8624,664.5814,651.8555,660.4708,659.1077,659.9966,3.739917,2.029994,1.713886,1.733645,1.627293,1.729061,1.72584,1.731127,1.690052,1.715852,1.696465,3.990028,3.970002,3.692209,66.09120230348563,66.12849042130144,23.90879769651437,23.871509578698568,192.48672500034337,-5.481734415832761,39.303450013930984 +2022-01-05 13:00:00,60.47979,660.139,663.8647,661.6719,661.8779,665.6215,653.2807,662.6738,661.9186,664.746,3.987206,2.356395,1.856426,1.877099,1.75995,1.928836,1.925952,1.928836,1.815956,1.829708,1.809718,4.311738,4.422169,3.961486,66.77249324079192,66.81098491309612,23.227506759208087,23.189015086903883,196.1888755917231,-5.486364318581764,38.32308945581462 +2022-01-05 13:15:00,57.50068,656.9092,661.16,658.5895,656.5267,662.4698,647.1981,656.6008,657.7494,661.8502,4.210311,2.586161,1.785146,1.802328,1.692727,1.808992,1.808529,1.80689,1.662055,1.676816,1.64626,4.182762,4.168908,3.647889,67.62323635836272,67.66332435991008,22.37676364163728,22.33667564008992,199.82804385109262,-5.490993380928558,37.67653018212869 +2022-01-05 13:30:00,35.39885,640.5162,646.2947,645.0502,643.5842,653.0806,634.766,638.9782,643.0905,647.9416,3.990505,2.598294,1.064733,1.074775,0.9912385,1.056756,1.058437,1.054656,0.995038,1.001969,0.9794992,2.640988,2.567237,2.195422,68.63680637791614,68.6789471306036,21.363193622083855,21.3210528693964,203.39371277008695,-5.495621602476604,37.381135340498496 +2022-01-05 13:45:00,28.48105,631.9767,637.3043,635.208,639.2286,649.3602,627.9662,630.7734,634.9849,640.5878,3.593911,2.434733,0.8225462,0.8426348,0.754187,0.850041,0.850041,0.8513122,0.8094593,0.8124896,0.78776,2.128207,2.137554,1.783666,69.80570244339924,69.85044340352812,20.19429755660076,20.149556596471875,206.8775063541855,-5.5002489822181815,37.445235773751314 +2022-01-05 14:00:00,20.0643,600.7628,606.9224,602.688,609.0769,630.2473,582.0532,602.2438,604.3431,606.4645,3.281367,2.274872,0.5646493,0.5859998,0.5085154,0.5852814,0.5852814,0.5865526,0.5576097,0.5577555,0.5315948,1.553771,1.534306,1.194294,71.12175953384576,71.16977904121103,18.878240466154242,18.830220958788974,210.2732375243255,-5.504875519764028,37.86700598796192 +2022-01-05 14:15:00,12.03206,566.8278,576.1127,569.0104,575.5764,607.3717,525.7014,567.8884,571.3187,568.7606,2.953317,2.202833,0.3316486,0.338365,0.2752374,0.3382075,0.3382075,0.3382075,0.3096086,0.2996818,0.2820288,1.001472,0.9334906,0.6229808,72.57634264384818,72.62851035543362,17.423657356151818,17.371489644566385,213.57685008478742,-5.509501214772172,38.63471554561489 +2022-01-05 14:30:00,11.54156,560.6672,573.7137,566.7676,570.7656,603.7896,517.2468,565.7368,567.319,564.3837,2.747917,2.1629,0.3018902,0.3043655,0.2461071,0.3181804,0.3181804,0.3181804,0.285136,0.2790647,0.2676057,0.9327453,0.8805404,0.5837864,74.16050709481209,74.21797975522705,15.839492905187914,15.782020244772951,216.78628005554143,-5.514126066194876,39.728278715167605 +2022-01-05 14:45:00,11.7781,558.0919,569.4493,566.3571,573.4453,606.9168,522.6884,566.5008,565.3292,566.881,2.681978,2.153795,0.2984357,0.3009109,0.2488647,0.3240842,0.3246219,0.3246219,0.2986815,0.3002697,0.2808642,0.9341089,0.9162475,0.6169963,75.86510530183598,75.92948623945821,14.134894698164024,14.070513760541791,219.90126360777236,-5.518750073715637,41.121654693936954 +2022-01-05 15:00:00,10.06,547.6113,560.8682,552.4406,565.1455,601.9461,504.0838,551.5723,550.4787,551.4478,2.672578,2.213839,0.2601818,0.2601818,0.2136161,0.2821544,0.2826921,0.2826921,0.2482021,0.2388195,0.2139892,0.8278282,0.8104863,0.4863349,77.68080530816246,77.75442609744816,12.319194691837541,12.245573902551843,222.92311367989413,-5.5233732368687924,42.78549423488038 +2022-01-05 15:15:00,7.197282,523.1071,540.0151,523.668,537.5477,582.0798,437.6714,525.293,526.4208,523.3001,2.686544,2.323233,0.1825337,0.1728114,0.1449495,0.2019642,0.2019642,0.2015369,0.163875,0.149375,0.133125,0.6499579,0.6022426,0.2911448,79.59794875505554,79.6844036029176,10.402051244944456,10.3155963970824,225.85448787915715,-5.527995554697554,44.689516488851396 +2022-01-05 15:30:00,5.768328,499.7484,514.1613,497.4914,515.8997,564.9569,388.2683,509.0863,512.614,505.1281,2.7563,2.476383,0.1167557,0.1070335,0.09999999,0.169193,0.169193,0.1687658,0.1252895,0.105,0.1,0.5219374,0.4944445,0.2011777,81.60605832099785,81.71131395416369,8.39394167900215,8.288686045836318,228.6991653219829,-5.532617026845401,46.80432329997986 +2022-01-05 15:45:00,5.069704,482.6524,493.3478,470.3787,519.7617,564.6746,401.4214,514.3847,511.4089,506.0918,2.870844,2.608283,0.1127213,0.1075626,0.08214285,0.1391904,0.1391904,0.1391904,0.1176414,0.0962963,0.09320988,0.4881411,0.4221649,0.1751091,83.69241155967904,83.82739971898768,6.307588440320949,6.172600281012323,231.4618416995447,-5.537237652890326,49.1025799011978 +2022-01-05 16:00:00,3.499427,492.2945,502.7438,479.0223,501.8945,521.1625,446.6686,517.0881,512.7972,512.9675,3.047011,2.931589,0.07713564,0.06652238,0.03214286,0.04948453,0.04948453,0.04948453,0.05185185,0.04629629,0.04320987,0.2983333,0.1721649,0.0719512,85.83759390607976,86.02528487212602,4.162406093920245,3.974715127873983,234.14795129535213,-5.541857431864628,51.559641127915725 +2022-01-05 16:15:00,1.945011,427.4741,434.3824,425.9121,401.6141,397.9849,402.281,421.7161,421.3511,421.61,3.282778,3.387633,0.01681818,0.01136363,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.065,0.0,0.0,87.99919082057268,88.29799102964157,2.0008091794273195,1.7020089703584345,236.76352092568953,-5.546476363339025,54.153765250660356 +2022-01-05 16:30:00,0.5525505,340.2226,340.6613,341.0043,326.1753,321.6065,327.361,327.0336,326.8869,327.1664,3.454261,3.5978,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,90.0616219630588,90.63893768234271,-0.06162196305879197,-0.6389376823427142,239.31505500239967,-5.551094447000651,56.86605663271633 +2022-01-05 16:45:00,0.0,,,,,,,,,,3.559789,3.683561,,,,,,,,,,,,,93.04193034372028,93.04193034372028,-3.0419303437202783,-3.0419303437202783,241.80945267968877,-5.555711681874527,59.68025418823589 +2022-01-05 17:00:00,0.0,,,,,,,,,,3.618305,3.767767,,,,,,,,,,,,,95.50114027438305,95.50114027438305,-5.501140274383045,-5.501140274383045,244.25395694698693,-5.560328067473165,62.58244915986585 +2022-01-05 17:15:00,0.0,,,,,,,,,,3.639333,3.789972,,,,,,,,,,,,,98.01107599409393,98.01107599409393,-8.01107599409393,-8.01107599409393,246.65613227177406,-5.564943603490974,65.56078244873838 +2022-01-05 17:30:00,0.0,,,,,,,,,,3.5844,3.761444,,,,,,,,,,,,,100.5665490129997,100.5665490129997,-10.566549012999708,-10.566549012999708,249.02387074449138,-5.5695582889457,68.60515263968466 +2022-01-05 17:45:00,0.0,,,,,,,,,,3.468411,3.7482,,,,,,,,,,,,,103.16263586563332,103.16263586563332,-13.162635865633325,-13.162635865633325,251.36542712337268,-5.574172123433527,71.70695118539979 +2022-01-05 18:00:00,0.0,,,,,,,,,,3.353839,3.74555,,,,,,,,,,,,,105.7946349147738,105.7946349147738,-15.794634914773795,-15.794634914773795,253.68948122935223,-5.578785106554278,74.85882823904598 +2022-01-05 18:15:00,0.0,,,,,,,,,,3.341539,3.734205,,,,,,,,,,,,,108.45801889124138,108.45801889124138,-18.458018891241384,-18.458018891241384,256.00523025311264,-5.583397237380268,78.0544908750286 +2022-01-05 18:30:00,0.0,,,,,,,,,,3.3907,3.7541,,,,,,,,,,,,,111.14838374531465,111.14838374531465,-21.148383745314646,-21.148383745314646,258.32251491451734,-5.588008515482215,81.28853285432503 +2022-01-05 18:45:00,0.0,,,,,,,,,,3.377056,3.73785,,,,,,,,,,,,,113.8613906095349,113.8613906095349,-23.861390609534894,-23.861390609534894,260.65198244621547,-5.592618940463581,84.5562900004084 +2022-01-05 19:00:00,0.0,,,,,,,,,,3.361028,3.661195,,,,,,,,,,,,,116.59270018482799,116.59270018482799,-26.59270018482799,-26.59270018482799,263.00529438460063,-5.597228511433059,87.85371866842551 +2022-01-05 19:15:00,0.0,,,,,,,,,,3.371022,3.600578,,,,,,,,,,,,,119.33789816534711,119.33789816534711,-29.337898165347116,-29.337898165347116,265.3953899009538,-5.601837227917713,91.17729501676291 +2022-01-05 19:30:00,0.0,,,,,,,,,,3.375444,3.532639,,,,,,,,,,,,,122.09240600822511,122.09240600822511,-32.09240600822511,-32.09240600822511,267.83681601133054,-5.6064450895901246,94.52392911442979 +2022-01-05 19:45:00,0.0,,,,,,,,,,3.327011,3.430722,,,,,,,,,,,,,124.85137329073676,124.85137329073676,-34.85137329073676,-34.85137329073676,270.3461429834887,-5.611052095442574,97.89089221775964 +2022-01-05 20:00:00,0.0,,,,,,,,,,3.144139,3.343006,,,,,,,,,,,,,127.60954614306854,127.60954614306854,-37.60954614306854,-37.60954614306854,272.9424884784366,-5.615658245122177,101.27575599782705 +2022-01-05 20:15:00,0.0,,,,,,,,,,2.824372,3.250855,,,,,,,,,,,,,130.36110045534102,130.36110045534102,-40.36110045534101,-40.36110045534101,275.6481768872143,-5.620263538254221,104.67633875303402 +2022-01-05 20:30:00,0.0,,,,,,,,,,2.491167,3.118528,,,,,,,,,,,,,133.0994285174826,133.0994285174826,-43.099428517482615,-43.099428517482615,278.48956925615744,-5.6248679738237115,108.09065788337368 +2022-01-05 20:45:00,0.0,,,,,,,,,,2.307678,3.000839,,,,,,,,,,,,,135.81686320616092,135.81686320616092,-45.816863206160924,-45.816863206160924,281.4981041460624,-5.629471551437746,111.51688810973529 +2022-01-05 21:00:00,0.0,,,,,,,,,,1.7709,2.888272,,,,,,,,,,,,,138.50431447020387,138.50431447020387,-48.50431447020387,-48.50431447020387,284.71158566980216,-5.6340742708162,114.95332080122253 +2022-01-05 21:15:00,0.0,,,,,,,,,,0.9201111,2.717283,,,,,,,,,,,,,141.15078862312964,141.15078862312964,-51.150788623129635,-51.150788623129635,288.1757430356519,-5.6386761308822315,118.39832372531993 +2022-01-05 21:30:00,0.06509745,,,,,,,,,,0.4537278,2.50225,,,,,,,,,,,,,143.74275231442215,143.74275231442215,-53.742752314422134,-53.742752314422134,291.94603879374597,-5.643277131319337,121.85030020746892 +2022-01-05 21:45:00,0.1349576,,,,,,,,,,0.6946833,2.38955,,,,,,,,,,,,,146.26329269489145,146.26329269489145,-56.26329269489143,-56.26329269489143,296.08958193924315,-5.647877271701873,125.30764182976557 +2022-01-05 22:00:00,0.1238432,,,,,,,,,,1.349,2.426222,,,,,,,,,,,,,148.69102970519222,148.69102970519222,-58.691029705192214,-58.691029705192214,300.6867508840904,-5.652476551116706,128.76867172051732 +2022-01-05 22:15:00,0.05398305,,,,,,,,,,1.658111,2.46515,,,,,,,,,,,,,150.99876179947867,150.99876179947867,-60.99876179947867,-60.99876179947867,305.83162626383825,-5.657074969138193,132.23157341271232 +2022-01-05 22:30:00,0.0,,,,,,,,,,1.763967,2.424556,,,,,,,,,,,,,153.15190758447358,153.15190758447358,-63.151907584473584,-63.151907584473584,311.62942259092176,-5.661672525395261,135.69429246464668 +2022-01-05 22:45:00,0.0,,,,,,,,,,1.856689,2.288389,,,,,,,,,,,,,155.1070125817784,155.1070125817784,-65.1070125817784,-65.1070125817784,318.1877443090899,-5.666269218952948,139.1543958377931 +2022-01-05 23:00:00,0.0,,,,,,,,,,1.776428,2.0909,,,,,,,,,,,,,156.8109898495626,156.8109898495626,-66.81098984956257,-66.81098984956257,325.5971128985891,-5.670865049367421,142.6088625304839 +2022-01-05 23:15:00,0.0,,,,,,,,,,1.535172,1.8706,,,,,,,,,,,,,158.20236226913903,158.20236226913903,-68.20236226913903,-68.20236226913903,333.8966968859229,-5.6754600163476425,146.05375313248638 +2022-01-05 23:30:00,0.0,,,,,,,,,,1.226222,1.668444,,,,,,,,,,,,,159.216263716213,159.216263716213,-69.21626371621299,-69.21626371621299,343.02760649147353,-5.680054118874978,149.48366772781992 +2022-01-05 23:45:00,0.0,,,,,,,,,,0.9569556,1.491645,,,,,,,,,,,,,159.79438563848413,159.79438563848413,-69.79438563848413,-69.79438563848413,352.7917360254279,-5.684647356578353,152.8908142293174 +2022-01-06 00:00:00,0.0,,,,,,,,,,0.8543167,1.358478,,,,,,,,,,,,,159.8983151017494,159.8983151017494,-69.89831510174942,-69.89831510174942,2.850582576555837,-5.689239729090332,156.26331531560993 +2022-01-06 00:15:00,0.0,,,,,,,,,,0.9645444,1.310061,,,,,,,,,,,,,159.52068181346215,159.52068181346215,-69.52068181346215,-69.52068181346215,12.789491345807505,-5.693831235468679,159.58194903559237 +2022-01-06 00:30:00,0.0,,,,,,,,,,1.079178,1.24485,,,,,,,,,,,,,158.68751279694447,158.68751279694447,-68.68751279694449,-68.68751279694449,22.225641320176635,-5.69842187525137,162.81345001975365 +2022-01-06 00:45:00,0.0,,,,,,,,,,1.060778,1.163022,,,,,,,,,,,,,157.45022243162634,157.45022243162634,-67.45022243162636,-67.45022243162636,30.897106418407134,-5.7030116482164885,165.8957788639275 +2022-01-06 01:00:00,0.0,,,,,,,,,,0.8913778,0.9668722,,,,,,,,,,,,,155.8723439556344,155.8723439556344,-65.87234395563439,-65.87234395563439,38.68875109653038,-5.707600553243537,168.70416322962447 +2022-01-06 01:15:00,0.0,,,,,,,,,,0.6817,0.7114444,,,,,,,,,,,,,154.01769455529183,154.01769455529183,-64.01769455529184,-64.01769455529184,45.603632668737646,-5.712188590008736,170.97720923966108 +2022-01-06 01:30:00,0.0,,,,,,,,,,0.4881722,0.5320611,,,,,,,,,,,,,151.9432900634307,151.9432900634307,-61.94329006343072,-61.94329006343072,51.715308704755785,-5.716775758213771,172.22859699613133 +2022-01-06 01:45:00,0.03334815,,,,,,,,,,0.1596667,0.3558556,,,,,,,,,,,,,149.6967072305453,149.6967072305453,-59.696707230545286,-59.696707230545286,57.12722888833457,-5.7213620567818,171.96521712000927 +2022-01-06 02:00:00,0.05716803,,,,,,,,,,0.001344444,0.3103889,,,,,,,,,,,,,147.31617547254797,147.31617547254797,-57.31617547254798,-57.31617547254798,61.94721818665175,-5.725947485439974,170.30986705070742 +2022-01-06 02:15:00,0.02381988,,,,,,,,,,0.01885555,0.2290167,,,,,,,,,,,,,144.83186809225344,144.83186809225344,-54.83186809225346,-54.83186809225346,66.27472767517594,-5.730532043762651,167.81783175988105 +2022-01-06 02:30:00,0.004763797,,,,,,,,,,-0.08493889,0.07783333,,,,,,,,,,,,,142.26748330537038,142.26748330537038,-52.267483305370384,-52.267483305370384,70.19609273152781,-5.735115730793041,164.8985502536122 +2022-01-06 02:45:00,0.0349345,,,,,,,,,,-0.3250833,-0.003361111,,,,,,,,,,,,,139.64170178939628,139.64170178939628,-49.64170178939629,-49.64170178939629,73.78396835476673,-5.739698546156433,161.75694025897394 +2022-01-06 03:00:00,0.0301707,,,,,,,,,,-0.6285222,-0.1409111,,,,,,,,,,,,,136.96938988626363,136.96938988626363,-46.96938988626362,-46.96938988626362,77.09859244410359,-5.744280489503581,158.49129293890948 +2022-01-06 03:15:00,0.0,,,,,,,,,,-0.7735777,-0.3065833,,,,,,,,,,,,,134.26254103045557,134.26254103045557,-44.262541030455566,-44.262541030455566,80.18964505582551,-5.748861559884972,155.15166097818573 +2022-01-06 03:30:00,0.0,,,,,,,,,,-0.8563611,-0.5573056,,,,,,,,,,,,,131.5309929300878,131.5309929300878,-41.5309929300878,-41.5309929300878,83.0981303278113,-5.753441756860411,151.76557249702154 +2022-01-06 03:45:00,-0.870305,,,,,,,,,,-1.239194,-0.9946111,,,,,,,,,,,,,128.78297015807752,128.78297015807752,-38.78297015807751,-38.78297015807751,85.85805003489514,-5.758021080142498,148.34930451524315 +2022-01-06 04:00:00,-0.7924885,,,,,,,,,,-2.046611,-1.26925,,,,,,,,,,,,,126.0254937746457,126.0254937746457,-36.02549377464569,-36.02549377464569,88.4978073188604,-5.762599528727151,144.91312301551136 +2022-01-06 04:15:00,0.150866,,,,,,,,,,-2.45495,-1.252161,,,,,,,,,,,,,123.26469111235416,123.26469111235416,-33.26469111235416,-33.26469111235416,91.04135003627442,-5.767177102246933,141.4638880573866 +2022-01-06 04:30:00,0.2318532,,,,,,,,,,-2.031011,-1.122422,,,,,,,,,,,,,120.50603404835424,120.50603404835424,-30.506034048354238,-30.506034048354238,93.5090860130511,-5.771753800374427,138.00643546461225 +2022-01-06 04:45:00,0.1588037,,,,,,,,,,-1.796811,-1.093739,,,,,,,,,,,,,117.75452405633838,117.75452405633838,-27.75452405633838,-27.75452405633838,95.9186112813104,-5.77632962208736,134.5443521891232 +2022-01-06 05:00:00,-0.1746864,,,,,,,,,,-2.581,-1.304094,,,,,,,,,,,,,115.01483716191568,115.01483716191568,-25.014837161915676,-25.014837161915676,98.28528903986398,-5.780904567054677,131.0804327939427 +2022-01-06 05:15:00,-0.1746864,,,,,,,,,,-3.530378,-1.726,,,,,,,,,,,,,112.29144142855544,112.29144142855544,-22.291441428555448,-22.291441428555448,100.62270843464785,-5.785478634945321,127.61696280389886 +2022-01-06 05:30:00,0.07146155,,,,,,,,,,-3.995489,-2.037511,,,,,,,,,,,,,109.58869344944395,109.58869344944395,-19.58869344944395,-19.58869344944395,102.94304916895032,-5.790051824726106,124.15590211058236 +2022-01-06 05:45:00,0.07146155,,,,,,,,,,-4.192728,-2.136161,,,,,,,,,,,,,106.91091829964462,106.91091829964462,-16.91091829964462,-16.91091829964462,105.25737234941226,-5.794624136102357,120.6990078130663 +2022-01-06 06:00:00,-0.4811659,,,,,,,,,,-4.746555,-2.377461,,,,,,,,,,,,,104.26247918454331,104.26247918454331,-14.262479184543302,-14.262479184543302,107.57585060344809,-5.799195568662981,117.24792258464308 +2022-01-06 06:15:00,-0.4811659,,,,,,,,,,-5.632017,-2.750128,,,,,,,,,,,,,101.64783856537838,101.64783856537838,-11.647838565378379,-11.647838565378379,109.90794959038976,-5.803766121454828,113.80424102747106 +2022-01-06 06:30:00,0.0,,,,,,,,,,-6.101083,-3.141011,,,,,,,,,,,,,99.07161176343571,99.07161176343571,-9.071611763435715,-9.071611763435715,112.26256998893132,-5.808335794117738,110.36956124117195 +2022-01-06 06:45:00,0.3683806,,,,,,,,,,-5.895072,-3.007511,,,,,,,,,,,,,96.53861652405098,96.53861652405098,-6.538616524050983,-6.538616524050983,114.64815383151597,-5.81290458633157,106.94552998052401 +2022-01-06 07:00:00,1.753085,456.8722,465.6378,464.5234,460.5761,437.1905,453.6317,437.0208,440.122,434.8575,-5.184039,-2.581906,0.045,0.05166665,0.0407563,0.0512195,0.0512195,0.05123455,0.06149425,0.05804595,0.05172415,0.2045833,0.2164634,0.1022988,94.05391819646461,94.05391819646461,-4.053918196464607,-4.053918196464607,117.07275985389663,-5.817472497063136,103.5338838499296 +2022-01-06 07:15:00,7.846389,563.6151,579.4651,577.3232,584.0463,564.0856,571.2604,566.8013,578.1649,569.6489,-4.676161,-2.451144,0.2158333,0.2396296,0.2000155,0.2370038,0.2370038,0.2403435,0.2506695,0.2508295,0.2347139,0.7656943,0.7738164,0.5342576,91.62286978149056,91.62286978149056,-1.6228697814905575,-1.6228697814905575,119.54411099184114,-5.822039526006847,100.13648799399813 +2022-01-06 07:30:00,13.07112,593.4998,606.8611,607.262,613.9453,617.2844,600.8262,600.2581,610.5199,608.0148,-3.681178,-2.106211,0.3556372,0.3791394,0.3283769,0.3914447,0.3919747,0.3962517,0.3763434,0.3799517,0.3630782,1.127288,1.160183,0.8398535,88.86790167157345,89.25114861552275,1.1320983284265445,0.7488513844772471,122.06961295330922,-5.826605672809819,96.75537729852095 +2022-01-06 07:45:00,11.46397,586.3345,595.8135,596.7515,602.1681,610.1863,583.0375,585.9521,590.3694,593.8295,-2.338272,-1.384739,0.3230692,0.3493397,0.3002401,0.3525024,0.3530326,0.353985,0.3099405,0.3099405,0.3003856,1.041687,1.054935,0.6742314,86.72249887423415,86.94478783387622,3.277501125765858,3.055212166123784,124.65634458615818,-5.83117093644978,93.39280068429092 +2022-01-06 08:00:00,11.37953,584.1503,595.637,592.1218,598.6221,609.3358,578.2731,577.9393,582.999,587.9805,-1.682683,-0.6361,0.3292102,0.3593444,0.3134059,0.344919,0.3481241,0.344919,0.2918632,0.2918632,0.2812062,1.061731,1.021093,0.6266969,84.55773517648271,84.71020040273,5.442264823517291,5.289799597269998,127.3110201610416,-5.8357353166429675,90.05126903846349 +2022-01-06 08:15:00,20.92199,624.1159,633.3779,628.5798,635.3184,643.0771,625.5403,619.9617,627.1863,629.5912,-1.431672,-0.2329889,0.6197185,0.6507094,0.5969061,0.6411462,0.6443514,0.6411462,0.5951548,0.5978143,0.580058,1.736692,1.712057,1.330573,82.43870216886599,82.55419576682507,7.561297831134012,7.445804233174922,130.03992019556074,-5.840298812992842,86.73361144608538 +2022-01-06 08:30:00,31.02679,663.0396,665.817,664.067,667.985,671.5353,667.4042,661.4966,667.3256,667.6053,-1.287094,-0.1538167,0.9132075,0.9613208,0.8882075,0.9803143,0.9803143,0.9803143,0.9355373,0.9481969,0.9249384,2.427358,2.475723,2.123897,80.39092055460193,80.48398567275866,9.609079445398072,9.516014327241342,132.84879042721138,-5.84486142454989,83.44304046721693 +2022-01-06 08:45:00,33.68489,668.5217,668.6655,669.2206,672.7363,675.1863,672.9997,667.6052,669.9023,667.56,-1.283078,-0.1502722,1.025767,1.068126,1.001918,1.086912,1.086912,1.086912,1.055807,1.07914,1.050456,2.666219,2.709986,2.394684,78.42899627019298,78.50717541756701,11.571003729807023,11.492824582432984,135.74270934693254,-5.849423150928487,80.18322752421635 +2022-01-06 09:00:00,43.01748,671.0067,671.0504,671.676,674.0623,675.4526,671.7103,670.4614,671.9794,672.746,-1.228089,-0.15465,1.369667,1.406,1.328333,1.388,1.389667,1.388,1.382667,1.402666,1.361333,3.368666,3.355,3.070333,76.56406812527118,76.63173886886871,13.435931874728817,13.368261131131291,138.72592262050455,-5.853983991826681,76.95839379896724 +2022-01-06 09:15:00,82.23788,694.4103,696.3527,695.9167,696.8806,693.101,690.9785,694.024,694.5593,698.4866,-0.9912722,-0.1533,2.584,2.636667,2.513334,2.648263,2.653475,2.644717,2.663333,2.678,2.646333,6.069334,6.034049,5.84,74.80604994247028,74.86597262821066,15.193950057529715,15.13402737178934,141.80164806179374,-5.858543946222198,73.77341838454667 +2022-01-06 09:30:00,220.22,723.1234,724.9883,723.7134,729.1769,719.0157,715.1744,724.0043,719.4706,724.5773,-0.3129,-0.07955556,7.310331,7.398665,7.097999,7.232264,7.23081,7.220383,7.298335,7.317665,7.252332,16.082,15.88405,15.75233,73.16439474132574,73.21842503514003,16.83560525867426,16.781574964859963,144.9718581697789,-5.863103013802174,70.63396591689914 +2022-01-06 09:45:00,413.4356,722.2447,722.2573,719.7717,727.6953,718.819,710.636,724.2363,719.5709,722.833,3.148522,0.3541445,13.751,13.893,13.37967,13.69934,13.69433,13.68933,13.697,13.67233,13.558,29.34867,29.275,29.134,71.64834673520795,71.69779834752697,18.35165326479204,18.302201652473023,148.2370475563768,-5.86766119420281,67.54664005867537 +2022-01-06 10:00:00,523.0793,710.995,710.5743,707.345,708.6593,701.4564,695.357,709.2,709.045,708.9553,7.507367,0.5718889,17.398,17.58734,16.95134,17.551,17.551,17.54766,17.50633,17.39233,17.27134,36.607,36.51199,36.64066,70.26697664205119,70.31282109046055,19.733023357948806,19.687178909539455,151.5960007956724,-5.872218486452766,64.51916527727069 +2022-01-06 10:15:00,497.6176,704.16,704.0493,700.5834,701.064,684.1797,687.234,698.3937,699.4957,700.6874,10.18374,0.5465444,16.912,17.13833,16.49867,17.02,17.01034,17.005,16.99767,16.86433,16.74034,35.65067,35.26133,35.33733,69.02910586345308,69.07208969610096,20.97089413654692,20.92791030389904,155.04558142396593,-5.876774890210072,61.56059895858849 +2022-01-06 10:30:00,327.9948,706.6934,707.1246,701.3217,708.7613,678.086,703.8367,702.0516,701.0923,705.055,8.779006,0.2662278,10.846,11.093,10.64834,10.92033,10.912,10.90866,10.951,10.93567,10.82333,23.613,23.222,23.10966,67.9431654461995,67.98388276811322,22.056834553800503,22.016117231886778,158.5805630594383,-5.881330405143672,58.68157797665863 +2022-01-06 10:45:00,194.5929,711.46,711.5383,705.725,719.2913,689.9077,720.2483,708.0657,706.5323,711.5847,5.652555,-0.15175,6.094999,6.341667,6.048666,6.134,6.130333,6.145667,6.406666,6.413667,6.382,14.26667,13.71267,13.70967,67.01701301247975,67.05595246373245,22.982986987520245,22.94404753626755,162.1935299633558,-5.885885030260397,55.89459662554053 +2022-01-06 11:00:00,214.22,712.2267,711.0153,706.6516,723.0986,678.132,714.8057,707.1833,708.6266,714.1603,5.101833,-0.1208944,7.259333,7.534,7.180666,7.124332,7.100999,7.117667,7.611,7.641,7.562666,16.55766,15.61333,16.106,66.25772497049226,66.29530145952198,23.742275029507745,23.704698540478024,165.87487418349724,-5.890438765225554,53.214306629686554 +2022-01-06 11:15:00,212.72,715.3433,713.975,709.125,720.774,632.0474,714.6263,709.0026,710.5756,716.8793,4.473161,-0.09305555,6.963666,7.25,6.911666,6.909999,6.891666,6.891666,7.222,7.278333,7.164999,15.567,14.73934,15.46033,65.67138151415746,65.70795855908102,24.328618485842544,24.292041440918982,169.61290749432078,-5.894991609693534,50.65782242412708 +2022-01-06 11:30:00,150.7271,715.35,715.8734,708.8533,715.9014,632.331,720.413,709.671,709.2303,716.39,3.266678,-0.1179333,4.421,4.661,4.444,4.562333,4.564,4.562333,4.628666,4.635666,4.608666,10.209,9.881001,10.13433,65.26286101630271,65.29876719116382,24.737138983697296,24.70123280883619,173.39410146249134,-5.8995435627002735,48.2449939748168 +2022-01-06 11:45:00,154.7395,717.5134,718.2617,710.7483,718.504,639.2079,722.6879,711.9307,711.628,718.528,2.884389,-0.05601111,4.509666,4.751667,4.53,4.65,4.655,4.651667,4.713666,4.725333,4.691333,10.409,10.12333,10.33,65.03566115829518,65.07120284984205,24.96433884170482,24.928797150157948,177.20345607353352,-5.904094623892888,45.99858461505245 +2022-01-06 12:00:00,191.0155,719.8464,720.735,712.239,720.5167,604.2976,721.7353,713.7883,715.767,721.7936,3.574139,0.1450556,5.617667,5.908,5.664667,5.804334,5.804334,5.801,5.913,5.800333,5.791,12.78,12.245,12.74234,64.99176341492773,65.02723537573804,25.00823658507227,24.97276462426196,181.02497734134235,-5.9086447928712005,43.9442619517998 +2022-01-06 12:15:00,176.3237,717.2344,718.3493,709.2857,716.0438,599.84,718.8196,710.585,711.6633,719.1677,3.901961,0.2318444,5.219667,5.514334,5.289333,5.434713,5.43138,5.429972,5.518666,5.406333,5.4,11.94933,11.41715,11.894,65.13155340329656,65.16724819315232,24.868446596703436,24.83275180684768,184.84223378685994,-5.913194068791199,42.110272409962164 +2022-01-06 12:30:00,198.5793,721.3993,719.1923,713.4451,719.0444,600.7369,723.7358,716.277,713.464,718.9413,3.511139,0.1229111,5.946667,6.394333,6.117667,6.285563,6.280633,6.287676,6.260666,6.304333,6.259333,13.676,13.01901,13.60767,65.45380512445495,65.490022345561,24.54619487554506,24.509977654439002,188.63895022516297,-5.917742451198137,40.52664896678173 +2022-01-06 12:45:00,290.4542,728.2599,720.9183,718.8667,724.3892,533.4869,725.5917,722.7056,722.243,726.4169,4.509261,0.2223056,8.223666,9.143668,8.753333,8.950848,8.945588,8.95437,8.942668,8.935666,8.844668,19.05433,17.56186,19.26867,65.95573071196905,65.9927869099808,24.044269288030943,24.0072130900192,192.39958720905497,-5.922289939815528,39.223821182268175 +2022-01-06 13:00:00,459.5916,722.403,715.4033,709.4116,718.4811,461.5663,713.4567,711.567,713.5114,721.8093,7.645878,0.6094444,11.33733,13.065,12.59867,12.92933,12.92733,12.922,13.10867,12.95634,12.796,26.46833,24.233,27.57067,66.63309052681227,66.6713307391144,23.366909473187736,23.3286692608856,196.10986109305716,-5.926836533639289,38.23058271425074 +2022-01-06 13:15:00,622.8762,711.1716,710.2863,699.2523,709.8777,448.8633,702.63,702.422,701.2366,710.2763,10.93925,1.051105,14.573,16.93266,16.44533,16.77267,16.75966,16.75834,17.06634,16.93767,16.70366,33.62899,30.77834,35.42934,67.48035327133809,67.52016548897598,22.519646728661918,22.479834511024027,199.7571684822388,-5.931382232360193,37.571551944475516 +2022-01-06 13:30:00,561.97,705.962,704.54,697.73,704.2437,437.865,692.3043,701.221,697.7427,702.2466,12.42031,1.271606,13.573,15.84066,15.338,15.59867,15.58733,15.59667,15.72966,15.70767,15.53166,31.25867,28.233,32.79734,68.49089085873459,68.5327252108662,21.50910914126542,21.46727478913379,203.33088805784303,-5.935927035567147,37.26450350244179 +2022-01-06 13:45:00,481.5651,713.89,705.393,698.6816,708.6243,416.608,714.2369,702.5433,697.9,703.49,11.93007,1.187817,10.52733,12.90133,12.40867,12.172,12.172,12.17533,12.61333,13.09767,12.329,25.44934,22.19,26.70366,69.65719103692538,69.70158648321355,20.342808963074614,20.29841351678645,206.8225529904908,-5.940470942390675,37.31814640279498 +2022-01-06 14:00:00,483.7181,722.1483,710.305,702.7533,712.6666,403.2643,720.9216,708.7656,704.3389,711.95,9.879911,1.092128,8.211,11.096,10.71133,10.42067,10.419,10.42066,10.955,11.419,10.59467,21.633,19.09134,23.27867,70.97107090905055,71.01869398719684,19.028929090949447,18.98130601280316,210.2259014533691,-5.9450139524451515,37.73094320933889 +2022-01-06 14:15:00,329.8465,720.9413,712.1003,707.2744,711.1976,423.9066,704.5997,711.1667,708.463,714.1757,6.309933,0.8539444,5.832333,7.743999,7.491333,7.665667,7.664001,7.667334,7.754666,7.758333,7.604,15.45033,14.17233,16.54934,72.42387367616075,72.47557711584193,17.57612632383925,17.524422884158067,213.53681963865603,-5.949556065374054,38.49132326422609 +2022-01-06 14:30:00,170.5367,717.6316,714.27,709.0017,713.0773,521.837,713.9013,710.4683,709.411,716.125,3.367805,0.462,4.315333,4.875667,4.681667,4.804,4.800667,4.804,4.823667,4.849333,4.768333,10.46766,9.620667,10.558,74.00663209218811,74.06354743363134,15.993367907811892,15.936452566368663,216.75320280622861,-5.954097280242422,39.57922402607687 +2022-01-06 14:45:00,202.6853,716.0449,718.38,711.4393,718.052,483.937,708.3323,711.595,713.9464,720.7261,2.126528,0.4375167,3.95,5.062666,4.869333,4.943333,4.942334,4.943999,5.056333,4.984333,4.966333,10.48767,9.609332,11.00633,75.71017950005493,75.77387081808715,14.28982049994507,14.226129181912848,219.87476193379902,-5.958637596708286,40.96851137128291 +2022-01-06 15:00:00,198.7523,709.8363,716.2584,706.945,711.27,366.6164,705.1959,707.59,710.52,719.3334,1.022578,0.4257222,3.142333,4.406333,4.28,4.264667,4.263,4.263,4.523666,4.343,4.366666,9.021998,7.938999,9.733332,77.52517530438858,77.59790956507219,12.474824695611414,12.40209043492782,222.9027983893386,-5.9631770143823815,42.62966318348367 +2022-01-06 15:15:00,88.30872,687.4047,692.2283,683.3223,687.7206,421.263,696.1133,685.2726,684.6493,693.4446,-0.1268333,0.1095833,1.643,2.038333,1.972,1.957,1.958,1.954666,2.115666,2.034333,2.030667,4.548,3.981,4.6,79.44197682154383,79.52723421004137,10.558023178456173,10.472765789958634,225.8399695642753,-5.967715532369766,44.5321861056546 +2022-01-06 15:30:00,32.48571,658.287,664.7483,652.615,663.497,564.6707,672.014,653.9667,654.5956,667.87,-0.9756,-0.1854444,0.886,0.9749998,0.91,0.945,0.9483333,0.9433333,0.9416667,0.964,0.9349998,2.424,2.270667,2.159,81.45018033798719,81.55370730712241,8.549819662012807,8.446292692877599,228.69006336554227,-5.972253150299366,46.646462725295045 +2022-01-06 15:45:00,21.3757,634.6486,644.4483,634.2767,643.6553,644.9376,646.8281,632.4067,636.14,650.0977,-1.584767,-0.3650444,0.5666667,0.6283333,0.5683333,0.6066666,0.6066667,0.605,0.6016667,0.6066666,0.5866666,1.688,1.662333,1.399667,83.53729227805037,83.6695404588955,6.462707721949623,6.330459541104503,231.45779105083398,-5.976789867829211,48.94495417330459 +2022-01-06 16:00:00,12.29699,576.7289,593.8734,580.7743,594.0146,619.5063,552.2413,579.8726,582.0219,588.27,-2.008689,-0.5742278,0.3423333,0.384,0.3206667,0.38,0.3816667,0.38,0.3733334,0.3733333,0.3516667,1.112666,1.084334,0.8043333,85.68462157153996,85.86732871083007,4.315378428460042,4.1326712891699335,234.14860723466398,-5.981325684027979,51.40283781720188 +2022-01-06 16:15:00,2.404122,522.3829,537.0034,519.483,534.7186,559.6223,486.7753,525.5143,523.6543,526.8146,-2.556733,-0.8131389,0.08366665,0.097,0.06533335,0.1003333,0.1003333,0.1003333,0.09700002,0.09033332,0.08200002,0.3433333,0.32,0.1613333,87.85236122067019,88.14006696154297,2.147638779329805,1.8599330384570272,236.76856209988236,-5.985860598513682,53.99822484870177 +2022-01-06 16:30:00,0.03652245,358.4054,360.2563,354.0465,400.811,404.3905,392.4229,354.8235,353.4619,353.8029,-3.218555,-1.002267,0.0,0.005,0.0,0.004,0.004,0.004,0.005666665,0.0006666665,0.0006666665,0.02033333,0.012,0.0,89.93008641425304,90.48115023078459,0.069913585746953,-0.481150230784591,239.3241850173184,-5.9903946109589015,56.712101940513314 +2022-01-06 16:45:00,-0.6955609,199.7094,199.4125,199.6156,284.4708,284.2677,283.9646,192.5182,193.1151,193.2151,-3.940455,-1.180394,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.88436173782046,92.88436173782046,-2.8843617378204525,-2.8843617378204525,241.82240051722124,-5.9949277203995734,59.52811631033507 +2022-01-06 17:00:00,-1.327597,,,,,,,,,,-4.779561,-1.423322,,,,,,,,,,,,,95.34385248405293,95.34385248405293,-5.343852484052931,-5.343852484052931,244.27047643639258,-5.999459926577401,62.43228927100813 +2022-01-06 17:15:00,-0.8559415,,,,,,,,,,-5.574255,-1.881789,,,,,,,,,,,,,97.85411257649086,97.85411257649086,-7.854112576490858,-7.854112576490858,246.67600079150708,-6.003991229059466,65.41270938204646 +2022-01-06 17:30:00,-0.1651498,,,,,,,,,,-5.637055,-1.994622,,,,,,,,,,,,,100.40993674312662,100.40993674312662,-10.409936743126625,-10.409936743126625,249.04688727644208,-6.00852162692172,68.45923676613681 +2022-01-06 17:45:00,0.06193225,,,,,,,,,,-5.223094,-1.685056,,,,,,,,,,,,,103.00638613928639,103.00638613928639,-13.006386139286386,-13.006386139286386,251.3914097233251,-6.013051119844022,71.56323519958862 +2022-01-06 18:00:00,0.0,,,,,,,,,,-4.897984,-1.664944,,,,,,,,,,,,,105.63874492278,105.63874492278,-15.63874492278001,-15.63874492278001,253.71826391118833,-6.017579707473487,74.71733546213702 +2022-01-06 18:15:00,0.0,,,,,,,,,,-4.805539,-2.037028,,,,,,,,,,,,,108.30247257264449,108.30247257264449,-18.302472572644483,-18.302472572644483,256.03665921585275,-6.022107388871518,77.91523161891877 +2022-01-06 18:30:00,0.05399175,,,,,,,,,,-4.699616,-2.121411,,,,,,,,,,,,,110.99315253481235,110.99315253481235,-20.993152534812356,-20.993152534812356,258.3564439609748,-6.026634163641575,81.15150930364082 +2022-01-06 18:45:00,0.1460928,,,,,,,,,,-4.188828,-1.883894,,,,,,,,,,,,,113.70643400169942,113.70643400169942,-23.706434001699414,-23.706434001699414,260.6882673396233,-6.031160031554464,84.42149998030415 +2022-01-06 19:00:00,0.142916,,,,,,,,,,-3.781661,-1.863556,,,,,,,,,,,,,116.43796614776919,116.43796614776919,-26.437966147769185,-26.437966147769185,263.0437857613454,-6.035684991580638,87.72115859185193 +2022-01-06 19:15:00,0.09051446,,,,,,,,,,-3.564644,-1.855772,,,,,,,,,,,,,119.18332345039431,119.18332345039431,-29.18332345039431,-29.18332345039431,265.43592418347134,-6.040209043396317,91.04696224414661 +2022-01-06 19:30:00,0.03969956,,,,,,,,,,-3.360522,-1.843117,,,,,,,,,,,,,121.93791642501913,121.93791642501913,-31.93791642501912,-31.93791642501912,267.87920352238007,-6.04473218669591,94.39582391078598 +2022-01-06 19:45:00,0.0,,,,,,,,,,-3.307083,-2.002172,,,,,,,,,,,,,124.69688405024104,124.69688405024104,-34.69688405024104,-34.69688405024104,270.3901521221568,-6.049254420500802,97.76501945571016 +2022-01-06 20:00:00,0.03652399,,,,,,,,,,-3.326667,-2.142222,,,,,,,,,,,,,127.45496243555942,127.45496243555942,-37.45496243555943,-37.45496243555943,272.9878243438151,-6.053775744483573,101.15212674195121 +2022-01-06 20:15:00,0.03652399,,,,,,,,,,-3.679128,-2.282317,,,,,,,,,,,,,130.20631851039806,130.20631851039806,-40.20631851039807,-40.20631851039807,275.6944520403135,-6.058296158331359,104.55497183209077 +2022-01-06 20:30:00,-0.4017676,,,,,,,,,,-4.785517,-2.724183,,,,,,,,,,,,,132.94433755271845,132.94433755271845,-42.94433755271846,-42.94433755271846,278.53626336093544,-6.062815661072818,107.97158157002539 +2022-01-06 20:45:00,-0.4017676,,,,,,,,,,-6.021272,-3.315283,,,,,,,,,,,,,135.66134889940759,135.66134889940759,-45.66134889940759,-45.66134889940759,281.5445078974817,-6.067334252347791,111.400142027602 +2022-01-06 21:00:00,0.0,,,,,,,,,,-6.608911,-3.839411,,,,,,,,,,,,,138.3482649655339,138.3482649655339,-48.3482649655339,-48.3482649655339,284.7567226627141,-6.071851931890706,114.83895820102755 +2022-01-06 21:15:00,0.1206796,,,,,,,,,,-6.675761,-4.2051,,,,,,,,,,,,,140.99410466378222,140.99410466378222,-50.99410466378222,-50.99410466378222,288.21826109970345,-6.076368698726583,118.286414309489 +2022-01-06 21:30:00,0.5700672,,,,,,,,,,-6.226028,-4.1685,,,,,,,,,,,,,143.58536398388003,143.58536398388003,-53.58536398388002,-53.58536398388002,291.9840602372488,-6.080884552506177,121.7409337443105 +2022-01-06 21:45:00,0.5684883,,,,,,,,,,-5.569361,-3.876767,,,,,,,,,,,,,146.1051865365373,146.1051865365373,-56.10518653653731,-56.10518653653731,296.1205014841293,-6.085399492912984,125.20093289208103 +2022-01-06 22:00:00,0.1191007,,,,,,,,,,-5.240917,-3.751111,,,,,,,,,,,,,148.53229168282067,148.53229168282067,-58.53229168282066,-58.53229168282066,300.70697439562207,-6.089913518993853,128.66476603574486 +2022-01-06 22:15:00,0.0,,,,,,,,,,-5.202689,-3.779806,,,,,,,,,,,,,150.83964329326977,150.83964329326977,-60.83964329326976,-60.83964329326976,305.83626070426925,-6.094426630450471,132.13065655379344 +2022-01-06 22:30:00,0.1921536,,,,,,,,,,-5.120828,-3.797378,,,,,,,,,,,,,152.9929220143008,152.9929220143008,-62.992922014300795,-62.992922014300795,311.61197344213485,-6.098938826904487,135.59660200144023 +2022-01-06 22:45:00,0.349368,,,,,,,,,,-4.9167,-3.74395,,,,,,,,,,,,,154.94906569180375,154.94906569180375,-64.94906569180374,-64.94906569180374,318.1399734841466,-6.103450107431854,139.06023872501433 +2022-01-06 23:00:00,0.4525908,,,,,,,,,,-4.678333,-3.578739,,,,,,,,,,,,,156.65553005965293,156.65553005965293,-66.65553005965293,-66.65553005965293,325.5093683980514,-6.107960471697879,142.51864063672886 +2022-01-06 23:15:00,0.4287716,,,,,,,,,,-4.36555,-3.339061,,,,,,,,,,,,,158.05150035054953,158.05150035054953,-68.05150035054953,-68.05150035054953,333.75917568143393,-6.112469919404248,145.96800181673015 +2022-01-06 23:30:00,0.1572153,,,,,,,,,,-4.06965,-3.140022,,,,,,,,,,,,,159.07275786028492,159.07275786028492,-69.07275786028491,-69.07275786028491,342.832890193938,-6.1169784495505155,149.4031160670958 +2022-01-06 23:45:00,0.02382012,,,,,,,,,,-3.903128,-3.0482,,,,,,,,,,,,,159.66136548995507,159.66136548995507,-69.66136548995507,-69.66136548995507,352.53814303953504,-6.121486061911128,152.81648258994642 +2022-01-07 00:00:00,0.0,,,,,,,,,,-3.945294,-3.111194,,,,,,,,,,,,,159.77871469616323,159.77871469616323,-69.77871469616323,-69.77871469616323,2.544555466172028,-6.125992756042251,156.19668006449956 +2022-01-07 00:15:00,0.0,,,,,,,,,,-4.135767,-3.2714,,,,,,,,,,,,,159.4165763841595,159.4165763841595,-69.41657638415948,-69.41657638415948,12.444887547838334,-6.130498531067133,159.5252330852546 +2022-01-07 00:30:00,0.0,,,,,,,,,,-4.413628,-3.410861,,,,,,,,,,,,,158.59970209804987,158.59970209804987,-68.59970209804989,-68.59970209804989,21.859801957131594,-6.135003386632889,162.7701567033173 +2022-01-07 00:45:00,0.0,,,,,,,,,,-4.751283,-3.588239,,,,,,,,,,,,,157.3782555120549,157.3782555120549,-67.37825551205489,-67.37825551205489,30.526168905563054,-6.1395073224339285,165.87168981847748 +2022-01-07 01:00:00,0.0,,,,,,,,,,-4.948961,-3.717261,,,,,,,,,,,,,155.81487645045075,155.81487645045075,-65.81487645045075,-65.81487645045075,38.32475767151345,-6.144010337513464,168.70904694042315 +2022-01-07 01:15:00,0.004763506,,,,,,,,,,-4.887533,-3.768133,,,,,,,,,,,,,153.97292773885474,153.97292773885474,-63.972927738854736,-63.972927738854736,45.25398145133602,-6.148512431544077,171.02616392257872 +2022-01-07 01:30:00,0.06351496,,,,,,,,,,-4.578439,-3.650817,,,,,,,,,,,,,151.9093163037153,151.9093163037153,-61.90931630371527,-61.90931630371527,51.38361198922735,-6.1530136042274535,172.33430315170767 +2022-01-07 01:45:00,0.05875145,,,,,,,,,,-4.295455,-3.460572,,,,,,,,,,,,,149.67171586287094,149.67171586287094,-59.671715862870926,-59.671715862870926,56.81454013712556,-6.157513854606805,172.113593928471 +2022-01-07 02:00:00,0.0,,,,,,,,,,-4.181111,-3.423255,,,,,,,,,,,,,147.29854643887126,147.29854643887126,-57.298546438871256,-57.298546438871256,61.65307998975459,-6.162013182343799,170.46971100478393 +2022-01-07 02:15:00,0.0,,,,,,,,,,-4.04805,-3.35715,,,,,,,,,,,,,144.82019658061174,144.82019658061174,-54.82019658061173,-54.82019658061173,65.99789954039989,-6.166511587136483,167.973194044811 +2022-01-07 02:30:00,0.0,,,,,,,,,,-3.927517,-3.319933,,,,,,,,,,,,,142.2605693171036,142.2605693171036,-52.26056931710362,-52.26056931710362,69.93500024163632,-6.171009068035346,165.0458943795165 +2022-01-07 02:45:00,0.0,,,,,,,,,,-3.876806,-3.341105,,,,,,,,,,,,,139.63852535893574,139.63852535893574,-49.63852535893574,-49.63852535893574,73.5369578954406,-6.175505624720245,161.89653351829594 +2022-01-07 03:00:00,0.1063942,,,,,,,,,,-3.730611,-3.193894,,,,,,,,,,,,,136.96908282452267,136.96908282452267,-46.969082824522665,-46.969082824522665,76.86406438400036,-6.180001256867399,158.6241182392117 +2022-01-07 03:15:00,0.1063942,,,,,,,,,,-3.566517,-3.2481,,,,,,,,,,,,,134.2643601664708,134.2643601664708,-44.26436016647081,-44.26436016647081,79.96611591452626,-6.184495963527297,155.27865472708027 +2022-01-07 03:30:00,0.0,,,,,,,,,,-3.585561,-3.5801,,,,,,,,,,,,,131.5342967215915,131.5342967215915,-41.534296721591474,-41.534296721591474,82.88425554569392,-6.188989744423452,151.8874872471416 +2022-01-07 03:45:00,0.0,,,,,,,,,,-3.660883,-3.788189,,,,,,,,,,,,,128.78719903347994,128.78719903347994,-38.78719903347993,-38.78719903347993,85.65262602796787,-6.193482599177514,148.46671797015193 +2022-01-07 04:00:00,0.0,,,,,,,,,,-3.711022,-3.924017,,,,,,,,,,,,,126.03015393931562,126.03015393931562,-36.03015393931562,-36.03015393931562,88.29976344496004,-6.197974526909093,145.02647294704872 +2022-01-07 04:15:00,0.0,,,,,,,,,,-3.765744,-4.024689,,,,,,,,,,,,,123.26934133065907,123.26934133065907,-33.26934133065908,-33.26934133065908,90.84973633678732,-6.202465527258028,141.57350488337642 +2022-01-07 04:30:00,0.0,,,,,,,,,,-3.805211,-4.08745,,,,,,,,,,,,,120.51027488488886,120.51027488488886,-30.51027488488886,-30.51027488488886,93.32305985047634,-6.206955599885987,138.11256754581905 +2022-01-07 04:45:00,0.0,,,,,,,,,,-3.823356,-4.1241,,,,,,,,,,,,,117.75798911279311,117.75798911279311,-27.757989112793112,-27.757989112793112,95.73742445960818,-6.211444743927132,134.64718443960243 +2022-01-07 05:00:00,0.0,,,,,,,,,,-3.837055,-4.134967,,,,,,,,,,,,,115.01718591467515,115.01718591467515,-25.017185914675153,-25.017185914675153,98.10827615707359,-6.215932959014026,131.1801001380224 +2022-01-07 05:15:00,0.0,,,,,,,,,,-3.841733,-4.118455,,,,,,,,,,,,,112.29235335497955,112.29235335497955,-22.292353354979554,-22.292353354979554,100.44927675609767,-6.220420244811976,127.71355986780152 +2022-01-07 05:30:00,0.0,,,,,,,,,,-3.835744,-4.093961,,,,,,,,,,,,,109.58786319346007,109.58786319346007,-19.587863193460066,-19.587863193460066,102.7726700867413,-6.224906600436952,124.24949018870595 +2022-01-07 05:45:00,0.0,,,,,,,,,,-3.826711,-4.075395,,,,,,,,,,,,,106.90805168584339,106.90805168584339,-16.908051685843382,-16.908051685843382,105.08957438437955,-6.2293920255579,120.78961985035335 +2022-01-07 06:00:00,0.0,,,,,,,,,,-3.813189,-4.049628,,,,,,,,,,,,,104.2572899389813,104.2572899389813,-14.257289938981298,-14.257289938981298,107.41021386041484,-6.2338765198219335,117.33556669438265 +2022-01-07 06:15:00,0.0,,,,,,,,,,-3.786167,-4.020878,,,,,,,,,,,,,101.64004564076491,101.64004564076491,-11.640045640764916,-11.640045640764916,109.744101571324,-6.238360082337749,113.88890290313253 +2022-01-07 06:30:00,0.0,,,,,,,,,,-3.755328,-4.020289,,,,,,,,,,,,,99.06093719872278,99.06093719872278,-9.060937198722783,-9.060937198722783,112.10018267712229,-6.242842712777929,110.45120570841043 +2022-01-07 06:45:00,0.0,,,,,,,,,,-3.75075,-4.067333,,,,,,,,,,,,,96.52478379907534,96.52478379907534,-6.524783799075332,-6.524783799075332,114.48694197233561,-6.247324410793226,107.02410185994577 +2022-01-07 07:00:00,0.1333893,,,,,,,,,,-3.768922,-4.11775,,,,,,,,,,,,,94.03665106674757,94.03665106674757,-4.036651066747565,-4.036651066747565,116.91248037277865,-6.251805175492336,103.60930824483849 +2022-01-07 07:15:00,1.181461,,,,,,,,,,-3.781889,-4.139067,,,,,,,,,,,,,91.60189159897217,91.60189159897217,-1.6018915989721763,-1.6018915989721763,119.38456349957937,-6.256285006555117,100.20867007616815 +2022-01-07 07:30:00,3.561775,,,,,,,,,,-3.771578,-4.132672,,,,,,,,,,,,,88.84559646613029,89.22618216334409,1.154403533869711,0.7738178366559019,121.9106412889808,-6.260763903672341,96.8242016381635 +2022-01-07 07:45:00,8.125428,,,,,,,,,,-3.727695,-4.0965,,,,,,,,,,,,,86.69453792044877,86.91555572164137,3.3054620795512384,3.0844442783586326,124.49783933603544,-6.265241865883581,93.45813015025152 +2022-01-07 08:00:00,15.33006,338.9708,338.6569,338.444,368.5577,365.6942,368.1775,344.8431,344.619,345.0129,-3.633405,-4.018922,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,84.52470532758096,84.67642607498317,5.475294672419046,5.323573925016836,127.15292207291986,-6.2697188928832475,90.1129432683681 +2022-01-07 08:15:00,20.75788,419.0823,419.4476,418.8243,427.2174,421.2197,428.2346,433.0273,431.5441,432.7287,-3.496767,-3.910428,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,82.40062052313351,82.51560520048653,7.599379476866487,7.484394799513461,129.88222435252754,-6.274194984365749,86.79144489183635 +2022-01-07 08:30:00,20.92868,409.5015,409.8139,409.6117,418.4142,412.5056,419.3417,436.0298,434.4515,435.6129,-3.389678,-3.859578,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,80.34762993267636,80.44030983076867,9.652370067323647,9.559690169231326,132.6915509910787,-6.278670139439782,83.49681999826011 +2022-01-07 08:45:00,26.04571,428.9226,429.5949,429.2217,436.4933,414.2174,436.8117,449.5745,443.4429,446.7979,-3.263778,-3.802072,0.0,0.0,0.0,0.0,0.0,0.001351352,0.0,0.0,0.0,0.0,0.01013513,0.0,78.38028704765068,78.4581535234053,11.61971295234931,11.541846476594698,135.58604458695277,-6.283144357719721,80.23270957628289 +2022-01-07 09:00:00,34.30027,495.1733,497.926,497.9564,515.0256,376.2372,502.8867,509.1792,495.3022,499.8164,-3.050278,-3.631178,0.0,0.0,0.0,0.003608247,0.0,0.007536917,0.0,0.0,0.0,0.02164949,0.08900113,0.0,76.50971865625456,76.57712254918424,13.490281343745433,13.422877450815765,138.57001983514107,-6.28761763894363,77.00330106178815 +2022-01-07 09:15:00,38.87812,509.8808,516.2335,516.6246,562.0826,415.7607,546.1624,535.0084,526.5599,530.144,-2.811244,-3.443845,0.0,0.0,0.0,0.01034982,0.006741575,0.01292714,0.01129032,0.0,0.0,0.1257035,0.097616,0.0,74.74584473052187,74.80553093351156,15.254155269478137,15.194469066488436,141.64676787573046,-6.292089982191101,73.81343603747348 +2022-01-07 09:30:00,48.53915,501.386,517.5884,508.8351,576.2098,467.7497,563.902,511.6715,509.2948,506.8951,-2.575578,-3.34465,0.03416667,0.03416667,0.0,0.0368491,0.0368491,0.0368491,0.06129032,0.03579545,0.03181818,0.2648874,0.1262769,0.03181818,73.09813578907313,73.15195029055454,16.90186421092687,16.84804970944547,144.81833756024588,-6.296561387101974,70.66873745235632 +2022-01-07 09:45:00,57.60896,471.896,496.1731,483.4854,552.2761,337.2744,526.5046,487.2462,483.4641,473.3597,-2.353633,-3.289017,0.07946581,0.08416667,0.0,0.08010752,0.08010752,0.08010752,0.09999999,0.08579545,0.07768284,0.3608333,0.2888353,0.0773069,71.57586267857076,71.62511271362973,18.42413732142925,18.37488728637027,148.0853008517871,-6.301031853403401,67.57576279555424 +2022-01-07 10:00:00,61.17714,455.6139,494.354,474.3383,533.1002,320.3182,500.0176,493.4883,487.9755,480.8049,-2.12685,-3.179144,0.09529915,0.1,0.0,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09586465,0.4,0.3813084,0.09548871,70.18813112029954,70.23378361587456,19.81186887970045,19.766216384125435,151.44651782765743,-6.30550138014587,64.54218576134362 +2022-01-07 10:15:00,67.70007,467.1501,508.5787,479.6725,539.5784,386.2154,499.3058,485.017,491.4815,491.9275,-1.890939,-3.092628,0.09999999,0.09999999,0.01556604,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09739582,0.4042453,0.4060439,0.1026041,68.94380545975625,68.98660353153369,21.056194540243744,21.013396468466308,154.89892203781096,-6.3099699670456175,61.57700859757712 +2022-01-07 10:30:00,86.6965,500.0037,527.4274,508.412,545.8763,447.5411,503.5963,500.7873,507.6222,517.9374,-1.5688,-2.962233,0.09999999,0.09999999,0.06556604,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09739583,0.4542453,0.456044,0.1526041,67.85136705482353,67.89190210594523,22.148632945176466,22.10809789405476,158.43734733249937,-6.314437613782502,58.69080949498519 +2022-01-07 10:45:00,105.7074,527.0552,484.3116,531.7576,554.1154,511.542,523.3118,531.2555,523.0825,541.1335,-1.170594,-2.688039,0.09999999,0.2775281,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.5685393,0.5,0.2,66.91873024042874,66.95748867179599,23.08126975957126,23.042511328204014,162.0544237766817,-6.318904319439753,55.89602226328041 +2022-01-07 11:00:00,110.4,532.2565,508.8279,533.9941,557.6024,523.9969,530.9899,532.838,527.0864,544.9789,-0.2566889,-2.39105,0.09999999,0.5285807,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.7638025,0.5,0.2,66.15303305773182,66.19042782197268,23.84696694226819,23.809572178027324,165.740570242677,-6.3233700836754,53.20723948149815 +2022-01-07 11:15:00,110.3226,457.0813,600.3652,539.563,555.7929,548.0494,516.6208,538.7722,540.7726,499.1333,0.9650667,-2.223567,0.368421,0.6010526,0.09999999,0.09999999,0.1055555,0.09999999,0.09999999,0.09999999,0.2221311,0.9645616,0.5,0.2680328,65.56042023989224,65.59681305277513,24.439579760107762,24.403186947224864,169.48410246061053,-6.3278349061911285,50.64152293458471 +2022-01-07 11:30:00,105.6924,414.4135,615.5881,567.1254,562.3416,547.1838,557.6917,556.4965,580.0726,364.5599,1.531144,-2.169106,0.596498,0.5980769,0.09999999,0.09999999,0.1055555,0.1035294,0.09999999,0.09999999,0.6060817,1.076221,0.5141177,0.3828476,65.14583513053776,65.18155281366515,24.85416486946223,24.81844718633485,173.27147046529467,-6.332298786095635,48.218684311952785 +2022-01-07 11:45:00,105.2917,457.7707,611.0892,590.6284,602.3845,569.7567,636.008,592.5942,630.2615,300.4661,1.803978,-2.064967,0.5780769,0.7674047,0.147479,0.1269608,0.1291262,0.1345973,0.09999999,0.09999999,0.9228395,1.229192,0.5665448,0.4862433,64.91283804187513,64.94818518715495,25.087161958124867,25.05181481284505,177.0876264152339,-6.336761723039672,45.9614742774325 +2022-01-07 12:00:00,102.1628,488.4635,521.4692,524.6017,610.9855,595.6777,658.478,537.1912,638.8266,311.4689,2.223839,-1.841322,0.5393333,1.238661,0.4481457,0.1336274,0.1374595,0.1394013,0.216,0.09999999,1.090889,1.552269,0.5824271,0.5784286,64.86346791656202,64.89873734692395,25.136532083437988,25.101262653076045,180.91650353963126,-6.34122371673584,43.89558817825754 +2022-01-07 12:15:00,96.32237,491.83,487.8633,511.925,479.6966,521.2036,511.0724,473.4363,444.57,326.6296,2.138933,-1.650233,0.6166666,1.503,0.7383333,0.346,0.3463334,0.3496667,0.4203333,0.6083335,1.252334,1.949667,0.739,0.8293335,64.99816007852942,65.0336421865167,25.001839921470573,24.966357813483302,184.7415761399227,-6.34568476626373,42.04935810168605 +2022-01-07 12:30:00,143.7885,529.09,544.625,579.6666,360.1313,421.1923,288.3146,525.3146,246.0083,375.2113,2.360611,-1.527828,1.234333,2.117333,1.147667,1.138333,1.137,1.145333,0.7083333,1.807667,1.879667,3.093,1.44,1.591334,65.31572837074076,65.35172022923837,24.684271629259246,24.648279770761633,188.54645878039233,-6.350144871325028,40.452978066231566 +2022-01-07 12:45:00,165.7928,581.98,616.5817,618.58,367.9034,363.9295,274.9565,589.7116,390.3527,391.841,3.183956,-1.329194,1.497666,2.362,1.351333,1.511057,1.514248,1.515702,0.781,1.829334,2.156333,3.757,1.889865,2.045666,65.81341351461977,65.85022861698633,24.18658648538023,24.149771383013665,192.3154924126171,-6.3546040315923165,39.13712612001121 +2022-01-07 13:00:00,126.437,583.3317,675.2277,652.212,431.8362,360.8138,377.8152,640.6699,603.2659,373.8073,3.010217,-1.220033,1.099333,1.725333,1.03,1.138723,1.143581,1.138369,0.5753334,1.017,1.71,3.102333,1.739532,1.801,66.48699265030274,66.52497224004574,23.51300734969726,23.47502775995425,196.03427158766996,-6.3590622461888415,38.130930984645275 +2022-01-07 13:15:00,112.4722,590.8147,678.9883,666.502,510.5013,378.0429,430.9567,680.155,669.085,347.5034,2.219894,-1.238211,0.9203333,1.520666,0.8986666,0.9753333,0.9753333,0.9753333,0.4983334,0.8973333,1.738667,2.794333,1.746333,1.729667,67.33093974731588,67.3704669705822,22.66906025268412,22.629533029417804,199.69007571643454,-6.36351951472534,37.45941154014213 +2022-01-07 13:30:00,127.631,602.4683,690.219,674.558,565.4273,385.464,452.0563,705.3326,680.7349,336.4784,1.911044,-1.23505,1.042333,1.716333,1.042333,1.106,1.102666,1.104333,0.5556666,1.049,2.170666,3.155667,2.048666,2.013334,68.3386215475812,68.38014018320605,21.661378452418795,21.619859816793948,203.27217665391933,-6.367975836972619,37.140764528819375 +2022-01-07 13:45:00,142.3569,627.78,702.334,686.4623,588.2503,386.8234,466.4839,706.9916,686.285,347.015,2.127306,-1.192778,1.175333,1.920333,1.175333,1.248667,1.248667,1.247,0.6336666,1.2,2.495333,3.537667,2.325666,2.300667,69.50251190229898,69.54655236256933,20.497488097701027,20.453447637430667,206.77201536204788,-6.372431211970252,37.18408320856033 +2022-01-07 14:00:00,129.9533,653.8563,700.301,691.9504,611.6937,391.7177,480.0297,684.2767,695.6464,370.9737,2.230717,-1.139111,1.05,1.777666,1.068667,1.135,1.143334,1.141667,0.596,1.103667,2.23,3.304667,2.194333,2.182333,70.81440750495129,70.86162449023273,19.18559249504871,19.138375509767275,210.1832549796717,-6.376885639438115,37.58811790307547 +2022-01-07 14:15:00,96.34621,660.0937,687.5457,686.165,619.983,393.76,480.8496,592.491,693.2538,382.7631,1.553089,-1.146722,0.7313333,1.318666,0.7613333,0.8196666,0.8263335,0.8263335,0.518,0.8011361,1.546497,2.509666,1.708666,1.631216,72.26562728015602,72.31685659324782,17.73437271984398,17.68314340675218,213.50172476427247,-6.381339119019685,38.34145063837729 +2022-01-07 14:30:00,74.638,656.8837,681.9157,687.8663,603.3553,385.438,472.0767,493.2314,689.5231,376.7541,0.5257334,-1.187556,0.5363333,0.9909998,0.5546666,0.6396667,0.638,0.638,0.51,0.5944694,1.127498,1.960667,1.381333,1.22755,73.84717903143121,73.90352709042175,16.152820968568793,16.096472909578253,216.72528069043938,-6.385791649910971,39.42402938776997 +2022-01-07 14:45:00,138.0183,672.113,676.8654,698.9006,636.633,377.0847,475.1327,471.1436,695.9147,365.2473,0.005088889,-1.185894,0.8099998,1.554667,1.006333,1.072667,1.071,1.071,0.9183335,1.037667,1.888667,2.864333,2.079334,1.966334,75.5498747369883,75.61286663535118,14.450125263011705,14.387133364648818,219.85361062960953,-6.390243231668137,40.80961084013906 +2022-01-07 15:00:00,210.6866,692.145,687.2197,708.6824,676.1257,375.7342,480.3272,483.5916,709.459,364.4727,0.4677333,-0.9690334,1.229666,2.321667,1.611333,1.673437,1.669916,1.669916,1.457333,1.665,3.074667,4.185999,3.062395,3.093333,77.36436283372598,77.43620165833832,12.635637166274027,12.563798341661684,222.88800689884937,-6.3946938641274755,42.46848360538848 +2022-01-07 15:15:00,133.4755,656.4103,684.4459,685.1309,643.6,382.3828,469.2656,485.3586,690.288,371.282,0.8207667,-0.9459,0.8576667,1.562333,1.049667,1.128103,1.124582,1.124582,0.9913334,1.112,2.082666,2.978333,2.158728,2.132333,79.28101351140221,79.36506732410378,10.718986488597796,10.634932675896218,225.83112945707904,-6.399143546241248,44.36992698908322 +2022-01-07 15:30:00,39.6675,612.017,638.4503,641.2356,599.3796,376.9193,454.8503,473.9703,652.6317,433.8727,-0.6053944,-1.447078,0.2956667,0.5606666,0.3073333,0.3653333,0.367,0.3653333,0.326,0.3406667,0.5023333,1.237666,0.8936669,0.686,81.28949199493033,81.39129215031181,8.71050800506967,8.608707849688182,228.68677791800494,-6.403592277769349,46.48409228305004 +2022-01-07 15:45:00,24.70225,587.7106,599.2067,606.2923,580.6323,366.7933,445.2787,463.714,622.4987,419.9437,-2.619289,-1.903339,0.181,0.3756666,0.1963333,0.2513333,0.253,0.2513333,0.2203333,0.2283333,0.273,0.8899999,0.6743333,0.4150001,83.37752198108056,83.50705560330101,6.62247801891944,6.492944396698989,231.4596820415256,-6.408040058387996,48.78322762516694 +2022-01-07 16:00:00,13.65703,550.5309,577.9257,576.3624,553.8886,362.1287,432.8116,449.55,583.3417,336.015,-3.859317,-2.128983,0.1073262,0.2163688,0.1001276,0.1496667,0.1496667,0.1496667,0.1366667,0.1366667,0.2133333,0.6248298,0.497,0.2183333,85.5270959368396,85.70492282890386,4.472904063160397,4.295077171096139,234.15531965397133,-6.4124868872640945,51.242326954045836 +2022-01-07 16:15:00,5.189687,516.1061,550.6369,540.9556,515.4233,414.463,453.8759,466.4789,532.545,395.225,-4.439567,-2.284311,0.04432624,0.09412222,0.03546099,0.05666666,0.05666666,0.05666666,0.05333333,0.05166667,0.08833332,0.3302681,0.235,0.07,87.70085374317938,87.97786121097506,2.299146256820619,2.022138789024937,236.77976707938754,-6.416932763997465,53.83935084167509 +2022-01-07 16:30:00,0.9972842,464.3788,479.1688,471.4818,369.2187,358.326,363.2856,401.7973,408.3567,387.285,-3.997772,-2.350583,0.0,0.01575343,0.0,0.006666665,0.006666665,0.006666665,0.003333333,0.001666666,0.01166666,0.06643835,0.02,0.0,89.79429283007637,90.31924064453375,0.2057071699236277,-0.3192406445337559,239.33958128808501,-6.42137768833345,56.555166565900706 +2022-01-07 16:45:00,0.08257575,425.7,425.5,425.7,244.6,244.3,244.1,313.2,313.7,313.7,-3.394628,-2.5242,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.72282151488328,92.72282151488328,-2.7228215148832797,-2.7228215148832797,241.84171468312195,-6.425821659369831,59.37332924558748 +2022-01-07 17:00:00,-1.47368,,,,,,,,,,-3.952356,-2.8963,,,,,,,,,,,,,95.18273410981668,95.18273410981668,-5.182734109816674,-5.182734109816674,244.29346230647488,-6.430264676720981,62.2797907283263 +2022-01-07 17:15:00,-1.47368,,,,,,,,,,-4.831272,-3.140772,,,,,,,,,,,,,97.69344972501708,97.69344972501708,-7.693449725017082,-7.693449725017082,246.7024379558851,-6.434706740194088,65.26258823271826 +2022-01-07 17:30:00,0.0,,,,,,,,,,-5.08535,-3.217594,,,,,,,,,,,,,100.24974594062402,100.24974594062402,-10.249745940624024,-10.249745940624024,249.0765790598266,-6.439147848832363,68.31154472545005 +2022-01-07 17:45:00,-0.0698717,,,,,,,,,,-5.22455,-3.3523,,,,,,,,,,,,,102.8466681721824,102.8466681721824,-12.846668172182412,-12.846668172182412,251.42418057902412,-6.443588002297474,71.41799775481813 +2022-01-07 18:00:00,-1.043298,,,,,,,,,,-5.717044,-3.599972,,,,,,,,,,,,,105.47948599328099,105.47948599328099,-15.479485993280983,-15.479485993280983,253.75395625942372,-6.4480272003529535,74.57456021359496 +2022-01-07 18:15:00,-0.973426,,,,,,,,,,-5.798061,-3.740672,,,,,,,,,,,,,108.14364521139481,108.14364521139481,-18.143645211394816,-18.143645211394816,256.075129658637,-6.452465442049288,77.77491461954877 +2022-01-07 18:30:00,0.0,,,,,,,,,,-5.366611,-3.80415,,,,,,,,,,,,,110.8347162826218,110.8347162826218,-20.834716282621798,-20.834716282621798,258.3975587205846,-6.456902727131819,81.01363987750106 +2022-01-07 18:45:00,-0.0873381,,,,,,,,,,-5.516122,-4.058444,,,,,,,,,,,,,113.54833588359531,113.54833588359531,-23.548335883595307,-23.548335883595307,260.73189666862646,-6.461339055262215,84.28606440831615 +2022-01-07 19:00:00,-0.1222733,,,,,,,,,,-6.121878,-4.428844,,,,,,,,,,,,,116.2801409693556,116.2801409693556,-26.280140969355596,-26.280140969355596,263.08979694070104,-6.465774425523705,87.58814296969734 +2022-01-07 19:15:00,-0.1397457,,,,,,,,,,-6.474306,-4.740767,,,,,,,,,,,,,119.02569396043803,119.02569396043803,-29.02569396043803,-29.02569396043803,265.4841725503764,-6.470208837676182,90.91635475344398 +2022-01-07 19:30:00,-0.1048104,,,,,,,,,,-6.710128,-4.997944,,,,,,,,,,,,,121.7803934087627,121.7803934087627,-31.78039340876271,-31.78039340876271,267.92952072316575,-6.474642291374039,94.26761669257219 +2022-01-07 19:45:00,0.0,,,,,,,,,,-7.022356,-5.234372,,,,,,,,,,,,,124.53936645243903,124.53936645243903,-34.539366452439026,-34.539366452439026,270.4423304425336,-6.479074785704142,97.63921024018269 +2022-01-07 20:00:00,0.0,,,,,,,,,,-7.249239,-5.508744,,,,,,,,,,,,,127.29733766812096,127.29733766812096,-37.29733766812096,-37.29733766812096,273.0415954803496,-6.48350632036454,101.02872036553012 +2022-01-07 20:15:00,-0.3144808,,,,,,,,,,-7.446567,-5.80825,,,,,,,,,,,,,130.04846318998526,130.04846318998526,-40.048463189985256,-40.048463189985256,275.7494579793093,-6.48793689514423,104.43398175777796 +2022-01-07 20:30:00,-0.9958563,,,,,,,,,,-7.947661,-6.117278,,,,,,,,,,,,,132.78611906013344,132.78611906013344,-42.78611906013343,-42.78611906013343,278.59201604886573,-6.4923665090645954,107.85303152525333 +2022-01-07 20:45:00,-0.7687314,,,,,,,,,,-8.494005,-6.359033,,,,,,,,,,,,,135.50262838742742,135.50262838742742,-45.50262838742742,-45.50262838742742,281.600333024659,-6.496795161809132,111.28406788285699 +2022-01-07 21:00:00,-0.6194314,,,,,,,,,,-8.854767,-6.520661,,,,,,,,,,,,,138.18890281663778,138.18890281663778,-48.18890281663777,-48.18890281663777,284.8116810649077,-6.501222853123181,114.72541023156161 +2022-01-07 21:15:00,-0.697252,,,,,,,,,,-9.295989,-6.715178,,,,,,,,,,,,,140.83396998812276,140.83396998812276,-50.83396998812277,-50.83396998812277,288.2710390530989,-6.5056495821190765,118.17546002102435 +2022-01-07 21:30:00,-0.992618,,,,,,,,,,-9.554094,-6.920817,,,,,,,,,,,,,143.42435065029952,143.42435065029952,-53.42435065029952,-53.42435065029952,292.0328176704191,-6.51007534843302,121.63266150596506 +2022-01-07 21:45:00,-2.555346,,,,,,,,,,-10.12879,-7.241678,,,,,,,,,,,,,145.94323955046076,145.94323955046076,-55.94323955046075,-55.94323955046075,296.16266618600633,-6.514500151861284,125.09545671437047 +2022-01-07 22:00:00,-2.036005,,,,,,,,,,-10.68048,-7.560995,,,,,,,,,,,,,148.36944948175733,148.36944948175733,-58.369449481757314,-58.369449481757314,300.738974151122,-6.518923991428892,128.56223198502454 +2022-01-07 22:15:00,-0.3779792,,,,,,,,,,-10.33177,-7.470278,,,,,,,,,,,,,150.67610339113298,150.67610339113298,-60.67610339113299,-60.67610339113299,305.8532018678492,-6.523346866873908,132.0312515382148 +2022-01-07 22:30:00,-0.06987845,,,,,,,,,,-9.950922,-7.371833,,,,,,,,,,,,,152.82913806570528,152.82913806570528,-62.82913806570529,-62.82913806570529,311.60731920673663,-6.527768777872552,135.50056605634214 +2022-01-07 22:45:00,0.0111197,,,,,,,,,,-10.01073,-7.491661,,,,,,,,,,,,,154.78587991515337,154.78587991515337,-64.78587991515339,-64.78587991515339,318.1053708195889,-6.5321897236171935,138.96788258470448 +2022-01-07 23:00:00,0.03494857,,,,,,,,,,-9.893439,-7.519978,,,,,,,,,,,,,156.49432896193917,156.49432896193917,-66.49432896193919,-66.49432896193919,325.4349315497695,-6.5366097036676365,142.43037151201455 +2022-01-07 23:15:00,-0.1858671,,,,,,,,,,-9.8712,-7.587089,,,,,,,,,,,,,157.89434510093224,157.89434510093224,-67.89434510093224,-67.89434510093224,333.6346918967648,-6.541028717849258,145.8843623033471 +2022-01-07 23:30:00,-0.209696,,,,,,,,,,-10.19898,-7.762411,,,,,,,,,,,,,158.92238674189502,158.92238674189502,-68.92238674189502,-68.92238674189502,342.6503142358223,-6.545446765238012,149.32484481259283 +2022-01-07 23:45:00,0.0,,,,,,,,,,-10.25116,-7.8838,,,,,,,,,,,,,159.5209390517729,159.5209390517729,-69.5209390517729,-69.5209390517729,352.29498617418585,-6.549863845517393,152.74461244077764 +2022-01-08 00:00:00,-0.2970718,,,,,,,,,,-10.36102,-8.056595,,,,,,,,,,,,,159.6512624437347,159.6512624437347,-69.65126244373472,-69.65126244373472,2.2464490407087396,-6.55427995840364,156.13270353466942 +2022-01-08 00:15:00,-0.2970718,,,,,,,,,,-10.60195,-8.284994,,,,,,,,,,,,,159.30432512886955,159.30432512886955,-69.30432512886956,-69.30432512886956,12.105147250871084,-6.558695103009086,159.47139398013138 +2022-01-08 00:30:00,-0.4622878,,,,,,,,,,-10.71136,-8.447406,,,,,,,,,,,,,158.5036260483123,158.5036260483123,-68.50362604831228,-68.50362604831228,21.49568949735442,-6.563109279035416,162.72998611152408 +2022-01-08 00:45:00,-0.4972368,,,,,,,,,,-11.06382,-8.654256,,,,,,,,,,,,,157.29806078331396,157.29806078331396,-67.29806078331396,-67.29806078331396,30.154176155379446,-6.56752248619523,165.85101122223745 +2022-01-08 01:00:00,-0.03494901,,,,,,,,,,-11.11996,-8.750794,,,,,,,,,,,,,155.74933263833213,155.74933263833213,-65.74933263833215,-65.74933263833215,37.957520691399736,-6.571934723597224,168.71771838767594 +2022-01-08 01:15:00,0.0,,,,,,,,,,-10.72502,-8.775811,,,,,,,,,,,,,153.9203021812114,153.9203021812114,-63.92030218121142,-63.92030218121142,44.89952718612642,-6.576345990943082,171.0795545638644 +2022-01-08 01:30:00,-0.2271561,,,,,,,,,,-10.60435,-8.904612,,,,,,,,,,,,,151.867728250174,151.867728250174,-61.867728250174004,-61.867728250174004,51.04609424285161,-6.580756287945405,172.44560155963254 +2022-01-08 01:45:00,-1.15326,,,,,,,,,,-11.08099,-9.171284,,,,,,,,,,,,,149.63935496616165,149.63935496616165,-59.63935496616165,-59.63935496616165,56.49542667989624,-6.585165613712888,172.26797616637432 +2022-01-08 02:00:00,-1.329587,,,,,,,,,,-11.75401,-9.452066,,,,,,,,,,,,,147.27377739309162,147.27377739309162,-57.273777393091606,-57.273777393091606,61.352207880847516,-6.589573967954493,170.6341220108192 +2022-01-08 02:15:00,-0.5607475,,,,,,,,,,-11.97044,-9.577711,,,,,,,,,,,,,144.80159152774237,144.80159152774237,-54.801591527742374,-54.801591527742374,65.71422744513899,-6.593981350382819,168.13138898974904 +2022-01-08 02:30:00,-0.6052343,,,,,,,,,,-12.13846,-9.721811,,,,,,,,,,,,,142.24690226365908,142.24690226365908,-52.246902263659074,-52.246902263659074,69.66708338203921,-6.598387760117475,165.19478538181724 +2022-01-08 02:45:00,-0.6576563,,,,,,,,,,-12.50051,-9.945933,,,,,,,,,,,,,139.62875015686112,139.62875015686112,-49.62875015686111,-49.62875015686111,73.28322401542039,-6.602793196816492,162.03678590993454 +2022-01-08 03:00:00,-1.3693,,,,,,,,,,-13.12477,-10.34272,,,,,,,,,,,,,136.9623063440172,136.9623063440172,-46.962306344017215,-46.962306344017215,76.62296266698718,-6.60719766027978,158.75697230789456 +2022-01-08 03:15:00,-1.628208,,,,,,,,,,-13.96871,-10.84715,,,,,,,,,,,,,134.25981618241855,134.25981618241855,-44.25981618241854,-44.25981618241854,79.7361902009041,-6.61160114957238,155.40520773739348 +2022-01-08 03:30:00,-0.5067173,,,,,,,,,,-14.61965,-11.09577,,,,,,,,,,,,,131.53132272466706,131.53132272466706,-41.53132272466707,-41.53132272466707,82.6641746488101,-6.61600366437051,152.00859476742426 +2022-01-08 03:45:00,-0.3129166,,,,,,,,,,-14.72328,-11.10042,,,,,,,,,,,,,128.78521654212057,128.78521654212057,-38.78521654212057,-38.78521654212057,85.44119086134157,-6.620405204463168,148.58302607857425 +2022-01-08 04:00:00,-0.3097402,,,,,,,,,,-14.6243,-11.10162,,,,,,,,,,,,,126.02865216373121,126.02865216373121,-36.028652163731216,-36.028652163731216,88.0959023741799,-6.62480576890448,145.13846638632168 +2022-01-08 04:15:00,-0.03494641,,,,,,,,,,-14.57242,-11.14842,,,,,,,,,,,,,123.26786376812805,123.26786376812805,-33.267863768128045,-33.267863768128045,90.65249517397939,-6.629205357432511,141.6815473070284 +2022-01-08 04:30:00,0.0,,,,,,,,,,-14.15417,-11.13223,,,,,,,,,,,,,120.50840836648948,120.50840836648948,-30.508408366489476,-30.508408366489476,93.1315899899381,-6.633603969723481,138.21693140194347 +2022-01-08 04:45:00,0.0,,,,,,,,,,-13.89198,-11.09788,,,,,,,,,,,,,117.75535485312624,117.75535485312624,-27.75535485312624,-27.75535485312624,95.55097099914673,-6.638001604958845,134.74807241754937 +2022-01-08 05:00:00,0.0,,,,,,,,,,-14.18661,-11.17035,,,,,,,,,,,,,115.01343218493327,115.01343218493327,-25.01343218493326,-25.01343218493326,97.92616691855864,-6.642398262807546,131.27766044364031 +2022-01-08 05:15:00,0.0,,,,,,,,,,-14.44067,-11.26411,,,,,,,,,,,,,112.28714946585323,112.28714946585323,-22.287149465853233,-22.287149465853233,100.27091261104289,-6.646793942978547,127.80789711268392 +2022-01-08 05:30:00,-0.1223483,,,,,,,,,,-14.41698,-11.36823,,,,,,,,,,,,,109.58089453750358,109.58089453750358,-19.58089453750359,-19.58089453750359,102.59751672940575,-6.651188644620561,124.34067316320875 +2022-01-08 05:45:00,-0.3066581,,,,,,,,,,-14.34408,-11.46503,,,,,,,,,,,,,106.89901565414573,106.89901565414573,-16.89901565414572,-16.89901565414572,104.91715555378346,-6.655582367417082,120.87768706739385 +2022-01-08 06:00:00,-0.1843099,,,,,,,,,,-14.31771,-11.51355,,,,,,,,,,,,,104.24589256418218,104.24589256418218,-14.24589256418218,-14.24589256418218,107.2401059603522,-6.65997511112073,117.4205303011398 +2022-01-08 06:15:00,-0.2923628,,,,,,,,,,-14.76622,-11.83004,,,,,,,,,,,,,101.62599886501926,101.62599886501926,-11.625998865019252,-11.625998865019252,109.5759296140613,-6.66436687478199,113.97075137472913 +2022-01-08 06:30:00,-2.575647,,,,,,,,,,-15.92494,-12.76758,,,,,,,,,,,,,99.04395669556892,99.04395669556892,-9.043956695568925,-9.043956695568925,111.93361747925871,-6.668757658200775,110.5299056036723 +2022-01-08 06:45:00,-3.352647,,,,,,,,,,-17.29004,-14.04743,,,,,,,,,,,,,96.50458730915405,96.50458730915405,-6.504587309154048,-6.504587309154048,114.3216985383774,-6.673147461013286,107.09959883231114 +2022-01-08 07:00:00,-0.001648,394.765,405.2158,400.829,394.7411,376.1172,390.0281,385.7155,390.1086,399.9455,-18.28233,-14.9612,0.01970803,0.01970803,0.001459854,0.005208335,0.005208335,0.005208335,0.0,0.0,0.0,0.1029197,0.03020833,0.003333333,94.01295723193286,94.01295723193286,-4.012957231932861,-4.012957231932861,116.74831741335868,-6.677536282379151,103.6815274375816 +2022-01-08 07:15:00,4.056357,550.7247,556.1341,566.1898,541.7432,459.9297,496.2621,480.5728,534.6987,457.4479,-18.72362,-15.40866,0.06970803,0.06970803,0.05145985,0.05520833,0.05520833,0.05520833,0.0490991,0.03603603,0.05225225,0.3542354,0.2357639,0.06144143,91.5744193022438,91.5744193022438,-1.574419302243791,-1.574419302243791,119.22128403591154,-6.681924122021883,100.27751598775086 +2022-01-08 07:30:00,10.58355,599.1744,610.482,623.7042,566.6434,431.9927,468.2864,475.1761,608.2147,391.0435,-18.94737,-15.72746,0.1143442,0.1438016,0.09999999,0.1401234,0.1382716,0.1382716,0.1223134,0.09050033,0.185288,0.5754961,0.4829946,0.1982867,88.81738685756555,89.1946503998346,1.1826131424344433,0.8053496001653976,121.7480942970119,-6.686310979686823,96.88955750755336 +2022-01-08 07:45:00,20.03842,644.9836,674.0253,673.0803,608.1099,471.0841,490.8047,504.1048,676.3326,395.8551,-18.67734,-15.92859,0.1759443,0.2806017,0.1572,0.2170898,0.2152379,0.2152379,0.1917858,0.1730358,0.3239881,0.8281804,0.6785626,0.4050825,86.6602087126808,86.87968404894953,3.3397912873191955,3.120315951050474,124.33592236544928,-6.690696854406269,93.51985689562952 +2022-01-08 08:00:00,53.7159,706.5698,712.7328,718.2425,649.3826,467.1208,499.756,549.2701,724.2895,432.3333,-17.23039,-15.48065,0.3020256,0.5639276,0.3396468,0.3864704,0.3852307,0.3857163,0.3233334,0.3752381,0.5242857,1.317298,1.024264,0.8001419,84.48509870982194,84.63593569845176,5.514901290178054,5.364064301548244,126.99158475257343,-6.695081746020151,90.1708779874365 +2022-01-08 08:15:00,118.4393,715.9626,712.9135,730.8887,632.9911,418.7654,477.4809,540.5009,733.6584,457.809,-15.0431,-14.27914,0.5808101,1.060974,0.661293,0.7148233,0.7247538,0.7252393,0.5759575,0.6860145,0.8393114,2.160605,1.548673,1.378173,82.35582928386432,82.4702207635101,7.644170716135682,7.529779236489906,129.7214726450552,-6.699465654110099,86.84539892474906 +2022-01-08 08:30:00,178.7119,703.0693,727.8467,739.1349,618.2881,403.9218,470.4987,515.803,739.7443,442.0327,-12.56351,-12.68872,0.9937181,1.70792,1.069957,1.111283,1.122453,1.124287,0.9504511,1.101156,1.539489,3.267678,2.178743,2.148786,80.29752421854194,80.38976198109548,9.702475781458068,9.61023801890453,132.53145199154056,-6.703848577872122,83.54657654538995 +2022-01-08 08:45:00,229.1344,711.5764,744.0621,746.4094,683.9454,399.8239,478.0935,525.7159,747.4427,386.0829,-9.7091,-10.86712,1.424326,2.403464,1.508669,1.563303,1.570642,1.568349,1.323466,1.545493,2.807195,4.43831,2.969266,3.036377,78.32467001227857,78.4021823166105,11.675329987721422,11.597817683389497,135.42673156943175,-6.708230517062475,80.27802085939332 +2022-01-08 09:00:00,283.3393,718.2219,742.9146,748.8338,741.6652,397.4535,492.8669,558.2587,750.8114,357.4846,-6.632256,-9.698561,1.897488,3.183663,2.003882,2.044208,2.047003,2.045904,1.731512,2.083208,4.306224,5.727341,3.813555,4.127351,76.44837669916046,76.51548173372976,13.551623300839534,13.484518266270236,138.411697137776,-6.712611471310083,77.04388502643413 +2022-01-08 09:15:00,340.4345,721.0632,737.559,749.9003,748.9775,403.1138,507.0916,553.1735,750.6821,367.5536,-3.476189,-9.229922,2.422518,4.049728,2.569848,2.552757,2.553818,2.561054,2.328254,2.668096,5.452064,7.135538,4.655833,5.283492,74.67856916991107,74.73799312251467,15.321430830088932,15.262006877485332,141.4897150861915,-6.716991439785488,73.84897261072797 +2022-01-08 09:30:00,397.3871,719.4888,734.9936,749.452,748.5667,413.9247,512.7943,527.3196,749.7742,387.364,-0.6373556,-8.824478,2.996362,4.948856,3.150529,3.111126,3.116206,3.120413,2.98876,3.232694,6.318207,8.591103,5.56738,6.412105,73.0247357127853,73.07831296491726,16.975264287214703,16.921687035082737,144.66291233402728,-6.721370422215841,70.69886440213213 +2022-01-08 09:45:00,448.8757,713.3226,740.6627,748.8649,751.0291,442.6663,512.7321,522.9255,748.8294,396.5558,1.997194,-8.212961,3.575165,5.799555,3.682042,3.611904,3.605631,3.610804,3.578658,3.791144,7.330599,10.00797,6.470979,7.549907,71.49617483157373,71.5452049263519,18.503825168426275,18.454795073648096,147.93193958482192,-6.725748418328294,67.60007130202052 +2022-01-08 10:00:00,496.998,706.5019,744.7946,747.0916,750.7272,479.5883,511.6651,518.488,744.748,407.0015,4.388484,-7.733106,4.137868,6.598347,4.190035,4.092,4.08292,4.088092,4.152549,4.333058,8.195123,11.35083,7.404598,8.637325,70.10202869957529,70.14747316752953,19.89797130042471,19.852526832470474,151.29573334280855,-6.730125427209714,64.56021591195848 +2022-01-08 10:15:00,545.2042,705.1952,742.1495,742.6045,743.0897,491.649,508.7342,515.0103,737.1314,418.5847,6.355134,-7.279706,4.669191,7.356701,4.678689,4.609451,4.602,4.597882,4.727133,4.885602,9.027337,12.59512,8.239725,9.741117,68.8512062996372,68.89380426824026,21.148793700362795,21.106195731759737,154.75129748489792,-6.73450144862727,61.58824516399364 +2022-01-08 10:30:00,587.3698,717.5707,739.6846,736.2154,736.1962,490.2891,504.675,515.6812,731.3731,416.4348,7.31905,-6.8926,5.128535,8.013463,5.121599,5.098071,5.093954,5.089836,5.192414,5.369044,10.01934,13.71229,9.040083,10.71074,67.75224111646634,67.79258089026344,22.247758883533667,22.207419109736566,158.29352564346618,-6.738876482235355,58.694678607147914 +2022-01-08 10:45:00,625.1849,731.0167,735.5093,731.6514,737.8127,502.1895,506.0476,528.9097,727.2644,413.7253,7.956905,-6.943189,5.594888,8.627288,5.527077,5.51562,5.51562,5.515065,5.461285,5.786979,10.94063,14.775,9.901359,11.55678,66.81310602578866,66.85167147474155,23.18689397421134,23.148328525258446,161.91509234504872,-6.743250527244527,55.89188992993587 +2022-01-08 11:00:00,663.0563,730.6876,731.7748,724.4136,736.261,514.1115,515.4697,543.7786,720.8333,413.2051,9.277022,-6.302939,6.105018,9.188962,5.929446,5.935303,5.932576,5.934748,5.727929,6.180254,11.77164,15.77063,10.73925,12.38373,66.04100243384383,66.07820433436586,23.958997566156178,23.921795665634132,165.60644096032433,-6.747623583338282,53.194413395090706 +2022-01-08 11:15:00,696.7172,725.4476,728.2745,718.0678,729.3353,515.6436,525.4891,594.9584,717.2382,428.1949,10.44983,-5.504172,6.545675,9.66405,6.286508,6.330763,6.328035,6.330763,5.72081,6.507337,12.20133,16.59958,11.48895,13.32557,65.44214113841589,65.47833923324,24.55785886158411,24.521660766759986,169.35588783519495,-6.751995650211029,50.619259627537836 +2022-01-08 11:30:00,725.6235,722.5981,724.3461,714.3325,720.9966,535.4991,530.7072,648.5733,714.2494,442.5243,12.53246,-5.148506,6.866158,10.12142,6.603728,6.713164,6.713164,6.713164,5.681392,6.815719,12.57477,17.32495,12.34248,14.21728,65.02153166335503,65.05705088624283,24.978468336644962,24.942949113757166,173.14985717123773,-6.756366727007844,48.18620444651428 +2022-01-08 11:45:00,749.7322,719.2485,721.3585,710.0251,711.645,567.8465,553.8036,660.0896,711.7095,440.4881,15.51984,-4.740611,7.169783,10.56052,6.909528,7.090825,7.088687,7.090825,6.023428,7.146767,13.31257,18.00509,13.43102,15.00212,64.78279774577234,64.81794078376237,25.217202254227654,25.182059216237636,176.97324818285392,-6.760736813466792,45.917989487557335 +2022-01-08 12:00:00,769.2346,711.302,689.2787,704.295,703.7344,591.7344,601.6592,671.9349,708.9342,443.6895,16.51859,-4.404428,7.444117,11.56418,7.146028,7.34512,7.341316,7.34512,6.291224,7.377964,13.74524,18.60409,14.42258,15.60931,64.72803609566297,64.76309375037891,25.271963904337024,25.23690624962108,180.8099156194163,-6.765105909351405,43.84034308101397 +2022-01-08 12:15:00,779.9653,710.54,645.754,703.799,698.1698,611.0001,648.7804,686.9873,703.7283,448.47,17.58196,-3.612078,7.612667,13.07733,7.314333,7.5331,7.529659,7.533454,6.522,7.557666,13.32867,19.363,15.2409,15.82133,64.85773149954427,64.89299191796499,25.14226850045573,25.107008082035,184.64323360120605,-6.769474013679428,41.981690185090855 +2022-01-08 12:30:00,782.1226,712.4766,664.85,707.2816,694.5065,634.9312,698.7618,688.9883,700.4653,497.2817,19.63173,-2.644939,7.643,12.818,7.376667,7.596099,7.594326,7.594787,6.952666,7.690333,11.84067,19.53,15.8419,16.153,65.17073684284351,65.20649449989779,24.82926315715649,24.79350550010222,188.4567005708908,-6.773841126276238,40.3723952798372 +2022-01-08 12:45:00,783.1979,709.235,709.5833,708.5883,693.663,666.6703,740.8947,672.2449,700.5853,593.515,18.84575,-2.716406,7.560667,11.64067,7.384999,7.638999,7.638999,7.635666,7.692,7.716667,10.69567,19.19733,16.363,17.177,65.66432010833942,65.70088538359606,24.335679891660572,24.299114616403944,192.23453244992675,-6.778207246803504,39.04339647004025 +2022-01-08 13:00:00,784.975,712.7584,725.1216,711.4467,697.2803,673.4543,763.45,667.845,704.899,666.7033,15.61306,-3.587117,7.478,11.42,7.408667,7.806333,7.804667,7.801333,8.769667,7.770667,10.663,19.17167,16.86066,18.70567,66.3342734276984,66.37198371492167,23.665726572301597,23.628016285078335,195.9621973179223,-6.7825723744499555,38.0241706173914 +2022-01-08 13:15:00,780.9112,717.4233,727.6367,713.4,696.6116,651.7637,772.5616,688.447,704.7936,704.9667,14.00154,-3.869656,7.422999,11.346,7.399666,8.076,8.067666,8.077666,9.894334,8.474,10.69133,19.129,17.301,20.49433,67.17507388354034,67.21430743344669,22.824926116459665,22.785692566553315,199.62685371911957,-6.786936508862709,37.34015025284233 +2022-01-08 13:30:00,765.2518,717.9083,727.3134,714.08,691.5447,644.1523,767.9286,702.1299,704.912,715.8363,13.82588,-3.610361,7.330999,11.177,7.312333,8.462667,8.454333,8.467667,10.64734,9.614,10.82333,18.92133,17.98334,22.09333,68.18008063823528,68.22127483567988,21.819919361764715,21.77872516432012,203.2176641441785,-6.79129964987078,37.009965256652656 +2022-01-08 13:45:00,740.9526,717.3704,726.7657,714.3469,688.9993,574.7856,763.8087,698.8246,708.4776,714.2653,14.56244,-2.793789,7.078667,10.708,7.151667,8.311333,8.306333,8.311333,9.878335,9.997,10.019,18.299,17.03967,21.26,69.34175109982172,69.3854277777006,20.658248900178283,20.6145722222994,206.72597597731294,-6.795661796473723,37.043099518972085 +2022-01-08 14:00:00,709.5437,626.33,620.98,709.5483,695.345,479.883,747.6603,697.3414,706.4476,712.8752,13.53716,-1.912639,6.430999,12.18467,6.875667,7.284666,7.277999,7.283,7.863873,8.405605,7.915333,15.79634,14.194,17.24445,70.65185897430054,70.69866098630241,19.348141025699466,19.301339013697586,210.1453770657052,-6.800022948533297,37.43859093978875 +2022-01-08 14:15:00,671.825,463.9117,441.404,713.4603,700.8771,466.112,731.4241,698.506,706.877,712.7992,6.257056,-1.29185,6.546,15.7,6.442333,6.47123,6.462615,6.467803,6.65954,6.693605,6.629333,13.63367,12.49197,14.34045,72.10169638505931,72.15244264445997,17.898303614940687,17.84755735554003,213.47164045789702,-6.804383105674788,38.18516698087985 +2022-01-08 14:30:00,630.3785,387.4666,379.8184,725.3883,707.4494,485.4307,735.9217,701.017,713.7373,717.49,-0.3917278,-1.087939,6.945666,16.26266,6.014333,6.120896,6.115615,6.120802,6.268333,6.263333,6.264334,13.11433,12.04497,13.621,73.68224376143468,73.73801570076897,16.31775623856533,16.261984299231035,216.70258437964546,-6.808742267097841,39.262773071952516 +2022-01-08 14:45:00,581.6162,376.0826,417.499,730.055,717.329,487.3916,740.6813,702.635,718.4366,722.8823,-2.716489,-1.364267,6.604333,13.15166,5.602,5.682666,5.68,5.687333,5.84,5.828333,5.828333,12.01033,11.32234,12.76567,75.38428937972482,75.44657346602732,14.615710620275179,14.55342653397268,219.83787575025937,-6.813100432493229,40.64504034630628 +2022-01-08 15:00:00,483.0581,365.1283,524.0798,724.3442,712.2073,426.0779,732.8557,697.7297,710.6019,716.6414,-3.975006,-1.509856,6.00947,8.609937,4.978571,5.021667,5.012,5.024333,5.243667,5.177333,5.214667,10.20707,9.724,11.37467,77.19846832418276,77.26940462462,12.80153167581724,12.730595375380007,222.87880042424356,-6.817457601588103,42.302051245882026 +2022-01-08 15:15:00,262.1823,355.9066,657.8612,714.6375,708.473,374.8563,728.128,700.1903,707.5729,713.076,-4.714045,-2.453372,5.111136,5.115272,4.201238,4.255333,4.245,4.251667,4.456334,4.373,4.433001,8.424401,8.054333,9.691665,79.11516077541187,79.19800733788891,10.88483922458814,10.801992662111095,225.82802377810458,-6.821813773549366,44.202842526339495 +2022-01-08 15:30:00,64.45077,350.4763,713.389,715.4933,713.9579,419.6686,740.3583,666.44,687.4949,690.1367,-6.03235,-3.901322,4.03,3.642,3.329667,3.142667,3.141,3.194333,2.906667,3.246666,3.035001,6.856,6.175,6.78,81.12409610007393,81.2241746978463,8.87590389992608,8.775825302153706,228.6893601041997,-6.826168948060513,46.31732190382978 +2022-01-08 15:45:00,12.33504,356.3303,588.8594,581.3229,637.83,542.1716,714.9333,587.6884,603.2083,642.0767,-8.106678,-5.397406,1.921925,1.779109,1.589653,1.298333,1.301667,1.353333,1.016667,1.378333,1.128333,3.455068,2.781667,2.57,83.21320353728808,83.34005287385459,6.786796462711914,6.659947126145415,231.4675606505371,-6.830523124870524,48.6175155314667 +2022-01-08 16:00:00,5.303792,366.9219,434.3088,425.0468,521.8083,621.5183,639.0134,554.26,540.4966,607.83,-9.913333,-6.731661,0.2962585,0.3371089,0.2209864,0.1866667,0.1883333,0.1883333,0.1916666,0.17,0.155,0.7417347,0.605,0.3633333,85.36511950998226,85.53817615512484,4.634880490017733,4.4618238448751555,234.16812937522894,-6.834876303146302,51.078227963383405 +2022-01-08 16:15:00,1.399042,410.3583,438.295,428.1983,527.9417,636.5333,597.6083,555.725,532.53,579.4833,-11.47135,-7.768722,0.1166667,0.1483333,0.07333334,0.09666666,0.09666666,0.09833331,0.09499998,0.06499998,0.06166666,0.4066667,0.345,0.145,87.54477141765373,87.81148362948511,2.455228582346266,2.1885163705148933,236.7971715470354,-6.839228482534963,53.677265686012944 +2022-01-08 16:30:00,0.03017192,473.565,483.3435,473.8914,496.4185,535.6962,510.5407,530.465,518.9746,536.7883,-12.78197,-8.635422,0.03333334,0.03333334,0.01833333,0.02166666,0.02166666,0.02166666,0.02833333,0.01333333,0.01166666,0.135,0.085,0.02166666,89.65401457579208,90.15331943140379,0.3459854242079282,-0.15331943140378645,239.36127439525407,-6.8435796628800745,56.39537499047279 +2022-01-08 16:45:00,-0.662256,497.6667,497.6038,497.8295,421.6936,421.0392,423.0747,508.76,509.2125,509.07,-13.73166,-9.240155,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.557420591358,92.557420591358,-2.557420591357994,-2.557420591357994,241.86742070226833,-6.847929843228485,59.216018620429516 +2022-01-08 17:00:00,-0.662256,,,,,,,,,,-14.38842,-9.818117,,,,,,,,,,,,,95.01789624763849,95.01789624763849,-5.017896247638486,-5.017896247638486,244.3229350735748,-6.852279023332812,62.125079546226104 +2022-01-08 17:15:00,0.0476446,,,,,,,,,,-14.86515,-10.43469,,,,,,,,,,,,,97.5291985072349,97.5291985072349,-7.529198507234893,-7.529198507234893,246.73545931530396,-6.856627202920208,65.11054476267323 +2022-01-08 17:30:00,-0.03971964,,,,,,,,,,-15.17625,-10.84608,,,,,,,,,,,,,100.08608745373695,100.08608745373695,-10.086087453736948,-10.086087453736948,249.11295670637497,-6.860974381164851,68.16220148419441 +2022-01-08 17:45:00,0.1223278,,,,,,,,,,-15.38373,-11.07439,,,,,,,,,,,,,102.68359242039949,102.68359242039949,-12.683592420399492,-12.683592420399492,251.46374537060535,-6.865320557753876,71.27136256347308 +2022-01-08 18:00:00,0.2478162,,,,,,,,,,-15.46451,-11.23753,,,,,,,,,,,,,105.3169680373074,105.3169680373074,-15.316968037307404,-15.316968037307404,253.7965590054318,-6.8696657324180705,74.43062456478039 +2022-01-08 18:15:00,0.03812412,,,,,,,,,,-15.66088,-11.59304,,,,,,,,,,,,,107.98164603720278,107.98164603720278,-17.981646037202772,-17.981646037202772,256.12063731402736,-6.874009904360719,77.63365997522055 +2022-01-08 18:30:00,0.0,,,,,,,,,,-16.08951,-12.13976,,,,,,,,,,,,,110.67318341841268,110.67318341841268,-20.673183418412673,-20.673183418412673,258.44584983911335,-6.878353073232574,80.87504241312848 +2022-01-08 18:45:00,0.03018606,,,,,,,,,,-16.45156,-12.34192,,,,,,,,,,,,,113.38720378369348,113.38720378369348,-23.387203783693476,-23.387203783693476,260.7828558598726,-6.882695238818997,84.1500986057992 +2022-01-08 19:00:00,0.1970177,,,,,,,,,,-16.55363,-12.35369,,,,,,,,,,,,,116.1193311941357,116.1193311941357,-26.1193311941357,-26.1193311941357,263.1433079469449,-6.8870364002468705,87.45478437689853 +2022-01-08 19:15:00,0.1668316,,,,,,,,,,-16.66676,-12.79165,,,,,,,,,,,,,118.86511519310653,118.86511519310653,-28.86511519310654,-28.86511519310654,265.5401093821301,-6.891376557246986,90.78558215872151 +2022-01-08 19:30:00,0.0,,,,,,,,,,-16.94557,-13.31894,,,,,,,,,,,,,121.6199413694121,121.6199413694121,-31.619941369412103,-31.619941369412103,267.9877360432769,-6.8957157095610455,94.13941390778852 +2022-01-08 19:45:00,0.0,,,,,,,,,,-17.07684,-13.32877,,,,,,,,,,,,,124.3789238031814,124.3789238031814,-34.378923803181394,-34.378923803181394,270.5026400416645,-6.900053856330487,97.51356764896752 +2022-01-08 20:00:00,0.1191648,,,,,,,,,,-17.17077,-13.27779,,,,,,,,,,,,,127.13677405738093,127.13677405738093,-37.13677405738093,-37.13677405738093,273.1037571910312,-6.904390997253358,100.90563636932296 +2022-01-08 20:15:00,0.1191648,,,,,,,,,,-17.27254,-13.51332,,,,,,,,,,,,,129.88763567324787,129.88763567324787,-39.887635673247885,-39.887635673247885,275.81314266604875,-6.90872713211138,104.31346423644331 +2022-01-08 20:30:00,0.009533565,,,,,,,,,,-17.46061,-13.81308,,,,,,,,,,,,,132.62487328021285,132.62487328021285,-42.62487328021284,-42.62487328021284,278.6567673103673,-6.913062260020524,107.73509942748747 +2022-01-08 20:45:00,0.009533565,,,,,,,,,,-17.63806,-13.97781,,,,,,,,,,,,,135.34080112975533,135.34080112975533,-45.340801129755334,-45.340801129755334,281.66551084686483,-6.9173963807515975,111.16875306811953 +2022-01-08 21:00:00,0.01748044,,,,,,,,,,-17.65191,-14.04951,,,,,,,,,,,,,138.02632693661835,138.02632693661835,-48.02632693661834,-48.02632693661834,284.8763827972805,-6.921729493988096,114.61275971080832 +2022-01-08 21:15:00,0.1303134,,,,,,,,,,-17.55046,-14.23335,,,,,,,,,,,,,140.67048329497618,140.67048329497618,-50.67048329497617,-50.67048329497617,288.3339887535697,-6.926061598904198,118.06553877375748 +2022-01-08 21:30:00,0.619807,,,,,,,,,,-16.90331,-14.26877,,,,,,,,,,,,,143.25981125287583,143.25981125287583,-53.25981125287583,-53.25981125287583,292.09221246728197,-6.930392695230694,121.52555612058548 +2022-01-08 21:45:00,1.827706,,,,,,,,,,-15.7325,-13.88346,,,,,,,,,,,,,145.77755151879077,145.77755151879077,-55.77755151879078,-55.77755151879078,296.2159671060907,-6.9347227827092865,124.99128019193448 +2022-01-08 22:00:00,2.787635,,,,,,,,,,-14.3485,-12.8051,,,,,,,,,,,,,148.2026044916655,148.2026044916655,-58.2026044916655,-58.2026044916655,300.7826322918695,-6.939051860514155,128.46113019800424 +2022-01-08 22:15:00,1.694152,,,,,,,,,,-13.05991,-11.82164,,,,,,,,,,,,,150.50824600199095,150.50824600199095,-60.50824600199096,-60.50824600199096,305.8823266970904,-6.943379928325157,131.93341209049046 +2022-01-08 22:30:00,0.2590311,,,,,,,,,,-12.40802,-11.60614,,,,,,,,,,,,,152.66066312906423,152.66066312906423,-62.66066312906422,-62.66066312906422,311.61533947536714,-6.947706985924015,135.40623066921134 +2022-01-08 22:45:00,0.03178115,,,,,,,,,,-12.63093,-11.55431,,,,,,,,,,,,,154.61756688115733,154.61756688115733,-64.61756688115733,-64.61756688115733,318.0838331478192,-6.95203303244125,138.8773648101466 +2022-01-08 23:00:00,0.0,,,,,,,,,,-13.36034,-11.64495,,,,,,,,,,,,,156.32750245049243,156.32750245049243,-66.32750245049243,-66.32750245049243,325.3737407783689,-6.9563580676294805,142.3440826996281 +2022-01-08 23:15:00,0.0,,,,,,,,,,-13.96755,-11.90703,,,,,,,,,,,,,157.7310151071312,157.7310151071312,-67.7310151071312,-67.7310151071312,333.523261156481,-6.9606820911685645,145.8028507586974 +2022-01-08 23:30:00,0.1541228,,,,,,,,,,-13.96076,-12.05774,,,,,,,,,,,,,158.76526745263976,158.76526745263976,-68.76526745263976,-68.76526745263976,342.4800141665505,-6.965005102294526,149.24885678792432 +2022-01-08 23:45:00,0.1604783,,,,,,,,,,-13.51169,-11.79733,,,,,,,,,,,,,159.37321466050417,159.37321466050417,-69.37321466050417,-69.37321466050417,352.0625566860365,-6.969327100679948,152.67519069688475 +2022-01-09 00:00:00,0.00635551,,,,,,,,,,-13.40725,-11.5301,,,,,,,,,,,,,159.516048745661,159.516048745661,-69.51604874566101,-69.51604874566101,1.9567182668866963,-6.973648086110188,156.07135335020877 +2022-01-09 00:15:00,0.0,,,,,,,,,,-13.64297,-11.567,,,,,,,,,,,,,159.18399233261266,159.18399233261266,-69.18399233261268,-69.18399233261268,11.770857407843437,-6.977968057712133,159.42037559708237 +2022-01-09 00:30:00,0.0,,,,,,,,,,-13.71872,-11.48884,,,,,,,,,,,,,158.39931861161475,158.39931861161475,-68.39931861161475,-68.39931861161475,21.133962521973785,-6.982287015216571,162.69285269469003 +2022-01-09 00:45:00,0.00953331,,,,,,,,,,-13.92492,-11.60888,,,,,,,,,,,,,157.20964256614286,157.20964256614286,-67.20964256614288,-67.20964256614288,29.781795513688394,-6.9866049583906715,165.833621821332 +2022-01-09 01:00:00,1.361695,,,,,,,,,,-13.54214,-11.50422,,,,,,,,,,,,,155.67569140873104,155.67569140873104,-65.67569140873103,-65.67569140873103,37.58767099357368,-6.990921886375872,168.73001810774383 +2022-01-09 01:15:00,2.817148,,,,,,,,,,-11.59972,-9.968322,,,,,,,,,,,,,153.85977698285885,153.85977698285885,-63.85977698285884,-63.85977698285884,44.54084117484285,-6.995237798877497,171.1372049059006 +2022-01-09 01:30:00,2.249904,,,,,,,,,,-9.700678,-8.435923,,,,,,,,,,,,,151.8184707111775,151.8184707111775,-61.8184707111775,-61.8184707111775,50.703261118923535,-6.999552695717284,172.56238875033276 +2022-01-09 01:45:00,1.645994,,,,,,,,,,-8.824189,-7.863945,,,,,,,,,,,,,149.59955966496614,149.59955966496614,-59.599559664966144,-59.599559664966144,56.17033196544156,-7.003866575960274,172.42833656487215 +2022-01-09 02:00:00,1.453575,,,,,,,,,,-8.324639,-7.297378,,,,,,,,,,,,,147.24179733687188,147.24179733687188,-57.24179733687188,-57.24179733687188,61.04499059999131,-7.008179439406376,170.8029834039657 +2022-01-09 02:15:00,1.262848,,,,,,,,,,-7.924272,-6.700695,,,,,,,,,,,,,144.77597844497126,144.77597844497126,-54.77597844497126,-54.77597844497126,65.42405382262211,-7.012491285804572,168.29221969053552 +2022-01-09 02:30:00,1.159624,,,,,,,,,,-7.296667,-6.223367,,,,,,,,,,,,,142.22640606813985,142.22640606813985,-52.22640606813984,-52.22640606813984,69.39264612260149,-7.016802114274469,165.34500021397227 +2022-01-09 02:45:00,0.9118455,,,,,,,,,,-6.514361,-5.847961,,,,,,,,,,,,,139.61229988084668,139.61229988084668,-49.612299880846685,-49.612299880846685,73.0230389798781,-7.021111924539582,162.17747423227527 +2022-01-09 03:00:00,0.6290829,,,,,,,,,,-5.891955,-5.596139,,,,,,,,,,,,,136.9489848930141,136.9489848930141,-46.948984893014114,-46.948984893014114,76.37553345568858,-7.025420716388908,158.8896408072762 +2022-01-09 03:15:00,0.5400403,,,,,,,,,,-5.426033,-5.423083,,,,,,,,,,,,,134.24883497996586,134.24883497996586,-44.248834979965864,-44.248834979965864,79.50009253275948,-7.029728488949331,155.53111692741504 +2022-01-09 03:30:00,0.6019191,,,,,,,,,,-5.103567,-5.246367,,,,,,,,,,,,,131.52199880699018,131.52199880699018,-41.52199880699019,-41.52199880699019,82.43809438846029,-7.034035242024402,152.12870328111168 +2022-01-09 03:45:00,0.4430993,,,,,,,,,,-4.891228,-5.078378,,,,,,,,,,,,,128.77695289730582,128.77695289730582,-38.77695289730582,-38.77695289730582,85.22393638465303,-7.038340975275787,148.69804766461505 +2022-01-09 04:00:00,0.6146593,,,,,,,,,,-4.699261,-4.842522,,,,,,,,,,,,,126.02092129385096,126.02092129385096,-36.02092129385097,-36.02092129385097,87.88640344951637,-7.042645687910408,145.24893188207702 +2022-01-09 04:15:00,0.5177783,,,,,,,,,,-4.485039,-4.637522,,,,,,,,,,,,,123.26019412577261,123.26019412577261,-33.26019412577262,-33.26019412577262,90.44979532737898,-7.046949379669968,141.78785275938677 +2022-01-09 04:30:00,0.2287135,,,,,,,,,,-4.312117,-4.544483,,,,,,,,,,,,,120.500373225532,120.500373225532,-30.500373225531998,-30.500373225531998,92.93483623343923,-7.051252050303447,138.3193726017679 +2022-01-09 04:45:00,0.2318901,,,,,,,,,,-4.174628,-4.452839,,,,,,,,,,,,,117.74656318802614,117.74656318802614,-27.74656318802614,-27.74656318802614,95.35940302376741,-7.055553698897711,134.84686919883472 +2022-01-09 05:00:00,0.2239488,,,,,,,,,,-4.059383,-4.344995,,,,,,,,,,,,,115.00352118644162,115.00352118644162,-25.00352118644161,-25.00352118644161,97.7391068419987,-7.059854325296328,131.372973767392 +2022-01-09 05:15:00,0.5130196,,,,,,,,,,-3.927867,-4.205622,,,,,,,,,,,,,112.27577838545514,112.27577838545514,-22.275778385455144,-22.275778385455144,100.08775580137592,-7.064153929211898,127.89984113925375 +2022-01-09 05:30:00,0.784606,,,,,,,,,,-3.75625,-4.044583,,,,,,,,,,,,,109.56773961528516,109.56773961528516,-19.56773961528516,-19.56773961528516,102.41772392260083,-7.068452509793133,124.42932382445625 +2022-01-09 05:45:00,0.7512316,,,,,,,,,,-3.581239,-3.868789,,,,,,,,,,,,,106.88376593846925,106.88376593846925,-16.883765938469253,-16.883765938469253,104.74024632485305,-7.0727500668035646,120.96308815694005 +2022-01-09 06:00:00,0.6447884,,,,,,,,,,-3.415433,-3.689111,,,,,,,,,,,,,104.2282464795799,104.2282464795799,-14.228246479579894,-14.228246479579894,107.06565352852544,-7.077046599970345,117.50269777094955 +2022-01-09 06:15:00,0.4891289,,,,,,,,,,-3.236506,-3.508717,,,,,,,,,,,,,101.60566142428223,101.60566142428223,-11.605661424282237,-11.605661424282237,109.40355693335584,-7.081342108460376,114.04967630274689 +2022-01-09 06:30:00,0.2667922,,,,,,,,,,-2.910433,-3.441333,,,,,,,,,,,,,99.02063728444662,99.02063728444662,-9.020637284446623,-9.020637284446623,111.76299455916029,-7.085636592022638,110.60555614671816 +2022-01-09 06:45:00,0.6082185,,,,,,,,,,-2.442728,-3.547633,,,,,,,,,,,,,96.47799800334273,96.47799800334273,-6.477998003342729,-6.477998003342729,114.15254094066455,-7.089930050413386,107.1719213799837 +2022-01-09 07:00:00,0.8956422,,,,,,,,,,-2.557844,-3.571678,,,,,,,,,,,,,93.98281163122026,93.98281163122026,-3.9828116312202555,-3.9828116312202555,116.58038587825672,-7.094222482814075,103.75044711206395 +2022-01-09 07:15:00,3.072767,372.6996,387.8831,379.8029,424.1343,405.5111,443.8072,427.135,428.7486,428.1527,-2.628611,-3.3921,0.03510638,0.0569149,0.02659575,0.044,0.044,0.044,0.04785715,0.04071429,0.03714285,0.1739361,0.189,0.04071429,91.5404318858698,91.5404318858698,-1.5404318858697863,-1.5404318858697863,119.05438519605514,-7.098513888908201,100.34293658112085 +2022-01-09 07:30:00,8.81303,385.1276,415.2222,409.8064,449.0302,447.673,519.1968,524.8677,521.6066,546.1247,-2.292044,-3.19885,0.152586,0.2065084,0.1070835,0.1418261,0.1445435,0.1418261,0.1397927,0.1288863,0.1204762,0.4788142,0.5178043,0.2197465,88.78323124389804,89.15653643675483,1.2167687561019558,0.8434635632451711,121.58208242558749,-7.10280426850295,96.95136092490623 +2022-01-09 07:45:00,21.56192,368.0027,427.5607,416.4156,415.6445,480.9599,571.2205,580.8436,566.4068,631.1058,-1.863439,-2.979739,0.3836834,0.5023713,0.2828026,0.3699314,0.377912,0.3751945,0.3015189,0.3035887,0.29625,0.8650631,0.9477519,0.6577823,86.61948882391013,86.83716010071734,3.380511176089872,3.162839899282654,124.17070210269549,-7.107093620772503,93.57790212802276 +2022-01-09 08:00:00,30.89223,381.3083,447.6251,437.6312,409.106,497.9952,600.0897,611.6707,591.9559,667.7125,-1.424039,-2.725489,0.5662037,0.7532163,0.4163499,0.5201522,0.5254154,0.5254154,0.4376786,0.4439881,0.4376785,1.17422,1.219338,1.004465,84.43890244051487,84.588720779662,5.561097559485137,5.411279220338006,126.8271147089352,-7.111381945411267,90.22499963956263 +2022-01-09 08:15:00,25.76554,382.0425,437.6198,425.6864,417.0959,493.5117,585.1697,601.9056,586.2653,654.2788,-1.259967,-2.494806,0.4723684,0.6206141,0.3464912,0.4053503,0.4025412,0.4025412,0.3818587,0.3785715,0.367235,1.025439,1.039155,0.8563597,82.30432179130855,82.41803822493213,7.695678208691441,7.58196177506786,129.5577697415215,-7.1156692422118795,86.89540529504312 +2022-01-09 08:30:00,25.84596,376.4103,435.9352,423.1942,416.8729,491.7737,582.8009,595.5865,582.3632,651.6782,-1.161594,-2.344511,0.4545799,0.5874832,0.3310139,0.3925493,0.3897403,0.3897403,0.3576523,0.3461111,0.3331324,0.9969805,1.02401,0.7912006,80.24060192080404,80.33234218741187,9.759398079195954,9.667657812588134,132.36859632028637,-7.119955510330328,83.59224725613215 +2022-01-09 08:45:00,35.99024,379.438,451.5883,440.3069,418.4241,505.1231,612.483,616.3632,609.3657,676.0927,-1.176889,-2.213256,0.6753739,0.9061007,0.4942473,0.5625963,0.5643057,0.5643057,0.5064399,0.4813152,0.4952512,1.359082,1.327127,1.158514,78.26214844102569,78.33926617821203,11.737851558974317,11.660733821787977,135.26487146518906,-7.124240749497403,80.31910402845129 +2022-01-09 09:00:00,32.7191,385.7909,450.0129,438.7531,420.1541,505.0823,609.8361,615.9936,607.6083,671.3425,-1.329556,-2.044894,0.6277369,0.8504952,0.4573918,0.5354585,0.537168,0.537168,0.4974878,0.4801408,0.4837058,1.288767,1.265304,1.121377,76.38005012035387,76.44682513407663,13.619949879646132,13.553174865923365,138.25105403325142,-7.1285249594802735,77.08009398228971 +2022-01-09 09:15:00,37.71581,390.8969,451.7602,442.9109,418.8794,507.2692,618.0673,628.3298,585.3648,672.9467,-1.142839,-1.827717,0.7116015,0.9896302,0.5396301,0.6500273,0.6555828,0.6555828,0.5717788,0.600145,0.5843222,1.445263,1.479989,1.311839,74.6042356219517,74.66337224127716,15.395764378048302,15.33662775872284,141.33058759354685,-7.13280813943129,73.87998216934392 +2022-01-09 09:30:00,51.26643,395.5862,459.1383,451.1555,418.51,516.4263,638.6364,648.7699,613.1978,692.788,-0.55685,-1.645961,0.9254313,1.303992,0.7337789,0.8359559,0.8396766,0.8392178,0.7381324,0.7605847,0.7794018,1.81,1.844639,1.723367,72.94421130910003,72.99753043449861,17.05578869089997,17.002469565501386,144.50567886224457,-7.137090289168555,70.72430675828724 +2022-01-09 09:45:00,42.73662,395.6606,450.0847,442.6049,415.6368,509.1902,619.9861,630.4146,626.355,684.9811,-0.2955389,-1.599039,0.7414936,1.038259,0.5802413,0.6680367,0.6662018,0.6657431,0.5877609,0.5808666,0.5898799,1.510488,1.525407,1.363946,71.4093043820557,71.45809668162896,18.590695617944302,18.541903318371045,147.77705869189003,-7.141371408339182,67.61953165385471 +2022-01-09 10:00:00,31.53484,387.2212,440.6633,432.2492,415.4653,498.6098,598.6957,613.0624,607.3232,665.9445,-0.30645,-1.531078,0.5474372,0.7415429,0.3990279,0.4945607,0.4945607,0.4945607,0.4264706,0.4065877,0.3912961,1.161647,1.174716,0.976561,70.00869492197856,70.05391574578611,19.991305078021437,19.94608425421389,151.14374096258268,-7.145651496201026,64.57322804156804 +2022-01-09 10:15:00,31.07614,387.0509,442.0604,432.4574,416.8398,498.6482,599.9015,611.3138,606.876,665.4401,-0.2672722,-1.374339,0.5548195,0.7312346,0.4029396,0.4868728,0.4868728,0.4868728,0.4211111,0.400542,0.3939431,1.153801,1.170007,0.9658945,68.75133824927639,68.79372219566523,21.24866175072361,21.206277804334768,154.6028002135829,-7.149930552426667,61.594287349905294 +2022-01-09 10:30:00,36.09766,392.49,445.5299,438.421,418.6826,505.2016,614.1691,620.0229,616.4532,679.9832,-0.1983556,-1.21085,0.6499509,0.8779284,0.4918436,0.5761886,0.5817441,0.5761886,0.4989413,0.4802935,0.4815409,1.32785,1.354846,1.148051,67.64582179723433,67.68595368613677,22.354178202765674,22.31404631386323,158.1491894303981,-7.1542085768633115,58.69317050253212 +2022-01-09 10:45:00,52.39709,400.7807,455.2073,445.5823,425.2839,515.2391,638.1449,643.5381,634.9397,692.9062,-0.1203889,-1.112961,0.9247001,1.303918,0.7343381,0.831072,0.8366276,0.829985,0.7982652,0.766112,0.7917166,1.807421,1.819474,1.797543,66.7001788181783,66.73853970496897,23.299821181821695,23.261460295031032,161.7756262699845,-7.158485568579636,55.88219138936922 +2022-01-09 11:00:00,64.61899,408.7804,465.7863,453.0371,426.092,521.6184,654.0339,665.5554,649.8945,698.6248,-0.02253889,-1.0043,1.16259,1.663139,0.9523754,1.041982,1.040297,1.038086,0.9985904,0.9741951,1.03045,2.219054,2.200624,2.282389,65.92167582440925,65.95867409538707,24.07832417559075,24.041325904612926,165.47257627115414,-7.162761527404655,53.17582672633712 +2022-01-09 11:15:00,68.83768,411.0136,468.8048,459.0324,438.2873,526.5931,663.4556,667.9102,652.5082,704.9271,0.07267223,-0.8706111,1.293834,1.848625,1.058734,1.115282,1.113597,1.111159,1.072729,1.041413,1.097291,2.41598,2.358417,2.447121,65.31659121247503,65.35258447216427,24.68340878752496,24.647415527835733,169.2283530319603,-7.167036453050969,50.591037387520856 +2022-01-09 11:30:00,69.20121,413.2034,468.2476,459.5442,438.4936,526.7321,662.7,667.0591,651.1041,708.1899,0.13605,-0.7171834,1.314158,1.887293,1.083138,1.130686,1.128781,1.127468,1.081807,1.0528,1.097476,2.458967,2.375998,2.45809,64.89000190261902,64.92531306649853,25.109998097380984,25.074686933501468,173.02935057300874,-7.171310344696394,48.14756562704188 +2022-01-09 11:45:00,56.9426,407.4193,461.7179,451.6464,431.5589,519.5121,647.2131,652.7076,642.0894,701.8819,0.1126556,-0.6008278,1.064158,1.501948,0.8646036,0.9245363,0.9256389,0.9207516,0.8440341,0.8319191,0.8785275,2.046467,1.998396,1.951532,64.64559585339751,64.68052559834015,25.35440414660249,25.319474401659846,176.860409978618,-7.1755832021190145,45.86814757803269 +2022-01-09 12:00:00,56.80862,406.6296,462.2952,450.9485,441.1369,521.6732,654.2921,654.5333,641.8287,700.2145,0.1285778,-0.5316556,1.040676,1.458844,0.8394477,0.9085293,0.9101608,0.9052737,0.8515368,0.8340561,0.880786,2.006563,1.984783,1.957579,64.58552783758509,64.62036485704007,25.41447216241491,25.37963514295993,180.7053017356358,-7.179855025049619,43.778549682988604 +2022-01-09 12:15:00,68.8506,413.735,469.1627,459.0577,445.6252,527.6406,667.6069,670.23,649.0828,704.7489,0.1907889,-0.4643889,1.297752,1.863639,1.077181,1.10885,1.113474,1.113474,1.047901,1.012203,1.065145,2.451175,2.349339,2.375882,64.71033184775399,64.74536196992744,25.28966815224601,25.25463803007255,184.5472937204369,-7.184125812676939,41.90729689620248 +2022-01-09 12:30:00,82.78529,421.41,471.9665,463.4214,463.3719,536.0149,679.3685,669.1821,654.4188,719.4816,0.2629667,-0.3776389,1.586433,2.334018,1.343342,1.326597,1.332597,1.336046,1.309262,1.257796,1.321735,2.924021,2.789414,2.924181,65.01889899087749,65.05441402984549,24.981101009122515,24.945585970154514,188.369762280631,-7.1883955647208495,40.284933565055816 +2022-01-09 12:45:00,99.85497,431.2304,475.1663,466.325,601.3218,635.5458,728.278,676.1016,661.4645,735.5319,0.3741944,-0.2492056,1.908376,2.862092,1.651423,1.344962,1.352775,1.517942,1.641204,1.58656,1.650449,3.4589,3.188039,3.660197,65.50852315440802,65.54483032117662,24.491476845591976,24.455169678823385,192.15679278481718,-7.192664281014004,38.942669518911075 +2022-01-09 13:00:00,89.62246,433.5304,475.0538,465.2546,681.1241,678.5333,747.2664,675.6898,659.7484,724.6931,0.4039389,-0.1354278,1.828743,2.693471,1.55893,1.059325,1.069431,1.269682,1.449392,1.408034,1.469949,3.311073,2.797965,3.256985,66.17500963616611,66.21244242705716,23.82499036383389,23.78755757294285,195.89372209553966,-7.196931960632355,37.910343079163624 +2022-01-09 13:15:00,55.17453,422.6902,462.2144,451.2078,617.8266,610.6577,708.2893,655.491,643.0438,699.3412,0.3310167,-0.07841667,1.151398,1.613204,0.9339519,0.7280361,0.7362703,0.7673767,0.869841,0.849524,0.8965253,2.173238,1.922045,2.000124,67.01283643484095,67.05176816486872,22.987163565159047,22.94823183513129,199.56758416560157,-7.201198603368539,37.21381395298654 +2022-01-09 13:30:00,37.38332,412.3576,451.7408,437.5461,596.591,594.393,684.3671,637.7709,626.6802,685.3083,0.2778445,-0.03804445,0.7042602,0.9267408,0.5561815,0.5316747,0.5376154,0.5301896,0.5601608,0.5506579,0.5719704,1.437777,1.481231,1.323457,68.015352679465,68.05621430913459,21.984647320535007,21.943785690865408,203.16742955935655,-7.205464209026104,36.87215660697122 +2022-01-09 13:45:00,37.25303,412.825,453.8198,431.483,588.6834,580.3283,670.3977,625.9759,616.9686,677.5291,0.3871111,-0.01590556,0.7130498,0.927223,0.5936533,0.545456,0.5464084,0.5464084,0.5509594,0.5391995,0.5554002,1.472868,1.495097,1.276042,69.17499674302549,69.21830151153836,20.825003256974508,20.781698488461643,206.684510718999,-7.209728776710108,36.895252292996624 +2022-01-09 14:00:00,41.64345,416.4785,457.6722,429.2831,585.9179,562.2435,665.4619,633.5438,624.4302,685.4175,0.6049278,0.02986111,0.814378,1.079572,0.7164189,0.6467819,0.6477342,0.6477342,0.6394234,0.6256704,0.6638356,1.652161,1.680953,1.480497,70.48351672275874,70.52989565207679,19.516483277241267,19.470104347923208,210.11233997268536,-7.2139923062313756,37.282426426163056 +2022-01-09 14:15:00,39.3651,416.442,456.8824,424.9792,570.5254,548.3959,648.4534,642.2026,632.6768,691.5975,0.7462167,0.1289778,0.777546,1.029052,0.6868684,0.6226748,0.6239247,0.6205914,0.6079503,0.600224,0.6280469,1.579552,1.593631,1.422908,71.93217537532358,71.98243056084783,18.06782462467642,18.017569439152176,213.4466349354872,-7.218254797284317,38.0225444942913 +2022-01-09 14:30:00,35.24826,415.0912,456.2649,422.9113,561.6179,546.1906,634.5499,636.3176,627.1006,685.7745,0.8213111,0.2454944,0.6719003,0.8736153,0.5808213,0.532808,0.5373188,0.5328985,0.5363095,0.5313988,0.531994,1.402661,1.395598,1.241667,73.51192329284115,73.56711136802718,16.488076707158854,16.432888631972812,216.68517768283044,-7.222516249166802,39.095535919446675 +2022-01-09 14:45:00,32.03051,408.6783,460.0766,481.968,567.659,573.661,627.9521,612.3716,628.1838,675.5526,0.9793278,0.3769445,0.5637813,0.7254503,0.423113,0.4764389,0.4773188,0.4786128,0.4855311,0.479201,0.4618933,1.231116,1.301015,1.103342,75.21352267355917,75.27509190873809,14.786477326440831,14.724908091261906,219.8276164078868,-7.22677666148229,40.474889384744955 +2022-01-09 15:00:00,22.40017,416.5805,451.11,479.9544,548.5342,579.0433,579.9359,584.3207,611.3748,643.2877,1.0494,0.4924555,0.3638699,0.4576428,0.2409316,0.3344264,0.3320454,0.3344264,0.3370618,0.3307953,0.2925693,0.8928917,0.9818938,0.7347201,77.02759281478096,77.09762123226783,12.97240718521904,12.902378767732174,222.8752331585048,-7.23103603411073,42.13046375800393 +2022-01-09 15:15:00,13.03565,448.9315,448.6428,394.0287,532.5477,553.1215,501.1104,554.2401,560.5098,588.5317,0.9437389,0.5760167,0.2067679,0.2574566,0.1653935,0.1900847,0.1900847,0.1900847,0.1833988,0.1803375,0.1412873,0.6145698,0.6285046,0.3375588,78.94452093978582,79.02615886372404,11.055479060214186,10.97384113627597,225.83070164535874,-7.235294366149901,44.03103763709183 +2022-01-09 15:30:00,7.546001,458.8228,491.0407,352.7928,525.9628,531.9434,425.9748,518.0582,518.8126,534.7275,0.8371111,0.6136222,0.114876,0.1322314,0.1041322,0.1147059,0.1147059,0.1147059,0.1104395,0.1104395,0.08076923,0.4409091,0.4432773,0.132967,80.95409567268447,81.05246108627074,9.045904327315522,8.947538913729264,228.69785387049964,-7.2395516574179055,46.14626264181692 +2022-01-09 15:45:00,5.510188,480.2985,529.8298,375.4528,559.1122,557.7075,472.4033,549.1004,546.3913,550.2798,0.7872722,0.6512445,0.08489208,0.08489208,0.07122301,0.06436169,0.06436169,0.06436169,0.06745283,0.06745283,0.05261248,0.3482014,0.2521276,0.06745283,83.04444003094326,83.16863962182595,6.9555599690567345,6.83136037817405,231.48146560464917,-7.243807907638256,48.44793385258002 +2022-01-09 16:00:00,3.456938,505.2512,519.7018,455.3994,533.1492,530.6898,511.6574,517.345,515.0231,517.1431,0.7574278,0.6798667,0.03489209,0.03489209,0.02122302,0.0143617,0.0143617,0.0143617,0.01745283,0.01745283,0.01415094,0.1482014,0.05212765,0.01745283,85.19879549390566,85.36719696016601,4.801204506094335,4.632803039833985,234.18706989621512,-7.248063115985133,50.910660497913874 +2022-01-09 16:15:00,1.259233,360.6538,362.2063,359.1268,425.0077,424.2909,426.5697,350.6342,351.5703,351.8044,0.6990889,0.6826167,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,87.3842207882354,87.64104312863849,2.6157792117646053,2.3589568713615146,236.8208037901092,-7.252317282229342,53.51209159787687 +2022-01-09 16:30:00,0.1730865,219.688,219.288,219.488,378.0,377.9,377.3,256.3,256.8,256.9,0.6839667,0.7227722,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,89.50910225887775,89.98349588385763,0.49089774112225554,0.01650411614237397,239.3892874517885,-7.256570406145329,56.232850986445925 +2022-01-09 16:45:00,0.0,,,,,,,,,,0.6773111,0.74395,,,,,,,,,,,,,92.38826839995038,92.38826839995038,-2.38826839995038,-2.38826839995038,241.8995365575036,-7.260822486896359,59.056308888946276 +2022-01-09 17:00:00,0.0,,,,,,,,,,0.6896945,0.7746056,,,,,,,,,,,,,94.84944824989901,94.84944824989901,-4.849448249899012,-4.849448249899012,244.35890763429342,-7.265073524242325,61.96828011662402 +2022-01-09 17:15:00,0.0,,,,,,,,,,0.7283,0.8204167,,,,,,,,,,,,,97.3614679931886,97.3614679931886,-7.361467993188591,-7.361467993188591,246.77507271439393,-7.269323517946759,64.95670267409868 +2022-01-09 17:30:00,0.0,,,,,,,,,,0.7478889,0.8272333,,,,,,,,,,,,,99.91906988833857,99.91906988833857,-9.919069888338575,-9.919069888338575,249.15602302809486,-7.273572467187478,68.01132953041989 +2022-01-09 17:45:00,0.0,,,,,,,,,,0.7464667,0.7939722,,,,,,,,,,,,,102.51726686311689,102.51726686311689,-12.517266863116891,-12.517266863116891,251.5101018747642,-7.277820371775306,71.12345046132185 +2022-01-09 18:00:00,0.0,,,,,,,,,,0.7157778,0.77275,,,,,,,,,,,,,105.15129826104243,105.15129826104243,-15.151298261042424,-15.151298261042424,253.84606485716847,-7.28206723135736,74.28564732849262 +2022-01-09 18:15:00,0.0,,,,,,,,,,0.7197889,0.7926,,,,,,,,,,,,,107.81658135573375,107.81658135573375,-17.81658135573375,-17.81658135573375,256.17316975340987,-7.286313045231509,77.4915841618423 +2022-01-09 18:30:00,0.0,,,,,,,,,,0.7552,0.8033444,,,,,,,,,,,,,110.50865923737308,110.50865923737308,-20.508659237373077,-20.508659237373077,258.5012996417013,-7.290557813139458,80.73583077861373 +2022-01-09 18:45:00,0.0,,,,,,,,,,0.7590055,0.8400834,,,,,,,,,,,,,113.22314189473379,113.22314189473379,-23.223141894733786,-23.223141894733786,260.84112183397076,-7.2948015347683395,84.01371359448936 +2022-01-09 19:00:00,0.0,,,,,,,,,,0.7670722,0.8812444,,,,,,,,,,,,,115.9556398390585,115.9556398390585,-25.955639839058513,-25.955639839058513,263.20429008168634,-7.299044209383283,87.32119077319095 +2022-01-09 19:15:00,0.0,,,,,,,,,,0.7748778,0.8736111,,,,,,,,,,,,,118.70168893665985,118.70168893665985,-28.701688936659853,-28.701688936659853,265.6037000827399,-7.3032858367369045,90.65474915722443 +2022-01-09 19:30:00,0.0,,,,,,,,,,0.7825111,0.8762611,,,,,,,,,,,,,121.45666083523169,121.45666083523169,-31.456660835231688,-31.456660835231688,268.0538086362151,-7.307526416516339,94.0113167970799 +2022-01-09 19:45:00,0.0,,,,,,,,,,0.8273,0.8817611,,,,,,,,,,,,,124.21565536663572,124.21565536663572,-34.215655366635715,-34.215655366635715,270.5710333874995,-7.311765948001266,97.38818927417638 +2022-01-09 20:00:00,0.0,,,,,,,,,,0.7757056,0.7750056,,,,,,,,,,,,,126.97336963046159,126.97336963046159,-36.97336963046159,-36.97336963046159,273.1742547304525,-7.316004430918838,100.78296849927922 +2022-01-09 20:15:00,0.0,,,,,,,,,,0.6372445,0.6124055,,,,,,,,,,,,,129.7239328162862,129.7239328162862,-39.723932816286194,-39.723932816286194,275.885443513871,-7.320241865032585,104.19350895883501 +2022-01-09 20:30:00,0.0,,,,,,,,,,0.6011944,0.5915889,,,,,,,,,,,,,132.4606960122656,132.4606960122656,-42.460696012265615,-42.460696012265615,278.7304459859041,-7.324478249567619,107.61787068415049 +2022-01-09 20:45:00,0.0,,,,,,,,,,0.7408056,0.8735278,,,,,,,,,,,,,135.175962048362,135.175962048362,-45.17596204836202,-45.17596204836202,281.73996080865174,-7.328713584171055,111.05427845727405 +2022-01-09 21:00:00,0.0,,,,,,,,,,0.8743111,1.126167,,,,,,,,,,,,,137.8606316298707,137.8606316298707,-47.8606316298707,-47.8606316298707,284.9507370236056,-7.332947868773772,114.50108269495777 +2022-01-09 21:15:00,0.0,,,,,,,,,,0.9024944,1.153844,,,,,,,,,,,,,140.50373863569067,140.50373863569067,-50.50373863569067,-50.50373863569067,288.40700821771475,-7.337181102415343,117.95672148023542 +2022-01-09 21:30:00,0.0,,,,,,,,,,0.9392444,1.252283,,,,,,,,,,,,,143.09184008711236,143.09184008711236,-53.091840087112374,-53.091840087112374,292.1621308154862,-7.341413284964801,121.41968297801954 +2022-01-09 21:45:00,0.0,,,,,,,,,,1.027428,1.58825,,,,,,,,,,,,,145.6082176399662,145.6082176399662,-55.608217639966185,-55.608217639966185,296.2802784292421,-7.345644416120194,124.88846274469817 +2022-01-09 22:00:00,0.1222684,,,,,,,,,,1.113867,2.017889,,,,,,,,,,,,,148.03185365906361,148.03185365906361,-58.031853659063614,-58.031853659063614,300.8378119405153,-7.349874495139375,128.36151359473706 +2022-01-09 22:15:00,0.1953116,,,,,,,,,,1.076989,2.221778,,,,,,,,,,,,,150.33617084159977,150.33617084159977,-60.33617084159976,-60.33617084159976,305.9234903635285,-7.3541035217022,131.83718398917551 +2022-01-09 22:30:00,0.3985631,,,,,,,,,,1.089172,2.086005,,,,,,,,,,,,,152.48760080898097,152.48760080898097,-62.48760080898096,-62.48760080898096,311.63588850969734,-7.358331495644961,135.31363369572838 +2022-01-09 22:45:00,1.03692,,,,,,,,,,1.201961,1.98915,,,,,,,,,,,,,154.4442350669991,154.4442350669991,-64.44423506699913,-64.44423506699913,318.0752273912002,-7.362558416130923,138.7887143692874 +2022-01-09 23:00:00,1.41484,,,,,,,,,,1.361289,2.035178,,,,,,,,,,,,,156.15516422285452,156.15516422285452,-66.15516422285454,-66.15516422285454,325.32569886762434,-7.366784282952722,142.25979307311607 +2022-01-09 23:15:00,1.082945,,,,,,,,,,1.361522,1.920817,,,,,,,,,,,,,157.56162814971185,157.56162814971185,-67.56162814971186,-67.56162814971186,333.42485681178584,-7.371009095844784,145.72347442976377 +2022-01-09 23:30:00,0.465252,,,,,,,,,,1.065783,1.708306,,,,,,,,,,,,,158.60151818727823,158.60151818727823,-68.60151818727823,-68.60151818727823,342.32207684576645,-7.375232854006754,149.17514564155428 +2022-01-09 23:45:00,0.08574665,,,,,,,,,,0.6295056,1.495756,,,,,,,,,,,,,159.21830413767222,159.21830413767222,-69.21830413767222,-69.21830413767222,351.8410932241101,-7.3794555572239915,152.6081948332954 +2022-01-10 00:00:00,0.0,,,,,,,,,,0.05334444,1.249272,,,,,,,,,,,,,159.37317006102947,159.37317006102947,-69.37317006102947,-69.37317006102947,1.675766729411123,-7.3836772052054584,156.01258741276195 +2022-01-10 00:15:00,0.0,,,,,,,,,,-0.4892444,0.97405,,,,,,,,,,,,,159.05565063284917,159.05565063284917,-69.05565063284918,-69.05565063284918,11.442560912370254,-7.387897797252663,159.37211176388575 +2022-01-10 00:30:00,0.0,,,,,,,,,,-0.7173667,0.7203611,,,,,,,,,,,,,158.28682371128804,158.28682371128804,-68.28682371128802,-68.28682371128802,20.775246999665,-7.392117333078204,162.6586603983842 +2022-01-10 00:45:00,0.0,,,,,,,,,,-0.7944222,0.4369389,,,,,,,,,,,,,157.11301593697675,157.11301593697675,-67.11301593697677,-67.11301593697677,29.409673797395953,-7.396335812438338,165.81938902833568 +2022-01-10 01:00:00,0.0,,,,,,,,,,-1.066556,0.1304667,,,,,,,,,,,,,155.59394254603865,155.59394254603865,-65.59394254603863,-65.59394254603863,37.215828930576095,-7.400553234514518,168.7457734683264 +2022-01-10 01:15:00,0.0,,,,,,,,,,-1.391644,-0.1779611,,,,,,,,,,,,,153.79132188025807,153.79132188025807,-63.79132188025807,-63.79132188025807,44.178491307313664,-7.404769599099382,171.19892237187676 +2022-01-10 01:30:00,0.0,,,,,,,,,,-1.754378,-0.4308056,,,,,,,,,,,,,151.76149869713225,151.76149869713225,-61.76149869713224,-61.76149869713224,50.35561924940424,-7.408984906021942,172.6845485404412 +2022-01-10 01:45:00,0.0,,,,,,,,,,-2.028239,-0.5691778,,,,,,,,,,,,,149.55227481811278,149.55227481811278,-59.55227481811279,-59.55227481811279,55.83970284939119,-7.413199154365429,172.59464478149872 +2022-01-10 02:00:00,0.0,,,,,,,,,,-2.195017,-0.7263556,,,,,,,,,,,,,147.2025445761983,147.2025445761983,-57.20254457619831,-57.20254457619831,60.73182144630209,-7.417412343969772,170.97616664544617 +2022-01-10 02:15:00,0.0,,,,,,,,,,-2.3734,-1.00645,,,,,,,,,,,,,144.7432917822283,144.7432917822283,-54.7432917822283,-54.7432917822283,65.12772605062287,-7.421624474605778,168.45547460440528 +2022-01-10 02:30:00,0.0,,,,,,,,,,-2.690961,-1.396917,,,,,,,,,,,,,142.19901329542503,142.19901329542503,-52.199013295425026,-52.199013295425026,69.11199732752635,-7.42583554544035,165.49630430048356 +2022-01-10 02:45:00,0.0,,,,,,,,,,-3.095078,-1.788644,,,,,,,,,,,,,139.58910663335263,139.58910663335263,-49.58910663335263,-49.58910663335263,72.75667966937993,-7.430045556284313,162.3183674661493 +2022-01-10 03:00:00,0.0,,,,,,,,,,-3.387289,-2.036833,,,,,,,,,,,,,136.92905113958477,136.92905113958477,-46.92905113958478,-46.92905113958478,76.12202713610333,-7.434254506857542,159.02190458803847 +2022-01-10 03:15:00,0.0,,,,,,,,,,-3.382306,-2.182945,,,,,,,,,,,,,134.23135053770855,134.23135053770855,-44.23135053770854,-44.23135053770854,79.25805131325444,-7.438462396396062,155.65617667444928 +2022-01-10 03:30:00,0.0,,,,,,,,,,-3.229517,-2.317889,,,,,,,,,,,,,131.5062608030924,131.5062608030924,-41.5062608030924,-41.5062608030924,82.20622485424678,-7.4426692247034225,152.24762018397664 +2022-01-10 03:45:00,0.0,,,,,,,,,,-3.423872,-2.480894,,,,,,,,,,,,,128.7623461946226,128.7623461946226,-38.76234619462261,-38.76234619462261,85.00105734818942,-7.446874991474033,148.81160204196257 +2022-01-10 04:00:00,0.0,,,,,,,,,,-3.889989,-2.664594,,,,,,,,,,,,,126.00690199264426,126.00690199264426,-36.00690199264426,-36.00690199264426,87.6714484951126,-7.45107969594028,145.3576995081622 +2022-01-10 04:15:00,0.0,,,,,,,,,,-4.36165,-2.860628,,,,,,,,,,,,,123.24627587073287,123.24627587073287,-33.24627587073287,-33.24627587073287,90.2418076592935,-7.455283337916626,141.8922610292823 +2022-01-10 04:30:00,0.0,,,,,,,,,,-4.661489,-3.063028,,,,,,,,,,,,,120.48611592139585,120.48611592139585,-30.486115921395847,-30.486115921395847,92.73296008730813,-7.459485917130223,138.41973975713142 +2022-01-10 04:45:00,-0.1921244,,,,,,,,,,-5.099833,-3.314428,,,,,,,,,,,,,117.73156372154008,117.73156372154008,-27.73156372154008,-27.73156372154008,95.16287400420453,-7.46368743279163,134.94343147359777 +2022-01-10 05:00:00,-0.331865,,,,,,,,,,-5.619717,-3.599161,,,,,,,,,,,,,114.98740579675044,114.98740579675044,-24.987405796750444,-24.987405796750444,97.54724245209388,-7.467887884708034,131.46590426504696 +2022-01-10 05:15:00,-0.1397406,,,,,,,,,,-5.727172,-3.761294,,,,,,,,,,,,,112.25819637622644,112.25819637622644,-22.25819637622643,-22.25819637622643,99.89994680933336,-7.4720872725883964,127.98926306742187 +2022-01-10 05:30:00,0.0,,,,,,,,,,-5.737972,-3.888778,,,,,,,,,,,,,109.54835817234678,109.54835817234678,-19.548358172346788,-19.548358172346788,102.23342685859416,-7.47628559569057,124.51531984745802 +2022-01-10 05:45:00,0.0,,,,,,,,,,-5.996439,-4.031561,,,,,,,,,,,,,106.86226585682928,106.86226585682928,-16.862265856829275,-16.862265856829275,104.55897722737109,-7.480482853763533,121.04570701864037 +2022-01-10 06:00:00,0.0,,,,,,,,,,-6.216061,-4.148594,,,,,,,,,,,,,104.2043186581701,104.2043186581701,-14.2043186581701,-14.2043186581701,106.88698295601898,-7.484679046596284,117.581958963607 +2022-01-10 06:15:00,0.0,,,,,,,,,,-6.455728,-4.293417,,,,,,,,,,,,,101.57900402348272,101.57900402348272,-11.57900402348272,-11.57900402348272,109.22710621843623,-7.488874173377553,114.12557329863886 +2022-01-10 06:30:00,0.0,,,,,,,,,,-6.314078,-4.456339,,,,,,,,,,,,,98.99095347439584,98.99095347439584,-8.990953474395845,-8.990953474395845,111.58843326733228,-7.493068233899976,110.67805854039553 +2022-01-10 06:45:00,0.01905953,,,,,,,,,,-5.833139,-4.530222,,,,,,,,,,,,,96.44499426235582,96.44499426235582,-6.444994262355815,-6.444994262355815,113.97958549122274,-7.497261227959825,107.24097617884341 +2022-01-10 07:00:00,0.692495,373.6435,383.188,379.6068,348.1088,332.4959,338.145,373.6683,373.5891,387.6758,-5.634478,-4.550517,0.01686747,0.02409638,0.009638555,0.01666667,0.01666667,0.01666667,0.01435644,0.01435644,0.014,0.0987952,0.0688679,0.01188119,93.94619657885103,93.94619657885103,-3.9461965788510236,-3.9461965788510236,116.4087992881656,-7.501453154669434,103.81597933451836 +2022-01-10 07:15:00,4.051762,479.4924,526.9511,504.0078,482.6542,502.2267,452.0696,448.0689,502.3297,530.3704,-5.548989,-4.618139,0.09669202,0.1061139,0.07542805,0.09318842,0.09318842,0.09318842,0.08502308,0.08502308,0.08466665,0.4018654,0.3562592,0.1197759,91.49991565668572,91.49991565668572,-1.4999156566857166,-1.4999156566857166,118.88397790758455,-7.505644013901474,100.40484926665737 +2022-01-10 07:30:00,12.19816,500.7485,595.6187,569.454,531.05,637.6403,487.8885,551.3661,603.3126,629.0867,-5.502817,-4.685505,0.277251,0.2772382,0.2190983,0.251098,0.2561828,0.251098,0.2006667,0.2056666,0.2071667,0.8527027,0.7950183,0.3983948,88.74308960747359,89.11183062381662,1.2569103925264018,0.888169376183378,121.41271417046266,-7.5098338054194755,97.00953462451973 +2022-01-10 07:45:00,26.1817,524.5972,650.2922,634.2466,572.7274,705.1927,549.1539,673.0425,666.1633,684.4941,-5.593117,-4.756772,0.5846059,0.5858189,0.457155,0.4627483,0.4646072,0.4627483,0.3896939,0.415102,0.4217041,1.496214,1.304939,0.9619285,86.57236111592434,86.78797831463588,3.427638884075656,3.2120216853641144,124.00228473782113,-7.514022528404894,93.63219391507472 +2022-01-10 08:00:00,53.04212,555.7368,674.6829,664.1656,670.0231,751.8633,676.0549,718.1788,712.1205,727.8563,-5.328667,-4.744622,1.1583,1.191891,0.9378976,0.8289486,0.9796063,0.8289486,0.7834743,0.8240045,0.8321551,2.648305,2.277894,1.936672,84.38610992036514,84.53477988093758,5.613890079634854,5.465220119062421,126.65961592583767,-7.518210182632174,90.2752416593699 +2022-01-10 08:15:00,63.54718,564.2527,672.733,671.2401,715.6811,766.702,729.1901,724.7379,721.0327,735.5782,-4.698855,-4.707622,1.486541,1.516714,1.198537,1.044943,1.28341,1.044943,0.9832805,1.023903,1.030451,3.262005,2.823499,2.378244,82.24609793962121,82.35906029945255,7.753902060378796,7.640939700547445,129.39121749841848,-7.52239676789759,86.94140286078304 +2022-01-10 08:30:00,68.67855,558.664,673.4453,674.3961,719.5189,766.4916,730.9635,731.9397,723.2744,736.5956,-4.078267,-4.803972,1.823754,1.789825,1.419843,1.182575,1.483636,1.182575,1.131142,1.158358,1.191709,3.803138,3.170502,2.721209,80.17686814109724,80.26805733492601,9.823131858902753,9.731942665073982,132.20308377143914,-7.526582283411699,83.6337764894342 +2022-01-10 08:45:00,128.1625,564.4017,690.8863,689.9556,741.1921,769.9095,745.8032,715.8483,719.1709,733.9261,-3.396989,-4.881983,3.346569,3.159209,2.51418,2.234178,3.07229,2.24187,2.280651,2.208538,2.269921,6.298739,5.848259,4.833434,78.1927321465175,78.26941617195283,11.807267853482498,11.730583828047175,135.1005620643969,-7.530766728898016,80.35590903955101 +2022-01-10 09:00:00,258.7075,575.6368,707.278,712.8184,749.4069,774.1849,746.9109,628.6512,667.0118,743.2983,-1.426189,-4.716417,6.72647,6.407966,5.054411,4.365659,6.02136,4.375,5.127886,4.716404,4.60916,12.33971,10.98166,9.65686,76.30475321312058,76.37116799033697,13.695246786879425,13.628832009663025,138.08818636753114,-7.534950104243762,77.11188359503623 +2022-01-10 09:15:00,302.9229,573.8368,703.8668,715.647,744.2311,775.1716,743.2355,583.4689,681.0622,759.5417,1.02055,-4.513289,8.241155,7.857469,6.180989,4.999545,6.739358,5.010389,6.364216,5.804021,5.668212,15.01594,12.65582,11.88968,74.52286273253658,74.58168769453373,15.477137267463418,15.418312305466278,141.16947936845554,-7.539132408561272,73.9064262140692 +2022-01-10 09:30:00,342.8206,567.6524,706.5677,711.3969,744.1797,776.611,742.3052,645.8844,745.6252,758.6644,2.246606,-4.417528,8.894754,8.353184,6.613462,5.857655,7.784402,5.896851,6.910802,6.542024,6.558392,16.15252,15.02483,14.1663,72.85658549116687,72.90962624838279,17.14341450883314,17.090373751617207,144.34672932634186,-7.5433136416795605,70.74503199043198 +2022-01-10 09:45:00,401.7205,566.6218,709.0213,706.376,737.2875,775.4034,734.4065,722.1605,750.6454,758.5707,4.194889,-4.218417,10.5198,9.823538,7.83357,7.437,9.634,7.4685,7.864853,7.698617,7.778592,19.08778,18.1395,17.15763,71.31527844565139,71.36381564737295,18.684721554348616,18.63618435262705,147.62074867228938,-7.547493803318503,67.63411742834072 +2022-01-10 10:00:00,304.8503,565.1589,716.7634,702.6022,731.5557,771.8873,730.3298,749.9578,746.2115,751.8746,3.4033,-4.382744,8.427048,7.813375,6.289912,5.698629,7.226018,5.705222,5.932043,5.891227,6.001167,15.29169,13.56552,13.26434,69.90816105026457,69.95314310721969,20.09183894973543,20.046856892780305,150.990629640752,-7.551672892775969,64.58120196689741 +2022-01-10 10:15:00,205.1662,570.1147,730.3998,709.402,741.4108,771.6489,747.5159,752.5392,749.5942,753.5983,-0.04825,-4.857044,5.546561,5.165438,4.174739,3.627407,4.763796,3.638055,3.904244,3.883314,3.950545,10.36973,9.197227,8.911539,68.64423667152391,68.68639312911891,21.355763328476087,21.31360687088109,154.453517795832,-7.555850909757282,61.59512132887156 +2022-01-10 10:30:00,267.5282,577.2275,735.8053,717.4165,744.2622,774.1946,744.94,759.0453,755.4219,759.7038,-0.7569278,-5.012455,7.09512,6.616628,5.354959,5.153546,6.877008,5.189871,4.779091,4.841477,4.844381,13.21098,13.10531,11.26909,67.53214852167773,67.57206034142123,22.46785147832228,22.427939658578765,158.0044250699607,-7.560027854098735,58.686277801222104 +2022-01-10 10:45:00,523.0055,586.0132,724.6243,712.8717,747.1309,782.2361,738.139,760.9473,756.7548,763.5342,3.920489,-4.552516,15.15118,14.00415,11.39604,9.851689,12.11872,9.882458,9.856675,9.880785,9.843295,27.09476,23.82287,22.43696,66.57999207538387,66.61813722357401,23.420007924616137,23.38186277642599,161.63611093224313,-7.5642037249563145,55.86692575337932 +2022-01-10 11:00:00,483.6143,609.4117,719.5889,701.0381,739.2189,782.044,742.4254,750.1189,745.6326,756.6168,7.599189,-4.255789,14.36861,13.37476,10.87075,9.502896,10.88961,9.506385,9.741972,9.687141,9.692221,25.8814,22.49598,21.87886,65.79510070308673,65.83188496924005,24.20489929691327,24.16811503075995,165.3390607564312,-7.568378522166313,53.15148505956482 +2022-01-10 11:15:00,218.3991,644.7211,735.9229,704.5905,737.4893,774.2215,750.3764,749.1885,745.6767,752.5051,3.228567,-4.7219,5.779415,5.694468,4.564531,4.584527,5.247769,4.590057,4.339406,4.324576,4.387712,11.52701,11.03415,9.972032,65.18382194529623,65.21960063658125,24.81617805470377,24.78039936341876,169.1015820049364,-7.572552245455881,50.556868166163554 +2022-01-10 11:30:00,266.6568,666.4647,747.065,716.303,744.8785,773.0018,758.1378,759.5991,755.9133,760.7598,0.2843722,-4.821116,6.212399,6.320264,5.096067,4.013705,5.199576,4.023438,4.461145,4.47483,4.46578,12.6918,9.966169,10.27739,64.75130134381315,64.78639523229955,25.248698656186843,25.213604767700446,172.91003412128134,-7.576724894079234,48.102785960581976 +2022-01-10 11:45:00,360.4281,668.822,749.3061,715.7337,743.9998,773.8685,746.8898,757.9169,753.3372,760.4857,1.362289,-4.67395,9.521443,9.423651,7.772487,6.264371,7.99118,6.307707,5.93766,5.919109,5.932284,18.70288,15.29695,13.52602,64.5012918796945,64.53599953176551,25.49870812030549,25.46400046823449,176.74919480123515,-7.580896467781713,45.81197247913365 +2022-01-10 12:00:00,446.2309,662.9376,738.8746,704.1847,738.6848,778.4212,737.2462,750.5219,744.7895,753.1061,5.042383,-4.289011,12.24916,11.98311,9.947767,9.238563,10.81133,9.265587,8.15245,8.21394,8.20125,23.68973,21.73634,18.41682,64.43600668158584,64.47061460057947,25.56399331841416,25.52938539942054,180.6027443926489,-7.585066966392333,43.71023728862112 +2022-01-10 12:15:00,516.1099,669.3672,734.2482,703.2742,738.7833,780.8237,740.0018,752.1756,745.9066,754.1955,6.931684,-3.955055,13.78988,13.68329,11.29914,9.567141,10.90115,9.560463,9.907301,9.943107,9.92619,27.06325,22.29939,22.15641,64.55602868059242,64.59082030790553,25.443971319407577,25.409179692094465,184.4538383625883,-7.5892363891071,41.82621237796997 +2022-01-10 12:30:00,666.6237,692.5526,744.389,710.7781,738.4169,773.7551,733.1065,747.7472,745.4357,751.9326,8.079233,-3.915461,16.60151,16.89801,14.47535,11.92451,12.7396,11.92645,12.83353,12.76429,12.68095,34.13988,26.98036,28.08076,64.86028636371105,64.89555079537705,25.13971363628894,25.104449204622956,188.28572487938953,-7.593404735707736,40.19063135841166 +2022-01-10 12:45:00,836.6114,721.3994,745.2263,719.4714,730.1321,767.3403,710.3065,736.2268,732.058,745.0303,11.36502,-3.718539,17.86069,18.96199,16.3888,15.5244,15.63221,15.52664,16.23905,16.05054,15.94068,38.32774,33.9753,35.0388,65.34609813644533,65.3821393667213,24.65390186355466,24.617860633278696,192.082353136331,-7.597572005935945,38.834987562320585 +2022-01-10 13:00:00,849.2806,733.035,738.7607,724.2203,725.6837,760.9514,699.2418,729.4833,722.3348,739.965,12.64396,-3.686628,16.80589,18.70629,15.71731,16.0567,16.05417,16.05742,16.62947,16.15693,16.39306,37.07943,34.65187,35.41862,66.0092805996835,66.04642818765936,23.990719400316497,23.953571812340645,195.82892395245776,-7.601738199071406,37.789494353020835 +2022-01-10 13:15:00,849.4475,725.7111,731.1484,716.9481,716.3771,753.5654,700.7362,721.3058,714.2488,732.3948,15.15191,-3.299989,17.03299,19.22781,15.79632,16.60225,16.5986,16.59286,16.66788,16.16355,16.56048,37.45869,35.59005,35.22235,66.8443104280694,66.88293272262052,23.155689571930594,23.117067277379483,199.5123429094028,-7.605903314855823,37.08045253897895 +2022-01-10 13:30:00,689.2693,718.4086,725.7772,702.3301,714.022,759.2828,711.5308,719.4944,714.8613,730.5315,13.95149,-3.339422,14.55148,16.70634,13.53148,14.35143,14.37014,14.35429,13.27829,13.07974,13.36078,32.56181,30.67223,28.74486,67.84452421784125,67.88504573737204,22.155475782158746,22.11495426262796,203.12154605819902,-7.610067353074555,36.72739307418852 +2022-01-10 13:45:00,401.7318,702.1556,731.951,700.0741,733.3113,770.0417,737.8162,724.3491,724.4838,733.9866,7.797722,-3.889472,9.866335,11.21815,9.020405,8.778951,9.204403,8.796432,7.653159,7.708924,7.86766,22.17096,19.24159,17.18139,69.00233866961796,69.04526406200364,20.99766133038205,20.954735937996364,206.64768953954578,-7.6142303129709035,36.74060166468521 +2022-01-10 14:00:00,248.8409,698.4076,743.2861,711.6652,749.5884,773.215,760.0712,740.2089,740.6581,747.5806,3.417867,-4.0823,6.502151,7.27232,5.719889,5.058499,5.890181,5.12056,4.640067,4.78688,4.793142,14.49127,11.95124,10.58927,70.30947360751601,70.35542210059765,19.690526392483992,19.644577899402343,210.08420996631492,-7.618392194301123,37.119691308816684 +2022-01-10 14:15:00,209.2755,707.4924,747.0358,718.8684,748.7371,772.0795,764.0839,754.8712,755.1046,758.4553,1.027011,-4.301672,4.810445,5.687728,4.39938,3.804986,4.504282,3.861315,3.953496,4.122661,4.035478,11.34636,9.247374,9.237467,71.7571598163029,71.8069167909132,18.24284018369709,18.19308320908679,213.4267703471065,-7.6225529968578485,37.85365793718937 +2022-01-10 14:30:00,138.7578,698.2463,744.8886,732.4003,745.1989,768.6109,762.6174,754.3724,754.1307,756.5983,-1.688361,-4.709672,3.04621,3.675613,2.749433,2.341727,2.801557,2.362839,2.716746,2.795051,2.790869,7.419622,5.805374,6.357767,73.3363155513268,73.39091307379864,16.663684448673198,16.609086926201357,216.6731182709422,-7.626712719888019,38.92240106935712 +2022-01-10 14:45:00,112.0935,691.5095,743.9083,732.7532,745.774,768.8999,764.309,753.9995,755.5836,758.1557,-3.195194,-4.9793,2.688415,3.05655,2.238364,2.224756,2.775071,2.245744,2.099841,2.15922,2.220793,6.338306,5.59828,5.046032,75.0376745195948,75.09852316038399,14.962325480405202,14.90147683961601,219.8228855010027,-7.630871363126062,40.29924948662988 +2022-01-10 15:00:00,110.0491,685.1428,735.4326,711.9594,739.3011,769.0768,758.5551,741.1541,744.9959,750.3796,-2.988489,-5.111539,2.675436,3.003352,2.220707,2.273263,2.881833,2.278559,1.955091,2.03583,2.090022,6.220262,5.783036,4.720706,76.85183775704007,76.92095456952026,13.148162242959927,13.07904543047974,222.87735300738137,-7.635028926400992,41.953820543139415 +2022-01-10 15:15:00,84.4995,674.4224,718.4418,698.6912,678.9402,731.5445,732.8912,725.6633,727.6315,735.3464,-3.576683,-5.452211,1.760489,2.096101,1.572635,1.658753,1.903606,1.677948,1.343221,1.38717,1.43469,4.409246,4.109866,3.23938,78.76919653033949,78.84962655731103,11.230803469660517,11.150373442688977,225.83920581822184,-7.639185408879712,43.854618663271985 +2022-01-10 15:30:00,85.69917,711.5869,733.3431,724.6961,686.6863,639.5959,740.7234,742.1519,741.5449,746.6177,-4.267167,-5.605467,1.927738,2.810674,2.251888,2.114227,2.131449,2.198454,1.948095,2.010834,2.116309,5.6119,4.68913,4.650952,80.77959378290673,80.87625722138314,9.220406217093267,9.123742778616856,228.7122967355963,-7.643340810394875,45.9710266074436 +2022-01-10 15:45:00,71.49798,699.9721,719.3654,703.4579,701.0142,657.98,730.2067,727.6805,725.3405,737.1008,-4.142139,-5.439145,1.663399,2.496457,2.00277,1.840412,1.866908,1.919131,1.714832,1.785512,1.853845,5.001792,4.179597,4.104419,82.8713345992585,82.99292269704881,7.128665400741501,7.007077302951187,231.5014291366961,-7.647495130699099,48.27459920554515 +2022-01-10 16:00:00,28.72262,629.6677,665.4918,630.7926,604.757,706.451,637.9127,665.6058,665.8738,678.657,-4.668067,-5.321567,0.5404486,0.7309195,0.5440074,0.521444,0.5307181,0.5307181,0.4813682,0.497882,0.5002258,1.728717,1.482454,1.157083,85.02822754939574,85.19209274685329,4.971772450604263,4.807907253146711,234.21216815695882,-7.651648369072063,50.73974444385225 +2022-01-10 16:15:00,8.039383,559.3397,600.9518,554.54,548.33,638.2186,547.7213,610.0087,605.6829,617.5589,-6.170833,-5.369822,0.2028889,0.2523111,0.1717333,0.2073512,0.2073512,0.2073512,0.1756082,0.1756082,0.1830153,0.7754,0.6991072,0.3726852,87.21931115034077,87.46664759078669,2.780688849659224,2.5333524092133035,236.85068547602208,-7.655800525262748,53.34395059103848 +2022-01-10 16:30:00,0.6811908,535.4473,557.5711,531.3703,545.4883,572.1213,529.8104,511.0963,505.4154,513.0841,-7.765211,-5.613572,0.04888888,0.0611111,0.03333334,0.056875,0.056875,0.056875,0.04240506,0.04240506,0.04746836,0.235,0.21625,0.06835445,89.35947568375482,89.80987800942727,0.6405243162451718,0.19012199057273274,239.4236368891356,-7.6599515990237705,56.06771768464733 +2022-01-10 16:45:00,0.03334783,561.5936,561.4745,561.715,548.3443,548.4339,547.5182,438.0925,438.5916,436.7113,-8.945694,-5.943511,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.215472839311,92.215472839311,-2.2154728393109995,-2.2154728393109995,241.93807348789278,-7.664101589620259,58.89432343001452 +2022-01-10 17:00:00,-0.08735405,,,,,,,,,,-9.4763,-6.182117,,,,,,,,,,,,,94.67749769150889,94.67749769150889,-4.677497691508896,-4.677497691508896,244.40138607552143,-7.6682504968266585,61.80951533176371 +2022-01-10 17:15:00,-0.1048252,,,,,,,,,,-9.784122,-6.464261,,,,,,,,,,,,,97.19036524007345,97.19036524007345,-7.190365240073445,-7.190365240073445,246.82127911844623,-7.672398320413777,64.80118376057713 +2022-01-10 17:30:00,-1.440561,,,,,,,,,,-10.57104,-7.003133,,,,,,,,,,,,,99.74879960904101,99.74879960904101,-9.748799609041015,-9.748799609041015,249.2057738808591,-7.676545059610362,67.85904905089313 +2022-01-10 17:45:00,-2.712758,,,,,,,,,,-11.73181,-7.986522,,,,,,,,,,,,,102.34779701609074,102.34779701609074,-12.347797016090745,-12.347797016090745,251.56324082488544,-7.680690714281809,70.97437960641993 +2022-01-10 18:00:00,-0.195458,,,,,,,,,,-11.89225,-8.36065,,,,,,,,,,,,,104.98258119404761,104.98258119404761,-14.982581194047615,-14.982581194047615,253.9024593813728,-7.684835284067958,74.13974428293308 +2022-01-10 18:15:00,1.497619,,,,,,,,,,-10.66256,-7.672122,,,,,,,,,,,,,107.64855459060838,107.64855459060838,-17.648554590608384,-17.648554590608384,256.2327072941455,-7.688978768306697,77.34880028143749 +2022-01-10 18:30:00,0.9736995,,,,,,,,,,-9.324455,-7.27885,,,,,,,,,,,,,110.34124595526882,110.34124595526882,-20.34124595526882,-20.34124595526882,258.5638830684694,-7.693121166768833,80.59611514585634 +2022-01-10 18:45:00,0.8054042,,,,,,,,,,-8.122817,-7.230422,,,,,,,,,,,,,113.0562511406697,113.0562511406697,-23.05625114066971,-23.05625114066971,260.9066639733185,-7.697262479225174,83.87701639335744 +2022-01-10 19:00:00,0.2351132,,,,,,,,,,-7.357272,-7.237372,,,,,,,,,,,,,,,,,,, +2022-01-10 19:15:00,-2.423988,,,,,,,,,,-7.488067,-7.472116,,,,,,,,,,,,,,,,,,, +2022-01-10 19:30:00,-5.39413,,,,,,,,,,-8.607639,-8.047572,,,,,,,,,,,,,,,,,,, +2022-01-10 19:45:00,-6.316714,,,,,,,,,,-10.22274,-9.069683,,,,,,,,,,,,,,,,,,, +2022-01-10 20:00:00,-5.722897,,,,,,,,,,-11.68762,-10.1064,,,,,,,,,,,,,,,,,,, +2022-01-10 20:15:00,-3.769511,,,,,,,,,,-12.80632,-10.84562,,,,,,,,,,,,,,,,,,, +2022-01-10 20:30:00,-3.452007,,,,,,,,,,-13.68255,-11.46631,,,,,,,,,,,,,,,,,,, +2022-01-10 20:45:00,-2.206551,,,,,,,,,,-13.97515,-11.35991,,,,,,,,,,,,,,,,,,, +2022-01-10 21:00:00,0.2080746,,,,,,,,,,-13.39726,-10.4194,,,,,,,,,,,,,,,,,,, +2022-01-10 21:15:00,0.2080833,,,,,,,,,,-12.32311,-9.299583,,,,,,,,,,,,,,,,,,, +2022-01-10 21:30:00,-1.345389,,,,,,,,,,-11.53553,-8.764911,,,,,,,,,,,,,,,,,,, +2022-01-10 21:45:00,-1.42481,,,,,,,,,,-11.19843,-8.651484,,,,,,,,,,,,,,,,,,, +2022-01-10 22:00:00,-0.2970335,,,,,,,,,,-11.02538,-8.529866,,,,,,,,,,,,,,,,,,, +2022-01-10 22:15:00,-0.04924034,,,,,,,,,,-11.01999,-8.61165,,,,,,,,,,,,,,,,,,, +2022-01-10 22:30:00,0.02700322,,,,,,,,,,-10.84902,-8.547039,,,,,,,,,,,,,,,,,,, +2022-01-10 22:45:00,0.06671461,,,,,,,,,,-10.64079,-8.525689,,,,,,,,,,,,,,,,,,, +2022-01-10 23:00:00,0.0603609,,,,,,,,,,-10.38599,-8.548889,,,,,,,,,,,,,,,,,,, +2022-01-10 23:15:00,-0.01747335,,,,,,,,,,-10.26169,-8.659889,,,,,,,,,,,,,,,,,,, +2022-01-10 23:30:00,-0.01747335,,,,,,,,,,-10.3576,-8.866811,,,,,,,,,,,,,,,,,,, +2022-01-10 23:45:00,0.0,,,,,,,,,,-10.43267,-9.007706,,,,,,,,,,,,,,,,,,, diff --git a/pvanalytics/data/snow_mask.csv b/pvanalytics/data/snow_mask.csv new file mode 100644 index 000000000..b0a841133 --- /dev/null +++ b/pvanalytics/data/snow_mask.csv @@ -0,0 +1,361 @@ +,0 +0,0 +1,0 +2,0 +3,0 +4,0 +5,0 +6,0 +7,0 +8,0 +9,0 +10,0 +11,0 +12,0 +13,0 +14,0 +15,0 +16,0 +17,0 +18,0 +19,0 +20,0 +21,0 +22,0 +23,0 +24,0 +25,0 +26,0 +27,0 +28,0 +29,0 +30,0 +31,0 +32,0 +33,0 +34,0 +35,0 +36,0 +37,0 +38,0 +39,0 +40,0 +41,0 +42,0 +43,0 +44,0 +45,0 +46,0 +47,0 +48,0 +49,0 +50,1 +51,1 +52,2 +53,4 +54,5 +55,6 +56,7 +57,8 +58,8 +59,8 +60,7 +61,6 +62,5 +63,4 +64,2 +65,1 +66,1 +67,0 +68,0 +69,0 +70,0 +71,0 +72,0 +73,0 +74,0 +75,0 +76,0 +77,0 +78,0 +79,0 +80,0 +81,0 +82,0 +83,0 +84,0 +85,0 +86,0 +87,0 +88,0 +89,0 +90,0 +91,0 +92,0 +93,0 +94,0 +95,0 +96,0 +97,0 +98,0 +99,0 +100,0 +101,0 +102,0 +103,0 +104,0 +105,0 +106,0 +107,0 +108,0 +109,0 +110,0 +111,0 +112,0 +113,0 +114,0 +115,0 +116,0 +117,0 +118,0 +119,0 +120,0 +121,1 +122,1 +123,1 +124,2 +125,2 +126,3 +127,3 +128,4 +129,5 +130,5 +131,6 +132,7 +133,8 +134,8 +135,9 +136,10 +137,10 +138,11 +139,12 +140,12 +141,13 +142,13 +143,14 +144,15 +145,15 +146,15 +147,16 +148,16 +149,17 +150,17 +151,18 +152,18 +153,18 +154,19 +155,19 +156,19 +157,20 +158,20 +159,20 +160,21 +161,21 +162,21 +163,21 +164,22 +165,22 +166,22 +167,22 +168,22 +169,22 +170,23 +171,23 +172,23 +173,23 +174,23 +175,23 +176,23 +177,23 +178,23 +179,23 +180,23 +181,23 +182,23 +183,23 +184,23 +185,23 +186,23 +187,23 +188,23 +189,23 +190,22 +191,22 +192,22 +193,22 +194,22 +195,22 +196,21 +197,21 +198,21 +199,21 +200,20 +201,20 +202,20 +203,19 +204,19 +205,19 +206,18 +207,18 +208,18 +209,17 +210,17 +211,16 +212,16 +213,16 +214,15 +215,15 +216,14 +217,14 +218,14 +219,13 +220,13 +221,13 +222,13 +223,12 +224,12 +225,12 +226,12 +227,12 +228,12 +229,12 +230,12 +231,12 +232,12 +233,13 +234,13 +235,13 +236,13 +237,13 +238,13 +239,12 +240,12 +241,12 +242,12 +243,11 +244,11 +245,11 +246,10 +247,10 +248,10 +249,11 +250,11 +251,11 +252,12 +253,12 +254,13 +255,14 +256,15 +257,16 +258,17 +259,18 +260,18 +261,19 +262,20 +263,20 +264,21 +265,21 +266,21 +267,20 +268,20 +269,20 +270,19 +271,18 +272,17 +273,17 +274,16 +275,15 +276,14 +277,14 +278,13 +279,13 +280,13 +281,14 +282,16 +283,17 +284,20 +285,23 +286,26 +287,29 +288,31 +289,33 +290,33 +291,33 +292,31 +293,29 +294,26 +295,23 +296,21 +297,20 +298,19 +299,19 +300,19 +301,19 +302,18 +303,17 +304,15 +305,12 +306,9 +307,7 +308,4 +309,3 +310,1 +311,1 +312,0 +313,0 +314,0 +315,0 +316,0 +317,0 +318,0 +319,0 +320,0 +321,0 +322,0 +323,0 +324,0 +325,0 +326,0 +327,0 +328,0 +329,0 +330,0 +331,0 +332,0 +333,0 +334,0 +335,0 +336,0 +337,0 +338,0 +339,0 +340,0 +341,0 +342,0 +343,0 +344,0 +345,0 +346,0 +347,0 +348,0 +349,0 +350,0 +351,0 +352,0 +353,0 +354,0 +355,0 +356,0 +357,0 +358,0 +359,0 diff --git a/pvanalytics/data/snow_snowfall.csv b/pvanalytics/data/snow_snowfall.csv new file mode 100644 index 000000000..48aec7559 --- /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 From c0d47b3aba5867f73427fdaba87a44a095b65113 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 8 Apr 2024 10:44:36 -0600 Subject: [PATCH 04/72] add README --- docs/examples/snow-detection/README.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docs/examples/snow-detection/README.rst diff --git a/docs/examples/snow-detection/README.rst b/docs/examples/snow-detection/README.rst new file mode 100644 index 000000000..43f932016 --- /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 From eae4a844215c1793965389a89dccc62c835d7b3e Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 8 Apr 2024 10:52:23 -0600 Subject: [PATCH 05/72] formatting --- docs/examples/snow-detection/snow-mode.py | 54 +++++++++++------------ 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 0043d3a9e..3c0d4f3d8 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -12,7 +12,7 @@ both operating voltage and current are reduced. Mode 2: The system is online and covered with opaque snow, such that operating voltage is reduced by the snow, but transmission - is consistent with snow-free conditions. #TODO seems contradictory + is consistent with snow-free conditions. # TODO seems contradictory Mode 3: The system is online and covered with light-transmissive snow, such that current is decreased but voltage is consistent with all system substrings being online. @@ -68,9 +68,9 @@ cec_inverter_db = pvlib.pvsystem.retrieve_sam('CECInverter') my_inverter = cec_inverter_db[config['inverter']] -max_ac_power = my_inverter['Paco']*0.001 # originally in [W], converted to [kW] -mppt_low_voltage = my_inverter['Mppt_low'] # [V] -mppt_high_voltage = my_inverter['Mppt_high'] # [V] +max_ac_power = my_inverter['Paco']*0.001 # originally in W, convert 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") @@ -376,7 +376,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 1. Model effective irradiance based on measured current using the SAPM 2. Calculate transmission 3. Uses transmission to model voltage with the SAPM. - #TODO How is this voltage different than measured (snow-affected voltage)? + # TODO How is this voltage different than measured (snow-affected voltage)? 4. Determine the snow mode for each point. Parameters @@ -453,16 +453,16 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # where=((voltage > 0) & (modeled_vmp>0))) # vmp_ratio[modeled_vmp==0] = 0 - #TODO lets vectorize the function itself + # TODO lets vectorize the function itself categorize_v = np.vectorize(categorize) mode = categorize_v(vmp_ratio, T, voltage, config['min_dcv'], config['threshold_vratio'], config['threshold_transmission']) - my_dict = {'transmission' : T, - 'modeled_vmp' : modeled_vmp, - 'vmp_ratio' : vmp_ratio, - 'mode' : mode} + my_dict = {'transmission': T, + 'modeled_vmp': modeled_vmp, + 'vmp_ratio': vmp_ratio, + 'mode': mode} return my_dict @@ -495,12 +495,12 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, threshold_vratio = config['threshold_vratio'] threshold_transmission = config['threshold_transmission'] -my_config = {'threshold_vratio' : threshold_vratio, - 'threshold_transmission' : threshold_transmission, - 'min_dcv' : mppt_low_voltage, - 'max_dcv' : mppt_high_voltage, - 'num_str_per_cb' : int(config['num_str_per_cb'][f'{inv_cb}']), - 'num_mods_per_str' : int(config['num_mods_per_str'][f'{inv_cb}'])} +my_config = {'threshold_vratio': threshold_vratio, + 'threshold_transmission': threshold_transmission, + 'min_dcv': mppt_low_voltage, + 'max_dcv': mppt_high_voltage, + 'num_str_per_cb': int(config['num_str_per_cb'][f'{inv_cb}']), + 'num_mods_per_str': int(config['num_mods_per_str'][f'{inv_cb}'])} out = wrapper(data[v], data[i], data['Cell Temp [C]'], @@ -523,12 +523,12 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, config['num_str_per_cb'][f'INV{inv_num} CB{cb_num}']) my_config = { - 'threshold_vratio' : threshold_vratio, - 'threshold_transmission' : threshold_transmission, - 'min_dcv' : mppt_low_voltage, - 'max_dcv' : mppt_high_voltage, - 'num_str_per_cb' : int(config['num_str_per_cb'][f'{inv_cb}']), - 'num_mods_per_str' : int(config['num_mods_per_str'][f'{inv_cb}'])} + 'threshold_vratio': threshold_vratio, + 'threshold_transmission': threshold_transmission, + 'min_dcv': mppt_low_voltage, + 'max_dcv': mppt_high_voltage, + 'num_str_per_cb': int(config['num_str_per_cb'][f'{inv_cb}']), + 'num_mods_per_str': int(config['num_mods_per_str'][f'{inv_cb}'])} out = wrapper(data[v_col], data[i_col], data['Cell Temp [C]'], @@ -605,7 +605,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, p = modeled_power_cols[i] # Color intervals by mode -cmap = {0 : 'r', +cmap = {0: 'r', 1: 'b', 2: 'yellow', 3: 'cyan', @@ -617,7 +617,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, temp = data[~data[m].isna()] # Plot each day individually so we are not exaggerating losses -days_mapped = temp.index.map(lambda x : x.date()) +days_mapped = temp.index.map(lambda x: x.date()) days = np.unique(days_mapped) grouped = temp.groupby(days_mapped) @@ -646,7 +646,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, color=cmap[temp_grouped.at[temp_grouped.index[end], m]], alpha=0.05) -# # Add different colored intervals to legend +# Add different colored intervals to legend handles, labels = ax.get_legend_handles_labels() modeled_line = Line2D([0], [0], label='Modeled', color='k', ls='--') @@ -679,8 +679,8 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # four modes that are associated with the presence of snow. # Daily snowfall is measured at 7:00 am of each day -snow = pd.read_csv(snowfall_file, index_col='DATE') # originally in [mm] -snow['SNOW'] *= 1/(10*2.54) # convert to [in] +snow = pd.read_csv(snowfall_file, index_col='DATE') # originally in [mm] +snow['SNOW'] *= 1/(10*2.54) # convert to [in] loss_cols = [c for c in data.columns if "Loss" in c] mode_cols = [c for c in data.columns if "mode" in c and "modeled" not in c] From 83592a2c5baf8429b8275252e4bad74fe2569855 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 8 Apr 2024 12:46:09 -0600 Subject: [PATCH 06/72] fix import --- docs/examples/snow-detection/snow-mode.py | 31 ++++++++++------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 3c0d4f3d8..eda4e5ff1 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -50,8 +50,7 @@ import pvanalytics # Functions needed for the analysis procedure from pvanalytics.features import clipping -from pvanalytics.snow import (get_irradiance_sapm, get_irradiance_imp, - get_transmission, categorize, apply_mask) +from pvanalytics.features import snow # %% Load in system configuration parameters (dict) pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent @@ -215,7 +214,7 @@ horizon_mask = pd.read_csv(mask_file, index_col='Unnamed: 0').squeeze("columns") -data.loc[:, 'Horizon Mask'] = data.apply(lambda x: apply_mask( +data.loc[:, 'Horizon Mask'] = data.apply(lambda x: snow.apply_mask( horizon_mask, x['azimuth'], x['elevation']), axis=1) # Exclude data collected while the sun is below the horizon @@ -278,17 +277,16 @@ imp = data[dc_current_cols[j]] / i_scaling_factor # Approach 1 using SAPM -modeled_e_e1 = get_irradiance_sapm(data['Cell Temp [C]'], - imp, - sapm_coeffs['Impo'], sapm_coeffs['C0'], - sapm_coeffs['C1'], sapm_coeffs['Aimp']) +modeled_e_e1 = snow.get_irradiance_sapm( + data['Cell Temp [C]'], imp, sapm_coeffs['Impo'], sapm_coeffs['C0'], + sapm_coeffs['C1'], sapm_coeffs['Aimp']) -T1 = get_transmission(data['POA [W/m²]'], modeled_e_e1, imp) +T1 = snow.get_transmission(data['POA [W/m²]'], modeled_e_e1, imp) # Approach 2 using a linear irradiance-Imp model -modeled_e_e2 = get_irradiance_imp(imp, sapm_coeffs['Impo']) +modeled_e_e2 = snow.get_irradiance_imp(imp, sapm_coeffs['Impo']) -T2 = get_transmission(data['POA [W/m²]'], modeled_e_e2, imp) +T2 = snow.get_transmission(data['POA [W/m²]'], modeled_e_e2, imp) # %% # Plot transmission calculated using two different approaches @@ -416,13 +414,12 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ''' # Calculate transmission - modeled_e_e = get_irradiance_sapm(temp_cell, - current/config['num_str_per_cb'], - coeffs['Impo'], coeffs['C0'], - coeffs['C1'], coeffs['Aimp']) + modeled_e_e = snow.get_irradiance_sapm( + temp_cell, current/config['num_str_per_cb'], coeffs['Impo'], + coeffs['C0'], coeffs['C1'], coeffs['Aimp']) - T = get_transmission(effective_irradiance, modeled_e_e, - current/config['num_str_per_cb']) + T = snow.get_transmission(effective_irradiance, modeled_e_e, + current/config['num_str_per_cb']) name_T = inv_cb + ' Transmission' data[name_T] = T @@ -454,7 +451,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # vmp_ratio[modeled_vmp==0] = 0 # TODO lets vectorize the function itself - categorize_v = np.vectorize(categorize) + categorize_v = np.vectorize(snow.categorize) mode = categorize_v(vmp_ratio, T, voltage, config['min_dcv'], config['threshold_vratio'], From ac12f3674eef50bd2dc3bcd648248ff456721853 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 8 Apr 2024 12:55:48 -0600 Subject: [PATCH 07/72] fix file name --- docs/examples/snow-detection/snow-mode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index eda4e5ff1..06dfd6729 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -57,7 +57,7 @@ data_file = pvanalytics_dir / 'data' / 'snow_data.csv' snowfall_file = pvanalytics_dir / 'data' / 'snow_snowfall.csv' mask_file = pvanalytics_dir / 'data' / 'snow_mask.csv' -config_file = pvanalytics_dir / 'data' / 'snowconfig.json' +config_file = pvanalytics_dir / 'data' / 'snow_config.json' with open(config_file) as json_data: config = json.load(json_data) From 556fefc5f7dcdc41083d3f98926e705088fda48c Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 8 Apr 2024 15:00:30 -0600 Subject: [PATCH 08/72] fix up horizon code, add test --- docs/examples/snow-detection/snow-mode.py | 7 +++---- .../data/{snow_mask.csv => snow_horizon.csv} | 2 +- pvanalytics/tests/features/test_snow.py | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 5 deletions(-) rename pvanalytics/data/{snow_mask.csv => snow_horizon.csv} (99%) create mode 100644 pvanalytics/tests/features/test_snow.py diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 06dfd6729..19d9f3126 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -211,11 +211,10 @@ ''' -horizon_mask = pd.read_csv(mask_file, - index_col='Unnamed: 0').squeeze("columns") +horizon = pd.read_csv(mask_file, index_col='Az').squeeze("columns") -data.loc[:, 'Horizon Mask'] = data.apply(lambda x: snow.apply_mask( - horizon_mask, x['azimuth'], x['elevation']), axis=1) +data['Horizon Mask'] = snow.get_horizon_mask(horizon, data['azimuth'], + data['elevation']) # Exclude data collected while the sun is below the horizon data = data[~data['Horizon Mask']] diff --git a/pvanalytics/data/snow_mask.csv b/pvanalytics/data/snow_horizon.csv similarity index 99% rename from pvanalytics/data/snow_mask.csv rename to pvanalytics/data/snow_horizon.csv index b0a841133..2e2b4316a 100644 --- a/pvanalytics/data/snow_mask.csv +++ b/pvanalytics/data/snow_horizon.csv @@ -1,4 +1,4 @@ -,0 +Az,Elev 0,0 1,0 2,0 diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py new file mode 100644 index 000000000..949ba2314 --- /dev/null +++ b/pvanalytics/tests/features/test_snow.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created on Mon Apr 8 14:39:12 2024 + +@author: cliff +""" +import numpy as np +import pandas as pd +from numpy.testing import assert_array_equal +from pvanalytics.features import snow + + +def test_horizon_mask(): + horizon = pd.Series(index=range(0, 360), data=0) + horizon[5:10] = 10 + result = snow.get_horizon_mask(horizon, azimuth=np.array([4, 5, 7]), + elevation=np.array([-1, 11, np.nan])) + expected = np.array([False, True, False]) + assert_array_equal(result, expected) From 025b74b13149ec30e412ef636dcbbb1661994997 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 8 Apr 2024 15:14:14 -0600 Subject: [PATCH 09/72] fix horizon file name --- docs/examples/snow-detection/snow-mode.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 19d9f3126..ae742352e 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -56,7 +56,7 @@ pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent data_file = pvanalytics_dir / 'data' / 'snow_data.csv' snowfall_file = pvanalytics_dir / 'data' / 'snow_snowfall.csv' -mask_file = pvanalytics_dir / 'data' / 'snow_mask.csv' +horizon_file = pvanalytics_dir / 'data' / 'snow_horizon.csv' config_file = pvanalytics_dir / 'data' / 'snow_config.json' with open(config_file) as json_data: @@ -211,7 +211,7 @@ ''' -horizon = pd.read_csv(mask_file, index_col='Az').squeeze("columns") +horizon = pd.read_csv(horizon_file, index_col='Az').squeeze("columns") data['Horizon Mask'] = snow.get_horizon_mask(horizon, data['azimuth'], data['elevation']) From acf0b4e650728d48901070ee59df1e520c69b8c1 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 8 Apr 2024 15:16:28 -0600 Subject: [PATCH 10/72] update mask function --- pvanalytics/features/snow.py | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 5dea4a91c..486dd1f64 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -1,35 +1,31 @@ import numpy as np -def apply_mask(mask, azimuth, elevation): + +def get_horizon_mask(horizon, azimuth, elevation): """ - Used to determine whether a given (azimuth, elevation) pair is above or + Determines if a given (azimuth, elevation) pair is above or below a horizon profile Parameters ---------- - mask : pd.Series - Series with int index of 0 - 360 (represents azimuth) and float values - (represents elevation [deg] of horizon profile) + horizon : pd.Series + Series with int index of 0 - 359 (represents azimuth) and float values + (represents elevation [deg] of horizon profile). azimuth : numeric - Solar azimuth angle [deg] + Solar azimuth angle. [deg] elevation : numeric - Solar elevation angle [deg] + Solar elevation angle. [deg] Returns ------- out : bool or NaN """ - if np.isnan(azimuth) == False: - if elevation > mask[int(np.floor(azimuth))]: - out = False - else: - out = True - else: - out = np.nan - + yp = np.interp(azimuth, horizon.index, horizon.values) + out = elevation >= yp # TODO or strictly > return out + def get_irradiance_sapm(temp_cell, i_mp, imp0, c0, c1, alpha_imp, irrad_ref=1000, temp_ref=25): """ @@ -104,7 +100,7 @@ def get_irradiance_imp(i_mp, imp0, irrad_ref=1000): def get_transmission(measured_e_e, modeled_e_e, i_mp): - + """ Estimate transmittance as the ratio of modeled effective irradiance to measured irradiance. @@ -136,7 +132,7 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, 2023, pp. 1-5. :doi:`10.1109/PVSC48320.2023.10360065` """ - + T = modeled_e_e/measured_e_e T[T.isna()] = np.nan T[i_mp == 0] = 0 @@ -148,7 +144,7 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): def categorize(vmp_ratio, transmission, voltage, min_dcv, threshold_vratio, threshold_transmission): - + """ Categorizes electrical behavior into a snow-related mode. @@ -197,7 +193,7 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, 2023, pp. 1-5, :doi:`10.1109/PVSC48320.2023.10360065`. """ - + if np.isnan(vmp_ratio) or np.isnan(transmission): return np.nan elif voltage < min_dcv: @@ -212,4 +208,4 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, return 3 elif transmission > threshold_transmission: return 4 - return np.nan \ No newline at end of file + return np.nan From 0b8720d2edacbb3140c2627dc887074fad806fa5 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 8 Apr 2024 15:23:29 -0600 Subject: [PATCH 11/72] linting --- docs/examples/snow-detection/snow-mode.py | 79 ++++++++++++----------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index ae742352e..9cf6f9e80 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -34,7 +34,7 @@ """ -#%% Import packages +# %% Import packages import pathlib import json @@ -62,7 +62,7 @@ with open(config_file) as json_data: config = json.load(json_data) -#%% Retrieve and print system inverter specs and electrical configuration +# %% Retrieve and print system inverter specs and electrical configuration cec_inverter_db = pvlib.pvsystem.retrieve_sam('CECInverter') my_inverter = cec_inverter_db[config['inverter']] @@ -80,7 +80,7 @@ f" parallel at each combiner") -#%% +# %% # Read in 15-minute sampled DC voltage and current time series data, AC power, # module temperature collected by a BOM sensor and plane-of-array # irradiance data collected by a heated pyranometer. This sample is provided @@ -88,7 +88,7 @@ # Load in utility data data = pd.read_csv(data_file, index_col='Timestamp') -data.set_index(pd.DatetimeIndex(data.index,ambiguous='infer'), inplace=True) +data.set_index(pd.DatetimeIndex(data.index, ambiguous='infer'), inplace=True) data = data[~data.index.duplicated()] # Explore utility datatset @@ -352,7 +352,7 @@ ax.scatter(modeled_vmp_sapm.index, modeled_vmp_sapm, s=1, c='b', label='SAPM') ax.scatter(modeled_vmp_sde.index, modeled_vmp_sde, s=1, c='g', label='SDE') -ax.scatter(data.index, data[inv_cb + ' Voltage [V]'], s=1, c = 'r', +ax.scatter(data.index, data[inv_cb + ' Voltage [V]'], s=1, c='r', label='Measured') ax.legend(fontsize='xx-large') ax.set_ylabel('Voltage [V]', fontsize='xx-large') @@ -441,7 +441,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, vmp_ratio = voltage / modeled_vmp # take care of divide by zero - vmp_ratio[modeled_vmp==0] = 0 + vmp_ratio[modeled_vmp == 0] = 0 # Both quantities in the "where" argument of np.divide must be arrays, or # else a RecursionError is raised @@ -462,6 +462,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, return my_dict + # %% # Demonstrate transmission, modeled voltage calculation and mode categorization # on voltage, current pair @@ -527,9 +528,9 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 'num_mods_per_str': int(config['num_mods_per_str'][f'{inv_cb}'])} out = wrapper(data[v_col], data[i_col], - data['Cell Temp [C]'], - data['POA [W/m²]'], sapm_coeffs, - my_config) + data['Cell Temp [C]'], + data['POA [W/m²]'], sapm_coeffs, + my_config) for k, v in out.items(): data[inv_cb + ' ' + k] = v @@ -564,7 +565,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_xlabel('Date', fontsize='xx-large') ax.set_ylabel('Voltage Ratio (measured/modeled)', fontsize='xx-large') ax.axhline(1, c='k', alpha=0.1, ls='--') -ax.legend(); +ax.legend() # %% Calculate all power losses - snow and non-snow @@ -595,10 +596,10 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, mode_cols = [c for c in data.columns if "mode" in c and "modeled" not in c] modeled_power_cols = [c for c in data.columns if "Modeled Power" in c] -i = 1 -l = loss_cols[i] -m = mode_cols[i] -p = modeled_power_cols[i] +col = 1 +l = loss_cols[col] +m = mode_cols[col] +p = modeled_power_cols[col] # Color intervals by mode cmap = {0: 'r', @@ -618,29 +619,29 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, grouped = temp.groupby(days_mapped) for d in days: - temp_grouped = grouped.get_group(d) - ax.plot(temp_grouped.index, temp_grouped[p], c='k', ls='--') - ax.plot(temp_grouped.index, temp_grouped[p]- temp_grouped[l], c='k') - ax.fill_between(temp_grouped.index, temp_grouped[p] - temp_grouped[l], - temp_grouped[p], color='k', alpha=0.2) - - chng_pts = np.ravel(np.where(temp_grouped[m].values[:-1] - - temp_grouped[m].values[1:] != 0)) - - if len(chng_pts) == 0: - ax.axvspan(temp_grouped.index[0], temp_grouped.index[-1], - color=cmap[temp_grouped.at[temp_grouped.index[-1], m]], - alpha=0.05) - 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[temp_grouped.at[temp_grouped.index[end], m]], - alpha=0.05) + temp_grouped = grouped.get_group(d) + ax.plot(temp_grouped.index, temp_grouped[p], c='k', ls='--') + ax.plot(temp_grouped.index, temp_grouped[p]- temp_grouped[l], c='k') + ax.fill_between(temp_grouped.index, temp_grouped[p] - temp_grouped[l], + temp_grouped[p], color='k', alpha=0.2) + + chng_pts = np.ravel(np.where(temp_grouped[m].values[:-1] + - temp_grouped[m].values[1:] != 0)) + + if len(chng_pts) == 0: + ax.axvspan(temp_grouped.index[0], temp_grouped.index[-1], + color=cmap[temp_grouped.at[temp_grouped.index[-1], m]], + alpha=0.05) + 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[temp_grouped.at[temp_grouped.index[end], m]], + alpha=0.05) # Add different colored intervals to legend handles, labels = ax.get_legend_handles_labels() @@ -669,7 +670,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_title('Measured and modeled production for INV1 CB2', fontsize='xx-large') -#%% +# %% # Calculate daily losses occuring while the system is operating in one of the # four modes that are associated with the presence of snow. @@ -717,4 +718,4 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_ylabel('[%]', fontsize='xx-large') ax.set_xticks(xvals, days) ax.xaxis.set_major_formatter(date_form) -ax.set_title('Losses incurred in modes 0 -3', fontsize='xx-large'); +ax.set_title('Losses incurred in modes 0 -3', fontsize='xx-large') From 1f7a0d6bd7341087d2006c88ea1b70dd730e8cff Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Tue, 9 Apr 2024 10:04:52 -0600 Subject: [PATCH 12/72] work toward vectorizing categorize --- docs/examples/snow-detection/snow-mode.py | 21 ++++--- pvanalytics/features/snow.py | 69 ++++++++++++++++++++++- pvanalytics/tests/features/test_snow.py | 16 ++++++ 3 files changed, 95 insertions(+), 11 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 9cf6f9e80..e759b8feb 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -122,7 +122,7 @@ ax.xaxis.set_major_formatter(date_form) for v in dc_voltage_cols: ax.scatter(data.index, data[v], s=0.5, label=v) - ax.plot(data.index, data[v], alpha=0.2) + ax.plot(data[v], alpha=0.2) ax.axhline(mppt_high_voltage, c='r', ls='--', label='Maximum MPPT voltage: {} V'.format(mppt_high_voltage)) ax.axhline(mppt_low_voltage, c='g', ls='--', @@ -138,7 +138,7 @@ ax.xaxis.set_major_formatter(date_form) for a in ac_power_cols: ax.scatter(data.index, data[a], s=0.5, label=a) - ax.plot(data.index, data[a], alpha=0.2) + ax.plot(data[a], alpha=0.2) ax.axhline(max_ac_power, c='r', ls='--', label='Maximum allowed AC power: {} kW'.format(max_ac_power)) ax.set_xlabel('Date', fontsize='large') @@ -191,7 +191,7 @@ ax.xaxis.set_major_formatter(date_form) for v in dc_voltage_cols: ax.scatter(data.index, data[v], s=0.5, label=v) - ax.plot(data.index, data[v], alpha=0.2) + ax.plot(data[v], alpha=0.2) ax.axhline(mppt_high_voltage, c='r', ls='--', label='Maximum MPPT voltage: {} V'.format(mppt_high_voltage)) ax.axhline(mppt_low_voltage, c='g', ls='--', @@ -252,7 +252,7 @@ date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) ax.scatter(data.index, data['Cell Temp [C]'], s=0.5, c='b') -ax.plot(data.index, data['Cell Temp [C]'], alpha=0.3, c='b') +ax.plot(data['Cell Temp [C]'], alpha=0.3, c='b') ax.set_ylabel('Cell Temp [C]', c='b', fontsize='xx-large') ax.set_xlabel('Date', fontsize='xx-large') @@ -295,10 +295,10 @@ ax.xaxis.set_major_formatter(date_form) ax.scatter(T1.index, T1, s=0.5, c='b', label='SAPM') -ax.plot(T1.index, T1, alpha=0.3, c='b') +ax.plot(T1, alpha=0.3, c='b') ax.scatter(T2.index, T2, s=0.3, c='g', label='Linear model') -ax.plot(T2.index, T2, alpha=0.3, c='g') +ax.plot(T2, alpha=0.3, c='g') ax.legend() ax.set_ylabel('Transmission', fontsize='xx-large') @@ -450,11 +450,14 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # vmp_ratio[modeled_vmp==0] = 0 # TODO lets vectorize the function itself - categorize_v = np.vectorize(snow.categorize) + categorize_v = np.vectorize(snow.categorize_old) mode = categorize_v(vmp_ratio, T, voltage, config['min_dcv'], config['threshold_vratio'], config['threshold_transmission']) + mode = snow.categorize(vmp_ratio, T, voltage, config['min_dcv'], + config['threshold_vratio'], + config['threshold_transmission']) my_dict = {'transmission': T, 'modeled_vmp': modeled_vmp, 'vmp_ratio': vmp_ratio, @@ -620,8 +623,8 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, for d in days: temp_grouped = grouped.get_group(d) - ax.plot(temp_grouped.index, temp_grouped[p], c='k', ls='--') - ax.plot(temp_grouped.index, temp_grouped[p]- temp_grouped[l], c='k') + ax.plot(temp_grouped[p], c='k', ls='--') + ax.plot(temp_grouped[p]- temp_grouped[l], c='k') ax.fill_between(temp_grouped.index, temp_grouped[p] - temp_grouped[l], temp_grouped[p], color='k', alpha=0.2) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 486dd1f64..99154d07e 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -142,7 +142,7 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): return T -def categorize(vmp_ratio, transmission, voltage, min_dcv, +def categorize_old(vmp_ratio, transmission, voltage, min_dcv, threshold_vratio, threshold_transmission): """ @@ -165,7 +165,7 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, Parameters ---------- - vratio : float + vmp_ratio : float Ratio between measured voltage and voltage modeled using calculated values of transmission. [dimensionless] transmission : float @@ -209,3 +209,68 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, elif transmission > threshold_transmission: return 4 return np.nan + + +def categorize(vmp_ratio, transmission, voltage, min_dcv, + threshold_vratio, threshold_transmission): + + """ + Categorizes electrical behavior into a snow-related mode. + + Modes are defined in [1]_: + + * Mode 0: system is covered with enough opaque snow that the system is + offline due to voltage below the inverter's turn-on voltage. + * Mode 1: system is online and covered with non-uniform snow, such that + both operating voltage and current are decreased by the presence of snow. + * Mode 2: system is online and covered with opaque snow, such that + operating voltage is decreased by the presence of snow, but transmission + is consistent with snow-free conditions. + * Mode 3: system is online and covered with light-transmissive snow, such + that transmission is decreased but voltage is consistent with all + system substrings being online. + * Mode 4: transmisison and voltage are consistent with snow-free + conditions. + + Parameters + ---------- + vmp_ratio : array-like + Ratio between measured voltage and voltage modeled using + calculated values of transmission. [dimensionless] + transmission : array-like + Fraction of plane-of-array irradiance that can reach the array's cells + through the snow cover. [dimensionless] + voltage : array-like + Measured DC voltage. [V] + min_dcv : float + The lower 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 : int + + .. [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`. + """ + mode = np.zeros_like(voltage) + + umin = voltage > min_dcv # necessary for all modes except 0 + uvr = np.where(vmp_ratio > threshold_vratio, 3, 1) + utrans = np.where(transmission > threshold_transmission, 1, 0) + + mode = umin * (uvr + utrans) + + # preserve nan + mode[np.isnan(vmp_ratio) | np.isnan(transmission)] = -1 + + return mode \ No newline at end of file diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index 949ba2314..326fb65d9 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -17,3 +17,19 @@ def test_horizon_mask(): elevation=np.array([-1, 11, np.nan])) expected = np.array([False, True, False]) assert_array_equal(result, expected) + + +def test_categorize(): + vmp_ratio = np.array([np.nan, 0.9, 0.1, 0.6, 0.7, 0.9, 0.9]) + voltage = np.array([400., 400., 400., 400., 400., 400., 200.]) + transmission = np.array([0.5, np.nan, 0.9, 0.9, 0.5, 0.9, 0.9]) + min_dcv = 300 + threshold_vratio = 0.7 + threshold_transmission = 0.6 + # np.nan, vrthres, vr>thres, vrthres, vo>thres, vo>thres, vo>thres, vo>thres, vo>thres, vothres, trthres + expected = np.array([np.nan, np.nan, 2, 2, 2, 4, 0]) + result = snow.categorize(vmp_ratio, transmission, voltage, min_dcv, + threshold_vratio, threshold_transmission) + assert_array_equal(result, expected) From e4e2219c70648f43e3d8211b0ebdb3fba84f3f19 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Tue, 9 Apr 2024 10:38:28 -0600 Subject: [PATCH 13/72] lint, use mode None instead of -1 --- docs/examples/snow-detection/snow-mode.py | 24 +++++++++++------------ pvanalytics/features/snow.py | 10 +++++----- pvanalytics/tests/features/test_snow.py | 4 ++-- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index e759b8feb..56705f671 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -600,9 +600,9 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, modeled_power_cols = [c for c in data.columns if "Modeled Power" in c] col = 1 -l = loss_cols[col] -m = mode_cols[col] -p = modeled_power_cols[col] +los = loss_cols[col] +mod = mode_cols[col] +pwr = modeled_power_cols[col] # Color intervals by mode cmap = {0: 'r', @@ -614,7 +614,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) -temp = data[~data[m].isna()] +temp = data[~data[mod].isna()] # Plot each day individually so we are not exaggerating losses days_mapped = temp.index.map(lambda x: x.date()) @@ -623,17 +623,17 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, for d in days: temp_grouped = grouped.get_group(d) - ax.plot(temp_grouped[p], c='k', ls='--') - ax.plot(temp_grouped[p]- temp_grouped[l], c='k') - ax.fill_between(temp_grouped.index, temp_grouped[p] - temp_grouped[l], - temp_grouped[p], color='k', alpha=0.2) + ax.plot(temp_grouped[pwr], c='k', ls='--') + ax.plot(temp_grouped[pwr] - temp_grouped[los], c='k') + ax.fill_between(temp_grouped.index, temp_grouped[pwr] - temp_grouped[los], + temp_grouped[pwr], color='k', alpha=0.2) - chng_pts = np.ravel(np.where(temp_grouped[m].values[:-1] - - temp_grouped[m].values[1:] != 0)) + chng_pts = np.ravel(np.where(temp_grouped[mod].values[:-1] + - temp_grouped[mod].values[1:] != 0)) if len(chng_pts) == 0: ax.axvspan(temp_grouped.index[0], temp_grouped.index[-1], - color=cmap[temp_grouped.at[temp_grouped.index[-1], m]], + color=cmap[temp_grouped.at[temp_grouped.index[-1], mod]], alpha=0.05) else: set1 = np.append([0], chng_pts) @@ -643,7 +643,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, my_index = temp_grouped.index[start:end] ax.axvspan( temp_grouped.index[start], temp_grouped.index[end], - color=cmap[temp_grouped.at[temp_grouped.index[end], m]], + color=cmap[temp_grouped.at[temp_grouped.index[end], mod]], alpha=0.05) # Add different colored intervals to legend diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 99154d07e..6eab4e5f1 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -143,7 +143,7 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): def categorize_old(vmp_ratio, transmission, voltage, min_dcv, - threshold_vratio, threshold_transmission): + threshold_vratio, threshold_transmission): """ Categorizes electrical behavior into a snow-related mode. @@ -262,7 +262,7 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, 2023, pp. 1-5, :doi:`10.1109/PVSC48320.2023.10360065`. """ - mode = np.zeros_like(voltage) + mode = np.zeros_like(voltage, dtype=int) umin = voltage > min_dcv # necessary for all modes except 0 uvr = np.where(vmp_ratio > threshold_vratio, 3, 1) @@ -271,6 +271,6 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, mode = umin * (uvr + utrans) # preserve nan - mode[np.isnan(vmp_ratio) | np.isnan(transmission)] = -1 - - return mode \ No newline at end of file + mode[np.isnan(vmp_ratio) | np.isnan(transmission)] = None + + return mode diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index 326fb65d9..e630f9f32 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -27,8 +27,8 @@ def test_categorize(): threshold_vratio = 0.7 threshold_transmission = 0.6 # np.nan, vrthres, vr>thres, vrthres, vo>thres, vo>thres, vo>thres, vo>thres, vo>thres, vothres, trthres + # vo>thres, vo>thres, vo>thres, vo>thres, vo>thres, vo>thres, vothres, trthres expected = np.array([np.nan, np.nan, 2, 2, 2, 4, 0]) result = snow.categorize(vmp_ratio, transmission, voltage, min_dcv, threshold_vratio, threshold_transmission) From fc2fd20431d2e2aeacd9d0fe2d170f7dab46030c Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Tue, 9 Apr 2024 10:39:54 -0600 Subject: [PATCH 14/72] use None in test --- pvanalytics/tests/features/test_snow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index e630f9f32..e2074a4b4 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -29,7 +29,7 @@ def test_categorize(): # np.nan, vrthres, vr>thres, vrthres, vo>thres, vo>thres, vo>thres, vo>thres, vo>thres, vothres, trthres - expected = np.array([np.nan, np.nan, 2, 2, 2, 4, 0]) + expected = np.array([None, None, 2, 2, 2, 4, 0]) result = snow.categorize(vmp_ratio, transmission, voltage, min_dcv, threshold_vratio, threshold_transmission) assert_array_equal(result, expected) From 8a73eefd7deae7c99fc035277d35e514c5534b98 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Tue, 9 Apr 2024 13:04:42 -0600 Subject: [PATCH 15/72] use dtype object to have both int and None --- pvanalytics/features/snow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 6eab4e5f1..179c1be9e 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -262,7 +262,7 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, 2023, pp. 1-5, :doi:`10.1109/PVSC48320.2023.10360065`. """ - mode = np.zeros_like(voltage, dtype=int) + mode = np.zeros_like(voltage, dtype=object) # allows both int and None umin = voltage > min_dcv # necessary for all modes except 0 uvr = np.where(vmp_ratio > threshold_vratio, 3, 1) From 32619fb08f14b78ac29c77572c49c2e23079094c Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Tue, 9 Apr 2024 14:35:42 -0600 Subject: [PATCH 16/72] handle mixed types --- pvanalytics/features/snow.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 179c1be9e..4bdee4257 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -262,15 +262,11 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, 2023, pp. 1-5, :doi:`10.1109/PVSC48320.2023.10360065`. """ - mode = np.zeros_like(voltage, dtype=object) # allows both int and None - umin = voltage > min_dcv # necessary for all modes except 0 uvr = np.where(vmp_ratio > threshold_vratio, 3, 1) utrans = np.where(transmission > threshold_transmission, 1, 0) - mode = umin * (uvr + utrans) - - # preserve nan - mode[np.isnan(vmp_ratio) | np.isnan(transmission)] = None + mode = np.where(np.isnan(vmp_ratio) | np.isnan(transmission), None, + umin * (uvr + utrans)) return mode From 42e582ab3dc10ef94d6eb483840eadbdfae4ba61 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 10 Apr 2024 09:36:45 -0600 Subject: [PATCH 17/72] add tests --- pvanalytics/features/snow.py | 4 +-- pvanalytics/tests/features/test_snow.py | 48 ++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 4bdee4257..fbde2b5f9 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -132,9 +132,9 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, 2023, pp. 1-5. :doi:`10.1109/PVSC48320.2023.10360065` """ - + # TODO only works with Series T = modeled_e_e/measured_e_e - T[T.isna()] = np.nan + T[T.isna()] = np.nan # TODO what does this accomplish T[i_mp == 0] = 0 T[T < 0] = np.nan T[T > 1] = 1 diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index e2074a4b4..e36e787ac 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -7,10 +7,11 @@ 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_horizon_mask(): +def test_get_horizon_mask(): horizon = pd.Series(index=range(0, 360), data=0) horizon[5:10] = 10 result = snow.get_horizon_mask(horizon, azimuth=np.array([4, 5, 7]), @@ -19,6 +20,51 @@ def test_horizon_mask(): assert_array_equal(result, expected) +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(): vmp_ratio = np.array([np.nan, 0.9, 0.1, 0.6, 0.7, 0.9, 0.9]) voltage = np.array([400., 400., 400., 400., 400., 400., 200.]) From 2af3fa0dc6f397d636345068a003ee6bb3622412 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 10 Apr 2024 12:39:26 -0600 Subject: [PATCH 18/72] handle equals --- docs/examples/snow-detection/snow-mode.py | 2 ++ pvanalytics/features/snow.py | 24 +++++++++++------------ pvanalytics/tests/features/test_snow.py | 2 +- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 56705f671..016533db6 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -374,6 +374,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 2. Calculate transmission 3. Uses transmission to model voltage with the SAPM. # TODO How is this voltage different than measured (snow-affected voltage)? + # Answer: All cells are modeled to get the incoming irradiance 4. Determine the snow mode for each point. Parameters @@ -652,6 +653,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, modeled_line = Line2D([0], [0], label='Modeled', color='k', ls='--') measured_line = Line2D([0], [0], label='Measured', color='k') +# TODO don't mark offline periods as Mode 0 red_patch = mpatches.Patch(color='r', alpha=0.05, label='Mode 0') blue_patch = mpatches.Patch(color='b', alpha=0.05, label='Mode 1') yellow_patch = mpatches.Patch(color='y', alpha=0.05, label='Mode 2') diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index fbde2b5f9..474abe526 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -4,8 +4,7 @@ def get_horizon_mask(horizon, azimuth, elevation): """ - Determines if a given (azimuth, elevation) pair is above or - below a horizon profile + Determines if a given (azimuth, elevation) pair is above a horizon profile. Parameters ---------- @@ -22,7 +21,7 @@ def get_horizon_mask(horizon, azimuth, elevation): out : bool or NaN """ yp = np.interp(azimuth, horizon.index, horizon.values) - out = elevation >= yp # TODO or strictly > + out = elevation >= yp return out @@ -106,9 +105,9 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): measured irradiance. Measured irradiance should be in the array's plane and represent snow-free - conditions. When possible, the irradiance should be adjusted for - reflections and spectral content. For example, the measured irradiance - could be obtained with a heated plane-of-array pyranometer. + 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 ---------- @@ -123,7 +122,7 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): Returns ------- T : array - Effective transmission. [unitless] + Effective transmission. [unitless] # TODO describe when expect nan, 0 References ---------- @@ -133,8 +132,9 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): 2023, pp. 1-5. :doi:`10.1109/PVSC48320.2023.10360065` """ # TODO only works with Series - T = modeled_e_e/measured_e_e - T[T.isna()] = np.nan # TODO what does this accomplish + T = modeled_e_e / measured_e_e + # no transmission if no current + T[i_mp.isna()] = np.nan T[i_mp == 0] = 0 T[T < 0] = np.nan T[T > 1] = 1 @@ -262,9 +262,9 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, 2023, pp. 1-5, :doi:`10.1109/PVSC48320.2023.10360065`. """ - umin = voltage > min_dcv # necessary for all modes except 0 - uvr = np.where(vmp_ratio > threshold_vratio, 3, 1) - utrans = np.where(transmission > threshold_transmission, 1, 0) + umin = voltage >= min_dcv # necessary for all modes except 0 + uvr = np.where(vmp_ratio >= threshold_vratio, 3, 1) + utrans = np.where(transmission >= threshold_transmission, 1, 0) mode = np.where(np.isnan(vmp_ratio) | np.isnan(transmission), None, umin * (uvr + utrans)) diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index e36e787ac..6e8ca8345 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -75,7 +75,7 @@ def test_categorize(): # np.nan, vrthres, vr>thres, vrthres, vo>thres, vo>thres, vo>thres, vo>thres, vo>thres, vothres, trthres - expected = np.array([None, None, 2, 2, 2, 4, 0]) + expected = np.array([None, None, 2, 2, 3, 4, 0]) result = snow.categorize(vmp_ratio, transmission, voltage, min_dcv, threshold_vratio, threshold_transmission) assert_array_equal(result, expected) From 9a1494cd2989e752321a6ac602d37f9479beee97 Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Mon, 15 Apr 2024 14:16:48 -0600 Subject: [PATCH 19/72] Fixed the horizon masking section --- docs/examples/snow-detection/snow-mode.py | 39 +- pvanalytics/data/snow_horizon.csv | 722 +++++++++++----------- pvanalytics/features/snow.py | 46 +- 3 files changed, 412 insertions(+), 395 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 016533db6..758204f4a 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -53,6 +53,7 @@ from pvanalytics.features import snow # %% Load in system configuration parameters (dict) +import os pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent data_file = pvanalytics_dir / 'data' / 'snow_data.csv' snowfall_file = pvanalytics_dir / 'data' / 'snow_snowfall.csv' @@ -184,7 +185,7 @@ data.loc[mask3, i] = np.nan data.loc[mask3, a] = np.nan -# %% Plot DC voltage for each combiner inputm with inverter nameplate limits +# %% Plot DC voltage for each combiner input with inverter nameplate limits fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") @@ -211,13 +212,24 @@ ''' -horizon = pd.read_csv(horizon_file, index_col='Az').squeeze("columns") +horizon = pd.read_csv(horizon_file, index_col='Unnamed: 0').squeeze("columns") data['Horizon Mask'] = snow.get_horizon_mask(horizon, data['azimuth'], data['elevation']) -# Exclude data collected while the sun is below the horizon -data = data[~data['Horizon Mask']] +#%% Plot horizon mask + +fig, ax = plt.subplots() + +ax.scatter(data['azimuth'],data['elevation'], s=0.5, label='data', + c=data['Horizon Mask']) +ax.scatter(horizon.index, horizon, s=0.5, label='mask') +ax.legend() +ax.set_xlabel(r'Azimuth [$\degree$]') +ax.set_ylabel(r'Elevation [$\degree$]') + +#%% Exclude data collected while the sun is below the horizon +data = data[data['Horizon Mask']] # %% @@ -442,21 +454,10 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, vmp_ratio = voltage / modeled_vmp # take care of divide by zero - vmp_ratio[modeled_vmp == 0] = 0 - # Both quantities in the "where" argument of np.divide must be arrays, or - # else a RecursionError is raised + vmp_ratio[modeled_vmp == 0] = np.nan - # vmp_ratio = np.divide(voltage, modeled_vmp, - # where=((voltage > 0) & (modeled_vmp>0))) - # vmp_ratio[modeled_vmp==0] = 0 - - # TODO lets vectorize the function itself - categorize_v = np.vectorize(snow.categorize_old) - - mode = categorize_v(vmp_ratio, T, voltage, config['min_dcv'], - config['threshold_vratio'], - config['threshold_transmission']) - mode = snow.categorize(vmp_ratio, T, voltage, config['min_dcv'], + mode = snow.categorize(vmp_ratio, T, voltage, modeled_vmp, + config['min_dcv'], config['threshold_vratio'], config['threshold_transmission']) my_dict = {'transmission': T, @@ -724,3 +725,5 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_xticks(xvals, days) ax.xaxis.set_major_formatter(date_form) ax.set_title('Losses incurred in modes 0 -3', fontsize='xx-large') + +# %% diff --git a/pvanalytics/data/snow_horizon.csv b/pvanalytics/data/snow_horizon.csv index 2e2b4316a..2ede61af4 100644 --- a/pvanalytics/data/snow_horizon.csv +++ b/pvanalytics/data/snow_horizon.csv @@ -1,361 +1,361 @@ -Az,Elev -0,0 -1,0 -2,0 -3,0 -4,0 -5,0 -6,0 -7,0 -8,0 -9,0 -10,0 -11,0 -12,0 -13,0 -14,0 -15,0 -16,0 -17,0 -18,0 -19,0 -20,0 -21,0 -22,0 -23,0 -24,0 -25,0 -26,0 -27,0 -28,0 -29,0 -30,0 -31,0 -32,0 -33,0 -34,0 -35,0 -36,0 -37,0 -38,0 -39,0 -40,0 -41,0 -42,0 -43,0 -44,0 -45,0 -46,0 -47,0 -48,0 -49,0 -50,1 -51,1 -52,2 -53,4 -54,5 -55,6 -56,7 -57,8 -58,8 -59,8 -60,7 -61,6 -62,5 -63,4 -64,2 -65,1 -66,1 -67,0 -68,0 -69,0 -70,0 -71,0 -72,0 -73,0 -74,0 -75,0 -76,0 -77,0 -78,0 -79,0 -80,0 -81,0 -82,0 -83,0 -84,0 -85,0 -86,0 -87,0 -88,0 -89,0 -90,0 -91,0 -92,0 -93,0 -94,0 -95,0 -96,0 -97,0 -98,0 -99,0 -100,0 -101,0 -102,0 -103,0 -104,0 -105,0 -106,0 -107,0 -108,0 -109,0 -110,0 -111,0 -112,0 -113,0 -114,0 -115,0 -116,0 -117,0 -118,0 -119,0 -120,0 -121,1 -122,1 -123,1 -124,2 -125,2 -126,3 -127,3 -128,4 -129,5 -130,5 -131,6 -132,7 -133,8 -134,8 -135,9 -136,10 -137,10 -138,11 -139,12 -140,12 -141,13 -142,13 -143,14 -144,15 -145,15 -146,15 -147,16 -148,16 -149,17 -150,17 -151,18 -152,18 -153,18 -154,19 -155,19 -156,19 -157,20 -158,20 -159,20 -160,21 -161,21 -162,21 -163,21 -164,22 -165,22 -166,22 -167,22 -168,22 -169,22 -170,23 -171,23 -172,23 -173,23 -174,23 -175,23 -176,23 -177,23 -178,23 -179,23 -180,23 -181,23 -182,23 -183,23 -184,23 -185,23 -186,23 -187,23 -188,23 -189,23 -190,22 -191,22 -192,22 -193,22 -194,22 -195,22 -196,21 -197,21 -198,21 -199,21 -200,20 -201,20 -202,20 -203,19 -204,19 -205,19 -206,18 -207,18 -208,18 -209,17 -210,17 -211,16 -212,16 -213,16 -214,15 -215,15 -216,14 -217,14 -218,14 -219,13 -220,13 -221,13 -222,13 -223,12 -224,12 -225,12 -226,12 -227,12 -228,12 -229,12 -230,12 -231,12 -232,12 -233,13 -234,13 -235,13 -236,13 -237,13 -238,13 -239,12 -240,12 -241,12 -242,12 -243,11 -244,11 -245,11 -246,10 -247,10 -248,10 -249,11 -250,11 -251,11 -252,12 -253,12 -254,13 -255,14 -256,15 -257,16 -258,17 -259,18 -260,18 -261,19 -262,20 -263,20 -264,21 -265,21 -266,21 -267,20 -268,20 -269,20 -270,19 -271,18 -272,17 -273,17 -274,16 -275,15 -276,14 -277,14 -278,13 -279,13 -280,13 -281,14 -282,16 -283,17 -284,20 -285,23 -286,26 -287,29 -288,31 -289,33 -290,33 -291,33 -292,31 -293,29 -294,26 -295,23 -296,21 -297,20 -298,19 -299,19 -300,19 -301,19 -302,18 -303,17 -304,15 -305,12 -306,9 -307,7 -308,4 -309,3 -310,1 -311,1 -312,0 -313,0 -314,0 -315,0 -316,0 -317,0 -318,0 -319,0 -320,0 -321,0 -322,0 -323,0 -324,0 -325,0 -326,0 -327,0 -328,0 -329,0 -330,0 -331,0 -332,0 -333,0 -334,0 -335,0 -336,0 -337,0 -338,0 -339,0 -340,0 -341,0 -342,0 -343,0 -344,0 -345,0 -346,0 -347,0 -348,0 -349,0 -350,0 -351,0 -352,0 -353,0 -354,0 -355,0 -356,0 -357,0 -358,0 -359,0 +,Elevation +0,0.0 +1,0.0 +2,0.0 +3,0.0 +4,0.0 +5,0.0 +6,0.0 +7,0.0 +8,0.0 +9,0.0 +10,0.0 +11,0.0 +12,0.0 +13,0.0 +14,0.0 +15,0.0 +16,0.0 +17,0.0 +18,0.0 +19,0.0 +20,0.0 +21,0.0 +22,0.0 +23,0.0 +24,0.0 +25,0.0 +26,0.0 +27,0.0 +28,0.0 +29,0.0 +30,0.0 +31,0.0 +32,0.0 +33,0.0 +34,0.0 +35,0.0 +36,0.0 +37,0.0 +38,0.0 +39,0.0 +40,0.0 +41,0.0 +42,0.0 +43,0.0 +44,0.0 +45,0.0 +46,0.0 +47,0.0 +48,0.0 +49,0.0 +50,0.0 +51,0.0 +52,0.0 +53,0.0 +54,0.0 +55,0.0 +56,0.0 +57,0.0 +58,0.0 +59,0.0 +60,0.0 +61,0.0 +62,0.0 +63,0.0 +64,0.0 +65,0.0 +66,0.0 +67,0.0 +68,0.0 +69,0.0 +70,0.0 +71,0.0 +72,0.0 +73,0.0 +74,0.0 +75,0.0 +76,0.0 +77,0.0 +78,0.0 +79,0.0 +80,0.0 +81,0.0 +82,0.0 +83,0.0 +84,0.0 +85,0.0 +86,0.0 +87,0.0 +88,0.0 +89,0.0 +90,0.0 +91,0.0 +92,0.0 +93,0.0 +94,0.0 +95,0.0 +96,0.0 +97,0.0 +98,0.0 +99,0.0 +100,0.0 +101,0.0 +102,0.0 +103,0.0 +104,0.0 +105,0.0 +106,0.0 +107,0.0 +108,0.0 +109,0.0 +110,0.0 +111,0.0 +112,0.0 +113,0.0 +114,0.0 +115,0.0 +116,0.0 +117,0.0 +118,0.0 +119,0.0 +120,0.0 +121,0.0 +122,0.0 +123,0.0 +124,0.2216517857142784 +125,0.6654017857142642 +126,1.3517857142856708 +127,1.999776785714222 +128,2.695982142857057 +129,3.4080357142856066 +130,4.119196428571299 +131,4.870535714285562 +132,5.76205357142839 +133,6.491517857142654 +134,7.241071428571201 +135,8.04955357142832 +136,8.712499999999725 +137,9.409821428571131 +138,10.06138392857111 +139,10.62053571428538 +140,11.258482142856787 +141,11.912946428571052 +142,12.506026785713892 +143,12.925669642856734 +144,13.528571428571004 +145,14.179017857142412 +146,14.692633928570968 +147,15.169419642856669 +148,15.751562499999505 +149,16.28124999999948 +150,16.701785714285187 +151,17.132142857142323 +152,17.57455357142802 +153,17.956696428570865 +154,18.383035714285132 +155,18.673660714285123 +156,19.01741071428512 +157,19.360937499999395 +158,19.66874999999938 +159,19.972991071427945 +160,20.264732142856506 +161,20.40959821428507 +162,20.515401785713642 +163,20.774330357142208 +164,20.978571428570774 +165,21.038169642856484 +166,21.18102678571362 +167,21.34263392857076 +168,21.442857142856475 +169,21.552901785713615 +170,21.68616071428503 +171,21.72254464285646 +172,21.616517857142178 +173,21.774999999999316 +174,21.751339285713605 +175,21.794196428570746 +176,21.859151785713603 +177,21.91964285714217 +178,21.99999999999931 +179,22.024553571427877 +180,22.052232142856447 +181,22.100892857142163 +182,22.11383928571359 +183,22.034374999999304 +184,21.88035714285645 +185,21.828571428570744 +186,21.80558035714217 +187,21.696874999999313 +188,21.58035714285646 +189,21.525892857142185 +190,21.403348214285042 +191,21.33504464285647 +192,21.2854910714279 +193,21.085714285713625 +194,20.614732142856496 +195,20.453794642856497 +196,20.373883928570784 +197,20.02165178571365 +198,19.745982142856526 +199,19.62008928571367 +200,19.376116071427962 +201,19.022991071427974 +202,18.829687499999412 +203,18.648437499999414 +204,18.349330357142282 +205,18.070089285713713 +206,17.78950892857087 +207,17.436607142856595 +208,17.006919642856605 +209,16.326116071428057 +210,15.947544642856636 +211,15.572098214285223 +212,14.842187499999534 +213,14.513392857142398 +214,14.077901785713841 +215,13.640401785713856 +216,13.052008928571022 +217,12.791517857142452 +218,12.510044642856752 +219,12.017633928571051 +220,11.565401785713922 +221,11.286607142856784 +222,10.913392857142515 +223,10.259374999999675 +224,10.242633928571106 +225,10.133035714285393 +226,9.861607142856831 +227,10.078348214285397 +228,10.25424107142825 +229,10.220312499999679 +230,10.434151785713956 +231,10.625669642856808 +232,10.617187499999668 +233,10.555357142856813 +234,10.560267857142527 +235,10.390848214285382 +236,10.231473214285394 +237,10.308705357142536 +238,10.24799107142825 +239,10.489508928571096 +240,10.29218749999968 +241,10.236830357142532 +242,10.174776785713966 +243,9.797321428571118 +244,9.529910714285416 +245,9.150669642856853 +246,8.96428571428543 +247,8.39196428571402 +248,8.224776785714026 +249,8.33258928571402 +250,8.478794642856872 +251,8.635491071428298 +252,8.958035714285433 +253,9.78883928571398 +254,10.476785714285386 +255,11.309374999999644 +256,13.099330357142449 +257,14.25602678571384 +258,14.416741071428122 +259,15.634821428570941 +260,16.308258928570915 +261,16.673660714285194 +262,16.832366071428044 +263,16.64241071428519 +264,16.55714285714234 +265,16.31205357142806 +266,15.795089285713791 +267,14.858482142856676 +268,13.458035714285291 +269,12.427008928571036 +270,11.3462053571425 +271,9.681249999999693 +272,8.220089285714028 +273,6.747321428571215 +274,5.218526785714121 +275,3.817410714285592 +276,2.4276785714284936 +277,1.6651785714285183 +278,0.851116071428544 +279,0.07767857142856865 +280,0.0 +281,0.0 +282,0.0 +283,0.0 +284,0.0 +285,0.0 +286,0.0 +287,0.0 +288,0.0 +289,0.0 +290,0.0 +291,0.0 +292,0.0 +293,0.0 +294,0.0 +295,0.0 +296,0.0 +297,0.0 +298,0.0 +299,0.0 +300,0.0 +301,0.0 +302,0.0 +303,0.0 +304,0.0 +305,0.0 +306,0.0 +307,0.0 +308,0.0 +309,0.0 +310,0.0 +311,0.0 +312,0.0 +313,0.0 +314,0.0 +315,0.0 +316,0.0 +317,0.0 +318,0.0 +319,0.0 +320,0.0 +321,0.0 +322,0.0 +323,0.0 +324,0.0 +325,0.0 +326,0.0 +327,0.0 +328,0.0 +329,0.0 +330,0.0 +331,0.0 +332,0.0 +333,0.0 +334,0.0 +335,0.0 +336,0.0 +337,0.0 +338,0.0 +339,0.0 +340,0.0 +341,0.0 +342,0.0 +343,0.0 +344,0.0 +345,0.0 +346,0.0 +347,0.0 +348,0.0 +349,0.0 +350,0.0 +351,0.0 +352,0.0 +353,0.0 +354,0.0 +355,0.0 +356,0.0 +357,0.0 +358,0.0 +359,0.0 diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 474abe526..f2c62a941 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -107,7 +107,7 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): 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. + adjusted for reflections and spectral content. Parameters ---------- @@ -117,12 +117,15 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): Effective irradiance modeled from measured current at maximum power. [W/m2] i_mp : array - Maximum power current at the resolution of a single module. [A] + Maximum power DC current at the resolution of a single module. [A] Returns ------- T : array - Effective transmission. [unitless] # TODO describe when expect nan, 0 + 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 ---------- @@ -131,19 +134,22 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, 2023, pp. 1-5. :doi:`10.1109/PVSC48320.2023.10360065` """ - # TODO only works with Series T = modeled_e_e / measured_e_e # no transmission if no current - T[i_mp.isna()] = np.nan + T[np.isnan(i_mp)] = np.nan T[i_mp == 0] = 0 + # no transmission if no irradiance + T[measured_e_e == 0] = np.nan + # bound T between 0 and 1 T[T < 0] = np.nan T[T > 1] = 1 return T -def categorize_old(vmp_ratio, transmission, voltage, min_dcv, - threshold_vratio, threshold_transmission): +def categorize_old(vmp_ratio, transmission, measured_voltage, + predicted_voltage, min_dcv, threshold_vratio, + threshold_transmission): """ Categorizes electrical behavior into a snow-related mode. @@ -151,7 +157,9 @@ def categorize_old(vmp_ratio, transmission, voltage, min_dcv, Modes are defined in [1]_: * Mode 0: system is covered with enough opaque snow that the system is - offline due to voltage below the inverter's turn-on voltage. + offline due to voltage below the inverter's turn-on voltage. Excludes + periods when system is predicted to be offline based on measured + irradiance. * Mode 1: system is online and covered with non-uniform snow, such that both operating voltage and current are decreased by the presence of snow. * Mode 2: system is online and covered with opaque snow, such that @@ -171,7 +179,7 @@ def categorize_old(vmp_ratio, transmission, voltage, min_dcv, transmission : float Fraction of plane-of-array irradiance that can reach the array's cells through the snow cover. [dimensionless] - voltage : float + measured_voltage : float [V] min_dcv : float The lower voltage bound on the inverter's maximum power point @@ -196,7 +204,7 @@ def categorize_old(vmp_ratio, transmission, voltage, min_dcv, if np.isnan(vmp_ratio) or np.isnan(transmission): return np.nan - elif voltage < min_dcv: + elif (measured_voltage < min_dcv) and (predicted_voltage > min_dcv): return 0 elif vmp_ratio < threshold_vratio: if transmission < threshold_transmission: @@ -211,8 +219,8 @@ def categorize_old(vmp_ratio, transmission, voltage, min_dcv, return np.nan -def categorize(vmp_ratio, transmission, voltage, min_dcv, - threshold_vratio, threshold_transmission): +def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, + min_dcv, threshold_vratio, threshold_transmission): """ Categorizes electrical behavior into a snow-related mode. @@ -220,7 +228,9 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, Modes are defined in [1]_: * Mode 0: system is covered with enough opaque snow that the system is - offline due to voltage below the inverter's turn-on voltage. + offline due to voltage below the inverter's turn-on voltage. Excludes + periods when voltage modeled using measured irradiance does not + exceed the inverter's turn-on voltage. * Mode 1: system is online and covered with non-uniform snow, such that both operating voltage and current are decreased by the presence of snow. * Mode 2: system is online and covered with opaque snow, such that @@ -240,8 +250,11 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, transmission : array-like Fraction of plane-of-array irradiance that can reach the array's cells through the snow cover. [dimensionless] - voltage : array-like + measured_voltage : array-like Measured DC voltage. [V] + modeled_voltage : array-like + DC voltage modeled using measured plane-of-array irradiance and + back-of-module temperature. [V] min_dcv : float The lower voltage bound on the inverter's maximum power point tracking (MPPT) algorithm. [V] @@ -262,11 +275,12 @@ def categorize(vmp_ratio, transmission, voltage, min_dcv, 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, 2023, pp. 1-5, :doi:`10.1109/PVSC48320.2023.10360065`. """ - umin = voltage >= min_dcv # necessary for all modes except 0 + umin_meas = measured_voltage >= min_dcv # necessary for all modes except 0 + umin_model = modeled_voltage >= min_dcv # necessary for all modes except 0 uvr = np.where(vmp_ratio >= threshold_vratio, 3, 1) utrans = np.where(transmission >= threshold_transmission, 1, 0) mode = np.where(np.isnan(vmp_ratio) | np.isnan(transmission), None, - umin * (uvr + utrans)) + umin_meas * umin_model * (uvr + utrans)) return mode From 3cc7c552e89651a61a7e22de57d1fb031663900e Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Mon, 15 Apr 2024 14:34:31 -0600 Subject: [PATCH 20/72] Linting --- docs/examples/snow-detection/snow-mode.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 758204f4a..154bb89b3 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -53,7 +53,6 @@ from pvanalytics.features import snow # %% Load in system configuration parameters (dict) -import os pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent data_file = pvanalytics_dir / 'data' / 'snow_data.csv' snowfall_file = pvanalytics_dir / 'data' / 'snow_snowfall.csv' @@ -217,18 +216,17 @@ data['Horizon Mask'] = snow.get_horizon_mask(horizon, data['azimuth'], data['elevation']) -#%% Plot horizon mask +# %% Plot horizon mask fig, ax = plt.subplots() - -ax.scatter(data['azimuth'],data['elevation'], s=0.5, label='data', +ax.scatter(data['azimuth'], data['elevation'], s=0.5, label='data', c=data['Horizon Mask']) ax.scatter(horizon.index, horizon, s=0.5, label='mask') ax.legend() ax.set_xlabel(r'Azimuth [$\degree$]') ax.set_ylabel(r'Elevation [$\degree$]') -#%% Exclude data collected while the sun is below the horizon +# %% Exclude data collected while the sun is below the horizon data = data[data['Horizon Mask']] # %% From a4465b73472f6fab294a30c6a07ab4b6b9b3e908 Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Mon, 15 Apr 2024 14:42:57 -0600 Subject: [PATCH 21/72] Added argument to test_categorize() to reflect changes made to categorize() --- pvanalytics/tests/features/test_snow.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index 6e8ca8345..376479d1b 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -67,7 +67,8 @@ def test_get_transmission(): def test_categorize(): vmp_ratio = np.array([np.nan, 0.9, 0.1, 0.6, 0.7, 0.9, 0.9]) - voltage = np.array([400., 400., 400., 400., 400., 400., 200.]) + measured_voltage = np.array([400., 450., 400., 420., 420., 495., 270.]) + modeled_voltage = np.array([np.nan, 500, 4000, 700, 600, 550, 300]) transmission = np.array([0.5, np.nan, 0.9, 0.9, 0.5, 0.9, 0.9]) min_dcv = 300 threshold_vratio = 0.7 @@ -76,6 +77,7 @@ def test_categorize(): # vo>thres, vo>thres, vo>thres, vo>thres, vo>thres, vo>thres, vothres, trthres expected = np.array([None, None, 2, 2, 3, 4, 0]) - result = snow.categorize(vmp_ratio, transmission, voltage, min_dcv, + result = snow.categorize(vmp_ratio, transmission, measured_voltage, + modeled_voltage, min_dcv, threshold_vratio, threshold_transmission) assert_array_equal(result, expected) From 4ad80cd71ec1bbeb43ed9e2b3c94b664d3f0ecf8 Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Mon, 15 Apr 2024 14:52:33 -0600 Subject: [PATCH 22/72] last lint i promise! --- pvanalytics/features/snow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index f2c62a941..b1cd72efb 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -147,7 +147,7 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): return T -def categorize_old(vmp_ratio, transmission, measured_voltage, +def categorize_old(vmp_ratio, transmission, measured_voltage, predicted_voltage, min_dcv, threshold_vratio, threshold_transmission): From cb6770519c787ec2eba17e9a4c62782b91fe5d22 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 17 Apr 2024 07:53:59 -0600 Subject: [PATCH 23/72] remove old categorize --- pvanalytics/features/snow.py | 94 +++++-------------------- pvanalytics/tests/features/test_snow.py | 12 ++-- 2 files changed, 25 insertions(+), 81 deletions(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index b1cd72efb..d0b4b3c4d 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -147,78 +147,6 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): return T -def categorize_old(vmp_ratio, transmission, measured_voltage, - predicted_voltage, min_dcv, threshold_vratio, - threshold_transmission): - - """ - Categorizes electrical behavior into a snow-related mode. - - Modes are defined in [1]_: - - * Mode 0: system is covered with enough opaque snow that the system is - offline due to voltage below the inverter's turn-on voltage. Excludes - periods when system is predicted to be offline based on measured - irradiance. - * Mode 1: system is online and covered with non-uniform snow, such that - both operating voltage and current are decreased by the presence of snow. - * Mode 2: system is online and covered with opaque snow, such that - operating voltage is decreased by the presence of snow, but transmission - is consistent with snow-free conditions. - * Mode 3: system is online and covered with light-transmissive snow, such - that transmission is decreased but voltage is consistent with all - system substrings being online. - * Mode 4: transmisison and voltage are consistent with snow-free - conditions. - - Parameters - ---------- - vmp_ratio : float - Ratio between measured voltage and voltage modeled using - calculated values of transmission. [dimensionless] - transmission : float - Fraction of plane-of-array irradiance that can reach the array's cells - through the snow cover. [dimensionless] - measured_voltage : float - [V] - min_dcv : float - The lower 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 : int - - .. [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`. - """ - - if np.isnan(vmp_ratio) or np.isnan(transmission): - return np.nan - elif (measured_voltage < min_dcv) and (predicted_voltage > min_dcv): - return 0 - elif vmp_ratio < threshold_vratio: - if transmission < threshold_transmission: - return 1 - elif transmission > threshold_transmission: - return 2 - elif vmp_ratio > threshold_vratio: - if transmission < threshold_transmission: - return 3 - elif transmission > threshold_transmission: - return 4 - return np.nan - - def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, min_dcv, threshold_vratio, threshold_transmission): @@ -275,12 +203,26 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, 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 # necessary for all modes except 0 - umin_model = modeled_voltage >= min_dcv # necessary for all modes except 0 + umin_meas = measured_voltage >= min_dcv + umin_model = modeled_voltage >= min_dcv + + # offline if both measurement and model say that voltage is too low. + # if either measured or modeled is above the minimum, then system is + # possibly generating + offline = ~(umin_meas & umin_model) + + # vmp_ratio discrimates between states (1,2) and (3,4) uvr = np.where(vmp_ratio >= threshold_vratio, 3, 1) + + # transmission discrimates within (1,2) and (3,4) utrans = np.where(transmission >= threshold_transmission, 1, 0) - mode = np.where(np.isnan(vmp_ratio) | np.isnan(transmission), None, - umin_meas * umin_model * (uvr + utrans)) + # None if nan or system is offline + # if not offline: + # - 0 if umin_meas is 0, i.e., measurement indicate no power but + # it must be that umin_model is 1 + # - state 1, 2, 3, 4 defined by uvr + utrans + mode = np.where(offline | np.isnan(vmp_ratio) | np.isnan(transmission), + None, umin_meas * (uvr + utrans)) return mode diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index 376479d1b..24c3988d1 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -69,14 +69,16 @@ def test_categorize(): vmp_ratio = np.array([np.nan, 0.9, 0.1, 0.6, 0.7, 0.9, 0.9]) measured_voltage = np.array([400., 450., 400., 420., 420., 495., 270.]) modeled_voltage = np.array([np.nan, 500, 4000, 700, 600, 550, 300]) - transmission = np.array([0.5, np.nan, 0.9, 0.9, 0.5, 0.9, 0.9]) + transmission = np.array([0.5, np.nan, 0.5, 0.9, 0.5, 0.9, 0.9]) min_dcv = 300 threshold_vratio = 0.7 threshold_transmission = 0.6 - # np.nan, vrthres, vr>thres, vrthres, vo>thres, vo>thres, vo>thres, vo>thres, vo>thres, vothres, trthres - expected = np.array([None, None, 2, 2, 3, 4, 0]) + # raio: np.nan, >thres, >thres, >thres, >thres, >thres, thres, >thres, >thres, >thres, >thres, thres, vr>thres, vr>thres + # trthres + # None (vr), None (vmo), 1, 3, 3, 3, 0 + expected = np.array([None, None, 1, 2, 3, 4, 0]) result = snow.categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, min_dcv, threshold_vratio, threshold_transmission) From 6de642c8aa326ada668dee890fd39d1a34a79095 Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Wed, 17 Apr 2024 08:24:22 -0600 Subject: [PATCH 24/72] Fixed failing test --- pvanalytics/tests/features/test_snow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index 376479d1b..d6bb353b1 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -76,7 +76,7 @@ def test_categorize(): # np.nan, vrthres, vr>thres, vrthres, vo>thres, vo>thres, vo>thres, vo>thres, vo>thres, vothres, trthres - expected = np.array([None, None, 2, 2, 3, 4, 0]) + expected = np.array([None, None, 2, 2, 3, 4, None]) result = snow.categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, min_dcv, threshold_vratio, threshold_transmission) From c0d0a3f30b508090e319649ab3818e899fcaf659 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 17 Apr 2024 08:27:21 -0600 Subject: [PATCH 25/72] fix offline --- pvanalytics/features/snow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index d0b4b3c4d..ca7543bf8 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -209,7 +209,7 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, # offline if both measurement and model say that voltage is too low. # if either measured or modeled is above the minimum, then system is # possibly generating - offline = ~(umin_meas & umin_model) + offline = ~umin_meas & ~umin_model # vmp_ratio discrimates between states (1,2) and (3,4) uvr = np.where(vmp_ratio >= threshold_vratio, 3, 1) From ccfac032c3768f40993b52e27d1a926542c0277a Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 17 Apr 2024 08:30:19 -0600 Subject: [PATCH 26/72] 0 not None --- pvanalytics/tests/features/test_snow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index 173e4a817..f3787747f 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -79,7 +79,7 @@ def test_categorize(): # vr=np.nan, vrthres, vr>thres, vr>thres # trthres # None (vr), None (vmo), 1, 3, 3, 3, None - expected = np.array([None, None, 1, 2, 3, 4, None]) + expected = np.array([None, None, 1, 2, 3, 4, 0]) result = snow.categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, min_dcv, threshold_vratio, threshold_transmission) From 0d5c0872f62b3f6e2d1baac60ab5600826105306 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 17 Apr 2024 10:26:11 -0600 Subject: [PATCH 27/72] edit definitions of mode --- docs/examples/snow-detection/snow-mode.py | 38 +++++++++++++---------- pvanalytics/features/snow.py | 31 +++++++++--------- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 154bb89b3..159e0172e 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -6,17 +6,22 @@ The effect of snow is classified into one of five categories: - Mode 0: The system is covered with enough opaque snow that the system is - offline due to voltage below the inverter's turn-on voltage. - Mode 1: The system is online and covered with non-uniform snow, such that - both operating voltage and current are reduced. - Mode 2: The system is online and covered with opaque snow, such that - operating voltage is reduced by the snow, but transmission - is consistent with snow-free conditions. # TODO seems contradictory - Mode 3: The system is online and covered with light-transmissive snow, - such that current is decreased but voltage is consistent with all - system substrings being online. - Mode 4: Current and voltage are consistent with snow-free conditions. + * 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 inverter's turn-on voltage but the voltage modeled using + measured irradiance is below the inverter's turn-on voltage. + * Mode 1: Indicates periods when the system has non-uniform snow and + both operating voltage and current are decreased. Operating voltage is + reduced when bypass diodes activate and current is decreased due to + decreased irradiance. + * Mode 2: Indicates periods when the operating voltage is reduced but + current is consistent with snow-free conditions. + * Mode 3: Indicates periods when the operating voltage is consistent with + snow-free conditionss but current is reduced. + * Mode 4: Voltage and current are consistent with snow-free conditions. + + Mode is None when both measured and voltage modeled from measured + irradiance are below the inverter turn-on voltage. The procedure involves four steps: 1. Using measured plane-of-array (POA) irradiance and temperature, model @@ -380,12 +385,11 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 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. Uses transmission to model voltage with the SAPM. - # TODO How is this voltage different than measured (snow-affected voltage)? - # Answer: All cells are modeled to get the incoming irradiance - 4. Determine the snow mode for each point. + 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 ---------- diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index ca7543bf8..0922d7cd0 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -155,20 +155,21 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, Modes are defined in [1]_: - * Mode 0: system is covered with enough opaque snow that the system is - offline due to voltage below the inverter's turn-on voltage. Excludes - periods when voltage modeled using measured irradiance does not - exceed the inverter's turn-on voltage. - * Mode 1: system is online and covered with non-uniform snow, such that - both operating voltage and current are decreased by the presence of snow. - * Mode 2: system is online and covered with opaque snow, such that - operating voltage is decreased by the presence of snow, but transmission - is consistent with snow-free conditions. - * Mode 3: system is online and covered with light-transmissive snow, such - that transmission is decreased but voltage is consistent with all - system substrings being online. - * Mode 4: transmisison and voltage are consistent with snow-free - conditions. + * 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 inverter's turn-on voltage but the voltage modeled using + measured irradiance is below the inverter's turn-on voltage. + * Mode 1: Indicates periods when the system has non-uniform snow and + both operating voltage and current are decreased. Operating voltage is + reduced when bypass diodes activate and current is decreased due to + decreased irradiance. + * Mode 2: Indicates periods when the operating voltage is reduced but + current is consistent with snow-free conditions. + * Mode 3: Indicates periods when the operating voltage is consistent with + snow-free conditionss but current is reduced. + * Mode 4: Voltage and current are consistent with snow-free conditions. + * Mode is None when both measured and voltage modeled from measured + irradiance are below the inverter turn-on voltage. Parameters ---------- @@ -196,7 +197,7 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, Returns ------- - mode : int + mode : int or None .. [1] E. C. Cooper, J. L. Braid and L. M. Burnham, "Identifying the Electrical Signature of Snow in Photovoltaic Inverter Data," 2023 IEEE From 9a51cf96a31f5513c01ba4a5040bfe367d1df456 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 17 Apr 2024 10:30:34 -0600 Subject: [PATCH 28/72] use pvlib function, punctuation --- docs/examples/snow-detection/snow-mode.py | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 159e0172e..f99c95fea 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -247,20 +247,12 @@ # %% """ -Model cell temperature using procedure outlined in Eqn. 12 of [1] -and model effective irradiance using Eqn. 23 of [2]. - -[1] D. L. King, E.E. Boyson, and J.A. Kratochvil, Photovoltaic Array -Performance Model, SAND2004-3535, Sandia National Laboratories, -Albuquerque, NM, 2004. -[2] B. H. King, C. W. Hansen, D. Riley, C. D. Robinson and L. Pratt, -“Procedure to Determine Coefficients for the Sandia Array Performance -Model (SAPM)," SAND2016-5284, June 2016. +Model cell temperature using the SAPM model. """ irrad_ref = 1000 -data['Cell Temp [C]'] = data['Module Temp [C]'] + \ - 3*data['POA [W/m²]']/irrad_ref +data['Cell Temp [C]'] = pvlib.temperature.sapm_cell_from_module( + data['Module Temp [C]'], data['POA [W/m²]'], 3) # %% Plot cell temperature fig, ax = plt.subplots(figsize=(10, 10)) @@ -411,10 +403,10 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 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 + determined empirically. threshold_transmission : float The lower bound on transmission that is found under snow-free - conditions, determined empirically + conditions, determined empirically. num_mods_per_str : int Number of modules in series in each string. num_str_per_cb : int @@ -423,7 +415,8 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, Returns ------- my_dict : dict - Keys are "transmission", "modeled_vmp", "vmp_ratio", and "mode" + Keys are ``'transmission'``, ``'modeled_vmp'``, ``'vmp_ratio'``, + and ``'mode'`` ''' @@ -727,5 +720,3 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_xticks(xvals, days) ax.xaxis.set_major_formatter(date_form) ax.set_title('Losses incurred in modes 0 -3', fontsize='xx-large') - -# %% From 12159bede65385bf1fbe1fc29b0925ad79217d64 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Thu, 18 Apr 2024 10:19:32 -0600 Subject: [PATCH 29/72] lint, add note at head --- docs/examples/snow-detection/snow-mode.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index f99c95fea..fd218413f 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -2,14 +2,19 @@ Quantifying the effects of snow cover ===================================== -We classify the effect of snow on a PV system's DC array. +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. -The effect of snow is classified into one of five categories: +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 inverter's turn-on voltage but the voltage modeled using - measured irradiance is below the inverter's turn-on voltage. + measured irradiance is below the inverter's turn-on voltage. * Mode 1: Indicates periods when the system has non-uniform snow and both operating voltage and current are decreased. Operating voltage is reduced when bypass diodes activate and current is decreased due to @@ -19,7 +24,7 @@ * Mode 3: Indicates periods when the operating voltage is consistent with snow-free conditionss but current is reduced. * Mode 4: Voltage and current are consistent with snow-free conditions. - + Mode is None when both measured and voltage modeled from measured irradiance are below the inverter turn-on voltage. From 91c9c7a0d94dd8a32abb3a25564e53fecff126dd Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Thu, 18 Apr 2024 10:25:44 -0600 Subject: [PATCH 30/72] lint --- docs/examples/snow-detection/snow-mode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index fd218413f..c89518cc7 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -5,7 +5,7 @@ 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. +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 From 725240f1a285a108027290784080fba3fb475e10 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Thu, 18 Apr 2024 10:50:49 -0600 Subject: [PATCH 31/72] api, whatsnew --- docs/api.rst | 11 +++++++++++ docs/whatsnew/0.2.1.rst | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 docs/whatsnew/0.2.1.rst diff --git a/docs/api.rst b/docs/api.rst index 78d482fac..4da94001f 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -269,6 +269,17 @@ Functions for labeling shadows. features.shading.fixed +Snow +---- + +Functions for identifying and quantifying the effects of snow. +.. autosummary:: + :toctree: generated/ + + features.snow.categorize + features.snow.get_transmission + + System ====== diff --git a/docs/whatsnew/0.2.1.rst b/docs/whatsnew/0.2.1.rst new file mode 100644 index 000000000..b54555024 --- /dev/null +++ b/docs/whatsnew/0.2.1.rst @@ -0,0 +1,33 @@ +.. _whatsnew_021: + +0.2.1 (XXXX, 2024) +------------------------- + +Breaking Changes +~~~~~~~~~~~~~~~~ + + +Enhancements +~~~~~~~~~~~~ +* 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 +~~~~~~~~~ + +Requirements +~~~~~~~~~~~~ + +Documentation +~~~~~~~~~~~~~ +* Added a gallery example for snow effects categorization (:pull:`209`) + +Testing +~~~~~~~ + + +Contributors +~~~~~~~~~~~~ +* Cliff Hansen (:ghuser:`cwhanse`) +* Emma Cooper (:ghuser:`eccoope`) From 8b309cb1d775639e4be5de9f037db8adac6d575a Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Mon, 29 Apr 2024 10:07:44 -0600 Subject: [PATCH 32/72] implemented mode -1 --- docs/examples/snow-detection/snow-mode.py | 50 ++++++++++------------- pvanalytics/features/snow.py | 21 +++++++--- pvanalytics/tests/features/test_snow.py | 26 +++++++----- 3 files changed, 52 insertions(+), 45 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index c89518cc7..3df031d12 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -52,6 +52,7 @@ import numpy as np import re import pvlib +from matplotlib import colormaps as cm import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter import matplotlib.patches as mpatches @@ -187,7 +188,7 @@ # Data where inverter is clipping based on AC power mask1 = data[a] > max_ac_power - mask2 = clipping.geometric(ac_power=data[a], freq='15T') + mask2 = clipping.geometric(ac_power=data[a], freq='15min') mask3 = np.logical_or(mask1.values, mask2.values) data.loc[mask3, v] = np.nan @@ -595,7 +596,11 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, loss = np.maximum(data[name_modeled_power] - data[i_col]*data[v_col], 0) data[name_loss] = loss -# %% +# %% Plot measured and modeled power, color by mode + +N = 6 +alpha = 0.5 +cmap = cm.get_cmap('plasma').resampled(N) loss_cols = [c for c in data.columns if "Loss" in c] mode_cols = [c for c in data.columns if "mode" in c and "modeled" not in c] @@ -606,13 +611,6 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, mod = mode_cols[col] pwr = modeled_power_cols[col] -# Color intervals by mode -cmap = {0: 'r', - 1: 'b', - 2: 'yellow', - 3: 'cyan', - 4: 'g'} - fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) @@ -628,15 +626,16 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.plot(temp_grouped[pwr], c='k', ls='--') ax.plot(temp_grouped[pwr] - temp_grouped[los], c='k') ax.fill_between(temp_grouped.index, temp_grouped[pwr] - temp_grouped[los], - temp_grouped[pwr], color='k', alpha=0.2) + temp_grouped[pwr], color='k', alpha=alpha) chng_pts = np.ravel(np.where(temp_grouped[mod].values[:-1] - temp_grouped[mod].values[1:] != 0)) if len(chng_pts) == 0: ax.axvspan(temp_grouped.index[0], temp_grouped.index[-1], - color=cmap[temp_grouped.at[temp_grouped.index[-1], mod]], - alpha=0.05) + color=cmap.colors[temp_grouped.at[temp_grouped.index[-1], + mod]], + alpha=alpha) else: set1 = np.append([0], chng_pts) set2 = np.append(chng_pts, [-1]) @@ -645,29 +644,22 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, my_index = temp_grouped.index[start:end] ax.axvspan( temp_grouped.index[start], temp_grouped.index[end], - color=cmap[temp_grouped.at[temp_grouped.index[end], mod]], - alpha=0.05) + color=cmap.colors[temp_grouped.at[temp_grouped.index[end], + mod]], + alpha=alpha, ec=None) # Add different colored intervals to legend handles, labels = ax.get_legend_handles_labels() modeled_line = Line2D([0], [0], label='Modeled', color='k', ls='--') measured_line = Line2D([0], [0], label='Measured', color='k') - -# TODO don't mark offline periods as Mode 0 -red_patch = mpatches.Patch(color='r', alpha=0.05, label='Mode 0') -blue_patch = mpatches.Patch(color='b', alpha=0.05, label='Mode 1') -yellow_patch = mpatches.Patch(color='y', alpha=0.05, label='Mode 2') -purple_patch = mpatches.Patch(color='cyan', alpha=0.05, label='Mode 3') -green_patch = mpatches.Patch(color='g', alpha=0.05, label='Mode 4') - handles.append(measured_line) handles.append(modeled_line) -handles.append(red_patch) -handles.append(green_patch) -handles.append(blue_patch) -handles.append(yellow_patch) -handles.append(purple_patch) + +for i in range(-1, N-1): + my_patch = mpatches.Patch(color=cmap.colors[i], label=f'Mode {i}') + handles.append(my_patch) + # handles.append(gray_patch) ax.set_xlabel('Date', fontsize='xx-large') @@ -724,4 +716,6 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_ylabel('[%]', fontsize='xx-large') ax.set_xticks(xvals, days) ax.xaxis.set_major_formatter(date_form) -ax.set_title('Losses incurred in modes 0 -3', fontsize='xx-large') +ax.set_title('Losses incurred in modes -1, 0, 1, 2, 3', fontsize='xx-large') + +# %% diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 0922d7cd0..fc3c7355b 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -158,7 +158,7 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, * 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 inverter's turn-on voltage but the voltage modeled using - measured irradiance is below the inverter's turn-on voltage. + measured irradiance is above the inverter's turn-on voltage. * Mode 1: Indicates periods when the system has non-uniform snow and both operating voltage and current are decreased. Operating voltage is reduced when bypass diodes activate and current is decreased due to @@ -171,6 +171,12 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, * Mode is None when both measured and voltage modeled from measured irradiance are below the inverter turn-on voltage. + An additional mode was added to cover a case that was not addressed in + [1]_: + * Mode -1: Indicates periods where voltage modeled with measured irradiance + is below the inverter's turn-on voltage. Under Mode -1, it is unknown if + and how snow impacts power output. + Parameters ---------- vmp_ratio : array-like @@ -207,10 +213,10 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, umin_meas = measured_voltage >= min_dcv umin_model = modeled_voltage >= min_dcv - # offline if both measurement and model say that voltage is too low. - # if either measured or modeled is above the minimum, then system is + # offline if model says that voltage is too low. + # if modeled is above the minimum, then system is # possibly generating - offline = ~umin_meas & ~umin_model + # offline = ~umin_meas & ~umin_model # vmp_ratio discrimates between states (1,2) and (3,4) uvr = np.where(vmp_ratio >= threshold_vratio, 3, 1) @@ -218,12 +224,15 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, # transmission discrimates within (1,2) and (3,4) utrans = np.where(transmission >= threshold_transmission, 1, 0) - # None if nan or system is offline + # None if nan + # if offline: + # - -1 if umin_model is 0 # if not offline: # - 0 if umin_meas is 0, i.e., measurement indicate no power but # it must be that umin_model is 1 # - state 1, 2, 3, 4 defined by uvr + utrans - mode = np.where(offline | np.isnan(vmp_ratio) | np.isnan(transmission), + mode = np.where(np.isnan(vmp_ratio) | np.isnan(transmission), None, umin_meas * (uvr + utrans)) + mode = np.where(~umin_model, -1, mode) return mode diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index f3787747f..a301df57a 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -66,20 +66,24 @@ def test_get_transmission(): def test_categorize(): - vmp_ratio = np.array([np.nan, 0.9, 0.1, 0.6, 0.7, 0.9, 0.9]) - measured_voltage = np.array([400., 450., 400., 420., 420., 495., 270.]) - modeled_voltage = np.array([np.nan, 500, 4000, 700, 600, 550, 300]) - transmission = np.array([0.5, np.nan, 0.5, 0.9, 0.5, 0.9, 0.9]) + vmp_ratio = np.array([np.nan, 0.9, 0.1, 0.6, 0.7, 0.9, 0.9, 0.5]) + measured_voltage = np.array([400., 450., 400., 420., 420., 495., 270., + 275.]) + modeled_voltage = np.array([np.nan, 500, 4000, 700, 600, 550, 300, 550]) + transmission = np.array([0.5, np.nan, 0.5, 0.9, 0.5, 0.9, 0.9, 0.9]) min_dcv = 300 threshold_vratio = 0.7 threshold_transmission = 0.6 - # ratio: np.nan, >thres, >thres, >thres, >thres, >thres, thres, >thres, >thres, >thres, >thres, thres, >thres, >thres, >thres, >thres, thres, vr>thres, vr>thres - # trthres - # None (vr), None (vmo), 1, 3, 3, 3, None - expected = np.array([None, None, 1, 2, 3, 4, 0]) + # vmp_ratio: np.nan, >thres, thres, >thres, thres, >thres, >thres, >thres, >thres, >thres, thres, >thres, >thres, >thres, >thres, thres + # transmission: thres, thres, >thres, + # >thres, > thres + # None (vmp_ratio, modeled_voltage), None (transmission), 1, 2, 3, 4, -1, + # 0 + expected = np.array([None, None, 1, 2, 3, 4, -1, 0]) result = snow.categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, min_dcv, threshold_vratio, threshold_transmission) From c7daed47b7513006558218126b15da580f4b36b9 Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Mon, 29 Apr 2024 10:23:15 -0600 Subject: [PATCH 33/72] fixed import error that failed readthedocs --- docs/examples/snow-detection/snow-mode.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 3df031d12..1b732885e 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -52,7 +52,6 @@ import numpy as np import re import pvlib -from matplotlib import colormaps as cm import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter import matplotlib.patches as mpatches @@ -600,7 +599,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, N = 6 alpha = 0.5 -cmap = cm.get_cmap('plasma').resampled(N) +cmap = plt.get_cmap('plasma', N) loss_cols = [c for c in data.columns if "Loss" in c] mode_cols = [c for c in data.columns if "mode" in c and "modeled" not in c] @@ -660,8 +659,6 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, my_patch = mpatches.Patch(color=cmap.colors[i], label=f'Mode {i}') handles.append(my_patch) -# handles.append(gray_patch) - ax.set_xlabel('Date', fontsize='xx-large') ax.set_ylabel('DC Power [W]', fontsize='xx-large') ax.legend(handles=handles, fontsize='xx-large', loc='upper left') From 3a3f54ba88c114e707d4a2e4f82ad6eec7889472 Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Mon, 29 Apr 2024 10:26:59 -0600 Subject: [PATCH 34/72] linting (W291 flags on snow.py) --- pvanalytics/features/snow.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index fc3c7355b..068485ee8 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -158,7 +158,7 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, * 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 inverter's turn-on voltage but the voltage modeled using - measured irradiance is above the inverter's turn-on voltage. + measured irradiance is above the inverter's turn-on voltage. * Mode 1: Indicates periods when the system has non-uniform snow and both operating voltage and current are decreased. Operating voltage is reduced when bypass diodes activate and current is decreased due to @@ -173,7 +173,7 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, An additional mode was added to cover a case that was not addressed in [1]_: - * Mode -1: Indicates periods where voltage modeled with measured irradiance + * Mode -1: Indicates periods where voltage modeled with measured irradiance is below the inverter's turn-on voltage. Under Mode -1, it is unknown if and how snow impacts power output. From 9d8c5084e08c0eebacdef07835ab4c7b5698f315 Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Fri, 3 May 2024 13:58:33 -0600 Subject: [PATCH 35/72] more mode -1 changes --- docs/examples/snow-detection/snow-mode.py | 61 +++++++++--------- pvanalytics/features/snow.py | 75 +++++++++++++++-------- pvanalytics/tests/features/test_snow.py | 36 ++++++----- 3 files changed, 103 insertions(+), 69 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 1b732885e..d7464dde8 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -125,8 +125,11 @@ data[dc_current_cols] = data[dc_current_cols].replace({np.nan: 0, None: 0}) data.loc[:, ac_power_cols] = data[ac_power_cols].replace({np.nan: 0, None: 0}) -# %% Plot DC voltage for each combiner input relative to inverter nameplate + +# %% +# Plot DC voltage for each combiner input relative to inverter nameplate # limits + fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) @@ -140,6 +143,7 @@ ax.set_xlabel('Date', fontsize='large') ax.set_ylabel('Voltage [V]', fontsize='large') ax.legend(loc='lower left') +plt.show() # %% Plot AC power relative to inverter nameplate limits @@ -154,6 +158,7 @@ ax.set_xlabel('Date', fontsize='large') ax.set_ylabel('AC Power [kW]', fontsize='large') ax.legend(loc='upper left') +plt.show() # %% Filter data. # Identify periods where the system is operating off of its maximum power @@ -209,6 +214,7 @@ ax.set_xlabel('Date', fontsize='large') ax.set_ylabel('Voltage [V]', fontsize='large') ax.legend(loc='lower left') +plt.show() # %% We want to exclude periods where array voltage is affected by horizon # shading @@ -235,6 +241,7 @@ ax.legend() ax.set_xlabel(r'Azimuth [$\degree$]') ax.set_ylabel(r'Elevation [$\degree$]') +plt.show() # %% Exclude data collected while the sun is below the horizon data = data[data['Horizon Mask']] @@ -267,6 +274,7 @@ ax.plot(data['Cell Temp [C]'], alpha=0.3, c='b') ax.set_ylabel('Cell Temp [C]', c='b', fontsize='xx-large') ax.set_xlabel('Date', fontsize='xx-large') +plt.show() # %% For one combiner, demonstrate the transmission calculation using two # different approaches to modeling effective irradiance from measured Imp. @@ -315,6 +323,7 @@ ax.legend() ax.set_ylabel('Transmission', fontsize='xx-large') ax.set_xlabel('Date + Time', fontsize='large') +plt.show() # %% # Model voltage using calculated transmission (two different approaches) @@ -369,6 +378,7 @@ ax.legend(fontsize='xx-large') ax.set_ylabel('Voltage [V]', fontsize='xx-large') ax.set_xlabel('Date', fontsize='large') +plt.show() # %% Function to do analysis so we can loop over combiner boxes @@ -433,35 +443,25 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, T = snow.get_transmission(effective_irradiance, modeled_e_e, current/config['num_str_per_cb']) - name_T = inv_cb + ' Transmission' - data[name_T] = T - # Model voltage for a single module, scale up to array - modeled_vmp = pvlib.pvsystem.sapm(effective_irradiance*T, temp_cell, - coeffs)['v_mp'] - modeled_vmp *= config['num_mods_per_str'] - - # Voltage is modeled as NaN if T = 0, but V = 0 makes more sense - modeled_vmp[T == 0] = 0 - - # Identify periods where modeled voltage is outside of MPPT range, - # and correct values - modeled_vmp[modeled_vmp > config['max_dcv']] = np.nan - modeled_vmp[modeled_vmp < config['min_dcv']] = 0 - - # Calculate voltage ratio - with np.errstate(divide='ignore'): - vmp_ratio = voltage / modeled_vmp - - # take care of divide by zero - vmp_ratio[modeled_vmp == 0] = np.nan + modeled_voltage_with_calculated_transmission =\ + pvlib.pvsystem.sapm(effective_irradiance*T, temp_cell, + coeffs)['v_mp'] * config['num_mods_per_str'] + modeled_voltage_with_ideal_transmission =\ + pvlib.pvsystem.sapm(effective_irradiance, temp_cell, + coeffs)['v_mp'] * config['num_mods_per_str'] + + mode, vmp_ratio = snow.categorize( + T, voltage, modeled_voltage_with_calculated_transmission, + modeled_voltage_with_ideal_transmission, config['min_dcv'], + config['max_dcv'], config['threshold_vratio'], + config['threshold_transmission']) - mode = snow.categorize(vmp_ratio, T, voltage, modeled_vmp, - config['min_dcv'], - config['threshold_vratio'], - config['threshold_transmission']) my_dict = {'transmission': T, - 'modeled_vmp': modeled_vmp, + '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} @@ -544,7 +544,8 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # %% # Look at transmission for all DC inputs -transmission_cols = [c for c in data.columns if 'transmission' in c] +transmission_cols = [c for c in data.columns if 'transmission' in c and + 'voltage' not in c] fig, ax = plt.subplots(figsize=(10, 10)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) @@ -554,6 +555,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.scatter(temp.index, temp[c], s=0.5, label=c) ax.set_xlabel('Date', fontsize='xx-large') ax.legend() +plt.show() # %% # Look at voltage ratios for all DC inputs @@ -571,6 +573,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_ylabel('Voltage Ratio (measured/modeled)', fontsize='xx-large') ax.axhline(1, c='k', alpha=0.1, ls='--') ax.legend() +plt.show() # %% Calculate all power losses - snow and non-snow @@ -664,6 +667,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.legend(handles=handles, fontsize='xx-large', loc='upper left') ax.set_title('Measured and modeled production for INV1 CB2', fontsize='xx-large') +plt.show() # %% @@ -714,5 +718,6 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_xticks(xvals, days) ax.xaxis.set_major_formatter(date_form) ax.set_title('Losses incurred in modes -1, 0, 1, 2, 3', fontsize='xx-large') +plt.show() # %% diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 068485ee8..ea194c4a6 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -147,8 +147,10 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): return T -def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, - min_dcv, threshold_vratio, threshold_transmission): +def categorize(transmission, measured_voltage, + modeled_voltage_with_calculated_transmission, + modeled_voltage_with_ideal_transmission, + min_dcv, max_dcv, threshold_vratio, threshold_transmission): """ Categorizes electrical behavior into a snow-related mode. @@ -173,9 +175,14 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, An additional mode was added to cover a case that was not addressed in [1]_: - * Mode -1: Indicates periods where voltage modeled with measured irradiance - is below the inverter's turn-on voltage. Under Mode -1, it is unknown if - and how snow impacts power output. + * Mode -1: Indicates periods where it is unknown if and how snow impacts + power output. Mode -1 includes periods when + (a) voltage modeled with measured irradiance is below the inverter's + turn-on voltage OR + (b) voltage modeled with measured irradiance exceeds the upper bound of + the inverter's MPPT algorithm OR + (c) measured voltage exceeds the upper bound of the inverter's MPPT + algorithm Parameters ---------- @@ -187,12 +194,18 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, through the snow cover. [dimensionless] measured_voltage : array-like Measured DC voltage. [V] - modeled_voltage : array-like + modeled_voltage_with_calculated_transmission : array-like + DC voltage modeled using measured plane-of-array irradiance, + back-of-module temperature, and calculated transmission. [V] + modeled_voltage_with_ideal_transmission : array-like DC voltage modeled using measured plane-of-array irradiance and - back-of-module temperature. [V] + back-of-module temperature. Assumes 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 @@ -211,12 +224,20 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, 2023, pp. 1-5, :doi:`10.1109/PVSC48320.2023.10360065`. """ umin_meas = measured_voltage >= min_dcv - umin_model = modeled_voltage >= min_dcv + umax_meas = measured_voltage < max_dcv + + umin_model = modeled_voltage_with_ideal_transmission >= min_dcv + umax_model = modeled_voltage_with_ideal_transmission < max_dcv + + # Voltage is modeled as NaN if T = 0, but V = 0 makes more sense + modeled_voltage_with_calculated_transmission[transmission == 0] = 0 + + with np.errstate(divide='ignore'): + vmp_ratio =\ + measured_voltage / modeled_voltage_with_calculated_transmission - # offline if model says that voltage is too low. - # if modeled is above the minimum, then system is - # possibly generating - # offline = ~umin_meas & ~umin_model + # take care of divide by zero + vmp_ratio[modeled_voltage_with_calculated_transmission == 0] = 1 # vmp_ratio discrimates between states (1,2) and (3,4) uvr = np.where(vmp_ratio >= threshold_vratio, 3, 1) @@ -224,15 +245,21 @@ def categorize(vmp_ratio, transmission, measured_voltage, modeled_voltage, # transmission discrimates within (1,2) and (3,4) utrans = np.where(transmission >= threshold_transmission, 1, 0) - # None if nan - # if offline: - # - -1 if umin_model is 0 - # if not offline: - # - 0 if umin_meas is 0, i.e., measurement indicate no power but - # it must be that umin_model is 1 - # - state 1, 2, 3, 4 defined by uvr + utrans - mode = np.where(np.isnan(vmp_ratio) | np.isnan(transmission), - None, umin_meas * (uvr + utrans)) - mode = np.where(~umin_model, -1, mode) - - return mode + # None if transmission, vmp_ratio, modeled_voltage_with_ideal_transmission, + # modeled_voltage_with_calculated_transmission, or measured_voltage is nan + # -1 if umin_model is 0 + # 0 if umin_meas is 0, i.e., measurement indicate no power but it must be + # that umin_model is 1 + # state 1, 2, 3, 4 defined by uvr + utrans + # -1 if umax_model is 0 + # -1 if umax_meas is 0 + + mode = umin_meas * (uvr + utrans) + mode = np.where(~umin_model | ~umax_model | ~umax_meas, -1, mode) + mode = np.where(np.isnan(vmp_ratio) | np.isnan(transmission) | + np.isnan(measured_voltage) | + np.isnan(modeled_voltage_with_calculated_transmission) | + np.isnan(modeled_voltage_with_ideal_transmission), + None, mode) + + return mode, vmp_ratio diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index a301df57a..7e51cac1f 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -66,25 +66,27 @@ def test_get_transmission(): def test_categorize(): - vmp_ratio = np.array([np.nan, 0.9, 0.1, 0.6, 0.7, 0.9, 0.9, 0.5]) measured_voltage = np.array([400., 450., 400., 420., 420., 495., 270., - 275.]) - modeled_voltage = np.array([np.nan, 500, 4000, 700, 600, 550, 300, 550]) - transmission = np.array([0.5, np.nan, 0.5, 0.9, 0.5, 0.9, 0.9, 0.9]) + 200., 850., 0., 700.]) + modeled_voltage_with_calculated_transmission = np.array([np.nan, 500, 4000, + 700, 600, 550, + 300, 200, 600, + 0, 700]) + modeled_voltage_with_ideal_transmission = np.array([700, 600, 6000, 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 - # vmp_ratio: np.nan, >thres, thres, >thres, thres, >thres, >thres, >thres, >thres, >thres, thres, >thres, >thres, >thres, >thres, thres - # transmission: thres, thres, >thres, - # >thres, > thres - # None (vmp_ratio, modeled_voltage), None (transmission), 1, 2, 3, 4, -1, - # 0 - expected = np.array([None, None, 1, 2, 3, 4, -1, 0]) - result = snow.categorize(vmp_ratio, transmission, measured_voltage, - modeled_voltage, min_dcv, - threshold_vratio, threshold_transmission) + + 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 55ceafacd04cf275e1a729e2428664c44b39b6ec Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Fri, 3 May 2024 14:10:55 -0600 Subject: [PATCH 36/72] linting --- docs/examples/snow-detection/snow-mode.py | 10 +++------- pvanalytics/tests/features/test_snow.py | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index d7464dde8..9f49ff233 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -126,7 +126,7 @@ data.loc[:, ac_power_cols] = data[ac_power_cols].replace({np.nan: 0, None: 0}) -# %% +# %% # Plot DC voltage for each combiner input relative to inverter nameplate # limits @@ -541,8 +541,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, data[inv_cb + ' ' + k] = v -# %% -# Look at transmission for all DC inputs +# %% Look at transmission for all DC inputs transmission_cols = [c for c in data.columns if 'transmission' in c and 'voltage' not in c] @@ -557,8 +556,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.legend() plt.show() -# %% -# Look at voltage ratios for all DC inputs +# %% Look at voltage ratios for all DC inputs vratio_cols = [c for c in data.columns if "vmp_ratio" in c] fig, ax = plt.subplots(figsize=(10, 10)) @@ -719,5 +717,3 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.xaxis.set_major_formatter(date_form) ax.set_title('Losses incurred in modes -1, 0, 1, 2, 3', fontsize='xx-large') plt.show() - -# %% diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index 7e51cac1f..295578efb 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -77,7 +77,7 @@ def test_categorize(): 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 From 41fdfe00ea4e75449740dec34141be6b2300f657 Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Mon, 6 May 2024 08:38:38 -0600 Subject: [PATCH 37/72] Fixing readthedocs rendering --- docs/examples/snow-detection/snow-mode.py | 49 +++++++++++------------ 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 9f49ff233..9eb2de1d4 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -14,7 +14,7 @@ * 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 inverter's turn-on voltage but the voltage modeled using - measured irradiance is below the inverter's turn-on voltage. + measured irradiance is above the inverter's turn-on voltage. * Mode 1: Indicates periods when the system has non-uniform snow and both operating voltage and current are decreased. Operating voltage is reduced when bypass diodes activate and current is decreased due to @@ -24,6 +24,12 @@ * Mode 3: Indicates periods when the operating voltage is consistent with snow-free conditionss but current is reduced. * Mode 4: Voltage and current are consistent with snow-free conditions. + * Mode -1: Indicates periods where it is unknown whether snow is impacting + system performance. This includes periods where voltage modeled with + measured irradiance assuming perfect transmission is below the inverter's + turn-on voltage, or when the same quantity is greater than the upper + bound on the inverter's MPPT range. Mode -1 also includes periods when + measured voltage exceeds the upper bound on the inverter's MPPT range. Mode is None when both measured and voltage modeled from measured irradiance are below the inverter turn-on voltage. @@ -167,21 +173,11 @@ # operating point. To allow us to make a valid comparison between system # measurements and modeled power at MMP, we set measurements collected below # the MPPT minimum voltage to zero, which emulates the condition where the -# inverter turns off when it cannot meet the turn-on voltage. When the inverter -# is clipping power, we replace voltage and current measurements with NaN as -# these measurements reflect current and voltage that has been artificially -# adjusted away from the MMP. This masking may result in an omission of some -# snow loss conditions where a very light-transmissive snow cover allows the -# system to reach the inverter's clipping voltage. +# inverter turns off when it cannot meet the turn-on voltage. ac_power_cols_repeated = ac_power_cols + ac_power_cols + ac_power_cols for v, i, a in zip(dc_voltage_cols, dc_current_cols, ac_power_cols_repeated): - # Data where V > MPPT maximum - data.loc[data[v] > mppt_high_voltage, v] = np.nan - data.loc[data[v] > mppt_high_voltage, i] = np.nan - data.loc[data[v] > mppt_high_voltage, a] = np.nan - # Data where V < MPPT minimum data.loc[data[v] < mppt_low_voltage, v] = 0 data.loc[data[v] < mppt_low_voltage, i] = 0 @@ -216,16 +212,14 @@ ax.legend(loc='lower left') plt.show() -# %% We want to exclude periods where array voltage is affected by horizon -# shading -''' -Load in and apply horizon profiling created using approach described in [1]. - -[1] J. L. Braid and B. G. Pierce, "Horizon Profiling Methods for Photovoltaic -Arrays," 2023 IEEE 50th Photovoltaic Specialists Conference (PVSC), -San Juan, PR, USA, 2023, pp. 1-7. doi:`10.1109/PVSC48320.2023.10359914` +# %% -''' +# We want to exclude periods where array voltage is affected by horizon +# shading. Load in and apply horizon profiling created using approach described +# in [1]. +# [1] J. L. Braid and B. G. Pierce, "Horizon Profiling Methods for Photovoltaic +# Arrays," 2023 IEEE 50th Photovoltaic Specialists Conference (PVSC), +# San Juan, PR, USA, 2023, pp. 1-7. doi:`10.1109/PVSC48320.2023.10359914` horizon = pd.read_csv(horizon_file, index_col='Unnamed: 0').squeeze("columns") @@ -276,7 +270,8 @@ ax.set_xlabel('Date', fontsize='xx-large') plt.show() -# %% For one combiner, demonstrate the transmission calculation using two +# %% +# For one combiner, demonstrate the transmission calculation using two # different approaches to modeling effective irradiance from measured Imp. # Choose one combiner box @@ -387,8 +382,8 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, coeffs, config, 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. + 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: @@ -692,7 +687,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, temp = data_gped.get_group(d) for c, m, l, p in zip(columns, mode_cols, loss_cols, modeled_power_cols): - snow_loss_filter = ~(temp[m].isna()) & (temp[m] != 4) + snow_loss_filter = ~(temp[m].isna()) & (temp[m] != 4) & (temp[m] != -1) daily_snow_loss = 100*temp[snow_loss_filter][l].sum()/temp[p].sum() snow_loss.at[d, c] = daily_snow_loss @@ -715,5 +710,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_ylabel('[%]', fontsize='xx-large') ax.set_xticks(xvals, days) ax.xaxis.set_major_formatter(date_form) -ax.set_title('Losses incurred in modes -1, 0, 1, 2, 3', fontsize='xx-large') +ax.set_title('Losses incurred in modes 0, 1, 2, 3', fontsize='xx-large') plt.show() + +# %% From 9abaac3761ac484b2462a75285d51c03ced22f4b Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Mon, 6 May 2024 11:45:02 -0600 Subject: [PATCH 38/72] fixed failing test --- pvanalytics/tests/features/test_snow.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index 295578efb..54b390fcd 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -66,13 +66,13 @@ def test_get_transmission(): def test_categorize(): - measured_voltage = np.array([400., 450., 400., 420., 420., 495., 270., + 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, 4000, + 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, 6000, 750, + 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, From f2dbcfe84c3f2db197100b596abf42e6452bf2ce Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 15 May 2024 11:11:25 -0700 Subject: [PATCH 39/72] Apply suggestions from code review --- docs/api.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/api.rst b/docs/api.rst index 4da94001f..25c09728d 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -273,6 +273,7 @@ Snow ---- Functions for identifying and quantifying the effects of snow. + .. autosummary:: :toctree: generated/ From 55377fdce94dabe963a0dd5c3374e601e8aff642 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 15 May 2024 12:42:24 -0700 Subject: [PATCH 40/72] doc build --- docs/api.rst | 1 + docs/index.rst | 2 ++ 2 files changed, 3 insertions(+) diff --git a/docs/api.rst b/docs/api.rst index 4da94001f..25c09728d 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -273,6 +273,7 @@ Snow ---- Functions for identifying and quantifying the effects of snow. + .. autosummary:: :toctree: generated/ diff --git a/docs/index.rst b/docs/index.rst index 305dcb314..be4e5b43f 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) From 3da321fc8e8622bad39b1b5e86c21dc198858f27 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 15 May 2024 16:56:13 -0700 Subject: [PATCH 41/72] spaces --- docs/api.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api.rst b/docs/api.rst index 25c09728d..71124ab5d 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/ From d0f3ebc6fee4a309a9fa5a33d40ca2b855bceb34 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 15 May 2024 20:24:35 -0700 Subject: [PATCH 42/72] maybe its this extra line? --- docs/api.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/api.rst b/docs/api.rst index 71124ab5d..5def31d83 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -280,7 +280,6 @@ Functions for identifying and quantifying the effects of snow. features.snow.categorize features.snow.get_transmission - System ====== From 097ec36051820f2f92f8b844730149242b112cec Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Thu, 16 May 2024 08:45:21 -0700 Subject: [PATCH 43/72] docstring edits --- docs/examples/snow-detection/snow-mode.py | 14 +++--- pvanalytics/features/snow.py | 57 ++++++++++++----------- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 9eb2de1d4..2ad3beebf 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -11,6 +11,12 @@ from snow-free irradiance measurements are ascribed to the effects of snow. The effect of snow is classified into one of five categories: + * Mode -1: Indicates periods where it is unknown whether snow is impacting + system performance. This includes periods where voltage modeled with + measured irradiance assuming perfect transmission is below the inverter's + turn-on voltage, or when the same quantity is greater than the upper + bound on the inverter's MPPT range. Mode -1 also includes periods when + measured voltage exceeds the upper bound on the inverter's MPPT range. * 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 inverter's turn-on voltage but the voltage modeled using @@ -24,12 +30,6 @@ * Mode 3: Indicates periods when the operating voltage is consistent with snow-free conditionss but current is reduced. * Mode 4: Voltage and current are consistent with snow-free conditions. - * Mode -1: Indicates periods where it is unknown whether snow is impacting - system performance. This includes periods where voltage modeled with - measured irradiance assuming perfect transmission is below the inverter's - turn-on voltage, or when the same quantity is greater than the upper - bound on the inverter's MPPT range. Mode -1 also includes periods when - measured voltage exceeds the upper bound on the inverter's MPPT range. Mode is None when both measured and voltage modeled from measured irradiance are below the inverter turn-on voltage. @@ -171,7 +171,7 @@ # point (MPP), and correct or mask. Conditions outside of the MPP cannot # be accurately modeled without external information on the system's # operating point. To allow us to make a valid comparison between system -# measurements and modeled power at MMP, we set measurements collected below +# measurements and modeled power at MPP, we set measurements collected below # the MPPT minimum voltage to zero, which emulates the condition where the # inverter turns off when it cannot meet the turn-on voltage. diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index ea194c4a6..8d4e22323 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -8,12 +8,12 @@ def get_horizon_mask(horizon, azimuth, elevation): Parameters ---------- - horizon : pd.Series + horizon : array-like Series with int index of 0 - 359 (represents azimuth) and float values (represents elevation [deg] of horizon profile). - azimuth : numeric + azimuth : array-like Solar azimuth angle. [deg] - elevation : numeric + elevation : array-like Solar elevation angle. [deg] Returns @@ -35,9 +35,9 @@ def get_irradiance_sapm(temp_cell, i_mp, imp0, c0, c1, alpha_imp, Parameters ---------- - temp_cell : array + temp_cell : array-like Temperature of cells inside module. [degrees C] - i_mp : array + i_mp : array-like Maximum power current at the resolution of a single module. [A] imp0 : float Short-circuit current at reference condition. [A] @@ -51,7 +51,7 @@ def get_irradiance_sapm(temp_cell, i_mp, imp0, c0, c1, alpha_imp, Returns ------- - effective_irradiance : array + effective_irradiance : array-like Effective irradiance. [W/m2] References @@ -78,14 +78,14 @@ def get_irradiance_imp(i_mp, imp0, irrad_ref=1000): Parameters ---------- - i_mp : array + i_mp : array-like Maximum power current at the resolution of a single module. [A] imp0 : float Short-circuit current at reference condition. [A] Returns ------- - effective_irradiance : array + effective_irradiance : array-like Effective irradiance. [W/m2] References @@ -111,17 +111,17 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): Parameters ---------- - measured_e_e : array + measured_e_e : array-like Plane-of-array irradiance absent the effect of snow. [W/m2] - modeled_e_e : array + modeled_e_e : array-like Effective irradiance modeled from measured current at maximum power. [W/m2] - i_mp : array + i_mp : array-like Maximum power DC current at the resolution of a single module. [A] Returns ------- - T : array + 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 @@ -157,6 +157,19 @@ def categorize(transmission, measured_voltage, Modes are defined in [1]_: + * Mode -1: Indicates periods where it is unknown if and how snow impacts + power output. Mode -1 includes periods when: + + 1. voltage modeled with measured irradiance is below the inverter's + turn-on voltage OR + 2. voltage modeled with measured irradiance exceeds the upper bound + of the inverter's MPPT algorithm OR + 3. 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 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 inverter's turn-on voltage but the voltage modeled using @@ -170,25 +183,9 @@ def categorize(transmission, measured_voltage, * Mode 3: Indicates periods when the operating voltage is consistent with snow-free conditionss but current is reduced. * Mode 4: Voltage and current are consistent with snow-free conditions. - * Mode is None when both measured and voltage modeled from measured - irradiance are below the inverter turn-on voltage. - - An additional mode was added to cover a case that was not addressed in - [1]_: - * Mode -1: Indicates periods where it is unknown if and how snow impacts - power output. Mode -1 includes periods when - (a) voltage modeled with measured irradiance is below the inverter's - turn-on voltage OR - (b) voltage modeled with measured irradiance exceeds the upper bound of - the inverter's MPPT algorithm OR - (c) measured voltage exceeds the upper bound of the inverter's MPPT - algorithm Parameters ---------- - vmp_ratio : array-like - Ratio between measured voltage and voltage modeled using - calculated values of transmission. [dimensionless] transmission : array-like Fraction of plane-of-array irradiance that can reach the array's cells through the snow cover. [dimensionless] @@ -217,7 +214,11 @@ def categorize(transmission, measured_voltage, Returns ------- mode : int or None + ``mode`` is ``None`` when any of the inputs used to determine ``mode`` + is ``nan``. + 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, From 88ee008a80f0570cbca60751156590ac037cee57 Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Tue, 4 Jun 2024 12:28:05 -0700 Subject: [PATCH 44/72] addressed Kevin's comments --- docs/examples/snow-detection/snow-mode.py | 101 +++++++++++++--------- 1 file changed, 58 insertions(+), 43 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 9eb2de1d4..e40baf172 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -66,10 +66,20 @@ import pvanalytics # Functions needed for the analysis procedure from pvanalytics.features import clipping -from pvanalytics.features import snow +# from pvanalytics.features import snow +import sys +import os +base_dir = pathlib.Path('C:\\') +pvanalytics_dir = pathlib.Path(os.path.join(base_dir, "Users", "eccoope", + "Documents", "GitHub", + "pvanalytics", "pvanalytics")) + +my_path = os.path.join(pvanalytics_dir, 'features') +sys.path.insert(0, my_path) +import snow # %% Load in system configuration parameters (dict) -pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent +# pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent data_file = pvanalytics_dir / 'data' / 'snow_data.csv' snowfall_file = pvanalytics_dir / 'data' / 'snow_snowfall.csv' horizon_file = pvanalytics_dir / 'data' / 'snow_horizon.csv' @@ -91,8 +101,8 @@ print(f"Inverter MPPT range: {mppt_low_voltage} V - {mppt_high_voltage} V") num_str_per_cb = config['num_str_per_cb']['INV1 CB1'] num_mods_per_str = config['num_mods_per_str']['INV1 CB1'] -print(f"There are {num_str_per_cb} modules connected in series in each string," - f" and there are {num_mods_per_str} strings connected in" +print(f"There are {num_mods_per_str} modules connected in series in each string," + f" and there are {num_str_per_cb} strings connected in" f" parallel at each combiner") @@ -113,7 +123,6 @@ print('End: {}'.format(data.index[-1])) print('Frequency: {}'.format(data.index.inferred_freq)) print('Columns : ' + ', '.join(data.columns)) -data.between_time('8:00', '16:00').head() # Identify current, voltage, and AC power columns dc_voltage_cols = [c for c in data.columns if 'Voltage' in c] @@ -123,20 +132,15 @@ # Set negative or Nan current, voltage, AC power values to zero. This is # allows us to calculate losses later. -data.loc[:, dc_voltage_cols] = np.maximum(data[dc_voltage_cols], 0) -data.loc[:, dc_current_cols] = np.maximum(data[dc_current_cols], 0) -data.loc[:, ac_power_cols] = np.maximum(data[ac_power_cols], 0) - -data[dc_voltage_cols] = data[dc_voltage_cols].replace({np.nan: 0, None: 0}) -data[dc_current_cols] = data[dc_current_cols].replace({np.nan: 0, None: 0}) -data.loc[:, ac_power_cols] = data[ac_power_cols].replace({np.nan: 0, None: 0}) - +data.fillna(0, inplace=True) # %% # Plot DC voltage for each combiner input relative to inverter nameplate -# limits +# limits. We are looking for periods where DC voltage is less than the +# inverter's turn-on voltage, as these values are recorded outside of MPP +# operating conditions. -fig, ax = plt.subplots(figsize=(10, 10)) +fig, ax = plt.subplots(figsize=(10, 6)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) for v in dc_voltage_cols: @@ -149,11 +153,15 @@ ax.set_xlabel('Date', fontsize='large') ax.set_ylabel('Voltage [V]', fontsize='large') ax.legend(loc='lower left') +fig.tight_layout() plt.show() -# %% Plot AC power relative to inverter nameplate limits +# %% +# Plot AC power relative to inverter nameplate limits. We are looking for +# periods of clipping, as these values are recorded outside of MPP operating +# conditions. -fig, ax = plt.subplots(figsize=(10, 10)) +fig, ax = plt.subplots(figsize=(10, 6)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) for a in ac_power_cols: @@ -164,6 +172,7 @@ ax.set_xlabel('Date', fontsize='large') ax.set_ylabel('AC Power [kW]', fontsize='large') ax.legend(loc='upper left') +fig.tight_layout() plt.show() # %% Filter data. @@ -186,15 +195,6 @@ # Data where system is at Voc data.loc[data[i] == 0, v] = 0 - # Data where inverter is clipping based on AC power - mask1 = data[a] > max_ac_power - mask2 = clipping.geometric(ac_power=data[a], freq='15min') - mask3 = np.logical_or(mask1.values, mask2.values) - - data.loc[mask3, v] = np.nan - data.loc[mask3, i] = np.nan - data.loc[mask3, a] = np.nan - # %% Plot DC voltage for each combiner input with inverter nameplate limits fig, ax = plt.subplots(figsize=(10, 10)) @@ -213,7 +213,6 @@ plt.show() # %% - # We want to exclude periods where array voltage is affected by horizon # shading. Load in and apply horizon profiling created using approach described # in [1]. @@ -226,7 +225,8 @@ data['Horizon Mask'] = snow.get_horizon_mask(horizon, data['azimuth'], data['elevation']) -# %% Plot horizon mask +# %% +# Plot horizon mask fig, ax = plt.subplots() ax.scatter(data['azimuth'], data['elevation'], s=0.5, label='data', @@ -237,7 +237,8 @@ ax.set_ylabel(r'Elevation [$\degree$]') plt.show() -# %% Exclude data collected while the sun is below the horizon +# %% +# Exclude data collected while the sun is below the horizon data = data[data['Horizon Mask']] # %% @@ -260,14 +261,16 @@ data['Cell Temp [C]'] = pvlib.temperature.sapm_cell_from_module( data['Module Temp [C]'], data['POA [W/m²]'], 3) -# %% Plot cell temperature -fig, ax = plt.subplots(figsize=(10, 10)) +# %% +# Plot cell temperature +fig, ax = plt.subplots(figsize=(10, 6)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) ax.scatter(data.index, data['Cell Temp [C]'], s=0.5, c='b') ax.plot(data['Cell Temp [C]'], alpha=0.3, c='b') ax.set_ylabel('Cell Temp [C]', c='b', fontsize='xx-large') ax.set_xlabel('Date', fontsize='xx-large') +fig.tight_layout() plt.show() # %% @@ -305,7 +308,7 @@ # %% # Plot transmission calculated using two different approaches -fig, ax = plt.subplots(figsize=(10, 10)) +fig, ax = plt.subplots(figsize=(10, 6)) date_form = DateFormatter("%m/%d \n%H:%M") ax.xaxis.set_major_formatter(date_form) @@ -318,6 +321,7 @@ ax.legend() ax.set_ylabel('Transmission', fontsize='xx-large') ax.set_xlabel('Date + Time', fontsize='large') +fig.tight_layout() plt.show() # %% @@ -359,9 +363,10 @@ modeled_vmp_sde = pvlib.pvsystem.singlediode(**SDE_params)['v_mp'] modeled_vmp_sde *= v_scaling_factor -# %% Plot modeled and measured voltage +# %% +# Plot modeled and measured voltage -fig, ax = plt.subplots(figsize=(10, 10)) +fig, ax = plt.subplots(figsize=(10, 6)) date_form = DateFormatter("%H:%M") ax.xaxis.set_major_formatter(date_form) @@ -374,9 +379,11 @@ ax.set_ylabel('Voltage [V]', fontsize='xx-large') ax.set_xlabel('Date', fontsize='large') plt.show() +fig.tight_layout() -# %% Function to do analysis so we can loop over combiner boxes +# %% +# Function to do analysis so we can loop over combiner boxes def wrapper(voltage, current, temp_cell, effective_irradiance, coeffs, config, temp_ref=25, irrad_ref=1000): @@ -536,11 +543,12 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, data[inv_cb + ' ' + k] = v -# %% Look at transmission for all DC inputs +# %% +# Look at transmission for all DC inputs transmission_cols = [c for c in data.columns if 'transmission' in c and 'voltage' not in c] -fig, ax = plt.subplots(figsize=(10, 10)) +fig, ax = plt.subplots(figsize=(10, 6)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) temp = data['2022-01-06 07:45:00': '2022-01-09 17:45:00'] @@ -549,12 +557,14 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.scatter(temp.index, temp[c], s=0.5, label=c) ax.set_xlabel('Date', fontsize='xx-large') ax.legend() +fig.tight_layout() plt.show() -# %% Look at voltage ratios for all DC inputs +# %% +# Look at voltage ratios for all DC inputs vratio_cols = [c for c in data.columns if "vmp_ratio" in c] -fig, ax = plt.subplots(figsize=(10, 10)) +fig, ax = plt.subplots(figsize=(10, 6)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) temp = data['2022-01-06 07:45:00': '2022-01-09 17:45:00'] @@ -566,9 +576,11 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_ylabel('Voltage Ratio (measured/modeled)', fontsize='xx-large') ax.axhline(1, c='k', alpha=0.1, ls='--') ax.legend() +fig.tight_layout() plt.show() -# %% Calculate all power losses - snow and non-snow +# %% +# Calculate all power losses - snow and non-snow modeled_df = pvlib.pvsystem.sapm(data['POA [W/m²]'], data['Cell Temp [C]'], @@ -591,7 +603,8 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, loss = np.maximum(data[name_modeled_power] - data[i_col]*data[v_col], 0) data[name_loss] = loss -# %% Plot measured and modeled power, color by mode +# %% +# Plot measured and modeled power, color by mode N = 6 alpha = 0.5 @@ -606,7 +619,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, mod = mode_cols[col] pwr = modeled_power_cols[col] -fig, ax = plt.subplots(figsize=(10, 10)) +fig, ax = plt.subplots(figsize=(10, 6)) date_form = DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) temp = data[~data[mod].isna()] @@ -660,6 +673,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.legend(handles=handles, fontsize='xx-large', loc='upper left') ax.set_title('Measured and modeled production for INV1 CB2', fontsize='xx-large') +fig.tight_layout() plt.show() # %% @@ -692,7 +706,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, snow_loss.at[d, c] = daily_snow_loss -fig, ax = plt.subplots() +fig, ax = plt.subplots(figsize=(10, 6)) date_form = DateFormatter("%m/%d") days_mapped = data.index.map(lambda x: x.date()) @@ -711,6 +725,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, ax.set_xticks(xvals, days) ax.xaxis.set_major_formatter(date_form) ax.set_title('Losses incurred in modes 0, 1, 2, 3', fontsize='xx-large') +fig.tight_layout() plt.show() # %% From 2090237290ab32e5fe10d07f9cd08115c3c615b2 Mon Sep 17 00:00:00 2001 From: Emma Cooper Date: Tue, 4 Jun 2024 13:21:25 -0700 Subject: [PATCH 45/72] Fixed import statements --- docs/examples/snow-detection/snow-mode.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 345c4b376..f1e8bd6e5 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -66,17 +66,7 @@ import pvanalytics # Functions needed for the analysis procedure from pvanalytics.features import clipping -# from pvanalytics.features import snow -import sys -import os -base_dir = pathlib.Path('C:\\') -pvanalytics_dir = pathlib.Path(os.path.join(base_dir, "Users", "eccoope", - "Documents", "GitHub", - "pvanalytics", "pvanalytics")) - -my_path = os.path.join(pvanalytics_dir, 'features') -sys.path.insert(0, my_path) -import snow +from pvanalytics.features import snow # %% Load in system configuration parameters (dict) # pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent From 1ae48240f23fcb0faad73ef4630ae2981bacdcb7 Mon Sep 17 00:00:00 2001 From: Emma Cooper Date: Tue, 4 Jun 2024 13:27:01 -0700 Subject: [PATCH 46/72] Uncomment directory definition --- docs/examples/snow-detection/snow-mode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index f1e8bd6e5..98474ff9e 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -69,7 +69,7 @@ from pvanalytics.features import snow # %% Load in system configuration parameters (dict) -# pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent +pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent data_file = pvanalytics_dir / 'data' / 'snow_data.csv' snowfall_file = pvanalytics_dir / 'data' / 'snow_snowfall.csv' horizon_file = pvanalytics_dir / 'data' / 'snow_horizon.csv' From 037b0bdc57cb5325568711a84ffe964e88ab7a65 Mon Sep 17 00:00:00 2001 From: Emma Cooper Date: Mon, 24 Jun 2024 14:13:34 -0600 Subject: [PATCH 47/72] Removed unused import statement --- docs/examples/snow-detection/snow-mode.py | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 98474ff9e..306c3806c 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -65,7 +65,6 @@ import pvanalytics # Functions needed for the analysis procedure -from pvanalytics.features import clipping from pvanalytics.features import snow # %% Load in system configuration parameters (dict) From 8f382d54a1634eefe9c0c4c2a60169ba999e9f6b Mon Sep 17 00:00:00 2001 From: Emma Cooper Date: Mon, 24 Jun 2024 14:18:48 -0600 Subject: [PATCH 48/72] Shorted line length to 79 characters --- docs/examples/snow-detection/snow-mode.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 306c3806c..699afa6fe 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -90,8 +90,8 @@ print(f"Inverter MPPT range: {mppt_low_voltage} V - {mppt_high_voltage} V") num_str_per_cb = config['num_str_per_cb']['INV1 CB1'] num_mods_per_str = config['num_mods_per_str']['INV1 CB1'] -print(f"There are {num_mods_per_str} modules connected in series in each string," - f" and there are {num_str_per_cb} strings connected in" +print(f"There are {num_mods_per_str} modules connected in series in each," + f" string and there are {num_str_per_cb} strings connected in" f" parallel at each combiner") From e7ad7d2940994efe47359f2c71cd359bb23bb544 Mon Sep 17 00:00:00 2001 From: Emma Cooper Date: Thu, 27 Jun 2024 10:38:31 -0600 Subject: [PATCH 49/72] Update pvanalytics/features/snow.py Co-authored-by: Kevin Anderson --- pvanalytics/features/snow.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 8d4e22323..b7480de85 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -8,8 +8,8 @@ def get_horizon_mask(horizon, azimuth, elevation): Parameters ---------- - horizon : array-like - Series with int index of 0 - 359 (represents azimuth) and float values + horizon : Series + Series with numeric index of 0 - 359 (represents azimuth) and float values (represents elevation [deg] of horizon profile). azimuth : array-like Solar azimuth angle. [deg] From 5b96547de5bd4c7366d3e9bba5b09f3dab798667 Mon Sep 17 00:00:00 2001 From: Emma Cooper Date: Thu, 27 Jun 2024 10:44:04 -0600 Subject: [PATCH 50/72] Update pvanalytics/features/snow.py Co-authored-by: Kevin Anderson --- pvanalytics/features/snow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index b7480de85..c00589c86 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -46,7 +46,7 @@ def get_irradiance_sapm(temp_cell, i_mp, imp0, c0, c1, alpha_imp, irradiance. alpha_imp : float Normalized temperature coefficient for short-circuit current. [1/°C] - temp_ref : float + temp_ref : float, default 25 Reference cell temperature. [degrees C] Returns From acf4aefc654cc01928699a1535ed295930ebd798 Mon Sep 17 00:00:00 2001 From: Emma Cooper Date: Thu, 27 Jun 2024 10:45:49 -0600 Subject: [PATCH 51/72] Update pvanalytics/features/snow.py Co-authored-by: Kevin Anderson --- pvanalytics/features/snow.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index c00589c86..e48d651eb 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -240,10 +240,10 @@ def categorize(transmission, measured_voltage, # take care of divide by zero vmp_ratio[modeled_voltage_with_calculated_transmission == 0] = 1 - # vmp_ratio discrimates between states (1,2) and (3,4) + # vmp_ratio discriminates between states (1,2) and (3,4) uvr = np.where(vmp_ratio >= threshold_vratio, 3, 1) - # transmission discrimates within (1,2) and (3,4) + # transmission discriminates within (1,2) and (3,4) utrans = np.where(transmission >= threshold_transmission, 1, 0) # None if transmission, vmp_ratio, modeled_voltage_with_ideal_transmission, From 40ef5a28a24478baab77d89ff51505417585cc38 Mon Sep 17 00:00:00 2001 From: Emma Cooper Date: Thu, 27 Jun 2024 10:46:06 -0600 Subject: [PATCH 52/72] Update pvanalytics/features/snow.py Co-authored-by: Kevin Anderson --- pvanalytics/features/snow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index e48d651eb..f48e4409b 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -181,7 +181,7 @@ def categorize(transmission, measured_voltage, * Mode 2: Indicates periods when the operating voltage is reduced but current is consistent with snow-free conditions. * Mode 3: Indicates periods when the operating voltage is consistent with - snow-free conditionss but current is reduced. + snow-free conditions but current is reduced. * Mode 4: Voltage and current are consistent with snow-free conditions. Parameters From 86c451cd1197d3a32fde064e8db6eb6bb593744b Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:08:38 -0600 Subject: [PATCH 53/72] Madking changes recommended by Kevin --- docs/api.rst | 3 +++ docs/examples/snow-detection/snow-mode.py | 2 +- pvanalytics/features/snow.py | 31 +++++++++++++++-------- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/docs/api.rst b/docs/api.rst index 5def31d83..250d59951 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -277,6 +277,9 @@ Functions for identifying and quantifying the effects of snow. .. autosummary:: :toctree: generated/ + features.snow._get_horizon_mask + features.snow.get_irradiance_sapm + features.snow.get_irradiance_imp features.snow.categorize features.snow.get_transmission diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 699afa6fe..07f7d31fa 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -211,7 +211,7 @@ horizon = pd.read_csv(horizon_file, index_col='Unnamed: 0').squeeze("columns") -data['Horizon Mask'] = snow.get_horizon_mask(horizon, data['azimuth'], +data['Horizon Mask'] = snow._get_horizon_mask(horizon, data['azimuth'], data['elevation']) # %% diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index f48e4409b..0b8dcba34 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -1,7 +1,7 @@ import numpy as np -def get_horizon_mask(horizon, azimuth, elevation): +def _get_horizon_mask(horizon, azimuth, elevation): """ Determines if a given (azimuth, elevation) pair is above a horizon profile. @@ -9,8 +9,8 @@ def get_horizon_mask(horizon, azimuth, elevation): Parameters ---------- horizon : Series - Series with numeric index of 0 - 359 (represents azimuth) and float values - (represents elevation [deg] of horizon profile). + Series with numeric index of 0 - 359 (represents azimuth) and float + values (represents elevation [deg] of horizon profile). azimuth : array-like Solar azimuth angle. [deg] elevation : array-like @@ -18,9 +18,12 @@ def get_horizon_mask(horizon, azimuth, elevation): Returns ------- - out : bool or NaN + out : array-like + Array of bool and NaN values, where True indicates that the + (azimuth, elevation) pair is above the horizon profile. NaN if the sun + position inputs contain a NaN. """ - yp = np.interp(azimuth, horizon.index, horizon.values) + yp = np.interp(azimuth, horizon.index, horizon.values, period=360) out = elevation >= yp return out @@ -46,7 +49,9 @@ def get_irradiance_sapm(temp_cell, i_mp, imp0, c0, c1, alpha_imp, irradiance. alpha_imp : float Normalized temperature coefficient for short-circuit current. [1/°C] - temp_ref : float, default 25 + irrad_ref : float + Reference irradiance. [W/m2] + temp_ref : float Reference cell temperature. [degrees C] Returns @@ -213,9 +218,12 @@ def categorize(transmission, measured_voltage, Returns ------- - mode : int or None + 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. References ---------- @@ -231,14 +239,17 @@ def categorize(transmission, measured_voltage, umax_model = modeled_voltage_with_ideal_transmission < max_dcv # Voltage is modeled as NaN if T = 0, but V = 0 makes more sense - modeled_voltage_with_calculated_transmission[transmission == 0] = 0 + modeled_voltage_with_calculated_transmission_copy = np.where( + transmission == 0, 0, modeled_voltage_with_calculated_transmission) with np.errstate(divide='ignore'): vmp_ratio =\ - measured_voltage / modeled_voltage_with_calculated_transmission + measured_voltage /\ + modeled_voltage_with_calculated_transmission_copy # take care of divide by zero - vmp_ratio[modeled_voltage_with_calculated_transmission == 0] = 1 + vmp_ratio = np.where(modeled_voltage_with_calculated_transmission == 0, 1, + vmp_ratio) # vmp_ratio discriminates between states (1,2) and (3,4) uvr = np.where(vmp_ratio >= threshold_vratio, 3, 1) From 50e17da6109e6bd33f29ce76a120f3c9e469acde Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:09:19 -0600 Subject: [PATCH 54/72] Linting --- docs/examples/snow-detection/snow-mode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 07f7d31fa..1af9eb434 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -212,7 +212,7 @@ horizon = pd.read_csv(horizon_file, index_col='Unnamed: 0').squeeze("columns") data['Horizon Mask'] = snow._get_horizon_mask(horizon, data['azimuth'], - data['elevation']) + data['elevation']) # %% # Plot horizon mask From b5335c638d5d8ea509316089b92774714f0c41f9 Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:14:28 -0600 Subject: [PATCH 55/72] changed name of hidden function in test --- pvanalytics/tests/features/test_snow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index 54b390fcd..71a96e5cd 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -14,7 +14,7 @@ def test_get_horizon_mask(): horizon = pd.Series(index=range(0, 360), data=0) horizon[5:10] = 10 - result = snow.get_horizon_mask(horizon, azimuth=np.array([4, 5, 7]), + result = snow._get_horizon_mask(horizon, azimuth=np.array([4, 5, 7]), elevation=np.array([-1, 11, np.nan])) expected = np.array([False, True, False]) assert_array_equal(result, expected) From 523ded3ba7d4f513c0254a03b63e58f69680ded8 Mon Sep 17 00:00:00 2001 From: eccoope <125493409+eccoope@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:14:52 -0600 Subject: [PATCH 56/72] Linting again --- pvanalytics/tests/features/test_snow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index 71a96e5cd..a69875834 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -15,7 +15,7 @@ def test_get_horizon_mask(): horizon = pd.Series(index=range(0, 360), data=0) horizon[5:10] = 10 result = snow._get_horizon_mask(horizon, azimuth=np.array([4, 5, 7]), - elevation=np.array([-1, 11, np.nan])) + elevation=np.array([-1, 11, np.nan])) expected = np.array([False, True, False]) assert_array_equal(result, expected) From 46f089de3d52d26db784d6f09f4a0392cfd80b48 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 9 Sep 2024 07:46:20 -0700 Subject: [PATCH 57/72] put Bug fixes back in whatsnew --- docs/whatsnew/0.2.1.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/whatsnew/0.2.1.rst b/docs/whatsnew/0.2.1.rst index 7718425f4..c93d9215e 100644 --- a/docs/whatsnew/0.2.1.rst +++ b/docs/whatsnew/0.2.1.rst @@ -11,6 +11,10 @@ Enhancements 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 +~~~~~~~~~ + + Requirements ~~~~~~~~~~~~ * Minimum python advanced to 3.8. (:pull:`210`) From 741e721381ecf6592226ff4334081b729071f1ad Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Tue, 10 Sep 2024 13:40:13 -0700 Subject: [PATCH 58/72] doc improvements --- docs/examples/snow-detection/snow-mode.py | 24 ++++-- pvanalytics/features/snow.py | 100 +++++++++++----------- 2 files changed, 66 insertions(+), 58 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 1af9eb434..4ef63fda1 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -11,16 +11,11 @@ from snow-free irradiance measurements are ascribed to the effects of snow. The effect of snow is classified into one of five categories: - * Mode -1: Indicates periods where it is unknown whether snow is impacting - system performance. This includes periods where voltage modeled with - measured irradiance assuming perfect transmission is below the inverter's - turn-on voltage, or when the same quantity is greater than the upper - bound on the inverter's MPPT range. Mode -1 also includes periods when - measured voltage exceeds the upper bound on the inverter's MPPT range. * 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 inverter's turn-on voltage but the voltage modeled using - measured irradiance is above the inverter's turn-on voltage. + 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 and both operating voltage and current are decreased. Operating voltage is reduced when bypass diodes activate and current is decreased due to @@ -31,9 +26,22 @@ snow-free conditionss 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 is None when both measured and voltage modeled from measured irradiance are below the inverter turn-on voltage. +.. image:: ../../_images/snow_mode_diagram.png + :alt: Logic diagram for snow mode classification. + :width: 500 + :align: center + The procedure involves four steps: 1. Using measured plane-of-array (POA) irradiance and temperature, model the module's maximum power current (Imp) and voltage (Vmp) assuming diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 0b8dcba34..e569300b9 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -106,7 +106,7 @@ def get_irradiance_imp(i_mp, imp0, irrad_ref=1000): def get_transmission(measured_e_e, modeled_e_e, i_mp): """ - Estimate transmittance as the ratio of modeled effective irradiance to + 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 @@ -139,22 +139,22 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): 50th Photovoltaic Specialists Conference (PVSC), San Juan, PR, USA, 2023, pp. 1-5. :doi:`10.1109/PVSC48320.2023.10360065` """ - T = modeled_e_e / measured_e_e + transmission = modeled_e_e / measured_e_e # no transmission if no current - T[np.isnan(i_mp)] = np.nan - T[i_mp == 0] = 0 + transmission[np.isnan(i_mp)] = np.nan + transmission[i_mp == 0] = 0 # no transmission if no irradiance - T[measured_e_e == 0] = np.nan - # bound T between 0 and 1 - T[T < 0] = np.nan - T[T > 1] = 1 + transmission[measured_e_e == 0] = np.nan + # bound transmission between 0 and 1 + transmission[transmission < 0] = np.nan + transmission[transmission > 1] = 1 - return T + return transmission def categorize(transmission, measured_voltage, - modeled_voltage_with_calculated_transmission, - modeled_voltage_with_ideal_transmission, + modeled_voltage_with_snow, + modeled_voltage_no_snow, min_dcv, max_dcv, threshold_vratio, threshold_transmission): """ @@ -162,25 +162,13 @@ def categorize(transmission, measured_voltage, Modes are defined in [1]_: - * Mode -1: Indicates periods where it is unknown if and how snow impacts - power output. Mode -1 includes periods when: - - 1. voltage modeled with measured irradiance is below the inverter's - turn-on voltage OR - 2. voltage modeled with measured irradiance exceeds the upper bound - of the inverter's MPPT algorithm OR - 3. 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 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 inverter's turn-on voltage but the voltage modeled using - measured irradiance is above the inverter's turn-on voltage. - * Mode 1: Indicates periods when the system has non-uniform snow and - both operating voltage and current are decreased. Operating 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 that + decreases both operating voltage and current. Operating Voltage is reduced when bypass diodes activate and current is decreased due to decreased irradiance. * Mode 2: Indicates periods when the operating voltage is reduced but @@ -188,6 +176,17 @@ def categorize(transmission, measured_voltage, * Mode 3: Indicates periods when the 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]_. + Parameters ---------- @@ -196,12 +195,12 @@ def categorize(transmission, measured_voltage, through the snow cover. [dimensionless] measured_voltage : array-like Measured DC voltage. [V] - modeled_voltage_with_calculated_transmission : array-like - DC voltage modeled using measured plane-of-array irradiance, - back-of-module temperature, and calculated transmission. [V] - modeled_voltage_with_ideal_transmission : array-like + 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 - back-of-module temperature. Assumes transmission equals 1. [V] + assuming transmission equals 1. [V] min_dcv : float The lower voltage bound on the inverter's maximum power point tracking (MPPT) algorithm. [V] @@ -235,20 +234,20 @@ def categorize(transmission, measured_voltage, umin_meas = measured_voltage >= min_dcv umax_meas = measured_voltage < max_dcv - umin_model = modeled_voltage_with_ideal_transmission >= min_dcv - umax_model = modeled_voltage_with_ideal_transmission < max_dcv + umin_model = modeled_voltage_no_snow >= min_dcv + umax_model = modeled_voltage_no_snow < max_dcv - # Voltage is modeled as NaN if T = 0, but V = 0 makes more sense - modeled_voltage_with_calculated_transmission_copy = np.where( - transmission == 0, 0, modeled_voltage_with_calculated_transmission) + # 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_calculated_transmission_copy + modeled_voltage_with_snow_copy # take care of divide by zero - vmp_ratio = np.where(modeled_voltage_with_calculated_transmission == 0, 1, + vmp_ratio = np.where(modeled_voltage_with_snow_copy == 0, 1, vmp_ratio) # vmp_ratio discriminates between states (1,2) and (3,4) @@ -257,21 +256,22 @@ def categorize(transmission, measured_voltage, # transmission discriminates within (1,2) and (3,4) utrans = np.where(transmission >= threshold_transmission, 1, 0) - # None if transmission, vmp_ratio, modeled_voltage_with_ideal_transmission, - # modeled_voltage_with_calculated_transmission, or measured_voltage is nan - # -1 if umin_model is 0 - # 0 if umin_meas is 0, i.e., measurement indicate no power but it must be - # that umin_model is 1 - # state 1, 2, 3, 4 defined by uvr + utrans - # -1 if umax_model is 0 - # -1 if umax_meas is 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_calculated_transmission) | - np.isnan(modeled_voltage_with_ideal_transmission), + np.isnan(modeled_voltage_with_snow_copy) | + np.isnan(modeled_voltage_no_snow), None, mode) return mode, vmp_ratio From 35cbb7ca0d39db7650e0fb162e1b5ce163e60fd2 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Tue, 10 Sep 2024 13:40:43 -0700 Subject: [PATCH 59/72] save the file first --- docs/examples/snow-detection/snow-mode.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 4ef63fda1..bfe7be015 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -37,11 +37,6 @@ Mode is None when both measured and voltage modeled from measured irradiance are below the inverter turn-on voltage. -.. image:: ../../_images/snow_mode_diagram.png - :alt: Logic diagram for snow mode classification. - :width: 500 - :align: center - The procedure involves four steps: 1. Using measured plane-of-array (POA) irradiance and temperature, model the module's maximum power current (Imp) and voltage (Vmp) assuming From ba1694f8194f17c325d8d7163e9b7c3901ab655a Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Tue, 10 Sep 2024 14:06:00 -0700 Subject: [PATCH 60/72] adjust colors --- docs/examples/snow-detection/snow-mode.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index bfe7be015..f75eac1d9 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -656,8 +656,9 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, handles.append(measured_line) handles.append(modeled_line) -for i in range(-1, N-1): - my_patch = mpatches.Patch(color=cmap.colors[i], label=f'Mode {i}') +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}') handles.append(my_patch) ax.set_xlabel('Date', fontsize='xx-large') From 335478c03e537c49c4ebacb57906012b37c9cb01 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Tue, 10 Sep 2024 15:16:43 -0700 Subject: [PATCH 61/72] figure nidges --- docs/examples/snow-detection/snow-mode.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index f75eac1d9..440acbc1c 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -66,12 +66,14 @@ import matplotlib.patches as mpatches from matplotlib.lines import Line2D -import pvanalytics +#import pvanalytics # Functions needed for the analysis procedure -from pvanalytics.features import snow +# from pvanalytics.features import snow +import snow # %% Load in system configuration parameters (dict) -pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent +#pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent +pvanalytics_dir = pathlib.Path('C:\python\pvanalytics\pvanalytics\pvanalytics') data_file = pvanalytics_dir / 'data' / 'snow_data.csv' snowfall_file = pvanalytics_dir / 'data' / 'snow_snowfall.csv' horizon_file = pvanalytics_dir / 'data' / 'snow_horizon.csv' @@ -606,7 +608,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, mode_cols = [c for c in data.columns if "mode" in c and "modeled" not in c] modeled_power_cols = [c for c in data.columns if "Modeled Power" in c] -col = 1 +col = 1 # plot one combiner box los = loss_cols[col] mod = mode_cols[col] pwr = modeled_power_cols[col] @@ -658,7 +660,8 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, 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}') + my_patch = mpatches.Patch(color=cmap.colors[color_idx], label=f'Mode {i}', + alpha=alpha) handles.append(my_patch) ax.set_xlabel('Date', fontsize='xx-large') From be3eef500a9911af13f09decb136cafcc6a9cf10 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Tue, 10 Sep 2024 15:17:11 -0700 Subject: [PATCH 62/72] figure nidges --- docs/examples/snow-detection/snow-mode.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 440acbc1c..f424e91f8 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -66,14 +66,12 @@ import matplotlib.patches as mpatches from matplotlib.lines import Line2D -#import pvanalytics +import pvanalytics # Functions needed for the analysis procedure -# from pvanalytics.features import snow -import snow +from pvanalytics.features import snow # %% Load in system configuration parameters (dict) -#pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent -pvanalytics_dir = pathlib.Path('C:\python\pvanalytics\pvanalytics\pvanalytics') +pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent data_file = pvanalytics_dir / 'data' / 'snow_data.csv' snowfall_file = pvanalytics_dir / 'data' / 'snow_snowfall.csv' horizon_file = pvanalytics_dir / 'data' / 'snow_horizon.csv' From fff5452411e2052f765ad719e2a9b3277e94ad7d Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Tue, 10 Sep 2024 15:23:37 -0700 Subject: [PATCH 63/72] Update docs/examples/snow-detection/snow-mode.py --- docs/examples/snow-detection/snow-mode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index f424e91f8..746514e97 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -656,7 +656,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, handles.append(measured_line) handles.append(modeled_line) -for i in [-1, 0, 1, 2, 3, 4]: # modes +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) From 9dbc9906d6e939b1984d732927322dc0a8e833ad Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Fri, 27 Sep 2024 12:16:54 -0700 Subject: [PATCH 64/72] small edits --- docs/examples/snow-detection/snow-mode.py | 2 +- docs/whatsnew/0.2.1.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index f424e91f8..746514e97 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -656,7 +656,7 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, handles.append(measured_line) handles.append(modeled_line) -for i in [-1, 0, 1, 2, 3, 4]: # modes +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) diff --git a/docs/whatsnew/0.2.1.rst b/docs/whatsnew/0.2.1.rst index 8df64b87f..e4432e005 100644 --- a/docs/whatsnew/0.2.1.rst +++ b/docs/whatsnew/0.2.1.rst @@ -2,7 +2,6 @@ Breaking Changes ~~~~~~~~~~~~~~~~ -0.2.1 (not yet released) Enhancements @@ -31,6 +30,7 @@ Testing Contributors +~~~~~~~~~~~~ * Cliff Hansen (:ghuser:`cwhanse`) * Emma Cooper (:ghuser:`eccoope`) * Kevin Anderson (:ghuser:`kandersolar`) From 8cd1fcab10f56c17fb7ab6c7464287ca5ec3d8eb Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Fri, 27 Sep 2024 12:20:14 -0700 Subject: [PATCH 65/72] Apply suggestions from code review Suggestions from review Co-authored-by: Kevin Anderson --- docs/examples/snow-detection/snow-mode.py | 18 ++++++++---------- pvanalytics/features/snow.py | 4 ++-- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 746514e97..de36c06e8 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -23,7 +23,7 @@ * Mode 2: Indicates periods when the operating voltage is reduced but current is consistent with snow-free conditions. * Mode 3: Indicates periods when the operating voltage is consistent with - snow-free conditionss but current is reduced. + 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 @@ -93,7 +93,7 @@ print(f"Inverter MPPT range: {mppt_low_voltage} V - {mppt_high_voltage} V") num_str_per_cb = config['num_str_per_cb']['INV1 CB1'] num_mods_per_str = config['num_mods_per_str']['INV1 CB1'] -print(f"There are {num_mods_per_str} modules connected in series in each," +print(f"There are {num_mods_per_str} modules connected in series in each" f" string and there are {num_str_per_cb} strings connected in" f" parallel at each combiner") @@ -207,10 +207,11 @@ # %% # We want to exclude periods where array voltage is affected by horizon # shading. Load in and apply horizon profiling created using approach described -# in [1]. -# [1] J. L. Braid and B. G. Pierce, "Horizon Profiling Methods for Photovoltaic -# Arrays," 2023 IEEE 50th Photovoltaic Specialists Conference (PVSC), -# San Juan, PR, USA, 2023, pp. 1-7. doi:`10.1109/PVSC48320.2023.10359914` +# in [1]_. +# +# .. [1] J. L. Braid and B. G. Pierce, "Horizon Profiling Methods for Photovoltaic +# Arrays," 2023 IEEE 50th Photovoltaic Specialists Conference (PVSC), +# San Juan, PR, USA, 2023, pp. 1-7. :doi:`10.1109/PVSC48320.2023.10359914` horizon = pd.read_csv(horizon_file, index_col='Unnamed: 0').squeeze("columns") @@ -234,7 +235,6 @@ data = data[data['Horizon Mask']] # %% - # Define coefficients for modeling transmission and voltage. User can either # use the SAPM to calculate transmission or an approach based on the ratio # between measured current and nameplate current. For modeling voltage, the @@ -245,9 +245,7 @@ sde_coeffs = cec_module_db[config['panel']] # %% -""" -Model cell temperature using the SAPM model. -""" +# Model cell temperature using the SAPM model. irrad_ref = 1000 data['Cell Temp [C]'] = pvlib.temperature.sapm_cell_from_module( diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index e569300b9..0881f92d6 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -49,9 +49,9 @@ def get_irradiance_sapm(temp_cell, i_mp, imp0, c0, c1, alpha_imp, irradiance. alpha_imp : float Normalized temperature coefficient for short-circuit current. [1/°C] - irrad_ref : float + irrad_ref : float, default 1000 Reference irradiance. [W/m2] - temp_ref : float + temp_ref : float, default 25 Reference cell temperature. [degrees C] Returns From 9335a74b17d55319f5640994ae77b329796db75d Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Wed, 2 Oct 2024 12:58:04 -0700 Subject: [PATCH 66/72] overhaul example, remove horizon --- docs/examples/snow-detection/snow-mode.py | 650 +++++------- pvanalytics/data/snow_config.json | 71 -- pvanalytics/data/snow_data.csv | 1154 ++++++++++----------- pvanalytics/data/snow_horizon.csv | 361 ------- pvanalytics/features/snow.py | 87 +- pvanalytics/tests/features/test_snow.py | 9 - 6 files changed, 844 insertions(+), 1488 deletions(-) delete mode 100644 pvanalytics/data/snow_config.json delete mode 100644 pvanalytics/data/snow_horizon.csv diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index de36c06e8..74ac9c535 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -16,14 +16,16 @@ 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 and - both operating voltage and current are decreased. Operating voltage is - reduced when bypass diodes activate and current is decreased due to - decreased irradiance. - * Mode 2: Indicates periods when the operating voltage is reduced but - current is consistent with snow-free conditions. - * Mode 3: Indicates periods when the operating voltage is consistent with - snow-free conditions but current is reduced. + * 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 @@ -56,327 +58,209 @@ # %% Import packages import pathlib -import json import pandas as pd import numpy as np -import re + import pvlib import matplotlib.pyplot as plt -from matplotlib.dates import DateFormatter +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 -# %% Load in system configuration parameters (dict) pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent -data_file = pvanalytics_dir / 'data' / 'snow_data.csv' -snowfall_file = pvanalytics_dir / 'data' / 'snow_snowfall.csv' -horizon_file = pvanalytics_dir / 'data' / 'snow_horizon.csv' -config_file = pvanalytics_dir / 'data' / 'snow_config.json' - -with open(config_file) as json_data: - config = json.load(json_data) - -# %% Retrieve and print system inverter specs and electrical configuration - -cec_inverter_db = pvlib.pvsystem.retrieve_sam('CECInverter') -my_inverter = cec_inverter_db[config['inverter']] - -max_ac_power = my_inverter['Paco']*0.001 # originally in W, convert 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 = config['num_str_per_cb']['INV1 CB1'] -num_mods_per_str = config['num_mods_per_str']['INV1 CB1'] -print(f"There are {num_mods_per_str} modules connected in series in each" - f" string and there are {num_str_per_cb} strings connected in" - f" parallel at each combiner") # %% -# Read in 15-minute sampled DC voltage and current time series data, AC power, -# module temperature collected by a BOM sensor and plane-of-array -# irradiance data collected by a heated pyranometer. This sample is provided -# by an electric utility. +# 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 = pd.read_csv(data_file, index_col='Timestamp') -data.set_index(pd.DatetimeIndex(data.index, ambiguous='infer'), inplace=True) -data = data[~data.index.duplicated()] +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('Frequency: {}'.format(data.index.inferred_freq)) print('Columns : ' + ', '.join(data.columns)) -# Identify current, voltage, and AC power columns -dc_voltage_cols = [c for c in data.columns if 'Voltage' in c] -dc_current_cols = [c for c in data.columns if 'Current' in c] -ac_power_cols = [c for c in data.columns if 'AC' in c] +voltage_col = 'INV1 CB2 Voltage [V]' +power_col = 'INV1 AC Power [kW]' +current_col = 'INV1 CB2 Current [A]' -# Set negative or Nan current, voltage, AC power values to zero. This is -# allows us to calculate losses later. -data.fillna(0, inplace=True) +# %% Retrieve and print system inverter specs and DC electrical configuration -# %% -# Plot DC voltage for each combiner input relative to inverter nameplate +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 DC voltage at the combiner input relative to inverter nameplate # limits. We are looking for periods where DC voltage is less than the -# inverter's turn-on voltage, as these values are recorded outside of MPP -# operating conditions. +# inverter's MPPT voltage range, as these values are outside of MPP +# operating conditions. If we find these periods, we fig, ax = plt.subplots(figsize=(10, 6)) -date_form = DateFormatter("%m/%d") -ax.xaxis.set_major_formatter(date_form) -for v in dc_voltage_cols: - ax.scatter(data.index, data[v], s=0.5, label=v) - ax.plot(data[v], alpha=0.2) -ax.axhline(mppt_high_voltage, c='r', ls='--', - label='Maximum MPPT voltage: {} V'.format(mppt_high_voltage)) -ax.axhline(mppt_low_voltage, c='g', ls='--', - label='Minimum MPPT voltage: {} V'.format(mppt_low_voltage)) +locator = mdates.DayLocator() +#ax.xaxis.set_minor_locator(mdates.DayLocator(interval=0.25)) +ax.xaxis.set_major_locator(mdates.DayLocator(interval=1)) +ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d')) +ax.plot(data[voltage_col], '.-', alpha=0.5, fillstyle='full', + label='DC voltage') +ax.axhline(mppt_high_voltage, c='r', ls='--') +ax.text(0.02, mppt_high_voltage + 20, '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.set_xlabel('Date', fontsize='large') ax.set_ylabel('Voltage [V]', fontsize='large') +ax.set_ylim([0, 1.2*mppt_high_voltage]) ax.legend(loc='lower left') fig.tight_layout() plt.show() -# %% -# Plot AC power relative to inverter nameplate limits. We are looking for -# periods of clipping, as these values are recorded outside of MPP operating -# conditions. +# %% 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)) -date_form = DateFormatter("%m/%d") -ax.xaxis.set_major_formatter(date_form) -for a in ac_power_cols: - ax.scatter(data.index, data[a], s=0.5, label=a) - ax.plot(data[a], alpha=0.2) -ax.axhline(max_ac_power, c='r', ls='--', - label='Maximum allowed AC power: {} kW'.format(max_ac_power)) +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(loc='upper left') -fig.tight_layout() -plt.show() - -# %% Filter data. -# Identify periods where the system is operating off of its maximum power -# point (MPP), and correct or mask. Conditions outside of the MPP cannot -# be accurately modeled without external information on the system's -# operating point. To allow us to make a valid comparison between system -# measurements and modeled power at MPP, we set measurements collected below -# the MPPT minimum voltage to zero, which emulates the condition where the -# inverter turns off when it cannot meet the turn-on voltage. - -ac_power_cols_repeated = ac_power_cols + ac_power_cols + ac_power_cols -for v, i, a in zip(dc_voltage_cols, dc_current_cols, ac_power_cols_repeated): - - # Data where V < MPPT minimum - data.loc[data[v] < mppt_low_voltage, v] = 0 - data.loc[data[v] < mppt_low_voltage, i] = 0 - data.loc[data[v] < mppt_low_voltage, a] = 0 - - # Data where system is at Voc - data.loc[data[i] == 0, v] = 0 - -# %% Plot DC voltage for each combiner input with inverter nameplate limits - -fig, ax = plt.subplots(figsize=(10, 10)) -date_form = DateFormatter("%m/%d") -ax.xaxis.set_major_formatter(date_form) -for v in dc_voltage_cols: - ax.scatter(data.index, data[v], s=0.5, label=v) - ax.plot(data[v], alpha=0.2) -ax.axhline(mppt_high_voltage, c='r', ls='--', - label='Maximum MPPT voltage: {} V'.format(mppt_high_voltage)) -ax.axhline(mppt_low_voltage, c='g', ls='--', - label='Minimum MPPT voltage: {} V'.format(mppt_low_voltage)) -ax.set_xlabel('Date', fontsize='large') -ax.set_ylabel('Voltage [V]', fontsize='large') -ax.legend(loc='lower left') -plt.show() - -# %% -# We want to exclude periods where array voltage is affected by horizon -# shading. Load in and apply horizon profiling created using approach described -# in [1]_. -# -# .. [1] J. L. Braid and B. G. Pierce, "Horizon Profiling Methods for Photovoltaic -# Arrays," 2023 IEEE 50th Photovoltaic Specialists Conference (PVSC), -# San Juan, PR, USA, 2023, pp. 1-7. :doi:`10.1109/PVSC48320.2023.10359914` - -horizon = pd.read_csv(horizon_file, index_col='Unnamed: 0').squeeze("columns") - -data['Horizon Mask'] = snow._get_horizon_mask(horizon, data['azimuth'], - data['elevation']) - -# %% -# Plot horizon mask - -fig, ax = plt.subplots() -ax.scatter(data['azimuth'], data['elevation'], s=0.5, label='data', - c=data['Horizon Mask']) -ax.scatter(horizon.index, horizon, s=0.5, label='mask') ax.legend() -ax.set_xlabel(r'Azimuth [$\degree$]') -ax.set_ylabel(r'Elevation [$\degree$]') +fig.tight_layout() plt.show() -# %% -# Exclude data collected while the sun is below the horizon -data = data[data['Horizon Mask']] - # %% # Define coefficients for modeling transmission and voltage. User can either # use the SAPM to calculate transmission or an approach based on the ratio # between measured current and nameplate current. For modeling voltage, the # user can use the SAPM or a single diode equivalent. -sapm_coeffs = config['sapm_coeff'] -cec_module_db = pvlib.pvsystem.retrieve_sam('cecmod') -sde_coeffs = cec_module_db[config['panel']] +# Data from CFV Solar Test Lab, tested 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²]'], 3) - -# %% -# Plot cell temperature -fig, ax = plt.subplots(figsize=(10, 6)) -date_form = DateFormatter("%m/%d") -ax.xaxis.set_major_formatter(date_form) -ax.scatter(data.index, data['Cell Temp [C]'], s=0.5, c='b') -ax.plot(data['Cell Temp [C]'], alpha=0.3, c='b') -ax.set_ylabel('Cell Temp [C]', c='b', fontsize='xx-large') -ax.set_xlabel('Date', fontsize='xx-large') -fig.tight_layout() -plt.show() + data['Module Temp [C]'], data['POA [W/m²]'], deltaT=3) # %% -# For one combiner, demonstrate the transmission calculation using two -# different approaches to modeling effective irradiance from measured Imp. - -# Choose one combiner box -j = 0 - -# Get key for configuration dict -matched = re.match(r'INV(\d+) CB(\d+)', dc_current_cols[j]) -inv_cb = matched.group(0) +# Demonstrate the transmission calculation and plot the result. -# Number of strings connected in parallel to combiner. -# Used to scale measured current down to the resolution -# of a single string connected in series, which should -# be the same current as a single module. +# We scale measured current at the combiner to that +# of a single string, assuming all strings have the same current. +# The string current should be the same current as a single module. -i_scaling_factor = int(config['num_str_per_cb'][f'{inv_cb}']) # String current -imp = data[dc_current_cols[j]] / i_scaling_factor +imp = data[current_col] / num_str_per_cb -# Approach 1 using SAPM +# Model effective irradiance using SAPM modeled_e_e1 = snow.get_irradiance_sapm( data['Cell Temp [C]'], imp, sapm_coeffs['Impo'], sapm_coeffs['C0'], sapm_coeffs['C1'], sapm_coeffs['Aimp']) T1 = snow.get_transmission(data['POA [W/m²]'], modeled_e_e1, imp) -# Approach 2 using a linear irradiance-Imp model -modeled_e_e2 = snow.get_irradiance_imp(imp, sapm_coeffs['Impo']) - -T2 = snow.get_transmission(data['POA [W/m²]'], modeled_e_e2, imp) - -# %% -# Plot transmission calculated using two different approaches fig, ax = plt.subplots(figsize=(10, 6)) -date_form = DateFormatter("%m/%d \n%H:%M") +date_form = mdates.DateFormatter("%m/%d \n%H:%M") ax.xaxis.set_major_formatter(date_form) -ax.scatter(T1.index, T1, s=0.5, c='b', label='SAPM') -ax.plot(T1, alpha=0.3, c='b') +ax.plot(T1, '.-', alpha=0.5, c='b', fillstyle='full') -ax.scatter(T2.index, T2, s=0.3, c='g', label='Linear model') -ax.plot(T2, alpha=0.3, c='g') - -ax.legend() ax.set_ylabel('Transmission', fontsize='xx-large') ax.set_xlabel('Date + Time', fontsize='large') fig.tight_layout() plt.show() # %% -# Model voltage using calculated transmission (two different approaches) +# Model and plot the voltage using calculated transmission. -# Number of modules in series in a string -v_scaling_factor = int(config['num_mods_per_str'][inv_cb]) - -# Approach 1. Reduce measured POA using the transmission. modeled_vmp_sapm = pvlib.pvsystem.sapm(data['POA [W/m²]']*T1, data['Cell Temp [C]'], sapm_coeffs)['v_mp'] -modeled_vmp_sapm *= v_scaling_factor - -# Approach 2 %TODO not sure we need this -# Code borrowed from pvlib-python/docs/examples/iv-modeling/plot_singlediode.py - -# adjust the reference parameters according to the operating -# conditions using the De Soto model: -IL, I0, Rs, Rsh, nNsVth = pvlib.pvsystem.calcparams_desoto( - data['POA [W/m²]']*T1, - data['Cell Temp [C]'], - alpha_sc=sde_coeffs['alpha_sc'], - a_ref=sde_coeffs['a_ref'], - I_L_ref=sde_coeffs['I_L_ref'], - I_o_ref=sde_coeffs['I_o_ref'], - R_sh_ref=sde_coeffs['R_sh_ref'], - R_s=sde_coeffs['R_s'], - ) - -# plug the parameters into the SDE and solve for IV curves: -SDE_params = { - 'photocurrent': IL, - 'saturation_current': I0, - 'resistance_series': Rs, - 'resistance_shunt': Rsh, - 'nNsVth': nNsVth -} -modeled_vmp_sde = pvlib.pvsystem.singlediode(**SDE_params)['v_mp'] -modeled_vmp_sde *= v_scaling_factor +modeled_vmp_sapm *= num_mods_per_str -# %% -# Plot modeled and measured voltage fig, ax = plt.subplots(figsize=(10, 6)) -date_form = DateFormatter("%H:%M") +date_form = mdates.DateFormatter("%H:%M") ax.xaxis.set_major_formatter(date_form) -ax.scatter(modeled_vmp_sapm.index, modeled_vmp_sapm, s=1, c='b', label='SAPM') -ax.scatter(modeled_vmp_sde.index, modeled_vmp_sde, s=1, c='g', label='SDE') +ax.plot(modeled_vmp_sapm, '.-', c='b', fillstyle='full', label='SAPM') -ax.scatter(data.index, data[inv_cb + ' Voltage [V]'], s=1, c='r', - label='Measured') -ax.legend(fontsize='xx-large') -ax.set_ylabel('Voltage [V]', fontsize='xx-large') +ax.scatter(data.index, data[voltage_col], s=1, c='r', label='Measured') +ax.legend(fontsize='large') +ax.set_ylabel('Voltage [V]', fontsize='large') ax.set_xlabel('Date', fontsize='large') plt.show() fig.tight_layout() # %% -# Function to do analysis so we can loop over combiner boxes +# We write a function to assign snow categories, so that we could loop over +# additional combiner boxes. -def wrapper(voltage, current, temp_cell, effective_irradiance, - coeffs, config, temp_ref=25, irrad_ref=1000): +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 @@ -402,22 +286,21 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, Snow-free POA irradiance measured by a heated pyranometer. [W/m²] coeffs : dict A dict defining the SAPM parameters, used for pvlib.pvsystem.sapm. - config : dict - 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. + 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 ------- @@ -429,53 +312,41 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # Calculate transmission modeled_e_e = snow.get_irradiance_sapm( - temp_cell, current/config['num_str_per_cb'], coeffs['Impo'], + temp_cell, current / num_str_per_cb, coeffs['Impo'], coeffs['C0'], coeffs['C1'], coeffs['Aimp']) T = snow.get_transmission(effective_irradiance, modeled_e_e, - current/config['num_str_per_cb']) + 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*T, temp_cell, - coeffs)['v_mp'] * config['num_mods_per_str'] + coeffs)['v_mp'] * num_mods_per_str modeled_voltage_with_ideal_transmission =\ pvlib.pvsystem.sapm(effective_irradiance, temp_cell, - coeffs)['v_mp'] * config['num_mods_per_str'] + coeffs)['v_mp'] * num_mods_per_str mode, vmp_ratio = snow.categorize( T, voltage, modeled_voltage_with_calculated_transmission, - modeled_voltage_with_ideal_transmission, config['min_dcv'], - config['max_dcv'], config['threshold_vratio'], - config['threshold_transmission']) + modeled_voltage_with_ideal_transmission, min_dcv, max_dcv, + threshold_vratio, threshold_transmission) - my_dict = {'transmission': T, + result = pd.DataFrame(index=voltage.index, data={'transmission': T, '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} + 'mode': mode}) - return my_dict + return result # %% # Demonstrate transmission, modeled voltage calculation and mode categorization # on voltage, current pair -j = 0 -v = dc_voltage_cols[j] -i = dc_current_cols[j] - -# Used to get key for configuration dict -matched = re.match(r'INV(\d+) CB(\d+)', i) -inv_cb = matched.group(0) - -# Number of strings connected in parallel at the combiner -i_scaling_factor = int(config['num_str_per_cb'][f'{inv_cb}']) - -# threshold_vratio and threshold-transmission were empirically determined +# 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 @@ -486,81 +357,44 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, # is the same value, but for transmission calculated from data recorded # during the summer. -threshold_vratio = config['threshold_vratio'] -threshold_transmission = config['threshold_transmission'] - -my_config = {'threshold_vratio': threshold_vratio, - 'threshold_transmission': threshold_transmission, - 'min_dcv': mppt_low_voltage, - 'max_dcv': mppt_high_voltage, - 'num_str_per_cb': int(config['num_str_per_cb'][f'{inv_cb}']), - 'num_mods_per_str': int(config['num_mods_per_str'][f'{inv_cb}'])} - -out = wrapper(data[v], data[i], - data['Cell Temp [C]'], - data['POA [W/m²]'], sapm_coeffs, - my_config) - -# %% -# Calculate the transmission, model the voltage, and categorize into modes for -# all combiners. Use the SAPM to calculate transmission and model the voltage. - -for v_col, i_col in zip(dc_voltage_cols, dc_current_cols): +threshold_vratio = 0.933 +threshold_transmission = 0.598 - matched = re.match(r'INV(\d+) CB(\d+) Current', i_col) - inv_num = matched.group(1) - cb_num = matched.group(2) - inv_cb = f'INV{inv_num} CB{cb_num}' +# Calculate the transmission, model the voltage, and categorize snow mode. +# Use the SAPM to calculate transmission and model the voltage. - v_scaling_factor = int(config['num_mods_per_str'][inv_cb]) - i_scaling_factor = int( - config['num_str_per_cb'][f'INV{inv_num} CB{cb_num}']) +inv_cb = 'INV1 CB2' - my_config = { - 'threshold_vratio': threshold_vratio, - 'threshold_transmission': threshold_transmission, - 'min_dcv': mppt_low_voltage, - 'max_dcv': mppt_high_voltage, - 'num_str_per_cb': int(config['num_str_per_cb'][f'{inv_cb}']), - 'num_mods_per_str': int(config['num_mods_per_str'][f'{inv_cb}'])} - - out = wrapper(data[v_col], data[i_col], - data['Cell Temp [C]'], - data['POA [W/m²]'], sapm_coeffs, - my_config) - - for k, v in out.items(): - data[inv_cb + ' ' + k] = v +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 -# %% -# Look at transmission for all DC inputs - -transmission_cols = [c for c in data.columns if 'transmission' in c and - 'voltage' not in c] fig, ax = plt.subplots(figsize=(10, 6)) -date_form = DateFormatter("%m/%d") +date_form = mdates.DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) -temp = data['2022-01-06 07:45:00': '2022-01-09 17:45:00'] -for c in transmission_cols: - ax.scatter(temp.index, temp[c], s=0.5, label=c) -ax.set_xlabel('Date', fontsize='xx-large') +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 ratios for all DC inputs +# Look at voltage ratio -vratio_cols = [c for c in data.columns if "vmp_ratio" in c] fig, ax = plt.subplots(figsize=(10, 6)) -date_form = DateFormatter("%m/%d") +date_form = mdates.DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) -temp = data['2022-01-06 07:45:00': '2022-01-09 17:45:00'] -for c in vratio_cols: - ax.scatter(temp.index, temp[c], s=0.5, label=c) +ax.plot(snow_results['vmp_ratio'], label='INV1 CB2 Voltage Ratio') ax.set_xlabel('Date', fontsize='xx-large') ax.set_ylabel('Voltage Ratio (measured/modeled)', fontsize='xx-large') @@ -570,28 +404,26 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, plt.show() # %% -# Calculate all power losses - snow and non-snow +# 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_df = pvlib.pvsystem.sapm(data['POA [W/m²]'], - data['Cell Temp [C]'], - sapm_coeffs) -for v_col, i_col in zip(dc_voltage_cols, dc_current_cols): - matched = re.match(r'INV(\d+) CB(\d+) Current', i_col) - inv_num = matched.group(1) - cb_num = matched.group(2) - inv_cb = f'INV{inv_num} CB{cb_num}' - i_scaling_factor = int( - config['num_str_per_cb'][f'INV{inv_num} CB{cb_num}']) - v_scaling_factor = int(config['num_mods_per_str'][inv_cb]) +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) - modeled_power = modeled_df['p_mp']*v_scaling_factor*i_scaling_factor - name_modeled_power = inv_cb + ' Modeled Power [W]' - data[name_modeled_power] = modeled_power +# 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 - name_loss = inv_cb + ' Loss [W]' - loss = np.maximum(data[name_modeled_power] - data[i_col]*data[v_col], 0) - data[name_loss] = loss # %% # Plot measured and modeled power, color by mode @@ -600,39 +432,33 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, alpha = 0.5 cmap = plt.get_cmap('plasma', N) -loss_cols = [c for c in data.columns if "Loss" in c] -mode_cols = [c for c in data.columns if "mode" in c and "modeled" not in c] -modeled_power_cols = [c for c in data.columns if "Modeled Power" in c] - -col = 1 # plot one combiner box -los = loss_cols[col] -mod = mode_cols[col] -pwr = modeled_power_cols[col] - fig, ax = plt.subplots(figsize=(10, 6)) -date_form = DateFormatter("%m/%d") +date_form = mdates.DateFormatter("%m/%d") ax.xaxis.set_major_formatter(date_form) -temp = data[~data[mod].isna()] +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(days_mapped) -grouped = temp.groupby(days_mapped) +days = np.unique(temp.index.date) +grouped = temp.groupby(temp.index.date) for d in days: temp_grouped = grouped.get_group(d) - ax.plot(temp_grouped[pwr], c='k', ls='--') - ax.plot(temp_grouped[pwr] - temp_grouped[los], c='k') - ax.fill_between(temp_grouped.index, temp_grouped[pwr] - temp_grouped[los], - temp_grouped[pwr], color='k', alpha=alpha) + 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(temp_grouped[mod].values[:-1] - - temp_grouped[mod].values[1:] != 0)) + 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[temp_grouped.at[temp_grouped.index[-1], - mod]], + color=cmap.colors[mode.at[temp_grouped.index[-1]]], alpha=alpha) else: set1 = np.append([0], chng_pts) @@ -642,15 +468,14 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, my_index = temp_grouped.index[start:end] ax.axvspan( temp_grouped.index[start], temp_grouped.index[end], - color=cmap.colors[temp_grouped.at[temp_grouped.index[end], - mod]], + 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', color='k', ls='--') -measured_line = Line2D([0], [0], label='Measured', color='k') +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) @@ -660,64 +485,59 @@ def wrapper(voltage, current, temp_cell, effective_irradiance, alpha=alpha) handles.append(my_patch) -ax.set_xlabel('Date', fontsize='xx-large') -ax.set_ylabel('DC Power [W]', fontsize='xx-large') -ax.legend(handles=handles, fontsize='xx-large', loc='upper left') -ax.set_title('Measured and modeled production for INV1 CB2', - fontsize='xx-large') +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 losses occuring while the system is operating in one of the -# four modes that are associated with the presence of snow. +# Calculate daily DC energy loss due to snow as a percentage of potential +# (modeled) DC power. +# Plot daily DC energy loss and daily snowfall totals. -# Daily snowfall is measured at 7:00 am of each day -snow = pd.read_csv(snowfall_file, index_col='DATE') # originally in [mm] -snow['SNOW'] *= 1/(10*2.54) # convert to [in] +# DataFrame so that we can group by days. +loss_df = pd.DataFrame(data={'modeled_power': modeled_power, + 'loss_snow': loss_snow}) -loss_cols = [c for c in data.columns if "Loss" in c] -mode_cols = [c for c in data.columns if "mode" in c and "modeled" not in c] -modeled_power_cols = [c for c in data.columns if "Modeled Power" in c] +# We will also show daily snowfall totals for context. +# Daily snowfall is measured at 7:00 am of each day. -days_mapped = data.index.map(lambda x: x.date()) -days = np.unique(days_mapped) -data_gped = data.groupby(days_mapped) +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') -columns = [re.match(r'INV(\d) CB(\d)', c).group(0) for c in loss_cols] -snow_loss = pd.DataFrame(index=days, columns=columns) +days_mapped = loss_df.index.map(lambda x: x.date()) +days = np.unique(days_mapped) +loss_df_gped = loss_df.groupby(days_mapped) -for d in days: - temp = data_gped.get_group(d) +snow_loss_daily = pd.Series(index=days, dtype=float) - for c, m, l, p in zip(columns, mode_cols, loss_cols, modeled_power_cols): - snow_loss_filter = ~(temp[m].isna()) & (temp[m] != 4) & (temp[m] != -1) - daily_snow_loss = 100*temp[snow_loss_filter][l].sum()/temp[p].sum() - snow_loss.at[d, c] = daily_snow_loss +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() fig, ax = plt.subplots(figsize=(10, 6)) -date_form = DateFormatter("%m/%d") +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') -days_mapped = data.index.map(lambda x: x.date()) -days = np.unique(days_mapped) - -xvals = np.arange(0, len(days), 1) -xwidth = 0.05 -colors = plt.rcParams['axes.prop_cycle'].by_key()['color'] - -for i, c in enumerate(columns): - ax.bar(xvals + xwidth*i, snow_loss[c], width=xwidth, color=colors[i], - ec='k', label=c) - -ax.legend() -ax.set_ylabel('[%]', fontsize='xx-large') -ax.set_xticks(xvals, days) +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('Losses incurred in modes 0, 1, 2, 3', fontsize='xx-large') +ax.set_title('Daily energy loss and snowfall', fontsize='large') fig.tight_layout() plt.show() -# %% diff --git a/pvanalytics/data/snow_config.json b/pvanalytics/data/snow_config.json deleted file mode 100644 index a08d29643..000000000 --- a/pvanalytics/data/snow_config.json +++ /dev/null @@ -1,71 +0,0 @@ -{ "panel": "REC_Solar_REC340TP_72_BLK", - "inverter" : "Yaskawa_Solectria_Solar__PVI_60TL_480__480V_", - "threshold_vratio" : 0.933, - "threshold_transmission" : 0.598, - "num_mods_per_str": { - "INV1 CB1": "18", - "INV1 CB2": "18", - "INV1 CB3": "18", - "INV2 CB1": "18", - "INV2 CB2": "18", - "INV2 CB3": "18", - "INV3 CB1": "18", - "INV3 CB2": "18", - "INV3 CB3": "18" - }, - "num_str_per_cb": { - "INV1 CB1": "4", - "INV1 CB2": "4", - "INV1 CB3": "4", - "INV2 CB1": "4", - "INV2 CB2": "4", - "INV2 CB3": "4", - "INV3 CB1": "4", - "INV3 CB2": "4", - "INV3 CB3": "4" - }, - "sapm_coeff": { - "Vintage": "2013", - "Area": 1.64, - "Material": "c-Si", - "Cells_in_Series": 72, - "Parallel_Strings": 1, - "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, - "A0": 0.9731, - "A1": 0.02966, - "A2": -0.01024, - "A3": 0.001793, - "A4": -0.0001286, - "B0": 1, - "B1": -0.0154, - "B2": 0.001572, - "B3": -5.525e-05, - "B4": 8.04e-07, - "B5": -4.202e-09, - "DTC": 3.05, - "FD": 1, - "A": -3.4247, - "B": -0.0951, - "C4": NaN, - "C5": NaN, - "IXO": NaN, - "IXXO": NaN, - "C6": NaN, - "C7": NaN, - "Notes": "Source: CFV Solar Test Lab. Tested 2013. Module 13022-11" - } -} \ No newline at end of file diff --git a/pvanalytics/data/snow_data.csv b/pvanalytics/data/snow_data.csv index aab894d3f..bbc081a53 100644 --- a/pvanalytics/data/snow_data.csv +++ b/pvanalytics/data/snow_data.csv @@ -1,577 +1,577 @@ -Timestamp,POA [W/m²],INV1 CB1 Voltage [V],INV1 CB2 Voltage [V],INV1 CB3 Voltage [V],INV2 CB1 Voltage [V],INV2 CB2 Voltage [V],INV2 CB3 Voltage [V],INV3 CB1 Voltage [V],INV3 CB2 Voltage [V],INV3 CB3 Voltage [V],Module Temp [C],Ambient Temp [C],INV1 CB1 Current [A],INV1 CB2 Current [A],INV1 CB3 Current [A],INV2 CB1 Current [A],INV2 CB2 Current [A],INV2 CB3 Current [A],INV3 CB1 Current [A],INV3 CB2 Current [A],INV3 CB3 Current [A],INV1 AC Power [kW],INV2 AC Power [kW],INV3 AC Power [kW],apparent_zenith,zenith,apparent_elevation,elevation,azimuth,equation_of_time,aoi -2022-01-05 00:00:00,1.069027,,,,,,,,,,-11.67601,-8.526217,,,,,,,,,,,,,160.00998020281045,160.00998020281045,-70.00998020281045,-70.00998020281045,3.16402318811231,-5.244508918804058,156.33263130086794 -2022-01-05 00:15:00,1.218347,,,,,,,,,,-10.71838,-7.358494,,,,,,,,,,,,,159.61658636000453,159.61658636000453,-69.61658636000455,-69.61658636000455,13.138328308505265,-5.249180891598371,159.64158725879298 -2022-01-05 00:30:00,0.5797986,,,,,,,,,,-9.996516,-6.536161,,,,,,,,,,,,,158.76703492902075,158.76703492902075,-68.76703492902075,-68.76703492902075,22.592518191033605,-5.253852054578601,162.85994049254788 -2022-01-05 00:45:00,0.6020421,,,,,,,,,,-9.189205,-5.791483,,,,,,,,,,,,,157.51396864859737,157.51396864859737,-67.51396864859738,-67.51396864859738,31.26630311690792,-5.258522407337296,165.92338777433648 -2022-01-05 01:00:00,0.2589272,,,,,,,,,,-8.529516,-5.298972,,,,,,,,,,,,,155.92176772569897,155.92176772569897,-65.92176772569897,-65.92176772569897,39.04886194710639,-5.263191948852182,168.70321333852985 -2022-01-05 01:15:00,0.02859372,,,,,,,,,,-8.239856,-5.170183,,,,,,,,,,,,,154.05465465734278,154.05465465734278,-64.05465465734278,-64.05465465734278,45.947908175885686,-5.267860678752186,170.932850931797 -2022-01-05 01:30:00,0.02541689,,,,,,,,,,-8.140345,-4.9114,,,,,,,,,,,,,151.96971537017262,151.96971537017262,-61.969715370172615,-61.969715370172615,52.04068144150165,-5.2725285965934745,172.12857466230247 -2022-01-05 01:45:00,-0.08419616,,,,,,,,,,-8.281861,-5.063289,,,,,,,,,,,,,149.7144041070441,149.7144041070441,-59.714404107044096,-59.714404107044096,57.433054311722344,-5.277195701339224,171.82286980935507 -2022-01-05 02:00:00,-0.393975,,,,,,,,,,-8.922639,-5.946322,,,,,,,,,,,,,147.32674522011925,147.32674522011925,-57.32674522011926,-57.32674522011926,62.234239460743936,-5.281861992625636,170.15469609774138 -2022-01-05 02:15:00,-0.3066016,,,,,,,,,,-9.644333,-6.723111,,,,,,,,,,,,,144.83668991800857,144.83668991800857,-54.83668991800857,-54.83668991800857,66.54437533547343,-5.286527470034343,167.6654856041906 -2022-01-05 02:30:00,0.003177027,,,,,,,,,,-10.00414,-7.043106,,,,,,,,,,,,,142.26772938394447,142.26772938394447,-52.26772938394446,-52.26772938394446,70.45006260294002,-5.291192132564902,164.75296525848407 -2022-01-05 02:45:00,0.1096092,,,,,,,,,,-10.09863,-7.008945,,,,,,,,,,,,,139.63836460500417,139.63836460500417,-49.63836460500418,-49.63836460500418,74.02398845534589,-5.295855979820772,161.6182219412408 -2022-01-05 03:00:00,0.1064322,,,,,,,,,,-10.28779,-7.137044,,,,,,,,,,,,,136.96331176587802,136.96331176587802,-46.96331176587803,-46.96331176587803,77.32630552915259,-5.300519011347205,158.35870620632895 -2022-01-05 03:15:00,0.0,,,,,,,,,,-10.70247,-7.4041,,,,,,,,,,,,,134.254441429276,134.254441429276,-44.25444142927601,-44.25444142927601,80.40655734345904,-5.305181226198329,155.0244272401752 -2022-01-05 03:30:00,0.0,,,,,,,,,,-11.10306,-7.509205,,,,,,,,,,,,,131.5214919437005,131.5214919437005,-41.52149194370052,-41.52149194370052,83.30559607663838,-5.309842623901204,151.64304165610508 -2022-01-05 03:45:00,0.0,,,,,,,,,,-11.41071,-7.805861,,,,,,,,,,,,,128.77260809363668,128.77260809363668,-38.772608093636684,-38.772608093636684,86.0572743810452,-5.314503204110224,148.23096757259958 -2022-01-05 04:00:00,0.0,,,,,,,,,,-11.81071,-8.3981,,,,,,,,,,,,,126.01474716361818,126.01474716361818,-36.01474716361819,-36.01474716361819,88.68985754252844,-5.319162965763098,144.79858977620793 -2022-01-05 04:15:00,0.0,,,,,,,,,,-12.17561,-8.920567,,,,,,,,,,,,,123.25398571488945,123.25398571488945,-33.25398571488945,-33.25398571488945,91.2271699500613,-5.323821908532409,141.3528619843301 -2022-01-05 04:30:00,0.0,,,,,,,,,,-12.04299,-8.910183,,,,,,,,,,,,,120.49575539793695,120.49575539793695,-30.49575539793695,-30.49575539793695,93.6895107271722,-5.328480031952495,137.89869287970768 -2022-01-05 04:45:00,0.0873676,,,,,,,,,,-11.5078,-8.678711,,,,,,,,,,,,,117.7450260260348,117.7450260260348,-27.745026026034797,-27.745026026034797,96.09438100681837,-5.333137335037463,134.4397264758418 -2022-01-05 05:00:00,0.0873676,,,,,,,,,,-10.52836,-8.186017,,,,,,,,,,,,,115.00644895049655,115.00644895049655,-25.006448950496544,-25.006448950496544,98.45706134895721,-5.337793817434431,130.97880275153042 -2022-01-05 05:15:00,0.3177018,,,,,,,,,,-9.649034,-7.738228,,,,,,,,,,,,,112.28447328424406,112.28447328424406,-22.284473284244058,-22.284473284244058,100.79106879576204,-5.342449478663184,127.51824415818993 -2022-01-05 05:30:00,1.345465,,,,,,,,,,-8.792339,-7.476972,,,,,,,,,,,,,109.58344137895637,109.58344137895637,-19.58344137895636,-19.58344137895636,103.10851976477034,-5.347104317734193,124.06004136517386 -2022-01-05 05:45:00,2.12069,,,,,,,,,,-7.662806,-7.020505,,,,,,,,,,,,,106.90766795233628,106.90766795233628,-16.907667952336276,-16.907667952336276,105.42041926969011,-5.351758334283659,120.60597783467668 -2022-01-05 06:00:00,2.10169,,,,,,,,,,-6.689061,-6.506834,,,,,,,,,,,,,104.26150905226844,104.26150905226844,-14.261509052268442,-14.261509052268442,107.73688953357794,-5.356411527853197,117.1577194869516 -2022-01-05 06:15:00,1.979401,,,,,,,,,,-5.890139,-5.942461,,,,,,,,,,,,,101.64942259901575,101.64942259901575,-11.649422599015754,-11.649422599015754,110.0673501125608,-5.361063897551503,113.71688204746307 -2022-01-05 06:30:00,1.512287,,,,,,,,,,-5.264884,-5.4799,,,,,,,,,,,,,99.07602147493955,99.07602147493955,-9.076021474939557,-9.076021474939557,112.42065859697857,-5.3657154428365175,110.28508339591922 -2022-01-05 06:45:00,1.440562,,,,,,,,,,-4.775061,-5.103017,,,,,,,,,,,,,96.5461226128259,96.5461226128259,-6.546122612825892,-6.546122612825892,114.80521574274269,-5.370366163406288,106.86398935680212 -2022-01-05 07:00:00,2.279092,256.7679,256.2846,256.5718,267.4807,266.5852,267.1176,278.9096,279.3651,279.4882,-4.283155,-4.373294,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,94.0647917145137,94.0647917145137,-4.064791714513705,-4.064791714513705,117.22903968268088,-5.375016058220353,103.45535542779938 -2022-01-05 07:15:00,2.822341,388.7431,387.1234,388.2163,377.9597,353.7957,377.8745,384.4873,381.7642,382.3477,-3.770317,-3.570317,0.009913795,0.009913795,0.0,0.01333333,0.01333333,0.01333333,0.0107438,0.0107438,0.006198345,0.03965517,0.04944444,0.0107438,91.63738283139236,91.63738283139236,-1.637382831392359,-1.637382831392359,119.69981233752253,-5.379665126882173,100.06106594192738 -2022-01-05 07:30:00,3.26234,494.7114,496.5162,484.3743,499.6245,423.2599,495.4251,502.8521,500.1427,503.7253,-3.314744,-2.990978,0.05991379,0.05814388,0.03303571,0.06333333,0.06333333,0.06333333,0.04741047,0.04741047,0.04286501,0.2396552,0.2345929,0.04741047,88.88434591402789,89.26957455309372,1.1156540859721096,0.7304254469062778,122.22489695211402,-5.38431336900976,96.68317570140422 -2022-01-05 07:45:00,4.394756,492.5038,502.8697,480.7201,518.624,460.3073,499.9526,518.028,525.375,515.3932,-2.867678,-2.717878,0.09999999,0.09823009,0.08303571,0.09999999,0.09999999,0.09999999,0.08666666,0.08666666,0.08666666,0.4480469,0.4253271,0.1206116,86.74411977902948,86.96740093092653,3.255880220970527,3.0325990690734654,124.81132748456866,-5.388960783577204,93.32395468641471 -2022-01-05 08:00:00,6.341689,519.8452,530.4985,516.1296,538.2413,536.2116,511.0573,524.2973,536.7109,513.8563,-2.22215,-2.649089,0.1273504,0.1273504,0.1064103,0.1213334,0.1213334,0.1213334,0.1261905,0.1259615,0.1158654,0.5377905,0.5208452,0.2148973,84.58420802923317,84.73727491292887,5.41579197076683,5.262725087071132,127.46576999099801,-5.393607370209793,89.98593639990837 -2022-01-05 08:15:00,9.50158,557.3946,561.6168,556.8163,572.9615,581.6041,550.8978,560.9218,568.201,559.8977,-1.911483,-2.950828,0.2318448,0.2346538,0.1811294,0.230049,0.230049,0.230049,0.2294615,0.232906,0.2121617,0.7470469,0.7540612,0.4608589,82.47008808272044,82.58600432455486,7.52991191727956,7.413995675445136,130.19445267338853,-5.398253128510987,86.67197451937481 -2022-01-05 08:30:00,17.47532,603.6666,602.7585,603.7078,608.5931,618.8737,593.1352,605.7507,607.8348,611.527,-1.847694,-3.278228,0.4212912,0.4330846,0.3801878,0.4182093,0.4182093,0.4182093,0.4171365,0.4241713,0.4021786,1.234256,1.201519,0.926125,80.42740483440626,80.52079695248398,9.572595165593738,9.479203047516018,133.00306426019188,-5.402898057480343,83.38530860897369 -2022-01-05 08:45:00,27.68384,636.7689,637.2244,636.6835,634.3732,641.5668,626.8843,636.4623,638.1898,642.2595,-1.20765,-3.001067,0.6974538,0.7064382,0.6507242,0.6828544,0.686133,0.6840839,0.6956837,0.7044996,0.6758823,1.875128,1.806173,1.548036,78.47080161242897,78.54925098897326,11.52919838757103,11.450749011026748,135.8966212162057,-5.407542156710406,80.12963996025661 -2022-01-05 09:00:00,54.13859,668.2807,673.6044,668.9899,664.8721,649.3834,660.564,669.7222,670.6644,671.3162,-0.5778555,-2.383795,1.572036,1.579364,1.498704,1.573361,1.576639,1.57459,1.57688,1.599001,1.571234,3.752917,3.663049,3.489472,76.61142434378215,76.67932919706303,13.388575656217853,13.320670802936968,138.87930221578415,-5.412185425779171,76.90922295315988 -2022-01-05 09:15:00,82.93109,698.0595,704.5355,698.5138,694.6389,675.1807,689.9506,698.5702,698.8366,699.6783,-0.2303111,-1.635106,2.56953,2.593245,2.48286,2.542233,2.542233,2.542233,2.554521,2.582449,2.561594,5.989615,5.816554,5.722339,74.85917940595097,74.91931220399323,15.140820594049034,15.08068779600677,141.95425366588438,-5.416827863751678,73.72897366779351 -2022-01-05 09:30:00,85.68211,701.0784,706.6226,703.8977,704.4694,701.5593,700.045,699.6959,702.0238,709.1528,-0.05290556,-1.241533,2.703445,2.719244,2.595294,2.66193,2.664455,2.664455,2.621104,2.646748,2.600771,6.307815,6.20226,5.915507,73.22350256376413,73.27772667581235,16.776497436235875,16.72227332418766,145.1233734177053,-5.421469470173179,70.59459794286605 -2022-01-05 09:45:00,81.89581,694.6993,697.9531,696.4498,693.7531,691.1578,687.1659,696.6524,698.0536,703.1678,-0.04693333,-1.089439,2.567747,2.58131,2.45692,2.47075,2.469064,2.473274,2.531537,2.561512,2.506002,5.977227,5.724963,5.697488,71.71361241054161,71.76324677835811,18.286387589458382,18.236753221641898,148.3870801045398,-5.426110244734446,67.51274519371401 -2022-01-05 10:00:00,95.24964,701.9952,703.9135,702.0649,699.006,693.4661,693.4584,708.1381,708.0665,708.804,0.08261666,-0.8457611,2.941308,2.981795,2.841419,2.848167,2.843957,2.848167,3.107013,3.141545,3.102712,6.816117,6.545922,6.949242,70.33854610409713,70.38456601226785,19.661453895902866,19.61543398773215,151.74408370190457,-5.430750186329533,64.49119034003344 -2022-01-05 10:15:00,112.4451,707.2263,709.1207,707.4144,711.0668,703.3551,706.9276,709.6713,710.4283,711.1548,1.059355,-0.5234833,3.385129,3.439897,3.286656,3.440125,3.442814,3.443889,3.536546,3.567555,3.541718,7.802028,7.882526,7.883739,69.10708379200777,69.15023865301754,20.89291620799223,20.84976134698247,155.19117802520327,-5.435389294620109,61.53904573672582 -2022-01-05 10:30:00,90.24828,686.0576,685.5192,684.4316,689.0811,685.8887,680.2935,685.1116,690.0568,688.392,2.073883,-0.2815389,2.663826,2.701441,2.578111,2.759356,2.756757,2.76312,2.744738,2.754724,2.741056,6.158053,6.300956,6.080851,68.02760802171206,68.06849423672,21.97239197828794,21.931505763280004,158.7230759927843,-5.440027569198719,58.66700700406369 -2022-01-05 10:45:00,74.26115,674.5531,672.4007,671.4797,674.4031,674.1002,663.2898,673.8268,680.7122,679.0284,2.179517,-0.1622222,2.134976,2.174359,2.065104,2.205235,2.199946,2.205631,2.318842,2.311465,2.301164,4.964887,5.026237,5.061083,67.10792152497692,67.147029674479,22.89207847502309,22.852970325520992,162.33231471213253,-5.444665009108576,55.88762931916387 -2022-01-05 11:00:00,83.69518,682.1403,683.1378,677.858,684.7149,682.5598,676.6188,681.5537,685.6182,686.2438,2.522033,0.09223889,2.524092,2.574858,2.456246,2.580043,2.584658,2.585054,2.688624,2.693235,2.672253,5.837101,5.870372,5.864253,66.35504080260068,66.39278752473614,23.64495919739931,23.607212475263868,166.00925708571492,-5.449301613916759,53.21562443547494 -2022-01-05 11:15:00,99.909,693.6894,696.4601,691.0527,699.0983,693.7806,693.3125,694.8394,695.7477,697.5314,3.147772,0.3917778,3.243361,3.292742,3.157979,3.3688,3.369298,3.373416,3.386996,3.408058,3.381927,7.416766,7.614819,7.44608,65.77498302828248,65.81173346788475,24.225016971717523,24.18826653211525,169.74220761611832,-5.453937383266748,50.6681610034042 -2022-01-05 11:30:00,98.77921,692.5628,693.6614,692.2521,694.925,690.2365,688.9215,697.6206,697.2559,698.0062,3.411294,0.6336111,3.214906,3.262419,3.116057,3.319954,3.315837,3.319954,3.479678,3.502502,3.488825,7.335231,7.5053,7.671556,65.37256280907678,65.40864715267648,24.62743719092321,24.591352847323527,173.5176551452721,-5.458572316074424,48.26512976722817 -2022-01-05 11:45:00,83.96643,681.813,682.2324,681.5742,684.4619,683.1263,677.6793,688.4916,690.1172,690.3926,3.670956,0.9635667,2.657012,2.69451,2.553857,2.703815,2.699054,2.699054,2.98665,3.006768,2.99543,6.107737,6.167727,6.587911,65.15121598929971,65.18694230400021,24.848784010700285,24.813057695999785,177.32064243456057,-5.463206412052386,46.02931048057619 -2022-01-05 12:00:00,75.41232,673.7775,674.7064,672.8231,678.122,679.3292,669.6417,677.9534,679.806,682.4819,3.766117,1.2543,2.370769,2.398623,2.271461,2.436227,2.428094,2.434019,2.571002,2.584083,2.553671,5.462979,5.56796,5.657818,65.11286688129039,65.14853175304447,24.88713311870961,24.851468246955537,181.13524267112155,-5.467839670760441,43.986348362341346 -2022-01-05 12:15:00,60.06609,662.7966,663.1763,657.7267,664.1335,666.9415,654.3842,663.8904,664.0193,667.9169,3.567539,1.436278,1.87613,1.897936,1.799266,1.948529,1.945158,1.951082,1.89213,1.903229,1.863861,4.347672,4.433039,4.142947,65.25785116492838,65.29374923739778,24.742148835071617,24.706250762602217,184.9451127297846,-5.47247209123816,42.16441146579847 -2022-01-05 12:30:00,60.27884,662.1061,662.4284,658.8806,662.7977,665.3964,652.7141,663.2478,662.1768,664.7816,3.597144,1.699072,1.896124,1.920557,1.814436,1.925462,1.922983,1.927529,1.822289,1.848639,1.815273,4.386229,4.357357,4.000248,65.58490222225727,65.62133555258356,24.415097777742726,24.378664447416448,188.73408190055088,-5.477103673052625,40.59338116615426 -2022-01-05 12:45:00,55.42746,656.3521,659.1337,658.7725,659.8624,664.5814,651.8555,660.4708,659.1077,659.9966,3.739917,2.029994,1.713886,1.733645,1.627293,1.729061,1.72584,1.731127,1.690052,1.715852,1.696465,3.990028,3.970002,3.692209,66.09120230348563,66.12849042130144,23.90879769651437,23.871509578698568,192.48672500034337,-5.481734415832761,39.303450013930984 -2022-01-05 13:00:00,60.47979,660.139,663.8647,661.6719,661.8779,665.6215,653.2807,662.6738,661.9186,664.746,3.987206,2.356395,1.856426,1.877099,1.75995,1.928836,1.925952,1.928836,1.815956,1.829708,1.809718,4.311738,4.422169,3.961486,66.77249324079192,66.81098491309612,23.227506759208087,23.189015086903883,196.1888755917231,-5.486364318581764,38.32308945581462 -2022-01-05 13:15:00,57.50068,656.9092,661.16,658.5895,656.5267,662.4698,647.1981,656.6008,657.7494,661.8502,4.210311,2.586161,1.785146,1.802328,1.692727,1.808992,1.808529,1.80689,1.662055,1.676816,1.64626,4.182762,4.168908,3.647889,67.62323635836272,67.66332435991008,22.37676364163728,22.33667564008992,199.82804385109262,-5.490993380928558,37.67653018212869 -2022-01-05 13:30:00,35.39885,640.5162,646.2947,645.0502,643.5842,653.0806,634.766,638.9782,643.0905,647.9416,3.990505,2.598294,1.064733,1.074775,0.9912385,1.056756,1.058437,1.054656,0.995038,1.001969,0.9794992,2.640988,2.567237,2.195422,68.63680637791614,68.6789471306036,21.363193622083855,21.3210528693964,203.39371277008695,-5.495621602476604,37.381135340498496 -2022-01-05 13:45:00,28.48105,631.9767,637.3043,635.208,639.2286,649.3602,627.9662,630.7734,634.9849,640.5878,3.593911,2.434733,0.8225462,0.8426348,0.754187,0.850041,0.850041,0.8513122,0.8094593,0.8124896,0.78776,2.128207,2.137554,1.783666,69.80570244339924,69.85044340352812,20.19429755660076,20.149556596471875,206.8775063541855,-5.5002489822181815,37.445235773751314 -2022-01-05 14:00:00,20.0643,600.7628,606.9224,602.688,609.0769,630.2473,582.0532,602.2438,604.3431,606.4645,3.281367,2.274872,0.5646493,0.5859998,0.5085154,0.5852814,0.5852814,0.5865526,0.5576097,0.5577555,0.5315948,1.553771,1.534306,1.194294,71.12175953384576,71.16977904121103,18.878240466154242,18.830220958788974,210.2732375243255,-5.504875519764028,37.86700598796192 -2022-01-05 14:15:00,12.03206,566.8278,576.1127,569.0104,575.5764,607.3717,525.7014,567.8884,571.3187,568.7606,2.953317,2.202833,0.3316486,0.338365,0.2752374,0.3382075,0.3382075,0.3382075,0.3096086,0.2996818,0.2820288,1.001472,0.9334906,0.6229808,72.57634264384818,72.62851035543362,17.423657356151818,17.371489644566385,213.57685008478742,-5.509501214772172,38.63471554561489 -2022-01-05 14:30:00,11.54156,560.6672,573.7137,566.7676,570.7656,603.7896,517.2468,565.7368,567.319,564.3837,2.747917,2.1629,0.3018902,0.3043655,0.2461071,0.3181804,0.3181804,0.3181804,0.285136,0.2790647,0.2676057,0.9327453,0.8805404,0.5837864,74.16050709481209,74.21797975522705,15.839492905187914,15.782020244772951,216.78628005554143,-5.514126066194876,39.728278715167605 -2022-01-05 14:45:00,11.7781,558.0919,569.4493,566.3571,573.4453,606.9168,522.6884,566.5008,565.3292,566.881,2.681978,2.153795,0.2984357,0.3009109,0.2488647,0.3240842,0.3246219,0.3246219,0.2986815,0.3002697,0.2808642,0.9341089,0.9162475,0.6169963,75.86510530183598,75.92948623945821,14.134894698164024,14.070513760541791,219.90126360777236,-5.518750073715637,41.121654693936954 -2022-01-05 15:00:00,10.06,547.6113,560.8682,552.4406,565.1455,601.9461,504.0838,551.5723,550.4787,551.4478,2.672578,2.213839,0.2601818,0.2601818,0.2136161,0.2821544,0.2826921,0.2826921,0.2482021,0.2388195,0.2139892,0.8278282,0.8104863,0.4863349,77.68080530816246,77.75442609744816,12.319194691837541,12.245573902551843,222.92311367989413,-5.5233732368687924,42.78549423488038 -2022-01-05 15:15:00,7.197282,523.1071,540.0151,523.668,537.5477,582.0798,437.6714,525.293,526.4208,523.3001,2.686544,2.323233,0.1825337,0.1728114,0.1449495,0.2019642,0.2019642,0.2015369,0.163875,0.149375,0.133125,0.6499579,0.6022426,0.2911448,79.59794875505554,79.6844036029176,10.402051244944456,10.3155963970824,225.85448787915715,-5.527995554697554,44.689516488851396 -2022-01-05 15:30:00,5.768328,499.7484,514.1613,497.4914,515.8997,564.9569,388.2683,509.0863,512.614,505.1281,2.7563,2.476383,0.1167557,0.1070335,0.09999999,0.169193,0.169193,0.1687658,0.1252895,0.105,0.1,0.5219374,0.4944445,0.2011777,81.60605832099785,81.71131395416369,8.39394167900215,8.288686045836318,228.6991653219829,-5.532617026845401,46.80432329997986 -2022-01-05 15:45:00,5.069704,482.6524,493.3478,470.3787,519.7617,564.6746,401.4214,514.3847,511.4089,506.0918,2.870844,2.608283,0.1127213,0.1075626,0.08214285,0.1391904,0.1391904,0.1391904,0.1176414,0.0962963,0.09320988,0.4881411,0.4221649,0.1751091,83.69241155967904,83.82739971898768,6.307588440320949,6.172600281012323,231.4618416995447,-5.537237652890326,49.1025799011978 -2022-01-05 16:00:00,3.499427,492.2945,502.7438,479.0223,501.8945,521.1625,446.6686,517.0881,512.7972,512.9675,3.047011,2.931589,0.07713564,0.06652238,0.03214286,0.04948453,0.04948453,0.04948453,0.05185185,0.04629629,0.04320987,0.2983333,0.1721649,0.0719512,85.83759390607976,86.02528487212602,4.162406093920245,3.974715127873983,234.14795129535213,-5.541857431864628,51.559641127915725 -2022-01-05 16:15:00,1.945011,427.4741,434.3824,425.9121,401.6141,397.9849,402.281,421.7161,421.3511,421.61,3.282778,3.387633,0.01681818,0.01136363,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.065,0.0,0.0,87.99919082057268,88.29799102964157,2.0008091794273195,1.7020089703584345,236.76352092568953,-5.546476363339025,54.153765250660356 -2022-01-05 16:30:00,0.5525505,340.2226,340.6613,341.0043,326.1753,321.6065,327.361,327.0336,326.8869,327.1664,3.454261,3.5978,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,90.0616219630588,90.63893768234271,-0.06162196305879197,-0.6389376823427142,239.31505500239967,-5.551094447000651,56.86605663271633 -2022-01-05 16:45:00,0.0,,,,,,,,,,3.559789,3.683561,,,,,,,,,,,,,93.04193034372028,93.04193034372028,-3.0419303437202783,-3.0419303437202783,241.80945267968877,-5.555711681874527,59.68025418823589 -2022-01-05 17:00:00,0.0,,,,,,,,,,3.618305,3.767767,,,,,,,,,,,,,95.50114027438305,95.50114027438305,-5.501140274383045,-5.501140274383045,244.25395694698693,-5.560328067473165,62.58244915986585 -2022-01-05 17:15:00,0.0,,,,,,,,,,3.639333,3.789972,,,,,,,,,,,,,98.01107599409393,98.01107599409393,-8.01107599409393,-8.01107599409393,246.65613227177406,-5.564943603490974,65.56078244873838 -2022-01-05 17:30:00,0.0,,,,,,,,,,3.5844,3.761444,,,,,,,,,,,,,100.5665490129997,100.5665490129997,-10.566549012999708,-10.566549012999708,249.02387074449138,-5.5695582889457,68.60515263968466 -2022-01-05 17:45:00,0.0,,,,,,,,,,3.468411,3.7482,,,,,,,,,,,,,103.16263586563332,103.16263586563332,-13.162635865633325,-13.162635865633325,251.36542712337268,-5.574172123433527,71.70695118539979 -2022-01-05 18:00:00,0.0,,,,,,,,,,3.353839,3.74555,,,,,,,,,,,,,105.7946349147738,105.7946349147738,-15.794634914773795,-15.794634914773795,253.68948122935223,-5.578785106554278,74.85882823904598 -2022-01-05 18:15:00,0.0,,,,,,,,,,3.341539,3.734205,,,,,,,,,,,,,108.45801889124138,108.45801889124138,-18.458018891241384,-18.458018891241384,256.00523025311264,-5.583397237380268,78.0544908750286 -2022-01-05 18:30:00,0.0,,,,,,,,,,3.3907,3.7541,,,,,,,,,,,,,111.14838374531465,111.14838374531465,-21.148383745314646,-21.148383745314646,258.32251491451734,-5.588008515482215,81.28853285432503 -2022-01-05 18:45:00,0.0,,,,,,,,,,3.377056,3.73785,,,,,,,,,,,,,113.8613906095349,113.8613906095349,-23.861390609534894,-23.861390609534894,260.65198244621547,-5.592618940463581,84.5562900004084 -2022-01-05 19:00:00,0.0,,,,,,,,,,3.361028,3.661195,,,,,,,,,,,,,116.59270018482799,116.59270018482799,-26.59270018482799,-26.59270018482799,263.00529438460063,-5.597228511433059,87.85371866842551 -2022-01-05 19:15:00,0.0,,,,,,,,,,3.371022,3.600578,,,,,,,,,,,,,119.33789816534711,119.33789816534711,-29.337898165347116,-29.337898165347116,265.3953899009538,-5.601837227917713,91.17729501676291 -2022-01-05 19:30:00,0.0,,,,,,,,,,3.375444,3.532639,,,,,,,,,,,,,122.09240600822511,122.09240600822511,-32.09240600822511,-32.09240600822511,267.83681601133054,-5.6064450895901246,94.52392911442979 -2022-01-05 19:45:00,0.0,,,,,,,,,,3.327011,3.430722,,,,,,,,,,,,,124.85137329073676,124.85137329073676,-34.85137329073676,-34.85137329073676,270.3461429834887,-5.611052095442574,97.89089221775964 -2022-01-05 20:00:00,0.0,,,,,,,,,,3.144139,3.343006,,,,,,,,,,,,,127.60954614306854,127.60954614306854,-37.60954614306854,-37.60954614306854,272.9424884784366,-5.615658245122177,101.27575599782705 -2022-01-05 20:15:00,0.0,,,,,,,,,,2.824372,3.250855,,,,,,,,,,,,,130.36110045534102,130.36110045534102,-40.36110045534101,-40.36110045534101,275.6481768872143,-5.620263538254221,104.67633875303402 -2022-01-05 20:30:00,0.0,,,,,,,,,,2.491167,3.118528,,,,,,,,,,,,,133.0994285174826,133.0994285174826,-43.099428517482615,-43.099428517482615,278.48956925615744,-5.6248679738237115,108.09065788337368 -2022-01-05 20:45:00,0.0,,,,,,,,,,2.307678,3.000839,,,,,,,,,,,,,135.81686320616092,135.81686320616092,-45.816863206160924,-45.816863206160924,281.4981041460624,-5.629471551437746,111.51688810973529 -2022-01-05 21:00:00,0.0,,,,,,,,,,1.7709,2.888272,,,,,,,,,,,,,138.50431447020387,138.50431447020387,-48.50431447020387,-48.50431447020387,284.71158566980216,-5.6340742708162,114.95332080122253 -2022-01-05 21:15:00,0.0,,,,,,,,,,0.9201111,2.717283,,,,,,,,,,,,,141.15078862312964,141.15078862312964,-51.150788623129635,-51.150788623129635,288.1757430356519,-5.6386761308822315,118.39832372531993 -2022-01-05 21:30:00,0.06509745,,,,,,,,,,0.4537278,2.50225,,,,,,,,,,,,,143.74275231442215,143.74275231442215,-53.742752314422134,-53.742752314422134,291.94603879374597,-5.643277131319337,121.85030020746892 -2022-01-05 21:45:00,0.1349576,,,,,,,,,,0.6946833,2.38955,,,,,,,,,,,,,146.26329269489145,146.26329269489145,-56.26329269489143,-56.26329269489143,296.08958193924315,-5.647877271701873,125.30764182976557 -2022-01-05 22:00:00,0.1238432,,,,,,,,,,1.349,2.426222,,,,,,,,,,,,,148.69102970519222,148.69102970519222,-58.691029705192214,-58.691029705192214,300.6867508840904,-5.652476551116706,128.76867172051732 -2022-01-05 22:15:00,0.05398305,,,,,,,,,,1.658111,2.46515,,,,,,,,,,,,,150.99876179947867,150.99876179947867,-60.99876179947867,-60.99876179947867,305.83162626383825,-5.657074969138193,132.23157341271232 -2022-01-05 22:30:00,0.0,,,,,,,,,,1.763967,2.424556,,,,,,,,,,,,,153.15190758447358,153.15190758447358,-63.151907584473584,-63.151907584473584,311.62942259092176,-5.661672525395261,135.69429246464668 -2022-01-05 22:45:00,0.0,,,,,,,,,,1.856689,2.288389,,,,,,,,,,,,,155.1070125817784,155.1070125817784,-65.1070125817784,-65.1070125817784,318.1877443090899,-5.666269218952948,139.1543958377931 -2022-01-05 23:00:00,0.0,,,,,,,,,,1.776428,2.0909,,,,,,,,,,,,,156.8109898495626,156.8109898495626,-66.81098984956257,-66.81098984956257,325.5971128985891,-5.670865049367421,142.6088625304839 -2022-01-05 23:15:00,0.0,,,,,,,,,,1.535172,1.8706,,,,,,,,,,,,,158.20236226913903,158.20236226913903,-68.20236226913903,-68.20236226913903,333.8966968859229,-5.6754600163476425,146.05375313248638 -2022-01-05 23:30:00,0.0,,,,,,,,,,1.226222,1.668444,,,,,,,,,,,,,159.216263716213,159.216263716213,-69.21626371621299,-69.21626371621299,343.02760649147353,-5.680054118874978,149.48366772781992 -2022-01-05 23:45:00,0.0,,,,,,,,,,0.9569556,1.491645,,,,,,,,,,,,,159.79438563848413,159.79438563848413,-69.79438563848413,-69.79438563848413,352.7917360254279,-5.684647356578353,152.8908142293174 -2022-01-06 00:00:00,0.0,,,,,,,,,,0.8543167,1.358478,,,,,,,,,,,,,159.8983151017494,159.8983151017494,-69.89831510174942,-69.89831510174942,2.850582576555837,-5.689239729090332,156.26331531560993 -2022-01-06 00:15:00,0.0,,,,,,,,,,0.9645444,1.310061,,,,,,,,,,,,,159.52068181346215,159.52068181346215,-69.52068181346215,-69.52068181346215,12.789491345807505,-5.693831235468679,159.58194903559237 -2022-01-06 00:30:00,0.0,,,,,,,,,,1.079178,1.24485,,,,,,,,,,,,,158.68751279694447,158.68751279694447,-68.68751279694449,-68.68751279694449,22.225641320176635,-5.69842187525137,162.81345001975365 -2022-01-06 00:45:00,0.0,,,,,,,,,,1.060778,1.163022,,,,,,,,,,,,,157.45022243162634,157.45022243162634,-67.45022243162636,-67.45022243162636,30.897106418407134,-5.7030116482164885,165.8957788639275 -2022-01-06 01:00:00,0.0,,,,,,,,,,0.8913778,0.9668722,,,,,,,,,,,,,155.8723439556344,155.8723439556344,-65.87234395563439,-65.87234395563439,38.68875109653038,-5.707600553243537,168.70416322962447 -2022-01-06 01:15:00,0.0,,,,,,,,,,0.6817,0.7114444,,,,,,,,,,,,,154.01769455529183,154.01769455529183,-64.01769455529184,-64.01769455529184,45.603632668737646,-5.712188590008736,170.97720923966108 -2022-01-06 01:30:00,0.0,,,,,,,,,,0.4881722,0.5320611,,,,,,,,,,,,,151.9432900634307,151.9432900634307,-61.94329006343072,-61.94329006343072,51.715308704755785,-5.716775758213771,172.22859699613133 -2022-01-06 01:45:00,0.03334815,,,,,,,,,,0.1596667,0.3558556,,,,,,,,,,,,,149.6967072305453,149.6967072305453,-59.696707230545286,-59.696707230545286,57.12722888833457,-5.7213620567818,171.96521712000927 -2022-01-06 02:00:00,0.05716803,,,,,,,,,,0.001344444,0.3103889,,,,,,,,,,,,,147.31617547254797,147.31617547254797,-57.31617547254798,-57.31617547254798,61.94721818665175,-5.725947485439974,170.30986705070742 -2022-01-06 02:15:00,0.02381988,,,,,,,,,,0.01885555,0.2290167,,,,,,,,,,,,,144.83186809225344,144.83186809225344,-54.83186809225346,-54.83186809225346,66.27472767517594,-5.730532043762651,167.81783175988105 -2022-01-06 02:30:00,0.004763797,,,,,,,,,,-0.08493889,0.07783333,,,,,,,,,,,,,142.26748330537038,142.26748330537038,-52.267483305370384,-52.267483305370384,70.19609273152781,-5.735115730793041,164.8985502536122 -2022-01-06 02:45:00,0.0349345,,,,,,,,,,-0.3250833,-0.003361111,,,,,,,,,,,,,139.64170178939628,139.64170178939628,-49.64170178939629,-49.64170178939629,73.78396835476673,-5.739698546156433,161.75694025897394 -2022-01-06 03:00:00,0.0301707,,,,,,,,,,-0.6285222,-0.1409111,,,,,,,,,,,,,136.96938988626363,136.96938988626363,-46.96938988626362,-46.96938988626362,77.09859244410359,-5.744280489503581,158.49129293890948 -2022-01-06 03:15:00,0.0,,,,,,,,,,-0.7735777,-0.3065833,,,,,,,,,,,,,134.26254103045557,134.26254103045557,-44.262541030455566,-44.262541030455566,80.18964505582551,-5.748861559884972,155.15166097818573 -2022-01-06 03:30:00,0.0,,,,,,,,,,-0.8563611,-0.5573056,,,,,,,,,,,,,131.5309929300878,131.5309929300878,-41.5309929300878,-41.5309929300878,83.0981303278113,-5.753441756860411,151.76557249702154 -2022-01-06 03:45:00,-0.870305,,,,,,,,,,-1.239194,-0.9946111,,,,,,,,,,,,,128.78297015807752,128.78297015807752,-38.78297015807751,-38.78297015807751,85.85805003489514,-5.758021080142498,148.34930451524315 -2022-01-06 04:00:00,-0.7924885,,,,,,,,,,-2.046611,-1.26925,,,,,,,,,,,,,126.0254937746457,126.0254937746457,-36.02549377464569,-36.02549377464569,88.4978073188604,-5.762599528727151,144.91312301551136 -2022-01-06 04:15:00,0.150866,,,,,,,,,,-2.45495,-1.252161,,,,,,,,,,,,,123.26469111235416,123.26469111235416,-33.26469111235416,-33.26469111235416,91.04135003627442,-5.767177102246933,141.4638880573866 -2022-01-06 04:30:00,0.2318532,,,,,,,,,,-2.031011,-1.122422,,,,,,,,,,,,,120.50603404835424,120.50603404835424,-30.506034048354238,-30.506034048354238,93.5090860130511,-5.771753800374427,138.00643546461225 -2022-01-06 04:45:00,0.1588037,,,,,,,,,,-1.796811,-1.093739,,,,,,,,,,,,,117.75452405633838,117.75452405633838,-27.75452405633838,-27.75452405633838,95.9186112813104,-5.77632962208736,134.5443521891232 -2022-01-06 05:00:00,-0.1746864,,,,,,,,,,-2.581,-1.304094,,,,,,,,,,,,,115.01483716191568,115.01483716191568,-25.014837161915676,-25.014837161915676,98.28528903986398,-5.780904567054677,131.0804327939427 -2022-01-06 05:15:00,-0.1746864,,,,,,,,,,-3.530378,-1.726,,,,,,,,,,,,,112.29144142855544,112.29144142855544,-22.291441428555448,-22.291441428555448,100.62270843464785,-5.785478634945321,127.61696280389886 -2022-01-06 05:30:00,0.07146155,,,,,,,,,,-3.995489,-2.037511,,,,,,,,,,,,,109.58869344944395,109.58869344944395,-19.58869344944395,-19.58869344944395,102.94304916895032,-5.790051824726106,124.15590211058236 -2022-01-06 05:45:00,0.07146155,,,,,,,,,,-4.192728,-2.136161,,,,,,,,,,,,,106.91091829964462,106.91091829964462,-16.91091829964462,-16.91091829964462,105.25737234941226,-5.794624136102357,120.6990078130663 -2022-01-06 06:00:00,-0.4811659,,,,,,,,,,-4.746555,-2.377461,,,,,,,,,,,,,104.26247918454331,104.26247918454331,-14.262479184543302,-14.262479184543302,107.57585060344809,-5.799195568662981,117.24792258464308 -2022-01-06 06:15:00,-0.4811659,,,,,,,,,,-5.632017,-2.750128,,,,,,,,,,,,,101.64783856537838,101.64783856537838,-11.647838565378379,-11.647838565378379,109.90794959038976,-5.803766121454828,113.80424102747106 -2022-01-06 06:30:00,0.0,,,,,,,,,,-6.101083,-3.141011,,,,,,,,,,,,,99.07161176343571,99.07161176343571,-9.071611763435715,-9.071611763435715,112.26256998893132,-5.808335794117738,110.36956124117195 -2022-01-06 06:45:00,0.3683806,,,,,,,,,,-5.895072,-3.007511,,,,,,,,,,,,,96.53861652405098,96.53861652405098,-6.538616524050983,-6.538616524050983,114.64815383151597,-5.81290458633157,106.94552998052401 -2022-01-06 07:00:00,1.753085,456.8722,465.6378,464.5234,460.5761,437.1905,453.6317,437.0208,440.122,434.8575,-5.184039,-2.581906,0.045,0.05166665,0.0407563,0.0512195,0.0512195,0.05123455,0.06149425,0.05804595,0.05172415,0.2045833,0.2164634,0.1022988,94.05391819646461,94.05391819646461,-4.053918196464607,-4.053918196464607,117.07275985389663,-5.817472497063136,103.5338838499296 -2022-01-06 07:15:00,7.846389,563.6151,579.4651,577.3232,584.0463,564.0856,571.2604,566.8013,578.1649,569.6489,-4.676161,-2.451144,0.2158333,0.2396296,0.2000155,0.2370038,0.2370038,0.2403435,0.2506695,0.2508295,0.2347139,0.7656943,0.7738164,0.5342576,91.62286978149056,91.62286978149056,-1.6228697814905575,-1.6228697814905575,119.54411099184114,-5.822039526006847,100.13648799399813 -2022-01-06 07:30:00,13.07112,593.4998,606.8611,607.262,613.9453,617.2844,600.8262,600.2581,610.5199,608.0148,-3.681178,-2.106211,0.3556372,0.3791394,0.3283769,0.3914447,0.3919747,0.3962517,0.3763434,0.3799517,0.3630782,1.127288,1.160183,0.8398535,88.86790167157345,89.25114861552275,1.1320983284265445,0.7488513844772471,122.06961295330922,-5.826605672809819,96.75537729852095 -2022-01-06 07:45:00,11.46397,586.3345,595.8135,596.7515,602.1681,610.1863,583.0375,585.9521,590.3694,593.8295,-2.338272,-1.384739,0.3230692,0.3493397,0.3002401,0.3525024,0.3530326,0.353985,0.3099405,0.3099405,0.3003856,1.041687,1.054935,0.6742314,86.72249887423415,86.94478783387622,3.277501125765858,3.055212166123784,124.65634458615818,-5.83117093644978,93.39280068429092 -2022-01-06 08:00:00,11.37953,584.1503,595.637,592.1218,598.6221,609.3358,578.2731,577.9393,582.999,587.9805,-1.682683,-0.6361,0.3292102,0.3593444,0.3134059,0.344919,0.3481241,0.344919,0.2918632,0.2918632,0.2812062,1.061731,1.021093,0.6266969,84.55773517648271,84.71020040273,5.442264823517291,5.289799597269998,127.3110201610416,-5.8357353166429675,90.05126903846349 -2022-01-06 08:15:00,20.92199,624.1159,633.3779,628.5798,635.3184,643.0771,625.5403,619.9617,627.1863,629.5912,-1.431672,-0.2329889,0.6197185,0.6507094,0.5969061,0.6411462,0.6443514,0.6411462,0.5951548,0.5978143,0.580058,1.736692,1.712057,1.330573,82.43870216886599,82.55419576682507,7.561297831134012,7.445804233174922,130.03992019556074,-5.840298812992842,86.73361144608538 -2022-01-06 08:30:00,31.02679,663.0396,665.817,664.067,667.985,671.5353,667.4042,661.4966,667.3256,667.6053,-1.287094,-0.1538167,0.9132075,0.9613208,0.8882075,0.9803143,0.9803143,0.9803143,0.9355373,0.9481969,0.9249384,2.427358,2.475723,2.123897,80.39092055460193,80.48398567275866,9.609079445398072,9.516014327241342,132.84879042721138,-5.84486142454989,83.44304046721693 -2022-01-06 08:45:00,33.68489,668.5217,668.6655,669.2206,672.7363,675.1863,672.9997,667.6052,669.9023,667.56,-1.283078,-0.1502722,1.025767,1.068126,1.001918,1.086912,1.086912,1.086912,1.055807,1.07914,1.050456,2.666219,2.709986,2.394684,78.42899627019298,78.50717541756701,11.571003729807023,11.492824582432984,135.74270934693254,-5.849423150928487,80.18322752421635 -2022-01-06 09:00:00,43.01748,671.0067,671.0504,671.676,674.0623,675.4526,671.7103,670.4614,671.9794,672.746,-1.228089,-0.15465,1.369667,1.406,1.328333,1.388,1.389667,1.388,1.382667,1.402666,1.361333,3.368666,3.355,3.070333,76.56406812527118,76.63173886886871,13.435931874728817,13.368261131131291,138.72592262050455,-5.853983991826681,76.95839379896724 -2022-01-06 09:15:00,82.23788,694.4103,696.3527,695.9167,696.8806,693.101,690.9785,694.024,694.5593,698.4866,-0.9912722,-0.1533,2.584,2.636667,2.513334,2.648263,2.653475,2.644717,2.663333,2.678,2.646333,6.069334,6.034049,5.84,74.80604994247028,74.86597262821066,15.193950057529715,15.13402737178934,141.80164806179374,-5.858543946222198,73.77341838454667 -2022-01-06 09:30:00,220.22,723.1234,724.9883,723.7134,729.1769,719.0157,715.1744,724.0043,719.4706,724.5773,-0.3129,-0.07955556,7.310331,7.398665,7.097999,7.232264,7.23081,7.220383,7.298335,7.317665,7.252332,16.082,15.88405,15.75233,73.16439474132574,73.21842503514003,16.83560525867426,16.781574964859963,144.9718581697789,-5.863103013802174,70.63396591689914 -2022-01-06 09:45:00,413.4356,722.2447,722.2573,719.7717,727.6953,718.819,710.636,724.2363,719.5709,722.833,3.148522,0.3541445,13.751,13.893,13.37967,13.69934,13.69433,13.68933,13.697,13.67233,13.558,29.34867,29.275,29.134,71.64834673520795,71.69779834752697,18.35165326479204,18.302201652473023,148.2370475563768,-5.86766119420281,67.54664005867537 -2022-01-06 10:00:00,523.0793,710.995,710.5743,707.345,708.6593,701.4564,695.357,709.2,709.045,708.9553,7.507367,0.5718889,17.398,17.58734,16.95134,17.551,17.551,17.54766,17.50633,17.39233,17.27134,36.607,36.51199,36.64066,70.26697664205119,70.31282109046055,19.733023357948806,19.687178909539455,151.5960007956724,-5.872218486452766,64.51916527727069 -2022-01-06 10:15:00,497.6176,704.16,704.0493,700.5834,701.064,684.1797,687.234,698.3937,699.4957,700.6874,10.18374,0.5465444,16.912,17.13833,16.49867,17.02,17.01034,17.005,16.99767,16.86433,16.74034,35.65067,35.26133,35.33733,69.02910586345308,69.07208969610096,20.97089413654692,20.92791030389904,155.04558142396593,-5.876774890210072,61.56059895858849 -2022-01-06 10:30:00,327.9948,706.6934,707.1246,701.3217,708.7613,678.086,703.8367,702.0516,701.0923,705.055,8.779006,0.2662278,10.846,11.093,10.64834,10.92033,10.912,10.90866,10.951,10.93567,10.82333,23.613,23.222,23.10966,67.9431654461995,67.98388276811322,22.056834553800503,22.016117231886778,158.5805630594383,-5.881330405143672,58.68157797665863 -2022-01-06 10:45:00,194.5929,711.46,711.5383,705.725,719.2913,689.9077,720.2483,708.0657,706.5323,711.5847,5.652555,-0.15175,6.094999,6.341667,6.048666,6.134,6.130333,6.145667,6.406666,6.413667,6.382,14.26667,13.71267,13.70967,67.01701301247975,67.05595246373245,22.982986987520245,22.94404753626755,162.1935299633558,-5.885885030260397,55.89459662554053 -2022-01-06 11:00:00,214.22,712.2267,711.0153,706.6516,723.0986,678.132,714.8057,707.1833,708.6266,714.1603,5.101833,-0.1208944,7.259333,7.534,7.180666,7.124332,7.100999,7.117667,7.611,7.641,7.562666,16.55766,15.61333,16.106,66.25772497049226,66.29530145952198,23.742275029507745,23.704698540478024,165.87487418349724,-5.890438765225554,53.214306629686554 -2022-01-06 11:15:00,212.72,715.3433,713.975,709.125,720.774,632.0474,714.6263,709.0026,710.5756,716.8793,4.473161,-0.09305555,6.963666,7.25,6.911666,6.909999,6.891666,6.891666,7.222,7.278333,7.164999,15.567,14.73934,15.46033,65.67138151415746,65.70795855908102,24.328618485842544,24.292041440918982,169.61290749432078,-5.894991609693534,50.65782242412708 -2022-01-06 11:30:00,150.7271,715.35,715.8734,708.8533,715.9014,632.331,720.413,709.671,709.2303,716.39,3.266678,-0.1179333,4.421,4.661,4.444,4.562333,4.564,4.562333,4.628666,4.635666,4.608666,10.209,9.881001,10.13433,65.26286101630271,65.29876719116382,24.737138983697296,24.70123280883619,173.39410146249134,-5.8995435627002735,48.2449939748168 -2022-01-06 11:45:00,154.7395,717.5134,718.2617,710.7483,718.504,639.2079,722.6879,711.9307,711.628,718.528,2.884389,-0.05601111,4.509666,4.751667,4.53,4.65,4.655,4.651667,4.713666,4.725333,4.691333,10.409,10.12333,10.33,65.03566115829518,65.07120284984205,24.96433884170482,24.928797150157948,177.20345607353352,-5.904094623892888,45.99858461505245 -2022-01-06 12:00:00,191.0155,719.8464,720.735,712.239,720.5167,604.2976,721.7353,713.7883,715.767,721.7936,3.574139,0.1450556,5.617667,5.908,5.664667,5.804334,5.804334,5.801,5.913,5.800333,5.791,12.78,12.245,12.74234,64.99176341492773,65.02723537573804,25.00823658507227,24.97276462426196,181.02497734134235,-5.9086447928712005,43.9442619517998 -2022-01-06 12:15:00,176.3237,717.2344,718.3493,709.2857,716.0438,599.84,718.8196,710.585,711.6633,719.1677,3.901961,0.2318444,5.219667,5.514334,5.289333,5.434713,5.43138,5.429972,5.518666,5.406333,5.4,11.94933,11.41715,11.894,65.13155340329656,65.16724819315232,24.868446596703436,24.83275180684768,184.84223378685994,-5.913194068791199,42.110272409962164 -2022-01-06 12:30:00,198.5793,721.3993,719.1923,713.4451,719.0444,600.7369,723.7358,716.277,713.464,718.9413,3.511139,0.1229111,5.946667,6.394333,6.117667,6.285563,6.280633,6.287676,6.260666,6.304333,6.259333,13.676,13.01901,13.60767,65.45380512445495,65.490022345561,24.54619487554506,24.509977654439002,188.63895022516297,-5.917742451198137,40.52664896678173 -2022-01-06 12:45:00,290.4542,728.2599,720.9183,718.8667,724.3892,533.4869,725.5917,722.7056,722.243,726.4169,4.509261,0.2223056,8.223666,9.143668,8.753333,8.950848,8.945588,8.95437,8.942668,8.935666,8.844668,19.05433,17.56186,19.26867,65.95573071196905,65.9927869099808,24.044269288030943,24.0072130900192,192.39958720905497,-5.922289939815528,39.223821182268175 -2022-01-06 13:00:00,459.5916,722.403,715.4033,709.4116,718.4811,461.5663,713.4567,711.567,713.5114,721.8093,7.645878,0.6094444,11.33733,13.065,12.59867,12.92933,12.92733,12.922,13.10867,12.95634,12.796,26.46833,24.233,27.57067,66.63309052681227,66.6713307391144,23.366909473187736,23.3286692608856,196.10986109305716,-5.926836533639289,38.23058271425074 -2022-01-06 13:15:00,622.8762,711.1716,710.2863,699.2523,709.8777,448.8633,702.63,702.422,701.2366,710.2763,10.93925,1.051105,14.573,16.93266,16.44533,16.77267,16.75966,16.75834,17.06634,16.93767,16.70366,33.62899,30.77834,35.42934,67.48035327133809,67.52016548897598,22.519646728661918,22.479834511024027,199.7571684822388,-5.931382232360193,37.571551944475516 -2022-01-06 13:30:00,561.97,705.962,704.54,697.73,704.2437,437.865,692.3043,701.221,697.7427,702.2466,12.42031,1.271606,13.573,15.84066,15.338,15.59867,15.58733,15.59667,15.72966,15.70767,15.53166,31.25867,28.233,32.79734,68.49089085873459,68.5327252108662,21.50910914126542,21.46727478913379,203.33088805784303,-5.935927035567147,37.26450350244179 -2022-01-06 13:45:00,481.5651,713.89,705.393,698.6816,708.6243,416.608,714.2369,702.5433,697.9,703.49,11.93007,1.187817,10.52733,12.90133,12.40867,12.172,12.172,12.17533,12.61333,13.09767,12.329,25.44934,22.19,26.70366,69.65719103692538,69.70158648321355,20.342808963074614,20.29841351678645,206.8225529904908,-5.940470942390675,37.31814640279498 -2022-01-06 14:00:00,483.7181,722.1483,710.305,702.7533,712.6666,403.2643,720.9216,708.7656,704.3389,711.95,9.879911,1.092128,8.211,11.096,10.71133,10.42067,10.419,10.42066,10.955,11.419,10.59467,21.633,19.09134,23.27867,70.97107090905055,71.01869398719684,19.028929090949447,18.98130601280316,210.2259014533691,-5.9450139524451515,37.73094320933889 -2022-01-06 14:15:00,329.8465,720.9413,712.1003,707.2744,711.1976,423.9066,704.5997,711.1667,708.463,714.1757,6.309933,0.8539444,5.832333,7.743999,7.491333,7.665667,7.664001,7.667334,7.754666,7.758333,7.604,15.45033,14.17233,16.54934,72.42387367616075,72.47557711584193,17.57612632383925,17.524422884158067,213.53681963865603,-5.949556065374054,38.49132326422609 -2022-01-06 14:30:00,170.5367,717.6316,714.27,709.0017,713.0773,521.837,713.9013,710.4683,709.411,716.125,3.367805,0.462,4.315333,4.875667,4.681667,4.804,4.800667,4.804,4.823667,4.849333,4.768333,10.46766,9.620667,10.558,74.00663209218811,74.06354743363134,15.993367907811892,15.936452566368663,216.75320280622861,-5.954097280242422,39.57922402607687 -2022-01-06 14:45:00,202.6853,716.0449,718.38,711.4393,718.052,483.937,708.3323,711.595,713.9464,720.7261,2.126528,0.4375167,3.95,5.062666,4.869333,4.943333,4.942334,4.943999,5.056333,4.984333,4.966333,10.48767,9.609332,11.00633,75.71017950005493,75.77387081808715,14.28982049994507,14.226129181912848,219.87476193379902,-5.958637596708286,40.96851137128291 -2022-01-06 15:00:00,198.7523,709.8363,716.2584,706.945,711.27,366.6164,705.1959,707.59,710.52,719.3334,1.022578,0.4257222,3.142333,4.406333,4.28,4.264667,4.263,4.263,4.523666,4.343,4.366666,9.021998,7.938999,9.733332,77.52517530438858,77.59790956507219,12.474824695611414,12.40209043492782,222.9027983893386,-5.9631770143823815,42.62966318348367 -2022-01-06 15:15:00,88.30872,687.4047,692.2283,683.3223,687.7206,421.263,696.1133,685.2726,684.6493,693.4446,-0.1268333,0.1095833,1.643,2.038333,1.972,1.957,1.958,1.954666,2.115666,2.034333,2.030667,4.548,3.981,4.6,79.44197682154383,79.52723421004137,10.558023178456173,10.472765789958634,225.8399695642753,-5.967715532369766,44.5321861056546 -2022-01-06 15:30:00,32.48571,658.287,664.7483,652.615,663.497,564.6707,672.014,653.9667,654.5956,667.87,-0.9756,-0.1854444,0.886,0.9749998,0.91,0.945,0.9483333,0.9433333,0.9416667,0.964,0.9349998,2.424,2.270667,2.159,81.45018033798719,81.55370730712241,8.549819662012807,8.446292692877599,228.69006336554227,-5.972253150299366,46.646462725295045 -2022-01-06 15:45:00,21.3757,634.6486,644.4483,634.2767,643.6553,644.9376,646.8281,632.4067,636.14,650.0977,-1.584767,-0.3650444,0.5666667,0.6283333,0.5683333,0.6066666,0.6066667,0.605,0.6016667,0.6066666,0.5866666,1.688,1.662333,1.399667,83.53729227805037,83.6695404588955,6.462707721949623,6.330459541104503,231.45779105083398,-5.976789867829211,48.94495417330459 -2022-01-06 16:00:00,12.29699,576.7289,593.8734,580.7743,594.0146,619.5063,552.2413,579.8726,582.0219,588.27,-2.008689,-0.5742278,0.3423333,0.384,0.3206667,0.38,0.3816667,0.38,0.3733334,0.3733333,0.3516667,1.112666,1.084334,0.8043333,85.68462157153996,85.86732871083007,4.315378428460042,4.1326712891699335,234.14860723466398,-5.981325684027979,51.40283781720188 -2022-01-06 16:15:00,2.404122,522.3829,537.0034,519.483,534.7186,559.6223,486.7753,525.5143,523.6543,526.8146,-2.556733,-0.8131389,0.08366665,0.097,0.06533335,0.1003333,0.1003333,0.1003333,0.09700002,0.09033332,0.08200002,0.3433333,0.32,0.1613333,87.85236122067019,88.14006696154297,2.147638779329805,1.8599330384570272,236.76856209988236,-5.985860598513682,53.99822484870177 -2022-01-06 16:30:00,0.03652245,358.4054,360.2563,354.0465,400.811,404.3905,392.4229,354.8235,353.4619,353.8029,-3.218555,-1.002267,0.0,0.005,0.0,0.004,0.004,0.004,0.005666665,0.0006666665,0.0006666665,0.02033333,0.012,0.0,89.93008641425304,90.48115023078459,0.069913585746953,-0.481150230784591,239.3241850173184,-5.9903946109589015,56.712101940513314 -2022-01-06 16:45:00,-0.6955609,199.7094,199.4125,199.6156,284.4708,284.2677,283.9646,192.5182,193.1151,193.2151,-3.940455,-1.180394,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.88436173782046,92.88436173782046,-2.8843617378204525,-2.8843617378204525,241.82240051722124,-5.9949277203995734,59.52811631033507 -2022-01-06 17:00:00,-1.327597,,,,,,,,,,-4.779561,-1.423322,,,,,,,,,,,,,95.34385248405293,95.34385248405293,-5.343852484052931,-5.343852484052931,244.27047643639258,-5.999459926577401,62.43228927100813 -2022-01-06 17:15:00,-0.8559415,,,,,,,,,,-5.574255,-1.881789,,,,,,,,,,,,,97.85411257649086,97.85411257649086,-7.854112576490858,-7.854112576490858,246.67600079150708,-6.003991229059466,65.41270938204646 -2022-01-06 17:30:00,-0.1651498,,,,,,,,,,-5.637055,-1.994622,,,,,,,,,,,,,100.40993674312662,100.40993674312662,-10.409936743126625,-10.409936743126625,249.04688727644208,-6.00852162692172,68.45923676613681 -2022-01-06 17:45:00,0.06193225,,,,,,,,,,-5.223094,-1.685056,,,,,,,,,,,,,103.00638613928639,103.00638613928639,-13.006386139286386,-13.006386139286386,251.3914097233251,-6.013051119844022,71.56323519958862 -2022-01-06 18:00:00,0.0,,,,,,,,,,-4.897984,-1.664944,,,,,,,,,,,,,105.63874492278,105.63874492278,-15.63874492278001,-15.63874492278001,253.71826391118833,-6.017579707473487,74.71733546213702 -2022-01-06 18:15:00,0.0,,,,,,,,,,-4.805539,-2.037028,,,,,,,,,,,,,108.30247257264449,108.30247257264449,-18.302472572644483,-18.302472572644483,256.03665921585275,-6.022107388871518,77.91523161891877 -2022-01-06 18:30:00,0.05399175,,,,,,,,,,-4.699616,-2.121411,,,,,,,,,,,,,110.99315253481235,110.99315253481235,-20.993152534812356,-20.993152534812356,258.3564439609748,-6.026634163641575,81.15150930364082 -2022-01-06 18:45:00,0.1460928,,,,,,,,,,-4.188828,-1.883894,,,,,,,,,,,,,113.70643400169942,113.70643400169942,-23.706434001699414,-23.706434001699414,260.6882673396233,-6.031160031554464,84.42149998030415 -2022-01-06 19:00:00,0.142916,,,,,,,,,,-3.781661,-1.863556,,,,,,,,,,,,,116.43796614776919,116.43796614776919,-26.437966147769185,-26.437966147769185,263.0437857613454,-6.035684991580638,87.72115859185193 -2022-01-06 19:15:00,0.09051446,,,,,,,,,,-3.564644,-1.855772,,,,,,,,,,,,,119.18332345039431,119.18332345039431,-29.18332345039431,-29.18332345039431,265.43592418347134,-6.040209043396317,91.04696224414661 -2022-01-06 19:30:00,0.03969956,,,,,,,,,,-3.360522,-1.843117,,,,,,,,,,,,,121.93791642501913,121.93791642501913,-31.93791642501912,-31.93791642501912,267.87920352238007,-6.04473218669591,94.39582391078598 -2022-01-06 19:45:00,0.0,,,,,,,,,,-3.307083,-2.002172,,,,,,,,,,,,,124.69688405024104,124.69688405024104,-34.69688405024104,-34.69688405024104,270.3901521221568,-6.049254420500802,97.76501945571016 -2022-01-06 20:00:00,0.03652399,,,,,,,,,,-3.326667,-2.142222,,,,,,,,,,,,,127.45496243555942,127.45496243555942,-37.45496243555943,-37.45496243555943,272.9878243438151,-6.053775744483573,101.15212674195121 -2022-01-06 20:15:00,0.03652399,,,,,,,,,,-3.679128,-2.282317,,,,,,,,,,,,,130.20631851039806,130.20631851039806,-40.20631851039807,-40.20631851039807,275.6944520403135,-6.058296158331359,104.55497183209077 -2022-01-06 20:30:00,-0.4017676,,,,,,,,,,-4.785517,-2.724183,,,,,,,,,,,,,132.94433755271845,132.94433755271845,-42.94433755271846,-42.94433755271846,278.53626336093544,-6.062815661072818,107.97158157002539 -2022-01-06 20:45:00,-0.4017676,,,,,,,,,,-6.021272,-3.315283,,,,,,,,,,,,,135.66134889940759,135.66134889940759,-45.66134889940759,-45.66134889940759,281.5445078974817,-6.067334252347791,111.400142027602 -2022-01-06 21:00:00,0.0,,,,,,,,,,-6.608911,-3.839411,,,,,,,,,,,,,138.3482649655339,138.3482649655339,-48.3482649655339,-48.3482649655339,284.7567226627141,-6.071851931890706,114.83895820102755 -2022-01-06 21:15:00,0.1206796,,,,,,,,,,-6.675761,-4.2051,,,,,,,,,,,,,140.99410466378222,140.99410466378222,-50.99410466378222,-50.99410466378222,288.21826109970345,-6.076368698726583,118.286414309489 -2022-01-06 21:30:00,0.5700672,,,,,,,,,,-6.226028,-4.1685,,,,,,,,,,,,,143.58536398388003,143.58536398388003,-53.58536398388002,-53.58536398388002,291.9840602372488,-6.080884552506177,121.7409337443105 -2022-01-06 21:45:00,0.5684883,,,,,,,,,,-5.569361,-3.876767,,,,,,,,,,,,,146.1051865365373,146.1051865365373,-56.10518653653731,-56.10518653653731,296.1205014841293,-6.085399492912984,125.20093289208103 -2022-01-06 22:00:00,0.1191007,,,,,,,,,,-5.240917,-3.751111,,,,,,,,,,,,,148.53229168282067,148.53229168282067,-58.53229168282066,-58.53229168282066,300.70697439562207,-6.089913518993853,128.66476603574486 -2022-01-06 22:15:00,0.0,,,,,,,,,,-5.202689,-3.779806,,,,,,,,,,,,,150.83964329326977,150.83964329326977,-60.83964329326976,-60.83964329326976,305.83626070426925,-6.094426630450471,132.13065655379344 -2022-01-06 22:30:00,0.1921536,,,,,,,,,,-5.120828,-3.797378,,,,,,,,,,,,,152.9929220143008,152.9929220143008,-62.992922014300795,-62.992922014300795,311.61197344213485,-6.098938826904487,135.59660200144023 -2022-01-06 22:45:00,0.349368,,,,,,,,,,-4.9167,-3.74395,,,,,,,,,,,,,154.94906569180375,154.94906569180375,-64.94906569180374,-64.94906569180374,318.1399734841466,-6.103450107431854,139.06023872501433 -2022-01-06 23:00:00,0.4525908,,,,,,,,,,-4.678333,-3.578739,,,,,,,,,,,,,156.65553005965293,156.65553005965293,-66.65553005965293,-66.65553005965293,325.5093683980514,-6.107960471697879,142.51864063672886 -2022-01-06 23:15:00,0.4287716,,,,,,,,,,-4.36555,-3.339061,,,,,,,,,,,,,158.05150035054953,158.05150035054953,-68.05150035054953,-68.05150035054953,333.75917568143393,-6.112469919404248,145.96800181673015 -2022-01-06 23:30:00,0.1572153,,,,,,,,,,-4.06965,-3.140022,,,,,,,,,,,,,159.07275786028492,159.07275786028492,-69.07275786028491,-69.07275786028491,342.832890193938,-6.1169784495505155,149.4031160670958 -2022-01-06 23:45:00,0.02382012,,,,,,,,,,-3.903128,-3.0482,,,,,,,,,,,,,159.66136548995507,159.66136548995507,-69.66136548995507,-69.66136548995507,352.53814303953504,-6.121486061911128,152.81648258994642 -2022-01-07 00:00:00,0.0,,,,,,,,,,-3.945294,-3.111194,,,,,,,,,,,,,159.77871469616323,159.77871469616323,-69.77871469616323,-69.77871469616323,2.544555466172028,-6.125992756042251,156.19668006449956 -2022-01-07 00:15:00,0.0,,,,,,,,,,-4.135767,-3.2714,,,,,,,,,,,,,159.4165763841595,159.4165763841595,-69.41657638415948,-69.41657638415948,12.444887547838334,-6.130498531067133,159.5252330852546 -2022-01-07 00:30:00,0.0,,,,,,,,,,-4.413628,-3.410861,,,,,,,,,,,,,158.59970209804987,158.59970209804987,-68.59970209804989,-68.59970209804989,21.859801957131594,-6.135003386632889,162.7701567033173 -2022-01-07 00:45:00,0.0,,,,,,,,,,-4.751283,-3.588239,,,,,,,,,,,,,157.3782555120549,157.3782555120549,-67.37825551205489,-67.37825551205489,30.526168905563054,-6.1395073224339285,165.87168981847748 -2022-01-07 01:00:00,0.0,,,,,,,,,,-4.948961,-3.717261,,,,,,,,,,,,,155.81487645045075,155.81487645045075,-65.81487645045075,-65.81487645045075,38.32475767151345,-6.144010337513464,168.70904694042315 -2022-01-07 01:15:00,0.004763506,,,,,,,,,,-4.887533,-3.768133,,,,,,,,,,,,,153.97292773885474,153.97292773885474,-63.972927738854736,-63.972927738854736,45.25398145133602,-6.148512431544077,171.02616392257872 -2022-01-07 01:30:00,0.06351496,,,,,,,,,,-4.578439,-3.650817,,,,,,,,,,,,,151.9093163037153,151.9093163037153,-61.90931630371527,-61.90931630371527,51.38361198922735,-6.1530136042274535,172.33430315170767 -2022-01-07 01:45:00,0.05875145,,,,,,,,,,-4.295455,-3.460572,,,,,,,,,,,,,149.67171586287094,149.67171586287094,-59.671715862870926,-59.671715862870926,56.81454013712556,-6.157513854606805,172.113593928471 -2022-01-07 02:00:00,0.0,,,,,,,,,,-4.181111,-3.423255,,,,,,,,,,,,,147.29854643887126,147.29854643887126,-57.298546438871256,-57.298546438871256,61.65307998975459,-6.162013182343799,170.46971100478393 -2022-01-07 02:15:00,0.0,,,,,,,,,,-4.04805,-3.35715,,,,,,,,,,,,,144.82019658061174,144.82019658061174,-54.82019658061173,-54.82019658061173,65.99789954039989,-6.166511587136483,167.973194044811 -2022-01-07 02:30:00,0.0,,,,,,,,,,-3.927517,-3.319933,,,,,,,,,,,,,142.2605693171036,142.2605693171036,-52.26056931710362,-52.26056931710362,69.93500024163632,-6.171009068035346,165.0458943795165 -2022-01-07 02:45:00,0.0,,,,,,,,,,-3.876806,-3.341105,,,,,,,,,,,,,139.63852535893574,139.63852535893574,-49.63852535893574,-49.63852535893574,73.5369578954406,-6.175505624720245,161.89653351829594 -2022-01-07 03:00:00,0.1063942,,,,,,,,,,-3.730611,-3.193894,,,,,,,,,,,,,136.96908282452267,136.96908282452267,-46.969082824522665,-46.969082824522665,76.86406438400036,-6.180001256867399,158.6241182392117 -2022-01-07 03:15:00,0.1063942,,,,,,,,,,-3.566517,-3.2481,,,,,,,,,,,,,134.2643601664708,134.2643601664708,-44.26436016647081,-44.26436016647081,79.96611591452626,-6.184495963527297,155.27865472708027 -2022-01-07 03:30:00,0.0,,,,,,,,,,-3.585561,-3.5801,,,,,,,,,,,,,131.5342967215915,131.5342967215915,-41.534296721591474,-41.534296721591474,82.88425554569392,-6.188989744423452,151.8874872471416 -2022-01-07 03:45:00,0.0,,,,,,,,,,-3.660883,-3.788189,,,,,,,,,,,,,128.78719903347994,128.78719903347994,-38.78719903347993,-38.78719903347993,85.65262602796787,-6.193482599177514,148.46671797015193 -2022-01-07 04:00:00,0.0,,,,,,,,,,-3.711022,-3.924017,,,,,,,,,,,,,126.03015393931562,126.03015393931562,-36.03015393931562,-36.03015393931562,88.29976344496004,-6.197974526909093,145.02647294704872 -2022-01-07 04:15:00,0.0,,,,,,,,,,-3.765744,-4.024689,,,,,,,,,,,,,123.26934133065907,123.26934133065907,-33.26934133065908,-33.26934133065908,90.84973633678732,-6.202465527258028,141.57350488337642 -2022-01-07 04:30:00,0.0,,,,,,,,,,-3.805211,-4.08745,,,,,,,,,,,,,120.51027488488886,120.51027488488886,-30.51027488488886,-30.51027488488886,93.32305985047634,-6.206955599885987,138.11256754581905 -2022-01-07 04:45:00,0.0,,,,,,,,,,-3.823356,-4.1241,,,,,,,,,,,,,117.75798911279311,117.75798911279311,-27.757989112793112,-27.757989112793112,95.73742445960818,-6.211444743927132,134.64718443960243 -2022-01-07 05:00:00,0.0,,,,,,,,,,-3.837055,-4.134967,,,,,,,,,,,,,115.01718591467515,115.01718591467515,-25.017185914675153,-25.017185914675153,98.10827615707359,-6.215932959014026,131.1801001380224 -2022-01-07 05:15:00,0.0,,,,,,,,,,-3.841733,-4.118455,,,,,,,,,,,,,112.29235335497955,112.29235335497955,-22.292353354979554,-22.292353354979554,100.44927675609767,-6.220420244811976,127.71355986780152 -2022-01-07 05:30:00,0.0,,,,,,,,,,-3.835744,-4.093961,,,,,,,,,,,,,109.58786319346007,109.58786319346007,-19.587863193460066,-19.587863193460066,102.7726700867413,-6.224906600436952,124.24949018870595 -2022-01-07 05:45:00,0.0,,,,,,,,,,-3.826711,-4.075395,,,,,,,,,,,,,106.90805168584339,106.90805168584339,-16.908051685843382,-16.908051685843382,105.08957438437955,-6.2293920255579,120.78961985035335 -2022-01-07 06:00:00,0.0,,,,,,,,,,-3.813189,-4.049628,,,,,,,,,,,,,104.2572899389813,104.2572899389813,-14.257289938981298,-14.257289938981298,107.41021386041484,-6.2338765198219335,117.33556669438265 -2022-01-07 06:15:00,0.0,,,,,,,,,,-3.786167,-4.020878,,,,,,,,,,,,,101.64004564076491,101.64004564076491,-11.640045640764916,-11.640045640764916,109.744101571324,-6.238360082337749,113.88890290313253 -2022-01-07 06:30:00,0.0,,,,,,,,,,-3.755328,-4.020289,,,,,,,,,,,,,99.06093719872278,99.06093719872278,-9.060937198722783,-9.060937198722783,112.10018267712229,-6.242842712777929,110.45120570841043 -2022-01-07 06:45:00,0.0,,,,,,,,,,-3.75075,-4.067333,,,,,,,,,,,,,96.52478379907534,96.52478379907534,-6.524783799075332,-6.524783799075332,114.48694197233561,-6.247324410793226,107.02410185994577 -2022-01-07 07:00:00,0.1333893,,,,,,,,,,-3.768922,-4.11775,,,,,,,,,,,,,94.03665106674757,94.03665106674757,-4.036651066747565,-4.036651066747565,116.91248037277865,-6.251805175492336,103.60930824483849 -2022-01-07 07:15:00,1.181461,,,,,,,,,,-3.781889,-4.139067,,,,,,,,,,,,,91.60189159897217,91.60189159897217,-1.6018915989721763,-1.6018915989721763,119.38456349957937,-6.256285006555117,100.20867007616815 -2022-01-07 07:30:00,3.561775,,,,,,,,,,-3.771578,-4.132672,,,,,,,,,,,,,88.84559646613029,89.22618216334409,1.154403533869711,0.7738178366559019,121.9106412889808,-6.260763903672341,96.8242016381635 -2022-01-07 07:45:00,8.125428,,,,,,,,,,-3.727695,-4.0965,,,,,,,,,,,,,86.69453792044877,86.91555572164137,3.3054620795512384,3.0844442783586326,124.49783933603544,-6.265241865883581,93.45813015025152 -2022-01-07 08:00:00,15.33006,338.9708,338.6569,338.444,368.5577,365.6942,368.1775,344.8431,344.619,345.0129,-3.633405,-4.018922,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,84.52470532758096,84.67642607498317,5.475294672419046,5.323573925016836,127.15292207291986,-6.2697188928832475,90.1129432683681 -2022-01-07 08:15:00,20.75788,419.0823,419.4476,418.8243,427.2174,421.2197,428.2346,433.0273,431.5441,432.7287,-3.496767,-3.910428,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,82.40062052313351,82.51560520048653,7.599379476866487,7.484394799513461,129.88222435252754,-6.274194984365749,86.79144489183635 -2022-01-07 08:30:00,20.92868,409.5015,409.8139,409.6117,418.4142,412.5056,419.3417,436.0298,434.4515,435.6129,-3.389678,-3.859578,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,80.34762993267636,80.44030983076867,9.652370067323647,9.559690169231326,132.6915509910787,-6.278670139439782,83.49681999826011 -2022-01-07 08:45:00,26.04571,428.9226,429.5949,429.2217,436.4933,414.2174,436.8117,449.5745,443.4429,446.7979,-3.263778,-3.802072,0.0,0.0,0.0,0.0,0.0,0.001351352,0.0,0.0,0.0,0.0,0.01013513,0.0,78.38028704765068,78.4581535234053,11.61971295234931,11.541846476594698,135.58604458695277,-6.283144357719721,80.23270957628289 -2022-01-07 09:00:00,34.30027,495.1733,497.926,497.9564,515.0256,376.2372,502.8867,509.1792,495.3022,499.8164,-3.050278,-3.631178,0.0,0.0,0.0,0.003608247,0.0,0.007536917,0.0,0.0,0.0,0.02164949,0.08900113,0.0,76.50971865625456,76.57712254918424,13.490281343745433,13.422877450815765,138.57001983514107,-6.28761763894363,77.00330106178815 -2022-01-07 09:15:00,38.87812,509.8808,516.2335,516.6246,562.0826,415.7607,546.1624,535.0084,526.5599,530.144,-2.811244,-3.443845,0.0,0.0,0.0,0.01034982,0.006741575,0.01292714,0.01129032,0.0,0.0,0.1257035,0.097616,0.0,74.74584473052187,74.80553093351156,15.254155269478137,15.194469066488436,141.64676787573046,-6.292089982191101,73.81343603747348 -2022-01-07 09:30:00,48.53915,501.386,517.5884,508.8351,576.2098,467.7497,563.902,511.6715,509.2948,506.8951,-2.575578,-3.34465,0.03416667,0.03416667,0.0,0.0368491,0.0368491,0.0368491,0.06129032,0.03579545,0.03181818,0.2648874,0.1262769,0.03181818,73.09813578907313,73.15195029055454,16.90186421092687,16.84804970944547,144.81833756024588,-6.296561387101974,70.66873745235632 -2022-01-07 09:45:00,57.60896,471.896,496.1731,483.4854,552.2761,337.2744,526.5046,487.2462,483.4641,473.3597,-2.353633,-3.289017,0.07946581,0.08416667,0.0,0.08010752,0.08010752,0.08010752,0.09999999,0.08579545,0.07768284,0.3608333,0.2888353,0.0773069,71.57586267857076,71.62511271362973,18.42413732142925,18.37488728637027,148.0853008517871,-6.301031853403401,67.57576279555424 -2022-01-07 10:00:00,61.17714,455.6139,494.354,474.3383,533.1002,320.3182,500.0176,493.4883,487.9755,480.8049,-2.12685,-3.179144,0.09529915,0.1,0.0,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09586465,0.4,0.3813084,0.09548871,70.18813112029954,70.23378361587456,19.81186887970045,19.766216384125435,151.44651782765743,-6.30550138014587,64.54218576134362 -2022-01-07 10:15:00,67.70007,467.1501,508.5787,479.6725,539.5784,386.2154,499.3058,485.017,491.4815,491.9275,-1.890939,-3.092628,0.09999999,0.09999999,0.01556604,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09739582,0.4042453,0.4060439,0.1026041,68.94380545975625,68.98660353153369,21.056194540243744,21.013396468466308,154.89892203781096,-6.3099699670456175,61.57700859757712 -2022-01-07 10:30:00,86.6965,500.0037,527.4274,508.412,545.8763,447.5411,503.5963,500.7873,507.6222,517.9374,-1.5688,-2.962233,0.09999999,0.09999999,0.06556604,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09739583,0.4542453,0.456044,0.1526041,67.85136705482353,67.89190210594523,22.148632945176466,22.10809789405476,158.43734733249937,-6.314437613782502,58.69080949498519 -2022-01-07 10:45:00,105.7074,527.0552,484.3116,531.7576,554.1154,511.542,523.3118,531.2555,523.0825,541.1335,-1.170594,-2.688039,0.09999999,0.2775281,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.5685393,0.5,0.2,66.91873024042874,66.95748867179599,23.08126975957126,23.042511328204014,162.0544237766817,-6.318904319439753,55.89602226328041 -2022-01-07 11:00:00,110.4,532.2565,508.8279,533.9941,557.6024,523.9969,530.9899,532.838,527.0864,544.9789,-0.2566889,-2.39105,0.09999999,0.5285807,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.09999999,0.7638025,0.5,0.2,66.15303305773182,66.19042782197268,23.84696694226819,23.809572178027324,165.740570242677,-6.3233700836754,53.20723948149815 -2022-01-07 11:15:00,110.3226,457.0813,600.3652,539.563,555.7929,548.0494,516.6208,538.7722,540.7726,499.1333,0.9650667,-2.223567,0.368421,0.6010526,0.09999999,0.09999999,0.1055555,0.09999999,0.09999999,0.09999999,0.2221311,0.9645616,0.5,0.2680328,65.56042023989224,65.59681305277513,24.439579760107762,24.403186947224864,169.48410246061053,-6.3278349061911285,50.64152293458471 -2022-01-07 11:30:00,105.6924,414.4135,615.5881,567.1254,562.3416,547.1838,557.6917,556.4965,580.0726,364.5599,1.531144,-2.169106,0.596498,0.5980769,0.09999999,0.09999999,0.1055555,0.1035294,0.09999999,0.09999999,0.6060817,1.076221,0.5141177,0.3828476,65.14583513053776,65.18155281366515,24.85416486946223,24.81844718633485,173.27147046529467,-6.332298786095635,48.218684311952785 -2022-01-07 11:45:00,105.2917,457.7707,611.0892,590.6284,602.3845,569.7567,636.008,592.5942,630.2615,300.4661,1.803978,-2.064967,0.5780769,0.7674047,0.147479,0.1269608,0.1291262,0.1345973,0.09999999,0.09999999,0.9228395,1.229192,0.5665448,0.4862433,64.91283804187513,64.94818518715495,25.087161958124867,25.05181481284505,177.0876264152339,-6.336761723039672,45.9614742774325 -2022-01-07 12:00:00,102.1628,488.4635,521.4692,524.6017,610.9855,595.6777,658.478,537.1912,638.8266,311.4689,2.223839,-1.841322,0.5393333,1.238661,0.4481457,0.1336274,0.1374595,0.1394013,0.216,0.09999999,1.090889,1.552269,0.5824271,0.5784286,64.86346791656202,64.89873734692395,25.136532083437988,25.101262653076045,180.91650353963126,-6.34122371673584,43.89558817825754 -2022-01-07 12:15:00,96.32237,491.83,487.8633,511.925,479.6966,521.2036,511.0724,473.4363,444.57,326.6296,2.138933,-1.650233,0.6166666,1.503,0.7383333,0.346,0.3463334,0.3496667,0.4203333,0.6083335,1.252334,1.949667,0.739,0.8293335,64.99816007852942,65.0336421865167,25.001839921470573,24.966357813483302,184.7415761399227,-6.34568476626373,42.04935810168605 -2022-01-07 12:30:00,143.7885,529.09,544.625,579.6666,360.1313,421.1923,288.3146,525.3146,246.0083,375.2113,2.360611,-1.527828,1.234333,2.117333,1.147667,1.138333,1.137,1.145333,0.7083333,1.807667,1.879667,3.093,1.44,1.591334,65.31572837074076,65.35172022923837,24.684271629259246,24.648279770761633,188.54645878039233,-6.350144871325028,40.452978066231566 -2022-01-07 12:45:00,165.7928,581.98,616.5817,618.58,367.9034,363.9295,274.9565,589.7116,390.3527,391.841,3.183956,-1.329194,1.497666,2.362,1.351333,1.511057,1.514248,1.515702,0.781,1.829334,2.156333,3.757,1.889865,2.045666,65.81341351461977,65.85022861698633,24.18658648538023,24.149771383013665,192.3154924126171,-6.3546040315923165,39.13712612001121 -2022-01-07 13:00:00,126.437,583.3317,675.2277,652.212,431.8362,360.8138,377.8152,640.6699,603.2659,373.8073,3.010217,-1.220033,1.099333,1.725333,1.03,1.138723,1.143581,1.138369,0.5753334,1.017,1.71,3.102333,1.739532,1.801,66.48699265030274,66.52497224004574,23.51300734969726,23.47502775995425,196.03427158766996,-6.3590622461888415,38.130930984645275 -2022-01-07 13:15:00,112.4722,590.8147,678.9883,666.502,510.5013,378.0429,430.9567,680.155,669.085,347.5034,2.219894,-1.238211,0.9203333,1.520666,0.8986666,0.9753333,0.9753333,0.9753333,0.4983334,0.8973333,1.738667,2.794333,1.746333,1.729667,67.33093974731588,67.3704669705822,22.66906025268412,22.629533029417804,199.69007571643454,-6.36351951472534,37.45941154014213 -2022-01-07 13:30:00,127.631,602.4683,690.219,674.558,565.4273,385.464,452.0563,705.3326,680.7349,336.4784,1.911044,-1.23505,1.042333,1.716333,1.042333,1.106,1.102666,1.104333,0.5556666,1.049,2.170666,3.155667,2.048666,2.013334,68.3386215475812,68.38014018320605,21.661378452418795,21.619859816793948,203.27217665391933,-6.367975836972619,37.140764528819375 -2022-01-07 13:45:00,142.3569,627.78,702.334,686.4623,588.2503,386.8234,466.4839,706.9916,686.285,347.015,2.127306,-1.192778,1.175333,1.920333,1.175333,1.248667,1.248667,1.247,0.6336666,1.2,2.495333,3.537667,2.325666,2.300667,69.50251190229898,69.54655236256933,20.497488097701027,20.453447637430667,206.77201536204788,-6.372431211970252,37.18408320856033 -2022-01-07 14:00:00,129.9533,653.8563,700.301,691.9504,611.6937,391.7177,480.0297,684.2767,695.6464,370.9737,2.230717,-1.139111,1.05,1.777666,1.068667,1.135,1.143334,1.141667,0.596,1.103667,2.23,3.304667,2.194333,2.182333,70.81440750495129,70.86162449023273,19.18559249504871,19.138375509767275,210.1832549796717,-6.376885639438115,37.58811790307547 -2022-01-07 14:15:00,96.34621,660.0937,687.5457,686.165,619.983,393.76,480.8496,592.491,693.2538,382.7631,1.553089,-1.146722,0.7313333,1.318666,0.7613333,0.8196666,0.8263335,0.8263335,0.518,0.8011361,1.546497,2.509666,1.708666,1.631216,72.26562728015602,72.31685659324782,17.73437271984398,17.68314340675218,213.50172476427247,-6.381339119019685,38.34145063837729 -2022-01-07 14:30:00,74.638,656.8837,681.9157,687.8663,603.3553,385.438,472.0767,493.2314,689.5231,376.7541,0.5257334,-1.187556,0.5363333,0.9909998,0.5546666,0.6396667,0.638,0.638,0.51,0.5944694,1.127498,1.960667,1.381333,1.22755,73.84717903143121,73.90352709042175,16.152820968568793,16.096472909578253,216.72528069043938,-6.385791649910971,39.42402938776997 -2022-01-07 14:45:00,138.0183,672.113,676.8654,698.9006,636.633,377.0847,475.1327,471.1436,695.9147,365.2473,0.005088889,-1.185894,0.8099998,1.554667,1.006333,1.072667,1.071,1.071,0.9183335,1.037667,1.888667,2.864333,2.079334,1.966334,75.5498747369883,75.61286663535118,14.450125263011705,14.387133364648818,219.85361062960953,-6.390243231668137,40.80961084013906 -2022-01-07 15:00:00,210.6866,692.145,687.2197,708.6824,676.1257,375.7342,480.3272,483.5916,709.459,364.4727,0.4677333,-0.9690334,1.229666,2.321667,1.611333,1.673437,1.669916,1.669916,1.457333,1.665,3.074667,4.185999,3.062395,3.093333,77.36436283372598,77.43620165833832,12.635637166274027,12.563798341661684,222.88800689884937,-6.3946938641274755,42.46848360538848 -2022-01-07 15:15:00,133.4755,656.4103,684.4459,685.1309,643.6,382.3828,469.2656,485.3586,690.288,371.282,0.8207667,-0.9459,0.8576667,1.562333,1.049667,1.128103,1.124582,1.124582,0.9913334,1.112,2.082666,2.978333,2.158728,2.132333,79.28101351140221,79.36506732410378,10.718986488597796,10.634932675896218,225.83112945707904,-6.399143546241248,44.36992698908322 -2022-01-07 15:30:00,39.6675,612.017,638.4503,641.2356,599.3796,376.9193,454.8503,473.9703,652.6317,433.8727,-0.6053944,-1.447078,0.2956667,0.5606666,0.3073333,0.3653333,0.367,0.3653333,0.326,0.3406667,0.5023333,1.237666,0.8936669,0.686,81.28949199493033,81.39129215031181,8.71050800506967,8.608707849688182,228.68677791800494,-6.403592277769349,46.48409228305004 -2022-01-07 15:45:00,24.70225,587.7106,599.2067,606.2923,580.6323,366.7933,445.2787,463.714,622.4987,419.9437,-2.619289,-1.903339,0.181,0.3756666,0.1963333,0.2513333,0.253,0.2513333,0.2203333,0.2283333,0.273,0.8899999,0.6743333,0.4150001,83.37752198108056,83.50705560330101,6.62247801891944,6.492944396698989,231.4596820415256,-6.408040058387996,48.78322762516694 -2022-01-07 16:00:00,13.65703,550.5309,577.9257,576.3624,553.8886,362.1287,432.8116,449.55,583.3417,336.015,-3.859317,-2.128983,0.1073262,0.2163688,0.1001276,0.1496667,0.1496667,0.1496667,0.1366667,0.1366667,0.2133333,0.6248298,0.497,0.2183333,85.5270959368396,85.70492282890386,4.472904063160397,4.295077171096139,234.15531965397133,-6.4124868872640945,51.242326954045836 -2022-01-07 16:15:00,5.189687,516.1061,550.6369,540.9556,515.4233,414.463,453.8759,466.4789,532.545,395.225,-4.439567,-2.284311,0.04432624,0.09412222,0.03546099,0.05666666,0.05666666,0.05666666,0.05333333,0.05166667,0.08833332,0.3302681,0.235,0.07,87.70085374317938,87.97786121097506,2.299146256820619,2.022138789024937,236.77976707938754,-6.416932763997465,53.83935084167509 -2022-01-07 16:30:00,0.9972842,464.3788,479.1688,471.4818,369.2187,358.326,363.2856,401.7973,408.3567,387.285,-3.997772,-2.350583,0.0,0.01575343,0.0,0.006666665,0.006666665,0.006666665,0.003333333,0.001666666,0.01166666,0.06643835,0.02,0.0,89.79429283007637,90.31924064453375,0.2057071699236277,-0.3192406445337559,239.33958128808501,-6.42137768833345,56.555166565900706 -2022-01-07 16:45:00,0.08257575,425.7,425.5,425.7,244.6,244.3,244.1,313.2,313.7,313.7,-3.394628,-2.5242,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.72282151488328,92.72282151488328,-2.7228215148832797,-2.7228215148832797,241.84171468312195,-6.425821659369831,59.37332924558748 -2022-01-07 17:00:00,-1.47368,,,,,,,,,,-3.952356,-2.8963,,,,,,,,,,,,,95.18273410981668,95.18273410981668,-5.182734109816674,-5.182734109816674,244.29346230647488,-6.430264676720981,62.2797907283263 -2022-01-07 17:15:00,-1.47368,,,,,,,,,,-4.831272,-3.140772,,,,,,,,,,,,,97.69344972501708,97.69344972501708,-7.693449725017082,-7.693449725017082,246.7024379558851,-6.434706740194088,65.26258823271826 -2022-01-07 17:30:00,0.0,,,,,,,,,,-5.08535,-3.217594,,,,,,,,,,,,,100.24974594062402,100.24974594062402,-10.249745940624024,-10.249745940624024,249.0765790598266,-6.439147848832363,68.31154472545005 -2022-01-07 17:45:00,-0.0698717,,,,,,,,,,-5.22455,-3.3523,,,,,,,,,,,,,102.8466681721824,102.8466681721824,-12.846668172182412,-12.846668172182412,251.42418057902412,-6.443588002297474,71.41799775481813 -2022-01-07 18:00:00,-1.043298,,,,,,,,,,-5.717044,-3.599972,,,,,,,,,,,,,105.47948599328099,105.47948599328099,-15.479485993280983,-15.479485993280983,253.75395625942372,-6.4480272003529535,74.57456021359496 -2022-01-07 18:15:00,-0.973426,,,,,,,,,,-5.798061,-3.740672,,,,,,,,,,,,,108.14364521139481,108.14364521139481,-18.143645211394816,-18.143645211394816,256.075129658637,-6.452465442049288,77.77491461954877 -2022-01-07 18:30:00,0.0,,,,,,,,,,-5.366611,-3.80415,,,,,,,,,,,,,110.8347162826218,110.8347162826218,-20.834716282621798,-20.834716282621798,258.3975587205846,-6.456902727131819,81.01363987750106 -2022-01-07 18:45:00,-0.0873381,,,,,,,,,,-5.516122,-4.058444,,,,,,,,,,,,,113.54833588359531,113.54833588359531,-23.548335883595307,-23.548335883595307,260.73189666862646,-6.461339055262215,84.28606440831615 -2022-01-07 19:00:00,-0.1222733,,,,,,,,,,-6.121878,-4.428844,,,,,,,,,,,,,116.2801409693556,116.2801409693556,-26.280140969355596,-26.280140969355596,263.08979694070104,-6.465774425523705,87.58814296969734 -2022-01-07 19:15:00,-0.1397457,,,,,,,,,,-6.474306,-4.740767,,,,,,,,,,,,,119.02569396043803,119.02569396043803,-29.02569396043803,-29.02569396043803,265.4841725503764,-6.470208837676182,90.91635475344398 -2022-01-07 19:30:00,-0.1048104,,,,,,,,,,-6.710128,-4.997944,,,,,,,,,,,,,121.7803934087627,121.7803934087627,-31.78039340876271,-31.78039340876271,267.92952072316575,-6.474642291374039,94.26761669257219 -2022-01-07 19:45:00,0.0,,,,,,,,,,-7.022356,-5.234372,,,,,,,,,,,,,124.53936645243903,124.53936645243903,-34.539366452439026,-34.539366452439026,270.4423304425336,-6.479074785704142,97.63921024018269 -2022-01-07 20:00:00,0.0,,,,,,,,,,-7.249239,-5.508744,,,,,,,,,,,,,127.29733766812096,127.29733766812096,-37.29733766812096,-37.29733766812096,273.0415954803496,-6.48350632036454,101.02872036553012 -2022-01-07 20:15:00,-0.3144808,,,,,,,,,,-7.446567,-5.80825,,,,,,,,,,,,,130.04846318998526,130.04846318998526,-40.048463189985256,-40.048463189985256,275.7494579793093,-6.48793689514423,104.43398175777796 -2022-01-07 20:30:00,-0.9958563,,,,,,,,,,-7.947661,-6.117278,,,,,,,,,,,,,132.78611906013344,132.78611906013344,-42.78611906013343,-42.78611906013343,278.59201604886573,-6.4923665090645954,107.85303152525333 -2022-01-07 20:45:00,-0.7687314,,,,,,,,,,-8.494005,-6.359033,,,,,,,,,,,,,135.50262838742742,135.50262838742742,-45.50262838742742,-45.50262838742742,281.600333024659,-6.496795161809132,111.28406788285699 -2022-01-07 21:00:00,-0.6194314,,,,,,,,,,-8.854767,-6.520661,,,,,,,,,,,,,138.18890281663778,138.18890281663778,-48.18890281663777,-48.18890281663777,284.8116810649077,-6.501222853123181,114.72541023156161 -2022-01-07 21:15:00,-0.697252,,,,,,,,,,-9.295989,-6.715178,,,,,,,,,,,,,140.83396998812276,140.83396998812276,-50.83396998812277,-50.83396998812277,288.2710390530989,-6.5056495821190765,118.17546002102435 -2022-01-07 21:30:00,-0.992618,,,,,,,,,,-9.554094,-6.920817,,,,,,,,,,,,,143.42435065029952,143.42435065029952,-53.42435065029952,-53.42435065029952,292.0328176704191,-6.51007534843302,121.63266150596506 -2022-01-07 21:45:00,-2.555346,,,,,,,,,,-10.12879,-7.241678,,,,,,,,,,,,,145.94323955046076,145.94323955046076,-55.94323955046075,-55.94323955046075,296.16266618600633,-6.514500151861284,125.09545671437047 -2022-01-07 22:00:00,-2.036005,,,,,,,,,,-10.68048,-7.560995,,,,,,,,,,,,,148.36944948175733,148.36944948175733,-58.369449481757314,-58.369449481757314,300.738974151122,-6.518923991428892,128.56223198502454 -2022-01-07 22:15:00,-0.3779792,,,,,,,,,,-10.33177,-7.470278,,,,,,,,,,,,,150.67610339113298,150.67610339113298,-60.67610339113299,-60.67610339113299,305.8532018678492,-6.523346866873908,132.0312515382148 -2022-01-07 22:30:00,-0.06987845,,,,,,,,,,-9.950922,-7.371833,,,,,,,,,,,,,152.82913806570528,152.82913806570528,-62.82913806570529,-62.82913806570529,311.60731920673663,-6.527768777872552,135.50056605634214 -2022-01-07 22:45:00,0.0111197,,,,,,,,,,-10.01073,-7.491661,,,,,,,,,,,,,154.78587991515337,154.78587991515337,-64.78587991515339,-64.78587991515339,318.1053708195889,-6.5321897236171935,138.96788258470448 -2022-01-07 23:00:00,0.03494857,,,,,,,,,,-9.893439,-7.519978,,,,,,,,,,,,,156.49432896193917,156.49432896193917,-66.49432896193919,-66.49432896193919,325.4349315497695,-6.5366097036676365,142.43037151201455 -2022-01-07 23:15:00,-0.1858671,,,,,,,,,,-9.8712,-7.587089,,,,,,,,,,,,,157.89434510093224,157.89434510093224,-67.89434510093224,-67.89434510093224,333.6346918967648,-6.541028717849258,145.8843623033471 -2022-01-07 23:30:00,-0.209696,,,,,,,,,,-10.19898,-7.762411,,,,,,,,,,,,,158.92238674189502,158.92238674189502,-68.92238674189502,-68.92238674189502,342.6503142358223,-6.545446765238012,149.32484481259283 -2022-01-07 23:45:00,0.0,,,,,,,,,,-10.25116,-7.8838,,,,,,,,,,,,,159.5209390517729,159.5209390517729,-69.5209390517729,-69.5209390517729,352.29498617418585,-6.549863845517393,152.74461244077764 -2022-01-08 00:00:00,-0.2970718,,,,,,,,,,-10.36102,-8.056595,,,,,,,,,,,,,159.6512624437347,159.6512624437347,-69.65126244373472,-69.65126244373472,2.2464490407087396,-6.55427995840364,156.13270353466942 -2022-01-08 00:15:00,-0.2970718,,,,,,,,,,-10.60195,-8.284994,,,,,,,,,,,,,159.30432512886955,159.30432512886955,-69.30432512886956,-69.30432512886956,12.105147250871084,-6.558695103009086,159.47139398013138 -2022-01-08 00:30:00,-0.4622878,,,,,,,,,,-10.71136,-8.447406,,,,,,,,,,,,,158.5036260483123,158.5036260483123,-68.50362604831228,-68.50362604831228,21.49568949735442,-6.563109279035416,162.72998611152408 -2022-01-08 00:45:00,-0.4972368,,,,,,,,,,-11.06382,-8.654256,,,,,,,,,,,,,157.29806078331396,157.29806078331396,-67.29806078331396,-67.29806078331396,30.154176155379446,-6.56752248619523,165.85101122223745 -2022-01-08 01:00:00,-0.03494901,,,,,,,,,,-11.11996,-8.750794,,,,,,,,,,,,,155.74933263833213,155.74933263833213,-65.74933263833215,-65.74933263833215,37.957520691399736,-6.571934723597224,168.71771838767594 -2022-01-08 01:15:00,0.0,,,,,,,,,,-10.72502,-8.775811,,,,,,,,,,,,,153.9203021812114,153.9203021812114,-63.92030218121142,-63.92030218121142,44.89952718612642,-6.576345990943082,171.0795545638644 -2022-01-08 01:30:00,-0.2271561,,,,,,,,,,-10.60435,-8.904612,,,,,,,,,,,,,151.867728250174,151.867728250174,-61.867728250174004,-61.867728250174004,51.04609424285161,-6.580756287945405,172.44560155963254 -2022-01-08 01:45:00,-1.15326,,,,,,,,,,-11.08099,-9.171284,,,,,,,,,,,,,149.63935496616165,149.63935496616165,-59.63935496616165,-59.63935496616165,56.49542667989624,-6.585165613712888,172.26797616637432 -2022-01-08 02:00:00,-1.329587,,,,,,,,,,-11.75401,-9.452066,,,,,,,,,,,,,147.27377739309162,147.27377739309162,-57.273777393091606,-57.273777393091606,61.352207880847516,-6.589573967954493,170.6341220108192 -2022-01-08 02:15:00,-0.5607475,,,,,,,,,,-11.97044,-9.577711,,,,,,,,,,,,,144.80159152774237,144.80159152774237,-54.801591527742374,-54.801591527742374,65.71422744513899,-6.593981350382819,168.13138898974904 -2022-01-08 02:30:00,-0.6052343,,,,,,,,,,-12.13846,-9.721811,,,,,,,,,,,,,142.24690226365908,142.24690226365908,-52.246902263659074,-52.246902263659074,69.66708338203921,-6.598387760117475,165.19478538181724 -2022-01-08 02:45:00,-0.6576563,,,,,,,,,,-12.50051,-9.945933,,,,,,,,,,,,,139.62875015686112,139.62875015686112,-49.62875015686111,-49.62875015686111,73.28322401542039,-6.602793196816492,162.03678590993454 -2022-01-08 03:00:00,-1.3693,,,,,,,,,,-13.12477,-10.34272,,,,,,,,,,,,,136.9623063440172,136.9623063440172,-46.962306344017215,-46.962306344017215,76.62296266698718,-6.60719766027978,158.75697230789456 -2022-01-08 03:15:00,-1.628208,,,,,,,,,,-13.96871,-10.84715,,,,,,,,,,,,,134.25981618241855,134.25981618241855,-44.25981618241854,-44.25981618241854,79.7361902009041,-6.61160114957238,155.40520773739348 -2022-01-08 03:30:00,-0.5067173,,,,,,,,,,-14.61965,-11.09577,,,,,,,,,,,,,131.53132272466706,131.53132272466706,-41.53132272466707,-41.53132272466707,82.6641746488101,-6.61600366437051,152.00859476742426 -2022-01-08 03:45:00,-0.3129166,,,,,,,,,,-14.72328,-11.10042,,,,,,,,,,,,,128.78521654212057,128.78521654212057,-38.78521654212057,-38.78521654212057,85.44119086134157,-6.620405204463168,148.58302607857425 -2022-01-08 04:00:00,-0.3097402,,,,,,,,,,-14.6243,-11.10162,,,,,,,,,,,,,126.02865216373121,126.02865216373121,-36.028652163731216,-36.028652163731216,88.0959023741799,-6.62480576890448,145.13846638632168 -2022-01-08 04:15:00,-0.03494641,,,,,,,,,,-14.57242,-11.14842,,,,,,,,,,,,,123.26786376812805,123.26786376812805,-33.267863768128045,-33.267863768128045,90.65249517397939,-6.629205357432511,141.6815473070284 -2022-01-08 04:30:00,0.0,,,,,,,,,,-14.15417,-11.13223,,,,,,,,,,,,,120.50840836648948,120.50840836648948,-30.508408366489476,-30.508408366489476,93.1315899899381,-6.633603969723481,138.21693140194347 -2022-01-08 04:45:00,0.0,,,,,,,,,,-13.89198,-11.09788,,,,,,,,,,,,,117.75535485312624,117.75535485312624,-27.75535485312624,-27.75535485312624,95.55097099914673,-6.638001604958845,134.74807241754937 -2022-01-08 05:00:00,0.0,,,,,,,,,,-14.18661,-11.17035,,,,,,,,,,,,,115.01343218493327,115.01343218493327,-25.01343218493326,-25.01343218493326,97.92616691855864,-6.642398262807546,131.27766044364031 -2022-01-08 05:15:00,0.0,,,,,,,,,,-14.44067,-11.26411,,,,,,,,,,,,,112.28714946585323,112.28714946585323,-22.287149465853233,-22.287149465853233,100.27091261104289,-6.646793942978547,127.80789711268392 -2022-01-08 05:30:00,-0.1223483,,,,,,,,,,-14.41698,-11.36823,,,,,,,,,,,,,109.58089453750358,109.58089453750358,-19.58089453750359,-19.58089453750359,102.59751672940575,-6.651188644620561,124.34067316320875 -2022-01-08 05:45:00,-0.3066581,,,,,,,,,,-14.34408,-11.46503,,,,,,,,,,,,,106.89901565414573,106.89901565414573,-16.89901565414572,-16.89901565414572,104.91715555378346,-6.655582367417082,120.87768706739385 -2022-01-08 06:00:00,-0.1843099,,,,,,,,,,-14.31771,-11.51355,,,,,,,,,,,,,104.24589256418218,104.24589256418218,-14.24589256418218,-14.24589256418218,107.2401059603522,-6.65997511112073,117.4205303011398 -2022-01-08 06:15:00,-0.2923628,,,,,,,,,,-14.76622,-11.83004,,,,,,,,,,,,,101.62599886501926,101.62599886501926,-11.625998865019252,-11.625998865019252,109.5759296140613,-6.66436687478199,113.97075137472913 -2022-01-08 06:30:00,-2.575647,,,,,,,,,,-15.92494,-12.76758,,,,,,,,,,,,,99.04395669556892,99.04395669556892,-9.043956695568925,-9.043956695568925,111.93361747925871,-6.668757658200775,110.5299056036723 -2022-01-08 06:45:00,-3.352647,,,,,,,,,,-17.29004,-14.04743,,,,,,,,,,,,,96.50458730915405,96.50458730915405,-6.504587309154048,-6.504587309154048,114.3216985383774,-6.673147461013286,107.09959883231114 -2022-01-08 07:00:00,-0.001648,394.765,405.2158,400.829,394.7411,376.1172,390.0281,385.7155,390.1086,399.9455,-18.28233,-14.9612,0.01970803,0.01970803,0.001459854,0.005208335,0.005208335,0.005208335,0.0,0.0,0.0,0.1029197,0.03020833,0.003333333,94.01295723193286,94.01295723193286,-4.012957231932861,-4.012957231932861,116.74831741335868,-6.677536282379151,103.6815274375816 -2022-01-08 07:15:00,4.056357,550.7247,556.1341,566.1898,541.7432,459.9297,496.2621,480.5728,534.6987,457.4479,-18.72362,-15.40866,0.06970803,0.06970803,0.05145985,0.05520833,0.05520833,0.05520833,0.0490991,0.03603603,0.05225225,0.3542354,0.2357639,0.06144143,91.5744193022438,91.5744193022438,-1.574419302243791,-1.574419302243791,119.22128403591154,-6.681924122021883,100.27751598775086 -2022-01-08 07:30:00,10.58355,599.1744,610.482,623.7042,566.6434,431.9927,468.2864,475.1761,608.2147,391.0435,-18.94737,-15.72746,0.1143442,0.1438016,0.09999999,0.1401234,0.1382716,0.1382716,0.1223134,0.09050033,0.185288,0.5754961,0.4829946,0.1982867,88.81738685756555,89.1946503998346,1.1826131424344433,0.8053496001653976,121.7480942970119,-6.686310979686823,96.88955750755336 -2022-01-08 07:45:00,20.03842,644.9836,674.0253,673.0803,608.1099,471.0841,490.8047,504.1048,676.3326,395.8551,-18.67734,-15.92859,0.1759443,0.2806017,0.1572,0.2170898,0.2152379,0.2152379,0.1917858,0.1730358,0.3239881,0.8281804,0.6785626,0.4050825,86.6602087126808,86.87968404894953,3.3397912873191955,3.120315951050474,124.33592236544928,-6.690696854406269,93.51985689562952 -2022-01-08 08:00:00,53.7159,706.5698,712.7328,718.2425,649.3826,467.1208,499.756,549.2701,724.2895,432.3333,-17.23039,-15.48065,0.3020256,0.5639276,0.3396468,0.3864704,0.3852307,0.3857163,0.3233334,0.3752381,0.5242857,1.317298,1.024264,0.8001419,84.48509870982194,84.63593569845176,5.514901290178054,5.364064301548244,126.99158475257343,-6.695081746020151,90.1708779874365 -2022-01-08 08:15:00,118.4393,715.9626,712.9135,730.8887,632.9911,418.7654,477.4809,540.5009,733.6584,457.809,-15.0431,-14.27914,0.5808101,1.060974,0.661293,0.7148233,0.7247538,0.7252393,0.5759575,0.6860145,0.8393114,2.160605,1.548673,1.378173,82.35582928386432,82.4702207635101,7.644170716135682,7.529779236489906,129.7214726450552,-6.699465654110099,86.84539892474906 -2022-01-08 08:30:00,178.7119,703.0693,727.8467,739.1349,618.2881,403.9218,470.4987,515.803,739.7443,442.0327,-12.56351,-12.68872,0.9937181,1.70792,1.069957,1.111283,1.122453,1.124287,0.9504511,1.101156,1.539489,3.267678,2.178743,2.148786,80.29752421854194,80.38976198109548,9.702475781458068,9.61023801890453,132.53145199154056,-6.703848577872122,83.54657654538995 -2022-01-08 08:45:00,229.1344,711.5764,744.0621,746.4094,683.9454,399.8239,478.0935,525.7159,747.4427,386.0829,-9.7091,-10.86712,1.424326,2.403464,1.508669,1.563303,1.570642,1.568349,1.323466,1.545493,2.807195,4.43831,2.969266,3.036377,78.32467001227857,78.4021823166105,11.675329987721422,11.597817683389497,135.42673156943175,-6.708230517062475,80.27802085939332 -2022-01-08 09:00:00,283.3393,718.2219,742.9146,748.8338,741.6652,397.4535,492.8669,558.2587,750.8114,357.4846,-6.632256,-9.698561,1.897488,3.183663,2.003882,2.044208,2.047003,2.045904,1.731512,2.083208,4.306224,5.727341,3.813555,4.127351,76.44837669916046,76.51548173372976,13.551623300839534,13.484518266270236,138.411697137776,-6.712611471310083,77.04388502643413 -2022-01-08 09:15:00,340.4345,721.0632,737.559,749.9003,748.9775,403.1138,507.0916,553.1735,750.6821,367.5536,-3.476189,-9.229922,2.422518,4.049728,2.569848,2.552757,2.553818,2.561054,2.328254,2.668096,5.452064,7.135538,4.655833,5.283492,74.67856916991107,74.73799312251467,15.321430830088932,15.262006877485332,141.4897150861915,-6.716991439785488,73.84897261072797 -2022-01-08 09:30:00,397.3871,719.4888,734.9936,749.452,748.5667,413.9247,512.7943,527.3196,749.7742,387.364,-0.6373556,-8.824478,2.996362,4.948856,3.150529,3.111126,3.116206,3.120413,2.98876,3.232694,6.318207,8.591103,5.56738,6.412105,73.0247357127853,73.07831296491726,16.975264287214703,16.921687035082737,144.66291233402728,-6.721370422215841,70.69886440213213 -2022-01-08 09:45:00,448.8757,713.3226,740.6627,748.8649,751.0291,442.6663,512.7321,522.9255,748.8294,396.5558,1.997194,-8.212961,3.575165,5.799555,3.682042,3.611904,3.605631,3.610804,3.578658,3.791144,7.330599,10.00797,6.470979,7.549907,71.49617483157373,71.5452049263519,18.503825168426275,18.454795073648096,147.93193958482192,-6.725748418328294,67.60007130202052 -2022-01-08 10:00:00,496.998,706.5019,744.7946,747.0916,750.7272,479.5883,511.6651,518.488,744.748,407.0015,4.388484,-7.733106,4.137868,6.598347,4.190035,4.092,4.08292,4.088092,4.152549,4.333058,8.195123,11.35083,7.404598,8.637325,70.10202869957529,70.14747316752953,19.89797130042471,19.852526832470474,151.29573334280855,-6.730125427209714,64.56021591195848 -2022-01-08 10:15:00,545.2042,705.1952,742.1495,742.6045,743.0897,491.649,508.7342,515.0103,737.1314,418.5847,6.355134,-7.279706,4.669191,7.356701,4.678689,4.609451,4.602,4.597882,4.727133,4.885602,9.027337,12.59512,8.239725,9.741117,68.8512062996372,68.89380426824026,21.148793700362795,21.106195731759737,154.75129748489792,-6.73450144862727,61.58824516399364 -2022-01-08 10:30:00,587.3698,717.5707,739.6846,736.2154,736.1962,490.2891,504.675,515.6812,731.3731,416.4348,7.31905,-6.8926,5.128535,8.013463,5.121599,5.098071,5.093954,5.089836,5.192414,5.369044,10.01934,13.71229,9.040083,10.71074,67.75224111646634,67.79258089026344,22.247758883533667,22.207419109736566,158.29352564346618,-6.738876482235355,58.694678607147914 -2022-01-08 10:45:00,625.1849,731.0167,735.5093,731.6514,737.8127,502.1895,506.0476,528.9097,727.2644,413.7253,7.956905,-6.943189,5.594888,8.627288,5.527077,5.51562,5.51562,5.515065,5.461285,5.786979,10.94063,14.775,9.901359,11.55678,66.81310602578866,66.85167147474155,23.18689397421134,23.148328525258446,161.91509234504872,-6.743250527244527,55.89188992993587 -2022-01-08 11:00:00,663.0563,730.6876,731.7748,724.4136,736.261,514.1115,515.4697,543.7786,720.8333,413.2051,9.277022,-6.302939,6.105018,9.188962,5.929446,5.935303,5.932576,5.934748,5.727929,6.180254,11.77164,15.77063,10.73925,12.38373,66.04100243384383,66.07820433436586,23.958997566156178,23.921795665634132,165.60644096032433,-6.747623583338282,53.194413395090706 -2022-01-08 11:15:00,696.7172,725.4476,728.2745,718.0678,729.3353,515.6436,525.4891,594.9584,717.2382,428.1949,10.44983,-5.504172,6.545675,9.66405,6.286508,6.330763,6.328035,6.330763,5.72081,6.507337,12.20133,16.59958,11.48895,13.32557,65.44214113841589,65.47833923324,24.55785886158411,24.521660766759986,169.35588783519495,-6.751995650211029,50.619259627537836 -2022-01-08 11:30:00,725.6235,722.5981,724.3461,714.3325,720.9966,535.4991,530.7072,648.5733,714.2494,442.5243,12.53246,-5.148506,6.866158,10.12142,6.603728,6.713164,6.713164,6.713164,5.681392,6.815719,12.57477,17.32495,12.34248,14.21728,65.02153166335503,65.05705088624283,24.978468336644962,24.942949113757166,173.14985717123773,-6.756366727007844,48.18620444651428 -2022-01-08 11:45:00,749.7322,719.2485,721.3585,710.0251,711.645,567.8465,553.8036,660.0896,711.7095,440.4881,15.51984,-4.740611,7.169783,10.56052,6.909528,7.090825,7.088687,7.090825,6.023428,7.146767,13.31257,18.00509,13.43102,15.00212,64.78279774577234,64.81794078376237,25.217202254227654,25.182059216237636,176.97324818285392,-6.760736813466792,45.917989487557335 -2022-01-08 12:00:00,769.2346,711.302,689.2787,704.295,703.7344,591.7344,601.6592,671.9349,708.9342,443.6895,16.51859,-4.404428,7.444117,11.56418,7.146028,7.34512,7.341316,7.34512,6.291224,7.377964,13.74524,18.60409,14.42258,15.60931,64.72803609566297,64.76309375037891,25.271963904337024,25.23690624962108,180.8099156194163,-6.765105909351405,43.84034308101397 -2022-01-08 12:15:00,779.9653,710.54,645.754,703.799,698.1698,611.0001,648.7804,686.9873,703.7283,448.47,17.58196,-3.612078,7.612667,13.07733,7.314333,7.5331,7.529659,7.533454,6.522,7.557666,13.32867,19.363,15.2409,15.82133,64.85773149954427,64.89299191796499,25.14226850045573,25.107008082035,184.64323360120605,-6.769474013679428,41.981690185090855 -2022-01-08 12:30:00,782.1226,712.4766,664.85,707.2816,694.5065,634.9312,698.7618,688.9883,700.4653,497.2817,19.63173,-2.644939,7.643,12.818,7.376667,7.596099,7.594326,7.594787,6.952666,7.690333,11.84067,19.53,15.8419,16.153,65.17073684284351,65.20649449989779,24.82926315715649,24.79350550010222,188.4567005708908,-6.773841126276238,40.3723952798372 -2022-01-08 12:45:00,783.1979,709.235,709.5833,708.5883,693.663,666.6703,740.8947,672.2449,700.5853,593.515,18.84575,-2.716406,7.560667,11.64067,7.384999,7.638999,7.638999,7.635666,7.692,7.716667,10.69567,19.19733,16.363,17.177,65.66432010833942,65.70088538359606,24.335679891660572,24.299114616403944,192.23453244992675,-6.778207246803504,39.04339647004025 -2022-01-08 13:00:00,784.975,712.7584,725.1216,711.4467,697.2803,673.4543,763.45,667.845,704.899,666.7033,15.61306,-3.587117,7.478,11.42,7.408667,7.806333,7.804667,7.801333,8.769667,7.770667,10.663,19.17167,16.86066,18.70567,66.3342734276984,66.37198371492167,23.665726572301597,23.628016285078335,195.9621973179223,-6.7825723744499555,38.0241706173914 -2022-01-08 13:15:00,780.9112,717.4233,727.6367,713.4,696.6116,651.7637,772.5616,688.447,704.7936,704.9667,14.00154,-3.869656,7.422999,11.346,7.399666,8.076,8.067666,8.077666,9.894334,8.474,10.69133,19.129,17.301,20.49433,67.17507388354034,67.21430743344669,22.824926116459665,22.785692566553315,199.62685371911957,-6.786936508862709,37.34015025284233 -2022-01-08 13:30:00,765.2518,717.9083,727.3134,714.08,691.5447,644.1523,767.9286,702.1299,704.912,715.8363,13.82588,-3.610361,7.330999,11.177,7.312333,8.462667,8.454333,8.467667,10.64734,9.614,10.82333,18.92133,17.98334,22.09333,68.18008063823528,68.22127483567988,21.819919361764715,21.77872516432012,203.2176641441785,-6.79129964987078,37.009965256652656 -2022-01-08 13:45:00,740.9526,717.3704,726.7657,714.3469,688.9993,574.7856,763.8087,698.8246,708.4776,714.2653,14.56244,-2.793789,7.078667,10.708,7.151667,8.311333,8.306333,8.311333,9.878335,9.997,10.019,18.299,17.03967,21.26,69.34175109982172,69.3854277777006,20.658248900178283,20.6145722222994,206.72597597731294,-6.795661796473723,37.043099518972085 -2022-01-08 14:00:00,709.5437,626.33,620.98,709.5483,695.345,479.883,747.6603,697.3414,706.4476,712.8752,13.53716,-1.912639,6.430999,12.18467,6.875667,7.284666,7.277999,7.283,7.863873,8.405605,7.915333,15.79634,14.194,17.24445,70.65185897430054,70.69866098630241,19.348141025699466,19.301339013697586,210.1453770657052,-6.800022948533297,37.43859093978875 -2022-01-08 14:15:00,671.825,463.9117,441.404,713.4603,700.8771,466.112,731.4241,698.506,706.877,712.7992,6.257056,-1.29185,6.546,15.7,6.442333,6.47123,6.462615,6.467803,6.65954,6.693605,6.629333,13.63367,12.49197,14.34045,72.10169638505931,72.15244264445997,17.898303614940687,17.84755735554003,213.47164045789702,-6.804383105674788,38.18516698087985 -2022-01-08 14:30:00,630.3785,387.4666,379.8184,725.3883,707.4494,485.4307,735.9217,701.017,713.7373,717.49,-0.3917278,-1.087939,6.945666,16.26266,6.014333,6.120896,6.115615,6.120802,6.268333,6.263333,6.264334,13.11433,12.04497,13.621,73.68224376143468,73.73801570076897,16.31775623856533,16.261984299231035,216.70258437964546,-6.808742267097841,39.262773071952516 -2022-01-08 14:45:00,581.6162,376.0826,417.499,730.055,717.329,487.3916,740.6813,702.635,718.4366,722.8823,-2.716489,-1.364267,6.604333,13.15166,5.602,5.682666,5.68,5.687333,5.84,5.828333,5.828333,12.01033,11.32234,12.76567,75.38428937972482,75.44657346602732,14.615710620275179,14.55342653397268,219.83787575025937,-6.813100432493229,40.64504034630628 -2022-01-08 15:00:00,483.0581,365.1283,524.0798,724.3442,712.2073,426.0779,732.8557,697.7297,710.6019,716.6414,-3.975006,-1.509856,6.00947,8.609937,4.978571,5.021667,5.012,5.024333,5.243667,5.177333,5.214667,10.20707,9.724,11.37467,77.19846832418276,77.26940462462,12.80153167581724,12.730595375380007,222.87880042424356,-6.817457601588103,42.302051245882026 -2022-01-08 15:15:00,262.1823,355.9066,657.8612,714.6375,708.473,374.8563,728.128,700.1903,707.5729,713.076,-4.714045,-2.453372,5.111136,5.115272,4.201238,4.255333,4.245,4.251667,4.456334,4.373,4.433001,8.424401,8.054333,9.691665,79.11516077541187,79.19800733788891,10.88483922458814,10.801992662111095,225.82802377810458,-6.821813773549366,44.202842526339495 -2022-01-08 15:30:00,64.45077,350.4763,713.389,715.4933,713.9579,419.6686,740.3583,666.44,687.4949,690.1367,-6.03235,-3.901322,4.03,3.642,3.329667,3.142667,3.141,3.194333,2.906667,3.246666,3.035001,6.856,6.175,6.78,81.12409610007393,81.2241746978463,8.87590389992608,8.775825302153706,228.6893601041997,-6.826168948060513,46.31732190382978 -2022-01-08 15:45:00,12.33504,356.3303,588.8594,581.3229,637.83,542.1716,714.9333,587.6884,603.2083,642.0767,-8.106678,-5.397406,1.921925,1.779109,1.589653,1.298333,1.301667,1.353333,1.016667,1.378333,1.128333,3.455068,2.781667,2.57,83.21320353728808,83.34005287385459,6.786796462711914,6.659947126145415,231.4675606505371,-6.830523124870524,48.6175155314667 -2022-01-08 16:00:00,5.303792,366.9219,434.3088,425.0468,521.8083,621.5183,639.0134,554.26,540.4966,607.83,-9.913333,-6.731661,0.2962585,0.3371089,0.2209864,0.1866667,0.1883333,0.1883333,0.1916666,0.17,0.155,0.7417347,0.605,0.3633333,85.36511950998226,85.53817615512484,4.634880490017733,4.4618238448751555,234.16812937522894,-6.834876303146302,51.078227963383405 -2022-01-08 16:15:00,1.399042,410.3583,438.295,428.1983,527.9417,636.5333,597.6083,555.725,532.53,579.4833,-11.47135,-7.768722,0.1166667,0.1483333,0.07333334,0.09666666,0.09666666,0.09833331,0.09499998,0.06499998,0.06166666,0.4066667,0.345,0.145,87.54477141765373,87.81148362948511,2.455228582346266,2.1885163705148933,236.7971715470354,-6.839228482534963,53.677265686012944 -2022-01-08 16:30:00,0.03017192,473.565,483.3435,473.8914,496.4185,535.6962,510.5407,530.465,518.9746,536.7883,-12.78197,-8.635422,0.03333334,0.03333334,0.01833333,0.02166666,0.02166666,0.02166666,0.02833333,0.01333333,0.01166666,0.135,0.085,0.02166666,89.65401457579208,90.15331943140379,0.3459854242079282,-0.15331943140378645,239.36127439525407,-6.8435796628800745,56.39537499047279 -2022-01-08 16:45:00,-0.662256,497.6667,497.6038,497.8295,421.6936,421.0392,423.0747,508.76,509.2125,509.07,-13.73166,-9.240155,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.557420591358,92.557420591358,-2.557420591357994,-2.557420591357994,241.86742070226833,-6.847929843228485,59.216018620429516 -2022-01-08 17:00:00,-0.662256,,,,,,,,,,-14.38842,-9.818117,,,,,,,,,,,,,95.01789624763849,95.01789624763849,-5.017896247638486,-5.017896247638486,244.3229350735748,-6.852279023332812,62.125079546226104 -2022-01-08 17:15:00,0.0476446,,,,,,,,,,-14.86515,-10.43469,,,,,,,,,,,,,97.5291985072349,97.5291985072349,-7.529198507234893,-7.529198507234893,246.73545931530396,-6.856627202920208,65.11054476267323 -2022-01-08 17:30:00,-0.03971964,,,,,,,,,,-15.17625,-10.84608,,,,,,,,,,,,,100.08608745373695,100.08608745373695,-10.086087453736948,-10.086087453736948,249.11295670637497,-6.860974381164851,68.16220148419441 -2022-01-08 17:45:00,0.1223278,,,,,,,,,,-15.38373,-11.07439,,,,,,,,,,,,,102.68359242039949,102.68359242039949,-12.683592420399492,-12.683592420399492,251.46374537060535,-6.865320557753876,71.27136256347308 -2022-01-08 18:00:00,0.2478162,,,,,,,,,,-15.46451,-11.23753,,,,,,,,,,,,,105.3169680373074,105.3169680373074,-15.316968037307404,-15.316968037307404,253.7965590054318,-6.8696657324180705,74.43062456478039 -2022-01-08 18:15:00,0.03812412,,,,,,,,,,-15.66088,-11.59304,,,,,,,,,,,,,107.98164603720278,107.98164603720278,-17.981646037202772,-17.981646037202772,256.12063731402736,-6.874009904360719,77.63365997522055 -2022-01-08 18:30:00,0.0,,,,,,,,,,-16.08951,-12.13976,,,,,,,,,,,,,110.67318341841268,110.67318341841268,-20.673183418412673,-20.673183418412673,258.44584983911335,-6.878353073232574,80.87504241312848 -2022-01-08 18:45:00,0.03018606,,,,,,,,,,-16.45156,-12.34192,,,,,,,,,,,,,113.38720378369348,113.38720378369348,-23.387203783693476,-23.387203783693476,260.7828558598726,-6.882695238818997,84.1500986057992 -2022-01-08 19:00:00,0.1970177,,,,,,,,,,-16.55363,-12.35369,,,,,,,,,,,,,116.1193311941357,116.1193311941357,-26.1193311941357,-26.1193311941357,263.1433079469449,-6.8870364002468705,87.45478437689853 -2022-01-08 19:15:00,0.1668316,,,,,,,,,,-16.66676,-12.79165,,,,,,,,,,,,,118.86511519310653,118.86511519310653,-28.86511519310654,-28.86511519310654,265.5401093821301,-6.891376557246986,90.78558215872151 -2022-01-08 19:30:00,0.0,,,,,,,,,,-16.94557,-13.31894,,,,,,,,,,,,,121.6199413694121,121.6199413694121,-31.619941369412103,-31.619941369412103,267.9877360432769,-6.8957157095610455,94.13941390778852 -2022-01-08 19:45:00,0.0,,,,,,,,,,-17.07684,-13.32877,,,,,,,,,,,,,124.3789238031814,124.3789238031814,-34.378923803181394,-34.378923803181394,270.5026400416645,-6.900053856330487,97.51356764896752 -2022-01-08 20:00:00,0.1191648,,,,,,,,,,-17.17077,-13.27779,,,,,,,,,,,,,127.13677405738093,127.13677405738093,-37.13677405738093,-37.13677405738093,273.1037571910312,-6.904390997253358,100.90563636932296 -2022-01-08 20:15:00,0.1191648,,,,,,,,,,-17.27254,-13.51332,,,,,,,,,,,,,129.88763567324787,129.88763567324787,-39.887635673247885,-39.887635673247885,275.81314266604875,-6.90872713211138,104.31346423644331 -2022-01-08 20:30:00,0.009533565,,,,,,,,,,-17.46061,-13.81308,,,,,,,,,,,,,132.62487328021285,132.62487328021285,-42.62487328021284,-42.62487328021284,278.6567673103673,-6.913062260020524,107.73509942748747 -2022-01-08 20:45:00,0.009533565,,,,,,,,,,-17.63806,-13.97781,,,,,,,,,,,,,135.34080112975533,135.34080112975533,-45.340801129755334,-45.340801129755334,281.66551084686483,-6.9173963807515975,111.16875306811953 -2022-01-08 21:00:00,0.01748044,,,,,,,,,,-17.65191,-14.04951,,,,,,,,,,,,,138.02632693661835,138.02632693661835,-48.02632693661834,-48.02632693661834,284.8763827972805,-6.921729493988096,114.61275971080832 -2022-01-08 21:15:00,0.1303134,,,,,,,,,,-17.55046,-14.23335,,,,,,,,,,,,,140.67048329497618,140.67048329497618,-50.67048329497617,-50.67048329497617,288.3339887535697,-6.926061598904198,118.06553877375748 -2022-01-08 21:30:00,0.619807,,,,,,,,,,-16.90331,-14.26877,,,,,,,,,,,,,143.25981125287583,143.25981125287583,-53.25981125287583,-53.25981125287583,292.09221246728197,-6.930392695230694,121.52555612058548 -2022-01-08 21:45:00,1.827706,,,,,,,,,,-15.7325,-13.88346,,,,,,,,,,,,,145.77755151879077,145.77755151879077,-55.77755151879078,-55.77755151879078,296.2159671060907,-6.9347227827092865,124.99128019193448 -2022-01-08 22:00:00,2.787635,,,,,,,,,,-14.3485,-12.8051,,,,,,,,,,,,,148.2026044916655,148.2026044916655,-58.2026044916655,-58.2026044916655,300.7826322918695,-6.939051860514155,128.46113019800424 -2022-01-08 22:15:00,1.694152,,,,,,,,,,-13.05991,-11.82164,,,,,,,,,,,,,150.50824600199095,150.50824600199095,-60.50824600199096,-60.50824600199096,305.8823266970904,-6.943379928325157,131.93341209049046 -2022-01-08 22:30:00,0.2590311,,,,,,,,,,-12.40802,-11.60614,,,,,,,,,,,,,152.66066312906423,152.66066312906423,-62.66066312906422,-62.66066312906422,311.61533947536714,-6.947706985924015,135.40623066921134 -2022-01-08 22:45:00,0.03178115,,,,,,,,,,-12.63093,-11.55431,,,,,,,,,,,,,154.61756688115733,154.61756688115733,-64.61756688115733,-64.61756688115733,318.0838331478192,-6.95203303244125,138.8773648101466 -2022-01-08 23:00:00,0.0,,,,,,,,,,-13.36034,-11.64495,,,,,,,,,,,,,156.32750245049243,156.32750245049243,-66.32750245049243,-66.32750245049243,325.3737407783689,-6.9563580676294805,142.3440826996281 -2022-01-08 23:15:00,0.0,,,,,,,,,,-13.96755,-11.90703,,,,,,,,,,,,,157.7310151071312,157.7310151071312,-67.7310151071312,-67.7310151071312,333.523261156481,-6.9606820911685645,145.8028507586974 -2022-01-08 23:30:00,0.1541228,,,,,,,,,,-13.96076,-12.05774,,,,,,,,,,,,,158.76526745263976,158.76526745263976,-68.76526745263976,-68.76526745263976,342.4800141665505,-6.965005102294526,149.24885678792432 -2022-01-08 23:45:00,0.1604783,,,,,,,,,,-13.51169,-11.79733,,,,,,,,,,,,,159.37321466050417,159.37321466050417,-69.37321466050417,-69.37321466050417,352.0625566860365,-6.969327100679948,152.67519069688475 -2022-01-09 00:00:00,0.00635551,,,,,,,,,,-13.40725,-11.5301,,,,,,,,,,,,,159.516048745661,159.516048745661,-69.51604874566101,-69.51604874566101,1.9567182668866963,-6.973648086110188,156.07135335020877 -2022-01-09 00:15:00,0.0,,,,,,,,,,-13.64297,-11.567,,,,,,,,,,,,,159.18399233261266,159.18399233261266,-69.18399233261268,-69.18399233261268,11.770857407843437,-6.977968057712133,159.42037559708237 -2022-01-09 00:30:00,0.0,,,,,,,,,,-13.71872,-11.48884,,,,,,,,,,,,,158.39931861161475,158.39931861161475,-68.39931861161475,-68.39931861161475,21.133962521973785,-6.982287015216571,162.69285269469003 -2022-01-09 00:45:00,0.00953331,,,,,,,,,,-13.92492,-11.60888,,,,,,,,,,,,,157.20964256614286,157.20964256614286,-67.20964256614288,-67.20964256614288,29.781795513688394,-6.9866049583906715,165.833621821332 -2022-01-09 01:00:00,1.361695,,,,,,,,,,-13.54214,-11.50422,,,,,,,,,,,,,155.67569140873104,155.67569140873104,-65.67569140873103,-65.67569140873103,37.58767099357368,-6.990921886375872,168.73001810774383 -2022-01-09 01:15:00,2.817148,,,,,,,,,,-11.59972,-9.968322,,,,,,,,,,,,,153.85977698285885,153.85977698285885,-63.85977698285884,-63.85977698285884,44.54084117484285,-6.995237798877497,171.1372049059006 -2022-01-09 01:30:00,2.249904,,,,,,,,,,-9.700678,-8.435923,,,,,,,,,,,,,151.8184707111775,151.8184707111775,-61.8184707111775,-61.8184707111775,50.703261118923535,-6.999552695717284,172.56238875033276 -2022-01-09 01:45:00,1.645994,,,,,,,,,,-8.824189,-7.863945,,,,,,,,,,,,,149.59955966496614,149.59955966496614,-59.599559664966144,-59.599559664966144,56.17033196544156,-7.003866575960274,172.42833656487215 -2022-01-09 02:00:00,1.453575,,,,,,,,,,-8.324639,-7.297378,,,,,,,,,,,,,147.24179733687188,147.24179733687188,-57.24179733687188,-57.24179733687188,61.04499059999131,-7.008179439406376,170.8029834039657 -2022-01-09 02:15:00,1.262848,,,,,,,,,,-7.924272,-6.700695,,,,,,,,,,,,,144.77597844497126,144.77597844497126,-54.77597844497126,-54.77597844497126,65.42405382262211,-7.012491285804572,168.29221969053552 -2022-01-09 02:30:00,1.159624,,,,,,,,,,-7.296667,-6.223367,,,,,,,,,,,,,142.22640606813985,142.22640606813985,-52.22640606813984,-52.22640606813984,69.39264612260149,-7.016802114274469,165.34500021397227 -2022-01-09 02:45:00,0.9118455,,,,,,,,,,-6.514361,-5.847961,,,,,,,,,,,,,139.61229988084668,139.61229988084668,-49.612299880846685,-49.612299880846685,73.0230389798781,-7.021111924539582,162.17747423227527 -2022-01-09 03:00:00,0.6290829,,,,,,,,,,-5.891955,-5.596139,,,,,,,,,,,,,136.9489848930141,136.9489848930141,-46.948984893014114,-46.948984893014114,76.37553345568858,-7.025420716388908,158.8896408072762 -2022-01-09 03:15:00,0.5400403,,,,,,,,,,-5.426033,-5.423083,,,,,,,,,,,,,134.24883497996586,134.24883497996586,-44.248834979965864,-44.248834979965864,79.50009253275948,-7.029728488949331,155.53111692741504 -2022-01-09 03:30:00,0.6019191,,,,,,,,,,-5.103567,-5.246367,,,,,,,,,,,,,131.52199880699018,131.52199880699018,-41.52199880699019,-41.52199880699019,82.43809438846029,-7.034035242024402,152.12870328111168 -2022-01-09 03:45:00,0.4430993,,,,,,,,,,-4.891228,-5.078378,,,,,,,,,,,,,128.77695289730582,128.77695289730582,-38.77695289730582,-38.77695289730582,85.22393638465303,-7.038340975275787,148.69804766461505 -2022-01-09 04:00:00,0.6146593,,,,,,,,,,-4.699261,-4.842522,,,,,,,,,,,,,126.02092129385096,126.02092129385096,-36.02092129385097,-36.02092129385097,87.88640344951637,-7.042645687910408,145.24893188207702 -2022-01-09 04:15:00,0.5177783,,,,,,,,,,-4.485039,-4.637522,,,,,,,,,,,,,123.26019412577261,123.26019412577261,-33.26019412577262,-33.26019412577262,90.44979532737898,-7.046949379669968,141.78785275938677 -2022-01-09 04:30:00,0.2287135,,,,,,,,,,-4.312117,-4.544483,,,,,,,,,,,,,120.500373225532,120.500373225532,-30.500373225531998,-30.500373225531998,92.93483623343923,-7.051252050303447,138.3193726017679 -2022-01-09 04:45:00,0.2318901,,,,,,,,,,-4.174628,-4.452839,,,,,,,,,,,,,117.74656318802614,117.74656318802614,-27.74656318802614,-27.74656318802614,95.35940302376741,-7.055553698897711,134.84686919883472 -2022-01-09 05:00:00,0.2239488,,,,,,,,,,-4.059383,-4.344995,,,,,,,,,,,,,115.00352118644162,115.00352118644162,-25.00352118644161,-25.00352118644161,97.7391068419987,-7.059854325296328,131.372973767392 -2022-01-09 05:15:00,0.5130196,,,,,,,,,,-3.927867,-4.205622,,,,,,,,,,,,,112.27577838545514,112.27577838545514,-22.275778385455144,-22.275778385455144,100.08775580137592,-7.064153929211898,127.89984113925375 -2022-01-09 05:30:00,0.784606,,,,,,,,,,-3.75625,-4.044583,,,,,,,,,,,,,109.56773961528516,109.56773961528516,-19.56773961528516,-19.56773961528516,102.41772392260083,-7.068452509793133,124.42932382445625 -2022-01-09 05:45:00,0.7512316,,,,,,,,,,-3.581239,-3.868789,,,,,,,,,,,,,106.88376593846925,106.88376593846925,-16.883765938469253,-16.883765938469253,104.74024632485305,-7.0727500668035646,120.96308815694005 -2022-01-09 06:00:00,0.6447884,,,,,,,,,,-3.415433,-3.689111,,,,,,,,,,,,,104.2282464795799,104.2282464795799,-14.228246479579894,-14.228246479579894,107.06565352852544,-7.077046599970345,117.50269777094955 -2022-01-09 06:15:00,0.4891289,,,,,,,,,,-3.236506,-3.508717,,,,,,,,,,,,,101.60566142428223,101.60566142428223,-11.605661424282237,-11.605661424282237,109.40355693335584,-7.081342108460376,114.04967630274689 -2022-01-09 06:30:00,0.2667922,,,,,,,,,,-2.910433,-3.441333,,,,,,,,,,,,,99.02063728444662,99.02063728444662,-9.020637284446623,-9.020637284446623,111.76299455916029,-7.085636592022638,110.60555614671816 -2022-01-09 06:45:00,0.6082185,,,,,,,,,,-2.442728,-3.547633,,,,,,,,,,,,,96.47799800334273,96.47799800334273,-6.477998003342729,-6.477998003342729,114.15254094066455,-7.089930050413386,107.1719213799837 -2022-01-09 07:00:00,0.8956422,,,,,,,,,,-2.557844,-3.571678,,,,,,,,,,,,,93.98281163122026,93.98281163122026,-3.9828116312202555,-3.9828116312202555,116.58038587825672,-7.094222482814075,103.75044711206395 -2022-01-09 07:15:00,3.072767,372.6996,387.8831,379.8029,424.1343,405.5111,443.8072,427.135,428.7486,428.1527,-2.628611,-3.3921,0.03510638,0.0569149,0.02659575,0.044,0.044,0.044,0.04785715,0.04071429,0.03714285,0.1739361,0.189,0.04071429,91.5404318858698,91.5404318858698,-1.5404318858697863,-1.5404318858697863,119.05438519605514,-7.098513888908201,100.34293658112085 -2022-01-09 07:30:00,8.81303,385.1276,415.2222,409.8064,449.0302,447.673,519.1968,524.8677,521.6066,546.1247,-2.292044,-3.19885,0.152586,0.2065084,0.1070835,0.1418261,0.1445435,0.1418261,0.1397927,0.1288863,0.1204762,0.4788142,0.5178043,0.2197465,88.78323124389804,89.15653643675483,1.2167687561019558,0.8434635632451711,121.58208242558749,-7.10280426850295,96.95136092490623 -2022-01-09 07:45:00,21.56192,368.0027,427.5607,416.4156,415.6445,480.9599,571.2205,580.8436,566.4068,631.1058,-1.863439,-2.979739,0.3836834,0.5023713,0.2828026,0.3699314,0.377912,0.3751945,0.3015189,0.3035887,0.29625,0.8650631,0.9477519,0.6577823,86.61948882391013,86.83716010071734,3.380511176089872,3.162839899282654,124.17070210269549,-7.107093620772503,93.57790212802276 -2022-01-09 08:00:00,30.89223,381.3083,447.6251,437.6312,409.106,497.9952,600.0897,611.6707,591.9559,667.7125,-1.424039,-2.725489,0.5662037,0.7532163,0.4163499,0.5201522,0.5254154,0.5254154,0.4376786,0.4439881,0.4376785,1.17422,1.219338,1.004465,84.43890244051487,84.588720779662,5.561097559485137,5.411279220338006,126.8271147089352,-7.111381945411267,90.22499963956263 -2022-01-09 08:15:00,25.76554,382.0425,437.6198,425.6864,417.0959,493.5117,585.1697,601.9056,586.2653,654.2788,-1.259967,-2.494806,0.4723684,0.6206141,0.3464912,0.4053503,0.4025412,0.4025412,0.3818587,0.3785715,0.367235,1.025439,1.039155,0.8563597,82.30432179130855,82.41803822493213,7.695678208691441,7.58196177506786,129.5577697415215,-7.1156692422118795,86.89540529504312 -2022-01-09 08:30:00,25.84596,376.4103,435.9352,423.1942,416.8729,491.7737,582.8009,595.5865,582.3632,651.6782,-1.161594,-2.344511,0.4545799,0.5874832,0.3310139,0.3925493,0.3897403,0.3897403,0.3576523,0.3461111,0.3331324,0.9969805,1.02401,0.7912006,80.24060192080404,80.33234218741187,9.759398079195954,9.667657812588134,132.36859632028637,-7.119955510330328,83.59224725613215 -2022-01-09 08:45:00,35.99024,379.438,451.5883,440.3069,418.4241,505.1231,612.483,616.3632,609.3657,676.0927,-1.176889,-2.213256,0.6753739,0.9061007,0.4942473,0.5625963,0.5643057,0.5643057,0.5064399,0.4813152,0.4952512,1.359082,1.327127,1.158514,78.26214844102569,78.33926617821203,11.737851558974317,11.660733821787977,135.26487146518906,-7.124240749497403,80.31910402845129 -2022-01-09 09:00:00,32.7191,385.7909,450.0129,438.7531,420.1541,505.0823,609.8361,615.9936,607.6083,671.3425,-1.329556,-2.044894,0.6277369,0.8504952,0.4573918,0.5354585,0.537168,0.537168,0.4974878,0.4801408,0.4837058,1.288767,1.265304,1.121377,76.38005012035387,76.44682513407663,13.619949879646132,13.553174865923365,138.25105403325142,-7.1285249594802735,77.08009398228971 -2022-01-09 09:15:00,37.71581,390.8969,451.7602,442.9109,418.8794,507.2692,618.0673,628.3298,585.3648,672.9467,-1.142839,-1.827717,0.7116015,0.9896302,0.5396301,0.6500273,0.6555828,0.6555828,0.5717788,0.600145,0.5843222,1.445263,1.479989,1.311839,74.6042356219517,74.66337224127716,15.395764378048302,15.33662775872284,141.33058759354685,-7.13280813943129,73.87998216934392 -2022-01-09 09:30:00,51.26643,395.5862,459.1383,451.1555,418.51,516.4263,638.6364,648.7699,613.1978,692.788,-0.55685,-1.645961,0.9254313,1.303992,0.7337789,0.8359559,0.8396766,0.8392178,0.7381324,0.7605847,0.7794018,1.81,1.844639,1.723367,72.94421130910003,72.99753043449861,17.05578869089997,17.002469565501386,144.50567886224457,-7.137090289168555,70.72430675828724 -2022-01-09 09:45:00,42.73662,395.6606,450.0847,442.6049,415.6368,509.1902,619.9861,630.4146,626.355,684.9811,-0.2955389,-1.599039,0.7414936,1.038259,0.5802413,0.6680367,0.6662018,0.6657431,0.5877609,0.5808666,0.5898799,1.510488,1.525407,1.363946,71.4093043820557,71.45809668162896,18.590695617944302,18.541903318371045,147.77705869189003,-7.141371408339182,67.61953165385471 -2022-01-09 10:00:00,31.53484,387.2212,440.6633,432.2492,415.4653,498.6098,598.6957,613.0624,607.3232,665.9445,-0.30645,-1.531078,0.5474372,0.7415429,0.3990279,0.4945607,0.4945607,0.4945607,0.4264706,0.4065877,0.3912961,1.161647,1.174716,0.976561,70.00869492197856,70.05391574578611,19.991305078021437,19.94608425421389,151.14374096258268,-7.145651496201026,64.57322804156804 -2022-01-09 10:15:00,31.07614,387.0509,442.0604,432.4574,416.8398,498.6482,599.9015,611.3138,606.876,665.4401,-0.2672722,-1.374339,0.5548195,0.7312346,0.4029396,0.4868728,0.4868728,0.4868728,0.4211111,0.400542,0.3939431,1.153801,1.170007,0.9658945,68.75133824927639,68.79372219566523,21.24866175072361,21.206277804334768,154.6028002135829,-7.149930552426667,61.594287349905294 -2022-01-09 10:30:00,36.09766,392.49,445.5299,438.421,418.6826,505.2016,614.1691,620.0229,616.4532,679.9832,-0.1983556,-1.21085,0.6499509,0.8779284,0.4918436,0.5761886,0.5817441,0.5761886,0.4989413,0.4802935,0.4815409,1.32785,1.354846,1.148051,67.64582179723433,67.68595368613677,22.354178202765674,22.31404631386323,158.1491894303981,-7.1542085768633115,58.69317050253212 -2022-01-09 10:45:00,52.39709,400.7807,455.2073,445.5823,425.2839,515.2391,638.1449,643.5381,634.9397,692.9062,-0.1203889,-1.112961,0.9247001,1.303918,0.7343381,0.831072,0.8366276,0.829985,0.7982652,0.766112,0.7917166,1.807421,1.819474,1.797543,66.7001788181783,66.73853970496897,23.299821181821695,23.261460295031032,161.7756262699845,-7.158485568579636,55.88219138936922 -2022-01-09 11:00:00,64.61899,408.7804,465.7863,453.0371,426.092,521.6184,654.0339,665.5554,649.8945,698.6248,-0.02253889,-1.0043,1.16259,1.663139,0.9523754,1.041982,1.040297,1.038086,0.9985904,0.9741951,1.03045,2.219054,2.200624,2.282389,65.92167582440925,65.95867409538707,24.07832417559075,24.041325904612926,165.47257627115414,-7.162761527404655,53.17582672633712 -2022-01-09 11:15:00,68.83768,411.0136,468.8048,459.0324,438.2873,526.5931,663.4556,667.9102,652.5082,704.9271,0.07267223,-0.8706111,1.293834,1.848625,1.058734,1.115282,1.113597,1.111159,1.072729,1.041413,1.097291,2.41598,2.358417,2.447121,65.31659121247503,65.35258447216427,24.68340878752496,24.647415527835733,169.2283530319603,-7.167036453050969,50.591037387520856 -2022-01-09 11:30:00,69.20121,413.2034,468.2476,459.5442,438.4936,526.7321,662.7,667.0591,651.1041,708.1899,0.13605,-0.7171834,1.314158,1.887293,1.083138,1.130686,1.128781,1.127468,1.081807,1.0528,1.097476,2.458967,2.375998,2.45809,64.89000190261902,64.92531306649853,25.109998097380984,25.074686933501468,173.02935057300874,-7.171310344696394,48.14756562704188 -2022-01-09 11:45:00,56.9426,407.4193,461.7179,451.6464,431.5589,519.5121,647.2131,652.7076,642.0894,701.8819,0.1126556,-0.6008278,1.064158,1.501948,0.8646036,0.9245363,0.9256389,0.9207516,0.8440341,0.8319191,0.8785275,2.046467,1.998396,1.951532,64.64559585339751,64.68052559834015,25.35440414660249,25.319474401659846,176.860409978618,-7.1755832021190145,45.86814757803269 -2022-01-09 12:00:00,56.80862,406.6296,462.2952,450.9485,441.1369,521.6732,654.2921,654.5333,641.8287,700.2145,0.1285778,-0.5316556,1.040676,1.458844,0.8394477,0.9085293,0.9101608,0.9052737,0.8515368,0.8340561,0.880786,2.006563,1.984783,1.957579,64.58552783758509,64.62036485704007,25.41447216241491,25.37963514295993,180.7053017356358,-7.179855025049619,43.778549682988604 -2022-01-09 12:15:00,68.8506,413.735,469.1627,459.0577,445.6252,527.6406,667.6069,670.23,649.0828,704.7489,0.1907889,-0.4643889,1.297752,1.863639,1.077181,1.10885,1.113474,1.113474,1.047901,1.012203,1.065145,2.451175,2.349339,2.375882,64.71033184775399,64.74536196992744,25.28966815224601,25.25463803007255,184.5472937204369,-7.184125812676939,41.90729689620248 -2022-01-09 12:30:00,82.78529,421.41,471.9665,463.4214,463.3719,536.0149,679.3685,669.1821,654.4188,719.4816,0.2629667,-0.3776389,1.586433,2.334018,1.343342,1.326597,1.332597,1.336046,1.309262,1.257796,1.321735,2.924021,2.789414,2.924181,65.01889899087749,65.05441402984549,24.981101009122515,24.945585970154514,188.369762280631,-7.1883955647208495,40.284933565055816 -2022-01-09 12:45:00,99.85497,431.2304,475.1663,466.325,601.3218,635.5458,728.278,676.1016,661.4645,735.5319,0.3741944,-0.2492056,1.908376,2.862092,1.651423,1.344962,1.352775,1.517942,1.641204,1.58656,1.650449,3.4589,3.188039,3.660197,65.50852315440802,65.54483032117662,24.491476845591976,24.455169678823385,192.15679278481718,-7.192664281014004,38.942669518911075 -2022-01-09 13:00:00,89.62246,433.5304,475.0538,465.2546,681.1241,678.5333,747.2664,675.6898,659.7484,724.6931,0.4039389,-0.1354278,1.828743,2.693471,1.55893,1.059325,1.069431,1.269682,1.449392,1.408034,1.469949,3.311073,2.797965,3.256985,66.17500963616611,66.21244242705716,23.82499036383389,23.78755757294285,195.89372209553966,-7.196931960632355,37.910343079163624 -2022-01-09 13:15:00,55.17453,422.6902,462.2144,451.2078,617.8266,610.6577,708.2893,655.491,643.0438,699.3412,0.3310167,-0.07841667,1.151398,1.613204,0.9339519,0.7280361,0.7362703,0.7673767,0.869841,0.849524,0.8965253,2.173238,1.922045,2.000124,67.01283643484095,67.05176816486872,22.987163565159047,22.94823183513129,199.56758416560157,-7.201198603368539,37.21381395298654 -2022-01-09 13:30:00,37.38332,412.3576,451.7408,437.5461,596.591,594.393,684.3671,637.7709,626.6802,685.3083,0.2778445,-0.03804445,0.7042602,0.9267408,0.5561815,0.5316747,0.5376154,0.5301896,0.5601608,0.5506579,0.5719704,1.437777,1.481231,1.323457,68.015352679465,68.05621430913459,21.984647320535007,21.943785690865408,203.16742955935655,-7.205464209026104,36.87215660697122 -2022-01-09 13:45:00,37.25303,412.825,453.8198,431.483,588.6834,580.3283,670.3977,625.9759,616.9686,677.5291,0.3871111,-0.01590556,0.7130498,0.927223,0.5936533,0.545456,0.5464084,0.5464084,0.5509594,0.5391995,0.5554002,1.472868,1.495097,1.276042,69.17499674302549,69.21830151153836,20.825003256974508,20.781698488461643,206.684510718999,-7.209728776710108,36.895252292996624 -2022-01-09 14:00:00,41.64345,416.4785,457.6722,429.2831,585.9179,562.2435,665.4619,633.5438,624.4302,685.4175,0.6049278,0.02986111,0.814378,1.079572,0.7164189,0.6467819,0.6477342,0.6477342,0.6394234,0.6256704,0.6638356,1.652161,1.680953,1.480497,70.48351672275874,70.52989565207679,19.516483277241267,19.470104347923208,210.11233997268536,-7.2139923062313756,37.282426426163056 -2022-01-09 14:15:00,39.3651,416.442,456.8824,424.9792,570.5254,548.3959,648.4534,642.2026,632.6768,691.5975,0.7462167,0.1289778,0.777546,1.029052,0.6868684,0.6226748,0.6239247,0.6205914,0.6079503,0.600224,0.6280469,1.579552,1.593631,1.422908,71.93217537532358,71.98243056084783,18.06782462467642,18.017569439152176,213.4466349354872,-7.218254797284317,38.0225444942913 -2022-01-09 14:30:00,35.24826,415.0912,456.2649,422.9113,561.6179,546.1906,634.5499,636.3176,627.1006,685.7745,0.8213111,0.2454944,0.6719003,0.8736153,0.5808213,0.532808,0.5373188,0.5328985,0.5363095,0.5313988,0.531994,1.402661,1.395598,1.241667,73.51192329284115,73.56711136802718,16.488076707158854,16.432888631972812,216.68517768283044,-7.222516249166802,39.095535919446675 -2022-01-09 14:45:00,32.03051,408.6783,460.0766,481.968,567.659,573.661,627.9521,612.3716,628.1838,675.5526,0.9793278,0.3769445,0.5637813,0.7254503,0.423113,0.4764389,0.4773188,0.4786128,0.4855311,0.479201,0.4618933,1.231116,1.301015,1.103342,75.21352267355917,75.27509190873809,14.786477326440831,14.724908091261906,219.8276164078868,-7.22677666148229,40.474889384744955 -2022-01-09 15:00:00,22.40017,416.5805,451.11,479.9544,548.5342,579.0433,579.9359,584.3207,611.3748,643.2877,1.0494,0.4924555,0.3638699,0.4576428,0.2409316,0.3344264,0.3320454,0.3344264,0.3370618,0.3307953,0.2925693,0.8928917,0.9818938,0.7347201,77.02759281478096,77.09762123226783,12.97240718521904,12.902378767732174,222.8752331585048,-7.23103603411073,42.13046375800393 -2022-01-09 15:15:00,13.03565,448.9315,448.6428,394.0287,532.5477,553.1215,501.1104,554.2401,560.5098,588.5317,0.9437389,0.5760167,0.2067679,0.2574566,0.1653935,0.1900847,0.1900847,0.1900847,0.1833988,0.1803375,0.1412873,0.6145698,0.6285046,0.3375588,78.94452093978582,79.02615886372404,11.055479060214186,10.97384113627597,225.83070164535874,-7.235294366149901,44.03103763709183 -2022-01-09 15:30:00,7.546001,458.8228,491.0407,352.7928,525.9628,531.9434,425.9748,518.0582,518.8126,534.7275,0.8371111,0.6136222,0.114876,0.1322314,0.1041322,0.1147059,0.1147059,0.1147059,0.1104395,0.1104395,0.08076923,0.4409091,0.4432773,0.132967,80.95409567268447,81.05246108627074,9.045904327315522,8.947538913729264,228.69785387049964,-7.2395516574179055,46.14626264181692 -2022-01-09 15:45:00,5.510188,480.2985,529.8298,375.4528,559.1122,557.7075,472.4033,549.1004,546.3913,550.2798,0.7872722,0.6512445,0.08489208,0.08489208,0.07122301,0.06436169,0.06436169,0.06436169,0.06745283,0.06745283,0.05261248,0.3482014,0.2521276,0.06745283,83.04444003094326,83.16863962182595,6.9555599690567345,6.83136037817405,231.48146560464917,-7.243807907638256,48.44793385258002 -2022-01-09 16:00:00,3.456938,505.2512,519.7018,455.3994,533.1492,530.6898,511.6574,517.345,515.0231,517.1431,0.7574278,0.6798667,0.03489209,0.03489209,0.02122302,0.0143617,0.0143617,0.0143617,0.01745283,0.01745283,0.01415094,0.1482014,0.05212765,0.01745283,85.19879549390566,85.36719696016601,4.801204506094335,4.632803039833985,234.18706989621512,-7.248063115985133,50.910660497913874 -2022-01-09 16:15:00,1.259233,360.6538,362.2063,359.1268,425.0077,424.2909,426.5697,350.6342,351.5703,351.8044,0.6990889,0.6826167,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,87.3842207882354,87.64104312863849,2.6157792117646053,2.3589568713615146,236.8208037901092,-7.252317282229342,53.51209159787687 -2022-01-09 16:30:00,0.1730865,219.688,219.288,219.488,378.0,377.9,377.3,256.3,256.8,256.9,0.6839667,0.7227722,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,89.50910225887775,89.98349588385763,0.49089774112225554,0.01650411614237397,239.3892874517885,-7.256570406145329,56.232850986445925 -2022-01-09 16:45:00,0.0,,,,,,,,,,0.6773111,0.74395,,,,,,,,,,,,,92.38826839995038,92.38826839995038,-2.38826839995038,-2.38826839995038,241.8995365575036,-7.260822486896359,59.056308888946276 -2022-01-09 17:00:00,0.0,,,,,,,,,,0.6896945,0.7746056,,,,,,,,,,,,,94.84944824989901,94.84944824989901,-4.849448249899012,-4.849448249899012,244.35890763429342,-7.265073524242325,61.96828011662402 -2022-01-09 17:15:00,0.0,,,,,,,,,,0.7283,0.8204167,,,,,,,,,,,,,97.3614679931886,97.3614679931886,-7.361467993188591,-7.361467993188591,246.77507271439393,-7.269323517946759,64.95670267409868 -2022-01-09 17:30:00,0.0,,,,,,,,,,0.7478889,0.8272333,,,,,,,,,,,,,99.91906988833857,99.91906988833857,-9.919069888338575,-9.919069888338575,249.15602302809486,-7.273572467187478,68.01132953041989 -2022-01-09 17:45:00,0.0,,,,,,,,,,0.7464667,0.7939722,,,,,,,,,,,,,102.51726686311689,102.51726686311689,-12.517266863116891,-12.517266863116891,251.5101018747642,-7.277820371775306,71.12345046132185 -2022-01-09 18:00:00,0.0,,,,,,,,,,0.7157778,0.77275,,,,,,,,,,,,,105.15129826104243,105.15129826104243,-15.151298261042424,-15.151298261042424,253.84606485716847,-7.28206723135736,74.28564732849262 -2022-01-09 18:15:00,0.0,,,,,,,,,,0.7197889,0.7926,,,,,,,,,,,,,107.81658135573375,107.81658135573375,-17.81658135573375,-17.81658135573375,256.17316975340987,-7.286313045231509,77.4915841618423 -2022-01-09 18:30:00,0.0,,,,,,,,,,0.7552,0.8033444,,,,,,,,,,,,,110.50865923737308,110.50865923737308,-20.508659237373077,-20.508659237373077,258.5012996417013,-7.290557813139458,80.73583077861373 -2022-01-09 18:45:00,0.0,,,,,,,,,,0.7590055,0.8400834,,,,,,,,,,,,,113.22314189473379,113.22314189473379,-23.223141894733786,-23.223141894733786,260.84112183397076,-7.2948015347683395,84.01371359448936 -2022-01-09 19:00:00,0.0,,,,,,,,,,0.7670722,0.8812444,,,,,,,,,,,,,115.9556398390585,115.9556398390585,-25.955639839058513,-25.955639839058513,263.20429008168634,-7.299044209383283,87.32119077319095 -2022-01-09 19:15:00,0.0,,,,,,,,,,0.7748778,0.8736111,,,,,,,,,,,,,118.70168893665985,118.70168893665985,-28.701688936659853,-28.701688936659853,265.6037000827399,-7.3032858367369045,90.65474915722443 -2022-01-09 19:30:00,0.0,,,,,,,,,,0.7825111,0.8762611,,,,,,,,,,,,,121.45666083523169,121.45666083523169,-31.456660835231688,-31.456660835231688,268.0538086362151,-7.307526416516339,94.0113167970799 -2022-01-09 19:45:00,0.0,,,,,,,,,,0.8273,0.8817611,,,,,,,,,,,,,124.21565536663572,124.21565536663572,-34.215655366635715,-34.215655366635715,270.5710333874995,-7.311765948001266,97.38818927417638 -2022-01-09 20:00:00,0.0,,,,,,,,,,0.7757056,0.7750056,,,,,,,,,,,,,126.97336963046159,126.97336963046159,-36.97336963046159,-36.97336963046159,273.1742547304525,-7.316004430918838,100.78296849927922 -2022-01-09 20:15:00,0.0,,,,,,,,,,0.6372445,0.6124055,,,,,,,,,,,,,129.7239328162862,129.7239328162862,-39.723932816286194,-39.723932816286194,275.885443513871,-7.320241865032585,104.19350895883501 -2022-01-09 20:30:00,0.0,,,,,,,,,,0.6011944,0.5915889,,,,,,,,,,,,,132.4606960122656,132.4606960122656,-42.460696012265615,-42.460696012265615,278.7304459859041,-7.324478249567619,107.61787068415049 -2022-01-09 20:45:00,0.0,,,,,,,,,,0.7408056,0.8735278,,,,,,,,,,,,,135.175962048362,135.175962048362,-45.17596204836202,-45.17596204836202,281.73996080865174,-7.328713584171055,111.05427845727405 -2022-01-09 21:00:00,0.0,,,,,,,,,,0.8743111,1.126167,,,,,,,,,,,,,137.8606316298707,137.8606316298707,-47.8606316298707,-47.8606316298707,284.9507370236056,-7.332947868773772,114.50108269495777 -2022-01-09 21:15:00,0.0,,,,,,,,,,0.9024944,1.153844,,,,,,,,,,,,,140.50373863569067,140.50373863569067,-50.50373863569067,-50.50373863569067,288.40700821771475,-7.337181102415343,117.95672148023542 -2022-01-09 21:30:00,0.0,,,,,,,,,,0.9392444,1.252283,,,,,,,,,,,,,143.09184008711236,143.09184008711236,-53.091840087112374,-53.091840087112374,292.1621308154862,-7.341413284964801,121.41968297801954 -2022-01-09 21:45:00,0.0,,,,,,,,,,1.027428,1.58825,,,,,,,,,,,,,145.6082176399662,145.6082176399662,-55.608217639966185,-55.608217639966185,296.2802784292421,-7.345644416120194,124.88846274469817 -2022-01-09 22:00:00,0.1222684,,,,,,,,,,1.113867,2.017889,,,,,,,,,,,,,148.03185365906361,148.03185365906361,-58.031853659063614,-58.031853659063614,300.8378119405153,-7.349874495139375,128.36151359473706 -2022-01-09 22:15:00,0.1953116,,,,,,,,,,1.076989,2.221778,,,,,,,,,,,,,150.33617084159977,150.33617084159977,-60.33617084159976,-60.33617084159976,305.9234903635285,-7.3541035217022,131.83718398917551 -2022-01-09 22:30:00,0.3985631,,,,,,,,,,1.089172,2.086005,,,,,,,,,,,,,152.48760080898097,152.48760080898097,-62.48760080898096,-62.48760080898096,311.63588850969734,-7.358331495644961,135.31363369572838 -2022-01-09 22:45:00,1.03692,,,,,,,,,,1.201961,1.98915,,,,,,,,,,,,,154.4442350669991,154.4442350669991,-64.44423506699913,-64.44423506699913,318.0752273912002,-7.362558416130923,138.7887143692874 -2022-01-09 23:00:00,1.41484,,,,,,,,,,1.361289,2.035178,,,,,,,,,,,,,156.15516422285452,156.15516422285452,-66.15516422285454,-66.15516422285454,325.32569886762434,-7.366784282952722,142.25979307311607 -2022-01-09 23:15:00,1.082945,,,,,,,,,,1.361522,1.920817,,,,,,,,,,,,,157.56162814971185,157.56162814971185,-67.56162814971186,-67.56162814971186,333.42485681178584,-7.371009095844784,145.72347442976377 -2022-01-09 23:30:00,0.465252,,,,,,,,,,1.065783,1.708306,,,,,,,,,,,,,158.60151818727823,158.60151818727823,-68.60151818727823,-68.60151818727823,342.32207684576645,-7.375232854006754,149.17514564155428 -2022-01-09 23:45:00,0.08574665,,,,,,,,,,0.6295056,1.495756,,,,,,,,,,,,,159.21830413767222,159.21830413767222,-69.21830413767222,-69.21830413767222,351.8410932241101,-7.3794555572239915,152.6081948332954 -2022-01-10 00:00:00,0.0,,,,,,,,,,0.05334444,1.249272,,,,,,,,,,,,,159.37317006102947,159.37317006102947,-69.37317006102947,-69.37317006102947,1.675766729411123,-7.3836772052054584,156.01258741276195 -2022-01-10 00:15:00,0.0,,,,,,,,,,-0.4892444,0.97405,,,,,,,,,,,,,159.05565063284917,159.05565063284917,-69.05565063284918,-69.05565063284918,11.442560912370254,-7.387897797252663,159.37211176388575 -2022-01-10 00:30:00,0.0,,,,,,,,,,-0.7173667,0.7203611,,,,,,,,,,,,,158.28682371128804,158.28682371128804,-68.28682371128802,-68.28682371128802,20.775246999665,-7.392117333078204,162.6586603983842 -2022-01-10 00:45:00,0.0,,,,,,,,,,-0.7944222,0.4369389,,,,,,,,,,,,,157.11301593697675,157.11301593697675,-67.11301593697677,-67.11301593697677,29.409673797395953,-7.396335812438338,165.81938902833568 -2022-01-10 01:00:00,0.0,,,,,,,,,,-1.066556,0.1304667,,,,,,,,,,,,,155.59394254603865,155.59394254603865,-65.59394254603863,-65.59394254603863,37.215828930576095,-7.400553234514518,168.7457734683264 -2022-01-10 01:15:00,0.0,,,,,,,,,,-1.391644,-0.1779611,,,,,,,,,,,,,153.79132188025807,153.79132188025807,-63.79132188025807,-63.79132188025807,44.178491307313664,-7.404769599099382,171.19892237187676 -2022-01-10 01:30:00,0.0,,,,,,,,,,-1.754378,-0.4308056,,,,,,,,,,,,,151.76149869713225,151.76149869713225,-61.76149869713224,-61.76149869713224,50.35561924940424,-7.408984906021942,172.6845485404412 -2022-01-10 01:45:00,0.0,,,,,,,,,,-2.028239,-0.5691778,,,,,,,,,,,,,149.55227481811278,149.55227481811278,-59.55227481811279,-59.55227481811279,55.83970284939119,-7.413199154365429,172.59464478149872 -2022-01-10 02:00:00,0.0,,,,,,,,,,-2.195017,-0.7263556,,,,,,,,,,,,,147.2025445761983,147.2025445761983,-57.20254457619831,-57.20254457619831,60.73182144630209,-7.417412343969772,170.97616664544617 -2022-01-10 02:15:00,0.0,,,,,,,,,,-2.3734,-1.00645,,,,,,,,,,,,,144.7432917822283,144.7432917822283,-54.7432917822283,-54.7432917822283,65.12772605062287,-7.421624474605778,168.45547460440528 -2022-01-10 02:30:00,0.0,,,,,,,,,,-2.690961,-1.396917,,,,,,,,,,,,,142.19901329542503,142.19901329542503,-52.199013295425026,-52.199013295425026,69.11199732752635,-7.42583554544035,165.49630430048356 -2022-01-10 02:45:00,0.0,,,,,,,,,,-3.095078,-1.788644,,,,,,,,,,,,,139.58910663335263,139.58910663335263,-49.58910663335263,-49.58910663335263,72.75667966937993,-7.430045556284313,162.3183674661493 -2022-01-10 03:00:00,0.0,,,,,,,,,,-3.387289,-2.036833,,,,,,,,,,,,,136.92905113958477,136.92905113958477,-46.92905113958478,-46.92905113958478,76.12202713610333,-7.434254506857542,159.02190458803847 -2022-01-10 03:15:00,0.0,,,,,,,,,,-3.382306,-2.182945,,,,,,,,,,,,,134.23135053770855,134.23135053770855,-44.23135053770854,-44.23135053770854,79.25805131325444,-7.438462396396062,155.65617667444928 -2022-01-10 03:30:00,0.0,,,,,,,,,,-3.229517,-2.317889,,,,,,,,,,,,,131.5062608030924,131.5062608030924,-41.5062608030924,-41.5062608030924,82.20622485424678,-7.4426692247034225,152.24762018397664 -2022-01-10 03:45:00,0.0,,,,,,,,,,-3.423872,-2.480894,,,,,,,,,,,,,128.7623461946226,128.7623461946226,-38.76234619462261,-38.76234619462261,85.00105734818942,-7.446874991474033,148.81160204196257 -2022-01-10 04:00:00,0.0,,,,,,,,,,-3.889989,-2.664594,,,,,,,,,,,,,126.00690199264426,126.00690199264426,-36.00690199264426,-36.00690199264426,87.6714484951126,-7.45107969594028,145.3576995081622 -2022-01-10 04:15:00,0.0,,,,,,,,,,-4.36165,-2.860628,,,,,,,,,,,,,123.24627587073287,123.24627587073287,-33.24627587073287,-33.24627587073287,90.2418076592935,-7.455283337916626,141.8922610292823 -2022-01-10 04:30:00,0.0,,,,,,,,,,-4.661489,-3.063028,,,,,,,,,,,,,120.48611592139585,120.48611592139585,-30.486115921395847,-30.486115921395847,92.73296008730813,-7.459485917130223,138.41973975713142 -2022-01-10 04:45:00,-0.1921244,,,,,,,,,,-5.099833,-3.314428,,,,,,,,,,,,,117.73156372154008,117.73156372154008,-27.73156372154008,-27.73156372154008,95.16287400420453,-7.46368743279163,134.94343147359777 -2022-01-10 05:00:00,-0.331865,,,,,,,,,,-5.619717,-3.599161,,,,,,,,,,,,,114.98740579675044,114.98740579675044,-24.987405796750444,-24.987405796750444,97.54724245209388,-7.467887884708034,131.46590426504696 -2022-01-10 05:15:00,-0.1397406,,,,,,,,,,-5.727172,-3.761294,,,,,,,,,,,,,112.25819637622644,112.25819637622644,-22.25819637622643,-22.25819637622643,99.89994680933336,-7.4720872725883964,127.98926306742187 -2022-01-10 05:30:00,0.0,,,,,,,,,,-5.737972,-3.888778,,,,,,,,,,,,,109.54835817234678,109.54835817234678,-19.548358172346788,-19.548358172346788,102.23342685859416,-7.47628559569057,124.51531984745802 -2022-01-10 05:45:00,0.0,,,,,,,,,,-5.996439,-4.031561,,,,,,,,,,,,,106.86226585682928,106.86226585682928,-16.862265856829275,-16.862265856829275,104.55897722737109,-7.480482853763533,121.04570701864037 -2022-01-10 06:00:00,0.0,,,,,,,,,,-6.216061,-4.148594,,,,,,,,,,,,,104.2043186581701,104.2043186581701,-14.2043186581701,-14.2043186581701,106.88698295601898,-7.484679046596284,117.581958963607 -2022-01-10 06:15:00,0.0,,,,,,,,,,-6.455728,-4.293417,,,,,,,,,,,,,101.57900402348272,101.57900402348272,-11.57900402348272,-11.57900402348272,109.22710621843623,-7.488874173377553,114.12557329863886 -2022-01-10 06:30:00,0.0,,,,,,,,,,-6.314078,-4.456339,,,,,,,,,,,,,98.99095347439584,98.99095347439584,-8.990953474395845,-8.990953474395845,111.58843326733228,-7.493068233899976,110.67805854039553 -2022-01-10 06:45:00,0.01905953,,,,,,,,,,-5.833139,-4.530222,,,,,,,,,,,,,96.44499426235582,96.44499426235582,-6.444994262355815,-6.444994262355815,113.97958549122274,-7.497261227959825,107.24097617884341 -2022-01-10 07:00:00,0.692495,373.6435,383.188,379.6068,348.1088,332.4959,338.145,373.6683,373.5891,387.6758,-5.634478,-4.550517,0.01686747,0.02409638,0.009638555,0.01666667,0.01666667,0.01666667,0.01435644,0.01435644,0.014,0.0987952,0.0688679,0.01188119,93.94619657885103,93.94619657885103,-3.9461965788510236,-3.9461965788510236,116.4087992881656,-7.501453154669434,103.81597933451836 -2022-01-10 07:15:00,4.051762,479.4924,526.9511,504.0078,482.6542,502.2267,452.0696,448.0689,502.3297,530.3704,-5.548989,-4.618139,0.09669202,0.1061139,0.07542805,0.09318842,0.09318842,0.09318842,0.08502308,0.08502308,0.08466665,0.4018654,0.3562592,0.1197759,91.49991565668572,91.49991565668572,-1.4999156566857166,-1.4999156566857166,118.88397790758455,-7.505644013901474,100.40484926665737 -2022-01-10 07:30:00,12.19816,500.7485,595.6187,569.454,531.05,637.6403,487.8885,551.3661,603.3126,629.0867,-5.502817,-4.685505,0.277251,0.2772382,0.2190983,0.251098,0.2561828,0.251098,0.2006667,0.2056666,0.2071667,0.8527027,0.7950183,0.3983948,88.74308960747359,89.11183062381662,1.2569103925264018,0.888169376183378,121.41271417046266,-7.5098338054194755,97.00953462451973 -2022-01-10 07:45:00,26.1817,524.5972,650.2922,634.2466,572.7274,705.1927,549.1539,673.0425,666.1633,684.4941,-5.593117,-4.756772,0.5846059,0.5858189,0.457155,0.4627483,0.4646072,0.4627483,0.3896939,0.415102,0.4217041,1.496214,1.304939,0.9619285,86.57236111592434,86.78797831463588,3.427638884075656,3.2120216853641144,124.00228473782113,-7.514022528404894,93.63219391507472 -2022-01-10 08:00:00,53.04212,555.7368,674.6829,664.1656,670.0231,751.8633,676.0549,718.1788,712.1205,727.8563,-5.328667,-4.744622,1.1583,1.191891,0.9378976,0.8289486,0.9796063,0.8289486,0.7834743,0.8240045,0.8321551,2.648305,2.277894,1.936672,84.38610992036514,84.53477988093758,5.613890079634854,5.465220119062421,126.65961592583767,-7.518210182632174,90.2752416593699 -2022-01-10 08:15:00,63.54718,564.2527,672.733,671.2401,715.6811,766.702,729.1901,724.7379,721.0327,735.5782,-4.698855,-4.707622,1.486541,1.516714,1.198537,1.044943,1.28341,1.044943,0.9832805,1.023903,1.030451,3.262005,2.823499,2.378244,82.24609793962121,82.35906029945255,7.753902060378796,7.640939700547445,129.39121749841848,-7.52239676789759,86.94140286078304 -2022-01-10 08:30:00,68.67855,558.664,673.4453,674.3961,719.5189,766.4916,730.9635,731.9397,723.2744,736.5956,-4.078267,-4.803972,1.823754,1.789825,1.419843,1.182575,1.483636,1.182575,1.131142,1.158358,1.191709,3.803138,3.170502,2.721209,80.17686814109724,80.26805733492601,9.823131858902753,9.731942665073982,132.20308377143914,-7.526582283411699,83.6337764894342 -2022-01-10 08:45:00,128.1625,564.4017,690.8863,689.9556,741.1921,769.9095,745.8032,715.8483,719.1709,733.9261,-3.396989,-4.881983,3.346569,3.159209,2.51418,2.234178,3.07229,2.24187,2.280651,2.208538,2.269921,6.298739,5.848259,4.833434,78.1927321465175,78.26941617195283,11.807267853482498,11.730583828047175,135.1005620643969,-7.530766728898016,80.35590903955101 -2022-01-10 09:00:00,258.7075,575.6368,707.278,712.8184,749.4069,774.1849,746.9109,628.6512,667.0118,743.2983,-1.426189,-4.716417,6.72647,6.407966,5.054411,4.365659,6.02136,4.375,5.127886,4.716404,4.60916,12.33971,10.98166,9.65686,76.30475321312058,76.37116799033697,13.695246786879425,13.628832009663025,138.08818636753114,-7.534950104243762,77.11188359503623 -2022-01-10 09:15:00,302.9229,573.8368,703.8668,715.647,744.2311,775.1716,743.2355,583.4689,681.0622,759.5417,1.02055,-4.513289,8.241155,7.857469,6.180989,4.999545,6.739358,5.010389,6.364216,5.804021,5.668212,15.01594,12.65582,11.88968,74.52286273253658,74.58168769453373,15.477137267463418,15.418312305466278,141.16947936845554,-7.539132408561272,73.9064262140692 -2022-01-10 09:30:00,342.8206,567.6524,706.5677,711.3969,744.1797,776.611,742.3052,645.8844,745.6252,758.6644,2.246606,-4.417528,8.894754,8.353184,6.613462,5.857655,7.784402,5.896851,6.910802,6.542024,6.558392,16.15252,15.02483,14.1663,72.85658549116687,72.90962624838279,17.14341450883314,17.090373751617207,144.34672932634186,-7.5433136416795605,70.74503199043198 -2022-01-10 09:45:00,401.7205,566.6218,709.0213,706.376,737.2875,775.4034,734.4065,722.1605,750.6454,758.5707,4.194889,-4.218417,10.5198,9.823538,7.83357,7.437,9.634,7.4685,7.864853,7.698617,7.778592,19.08778,18.1395,17.15763,71.31527844565139,71.36381564737295,18.684721554348616,18.63618435262705,147.62074867228938,-7.547493803318503,67.63411742834072 -2022-01-10 10:00:00,304.8503,565.1589,716.7634,702.6022,731.5557,771.8873,730.3298,749.9578,746.2115,751.8746,3.4033,-4.382744,8.427048,7.813375,6.289912,5.698629,7.226018,5.705222,5.932043,5.891227,6.001167,15.29169,13.56552,13.26434,69.90816105026457,69.95314310721969,20.09183894973543,20.046856892780305,150.990629640752,-7.551672892775969,64.58120196689741 -2022-01-10 10:15:00,205.1662,570.1147,730.3998,709.402,741.4108,771.6489,747.5159,752.5392,749.5942,753.5983,-0.04825,-4.857044,5.546561,5.165438,4.174739,3.627407,4.763796,3.638055,3.904244,3.883314,3.950545,10.36973,9.197227,8.911539,68.64423667152391,68.68639312911891,21.355763328476087,21.31360687088109,154.453517795832,-7.555850909757282,61.59512132887156 -2022-01-10 10:30:00,267.5282,577.2275,735.8053,717.4165,744.2622,774.1946,744.94,759.0453,755.4219,759.7038,-0.7569278,-5.012455,7.09512,6.616628,5.354959,5.153546,6.877008,5.189871,4.779091,4.841477,4.844381,13.21098,13.10531,11.26909,67.53214852167773,67.57206034142123,22.46785147832228,22.427939658578765,158.0044250699607,-7.560027854098735,58.686277801222104 -2022-01-10 10:45:00,523.0055,586.0132,724.6243,712.8717,747.1309,782.2361,738.139,760.9473,756.7548,763.5342,3.920489,-4.552516,15.15118,14.00415,11.39604,9.851689,12.11872,9.882458,9.856675,9.880785,9.843295,27.09476,23.82287,22.43696,66.57999207538387,66.61813722357401,23.420007924616137,23.38186277642599,161.63611093224313,-7.5642037249563145,55.86692575337932 -2022-01-10 11:00:00,483.6143,609.4117,719.5889,701.0381,739.2189,782.044,742.4254,750.1189,745.6326,756.6168,7.599189,-4.255789,14.36861,13.37476,10.87075,9.502896,10.88961,9.506385,9.741972,9.687141,9.692221,25.8814,22.49598,21.87886,65.79510070308673,65.83188496924005,24.20489929691327,24.16811503075995,165.3390607564312,-7.568378522166313,53.15148505956482 -2022-01-10 11:15:00,218.3991,644.7211,735.9229,704.5905,737.4893,774.2215,750.3764,749.1885,745.6767,752.5051,3.228567,-4.7219,5.779415,5.694468,4.564531,4.584527,5.247769,4.590057,4.339406,4.324576,4.387712,11.52701,11.03415,9.972032,65.18382194529623,65.21960063658125,24.81617805470377,24.78039936341876,169.1015820049364,-7.572552245455881,50.556868166163554 -2022-01-10 11:30:00,266.6568,666.4647,747.065,716.303,744.8785,773.0018,758.1378,759.5991,755.9133,760.7598,0.2843722,-4.821116,6.212399,6.320264,5.096067,4.013705,5.199576,4.023438,4.461145,4.47483,4.46578,12.6918,9.966169,10.27739,64.75130134381315,64.78639523229955,25.248698656186843,25.213604767700446,172.91003412128134,-7.576724894079234,48.102785960581976 -2022-01-10 11:45:00,360.4281,668.822,749.3061,715.7337,743.9998,773.8685,746.8898,757.9169,753.3372,760.4857,1.362289,-4.67395,9.521443,9.423651,7.772487,6.264371,7.99118,6.307707,5.93766,5.919109,5.932284,18.70288,15.29695,13.52602,64.5012918796945,64.53599953176551,25.49870812030549,25.46400046823449,176.74919480123515,-7.580896467781713,45.81197247913365 -2022-01-10 12:00:00,446.2309,662.9376,738.8746,704.1847,738.6848,778.4212,737.2462,750.5219,744.7895,753.1061,5.042383,-4.289011,12.24916,11.98311,9.947767,9.238563,10.81133,9.265587,8.15245,8.21394,8.20125,23.68973,21.73634,18.41682,64.43600668158584,64.47061460057947,25.56399331841416,25.52938539942054,180.6027443926489,-7.585066966392333,43.71023728862112 -2022-01-10 12:15:00,516.1099,669.3672,734.2482,703.2742,738.7833,780.8237,740.0018,752.1756,745.9066,754.1955,6.931684,-3.955055,13.78988,13.68329,11.29914,9.567141,10.90115,9.560463,9.907301,9.943107,9.92619,27.06325,22.29939,22.15641,64.55602868059242,64.59082030790553,25.443971319407577,25.409179692094465,184.4538383625883,-7.5892363891071,41.82621237796997 -2022-01-10 12:30:00,666.6237,692.5526,744.389,710.7781,738.4169,773.7551,733.1065,747.7472,745.4357,751.9326,8.079233,-3.915461,16.60151,16.89801,14.47535,11.92451,12.7396,11.92645,12.83353,12.76429,12.68095,34.13988,26.98036,28.08076,64.86028636371105,64.89555079537705,25.13971363628894,25.104449204622956,188.28572487938953,-7.593404735707736,40.19063135841166 -2022-01-10 12:45:00,836.6114,721.3994,745.2263,719.4714,730.1321,767.3403,710.3065,736.2268,732.058,745.0303,11.36502,-3.718539,17.86069,18.96199,16.3888,15.5244,15.63221,15.52664,16.23905,16.05054,15.94068,38.32774,33.9753,35.0388,65.34609813644533,65.3821393667213,24.65390186355466,24.617860633278696,192.082353136331,-7.597572005935945,38.834987562320585 -2022-01-10 13:00:00,849.2806,733.035,738.7607,724.2203,725.6837,760.9514,699.2418,729.4833,722.3348,739.965,12.64396,-3.686628,16.80589,18.70629,15.71731,16.0567,16.05417,16.05742,16.62947,16.15693,16.39306,37.07943,34.65187,35.41862,66.0092805996835,66.04642818765936,23.990719400316497,23.953571812340645,195.82892395245776,-7.601738199071406,37.789494353020835 -2022-01-10 13:15:00,849.4475,725.7111,731.1484,716.9481,716.3771,753.5654,700.7362,721.3058,714.2488,732.3948,15.15191,-3.299989,17.03299,19.22781,15.79632,16.60225,16.5986,16.59286,16.66788,16.16355,16.56048,37.45869,35.59005,35.22235,66.8443104280694,66.88293272262052,23.155689571930594,23.117067277379483,199.5123429094028,-7.605903314855823,37.08045253897895 -2022-01-10 13:30:00,689.2693,718.4086,725.7772,702.3301,714.022,759.2828,711.5308,719.4944,714.8613,730.5315,13.95149,-3.339422,14.55148,16.70634,13.53148,14.35143,14.37014,14.35429,13.27829,13.07974,13.36078,32.56181,30.67223,28.74486,67.84452421784125,67.88504573737204,22.155475782158746,22.11495426262796,203.12154605819902,-7.610067353074555,36.72739307418852 -2022-01-10 13:45:00,401.7318,702.1556,731.951,700.0741,733.3113,770.0417,737.8162,724.3491,724.4838,733.9866,7.797722,-3.889472,9.866335,11.21815,9.020405,8.778951,9.204403,8.796432,7.653159,7.708924,7.86766,22.17096,19.24159,17.18139,69.00233866961796,69.04526406200364,20.99766133038205,20.954735937996364,206.64768953954578,-7.6142303129709035,36.74060166468521 -2022-01-10 14:00:00,248.8409,698.4076,743.2861,711.6652,749.5884,773.215,760.0712,740.2089,740.6581,747.5806,3.417867,-4.0823,6.502151,7.27232,5.719889,5.058499,5.890181,5.12056,4.640067,4.78688,4.793142,14.49127,11.95124,10.58927,70.30947360751601,70.35542210059765,19.690526392483992,19.644577899402343,210.08420996631492,-7.618392194301123,37.119691308816684 -2022-01-10 14:15:00,209.2755,707.4924,747.0358,718.8684,748.7371,772.0795,764.0839,754.8712,755.1046,758.4553,1.027011,-4.301672,4.810445,5.687728,4.39938,3.804986,4.504282,3.861315,3.953496,4.122661,4.035478,11.34636,9.247374,9.237467,71.7571598163029,71.8069167909132,18.24284018369709,18.19308320908679,213.4267703471065,-7.6225529968578485,37.85365793718937 -2022-01-10 14:30:00,138.7578,698.2463,744.8886,732.4003,745.1989,768.6109,762.6174,754.3724,754.1307,756.5983,-1.688361,-4.709672,3.04621,3.675613,2.749433,2.341727,2.801557,2.362839,2.716746,2.795051,2.790869,7.419622,5.805374,6.357767,73.3363155513268,73.39091307379864,16.663684448673198,16.609086926201357,216.6731182709422,-7.626712719888019,38.92240106935712 -2022-01-10 14:45:00,112.0935,691.5095,743.9083,732.7532,745.774,768.8999,764.309,753.9995,755.5836,758.1557,-3.195194,-4.9793,2.688415,3.05655,2.238364,2.224756,2.775071,2.245744,2.099841,2.15922,2.220793,6.338306,5.59828,5.046032,75.0376745195948,75.09852316038399,14.962325480405202,14.90147683961601,219.8228855010027,-7.630871363126062,40.29924948662988 -2022-01-10 15:00:00,110.0491,685.1428,735.4326,711.9594,739.3011,769.0768,758.5551,741.1541,744.9959,750.3796,-2.988489,-5.111539,2.675436,3.003352,2.220707,2.273263,2.881833,2.278559,1.955091,2.03583,2.090022,6.220262,5.783036,4.720706,76.85183775704007,76.92095456952026,13.148162242959927,13.07904543047974,222.87735300738137,-7.635028926400992,41.953820543139415 -2022-01-10 15:15:00,84.4995,674.4224,718.4418,698.6912,678.9402,731.5445,732.8912,725.6633,727.6315,735.3464,-3.576683,-5.452211,1.760489,2.096101,1.572635,1.658753,1.903606,1.677948,1.343221,1.38717,1.43469,4.409246,4.109866,3.23938,78.76919653033949,78.84962655731103,11.230803469660517,11.150373442688977,225.83920581822184,-7.639185408879712,43.854618663271985 -2022-01-10 15:30:00,85.69917,711.5869,733.3431,724.6961,686.6863,639.5959,740.7234,742.1519,741.5449,746.6177,-4.267167,-5.605467,1.927738,2.810674,2.251888,2.114227,2.131449,2.198454,1.948095,2.010834,2.116309,5.6119,4.68913,4.650952,80.77959378290673,80.87625722138314,9.220406217093267,9.123742778616856,228.7122967355963,-7.643340810394875,45.9710266074436 -2022-01-10 15:45:00,71.49798,699.9721,719.3654,703.4579,701.0142,657.98,730.2067,727.6805,725.3405,737.1008,-4.142139,-5.439145,1.663399,2.496457,2.00277,1.840412,1.866908,1.919131,1.714832,1.785512,1.853845,5.001792,4.179597,4.104419,82.8713345992585,82.99292269704881,7.128665400741501,7.007077302951187,231.5014291366961,-7.647495130699099,48.27459920554515 -2022-01-10 16:00:00,28.72262,629.6677,665.4918,630.7926,604.757,706.451,637.9127,665.6058,665.8738,678.657,-4.668067,-5.321567,0.5404486,0.7309195,0.5440074,0.521444,0.5307181,0.5307181,0.4813682,0.497882,0.5002258,1.728717,1.482454,1.157083,85.02822754939574,85.19209274685329,4.971772450604263,4.807907253146711,234.21216815695882,-7.651648369072063,50.73974444385225 -2022-01-10 16:15:00,8.039383,559.3397,600.9518,554.54,548.33,638.2186,547.7213,610.0087,605.6829,617.5589,-6.170833,-5.369822,0.2028889,0.2523111,0.1717333,0.2073512,0.2073512,0.2073512,0.1756082,0.1756082,0.1830153,0.7754,0.6991072,0.3726852,87.21931115034077,87.46664759078669,2.780688849659224,2.5333524092133035,236.85068547602208,-7.655800525262748,53.34395059103848 -2022-01-10 16:30:00,0.6811908,535.4473,557.5711,531.3703,545.4883,572.1213,529.8104,511.0963,505.4154,513.0841,-7.765211,-5.613572,0.04888888,0.0611111,0.03333334,0.056875,0.056875,0.056875,0.04240506,0.04240506,0.04746836,0.235,0.21625,0.06835445,89.35947568375482,89.80987800942727,0.6405243162451718,0.19012199057273274,239.4236368891356,-7.6599515990237705,56.06771768464733 -2022-01-10 16:45:00,0.03334783,561.5936,561.4745,561.715,548.3443,548.4339,547.5182,438.0925,438.5916,436.7113,-8.945694,-5.943511,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.215472839311,92.215472839311,-2.2154728393109995,-2.2154728393109995,241.93807348789278,-7.664101589620259,58.89432343001452 -2022-01-10 17:00:00,-0.08735405,,,,,,,,,,-9.4763,-6.182117,,,,,,,,,,,,,94.67749769150889,94.67749769150889,-4.677497691508896,-4.677497691508896,244.40138607552143,-7.6682504968266585,61.80951533176371 -2022-01-10 17:15:00,-0.1048252,,,,,,,,,,-9.784122,-6.464261,,,,,,,,,,,,,97.19036524007345,97.19036524007345,-7.190365240073445,-7.190365240073445,246.82127911844623,-7.672398320413777,64.80118376057713 -2022-01-10 17:30:00,-1.440561,,,,,,,,,,-10.57104,-7.003133,,,,,,,,,,,,,99.74879960904101,99.74879960904101,-9.748799609041015,-9.748799609041015,249.2057738808591,-7.676545059610362,67.85904905089313 -2022-01-10 17:45:00,-2.712758,,,,,,,,,,-11.73181,-7.986522,,,,,,,,,,,,,102.34779701609074,102.34779701609074,-12.347797016090745,-12.347797016090745,251.56324082488544,-7.680690714281809,70.97437960641993 -2022-01-10 18:00:00,-0.195458,,,,,,,,,,-11.89225,-8.36065,,,,,,,,,,,,,104.98258119404761,104.98258119404761,-14.982581194047615,-14.982581194047615,253.9024593813728,-7.684835284067958,74.13974428293308 -2022-01-10 18:15:00,1.497619,,,,,,,,,,-10.66256,-7.672122,,,,,,,,,,,,,107.64855459060838,107.64855459060838,-17.648554590608384,-17.648554590608384,256.2327072941455,-7.688978768306697,77.34880028143749 -2022-01-10 18:30:00,0.9736995,,,,,,,,,,-9.324455,-7.27885,,,,,,,,,,,,,110.34124595526882,110.34124595526882,-20.34124595526882,-20.34124595526882,258.5638830684694,-7.693121166768833,80.59611514585634 -2022-01-10 18:45:00,0.8054042,,,,,,,,,,-8.122817,-7.230422,,,,,,,,,,,,,113.0562511406697,113.0562511406697,-23.05625114066971,-23.05625114066971,260.9066639733185,-7.697262479225174,83.87701639335744 -2022-01-10 19:00:00,0.2351132,,,,,,,,,,-7.357272,-7.237372,,,,,,,,,,,,,,,,,,, -2022-01-10 19:15:00,-2.423988,,,,,,,,,,-7.488067,-7.472116,,,,,,,,,,,,,,,,,,, -2022-01-10 19:30:00,-5.39413,,,,,,,,,,-8.607639,-8.047572,,,,,,,,,,,,,,,,,,, -2022-01-10 19:45:00,-6.316714,,,,,,,,,,-10.22274,-9.069683,,,,,,,,,,,,,,,,,,, -2022-01-10 20:00:00,-5.722897,,,,,,,,,,-11.68762,-10.1064,,,,,,,,,,,,,,,,,,, -2022-01-10 20:15:00,-3.769511,,,,,,,,,,-12.80632,-10.84562,,,,,,,,,,,,,,,,,,, -2022-01-10 20:30:00,-3.452007,,,,,,,,,,-13.68255,-11.46631,,,,,,,,,,,,,,,,,,, -2022-01-10 20:45:00,-2.206551,,,,,,,,,,-13.97515,-11.35991,,,,,,,,,,,,,,,,,,, -2022-01-10 21:00:00,0.2080746,,,,,,,,,,-13.39726,-10.4194,,,,,,,,,,,,,,,,,,, -2022-01-10 21:15:00,0.2080833,,,,,,,,,,-12.32311,-9.299583,,,,,,,,,,,,,,,,,,, -2022-01-10 21:30:00,-1.345389,,,,,,,,,,-11.53553,-8.764911,,,,,,,,,,,,,,,,,,, -2022-01-10 21:45:00,-1.42481,,,,,,,,,,-11.19843,-8.651484,,,,,,,,,,,,,,,,,,, -2022-01-10 22:00:00,-0.2970335,,,,,,,,,,-11.02538,-8.529866,,,,,,,,,,,,,,,,,,, -2022-01-10 22:15:00,-0.04924034,,,,,,,,,,-11.01999,-8.61165,,,,,,,,,,,,,,,,,,, -2022-01-10 22:30:00,0.02700322,,,,,,,,,,-10.84902,-8.547039,,,,,,,,,,,,,,,,,,, -2022-01-10 22:45:00,0.06671461,,,,,,,,,,-10.64079,-8.525689,,,,,,,,,,,,,,,,,,, -2022-01-10 23:00:00,0.0603609,,,,,,,,,,-10.38599,-8.548889,,,,,,,,,,,,,,,,,,, -2022-01-10 23:15:00,-0.01747335,,,,,,,,,,-10.26169,-8.659889,,,,,,,,,,,,,,,,,,, -2022-01-10 23:30:00,-0.01747335,,,,,,,,,,-10.3576,-8.866811,,,,,,,,,,,,,,,,,,, -2022-01-10 23:45:00,0.0,,,,,,,,,,-10.43267,-9.007706,,,,,,,,,,,,,,,,,,, +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_horizon.csv b/pvanalytics/data/snow_horizon.csv deleted file mode 100644 index 2ede61af4..000000000 --- a/pvanalytics/data/snow_horizon.csv +++ /dev/null @@ -1,361 +0,0 @@ -,Elevation -0,0.0 -1,0.0 -2,0.0 -3,0.0 -4,0.0 -5,0.0 -6,0.0 -7,0.0 -8,0.0 -9,0.0 -10,0.0 -11,0.0 -12,0.0 -13,0.0 -14,0.0 -15,0.0 -16,0.0 -17,0.0 -18,0.0 -19,0.0 -20,0.0 -21,0.0 -22,0.0 -23,0.0 -24,0.0 -25,0.0 -26,0.0 -27,0.0 -28,0.0 -29,0.0 -30,0.0 -31,0.0 -32,0.0 -33,0.0 -34,0.0 -35,0.0 -36,0.0 -37,0.0 -38,0.0 -39,0.0 -40,0.0 -41,0.0 -42,0.0 -43,0.0 -44,0.0 -45,0.0 -46,0.0 -47,0.0 -48,0.0 -49,0.0 -50,0.0 -51,0.0 -52,0.0 -53,0.0 -54,0.0 -55,0.0 -56,0.0 -57,0.0 -58,0.0 -59,0.0 -60,0.0 -61,0.0 -62,0.0 -63,0.0 -64,0.0 -65,0.0 -66,0.0 -67,0.0 -68,0.0 -69,0.0 -70,0.0 -71,0.0 -72,0.0 -73,0.0 -74,0.0 -75,0.0 -76,0.0 -77,0.0 -78,0.0 -79,0.0 -80,0.0 -81,0.0 -82,0.0 -83,0.0 -84,0.0 -85,0.0 -86,0.0 -87,0.0 -88,0.0 -89,0.0 -90,0.0 -91,0.0 -92,0.0 -93,0.0 -94,0.0 -95,0.0 -96,0.0 -97,0.0 -98,0.0 -99,0.0 -100,0.0 -101,0.0 -102,0.0 -103,0.0 -104,0.0 -105,0.0 -106,0.0 -107,0.0 -108,0.0 -109,0.0 -110,0.0 -111,0.0 -112,0.0 -113,0.0 -114,0.0 -115,0.0 -116,0.0 -117,0.0 -118,0.0 -119,0.0 -120,0.0 -121,0.0 -122,0.0 -123,0.0 -124,0.2216517857142784 -125,0.6654017857142642 -126,1.3517857142856708 -127,1.999776785714222 -128,2.695982142857057 -129,3.4080357142856066 -130,4.119196428571299 -131,4.870535714285562 -132,5.76205357142839 -133,6.491517857142654 -134,7.241071428571201 -135,8.04955357142832 -136,8.712499999999725 -137,9.409821428571131 -138,10.06138392857111 -139,10.62053571428538 -140,11.258482142856787 -141,11.912946428571052 -142,12.506026785713892 -143,12.925669642856734 -144,13.528571428571004 -145,14.179017857142412 -146,14.692633928570968 -147,15.169419642856669 -148,15.751562499999505 -149,16.28124999999948 -150,16.701785714285187 -151,17.132142857142323 -152,17.57455357142802 -153,17.956696428570865 -154,18.383035714285132 -155,18.673660714285123 -156,19.01741071428512 -157,19.360937499999395 -158,19.66874999999938 -159,19.972991071427945 -160,20.264732142856506 -161,20.40959821428507 -162,20.515401785713642 -163,20.774330357142208 -164,20.978571428570774 -165,21.038169642856484 -166,21.18102678571362 -167,21.34263392857076 -168,21.442857142856475 -169,21.552901785713615 -170,21.68616071428503 -171,21.72254464285646 -172,21.616517857142178 -173,21.774999999999316 -174,21.751339285713605 -175,21.794196428570746 -176,21.859151785713603 -177,21.91964285714217 -178,21.99999999999931 -179,22.024553571427877 -180,22.052232142856447 -181,22.100892857142163 -182,22.11383928571359 -183,22.034374999999304 -184,21.88035714285645 -185,21.828571428570744 -186,21.80558035714217 -187,21.696874999999313 -188,21.58035714285646 -189,21.525892857142185 -190,21.403348214285042 -191,21.33504464285647 -192,21.2854910714279 -193,21.085714285713625 -194,20.614732142856496 -195,20.453794642856497 -196,20.373883928570784 -197,20.02165178571365 -198,19.745982142856526 -199,19.62008928571367 -200,19.376116071427962 -201,19.022991071427974 -202,18.829687499999412 -203,18.648437499999414 -204,18.349330357142282 -205,18.070089285713713 -206,17.78950892857087 -207,17.436607142856595 -208,17.006919642856605 -209,16.326116071428057 -210,15.947544642856636 -211,15.572098214285223 -212,14.842187499999534 -213,14.513392857142398 -214,14.077901785713841 -215,13.640401785713856 -216,13.052008928571022 -217,12.791517857142452 -218,12.510044642856752 -219,12.017633928571051 -220,11.565401785713922 -221,11.286607142856784 -222,10.913392857142515 -223,10.259374999999675 -224,10.242633928571106 -225,10.133035714285393 -226,9.861607142856831 -227,10.078348214285397 -228,10.25424107142825 -229,10.220312499999679 -230,10.434151785713956 -231,10.625669642856808 -232,10.617187499999668 -233,10.555357142856813 -234,10.560267857142527 -235,10.390848214285382 -236,10.231473214285394 -237,10.308705357142536 -238,10.24799107142825 -239,10.489508928571096 -240,10.29218749999968 -241,10.236830357142532 -242,10.174776785713966 -243,9.797321428571118 -244,9.529910714285416 -245,9.150669642856853 -246,8.96428571428543 -247,8.39196428571402 -248,8.224776785714026 -249,8.33258928571402 -250,8.478794642856872 -251,8.635491071428298 -252,8.958035714285433 -253,9.78883928571398 -254,10.476785714285386 -255,11.309374999999644 -256,13.099330357142449 -257,14.25602678571384 -258,14.416741071428122 -259,15.634821428570941 -260,16.308258928570915 -261,16.673660714285194 -262,16.832366071428044 -263,16.64241071428519 -264,16.55714285714234 -265,16.31205357142806 -266,15.795089285713791 -267,14.858482142856676 -268,13.458035714285291 -269,12.427008928571036 -270,11.3462053571425 -271,9.681249999999693 -272,8.220089285714028 -273,6.747321428571215 -274,5.218526785714121 -275,3.817410714285592 -276,2.4276785714284936 -277,1.6651785714285183 -278,0.851116071428544 -279,0.07767857142856865 -280,0.0 -281,0.0 -282,0.0 -283,0.0 -284,0.0 -285,0.0 -286,0.0 -287,0.0 -288,0.0 -289,0.0 -290,0.0 -291,0.0 -292,0.0 -293,0.0 -294,0.0 -295,0.0 -296,0.0 -297,0.0 -298,0.0 -299,0.0 -300,0.0 -301,0.0 -302,0.0 -303,0.0 -304,0.0 -305,0.0 -306,0.0 -307,0.0 -308,0.0 -309,0.0 -310,0.0 -311,0.0 -312,0.0 -313,0.0 -314,0.0 -315,0.0 -316,0.0 -317,0.0 -318,0.0 -319,0.0 -320,0.0 -321,0.0 -322,0.0 -323,0.0 -324,0.0 -325,0.0 -326,0.0 -327,0.0 -328,0.0 -329,0.0 -330,0.0 -331,0.0 -332,0.0 -333,0.0 -334,0.0 -335,0.0 -336,0.0 -337,0.0 -338,0.0 -339,0.0 -340,0.0 -341,0.0 -342,0.0 -343,0.0 -344,0.0 -345,0.0 -346,0.0 -347,0.0 -348,0.0 -349,0.0 -350,0.0 -351,0.0 -352,0.0 -353,0.0 -354,0.0 -355,0.0 -356,0.0 -357,0.0 -358,0.0 -359,0.0 diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 0881f92d6..724c68c24 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -1,33 +1,6 @@ import numpy as np -def _get_horizon_mask(horizon, azimuth, elevation): - - """ - Determines if a given (azimuth, elevation) pair is above a horizon profile. - - Parameters - ---------- - horizon : Series - Series with numeric index of 0 - 359 (represents azimuth) and float - values (represents elevation [deg] of horizon profile). - azimuth : array-like - Solar azimuth angle. [deg] - elevation : array-like - Solar elevation angle. [deg] - - Returns - ------- - out : array-like - Array of bool and NaN values, where True indicates that the - (azimuth, elevation) pair is above the horizon profile. NaN if the sun - position inputs contain a NaN. - """ - yp = np.interp(azimuth, horizon.index, horizon.values, period=360) - out = elevation >= yp - return out - - def get_irradiance_sapm(temp_cell, i_mp, imp0, c0, c1, alpha_imp, irrad_ref=1000, temp_ref=25): """ @@ -160,34 +133,6 @@ def categorize(transmission, measured_voltage, """ Categorizes electrical behavior into a snow-related mode. - 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 that - decreases both operating voltage and current. Operating Voltage is - reduced when bypass diodes activate and current is decreased due to - decreased irradiance. - * Mode 2: Indicates periods when the operating voltage is reduced but - current is consistent with snow-free conditions. - * Mode 3: Indicates periods when the 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]_. - - Parameters ---------- transmission : array-like @@ -224,6 +169,38 @@ def categorize(transmission, measured_voltage, 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]_. + References ---------- .. [1] E. C. Cooper, J. L. Braid and L. M. Burnham, "Identifying the diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index a69875834..4b5d1c72b 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -11,15 +11,6 @@ from pvanalytics.features import snow -def test_get_horizon_mask(): - horizon = pd.Series(index=range(0, 360), data=0) - horizon[5:10] = 10 - result = snow._get_horizon_mask(horizon, azimuth=np.array([4, 5, 7]), - elevation=np.array([-1, 11, np.nan])) - expected = np.array([False, True, False]) - assert_array_equal(result, expected) - - def test_get_irradiance_sapm(): # solve Ee^2 + 2 Ee - 3 = 0 c0, c1 = (2, 1) From 1d221ca3f82fdf3fb22441e2e65c28dfff1b8a80 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 7 Oct 2024 08:58:20 -0700 Subject: [PATCH 67/72] edits, I forget what --- docs/examples/snow-detection/snow-mode.py | 81 ++++++++++------------- pvanalytics/features/snow.py | 12 ++-- 2 files changed, 41 insertions(+), 52 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 74ac9c535..095495688 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -70,10 +70,11 @@ import pvanalytics # Functions needed for the analysis procedure -from pvanalytics.features import snow +#from pvanalytics.features import snow +import snow pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent - +pvanalytics_dir = pathlib.Path('C:\python\pvanalytics\pvanalytics\pvanalytics') # %% # Read in 15-minute DC voltage, DC current and AC power data. @@ -115,31 +116,6 @@ num_mods_per_str = 18 -# %% Plot DC voltage at the combiner input relative to inverter nameplate -# limits. We are looking for periods where DC voltage is less than the -# inverter's MPPT voltage range, as these values are outside of MPP -# operating conditions. If we find these periods, we - -fig, ax = plt.subplots(figsize=(10, 6)) -locator = mdates.DayLocator() -#ax.xaxis.set_minor_locator(mdates.DayLocator(interval=0.25)) -ax.xaxis.set_major_locator(mdates.DayLocator(interval=1)) -ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d')) -ax.plot(data[voltage_col], '.-', alpha=0.5, fillstyle='full', - label='DC voltage') -ax.axhline(mppt_high_voltage, c='r', ls='--') -ax.text(0.02, mppt_high_voltage + 20, '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.set_xlabel('Date', fontsize='large') -ax.set_ylabel('Voltage [V]', fontsize='large') -ax.set_ylim([0, 1.2*mppt_high_voltage]) -ax.legend(loc='lower left') -fig.tight_layout() -plt.show() - # %% 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 @@ -159,13 +135,10 @@ fig.tight_layout() plt.show() -# %% -# Define coefficients for modeling transmission and voltage. User can either -# use the SAPM to calculate transmission or an approach based on the ratio -# between measured current and nameplate current. For modeling voltage, the -# user can use the SAPM or a single diode equivalent. +# %% Model DC voltage and power. Here we use the SAPM. Alternatively, one +# could use a single diode model. -# Data from CFV Solar Test Lab, tested 2013. +# SAPM coefficients derived from data from CFV Solar Test Laboratory, 2013. sapm_coeffs = { "Cells_in_Series": 72, "Isco": 9.36992857142857, @@ -204,17 +177,17 @@ # %% # Demonstrate the transmission calculation and plot the result. -# We scale measured current at the combiner to that -# of a single string, assuming all strings have the same current. -# The string current should be the same current as a single module. +# 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. -# String current -imp = data[current_col] / num_str_per_cb -# Model effective irradiance using SAPM modeled_e_e1 = snow.get_irradiance_sapm( - data['Cell Temp [C]'], imp, sapm_coeffs['Impo'], sapm_coeffs['C0'], - sapm_coeffs['C1'], sapm_coeffs['Aimp']) + 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, imp) @@ -233,17 +206,33 @@ # %% # Model and plot the voltage using calculated transmission. -modeled_vmp_sapm = pvlib.pvsystem.sapm(data['POA [W/m²]']*T1, - data['Cell Temp [C]'], - sapm_coeffs)['v_mp'] -modeled_vmp_sapm *= num_mods_per_str +# 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) + +# 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_sapm, '.-', c='b', fillstyle='full', label='SAPM') +ax.plot(modeled_vmp_no_snow, '.-', c='b', fillstyle='full', label='No snow') +ax.plot(modeled_vmp_with_snow, '.-', c='b', fillstyle='full', label='With snow') ax.scatter(data.index, data[voltage_col], s=1, c='r', label='Measured') ax.legend(fontsize='large') diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 724c68c24..389647630 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -76,7 +76,7 @@ def get_irradiance_imp(i_mp, imp0, irrad_ref=1000): return i_mp / imp0 * irrad_ref -def get_transmission(measured_e_e, modeled_e_e, i_mp): +def get_transmission(measured_e_e, modeled_e_e, current_dc): """ Estimate transmission as the ratio of modeled effective irradiance to @@ -90,12 +90,12 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): Parameters ---------- measured_e_e : array-like - Plane-of-array irradiance absent the effect of snow. [W/m2] + 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] - i_mp : array-like - Maximum power DC current at the resolution of a single module. [A] + current_dc : array-like + Measured DC current at the resolution of a single module. [A] Returns ------- @@ -114,8 +114,8 @@ def get_transmission(measured_e_e, modeled_e_e, i_mp): """ transmission = modeled_e_e / measured_e_e # no transmission if no current - transmission[np.isnan(i_mp)] = np.nan - transmission[i_mp == 0] = 0 + 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 From 7c80d3a5b38c756197fbd213e67557e66dc4a05c Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 7 Oct 2024 09:55:04 -0700 Subject: [PATCH 68/72] major edits to example --- docs/examples/snow-detection/snow-mode.py | 48 ++++++++++++++--------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 095495688..6b9daa311 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -70,11 +70,9 @@ import pvanalytics # Functions needed for the analysis procedure -#from pvanalytics.features import snow -import snow +from pvanalytics.features import snow pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent -pvanalytics_dir = pathlib.Path('C:\python\pvanalytics\pvanalytics\pvanalytics') # %% # Read in 15-minute DC voltage, DC current and AC power data. @@ -189,24 +187,22 @@ 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, imp) +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 \n%H:%M") +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='xx-large') -ax.set_xlabel('Date + Time', fontsize='large') +ax.set_ylabel('Transmission', fontsize='large') +ax.set_xlabel('Date', fontsize='large') fig.tight_layout() plt.show() # %% -# Model and plot the voltage using calculated transmission. - - +# Visualize measured and modeled DC voltage. # Model DC output of a single module without the effect of snow. # Here we use the pyranometer irradiance. @@ -214,6 +210,11 @@ 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 @@ -232,15 +233,25 @@ 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='b', fillstyle='full', label='With 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.scatter(data.index, data[voltage_col], s=1, c='r', label='Measured') ax.legend(fontsize='large') ax.set_ylabel('Voltage [V]', fontsize='large') ax.set_xlabel('Date', fontsize='large') -plt.show() -fig.tight_layout() +fig.tight_layout() +plt.show() # %% # We write a function to assign snow categories, so that we could loop over @@ -385,8 +396,8 @@ def assign_snow_modes(voltage, current, temp_cell, effective_irradiance, ax.plot(snow_results['vmp_ratio'], label='INV1 CB2 Voltage Ratio') -ax.set_xlabel('Date', fontsize='xx-large') -ax.set_ylabel('Voltage Ratio (measured/modeled)', fontsize='xx-large') +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() @@ -514,9 +525,9 @@ def assign_snow_modes(voltage, current, temp_cell, effective_irradiance, fig, ax = plt.subplots(figsize=(10, 6)) ax2 = ax.twinx() -snow_loss_daily.plot(kind='bar', ax=ax, width=0.4, align='edge', +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, +snowfall['SNOW'].plot(kind='bar', ax=ax2, width=0.4, alpha=0.2, align='edge', label='Snow fall in prior 24 hours') @@ -529,4 +540,3 @@ def assign_snow_modes(voltage, current, temp_cell, effective_irradiance, ax.set_title('Daily energy loss and snowfall', fontsize='large') fig.tight_layout() plt.show() - From 87da65ca31845e0c4f5a2b6490e286753406627d Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 7 Oct 2024 12:31:07 -0700 Subject: [PATCH 69/72] yet more edits --- docs/examples/snow-detection/snow-mode.py | 73 ++++++++++++----------- pvanalytics/features/snow.py | 4 ++ 2 files changed, 43 insertions(+), 34 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 6b9daa311..ac078ae35 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -19,30 +19,27 @@ * 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. + mismatch. 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. + 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 where it is unknown if or how snow impacts + * 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 + 2. Measured voltage exceeds the upper bound of the inverter's MPPT algorithm. - Mode is None when both measured and voltage modeled from measured - irradiance are below the inverter turn-on voltage. - The procedure involves four steps: - 1. Using measured plane-of-array (POA) irradiance and temperature, model - the module's maximum power current (Imp) and voltage (Vmp) assuming - that all the POA irradiance reaches the module's cells. + 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. @@ -98,7 +95,8 @@ current_col = 'INV1 CB2 Current [A]' -# %% Retrieve and print system inverter specs and DC electrical configuration +# %% +# 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_"] @@ -114,7 +112,8 @@ num_mods_per_str = 18 -# %% Plot AC power relative to inverter nameplate limits. We are looking for +# %% +# 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. @@ -133,7 +132,8 @@ fig.tight_layout() plt.show() -# %% Model DC voltage and power. Here we use the SAPM. Alternatively, one +# %% +# 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. @@ -165,7 +165,6 @@ "C7": np.nan, } - # Model cell temperature using the SAPM model. irrad_ref = 1000 @@ -233,17 +232,20 @@ 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.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), +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), +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') @@ -257,6 +259,7 @@ # 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, @@ -331,20 +334,23 @@ def assign_snow_modes(voltage, current, temp_cell, effective_irradiance, modeled_voltage_with_ideal_transmission, min_dcv, max_dcv, threshold_vratio, threshold_transmission) - result = pd.DataFrame(index=voltage.index, data={'transmission': T, - '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}) + result = pd.DataFrame( + index=voltage.index, + data={ + 'transmission': T, + '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 +# on voltage, current pair. # threshold_vratio and threshold_transmission were empirically determined # using data collected on this system over five summers. Transmission and @@ -388,7 +394,7 @@ def assign_snow_modes(voltage, current, temp_cell, effective_irradiance, plt.show() # %% -# Look at voltage ratio +# Look at voltage ratio. fig, ax = plt.subplots(figsize=(10, 6)) date_form = mdates.DateFormatter("%m/%d") @@ -426,7 +432,7 @@ def assign_snow_modes(voltage, current, temp_cell, effective_irradiance, # %% -# Plot measured and modeled power, color by mode +# Plot measured and modeled power, and show snow mode with colored bars. N = 6 alpha = 0.5 @@ -494,17 +500,15 @@ def assign_snow_modes(voltage, current, temp_cell, effective_irradiance, plt.show() # %% - # Calculate daily DC energy loss due to snow as a percentage of potential # (modeled) DC power. -# Plot daily DC energy loss and daily snowfall totals. # DataFrame so that we can group by days. loss_df = pd.DataFrame(data={'modeled_power': modeled_power, 'loss_snow': loss_snow}) -# We will also show daily snowfall totals for context. -# Daily snowfall is measured at 7:00 am of each day. +# 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) @@ -520,9 +524,10 @@ def assign_snow_modes(voltage, current, temp_cell, effective_irradiance, 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() - + 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', diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 389647630..8af1ec7ec 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -201,6 +201,10 @@ def categorize(transmission, measured_voltage, 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 From 5356804bec028eeba8f7e1c9d824c5217ae9646a Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 7 Oct 2024 12:40:41 -0700 Subject: [PATCH 70/72] lint --- docs/examples/snow-detection/snow-mode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index ac078ae35..7e3cdb94d 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -112,7 +112,7 @@ 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 From f9d9638d2bd8da4119a122a155e53029b4a2955a Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 7 Oct 2024 13:34:22 -0700 Subject: [PATCH 71/72] Update docs/api.rst --- docs/api.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/api.rst b/docs/api.rst index 250d59951..fd1c9150c 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -277,7 +277,6 @@ Functions for identifying and quantifying the effects of snow. .. autosummary:: :toctree: generated/ - features.snow._get_horizon_mask features.snow.get_irradiance_sapm features.snow.get_irradiance_imp features.snow.categorize From d45be6a126cefff6abd6bfe901c06ad4455abfb3 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Fri, 11 Oct 2024 13:53:58 -0700 Subject: [PATCH 72/72] review comments --- docs/examples/snow-detection/snow-mode.py | 31 ++++++++++++++++++----- pvanalytics/features/snow.py | 6 +++-- pvanalytics/tests/features/test_snow.py | 6 ----- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/docs/examples/snow-detection/snow-mode.py b/docs/examples/snow-detection/snow-mode.py index 7e3cdb94d..280df69d5 100644 --- a/docs/examples/snow-detection/snow-mode.py +++ b/docs/examples/snow-detection/snow-mode.py @@ -308,8 +308,25 @@ def assign_snow_modes(voltage, current, temp_cell, effective_irradiance, Returns ------- my_dict : dict - Keys are ``'transmission'``, ``'modeled_vmp'``, ``'vmp_ratio'``, - and ``'mode'`` + 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` ''' @@ -318,26 +335,26 @@ def assign_snow_modes(voltage, current, temp_cell, effective_irradiance, temp_cell, current / num_str_per_cb, coeffs['Impo'], coeffs['C0'], coeffs['C1'], coeffs['Aimp']) - T = snow.get_transmission(effective_irradiance, modeled_e_e, - current / num_str_per_cb) + 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*T, temp_cell, + 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( - T, voltage, modeled_voltage_with_calculated_transmission, + 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': T, + 'transmission': transmission, 'modeled_voltage_with_calculated_transmission': modeled_voltage_with_calculated_transmission, 'modeled_voltage_with_ideal_transmission': diff --git a/pvanalytics/features/snow.py b/pvanalytics/features/snow.py index 8af1ec7ec..c3b542db6 100644 --- a/pvanalytics/features/snow.py +++ b/pvanalytics/features/snow.py @@ -60,6 +60,8 @@ def get_irradiance_imp(i_mp, imp0, irrad_ref=1000): 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 ------- @@ -68,8 +70,8 @@ def get_irradiance_imp(i_mp, imp0, irrad_ref=1000): References ---------- - .. [1] C. F. Abe, J. B. Dias, G. Notton, G. A. Faggianelli, G. Pigelet, and - D. Ouvrard, David, "Estimation of the effective irradiance and bifacial + .. [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` """ diff --git a/pvanalytics/tests/features/test_snow.py b/pvanalytics/tests/features/test_snow.py index 4b5d1c72b..8d62f5a91 100644 --- a/pvanalytics/tests/features/test_snow.py +++ b/pvanalytics/tests/features/test_snow.py @@ -1,9 +1,3 @@ -# -*- coding: utf-8 -*- -""" -Created on Mon Apr 8 14:39:12 2024 - -@author: cliff -""" import numpy as np import pandas as pd from numpy.testing import assert_array_equal