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