docs: def collect_bin_data(ruptures, sitecol, cmaker, iml4,
                       truncation_level, n_epsilons, monitor=Monitor()):
      """
      :param ruptures: a list of ruptures
      :param sitecol: a SiteCollection instance
      :param cmaker: a ContextMaker instance
      :param iml4: an ArrayWrapper of intensities of shape (N, R, M, P)
      :param truncation_level: the truncation level
      :param n_epsilons: the number of epsilons
      :param monitor: a Monitor instance
      :returns: a dictionary (poe, imt, rlzi) -> probabilities of shape (N, E)
      """
      # NB: instantiating truncnorm is slow and calls the infamous "doccer"
      truncnorm = scipy.stats.truncnorm(-truncation_level, truncation_level)
      epsilons = numpy.linspace(truncnorm.a, truncnorm.b, n_epsilons + 1)
      acc = cmaker.disaggregate(
          sitecol, ruptures, iml4, truncnorm, epsilons, monitor)
      return pack(acc, 'mags dists lons lats'.split())