File indexing completed on 2025-01-08 03:36:18
0001 #ifndef HeterogeneousCore_AlpakaCore_interface_alpaka_EventSetup_h
0002 #define HeterogeneousCore_AlpakaCore_interface_alpaka_EventSetup_h
0003
0004 #include "FWCore/Framework/interface/EventSetup.h"
0005 #include "FWCore/Utilities/interface/ESGetToken.h"
0006 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h"
0007 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESDeviceProductType.h"
0008 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0009
0010 namespace ALPAKA_ACCELERATOR_NAMESPACE::device {
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 class EventSetup {
0022 public:
0023 EventSetup(edm::EventSetup const& iSetup, Device const& dev) : setup_(iSetup), device_(dev) {}
0024
0025
0026
0027 operator edm::EventSetup const&() const { return setup_; }
0028
0029
0030
0031 template <typename T, typename R>
0032 T const& getData(edm::ESGetToken<T, R> const& iToken) const {
0033 return setup_.getData(iToken);
0034 }
0035
0036 template <typename T, typename R>
0037 T const& getData(device::ESGetToken<T, R> const& iToken) const {
0038 auto const& product = setup_.getData(iToken.underlyingToken());
0039 if constexpr (detail::useESProductDirectly) {
0040 return product;
0041 } else {
0042 return product.get(device_);
0043 }
0044 }
0045
0046
0047
0048 template <typename T, typename R>
0049 edm::ESHandle<T> getHandle(edm::ESGetToken<T, R> const& iToken) const {
0050 return setup_.getHandle(iToken);
0051 }
0052
0053 template <typename T, typename R>
0054 edm::ESHandle<T> getHandle(device::ESGetToken<T, R> const& iToken) const {
0055 auto handle = setup_.getHandle(iToken.underlyingToken());
0056 if constexpr (detail::useESProductDirectly) {
0057 return handle;
0058 } else {
0059 if (not handle) {
0060 return edm::ESHandle<T>(handle.whyFailedFactory());
0061 }
0062 return edm::ESHandle<T>(&handle->get(device_), handle.description());
0063 }
0064 }
0065
0066
0067
0068
0069
0070
0071
0072 private:
0073 edm::EventSetup const& setup_;
0074
0075
0076
0077 Device const device_;
0078 };
0079 }
0080
0081 #endif