code: def draw_light_2d(self, kwargs_list, n=1, new_compute=False):
          
          if not hasattr(self, '_light_cdf_log') or new_compute is True:
              r_array = np.logspace(np.log10(self._min_interpolate), np.log10(self._max_interpolate), self._interp_grid_num)
              cum_sum = np.zeros_like(r_array)
              sum = 0
              for i, r in enumerate(r_array):
                  if i == 0:
                      cum_sum[i] = 0
                  else:
                      sum += self.light_2d(r, kwargs_list) * r * r
                      cum_sum[i] = copy.deepcopy(sum)
              cum_sum_norm = cum_sum/cum_sum[-1]
              f = interp1d(cum_sum_norm, np.log(r_array))
              self._light_cdf_log = f
          cdf_draw = np.random.uniform(0., 1, n)
          r_log_draw = self._light_cdf_log(cdf_draw)
          return np.exp(r_log_draw)
docs: constructs the CDF and draws from it random realizations of projected radii R
          :param kwargs_list:
          :return: