File indexing completed on 2025-02-05 03:15:17
0001 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0002 #include "DataFormats/BeamSpot/interface/BeamSpotHost.h"
0003 #include "DataFormats/BeamSpot/interface/BeamSpotPOD.h"
0004 #include "DataFormats/BeamSpot/interface/alpaka/BeamSpotDevice.h"
0005 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0008 #include "FWCore/Utilities/interface/InputTag.h"
0009 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h"
0010 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/global/EDProducer.h"
0011 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0012
0013 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0014
0015 class BeamSpotDeviceProducer : public global::EDProducer<> {
0016 public:
0017 BeamSpotDeviceProducer(edm::ParameterSet const& config)
0018 : EDProducer(config),
0019 legacyToken_{consumes(config.getParameter<edm::InputTag>("src"))},
0020 deviceToken_{produces()} {}
0021
0022 void produce(edm::StreamID, device::Event& event, device::EventSetup const& setup) const override {
0023 reco::BeamSpot const& beamspot = event.get(legacyToken_);
0024
0025 BeamSpotHost hostProduct{event.queue()};
0026 hostProduct->x = beamspot.x0();
0027 hostProduct->y = beamspot.y0();
0028 hostProduct->z = beamspot.z0();
0029 hostProduct->sigmaZ = beamspot.sigmaZ();
0030 hostProduct->beamWidthX = beamspot.BeamWidthX();
0031 hostProduct->beamWidthY = beamspot.BeamWidthY();
0032 hostProduct->dxdz = beamspot.dxdz();
0033 hostProduct->dydz = beamspot.dydz();
0034 hostProduct->emittanceX = beamspot.emittanceX();
0035 hostProduct->emittanceY = beamspot.emittanceY();
0036 hostProduct->betaStar = beamspot.betaStar();
0037
0038 if constexpr (std::is_same_v<Device, alpaka::DevCpu>) {
0039 event.emplace(deviceToken_, std::move(hostProduct));
0040 } else {
0041 BeamSpotDevice deviceProduct{event.queue()};
0042 alpaka::memcpy(event.queue(), deviceProduct.buffer(), hostProduct.const_buffer());
0043 event.emplace(deviceToken_, std::move(deviceProduct));
0044 }
0045 }
0046
0047 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0048 edm::ParameterSetDescription desc;
0049 desc.add("src", edm::InputTag{});
0050 descriptions.addWithDefaultLabel(desc);
0051 }
0052
0053 private:
0054 const edm::EDGetTokenT<reco::BeamSpot> legacyToken_;
0055 const device::EDPutToken<BeamSpotDevice> deviceToken_;
0056 };
0057
0058 }
0059
0060 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0061 DEFINE_FWK_ALPAKA_MODULE(BeamSpotDeviceProducer);