55{
56
57
58
59 SG::ThinningHandle<xAOD::TrackParticleContainer> importedTrackParticles
61
62
63 unsigned int nTracks = importedTrackParticles->size();
64 if (nTracks==0) return StatusCode::SUCCESS;
65
66
67 std::vector<bool>
mask(nTracks);
69
70
71
72 SG::ReadHandle<xAOD::DiTauJetContainer> importedDiTaus(
m_ditauKey,ctx);
73 if (!importedDiTaus.isValid()) {
75 return StatusCode::FAILURE;
76 }
77 unsigned int nDiTaus(importedDiTaus->size());
78 std::vector<const xAOD::DiTauJet*> ditauToCheck; ditauToCheck.clear();
79
80
82 std::vector<int>
entries = m_parser->evaluateAsVector();
84
85 if (nDiTaus != nEntries ) {
86 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used ditaus??");
87 return StatusCode::FAILURE;
88 } else {
89
90 for (
unsigned int i=0;
i<nDiTaus; ++
i)
if (
entries[i]==1) ditauToCheck.push_back((*importedDiTaus)[i]);
91 }
92 }
93
94
95
97 for (const auto *ditauIt : *importedDiTaus) {
98 for (
unsigned int i=0;
i<ditauIt->nTracks(); ++
i) {
99 std::size_t
index = ditauIt->trackLinks().at(i).index();
100 mask.at(index) =
true;
101 }
102 for (
unsigned int i=0;
i<ditauIt->nIsoTracks(); ++
i) {
103 std::size_t
index = ditauIt->isoTrackLinks().at(i).index();
104 mask.at(index) =
true;
105 }
106 }
107 } else {
108 for (auto & ditauIt : ditauToCheck) {
109 for (
unsigned int i=0;
i<ditauIt->nTracks(); ++
i) {
110 std::size_t
index = ditauIt->trackLinks().at(i).index();
111 mask.at(index) =
true;
112 }
113 for (
unsigned int i=0;
i<ditauIt->nIsoTracks(); ++
i) {
114 std::size_t
index = ditauIt->isoTrackLinks().at(i).index();
115 mask.at(index) =
true;
116 }
117 }
118 }
119
120
121 unsigned int n_pass=0;
122 for (
unsigned int i=0;
i<nTracks; ++
i) {
123 if (mask[i]) ++n_pass;
124 }
126
127
128 importedTrackParticles.keep (mask);
129
130 return StatusCode::SUCCESS;
131}
#define ATH_MSG_ERROR(x,...)
std::atomic< unsigned int > m_npass
Gaudi::Property< std::string > m_selectionString
SG::ReadHandleKey< xAOD::DiTauJetContainer > m_ditauKey
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_inDetSGKey
std::atomic< unsigned int > m_ntot