code: def _populate_rv(self, dataset, **kwargs):
          
          logger.debug("{}._populate_rv(dataset={})".format(self.component, dataset))
  
          # We need to fill all the flux-related columns so that we can weigh each
          # triangle's rv by its flux in the requested passband.
          lc_cols = self._populate_lc(dataset, **kwargs)
  
          # rv per element is just the z-component of the velocity vectory.  Note
          # the change in sign from our right-handed system to rv conventions.
          # These will be weighted by the fluxes when integrating
  
          rvs = -1*self.mesh.velocities.for_computations[:,2]
  
  
          # Gravitational redshift
          if self.do_rv_grav:
              rv_grav = c.G*(self.mass*u.solMass)/(self.instantaneous_rpole*u.solRad)/c.c
              # rvs are in solRad/d internally
              rv_grav = rv_grav.to('solRad/d').value
  
              rvs += rv_grav
  
          cols = lc_cols
          cols['rvs'] = rvs
          return cols
docs: Populate columns necessary for an RV dataset
  
          This should not be called directly, but rather via :meth:`Body.populate_observable`
          or :meth:`System.populate_observables`