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];