Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-05-29 23:13:07

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         : legacyToken_{consumes(config.getParameter<edm::InputTag>("src"))}, deviceToken_{produces()} {}
0019 
0020     void produce(edm::StreamID, device::Event& event, device::EventSetup const& setup) const override {
0021       reco::BeamSpot const& beamspot = event.get(legacyToken_);
0022 
0023       BeamSpotHost hostProduct{event.queue()};
0024       hostProduct->x = beamspot.x0();
0025       hostProduct->y = beamspot.y0();
0026       hostProduct->z = beamspot.z0();
0027       hostProduct->sigmaZ = beamspot.sigmaZ();
0028       hostProduct->beamWidthX = beamspot.BeamWidthX();
0029       hostProduct->beamWidthY = beamspot.BeamWidthY();
0030       hostProduct->dxdz = beamspot.dxdz();
0031       hostProduct->dydz = beamspot.dydz();
0032       hostProduct->emittanceX = beamspot.emittanceX();
0033       hostProduct->emittanceY = beamspot.emittanceY();
0034       hostProduct->betaStar = beamspot.betaStar();
0035 
0036       if constexpr (std::is_same_v<Device, alpaka::DevCpu>) {
0037         event.emplace(deviceToken_, std::move(hostProduct));
0038       } else {
0039         BeamSpotDevice deviceProduct{event.queue()};
0040         alpaka::memcpy(event.queue(), deviceProduct.buffer(), hostProduct.const_buffer());
0041         event.emplace(deviceToken_, std::move(deviceProduct));
0042       }
0043     }
0044 
0045     static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0046       edm::ParameterSetDescription desc;
0047       desc.add("src", edm::InputTag{});
0048       descriptions.addWithDefaultLabel(desc);
0049     }
0050 
0051   private:
0052     const edm::EDGetTokenT<reco::BeamSpot> legacyToken_;
0053     const device::EDPutToken<BeamSpotDevice> deviceToken_;
0054   };
0055 
0056 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
0057 
0058 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0059 DEFINE_FWK_ALPAKA_MODULE(BeamSpotDeviceProducer);