docs: def _compute_non_linear_term(self, C, pga_only, sites):
          """
          Compute non-linear term, equation 6, page 970.
          """
          Vref = self.CONSTS['Vref']
          Vcon = self.CONSTS['Vcon']
          c = self.CONSTS['c']
          n = self.CONSTS['n']
          lnS = np.zeros_like(sites.vs30)
  
          # equation (6a)
          idx = sites.vs30 < Vref
          lnS[idx] = (
              C['sb1'] * np.log(sites.vs30[idx] / Vref) +
              C['sb2'] * np.log(
                  (pga_only[idx] + c * (sites.vs30[idx] / Vref) ** n) /
                  ((pga_only[idx] + c) * (sites.vs30[idx] / Vref) ** n)
              )
          )
  
          # equation (6b)
          idx = sites.vs30 >= Vref
          new_sites = sites.vs30[idx]
          new_sites[new_sites > Vcon] = Vcon
          lnS[idx] = C['sb1'] * np.log(new_sites / Vref)
  
          return lnS