docs: def _compute_shallow_site_response(self, C, sites, pga1100):
          """
          Returns the shallow site response term (equation 11, page 146)
          """
          stiff_factor = C['c10'] + (C['k2'] * C['n'])
          # Initially default all sites to intermediate rock value
          fsite = stiff_factor * np.log(sites.vs30 / C['k1'])
          # Check for soft soil sites
          idx = sites.vs30 < C['k1']
          if np.any(idx):
              pga_scale = np.log(pga1100[idx] +
                                 (C['c'] * ((sites.vs30[idx] / C['k1']) **
                                  C['n']))) - np.log(pga1100[idx] + C['c'])
              fsite[idx] = C['c10'] * np.log(sites.vs30[idx] / C['k1']) + \
                  (C['k2'] * pga_scale)
          # Any very hard rock sites are rendered to the constant amplification
          # factor
          idx = sites.vs30 >= 1100.
          if np.any(idx):
              fsite[idx] = stiff_factor * log(1100. / C['k1'])
  
          return fsite