diff --git a/DataFormats/Common/src/classes_def.xml b/DataFormats/Common/src/classes_def.xml index 73c999093aade..87f037e09d5c0 100644 --- a/DataFormats/Common/src/classes_def.xml +++ b/DataFormats/Common/src/classes_def.xml @@ -208,6 +208,7 @@ + diff --git a/RecoTracker/LST/interface/LSTOutput.h b/RecoTracker/LST/interface/LSTOutput.h deleted file mode 100644 index f50000b83cf21..0000000000000 --- a/RecoTracker/LST/interface/LSTOutput.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef RecoTracker_LST_interface_LSTOutput_h -#define RecoTracker_LST_interface_LSTOutput_h - -#include -#include - -#include "RecoTracker/LSTCore/interface/Common.h" - -class LSTOutput { -public: - LSTOutput() = default; - LSTOutput(std::vector> const hitIdx, - std::vector const len, - std::vector const seedIdx, - std::vector const trackCandidateType) - : hitIdx_(std::move(hitIdx)), - len_(std::move(len)), - seedIdx_(std::move(seedIdx)), - trackCandidateType_(std::move(trackCandidateType)) {} - - using LSTTCType = lst::LSTObjType; - - // Hit indices of each of the LST track candidates. - std::vector> const& hitIdx() const { return hitIdx_; } - // Number of hits of each of the LST track candidates. - std::vector const& len() const { return len_; } - // Index of the pixel track associated to each of the LST track candidates. - // If not associated to a pixel track, which is the case for T5s, it defaults to -1. - std::vector const& seedIdx() const { return seedIdx_; } - // LSTTCType from RecoTracker/LSTCore/interface/Common.h - std::vector const& trackCandidateType() const { return trackCandidateType_; } - -private: - std::vector> hitIdx_; - std::vector len_; - std::vector seedIdx_; - std::vector trackCandidateType_; -}; - -#endif diff --git a/RecoTracker/LST/plugins/BuildFile.xml b/RecoTracker/LST/plugins/BuildFile.xml index f30edfb62694a..b987ef730c0f9 100644 --- a/RecoTracker/LST/plugins/BuildFile.xml +++ b/RecoTracker/LST/plugins/BuildFile.xml @@ -39,4 +39,3 @@ - diff --git a/RecoTracker/LST/plugins/LSTOutputConverter.cc b/RecoTracker/LST/plugins/LSTOutputConverter.cc index 73eac64f4acc3..fdf68189f4a14 100644 --- a/RecoTracker/LST/plugins/LSTOutputConverter.cc +++ b/RecoTracker/LST/plugins/LSTOutputConverter.cc @@ -14,7 +14,7 @@ #include "MagneticField/Engine/interface/MagneticField.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "RecoTracker/LSTCore/interface/LSTInputHostCollection.h" -#include "RecoTracker/LST/interface/LSTOutput.h" +#include "RecoTracker/LSTCore/interface/TrackCandidatesHostCollection.h" #include "RecoTracker/TkSeedingLayers/interface/SeedingHitSet.h" #include "RecoTracker/TkSeedGenerator/interface/SeedCreator.h" @@ -35,7 +35,7 @@ class LSTOutputConverter : public edm::stream::EDProducer<> { private: void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; - const edm::EDGetTokenT lstOutputToken_; + const edm::EDGetTokenT lstOutputToken_; const edm::EDGetTokenT lstInputToken_; const edm::EDGetTokenT lstPixelSeedToken_; const bool includeT5s_; @@ -120,41 +120,55 @@ void LSTOutputConverter::produce(edm::Event& iEvent, const edm::EventSetup& iSet auto const& propOppo = iSetup.getData(propagatorOppositeToken_); auto const& tracker = iSetup.getData(tGeomToken_); - // Vector definitions - std::vector> const& lstTC_hitIdx = lstOutput.hitIdx(); - std::vector const& lstTC_len = lstOutput.len(); - std::vector const& lstTC_seedIdx = lstOutput.seedIdx(); - std::vector const& lstTC_trackCandidateType = lstOutput.trackCandidateType(); + auto lstOutput_view = lstOutput.const_view(); + unsigned int nTrackCandidates = lstOutput_view.nTrackCandidates(); TrajectorySeedCollection outputTS, outputpLSTS; - outputTS.reserve(lstTC_len.size()); - outputpLSTS.reserve(lstTC_len.size()); + outputTS.reserve(nTrackCandidates); + outputpLSTS.reserve(nTrackCandidates); TrackCandidateCollection outputTC, outputpTC, outputT5TC, outputNopLSTC, outputpTTC, outputpLSTC; - outputTC.reserve(lstTC_len.size()); - outputpTC.reserve(lstTC_len.size()); - outputT5TC.reserve(lstTC_len.size()); - outputNopLSTC.reserve(lstTC_len.size()); - outputpTTC.reserve(lstTC_len.size()); - outputpLSTC.reserve(lstTC_len.size()); + outputTC.reserve(nTrackCandidates); + outputpTC.reserve(nTrackCandidates); + outputT5TC.reserve(nTrackCandidates); + outputNopLSTC.reserve(nTrackCandidates); + outputpTTC.reserve(nTrackCandidates); + outputpLSTC.reserve(nTrackCandidates); auto OTHits = lstInputHC.const_view().hits(); - LogDebug("LSTOutputConverter") << "lstTC size " << lstTC_len.size(); - for (unsigned int i = 0; i < lstTC_len.size(); i++) { - LogDebug("LSTOutputConverter") << " cand " << i << " " << lstTC_len[i] << " " << lstTC_seedIdx[i]; + LogDebug("LSTOutputConverter") << "nTrackCandidates " << nTrackCandidates; + for (unsigned int i = 0; i < nTrackCandidates; i++) { + LogDebug("LSTOutputConverter") << " cand " << i << " " << lstOutput_view.trackCandidateType()[i] << " " + << lstOutput_view.pixelSeedIndex()[i]; TrajectorySeed seed; - if (lstTC_trackCandidateType[i] != LSTOutput::LSTTCType::T5) - seed = pixelSeeds[lstTC_seedIdx[i]]; + if (lstOutput_view.trackCandidateType()[i] != lst::LSTObjType::T5) + seed = pixelSeeds[lstOutput_view.pixelSeedIndex()[i]]; edm::OwnVector recHits; - if (lstTC_trackCandidateType[i] != LSTOutput::LSTTCType::T5) { + if (lstOutput_view.trackCandidateType()[i] != lst::LSTObjType::T5) { for (auto const& hit : seed.recHits()) recHits.push_back(hit.clone()); } - unsigned int const nPixelHits = lstTC_trackCandidateType[i] == LSTOutput::LSTTCType::T5 ? 0 : recHits.size(); - for (unsigned int j = nPixelHits; j < lstTC_hitIdx[i].size(); j++) - recHits.push_back(OTHits[lstTC_hitIdx[i][j]]->clone()); + // pixel-seeded TCs from LST always have 4 pixel hits + unsigned int const nPixelHits = lstOutput_view.trackCandidateType()[i] == lst::LSTObjType::T5 ? 0 : 4; + unsigned int nHits = 0; + switch (lstOutput_view.trackCandidateType()[i]) { + case lst::LSTObjType::T5: + nHits = lst::Params_T5::kHits; + break; + case lst::LSTObjType::pT3: + nHits = lst::Params_pT3::kHits; + break; + case lst::LSTObjType::pT5: + nHits = lst::Params_pT5::kHits; + break; + case lst::LSTObjType::pLS: + nHits = lst::Params_pLS::kHits; + break; + } + for (unsigned int j = nPixelHits; j < nHits; j++) + recHits.push_back(OTHits[lstOutput_view.hitIndices()[i][j]]->clone()); recHits.sort([](const auto& a, const auto& b) { const auto asub = a.det()->subDetector(); @@ -177,33 +191,34 @@ void LSTOutputConverter::produce(edm::Event& iEvent, const edm::EventSetup& iSet }); TrajectorySeedCollection seeds; - if (lstTC_trackCandidateType[i] != LSTOutput::LSTTCType::pLS) { + if (lstOutput_view.trackCandidateType()[i] != lst::LSTObjType::pLS) { // Construct a full-length TrajectorySeed always for T5s, // only when required by a flag for other pT objects. - if (includeNonpLSTSs_ || lstTC_trackCandidateType[i] == LSTOutput::LSTTCType::T5) { + if (includeNonpLSTSs_ || lstOutput_view.trackCandidateType()[i] == lst::LSTObjType::T5) { using Hit = SeedingHitSet::ConstRecHitPointer; std::vector hitsForSeed; - hitsForSeed.reserve(lstTC_len[i]); - int nHits = 0; + hitsForSeed.reserve(nHits); + int n = 0; for (auto const& hit : recHits) { - if (lstTC_trackCandidateType[i] == LSTOutput::LSTTCType::T5) { + if (lstOutput_view.trackCandidateType()[i] == lst::LSTObjType::T5) { auto hType = tracker.getDetectorType(hit.geographicalId()); - if (hType != TrackerGeometry::ModuleType::Ph2PSP && nHits < 2) + if (hType != TrackerGeometry::ModuleType::Ph2PSP && n < 2) continue; // the first two should be P } hitsForSeed.emplace_back(dynamic_cast(&hit)); - nHits++; + n++; } GlobalTrackingRegion region; seedCreator_->init(region, iSetup, nullptr); seedCreator_->makeSeed(seeds, hitsForSeed); if (seeds.empty()) { edm::LogInfo("LSTOutputConverter") - << "failed to convert a LST object to a seed" << i << " " << lstTC_len[i] << " " << lstTC_seedIdx[i]; - if (lstTC_trackCandidateType[i] == LSTOutput::LSTTCType::T5) + << "failed to convert a LST object to a seed" << i << " " << lstOutput_view.trackCandidateType()[i] << " " + << lstOutput_view.pixelSeedIndex()[i]; + if (lstOutput_view.trackCandidateType()[i] == lst::LSTObjType::T5) continue; } - if (lstTC_trackCandidateType[i] == LSTOutput::LSTTCType::T5) + if (lstOutput_view.trackCandidateType()[i] == lst::LSTObjType::T5) seed = seeds[0]; auto trajectorySeed = (seeds.empty() ? seed : seeds[0]); @@ -229,7 +244,7 @@ void LSTOutputConverter::produce(edm::Event& iEvent, const edm::EventSetup& iSet PTrajectoryStateOnDet st = trajectoryStateTransform::persistentState(tsosPair.first, recHits[0].det()->geographicalId().rawId()); - if (lstTC_trackCandidateType[i] == LSTOutput::LSTTCType::T5) { + if (lstOutput_view.trackCandidateType()[i] == lst::LSTObjType::T5) { if (!includeT5s_) { continue; } else { @@ -242,7 +257,7 @@ void LSTOutputConverter::produce(edm::Event& iEvent, const edm::EventSetup& iSet auto tc = TrackCandidate(recHits, seed, st); outputTC.emplace_back(tc); outputpTC.emplace_back(tc); - if (lstTC_trackCandidateType[i] != LSTOutput::LSTTCType::pLS) { + if (lstOutput_view.trackCandidateType()[i] != lst::LSTObjType::pLS) { outputNopLSTC.emplace_back(tc); outputpTTC.emplace_back(tc); } else { @@ -251,8 +266,9 @@ void LSTOutputConverter::produce(edm::Event& iEvent, const edm::EventSetup& iSet } } else { edm::LogInfo("LSTOutputConverter") << "Failed to make a candidate initial state. Seed state is " << tsos - << " TC cand " << i << " " << lstTC_len[i] << " " << lstTC_seedIdx[i] - << " first hit " << recHits.front().globalPosition() << " last hit " + << " TC cand " << i << " " << lstOutput_view.pixelSeedIndex()[i] << " " + << lstOutput_view.pixelSeedIndex()[i] << " first hit " + << recHits.front().globalPosition() << " last hit " << recHits.back().globalPosition(); } } @@ -271,4 +287,4 @@ void LSTOutputConverter::produce(edm::Event& iEvent, const edm::EventSetup& iSet iEvent.emplace(seedStopInfoPutToken_, std::move(outputSeedStopInfo)); //dummy stop info } -DEFINE_FWK_MODULE(LSTOutputConverter); +DEFINE_FWK_MODULE(LSTOutputConverter); \ No newline at end of file diff --git a/RecoTracker/LST/plugins/alpaka/LSTProducer.cc b/RecoTracker/LST/plugins/alpaka/LSTProducer.cc index 48f4ac9bb2366..d9ccd51cca5fd 100644 --- a/RecoTracker/LST/plugins/alpaka/LSTProducer.cc +++ b/RecoTracker/LST/plugins/alpaka/LSTProducer.cc @@ -12,19 +12,19 @@ #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/Event.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EventSetup.h" -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/stream/SynchronizingEDProducer.h" +#include "HeterogeneousCore/AlpakaCore/interface/alpaka/global/EDProducer.h" #include "HeterogeneousCore/AlpakaInterface/interface/config.h" -#include "RecoTracker/LST/interface/LSTOutput.h" +#include "RecoTracker/LSTCore/interface/alpaka/TrackCandidatesDeviceCollection.h" #include "RecoTracker/Record/interface/TrackerRecoGeometryRecord.h" namespace ALPAKA_ACCELERATOR_NAMESPACE { - class LSTProducer : public stream::SynchronizingEDProducer<> { + class LSTProducer : public global::EDProducer<> { public: LSTProducer(edm::ParameterSet const& config) - : SynchronizingEDProducer(config), + : EDProducer(config), lstInputToken_{consumes(config.getParameter("lstInput"))}, lstESToken_{esConsumes(edm::ESInputTag("", config.getParameter("ptCutLabel")))}, verbose_(config.getParameter("verbose")), @@ -33,25 +33,23 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { tcpLSTriplets_(config.getParameter("tcpLSTriplets")), lstOutputToken_{produces()} {} - void acquire(device::Event const& event, device::EventSetup const& setup) override { + void produce(edm::StreamID sid, device::Event& iEvent, const device::EventSetup& iSetup) const override { + lst::LST lst; // Inputs - auto const& lstInputDC = event.get(lstInputToken_); + auto const& lstInputDC = iEvent.get(lstInputToken_); + auto const& lstESDeviceData = iSetup.getData(lstESToken_); - auto const& lstESDeviceData = setup.getData(lstESToken_); + lst.run(iEvent.queue(), + verbose_, + static_cast(ptCut_), + &lstESDeviceData, + &lstInputDC, + nopLSDupClean_, + tcpLSTriplets_); - lst_.run(event.queue(), - verbose_, - static_cast(ptCut_), - &lstESDeviceData, - &lstInputDC, - nopLSDupClean_, - tcpLSTriplets_); - } - - void produce(device::Event& event, device::EventSetup const&) override { // Output - LSTOutput lstOutput(lst_.hits(), lst_.len(), lst_.seedIdx(), lst_.trackCandidateType()); - event.emplace(lstOutputToken_, std::move(lstOutput)); + auto lstTrackCandidates = lst.getTrackCandidates(); + iEvent.emplace(lstOutputToken_, std::move(*lstTrackCandidates.release())); } static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -66,15 +64,13 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { } private: - device::EDGetToken lstInputToken_; - device::ESGetToken, TrackerRecoGeometryRecord> lstESToken_; + const device::EDGetToken lstInputToken_; + const device::ESGetToken, TrackerRecoGeometryRecord> lstESToken_; const bool verbose_; const double ptCut_; const bool nopLSDupClean_; const bool tcpLSTriplets_; - edm::EDPutTokenT lstOutputToken_; - - lst::LST lst_; + const device::EDPutToken lstOutputToken_; }; } // namespace ALPAKA_ACCELERATOR_NAMESPACE diff --git a/RecoTracker/LST/src/classes.h b/RecoTracker/LST/src/classes.h deleted file mode 100644 index 5cf7a0760d36d..0000000000000 --- a/RecoTracker/LST/src/classes.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef RecoTracker_LST_classes_h -#define RecoTracker_LST_classes_h - -#include "DataFormats/Common/interface/Wrapper.h" -#include "RecoTracker/LST/interface/LSTOutput.h" - -#endif diff --git a/RecoTracker/LST/src/classes_def.xml b/RecoTracker/LST/src/classes_def.xml deleted file mode 100644 index 7bb6c25d07968..0000000000000 --- a/RecoTracker/LST/src/classes_def.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/RecoTracker/LSTCore/interface/Common.h b/RecoTracker/LSTCore/interface/Common.h index d79154d24c2fd..b383f6aea0e2b 100644 --- a/RecoTracker/LSTCore/interface/Common.h +++ b/RecoTracker/LSTCore/interface/Common.h @@ -18,7 +18,7 @@ namespace lst { enum PixelType : int8_t { kInvalid = -1, kHighPt = 0, kLowPtPosCurv = 1, kLowPtNegCurv = 2 }; // Named types for LST objects - enum LSTObjType { T5 = 4, pT3 = 5, pT5 = 7, pLS = 8 }; + enum LSTObjType : int8_t { T5 = 4, pT3 = 5, pT5 = 7, pLS = 8 }; constexpr unsigned int max_blocks = 80; constexpr unsigned int max_connected_modules = 40; @@ -87,6 +87,12 @@ namespace lst { using ArrayU16xLayers = edm::StdArray; using ArrayUxHits = edm::StdArray; }; + struct Params_TC { + static constexpr int kLayers = 7, kHits = 14; + using ArrayU8xLayers = edm::StdArray; + using ArrayU16xLayers = edm::StdArray; + using ArrayUxHits = edm::StdArray; + }; using ArrayIx2 = edm::StdArray; using ArrayUx2 = edm::StdArray; diff --git a/RecoTracker/LSTCore/interface/TrackCandidatesHostCollection.h b/RecoTracker/LSTCore/interface/TrackCandidatesHostCollection.h index 3ffd2bedf945e..b742f08eaf58f 100644 --- a/RecoTracker/LSTCore/interface/TrackCandidatesHostCollection.h +++ b/RecoTracker/LSTCore/interface/TrackCandidatesHostCollection.h @@ -5,6 +5,7 @@ #include "DataFormats/Portable/interface/PortableHostCollection.h" namespace lst { - using TrackCandidatesHostCollection = PortableHostCollection; + using TrackCandidatesBaseHostCollection = PortableHostCollection; + using TrackCandidatesExtendedHostCollection = PortableHostCollection; } // namespace lst #endif diff --git a/RecoTracker/LSTCore/interface/TrackCandidatesSoA.h b/RecoTracker/LSTCore/interface/TrackCandidatesSoA.h index b1fdecf75526a..86256e2b8be0d 100644 --- a/RecoTracker/LSTCore/interface/TrackCandidatesSoA.h +++ b/RecoTracker/LSTCore/interface/TrackCandidatesSoA.h @@ -8,25 +8,32 @@ #include "RecoTracker/LSTCore/interface/Common.h" namespace lst { - GENERATE_SOA_LAYOUT(TrackCandidatesSoALayout, - SOA_COLUMN(short, trackCandidateType), // 4-T5 5-pT3 7-pT5 8-pLS - SOA_COLUMN(unsigned int, directObjectIndices), // direct indices to each type containers - SOA_COLUMN(ArrayUx2, objectIndices), // tracklet and triplet indices - SOA_COLUMN(Params_pT5::ArrayU8xLayers, logicalLayers), // - SOA_COLUMN(Params_pT5::ArrayUxHits, hitIndices), // - SOA_COLUMN(int, pixelSeedIndex), // - SOA_COLUMN(Params_pT5::ArrayU16xLayers, lowerModuleIndices), // - SOA_COLUMN(FPX, centerX), // - SOA_COLUMN(FPX, centerY), // - SOA_COLUMN(FPX, radius), // - SOA_SCALAR(unsigned int, nTrackCandidates), // - SOA_SCALAR(unsigned int, nTrackCandidatespT3), // - SOA_SCALAR(unsigned int, nTrackCandidatespT5), // - SOA_SCALAR(unsigned int, nTrackCandidatespLS), // - SOA_SCALAR(unsigned int, nTrackCandidatesT5)) // + // Minimal data content needed for running tracking downstream + GENERATE_SOA_LAYOUT(TrackCandidatesBaseSoALayout, + SOA_COLUMN(Params_TC::ArrayUxHits, hitIndices), + SOA_COLUMN(unsigned int, pixelSeedIndex), + SOA_COLUMN(LSTObjType, trackCandidateType), + SOA_SCALAR(unsigned int, nTrackCandidates)) - using TrackCandidatesSoA = TrackCandidatesSoALayout<>; - using TrackCandidates = TrackCandidatesSoA::View; - using TrackCandidatesConst = TrackCandidatesSoA::ConstView; + GENERATE_SOA_LAYOUT(TrackCandidatesExtendedSoALayout, + SOA_COLUMN(unsigned int, directObjectIndices), // direct indices to each type containers + SOA_COLUMN(ArrayUx2, objectIndices), // tracklet and triplet indices + SOA_COLUMN(Params_TC::ArrayU8xLayers, logicalLayers), + SOA_COLUMN(Params_TC::ArrayU16xLayers, lowerModuleIndices), + SOA_COLUMN(FPX, centerX), + SOA_COLUMN(FPX, centerY), + SOA_COLUMN(FPX, radius), + SOA_SCALAR(unsigned int, nTrackCandidatespT3), + SOA_SCALAR(unsigned int, nTrackCandidatespT5), + SOA_SCALAR(unsigned int, nTrackCandidatespLS), + SOA_SCALAR(unsigned int, nTrackCandidatesT5)) + + using TrackCandidatesBaseSoA = TrackCandidatesBaseSoALayout<>; + using TrackCandidatesExtendedSoA = TrackCandidatesExtendedSoALayout<>; + + using TrackCandidatesBase = TrackCandidatesBaseSoA::View; + using TrackCandidatesBaseConst = TrackCandidatesBaseSoA::ConstView; + using TrackCandidatesExtended = TrackCandidatesExtendedSoA::View; + using TrackCandidatesExtendedConst = TrackCandidatesExtendedSoA::ConstView; } // namespace lst #endif diff --git a/RecoTracker/LSTCore/interface/alpaka/LST.h b/RecoTracker/LSTCore/interface/alpaka/LST.h index ebaae0f2c1a8a..74f7f513f4a17 100644 --- a/RecoTracker/LSTCore/interface/alpaka/LST.h +++ b/RecoTracker/LSTCore/interface/alpaka/LST.h @@ -4,6 +4,7 @@ #include "RecoTracker/LSTCore/interface/alpaka/Common.h" #include "RecoTracker/LSTCore/interface/LSTESData.h" #include "RecoTracker/LSTCore/interface/alpaka/LSTInputDeviceCollection.h" +#include "RecoTracker/LSTCore/interface/alpaka/TrackCandidatesDeviceCollection.h" #include #include @@ -23,19 +24,13 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { LSTInputDeviceCollection const* lstInputDC, bool no_pls_dupclean, bool tc_pls_triplets); - std::vector> const& hits() const { return out_tc_hitIdxs_; } - std::vector const& len() const { return out_tc_len_; } - std::vector const& seedIdx() const { return out_tc_seedIdx_; } - std::vector const& trackCandidateType() const { return out_tc_trackCandidateType_; } + std::unique_ptr getTrackCandidates() { + return std::move(trackCandidatesBaseDC_); + } private: - void getOutput(LSTEvent& event); - - // Output vectors - std::vector> out_tc_hitIdxs_; - std::vector out_tc_len_; - std::vector out_tc_seedIdx_; - std::vector out_tc_trackCandidateType_; + // Output collection + std::unique_ptr trackCandidatesBaseDC_; }; } // namespace ALPAKA_ACCELERATOR_NAMESPACE::lst diff --git a/RecoTracker/LSTCore/interface/alpaka/TrackCandidatesDeviceCollection.h b/RecoTracker/LSTCore/interface/alpaka/TrackCandidatesDeviceCollection.h index 387ca5a108453..f2da93cec251f 100644 --- a/RecoTracker/LSTCore/interface/alpaka/TrackCandidatesDeviceCollection.h +++ b/RecoTracker/LSTCore/interface/alpaka/TrackCandidatesDeviceCollection.h @@ -7,6 +7,7 @@ #include "RecoTracker/LSTCore/interface/TrackCandidatesSoA.h" namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { - using TrackCandidatesDeviceCollection = PortableCollection; + using TrackCandidatesBaseDeviceCollection = PortableCollection; + using TrackCandidatesExtendedDeviceCollection = PortableCollection; } // namespace ALPAKA_ACCELERATOR_NAMESPACE::lst #endif diff --git a/RecoTracker/LSTCore/src/alpaka/LST.cc b/RecoTracker/LSTCore/src/alpaka/LST.cc index 8d6a0c99f3995..6a0c517bf1bfa 100644 --- a/RecoTracker/LSTCore/src/alpaka/LST.cc +++ b/RecoTracker/LSTCore/src/alpaka/LST.cc @@ -8,68 +8,6 @@ using namespace ALPAKA_ACCELERATOR_NAMESPACE::lst; #include "Math/VectorUtil.h" using XYZVector = ROOT::Math::XYZVector; -namespace { - using namespace ALPAKA_ACCELERATOR_NAMESPACE::lst; - std::vector getHitIdxs(short trackCandidateType, - Params_pT5::ArrayUxHits const& tcHitIndices, - unsigned int const* hitIndices) { - std::vector hits; - - unsigned int maxNHits = 0; - if (trackCandidateType == LSTObjType::pT5) - maxNHits = Params_pT5::kHits; - else if (trackCandidateType == LSTObjType::pT3) - maxNHits = Params_pT3::kHits; - else if (trackCandidateType == LSTObjType::T5) - maxNHits = Params_T5::kHits; - else if (trackCandidateType == LSTObjType::pLS) - maxNHits = Params_pLS::kHits; - - for (unsigned int i = 0; i < maxNHits; i++) { - unsigned int hitIdxDev = tcHitIndices[i]; - unsigned int hitIdx = - (trackCandidateType == LSTObjType::pLS) - ? hitIdxDev - : hitIndices[hitIdxDev]; // Hit indices are stored differently in the standalone for pLS. - - // For p objects, the 3rd and 4th hit maybe the same, - // due to the way pLS hits are stored in the standalone. - // This is because pixel seeds can be either triplets or quadruplets. - if (trackCandidateType != LSTObjType::T5 && hits.size() == 3 && - hits.back() == hitIdx) // Remove duplicate 4th hits. - continue; - - hits.push_back(hitIdx); - } - - return hits; - } - -} // namespace - -void LST::getOutput(LSTEvent& event) { - out_tc_hitIdxs_.clear(); - out_tc_len_.clear(); - out_tc_seedIdx_.clear(); - out_tc_trackCandidateType_.clear(); - - auto const hitsBase = event.getTrimmedHitsBase(false); // sync on next line - auto const& trackCandidates = event.getTrackCandidates(/*inCMSSW*/ true, /*sync*/ true); - - unsigned int nTrackCandidates = trackCandidates.nTrackCandidates(); - - for (unsigned int idx = 0; idx < nTrackCandidates; idx++) { - short trackCandidateType = trackCandidates.trackCandidateType()[idx]; - std::vector hit_idx = - getHitIdxs(trackCandidateType, trackCandidates.hitIndices()[idx], hitsBase.idxs()); - - out_tc_hitIdxs_.push_back(hit_idx); - out_tc_len_.push_back(hit_idx.size()); - out_tc_seedIdx_.push_back(trackCandidates.pixelSeedIndex()[idx]); - out_tc_trackCandidateType_.push_back(trackCandidateType); - } -} - void LST::run(Queue& queue, bool verbose, float const ptCut, @@ -177,5 +115,5 @@ void LST::run(Queue& queue, printf(" # of T5 TrackCandidates produced: %d\n", event.getNumberOfT5TrackCandidates()); } - getOutput(event); + trackCandidatesBaseDC_ = event.releaseTrackCandidatesBaseDeviceCollection(); } diff --git a/RecoTracker/LSTCore/src/alpaka/LSTEvent.dev.cc b/RecoTracker/LSTCore/src/alpaka/LSTEvent.dev.cc index f1bf4fc599b02..0a89f0a943c20 100644 --- a/RecoTracker/LSTCore/src/alpaka/LSTEvent.dev.cc +++ b/RecoTracker/LSTCore/src/alpaka/LSTEvent.dev.cc @@ -62,7 +62,8 @@ void LSTEvent::resetEventSync() { pixelSegmentsDC_.reset(); tripletsDC_.reset(); quintupletsDC_.reset(); - trackCandidatesDC_.reset(); + trackCandidatesBaseDC_.reset(); + trackCandidatesExtendedDC_.reset(); pixelTripletsDC_.reset(); pixelQuintupletsDC_.reset(); @@ -76,7 +77,8 @@ void LSTEvent::resetEventSync() { quintupletsHC_.reset(); pixelTripletsHC_.reset(); pixelQuintupletsHC_.reset(); - trackCandidatesHC_.reset(); + trackCandidatesBaseHC_.reset(); + trackCandidatesExtendedHC_.reset(); modulesHC_.reset(); } @@ -433,10 +435,12 @@ void LSTEvent::createTriplets() { } void LSTEvent::createTrackCandidates(bool no_pls_dupclean, bool tc_pls_triplets) { - if (!trackCandidatesDC_) { - trackCandidatesDC_.emplace(n_max_nonpixel_track_candidates + n_max_pixel_track_candidates, queue_); - auto buf = trackCandidatesDC_->buffer(); - alpaka::memset(queue_, buf, 0u); + if (!trackCandidatesBaseDC_) { + trackCandidatesBaseDC_.emplace(n_max_nonpixel_track_candidates + n_max_pixel_track_candidates, queue_); + trackCandidatesBaseDC_->zeroInitialise(queue_); + + trackCandidatesExtendedDC_.emplace(n_max_nonpixel_track_candidates + n_max_pixel_track_candidates, queue_); + trackCandidatesExtendedDC_->zeroInitialise(queue_); } auto const crossCleanpT3_workDiv = cms::alpakatools::make_workdiv({20, 4}, {64, 16}); @@ -457,7 +461,8 @@ void LSTEvent::createTrackCandidates(bool no_pls_dupclean, bool tc_pls_triplets) AddpT3asTrackCandidates{}, nLowerModules_, pixelTripletsDC_->const_view(), - trackCandidatesDC_->view(), + trackCandidatesBaseDC_->view(), + trackCandidatesExtendedDC_->view(), lstInputDC_->const_view(), rangesDC_->const_view()); @@ -503,7 +508,8 @@ void LSTEvent::createTrackCandidates(bool no_pls_dupclean, bool tc_pls_triplets) nLowerModules_, quintupletsDC_->const_view(), quintupletsDC_->const_view(), - trackCandidatesDC_->view(), + trackCandidatesBaseDC_->view(), + trackCandidatesExtendedDC_->view(), rangesDC_->const_view()); if (!no_pls_dupclean) { @@ -527,7 +533,8 @@ void LSTEvent::createTrackCandidates(bool no_pls_dupclean, bool tc_pls_triplets) modules_.const_view(), rangesDC_->const_view(), pixelTripletsDC_->const_view(), - trackCandidatesDC_->view(), + trackCandidatesBaseDC_->view(), + trackCandidatesExtendedDC_->view(), segmentsDC_->const_view(), segmentsDC_->const_view(), lstInputDC_->const_view(), @@ -542,7 +549,8 @@ void LSTEvent::createTrackCandidates(bool no_pls_dupclean, bool tc_pls_triplets) addpLSasTrackCandidate_workDiv, AddpLSasTrackCandidate{}, nLowerModules_, - trackCandidatesDC_->view(), + trackCandidatesBaseDC_->view(), + trackCandidatesExtendedDC_->view(), segmentsDC_->const_view(), lstInputDC_->const_view(), pixelSegmentsDC_->const_view(), @@ -555,16 +563,16 @@ void LSTEvent::createTrackCandidates(bool no_pls_dupclean, bool tc_pls_triplets) auto nTrackCanT5Host_buf = cms::alpakatools::make_host_buffer(queue_); alpaka::memcpy(queue_, nTrackCanpT5Host_buf, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidatespT5())); + cms::alpakatools::make_device_view(queue_, (*trackCandidatesExtendedDC_)->nTrackCandidatespT5())); alpaka::memcpy(queue_, nTrackCanpT3Host_buf, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidatespT3())); + cms::alpakatools::make_device_view(queue_, (*trackCandidatesExtendedDC_)->nTrackCandidatespT3())); alpaka::memcpy(queue_, nTrackCanpLSHost_buf, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidatespLS())); + cms::alpakatools::make_device_view(queue_, (*trackCandidatesExtendedDC_)->nTrackCandidatespLS())); alpaka::memcpy(queue_, nTrackCanT5Host_buf, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidatesT5())); + cms::alpakatools::make_device_view(queue_, (*trackCandidatesExtendedDC_)->nTrackCandidatesT5())); alpaka::wait(queue_); // wait to get the values before using them auto nTrackCandidatespT5 = *nTrackCanpT5Host_buf.data(); @@ -818,10 +826,12 @@ void LSTEvent::createPixelQuintuplets() { cms::alpakatools::make_device_view(queue_, (*pixelQuintupletsDC_)->totOccupancyPixelQuintuplets()); alpaka::memset(queue_, totOccupancyPixelQuintuplets_view, 0u); } - if (!trackCandidatesDC_) { - trackCandidatesDC_.emplace(n_max_nonpixel_track_candidates + n_max_pixel_track_candidates, queue_); - auto buf = trackCandidatesDC_->buffer(); - alpaka::memset(queue_, buf, 0u); + if (!trackCandidatesBaseDC_) { + trackCandidatesBaseDC_.emplace(n_max_nonpixel_track_candidates + n_max_pixel_track_candidates, queue_); + trackCandidatesBaseDC_->zeroInitialise(queue_); + + trackCandidatesExtendedDC_.emplace(n_max_nonpixel_track_candidates + n_max_pixel_track_candidates, queue_); + trackCandidatesExtendedDC_->zeroInitialise(queue_); } SegmentsOccupancy segmentsOccupancy = segmentsDC_->view(); PixelSeedsConst pixelSeeds = lstInputDC_->const_view(); @@ -936,7 +946,8 @@ void LSTEvent::createPixelQuintuplets() { AddpT5asTrackCandidate{}, nLowerModules_, pixelQuintupletsDC_->const_view(), - trackCandidatesDC_->view(), + trackCandidatesBaseDC_->view(), + trackCandidatesExtendedDC_->view(), lstInputDC_->const_view(), rangesDC_->const_view()); @@ -1211,7 +1222,7 @@ int LSTEvent::getNumberOfTrackCandidates() { alpaka::memcpy(queue_, nTrackCandidates_buf_h, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidates())); + cms::alpakatools::make_device_view(queue_, (*trackCandidatesBaseDC_)->nTrackCandidates())); alpaka::wait(queue_); return *nTrackCandidates_buf_h.data(); @@ -1222,7 +1233,7 @@ int LSTEvent::getNumberOfPT5TrackCandidates() { alpaka::memcpy(queue_, nTrackCandidatesPT5_buf_h, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidatespT5())); + cms::alpakatools::make_device_view(queue_, (*trackCandidatesExtendedDC_)->nTrackCandidatespT5())); alpaka::wait(queue_); return *nTrackCandidatesPT5_buf_h.data(); @@ -1233,7 +1244,7 @@ int LSTEvent::getNumberOfPT3TrackCandidates() { alpaka::memcpy(queue_, nTrackCandidatesPT3_buf_h, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidatespT3())); + cms::alpakatools::make_device_view(queue_, (*trackCandidatesExtendedDC_)->nTrackCandidatespT3())); alpaka::wait(queue_); return *nTrackCandidatesPT3_buf_h.data(); @@ -1244,7 +1255,7 @@ int LSTEvent::getNumberOfPLSTrackCandidates() { alpaka::memcpy(queue_, nTrackCandidatesPLS_buf_h, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidatespLS())); + cms::alpakatools::make_device_view(queue_, (*trackCandidatesExtendedDC_)->nTrackCandidatespLS())); alpaka::wait(queue_); return *nTrackCandidatesPLS_buf_h.data(); @@ -1256,10 +1267,10 @@ int LSTEvent::getNumberOfPixelTrackCandidates() { alpaka::memcpy(queue_, nTrackCandidates_buf_h, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidates())); + cms::alpakatools::make_device_view(queue_, (*trackCandidatesBaseDC_)->nTrackCandidates())); alpaka::memcpy(queue_, nTrackCandidatesT5_buf_h, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidatesT5())); + cms::alpakatools::make_device_view(queue_, (*trackCandidatesExtendedDC_)->nTrackCandidatesT5())); alpaka::wait(queue_); return (*nTrackCandidates_buf_h.data()) - (*nTrackCandidatesT5_buf_h.data()); @@ -1270,7 +1281,7 @@ int LSTEvent::getNumberOfT5TrackCandidates() { alpaka::memcpy(queue_, nTrackCandidatesT5_buf_h, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidatesT5())); + cms::alpakatools::make_device_view(queue_, (*trackCandidatesExtendedDC_)->nTrackCandidatesT5())); alpaka::wait(queue_); return *nTrackCandidatesT5_buf_h.data(); @@ -1295,28 +1306,6 @@ typename TSoA::ConstView LSTEvent::getInput(bool sync) { template HitsBaseConst LSTEvent::getInput(bool); template PixelSeedsConst LSTEvent::getInput(bool); -template -HitsBaseConst LSTEvent::getTrimmedHitsBase(bool sync) { - if constexpr (std::is_same_v) { - return lstInputDC_->const_view(); - } else { - if (!lstInputHC_) { - auto hits_d = lstInputDC_->view(); - int nHits = hits_d.metadata().size(); - std::array const hits_sizes{{nHits, 0}}; - lstInputHC_.emplace(hits_sizes, queue_); - auto hits_h = lstInputHC_->view(); - auto idxs_h = cms::alpakatools::make_host_view(hits_h.idxs(), nHits); - auto idxs_d = cms::alpakatools::make_device_view(queue_, hits_d.idxs(), nHits); - alpaka::memcpy(queue_, idxs_h, idxs_d); - if (sync) - alpaka::wait(queue_); // host consumers expect filled data - } - return lstInputHC_->const_view(); - } -} -template HitsBaseConst LSTEvent::getTrimmedHitsBase(bool); - template typename TSoA::ConstView LSTEvent::getHits(bool sync) { if constexpr (std::is_same_v) { @@ -1478,51 +1467,44 @@ PixelQuintupletsConst LSTEvent::getPixelQuintuplets(bool sync) { } template PixelQuintupletsConst LSTEvent::getPixelQuintuplets<>(bool); -const TrackCandidatesConst& LSTEvent::getTrackCandidates(bool inCMSSW, bool sync) { - if (!trackCandidatesHC_) { - // Get nTrackCanHost parameter to initialize host based instance - auto nTrackCanHost_buf_h = cms::alpakatools::make_host_buffer(queue_); - alpaka::memcpy(queue_, - nTrackCanHost_buf_h, - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->nTrackCandidates())); - alpaka::wait(queue_); // wait here before we get nTrackCanHost and trackCandidatesInCPU becomes usable - - auto const nTrackCanHost = *nTrackCanHost_buf_h.data(); - trackCandidatesHC_.emplace(nTrackCanHost, queue_); - - (*trackCandidatesHC_)->nTrackCandidates() = nTrackCanHost; - alpaka::memcpy(queue_, - cms::alpakatools::make_host_view((*trackCandidatesHC_)->hitIndices()->data(), - Params_pT5::kHits * nTrackCanHost), - cms::alpakatools::make_device_view( - queue_, (*trackCandidatesDC_)->hitIndices()->data(), Params_pT5::kHits * nTrackCanHost)); - alpaka::memcpy(queue_, - cms::alpakatools::make_host_view((*trackCandidatesHC_)->pixelSeedIndex(), nTrackCanHost), - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->pixelSeedIndex(), nTrackCanHost)); - if (not inCMSSW) { - alpaka::memcpy(queue_, - cms::alpakatools::make_host_view((*trackCandidatesHC_)->logicalLayers()->data(), - Params_pT5::kLayers * nTrackCanHost), - cms::alpakatools::make_device_view( - queue_, (*trackCandidatesDC_)->logicalLayers()->data(), Params_pT5::kLayers * nTrackCanHost)); - alpaka::memcpy( - queue_, - cms::alpakatools::make_host_view((*trackCandidatesHC_)->directObjectIndices(), nTrackCanHost), - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->directObjectIndices(), nTrackCanHost)); - alpaka::memcpy( - queue_, - cms::alpakatools::make_host_view((*trackCandidatesHC_)->objectIndices()->data(), 2 * nTrackCanHost), - cms::alpakatools::make_device_view( - queue_, (*trackCandidatesDC_)->objectIndices()->data(), 2 * nTrackCanHost)); +template +TrackCandidatesBaseConst LSTEvent::getTrackCandidatesBase(bool sync) { + if constexpr (std::is_same_v) { + return trackCandidatesBaseDC_->const_view(); + } else { + if (!trackCandidatesBaseHC_) { + trackCandidatesBaseHC_.emplace( + cms::alpakatools::CopyToHost<::PortableCollection>::copyAsync( + queue_, *trackCandidatesBaseDC_)); + + if (sync) + alpaka::wait(queue_); // host consumers expect filled data + } + } + return trackCandidatesBaseHC_->const_view(); +} +template TrackCandidatesBaseConst LSTEvent::getTrackCandidatesBase<>(bool); + +template +TrackCandidatesExtendedConst LSTEvent::getTrackCandidatesExtended(bool sync) { + if constexpr (std::is_same_v) { + return trackCandidatesExtendedDC_->const_view(); + } else { + if (!trackCandidatesExtendedHC_) { + trackCandidatesExtendedHC_.emplace( + cms::alpakatools::CopyToHost<::PortableCollection>::copyAsync( + queue_, *trackCandidatesExtendedDC_)); + + if (sync) + alpaka::wait(queue_); // host consumers expect filled data } - alpaka::memcpy( - queue_, - cms::alpakatools::make_host_view((*trackCandidatesHC_)->trackCandidateType(), nTrackCanHost), - cms::alpakatools::make_device_view(queue_, (*trackCandidatesDC_)->trackCandidateType(), nTrackCanHost)); - if (sync) - alpaka::wait(queue_); // host consumers expect filled data } - return trackCandidatesHC_.value().const_view(); + return trackCandidatesExtendedHC_->const_view(); +} +template TrackCandidatesExtendedConst LSTEvent::getTrackCandidatesExtended<>(bool); + +std::unique_ptr LSTEvent::releaseTrackCandidatesBaseDeviceCollection() { + return std::make_unique(std::move(trackCandidatesBaseDC_.value())); } template diff --git a/RecoTracker/LSTCore/src/alpaka/LSTEvent.h b/RecoTracker/LSTCore/src/alpaka/LSTEvent.h index 7c736f325aee4..d8e3be21e7fcb 100644 --- a/RecoTracker/LSTCore/src/alpaka/LSTEvent.h +++ b/RecoTracker/LSTCore/src/alpaka/LSTEvent.h @@ -1,6 +1,7 @@ #ifndef RecoTracker_LSTCore_src_alpaka_LSTEvent_h #define RecoTracker_LSTCore_src_alpaka_LSTEvent_h +#include #include #include "RecoTracker/LSTCore/interface/LSTInputHostCollection.h" @@ -61,7 +62,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { std::optional pixelSegmentsDC_; std::optional tripletsDC_; std::optional quintupletsDC_; - std::optional trackCandidatesDC_; + std::optional trackCandidatesBaseDC_; + std::optional trackCandidatesExtendedDC_; std::optional pixelTripletsDC_; std::optional pixelQuintupletsDC_; @@ -73,7 +75,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { std::optional segmentsHC_; std::optional pixelSegmentsHC_; std::optional tripletsHC_; - std::optional trackCandidatesHC_; + std::optional trackCandidatesBaseHC_; + std::optional trackCandidatesExtendedHC_; std::optional modulesHC_; std::optional quintupletsHC_; std::optional pixelTripletsHC_; @@ -164,8 +167,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { // HANDLE WITH CARE template typename TSoA::ConstView getInput(bool sync = true); - template - HitsBaseConst getTrimmedHitsBase(bool sync = true); template typename TSoA::ConstView getHits(bool sync = true); template @@ -184,7 +185,11 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { PixelSegmentsConst getPixelSegments(bool sync = true); template PixelQuintupletsConst getPixelQuintuplets(bool sync = true); - const TrackCandidatesConst& getTrackCandidates(bool inCMSSW = false, bool sync = true); + template + TrackCandidatesBaseConst getTrackCandidatesBase(bool sync = true); + template + TrackCandidatesExtendedConst getTrackCandidatesExtended(bool sync = true); + std::unique_ptr releaseTrackCandidatesBaseDeviceCollection(); template typename TSoA::ConstView getModules(bool sync = true); }; diff --git a/RecoTracker/LSTCore/src/alpaka/TrackCandidate.h b/RecoTracker/LSTCore/src/alpaka/TrackCandidate.h index 187901bd4549e..a74e767b2807b 100644 --- a/RecoTracker/LSTCore/src/alpaka/TrackCandidate.h +++ b/RecoTracker/LSTCore/src/alpaka/TrackCandidate.h @@ -3,7 +3,9 @@ #include "HeterogeneousCore/AlpakaInterface/interface/workdivision.h" #include "FWCore/Utilities/interface/CMSUnrollLoop.h" +#include "HeterogeneousCore/AlpakaMath/interface/deltaPhi.h" +#include "LSTEvent.h" #include "RecoTracker/LSTCore/interface/alpaka/Common.h" #include "RecoTracker/LSTCore/interface/ModulesSoA.h" #include "RecoTracker/LSTCore/interface/HitsSoA.h" @@ -19,27 +21,29 @@ #include "NeuralNetwork.h" namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { - ALPAKA_FN_ACC ALPAKA_FN_INLINE void addpLSTrackCandidateToMemory(TrackCandidates& cands, + ALPAKA_FN_ACC ALPAKA_FN_INLINE void addpLSTrackCandidateToMemory(TrackCandidatesBase& candsBase, + TrackCandidatesExtended& candsExtended, unsigned int trackletIndex, unsigned int trackCandidateIndex, const Params_pLS::ArrayUxHits& hitIndices, int pixelSeedIndex) { - cands.trackCandidateType()[trackCandidateIndex] = LSTObjType::pLS; - cands.directObjectIndices()[trackCandidateIndex] = trackletIndex; - cands.pixelSeedIndex()[trackCandidateIndex] = pixelSeedIndex; + candsBase.trackCandidateType()[trackCandidateIndex] = LSTObjType::pLS; + candsExtended.directObjectIndices()[trackCandidateIndex] = trackletIndex; + candsBase.pixelSeedIndex()[trackCandidateIndex] = pixelSeedIndex; - cands.objectIndices()[trackCandidateIndex][0] = trackletIndex; - cands.objectIndices()[trackCandidateIndex][1] = trackletIndex; + candsExtended.objectIndices()[trackCandidateIndex][0] = trackletIndex; + candsExtended.objectIndices()[trackCandidateIndex][1] = trackletIndex; // Order explanation in https://github.com/SegmentLinking/TrackLooper/issues/267 - cands.hitIndices()[trackCandidateIndex][0] = hitIndices[0]; - cands.hitIndices()[trackCandidateIndex][1] = hitIndices[2]; - cands.hitIndices()[trackCandidateIndex][2] = hitIndices[1]; - cands.hitIndices()[trackCandidateIndex][3] = hitIndices[3]; + candsBase.hitIndices()[trackCandidateIndex][0] = hitIndices[0]; + candsBase.hitIndices()[trackCandidateIndex][1] = hitIndices[2]; + candsBase.hitIndices()[trackCandidateIndex][2] = hitIndices[1]; + candsBase.hitIndices()[trackCandidateIndex][3] = hitIndices[3]; } - ALPAKA_FN_ACC ALPAKA_FN_INLINE void addTrackCandidateToMemory(TrackCandidates& cands, - short trackCandidateType, + ALPAKA_FN_ACC ALPAKA_FN_INLINE void addTrackCandidateToMemory(TrackCandidatesBase& candsBase, + TrackCandidatesExtended& candsExtended, + LSTObjType trackCandidateType, unsigned int innerTrackletIndex, unsigned int outerTrackletIndex, const uint8_t* logicalLayerIndices, @@ -51,26 +55,26 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float radius, unsigned int trackCandidateIndex, unsigned int directObjectIndex) { - cands.trackCandidateType()[trackCandidateIndex] = trackCandidateType; - cands.directObjectIndices()[trackCandidateIndex] = directObjectIndex; - cands.pixelSeedIndex()[trackCandidateIndex] = pixelSeedIndex; + candsBase.trackCandidateType()[trackCandidateIndex] = trackCandidateType; + candsExtended.directObjectIndices()[trackCandidateIndex] = directObjectIndex; + candsBase.pixelSeedIndex()[trackCandidateIndex] = pixelSeedIndex; - cands.objectIndices()[trackCandidateIndex][0] = innerTrackletIndex; - cands.objectIndices()[trackCandidateIndex][1] = outerTrackletIndex; + candsExtended.objectIndices()[trackCandidateIndex][0] = innerTrackletIndex; + candsExtended.objectIndices()[trackCandidateIndex][1] = outerTrackletIndex; size_t limits = trackCandidateType == LSTObjType::pT5 ? Params_pT5::kLayers : Params_pT3::kLayers; //send the starting pointer to the logicalLayer and hitIndices for (size_t i = 0; i < limits; i++) { - cands.logicalLayers()[trackCandidateIndex][i] = logicalLayerIndices[i]; - cands.lowerModuleIndices()[trackCandidateIndex][i] = lowerModuleIndices[i]; + candsExtended.logicalLayers()[trackCandidateIndex][i] = logicalLayerIndices[i]; + candsExtended.lowerModuleIndices()[trackCandidateIndex][i] = lowerModuleIndices[i]; } for (size_t i = 0; i < 2 * limits; i++) { - cands.hitIndices()[trackCandidateIndex][i] = hitIndices[i]; + candsBase.hitIndices()[trackCandidateIndex][i] = hitIndices[i]; } - cands.centerX()[trackCandidateIndex] = __F2H(centerX); - cands.centerY()[trackCandidateIndex] = __F2H(centerY); - cands.radius()[trackCandidateIndex] = __F2H(radius); + candsExtended.centerX()[trackCandidateIndex] = __F2H(centerX); + candsExtended.centerY()[trackCandidateIndex] = __F2H(centerY); + candsExtended.radius()[trackCandidateIndex] = __F2H(radius); } ALPAKA_FN_ACC ALPAKA_FN_INLINE int checkPixelHits( @@ -219,7 +223,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { ModulesConst modules, ObjectRangesConst ranges, PixelTripletsConst pixelTriplets, - TrackCandidates cands, + TrackCandidatesBase candsBase, + TrackCandidatesExtended candsExtended, SegmentsConst segments, SegmentsOccupancyConst segmentsOccupancy, PixelSeedsConst pixelSeeds, @@ -248,10 +253,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { uint8_t bin_idx = (absEta1 > 2.5f) ? (dnn::kEtaBins - 1) : static_cast(absEta1 / dnn::kEtaSize); const float threshold = dnn::plsembdnn::kWP[bin_idx]; - unsigned int nTrackCandidates = cands.nTrackCandidates(); + unsigned int nTrackCandidates = candsBase.nTrackCandidates(); for (unsigned int trackCandidateIndex : cms::alpakatools::uniform_elements_x(acc, nTrackCandidates)) { - short type = cands.trackCandidateType()[trackCandidateIndex]; - unsigned int innerTrackletIdx = cands.objectIndices()[trackCandidateIndex][0]; + LSTObjType type = candsBase.trackCandidateType()[trackCandidateIndex]; + unsigned int innerTrackletIdx = candsExtended.objectIndices()[trackCandidateIndex][0]; if (type == LSTObjType::T5) { unsigned int quintupletIndex = innerTrackletIdx; // T5 index float eta2 = __H2F(quintuplets.eta()[quintupletIndex]); @@ -313,7 +318,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { ALPAKA_FN_ACC void operator()(Acc1D const& acc, uint16_t nLowerModules, PixelTripletsConst pixelTriplets, - TrackCandidates cands, + TrackCandidatesBase candsBase, + TrackCandidatesExtended candsExtended, PixelSeedsConst pixelSeeds, ObjectRangesConst ranges) const { // implementation is 1D with a single block @@ -326,22 +332,23 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { continue; unsigned int trackCandidateIdx = - alpaka::atomicAdd(acc, &cands.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); + alpaka::atomicAdd(acc, &candsBase.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); if (trackCandidateIdx >= n_max_pixel_track_candidates) // This is done before any non-pixel TCs are added { #ifdef WARNINGS printf("Track Candidate excess alert! Type = pT3"); #endif - alpaka::atomicSub(acc, &cands.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); + alpaka::atomicSub(acc, &candsBase.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); break; } else { - alpaka::atomicAdd(acc, &cands.nTrackCandidatespT3(), 1u, alpaka::hierarchy::Threads{}); + alpaka::atomicAdd(acc, &candsExtended.nTrackCandidatespT3(), 1u, alpaka::hierarchy::Threads{}); float radius = 0.5f * (__H2F(pixelTriplets.pixelRadius()[pixelTripletIndex]) + __H2F(pixelTriplets.tripletRadius()[pixelTripletIndex])); unsigned int pT3PixelIndex = pixelTriplets.pixelSegmentIndices()[pixelTripletIndex]; - addTrackCandidateToMemory(cands, + addTrackCandidateToMemory(candsBase, + candsExtended, LSTObjType::pT3, pixelTripletIndex, pixelTripletIndex, @@ -364,7 +371,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { uint16_t nLowerModules, QuintupletsConst quintuplets, QuintupletsOccupancyConst quintupletsOccupancy, - TrackCandidates cands, + TrackCandidatesBase candsBase, + TrackCandidatesExtended candsExtended, ObjectRangesConst ranges) const { for (int idx : cms::alpakatools::uniform_elements_y(acc, nLowerModules)) { if (ranges.quintupletModuleIndices()[idx] == -1) @@ -379,18 +387,19 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { continue; unsigned int trackCandidateIdx = - alpaka::atomicAdd(acc, &cands.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); - if (trackCandidateIdx - cands.nTrackCandidatespT5() - cands.nTrackCandidatespT3() >= + alpaka::atomicAdd(acc, &candsBase.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); + if (trackCandidateIdx - candsExtended.nTrackCandidatespT5() - candsExtended.nTrackCandidatespT3() >= n_max_nonpixel_track_candidates) // pT5 and pT3 TCs have been added, but not pLS TCs { #ifdef WARNINGS printf("Track Candidate excess alert! Type = T5"); #endif - alpaka::atomicSub(acc, &cands.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); + alpaka::atomicSub(acc, &candsBase.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); break; } else { - alpaka::atomicAdd(acc, &cands.nTrackCandidatesT5(), 1u, alpaka::hierarchy::Threads{}); - addTrackCandidateToMemory(cands, + alpaka::atomicAdd(acc, &candsExtended.nTrackCandidatesT5(), 1u, alpaka::hierarchy::Threads{}); + addTrackCandidateToMemory(candsBase, + candsExtended, LSTObjType::T5, quintupletIndex, quintupletIndex, @@ -412,7 +421,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { struct AddpLSasTrackCandidate { ALPAKA_FN_ACC void operator()(Acc1D const& acc, uint16_t nLowerModules, - TrackCandidates cands, + TrackCandidatesBase candsBase, + TrackCandidatesExtended candsExtended, SegmentsOccupancyConst segmentsOccupancy, PixelSeedsConst pixelSeeds, PixelSegmentsConst pixelSegments, @@ -423,19 +433,20 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { continue; unsigned int trackCandidateIdx = - alpaka::atomicAdd(acc, &cands.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); - if (trackCandidateIdx - cands.nTrackCandidatesT5() >= + alpaka::atomicAdd(acc, &candsBase.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); + if (trackCandidateIdx - candsExtended.nTrackCandidatesT5() >= n_max_pixel_track_candidates) // T5 TCs have already been added { #ifdef WARNINGS printf("Track Candidate excess alert! Type = pLS"); #endif - alpaka::atomicSub(acc, &cands.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); + alpaka::atomicSub(acc, &candsBase.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); break; } else { - alpaka::atomicAdd(acc, &cands.nTrackCandidatespLS(), 1u, alpaka::hierarchy::Threads{}); - addpLSTrackCandidateToMemory(cands, + alpaka::atomicAdd(acc, &candsExtended.nTrackCandidatespLS(), 1u, alpaka::hierarchy::Threads{}); + addpLSTrackCandidateToMemory(candsBase, + candsExtended, pixelArrayIndex, trackCandidateIdx, pixelSegments.pLSHitsIdxs()[pixelArrayIndex], @@ -449,7 +460,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { ALPAKA_FN_ACC void operator()(Acc1D const& acc, uint16_t nLowerModules, PixelQuintupletsConst pixelQuintuplets, - TrackCandidates cands, + TrackCandidatesBase candsBase, + TrackCandidatesExtended candsExtended, PixelSeedsConst pixelSeeds, ObjectRangesConst ranges) const { // implementation is 1D with a single block @@ -462,22 +474,23 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { continue; unsigned int trackCandidateIdx = - alpaka::atomicAdd(acc, &cands.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); + alpaka::atomicAdd(acc, &candsBase.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); if (trackCandidateIdx >= n_max_pixel_track_candidates) // No other TCs have been added yet { #ifdef WARNINGS printf("Track Candidate excess alert! Type = pT5"); #endif - alpaka::atomicSub(acc, &cands.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); + alpaka::atomicSub(acc, &candsBase.nTrackCandidates(), 1u, alpaka::hierarchy::Threads{}); break; } else { - alpaka::atomicAdd(acc, &cands.nTrackCandidatespT5(), 1u, alpaka::hierarchy::Threads{}); + alpaka::atomicAdd(acc, &candsExtended.nTrackCandidatespT5(), 1u, alpaka::hierarchy::Threads{}); float radius = 0.5f * (__H2F(pixelQuintuplets.pixelRadius()[pixelQuintupletIndex]) + __H2F(pixelQuintuplets.quintupletRadius()[pixelQuintupletIndex])); unsigned int pT5PixelIndex = pixelQuintuplets.pixelSegmentIndices()[pixelQuintupletIndex]; - addTrackCandidateToMemory(cands, + addTrackCandidateToMemory(candsBase, + candsExtended, LSTObjType::pT5, pT5PixelIndex, pixelQuintuplets.quintupletIndices()[pixelQuintupletIndex], @@ -496,6 +509,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { }; } // namespace ALPAKA_ACCELERATOR_NAMESPACE::lst -ASSERT_DEVICE_MATCHES_HOST_COLLECTION(lst::TrackCandidatesDeviceCollection, lst::TrackCandidatesHostCollection); +ASSERT_DEVICE_MATCHES_HOST_COLLECTION(lst::TrackCandidatesBaseDeviceCollection, lst::TrackCandidatesBaseHostCollection); +ASSERT_DEVICE_MATCHES_HOST_COLLECTION(lst::TrackCandidatesExtendedDeviceCollection, + lst::TrackCandidatesExtendedHostCollection); #endif diff --git a/RecoTracker/LSTCore/src/alpaka/classes_cuda.h b/RecoTracker/LSTCore/src/alpaka/classes_cuda.h index cfc0247edac81..f4e689e0e143b 100644 --- a/RecoTracker/LSTCore/src/alpaka/classes_cuda.h +++ b/RecoTracker/LSTCore/src/alpaka/classes_cuda.h @@ -4,5 +4,6 @@ #include "DataFormats/Common/interface/DeviceProduct.h" #include "DataFormats/Common/interface/Wrapper.h" #include "RecoTracker/LSTCore/interface/alpaka/LSTInputDeviceCollection.h" +#include "RecoTracker/LSTCore/interface/alpaka/TrackCandidatesDeviceCollection.h" #endif diff --git a/RecoTracker/LSTCore/src/alpaka/classes_cuda_def.xml b/RecoTracker/LSTCore/src/alpaka/classes_cuda_def.xml index 0838995cb4517..5229a7b447792 100644 --- a/RecoTracker/LSTCore/src/alpaka/classes_cuda_def.xml +++ b/RecoTracker/LSTCore/src/alpaka/classes_cuda_def.xml @@ -2,4 +2,8 @@ + + + + diff --git a/RecoTracker/LSTCore/src/alpaka/classes_rocm.h b/RecoTracker/LSTCore/src/alpaka/classes_rocm.h index f507d6bfe28b7..a4d3b91717ee0 100644 --- a/RecoTracker/LSTCore/src/alpaka/classes_rocm.h +++ b/RecoTracker/LSTCore/src/alpaka/classes_rocm.h @@ -4,5 +4,6 @@ #include "DataFormats/Common/interface/DeviceProduct.h" #include "DataFormats/Common/interface/Wrapper.h" #include "RecoTracker/LSTCore/interface/alpaka/LSTInputDeviceCollection.h" +#include "RecoTracker/LSTCore/interface/alpaka/TrackCandidatesDeviceCollection.h" #endif diff --git a/RecoTracker/LSTCore/src/alpaka/classes_rocm_def.xml b/RecoTracker/LSTCore/src/alpaka/classes_rocm_def.xml index 5a8f4b2ce4ca0..f17869616d021 100644 --- a/RecoTracker/LSTCore/src/alpaka/classes_rocm_def.xml +++ b/RecoTracker/LSTCore/src/alpaka/classes_rocm_def.xml @@ -2,4 +2,8 @@ + + + + diff --git a/RecoTracker/LSTCore/src/classes.cc b/RecoTracker/LSTCore/src/classes.cc index fa21a778466da..c92a9118b44ba 100644 --- a/RecoTracker/LSTCore/src/classes.cc +++ b/RecoTracker/LSTCore/src/classes.cc @@ -1,6 +1,8 @@ #include "DataFormats/Portable/interface/PortableHostCollectionReadRules.h" #include "RecoTracker/LSTCore/interface/LSTInputHostCollection.h" +#include "RecoTracker/LSTCore/interface/TrackCandidatesHostCollection.h" #ifndef LST_STANDALONE SET_PORTABLEHOSTMULTICOLLECTION_READ_RULES(lst::LSTInputHostCollection); +SET_PORTABLEHOSTCOLLECTION_READ_RULES(lst::TrackCandidatesBaseHostCollection); #endif diff --git a/RecoTracker/LSTCore/src/classes.h b/RecoTracker/LSTCore/src/classes.h index 768762c040166..3305dbb05354b 100644 --- a/RecoTracker/LSTCore/src/classes.h +++ b/RecoTracker/LSTCore/src/classes.h @@ -3,5 +3,6 @@ #include "DataFormats/Common/interface/Wrapper.h" #include "RecoTracker/LSTCore/interface/LSTInputHostCollection.h" +#include "RecoTracker/LSTCore/interface/TrackCandidatesHostCollection.h" #endif diff --git a/RecoTracker/LSTCore/src/classes_def.xml b/RecoTracker/LSTCore/src/classes_def.xml index cbbd12ca788d5..b3ea81c1cc5a1 100644 --- a/RecoTracker/LSTCore/src/classes_def.xml +++ b/RecoTracker/LSTCore/src/classes_def.xml @@ -10,4 +10,8 @@ + + + + diff --git a/RecoTracker/LSTCore/standalone/code/core/AccessHelper.cc b/RecoTracker/LSTCore/standalone/code/core/AccessHelper.cc index 8e075ac805abe..78a1d6673319e 100644 --- a/RecoTracker/LSTCore/standalone/code/core/AccessHelper.cc +++ b/RecoTracker/LSTCore/standalone/code/core/AccessHelper.cc @@ -424,9 +424,10 @@ std::tuple, std::vector> getHitIdxsAndHi //____________________________________________________________________________________________ std::vector getLSsFromTC(LSTEvent* event, unsigned int iTC) { // Get the type of the track candidate - auto const& trackCandidates = event->getTrackCandidates(); - short type = trackCandidates.trackCandidateType()[iTC]; - unsigned int objidx = trackCandidates.directObjectIndices()[iTC]; + auto const& trackCandidatesBase = event->getTrackCandidatesBase(); + auto const& trackCandidatesExtended = event->getTrackCandidatesExtended(); + short type = trackCandidatesBase.trackCandidateType()[iTC]; + unsigned int objidx = trackCandidatesExtended.directObjectIndices()[iTC]; switch (type) { case lst::LSTObjType::pT5: return getLSsFrompT5(event, objidx); @@ -447,9 +448,10 @@ std::vector getLSsFromTC(LSTEvent* event, unsigned int iTC) { std::tuple, std::vector> getHitIdxsAndHitTypesFromTC(LSTEvent* event, unsigned iTC) { // Get the type of the track candidate - auto const& trackCandidates = event->getTrackCandidates(); - short type = trackCandidates.trackCandidateType()[iTC]; - unsigned int objidx = trackCandidates.directObjectIndices()[iTC]; + auto const& trackCandidatesBase = event->getTrackCandidatesBase(); + auto const& trackCandidatesExtended = event->getTrackCandidatesExtended(); + short type = trackCandidatesBase.trackCandidateType()[iTC]; + unsigned int objidx = trackCandidatesExtended.directObjectIndices()[iTC]; switch (type) { case lst::LSTObjType::pT5: return getHitIdxsAndHitTypesFrompT5(event, objidx); diff --git a/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc b/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc index 68f996d9ad7ae..f506e99766876 100644 --- a/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc +++ b/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc @@ -350,8 +350,8 @@ void setOutputBranches(LSTEvent* event) { std::vector> tc_matched_simIdx; // ============ Track candidates ============= - auto const& trackCandidates = event->getTrackCandidates(); - unsigned int nTrackCandidates = trackCandidates.nTrackCandidates(); + auto const& trackCandidatesBase = event->getTrackCandidatesBase(); + unsigned int nTrackCandidates = trackCandidatesBase.nTrackCandidates(); for (unsigned int idx = 0; idx < nTrackCandidates; idx++) { // Compute reco quantities of track candidate based on final object int type, isFake; @@ -427,7 +427,7 @@ void setOccupancyBranches(LSTEvent* event) { auto quintuplets = event->getQuintuplets(); auto pixelQuintuplets = event->getPixelQuintuplets(); auto pixelTriplets = event->getPixelTriplets(); - auto trackCandidates = event->getTrackCandidates(); + auto trackCandidatesBase = event->getTrackCandidatesBase(); std::vector moduleLayer; std::vector moduleSubdet; @@ -474,7 +474,7 @@ void setOccupancyBranches(LSTEvent* event) { ana.tx->setBranch>("md_occupancies", mdOccupancy); ana.tx->setBranch>("sg_occupancies", segmentOccupancy); ana.tx->setBranch>("t3_occupancies", tripletOccupancy); - ana.tx->setBranch("tc_occupancies", trackCandidates.nTrackCandidates()); + ana.tx->setBranch("tc_occupancies", trackCandidatesBase.nTrackCandidates()); ana.tx->setBranch("pT3_occupancies", pixelTriplets.totOccupancyPixelTriplets()); ana.tx->setBranch>("t5_occupancies", quintupletOccupancy); ana.tx->setBranch("pT5_occupancies", pixelQuintuplets.totOccupancyPixelQuintuplets()); @@ -943,7 +943,8 @@ void setT5DNNBranches(LSTEvent* event) { auto modules = event->getModules(); auto ranges = event->getRanges(); auto const quintuplets = event->getQuintuplets(); - auto trackCandidates = event->getTrackCandidates(); + auto trackCandidatesBase = event->getTrackCandidatesBase(); + auto trackCandidatesExtended = event->getTrackCandidatesExtended(); std::unordered_set allT3s; std::unordered_map t3_index_map; @@ -961,9 +962,9 @@ void setT5DNNBranches(LSTEvent* event) { std::unordered_map t5_tc_index_map; std::unordered_set t5s_used_in_tc; - for (unsigned int idx = 0; idx < trackCandidates.nTrackCandidates(); idx++) { - if (trackCandidates.trackCandidateType()[idx] == LSTObjType::T5) { - unsigned int objIdx = trackCandidates.directObjectIndices()[idx]; + for (unsigned int idx = 0; idx < trackCandidatesBase.nTrackCandidates(); idx++) { + if (trackCandidatesBase.trackCandidateType()[idx] == LSTObjType::T5) { + unsigned int objIdx = trackCandidatesExtended.directObjectIndices()[idx]; t5s_used_in_tc.insert(objIdx); t5_tc_index_map[objIdx] = idx; } @@ -1003,7 +1004,7 @@ void setGnnNtupleBranches(LSTEvent* event) { auto hitsBase = event->getInput(); auto modules = event->getModules(); auto ranges = event->getRanges(); - auto const& trackCandidates = event->getTrackCandidates(); + auto const& trackCandidatesBase = event->getTrackCandidatesBase(); std::set mds_used_in_sg; std::map md_index_map; @@ -1022,7 +1023,7 @@ void setGnnNtupleBranches(LSTEvent* event) { auto const& trk_pix_simHitIdx = trk.getVVI("pix_simHitIdx"); std::set lss_used_in_true_tc; - unsigned int nTrackCandidates = trackCandidates.nTrackCandidates(); + unsigned int nTrackCandidates = trackCandidatesBase.nTrackCandidates(); for (unsigned int idx = 0; idx < nTrackCandidates; idx++) { // Only consider true track candidates std::vector hitidxs; @@ -1290,8 +1291,8 @@ std::tuple> parseTrackCandidate( std::vector> const& trk_ph2_simHitIdx, std::vector> const& trk_pix_simHitIdx) { // Get the type of the track candidate - auto const& trackCandidates = event->getTrackCandidates(); - short type = trackCandidates.trackCandidateType()[idx]; + auto const& trackCandidatesBase = event->getTrackCandidatesBase(); + short type = trackCandidatesBase.trackCandidateType()[idx]; // Compute pt eta phi and hit indices that will be used to figure out whether the TC matched float pt, eta, phi; @@ -1323,7 +1324,7 @@ std::tuple> parseTrackCandidate( std::tuple, std::vector> parsepT5(LSTEvent* event, unsigned int idx) { // Get relevant information - auto const trackCandidates = event->getTrackCandidates(); + auto const trackCandidatesExtended = event->getTrackCandidatesExtended(); auto const quintuplets = event->getQuintuplets(); auto const pixelSeeds = event->getInput(); @@ -1336,7 +1337,7 @@ std::tuple, std::vector, std::vector, std::vector> parsepT3(LSTEvent* event, unsigned int idx) { // Get relevant information - auto const trackCandidates = event->getTrackCandidates(); + auto const trackCandidatesExtended = event->getTrackCandidatesExtended(); auto const triplets = event->getTriplets(); auto const pixelSeeds = event->getInput(); @@ -1446,7 +1447,7 @@ std::tuple, std::vector, std::vector const& trk_ph2_x, std::vector const& trk_ph2_y, std::vector const& trk_ph2_z) { - auto const trackCandidates = event->getTrackCandidates(); + auto const trackCandidatesExtended = event->getTrackCandidatesExtended(); auto const quintuplets = event->getQuintuplets(); - unsigned int T5 = trackCandidates.directObjectIndices()[idx]; + unsigned int T5 = trackCandidatesExtended.directObjectIndices()[idx]; std::vector hits = getHitsFromT5(event, T5); // @@ -1507,11 +1508,11 @@ std::tuple, std::vector, std::vector> parsepLS(LSTEvent* event, unsigned int idx) { - auto const& trackCandidates = event->getTrackCandidates(); + auto const& trackCandidatesExtended = event->getTrackCandidatesExtended(); auto pixelSeeds = event->getInput(); // Getting pLS index - unsigned int pLS = trackCandidates.directObjectIndices()[idx]; + unsigned int pLS = trackCandidatesExtended.directObjectIndices()[idx]; // Getting pt eta and phi float pt = pixelSeeds.ptIn()[pLS];