docs: def store_rlz_info(self, eff_ruptures=None):
          """
          Save info about the composite source model inside the csm_info dataset
          """
          if hasattr(self, 'csm'):  # no scenario
              self.csm.info.update_eff_ruptures(eff_ruptures)
              self.rlzs_assoc = self.csm.info.get_rlzs_assoc(
                  self.oqparam.sm_lt_path)
              if not self.rlzs_assoc:
                  raise RuntimeError('Empty logic tree: too much filtering?')
              self.datastore['csm_info'] = self.csm.info
          R = len(self.rlzs_assoc.realizations)
          logging.info('There are %d realization(s)', R)
          if self.oqparam.imtls:
              self.datastore['weights'] = arr = build_weights(
                  self.rlzs_assoc.realizations, self.oqparam.imt_dt())
              self.datastore.set_attrs('weights', nbytes=arr.nbytes)
              if hasattr(self, 'hdf5cache'):  # no scenario
                  with hdf5.File(self.hdf5cache, 'r+') as cache:
                      cache['weights'] = arr
          if 'event_based' in self.oqparam.calculation_mode and R >= TWO16:
              # rlzi is 16 bit integer in the GMFs, so there is hard limit or R
              raise ValueError(
                  'The logic tree has %d realizations, the maximum '
                  'is %d' % (R, TWO16))
          elif R > 10000:
              logging.warning(
                  'The logic tree has %d realizations(!), please consider '
                  'sampling it', R)
          self.datastore.flush()