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
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
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 }
0081
0082 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0083 DEFINE_FWK_ALPAKA_MODULE(LSTProducer);