ATLAS Offline Software
Loading...
Searching...
No Matches
TrigEgammaMatchingToolMT.icc
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4#include <boost/algorithm/string.hpp>
5
6
7// L2Calo, L2Electron, L2Photon, EFCalo, Electron and Photon trigger passed access
8template<class T>
9inline bool TrigEgammaMatchingToolMT::ancestorPassed( const EventContext& ctx,
10 const TrigCompositeUtils::Decision *dec, const std::string& trigger, const std::string& key,
11 unsigned int condition) const
12{
13
14 if( !dec ) return false;
15
16 auto initRoi = TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(ctx, dec, "initialRoI");
17 if( !initRoi.isValid() )
18 return false;
19
20 auto vec = tdt()->features< T >(trigger,condition ,key);
21
22 for( auto &featLinkInfo : vec )
23 {
24 auto roi = TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(ctx, featLinkInfo.source, "initialRoI");
25 if( ! roi.isValid()) continue;
26 if( (*roi.link)->roiWord() == (*initRoi.link)->roiWord())
27 {
28 bool passed = (featLinkInfo.state==TrigCompositeUtils::ActiveState::ACTIVE);
29 if(passed) return true;
30 }
31 }
32 return false;
33}
34
35
36// L1Calo trigger passed access
37template<>
38inline bool TrigEgammaMatchingToolMT::ancestorPassed<TrigRoiDescriptorCollection>( const EventContext& ctx,
39 const TrigCompositeUtils::Decision *dec,
40 const std::string& trigger, const std::string& /*key*/,
41 unsigned int condition ) const
42{
43 if( !dec ) return false;
44 auto initRoi = TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(ctx, dec, "initialRoI");
45 if( !initRoi.isValid() )
46 return false;
47
48 auto vec = tdt()->features<TrigRoiDescriptorCollection>(trigger,condition,"",TrigDefs::allFeaturesOfType,"initialRoI");
49
50 for( auto &featLinkInfo : vec )
51 {
52 if(!featLinkInfo.isValid()) continue;
53 if( (*featLinkInfo.link)->roiWord() == (*initRoi.link)->roiWord())
54 {
55 bool passed = (featLinkInfo.state==TrigCompositeUtils::ActiveState::ACTIVE);
56 if(passed) return true;
57 }
58 }
59 return true;
60}
61
62
63
64
65template<class T>
66inline bool TrigEgammaMatchingToolMT::closestObject( const xAOD::Egamma *eg, const TrigCompositeUtils::Decision *&dec,
67 const std::string &trigger, const std::string &key ,
68 float dR_value, unsigned int condition ) const
69{
70 double deltaR=0.;
71 auto vec = tdt()->features<T>(trigger, condition ,key);
72
73
74 for( auto &featLinkInfo : vec ){
75
76 if(! featLinkInfo.isValid() ) continue;
77 const auto *feat = *(featLinkInfo.link);
78 if(!feat) continue;
79 deltaR = dR(eg->eta(),eg->phi(), feat->eta(),feat->phi());
80 if(deltaR < dR_value){
81 dec = featLinkInfo.source;
82 return true;
83 }
84 }
85 return false;
86}
87
88
89template<class T>
90inline std::vector<TrigCompositeUtils::LinkInfo<T>> TrigEgammaMatchingToolMT::getFeatures( const EventContext& ctx,
91 const TrigCompositeUtils::Decision *dec ,
92 const std::string& trigger, const std::string& key,
93 unsigned int condition ) const
94{
95 std::vector<TrigCompositeUtils::LinkInfo<T>> vec;
96 auto initRoi = TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(ctx, dec, "initialRoI");
97 if( !initRoi.isValid() ) return vec;
98
99 auto vec_dec = tdt()->features<T>(trigger,condition, key);
100 for ( auto& featLinkInfo : vec_dec ){
101 if( !featLinkInfo.isValid() ) continue;
102 auto roi = TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(ctx, featLinkInfo.source, "initialRoI");
103 if( ! roi.isValid()) continue;
104 if( (*roi.link)->roiWord() == (*initRoi.link)->roiWord() )
105 vec.push_back( featLinkInfo );
106 }
107 return vec;
108}
109
110
111
112
113
114// L1Calo
115template<>
116inline TrigCompositeUtils::LinkInfo<TrigRoiDescriptorCollection>
117TrigEgammaMatchingToolMT::getFeature<TrigRoiDescriptorCollection>( const EventContext& ctx,
118 const TrigCompositeUtils::Decision *dec ,
119 const std::string& trigger, unsigned int condition ) const
120{
121 auto initRoi = TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(ctx, dec, "initialRoI");
122
123 if( initRoi.isValid() ){
124 // includeFailedDecisions
125
126 auto vec_dec = tdt()->features<TrigRoiDescriptorCollection>(trigger, condition,"",TrigDefs::allFeaturesOfType,"initialRoI");
127 for( auto &featLinkInfo: vec_dec ){
128 if( !featLinkInfo.isValid() ) continue;
129 if( (*featLinkInfo.link)->roiWord() == (*initRoi.link)->roiWord() ) return featLinkInfo;
130 }
131 }
132
133 return TrigCompositeUtils::LinkInfo<TrigRoiDescriptorCollection>();
134}
135
136
137// L2Calo
138template<>
139inline TrigCompositeUtils::LinkInfo<xAOD::TrigEMClusterContainer>
140TrigEgammaMatchingToolMT::getFeature<xAOD::TrigEMClusterContainer>( const EventContext& ctx,
141 const TrigCompositeUtils::Decision *dec ,
142 const std::string& trigger, unsigned int condition ) const
143{
144 std::vector<TrigCompositeUtils::LinkInfo<xAOD::TrigEMClusterContainer>> vec =
145 getFeatures<xAOD::TrigEMClusterContainer>(ctx, dec, trigger, key("FastCalo") , condition);
146 return !vec.empty() ? vec.front() : TrigCompositeUtils::LinkInfo<xAOD::TrigEMClusterContainer>();
147}
148
149
150// L2Electron
151template<>
152inline std::vector<TrigCompositeUtils::LinkInfo<xAOD::TrigElectronContainer>>
153TrigEgammaMatchingToolMT::getFeatures<xAOD::TrigElectronContainer>( const EventContext& ctx,
154 const TrigCompositeUtils::Decision *dec ,
155 const std::string& trigger,
156 unsigned int condition ) const
157{
158 if(boost::contains(trigger,"lrt")){
159 return getFeatures<xAOD::TrigElectronContainer>(ctx, dec, trigger, key("FastElectrons_LRT"), condition);
160 }else{
161 return getFeatures<xAOD::TrigElectronContainer>(ctx, dec, trigger, key("FastElectrons"), condition);
162 }
163}
164
165
166// L2Photon
167template<>
168inline TrigCompositeUtils::LinkInfo<xAOD::TrigPhotonContainer>
169TrigEgammaMatchingToolMT::getFeature<xAOD::TrigPhotonContainer>( const EventContext& ctx,
170 const TrigCompositeUtils::Decision *dec ,
171 const std::string& trigger,
172 unsigned int condition ) const
173{
174 auto vec = getFeatures<xAOD::TrigPhotonContainer>(ctx, dec, trigger, key("FastPhotons") , condition);
175 return !vec.empty() ? vec.front() : TrigCompositeUtils::LinkInfo<xAOD::TrigPhotonContainer>();
176}
177
178
179// EFCalo
180template<>
181inline std::vector<TrigCompositeUtils::LinkInfo<xAOD::CaloClusterContainer>>
182TrigEgammaMatchingToolMT::getFeatures<xAOD::CaloClusterContainer>( const EventContext& ctx,
183 const TrigCompositeUtils::Decision *dec ,
184 const std::string& trigger,
185 unsigned int condition ) const
186{
187 std::vector<std::string> parts;
188 boost::split(parts,trigger,boost::is_any_of("_"));
189
190 if(boost::contains(trigger,"lrt")){
191 return getFeatures<xAOD::CaloClusterContainer>(ctx, dec, trigger, key("PrecisionCalo_LRT"), condition );
192 }else if(boost::contains(parts.at(0),"g")){
193 return getFeatures<xAOD::CaloClusterContainer>(ctx, dec, trigger, key("PrecisionCalo_Photon"), condition );
194 }else{
195 return getFeatures<xAOD::CaloClusterContainer>(ctx, dec, trigger, key("PrecisionCalo_Electron"), condition );
196 }
197
198}
199
200
201
202// Electron
203template<>
204inline std::vector<TrigCompositeUtils::LinkInfo<xAOD::ElectronContainer>>
205TrigEgammaMatchingToolMT::getFeatures<xAOD::ElectronContainer>(const EventContext& ctx,
206 const TrigCompositeUtils::Decision *dec,
207 const std::string& trigger,
208 unsigned int condition) const
209{
210 if (boost::contains(trigger,"gsf")){
211 return getFeatures<xAOD::ElectronContainer>(ctx, dec, trigger, key("Electrons_GSF") , condition);
212 }else if(boost::contains(trigger,"lrt")){
213 return getFeatures<xAOD::ElectronContainer>(ctx, dec, trigger, key("Electrons_LRT") , condition);
214 }else{
215 return getFeatures<xAOD::ElectronContainer>(ctx, dec, trigger, key("Electrons") , condition);
216 }
217}
218
219
220// Photon
221template<>
222inline std::vector<TrigCompositeUtils::LinkInfo<xAOD::PhotonContainer>>
223TrigEgammaMatchingToolMT::getFeatures<xAOD::PhotonContainer>( const EventContext& ctx,
224 const TrigCompositeUtils::Decision *dec ,
225 const std::string& trigger,
226 unsigned int condition ) const
227{
228 return getFeatures<xAOD::PhotonContainer>(ctx, dec, trigger, key("Photons"), condition );
229}
230
231
232
233
234
235