Back to home page

Project CMSSW displayed by LXR

 
 

    


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 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
0059 
0060 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0061 DEFINE_FWK_ALPAKA_MODULE(BeamSpotDeviceProducer);