docs: def get_getter(self, kind, sid):
          """
          :param kind: 'poe' or 'gmf'
          :param sid: a site ID
          :returns: a PmapGetter or GmfDataGetter
          """
          hdf5cache = getattr(self, 'hdf5cache', None)
          if hdf5cache:
              dstore = hdf5cache
          elif (self.oqparam.hazard_calculation_id and
                'gmf_data' not in self.datastore):
              # 'gmf_data' in self.datastore happens for ShakeMap calculations
              self.datastore.parent.close()  # make sure it is closed
              dstore = self.datastore.parent
          else:
              dstore = self.datastore
          if kind == 'poe':  # hcurves, shape (R, N)
              getter = getters.PmapGetter(dstore, self.rlzs_assoc, [sid])
          else:  # gmf
              getter = getters.GmfDataGetter(dstore, [sid], self.R)
          if dstore is self.datastore:
              getter.init()
          return getter