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;
68 mask.assign(nTracks,
false);
70
71
72
73 SG::ReadHandle<xAOD::DiTauJetContainer> importedDiTaus(
m_ditauKey,ctx);
74 if (!importedDiTaus.isValid()) {
76 return StatusCode::FAILURE;
77 }
78 unsigned int nDiTaus(importedDiTaus->size());
79 std::vector<const xAOD::DiTauJet*> ditauToCheck; ditauToCheck.clear();
80
81
83 std::vector<int>
entries = m_parser->evaluateAsVector();
85
86 if (nDiTaus != nEntries ) {
87 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used ditaus??");
88 return StatusCode::FAILURE;
89 } else {
90
91 for (
unsigned int i=0;
i<nDiTaus; ++
i)
if (
entries[i]==1) ditauToCheck.push_back((*importedDiTaus)[i]);
92 }
93 }
94
95
96
98 for (const auto *ditauIt : *importedDiTaus) {
99 for (
unsigned int i=0;
i<ditauIt->nTracks(); ++
i) {
100 int index = ditauIt->trackLinks().at(i).index();
102 }
103 for (
unsigned int i=0;
i<ditauIt->nIsoTracks(); ++
i) {
104 int index = ditauIt->isoTrackLinks().at(i).index();
106 }
107 }
108 } else {
109 for (auto & ditauIt : ditauToCheck) {
110 for (
unsigned int i=0;
i<ditauIt->nTracks(); ++
i) {
111 int index = ditauIt->trackLinks().at(i).index();
113 }
114 for (
unsigned int i=0;
i<ditauIt->nIsoTracks(); ++
i) {
115 int index = ditauIt->isoTrackLinks().at(i).index();
117 }
118 }
119 }
120
121
122 unsigned int n_pass=0;
123 for (
unsigned int i=0;
i<nTracks; ++
i) {
124 if (mask[i]) ++n_pass;
125 }
127
128
129 importedTrackParticles.keep (mask);
130
131 return StatusCode::SUCCESS;
132}
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