code: def get_geo_fact(ab, srcazm, srcdip, recazm, recdip, msrc, mrec):
      r
      global _min_angle
  
      # Get current direction for source and receiver
      fis = ab % 10
      fir = ab // 10
  
      # If rec is magnetic and src not, swap directions (reciprocity).
      # (They have been swapped in get_abs, but the original scaling applies.)
      if mrec and not msrc:
          fis, fir = fir, fis
  
      def gfact(bp, azm, dip):
          r"""Geometrical factor of source or receiver."""
          if bp in [1, 4]:    # x-directed
              return np.cos(azm)*np.cos(dip)
          elif bp in [2, 5]:  # y-directed
              return np.sin(azm)*np.cos(dip)
          else:               # z-directed
              return np.sin(dip)
  
      # Calculate src-rec-factor
      fsrc = gfact(fis, srcazm, srcdip)
      frec = gfact(fir, recazm, recdip)
      fact = np.outer(fsrc, frec).ravel()
  
      # Set very small angles to proper zero (because e.g. sin(pi/2) != exact 0)
      # => min_angle can be set with utils.set_min
      fact[np.abs(fact) < _min_angle] = 0
  
      return fact
docs: r"""Get required geometrical scaling factor for given angles.
  
      This check-function is called from one of the modelling routines in
      :mod:`model`.  Consult these modelling routines for a detailed description
      of the input parameters.
  
      Parameters
      ----------
      ab : int
          Source-receiver configuration.
  
      srcazm, recazm : float
          Horizontal source/receiver angle.
  
      srcdip, recdip : float
          Vertical source/receiver angle.
  
  
      Returns
      -------
      fact : float
          Geometrical scaling factor.