docs: def init(self):
          """
          To be overridden to initialize the datasets needed by the calculation
          """
          oq = self.oqparam
          if not oq.risk_imtls:
              if self.datastore.parent:
                  oq.risk_imtls = (
                      self.datastore.parent['oqparam'].risk_imtls)
          if 'precalc' in vars(self):
              self.rlzs_assoc = self.precalc.rlzs_assoc
          elif 'csm_info' in self.datastore:
              csm_info = self.datastore['csm_info']
              if oq.hazard_calculation_id and 'gsim_logic_tree' in oq.inputs:
                  # redefine the realizations by reading the weights from the
                  # gsim_logic_tree_file that could be different from the parent
                  csm_info.gsim_lt = logictree.GsimLogicTree(
                      oq.inputs['gsim_logic_tree'], set(csm_info.trts))
              self.rlzs_assoc = csm_info.get_rlzs_assoc()
          elif hasattr(self, 'csm'):
              self.check_floating_spinning()
              self.rlzs_assoc = self.csm.info.get_rlzs_assoc()
          else:  # build a fake; used by risk-from-file calculators
              self.datastore['csm_info'] = fake = source.CompositionInfo.fake()
              self.rlzs_assoc = fake.get_rlzs_assoc()