pvanalytics.features.orientation.tracking_nrel(power_or_irradiance, daytime, r2_min=0.915, r2_fixed_max=0.96, min_hours=5, peak_min=None, quadratic_mask=None)#

Flag days that match the profile of a single-axis tracking PV system on a sunny day.

This algorithm relies on the observation that the power profile of a single-axis tracking PV system tends to resemble a quartic polynomial on a sunny day, I.e., two peaks are observed, one before and one after the sun crosses the tracker azimuth. By contrast, the power profile for a fixed tilt PV system often resembles a quadratic polynomial on a sunny day, with a single peak when the sun is near the system azimuth.

The algorithm fits both a quartic and a quadratic polynomial to each day’s data. A day is marked True if the quartic fit has a sufficiently high \(r^2\) and the quadratic fit has a sufficiently low \(r^2\). Specifically, a day is marked True when three conditions are met:

  1. a restricted quartic 1 must fit the data with \(r^2\) greater than r2_min

  2. the \(r^2\) for the restricted quartic fit must be greater than the \(r^2\) for a quadratic fit

  3. the \(r^2\) for a quadratic fit must be less than r2_fixed_max

Values on days where any one of these conditions is not met are marked False.


The specific quartic used for this fit is centered within 70 minutes of 12:00, the y-value at the center must be within 15% of the median for the day, and it must open downwards.

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

  • daytime (Series) – Boolean series with True for times that are during the day. For best results this mask should exclude early morning and late afternoon as well as night. Data at these times may have problems with shadows that interfere with curve fitting.

  • r2_min (float, default 0.915) – Minimum \(r^2\) of a quartic fit for a day to be marked True.

  • r2_fixed_max (float, default 0.96) – If the \(r^2\) of a quadratic fit exceeds r2_fixed_max, then tracking/fixed cannot be distinguished and the day is marked False.

  • min_hours (float, default 5.0) – Minimum number of hours with data to attempt a fit on a day.

  • peak_min (float, default None) – The maximum power_or_irradiance value for a day must be greater than peak_min for a fit to be attempted. If the maximum for a day is less than peak_min then the day will be marked False.

  • quadratic_mask (Series, default None) – If None then daytime is used. This Series is used to remove morning and afternoon times from the data before applying a quadratic fit. The mask should typically exclude more data than daytime in order to eliminate long tails in the morning or afternoon that can appear if a tracker is stuck in a West or East orientation.


Boolean series with True for every value on a day that has a tracking profile (see criteria above).

Return type



This algorithm is based on the PVFleets QA Analysis project. Copyright (c) 2020 Alliance for Sustainable Energy, LLC.

Examples using pvanalytics.features.orientation.tracking_nrel#

Flag Sunny Days for a Tracking System

Flag Sunny Days for a Tracking System