37 return StatusCode::SUCCESS;
63 std::vector<std::vector<FELink_t>> tauNeutralFEVec(tauJetReadHandle->
size());
64 std::vector<std::vector<FELink_t>> tauChargedFEVec(tauJetReadHandle->
size());
67 std::multimap<size_t, size_t> map_tau_clusters, map_tau_tracks;
72 if(acc_passThinning.
isAvailable(*tau) && !acc_passThinning(*tau))
continue;
77 std::vector<xAOD::CaloVertexedTopoCluster>
vertexedClusters = tau->vertexedClusters();
82 map_tau_clusters.insert(std::make_pair<size_t,size_t>(tau->index(),cluster.clust().index()));
90 std::vector<const xAOD::IParticle*> tauClusters = tau->clusters();
91 for (
const auto *cluster : tauClusters) {
93 TLorentzVector clusterp4 = clus->
p4();
95 if (tauVertex !=
nullptr) {
97 clusterp4 = vertexedClus.
p4();
102 map_tau_clusters.insert(std::make_pair<size_t,size_t>(tau->index(),clus->
index()));
107 std::vector<const xAOD::TauTrack*> tauTracks = tau->tracks();
108 for (
const auto *tauTrack : tauTracks) {
112 map_tau_tracks.insert(std::make_pair<size_t,size_t>(tau->index(),tauIDTrack->
index()));
121 if (FE->otherObjects().empty())
continue;
122 if (FE->otherObjects().at(0) ==
nullptr)
continue;
124 size_t FEClusterIndex = FE->otherObjects().at(0)->index();
126 std::vector<TauJetLink_t> FETauJetLinks;
129 for (
const auto [tauIndex, tauClusterIndex] : map_tau_clusters) {
131 if (tauClusterIndex == FEClusterIndex) {
132 FETauJetLinks.emplace_back(*tauJetReadHandle, tauIndex);
133 tauNeutralFEVec.at(tauIndex).emplace_back(*neutralFEReadHandle, FE->index() );
138 neutralFETauWriteDecorHandle (*FE) = FETauJetLinks;
147 if (FE->chargedObjects().empty())
continue;
148 if (FE->chargedObjects().at(0) ==
nullptr)
continue;
151 size_t FETrackIndex = FE->chargedObjects().at(0)->index();
153 std::vector<TauJetLink_t> FETauJetLinks;
156 for (
const auto [tauIndex, tauIDTrackIndex] : map_tau_tracks) {
158 if (tauIDTrackIndex == FETrackIndex) {
159 FETauJetLinks.emplace_back(*tauJetReadHandle, tauIndex);
160 tauChargedFEVec.at(tauIndex).emplace_back(*chargedFEReadHandle, FE->index() );
165 chargedFETauWriteDecorHandle (*FE) = FETauJetLinks;
173 for (
const xAOD::TauJet* tau : *tauNeutralFEWriteDecorHandle) {
174 tauNeutralFEWriteDecorHandle (*tau) = tauNeutralFEVec.at(tau->index());
175 tauChargedFEWriteDecorHandle (*tau) = tauChargedFEVec.at(tau->index());
180 return StatusCode::SUCCESS;