pvanalytics.system.is_tracking_envelope(series, daytime, clipping, clip_max=0.1, envelope_quantile=0.995, envelope_min_fraction=0.05, fit_median=True, median_min_fraction=0.025, median_r2_min=0.9, fit_params=None, seasonal_split='north-america')#

Infer whether the system is equipped with a tracker.

Data is grouped by season (optional) and within each season by the minute of the day. A maximum power or irradiance envelope (the envelope_quantile value at each minute) is calculated. Quadratic and quartic curves are fit to this daily envelope and the \(r^2\) of the curve fits are used determine whether the system is tracking or fixed.

If the quadratic fit is a sufficiently good in both seasons, then Tracker.FIXED is returned.

If, in both seasons, the quartic fit is sufficiently good and the quadratic fit is sufficiently bad, then Tracker.TRACKING is returned.

If neither fit is sufficiently good, or the results from each season disagree, then Tracker.UNKNOWN is returned.

Optionally, an additional fit is made to the median of the data at each minute to confirm the determination of tracking or fixed. If performed, this result must be consistent with the fit to the upper envelope. If not, Tracker.UNKNOWN is returned.

  • series (Series) – Timezone localized Series of power or irradiance data.

  • daytime (Series) – Boolean Series with True for times that are during the day.

  • clipping (Series) – Boolean Series identifying where power or irradiance is being clipped.

  • clip_max (float, default 0.1) – If the fraction of data flagged as clipped is greater than clip_max then it cannot be determined whether the system is tracking or fixed and Tracker.UNKNOWN is returned.

  • envelope_quantile (float, default 0.995) – Quantile used to determine the upper power or irradiance envelope.

  • envelope_min_fraction (float, default 0.05) – After calculating the power or irradiance envelope, data less than envelope_min_fraction times the maximum of the envelope is removed. This excludes data from morning and evening that may interfere with curve fitting.

  • fit_median (boolean, default True) – Perform a secondary fit with the median power or irradiance to validate that the profile is consistent through the entire data set.

  • median_min_fraction (float, default 0.025) – After calculating the median power or irradiance at each minute, data less than median_min_fraction times the maximum is removed. This excludes data from morning and evening that may interfere with curve fitting.

  • median_r2_min (float, default 0.9) – Minimum \(r^2\) for a curve fit to the median power or irradiance at each minute of the day (Applies only if fit_median is True).

  • fit_params (dict or None, default None) –

    Minimum r-squared for curve fits according to the fraction of data with clipping. This should be a dictionary with tuple keys and dictionary values. The key must be a 2-tuple of (clipping_min, clipping_max) where the values specify the minimum and maximum fraction of data with clipping for which the associated fit parameters are applicable. The values of the dictionary are themselves dictionaries with keys 'fixed' and 'tracking', which give the minimum \(r^2\) for the curve fits, and 'fixed_max' which gives the maximum \(r^2\) for a quadratic fit if the system appears to have a tracker.

    If None PVFLEETS_FIT_PARAMS is used.

  • seasonal_split (dict or str or None, default 'north-america') – A dictionary with two keys, ‘winter’ and ‘summer’ with a list of integers specifying the winter months and summer months respectively. Seasonal grouping can be disabled by passing seasonal_split=None. Either season can be ignored by passing a dict that omits the key or sets its value to None. The default value, ‘north-america’ uses {'winter': [11, 12, 1, 2], 'summer': [5, 6, 7, 8]} which works well for PV systems located in North America.


The tracking determined by curve fitting (FIXED, TRACKING, or UNKNOWN).

Return type



Derived from the PVFleets QA Analysis project.

Examples using pvanalytics.system.is_tracking_envelope#

PV Fleets QA Process: Power

PV Fleets QA Process: Power

Detect if a System is Tracking

Detect if a System is Tracking