code: def J(self, log_sigma):
          
          m = 1.0 / np.exp(log_sigma)
          tdm = self._get_tdm(m)
  
          tdm.model(
              sensitivities=True,
              # output_directory=stage_dir + 'modeling',
          )
  
          measurements = tdm.measurements()
  
          # build up the sensitivity matrix
          sens_list = []
          for config_nr, cids in sorted(
                  tdm.assignments['sensitivities'].items()):
              sens_list.append(tdm.parman.parsets[cids[0]])
  
          sensitivities_lin = np.array(sens_list)
          # now convert to the log-sensitivities relevant for CRTomo and the
          # resolution matrix
          sensitivities_log = sensitivities_lin
          # multiply measurements on first dimension
          measurements_rep = np.repeat(
              measurements[:, 0, np.newaxis],
              sensitivities_lin.shape[1],
              axis=1)
          # sensitivities_log = sensitivities_log * mfit
  
          # multiply resistivities on second dimension
          m_rep = np.repeat(
              m[np.newaxis, :], sensitivities_lin.shape[0], axis=0
          )
  
          # eq. 3.41 in Kemna, 2000: notice that m_rep here is in rho, not sigma
          factor = - 1 / (m_rep * measurements_rep)
          sensitivities_log = factor * sensitivities_lin
  
  #         import IPython
  #         IPython.embed()
  
          return sensitivities_log
docs: Return the sensitivity matrix
  
          Parameters
          ----------
          log_sigma : numpy.ndarray
              log_e conductivities