61{
62 const EventContext& ctx = Gaudi::Hive::currentContext();
63
64
65 SG::ThinningHandle<xAOD::TrackParticleContainer> importedTrackParticles
67
68
69 unsigned int nTracks = importedTrackParticles->size();
70 if (nTracks==0) return StatusCode::SUCCESS;
71
72
73 std::vector<bool>
mask;
74 mask.assign(nTracks,
false);
76
77
78
79 SG::ReadHandle<xAOD::MuonContainer> importedMuons(
m_muonKey, ctx);
80 if (!importedMuons.isValid()) {
82 return StatusCode::FAILURE;
83 }
84 unsigned int nMuons(importedMuons->size());
85 std::vector<const xAOD::Muon*> muToCheck; muToCheck.clear();
86
88 std::vector<int>
entries = m_parser->evaluateAsVector();
90
91 if (nMuons != nEntries ) {
92 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used muons??");
93 return StatusCode::FAILURE;
94 } else {
95
96 for (
unsigned int i=0;
i<nMuons; ++
i)
if (
entries[i]==1) muToCheck.push_back((*importedMuons)[i]);
97 }
98 }
99
100 DerivationFramework::TracksInCone tInC;
102 for (const auto *muIt : *importedMuons) {
103 if (muIt->inDetTrackParticleLink().isValid()) {
104
105
106 if (muIt->muonType()==xAOD::Muon::SiliconAssociatedForwardMuon &&
m_inDetSGKey.key() !=
"InDetForwardTrackParticles")
107 {
108 ATH_MSG_DEBUG(
"Skipping Forward Muon since we are not skimming InDetForwardParticles");
109 }
110 else{
112 int index = muIt->inDetTrackParticleLink().index();
114 }
115 }
117 }
118 } else {
119 for (auto & muIt : muToCheck) {
120 if (muIt->inDetTrackParticleLink().isValid()) {
121
122 if (muIt->muonType()==xAOD::Muon::SiliconAssociatedForwardMuon &&
m_inDetSGKey.key() !=
"InDetForwardTrackParticles")
123 {
124 ATH_MSG_DEBUG(
"Skipping Forward Muon since we are not skimming InDetForwardParticles");
125 }
126 else{
128 int index = muIt->inDetTrackParticleLink().index();
130 }
131 }
133 }
134 }
135
136
137 unsigned int n_pass=0;
138 for (
unsigned int i=0;
i<nTracks; ++
i) {
139 if (mask[i]) ++n_pass;
140 }
142
143 importedTrackParticles.keep (mask);
144
145 return StatusCode::SUCCESS;
146}
Gaudi::Property< std::string > m_selectionString
std::atomic< unsigned int > m_ntot
SG::ReadHandleKey< xAOD::MuonContainer > m_muonKey
Gaudi::Property< float > m_coneSize
std::atomic< unsigned int > m_npass
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_inDetSGKey
void select(const xAOD::IParticle *particle, float coneSize, const xAOD::TrackParticleContainer *tracks, std::vector< bool > &mask)