60{
61
62
63 SG::ThinningHandle<xAOD::TrackParticleContainer> importedTrackParticles
65
66
67 unsigned int nTracks = importedTrackParticles->size();
68 if (nTracks==0) return StatusCode::SUCCESS;
69
70
71 std::vector<bool>
mask;
72 mask.assign(nTracks,
false);
74
75
76
77 SG::ReadHandle<xAOD::MuonContainer> importedMuons(
m_muonKey, ctx);
78 if (!importedMuons.isValid()) {
80 return StatusCode::FAILURE;
81 }
82 unsigned int nMuons(importedMuons->size());
83 std::vector<const xAOD::Muon*> muToCheck; muToCheck.clear();
84
86 std::vector<int>
entries = m_parser->evaluateAsVector();
88
89 if (nMuons != nEntries ) {
90 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used muons??");
91 return StatusCode::FAILURE;
92 } else {
93
94 for (
unsigned int i=0;
i<nMuons; ++
i)
if (
entries[i]==1) muToCheck.push_back((*importedMuons)[i]);
95 }
96 }
97
98 DerivationFramework::TracksInCone tInC;
100 for (const auto *muIt : *importedMuons) {
101 if (muIt->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle) != nullptr) {
102
103
104 if (muIt->muonType()==xAOD::Muon::MuonType::SiliconAssociatedForwardMuon &&
m_inDetSGKey.key() !=
"InDetForwardTrackParticles")
105 {
106 ATH_MSG_DEBUG(
"Skipping Forward Muon since we are not skimming InDetForwardParticles");
107 }
108 else{
110 int index = muIt->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)->index();
112 }
113 }
115 }
116 } else {
117 for (auto & muIt : muToCheck) {
118 if (muIt->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle) != nullptr) {
119
120 if (muIt->muonType()==xAOD::Muon::MuonType::SiliconAssociatedForwardMuon &&
m_inDetSGKey.key() !=
"InDetForwardTrackParticles")
121 {
122 ATH_MSG_DEBUG(
"Skipping Forward Muon since we are not skimming InDetForwardParticles");
123 }
124 else{
126 int index = muIt->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)->index();
128 }
129 }
131 }
132 }
133
134
135 unsigned int n_pass=0;
136 for (
unsigned int i=0;
i<nTracks; ++
i) {
137 if (mask[i]) ++n_pass;
138 }
140
141 importedTrackParticles.keep (mask);
142
143 return StatusCode::SUCCESS;
144}
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)