Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-05-09 22:40:18

0001 #include <alpaka/alpaka.hpp>
0002 
0003 #include "RecoTracker/LSTCore/interface/alpaka/LST.h"
0004 
0005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0006 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0009 #include "FWCore/Utilities/interface/InputTag.h"
0010 
0011 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDGetToken.h"
0012 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h"
0013 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/Event.h"
0014 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EventSetup.h"
0015 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/stream/SynchronizingEDProducer.h"
0016 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0017 
0018 #include "RecoTracker/LST/interface/LSTOutput.h"
0019 
0020 #include "RecoTracker/Record/interface/TrackerRecoGeometryRecord.h"
0021 
0022 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0023 
0024   class LSTProducer : public stream::SynchronizingEDProducer<> {
0025   public:
0026     LSTProducer(edm::ParameterSet const& config)
0027         : SynchronizingEDProducer(config),
0028           lstInputToken_{consumes(config.getParameter<edm::InputTag>("lstInput"))},
0029           lstESToken_{esConsumes(edm::ESInputTag("", config.getParameter<std::string>("ptCutLabel")))},
0030           verbose_(config.getParameter<bool>("verbose")),
0031           ptCut_(config.getParameter<double>("ptCut")),
0032           nopLSDupClean_(config.getParameter<bool>("nopLSDupClean")),
0033           tcpLSTriplets_(config.getParameter<bool>("tcpLSTriplets")),
0034           lstOutputToken_{produces()} {}
0035 
0036     void acquire(device::Event const& event, device::EventSetup const& setup) override {
0037       // Inputs
0038       auto const& lstInputDC = event.get(lstInputToken_);
0039 
0040       auto const& lstESDeviceData = setup.getData(lstESToken_);
0041 
0042       lst_.run(event.queue(),
0043                verbose_,
0044                static_cast<float>(ptCut_),
0045                &lstESDeviceData,
0046                &lstInputDC,
0047                nopLSDupClean_,
0048                tcpLSTriplets_);
0049     }
0050 
0051     void produce(device::Event& event, device::EventSetup const&) override {
0052       // Output
0053       LSTOutput lstOutput(lst_.hits(), lst_.len(), lst_.seedIdx(), lst_.trackCandidateType());
0054       event.emplace(lstOutputToken_, std::move(lstOutput));
0055     }
0056 
0057     static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0058       edm::ParameterSetDescription desc;
0059       desc.add<edm::InputTag>("lstInput", edm::InputTag{"lstInputProducer"});
0060       desc.add<bool>("verbose", false);
0061       desc.add<double>("ptCut", 0.8);
0062       desc.add<std::string>("ptCutLabel", "0.8");
0063       desc.add<bool>("nopLSDupClean", false);
0064       desc.add<bool>("tcpLSTriplets", false);
0065       descriptions.addWithDefaultLabel(desc);
0066     }
0067 
0068   private:
0069     device::EDGetToken<lst::LSTInputDeviceCollection> lstInputToken_;
0070     device::ESGetToken<lst::LSTESData<Device>, TrackerRecoGeometryRecord> lstESToken_;
0071     const bool verbose_;
0072     const double ptCut_;
0073     const bool nopLSDupClean_;
0074     const bool tcpLSTriplets_;
0075     edm::EDPutTokenT<LSTOutput> lstOutputToken_;
0076 
0077     lst::LST lst_;
0078   };
0079 
0080 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
0081 
0082 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0083 DEFINE_FWK_ALPAKA_MODULE(LSTProducer);