docs: def get_mfd(self, slip, fault_width, shear_modulus=30.0,
                  disp_length_ratio=1.25E-5):
          '''
          Calculates activity rate on the fault
  
          :param float slip:
              Slip rate in mm/yr
  
          :param fault_width:
              Width of the fault (km)
  
          :param float shear_modulus:
              Shear modulus of the fault (GPa)
  
          :param float disp_length_ratio:
              Displacement to length ratio (dimensionless)
  
          :returns:
              * Minimum Magnitude (float)
              * Bin width (float)
              * Occurrence Rates (numpy.ndarray)
          '''
          beta = np.sqrt((disp_length_ratio * (10.0 ** C_VALUE)) /
                         ((shear_modulus * 1.0E10) * (fault_width * 1E5)))
          dbar = D_VALUE * np.log(10.0)
          bbar = self.b_value * np.log(10.0)
          mag = np.arange(self.mmin - (self.bin_width / 2.),
                          self.mmax + self.bin_width,
                          self.bin_width)
  
          if bbar > dbar:
              print('b-value larger than 1.5 will produce invalid results in '
                    'Anderson & Luco models')
              self.occurrence_rate = np.nan * np.ones(len(mag) - 1)
              return self.mmin, self.bin_width, self.occurrence_rate
  
          self.occurrence_rate = np.zeros(len(mag) - 1, dtype=float)
          for ival in range(0, len(mag) - 1):
              self.occurrence_rate[ival] = \
                  RECURRENCE_MAP[self.mfd_type].cumulative_value(
                      slip, self.mmax, mag[ival], bbar, dbar, beta) - \
                  RECURRENCE_MAP[self.mfd_type].cumulative_value(
                      slip, self.mmax, mag[ival + 1], bbar, dbar, beta)
              if self.occurrence_rate[ival] < 0.:
                  self.occurrence_rate[ival] = 0.
          return self.mmin, self.bin_width, self.occurrence_rate