rdtools.soiling.soiling_srr

rdtools.soiling.soiling_srr(energy_normalized_daily, insolation_daily, reps=1000, precipitation_daily=None, day_scale=14, clean_threshold='infer', trim=False, method='half_norm_clean', clean_criterion='shift', precip_threshold=0.01, min_interval_length=2, exceedance_prob=95.0, confidence_level=68.2, recenter=True, max_relative_slope_error=500.0, max_negative_step=0.05)

Functional wrapper for SRRAnalysis. Perform the stochastic rate and recovery soiling loss calculation. Based on the methods presented in Deceglie et al. JPV 8(2) p547 2018.

Parameters:
  • energy_normalized_daily (pd.Series) -- Daily performance metric (i.e. performance index, yield, etc.) Alternatively, the soiling ratio output of a soiling sensor (e.g. the photocurrent ratio between matched dirty and clean PV reference cells). In either case, data should be insolation-weighted daily aggregates.
  • insolation_daily (pd.Series) -- Daily plane-of-array insolation corresponding to energy_normalized_daily. Arbitrary units.
  • reps (int, default 1000) -- number of Monte Carlo realizations to calculate
  • precipitation_daily (pd.Series, default None) -- Daily total precipitation. Units ambiguous but should be the same as precip_threshold. Note default behavior of precip_threshold. (Ignored if clean_criterion='shift'.)
  • day_scale (int, default 14) -- The number of days to use in rolling median for cleaning detection, and the maximum number of days of missing data to tolerate in a valid interval
  • clean_threshold (float or 'infer', default 'infer') -- The fractional positive shift in rolling median for cleaning detection. Or specify 'infer' to automatically use outliers in the shift as the threshold.
  • trim (bool, default False) -- Whether to trim (remove) the first and last soiling intervals to avoid inclusion of partial intervals
  • method (str, default 'half_norm_clean') --

    How to treat the recovery of each cleaning event

    • 'random_clean' - a random recovery between 0-100%
    • 'perfect_clean' - each cleaning event returns the performance metric to 1
    • 'half_norm_clean'(default) - The starting point of each interval is taken
      randomly from a half normal distribution with its mode (mu) at 1 and its sigma equal to 1/3 * (1-b) where b is the intercept of the fit to the interval.
  • clean_criterion ({'precip_and_shift', 'precip_or_shift', 'precip', 'shift'} default 'shift') -- The method of partitioning the dataset into soiling intervals. If 'precip_and_shift', rolling median shifts must coincide with precipitation to be a valid cleaning event. If 'precip_or_shift', rolling median shifts and precipitation events are each sufficient on their own to be a cleaning event. If 'shift', only rolling median shifts are treated as cleaning events. If 'precip', only precipitation events are treated as cleaning events.
  • precip_threshold (float, default 0.01) -- The daily precipitation threshold for defining precipitation cleaning events. Units must be consistent with precip.
  • min_interval_length (int, default 2) -- The minimum duration, in days, for an interval to be considered valid. Cannot be less than 2 (days).
  • exceedance_prob (float, default 95.0) -- the probability level to use for exceedance value calculation in percent
  • confidence_level (float, default 68.2) -- the size of the confidence interval to return, in percent
  • recenter (bool, default True) -- specify whether data is centered to normalized yield of 1 based on first year median
  • max_relative_slope_error (float, default 500.0) -- the maximum relative size of the slope confidence interval for an interval to be considered valid (percentage).
  • max_negative_step (float, default 0.05) -- The maximum magnitude of negative discrete steps allowed in an interval for the interval to be considered valid (units of normalized performance metric).
Returns:

  • insolation_weighted_soiling_ratio (float) -- P50 insolation weighted soiling ratio based on stochastic rate and recovery analysis

  • confidence_interval (np.array) -- confidence interval (size specified by confidence_level) of degradation rate estimate

  • calc_info (dict) --

    • 'renormalizing_factor' - value used to recenter data

    • 'exceedance_level' - the insolation-weighted soiling ratio that was outperformed with probability of exceedance_prob

    • 'stochastic_soiling_profiles' - List of Pandas series corresponding to the Monte Carlo realizations of soiling ratio profiles

    • 'soiling_ratio_perfect_clean' - Pandas series of the soiling ratio during valid soiling intervals assuming perfect cleaning and P50 slopes

    • 'soiling_interval_summary' - Pandas dataframe summarizing the soiling intervals identified. The columns of the dataframe are as follows:

      Column Name Description
      'start' Start timestamp of the soiling interval
      'end' End timestamp of the soiling interval
      'soiling_rate' P50 Soiling rate for interval, in day^−1 Negative value indicates soiling is occurring. E.g. a rate of −0.01 indicates 1% soiling loss per day.
      'soiling_rate_low' Low edge of confidence interval for soiling rate for interval, in day^−1
      'soiling_rate_high' High edge of confidence interval for soiling rate for interval, in day^−1
      'inferred_start_loss' Estimated performance metric at the start of the interval
      'inferred_end_loss' Estimated performance metric at the end of the interval
      'length' Number of days in the interval
      'valid' Whether the interval meets the criteria to be treated as a valid soiling interval