resultTracksters : superclusters as tracksters (ie merging of tracksters that have been superclustered together) outputSuperclusters : same as linkedTracksterIdToInputTracksterId. Probably should use only one of the two. linkedTracksterIdToInputTracksterId : maps indices from resultTracksters back into input tracksters. resultTracksters[i] has seed input.tracksters[linkedTracksterIdToInputTracksterId[i][0]], linked with tracksters input.tracksters[linkedTracksterIdToInputTracksterId[i][1..N]]
61 auto const& inputTracksters =
input.tracksters;
62 const unsigned int tracksterCount = inputTracksters.size();
68 std::vector<unsigned int> trackstersIndicesPt(inputTracksters.size());
69 std::iota(trackstersIndicesPt.begin(), trackstersIndicesPt.end(), 0);
71 trackstersIndicesPt.begin(), trackstersIndicesPt.end(), [&inputTracksters](
unsigned int i1,
unsigned int i2) {
72 return inputTracksters[
i1].raw_pt() > inputTracksters[
i2].raw_pt();
75 std::vector<bool> tracksterMask_pt(tracksterCount,
false);
77 for (
unsigned int ts_idx_pt = 0; ts_idx_pt < tracksterCount; ts_idx_pt++) {
81 for (
unsigned int ts_seed_idx_pt = 0; ts_seed_idx_pt < tracksterCount; ts_seed_idx_pt++) {
82 Trackster const& ts_seed = inputTracksters[trackstersIndicesPt[ts_seed_idx_pt]];
85 if (tracksterMask_pt[ts_seed_idx_pt])
88 outputSuperclusters.emplace_back(std::initializer_list<unsigned int>{trackstersIndicesPt[ts_seed_idx_pt]});
89 resultTracksters.emplace_back(inputTracksters[trackstersIndicesPt[ts_seed_idx_pt]]);
90 linkedTracksterIdToInputTracksterId.emplace_back(
91 std::initializer_list<unsigned int>{trackstersIndicesPt[ts_seed_idx_pt]});
93 for (
unsigned int ts_cand_idx_pt = ts_seed_idx_pt + 1; ts_cand_idx_pt < tracksterCount; ts_cand_idx_pt++) {
94 if (tracksterMask_pt[ts_cand_idx_pt])
97 Trackster const& ts_cand = inputTracksters[trackstersIndicesPt[ts_cand_idx_pt]];
115 outputSuperclusters.back().push_back(trackstersIndicesPt[ts_cand_idx_pt]);
116 resultTracksters.back().mergeTracksters(ts_cand);
117 linkedTracksterIdToInputTracksterId.back().push_back(trackstersIndicesPt[ts_cand_idx_pt]);
118 tracksterMask_pt[ts_cand_idx_pt] =
true;
const float raw_pt() const
const EcalSCDynamicDPhiParameters * scDynamicDPhiParams_
const Vector & barycenter() const
bool inMustache(const EcalMustacheSCParameters *params, const float maxEta, const float maxPhi, const float ClustE, const float ClusEta, const float ClusPhi)
static std::string const input
const EcalMustacheSCParameters * mustacheSCParams_
const float raw_energy() const
bool inDynamicDPhiWindow(const EcalSCDynamicDPhiParameters *params, const float seedEta, const float seedPhi, const float ClustE, const float ClusEta, const float clusPhi)
float candidateEnergyThreshold_
bool trackstersPassesPIDCut(const Trackster &ts) const