def J(self, log_sigma):
        """Return the sensitivity matrix

        Parameters
        ----------
        log_sigma : numpy.ndarray
            log_e conductivities

        """
        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
Return the sensitivity matrix

        Parameters
        ----------
        log_sigma : numpy.ndarray
            log_e conductivities