docs: def mcmc(self, n_burn, n_run, walkerRatio, sigma_scale=1, threadCount=1, init_samples=None, re_use_samples=True):
          """
          MCMC routine
  
          :param n_burn: number of burn in iterations (will not be saved)
          :param n_run: number of MCMC iterations that are saved
          :param walkerRatio: ratio of walkers/number of free parameters
          :param sigma_scale: scaling of the initial parameter spread relative to the width in the initial settings
          :param threadCount: number of CPU threads. If MPI option is set, threadCount=1
          :param init_samples: initial sample from where to start the MCMC process
          :param re_use_samples: bool, if True, re-uses the samples described in init_samples.nOtherwise starts from scratch.
          :return: MCMC samples, parameter names, logL distances of all samples
          """
  
          param_class = self._param_class
          # run PSO
          mcmc_class = Sampler(likelihoodModule=self.likelihoodModule)
          mean_start = param_class.kwargs2args(self._lens_temp, self._source_temp, self._lens_light_temp, self._ps_temp,
                                             self._cosmo_temp)
          lens_sigma, source_sigma, lens_light_sigma, ps_sigma, cosmo_sigma = self._updateManager.sigma_kwargs
          sigma_start = param_class.kwargs2args(lens_sigma, source_sigma, lens_light_sigma, ps_sigma, cosmo_sigma)
          num_param, param_list = param_class.num_param()
          # run MCMC
          if not init_samples is None and re_use_samples is True:
              print("test that you are here!")
              num_samples, num_param_prev = np.shape(init_samples)
              print(num_samples, num_param_prev, num_param, 'shape of init_sample')
              if num_param_prev == num_param:
                  print("re-using previous samples to initialize the next MCMC run.")
                  initpos = ReusePositionGenerator(init_samples)
              else:
                  print("Can not re-use previous MCMC samples due to change in option")
                  initpos = None
          else:
              initpos = None
          samples, dist = mcmc_class.mcmc_CH(walkerRatio, n_run, n_burn, mean_start, np.array(sigma_start) * sigma_scale,
                                             threadCount=threadCount,
                                             mpi=self._mpi, init_pos=initpos)
          return samples, param_list, dist