retrieves the decisions associated to this decId, make their combinations and apply the algorithm
104 {
105
106 ATH_MSG_DEBUG(
"Size of passingLegs = " << passingLegs.size());
107
108 if (passingLegs.size() == 0) {
109 return StatusCode::SUCCESS;
110 }
111
112 std::vector<std::vector<Combo::LegDecision>> legDecisions;
114
115
116 ATH_MSG_DEBUG(
"Have "<<passingLegs.size()<<
" passing legs in AD");
117
118 std::vector<const xAOD::Jet*> input_jets;
119 std::map<const xAOD::Jet*, std::vector<Combo::LegDecision>> jet_decisions;
120 std::vector<const xAOD::Electron*> input_electrons;
121 std::map<const xAOD::Electron*, std::vector<Combo::LegDecision>> ele_decisions;
122 std::vector<const xAOD::Muon*> input_muons;
123 std::map<const xAOD::Muon*, std::vector<Combo::LegDecision>> muon_decisions;
124 std::vector<const xAOD::Photon*> input_photons;
125 std::map<const xAOD::Photon*, std::vector<Combo::LegDecision>> gam_decisions;
126 std::vector<const xAOD::TauJet*> input_taus;
127 std::map<const xAOD::TauJet*, std::vector<Combo::LegDecision>> taujet_decisions;
128 std::vector<const xAOD::TrigMissingET*> input_mets;
129 std::map<const xAOD::TrigMissingET*, std::vector<Combo::LegDecision>> met_decisions;
130
131 for(const auto &leg_decs : legDecisions){
132 for(const auto &dec_pair : leg_decs){
140 if(jet_feature_links.size()==1){
141 const TrigCompositeUtils::LinkInfo<xAOD::JetContainer> jet_feature_link = jet_feature_links.at(0);
144 jet_decisions[jet].push_back(dec_pair);
145 }
146 if(ele_feature_links.size()==1){
147 const TrigCompositeUtils::LinkInfo<xAOD::ElectronContainer> ele_feature_link = ele_feature_links.at(0);
150 ele_decisions[
electron].push_back(dec_pair);
151 }
152 if(muon_feature_links.size()==1){
153 const TrigCompositeUtils::LinkInfo<xAOD::MuonContainer> muon_feature_link = muon_feature_links.at(0);
156 muon_decisions[
muon].push_back(dec_pair);
157 }
158 if(gam_feature_links.size()==1){
159 const TrigCompositeUtils::LinkInfo<xAOD::PhotonContainer> gam_feature_link = gam_feature_links.at(0);
162 gam_decisions[
photon].push_back(dec_pair);
163 }
164 if(taujet_feature_links.size()==1){
165 const TrigCompositeUtils::LinkInfo<xAOD::TauJetContainer> taujet_feature_link = taujet_feature_links.at(0);
168 taujet_decisions[taujet].push_back(dec_pair);
169 }
170 if(met_feature_links.size()==1){
171 const TrigCompositeUtils::LinkInfo<xAOD::TrigMissingETContainer> met_feature_link = met_feature_links.at(0);
174 met_decisions[met].push_back(dec_pair);
175 }
176 }
177 }
178
179 for(const auto &pair : jet_decisions){
180 input_jets.push_back(pair.first);
181 }
182 if(input_jets.size()>1){
183 std::sort(input_jets.begin(), input_jets.end(),
184 [](
const auto a,
const auto b){
185 return a->pt() > b->pt();
186 });
187 }
188
189 for(const auto &pair : ele_decisions){
190 input_electrons.push_back(pair.first);
191 }
192 if(input_electrons.size()>1){
193 std::sort(input_electrons.begin(), input_electrons.end(),
194 [](
const auto a,
const auto b){
195 return a->pt() > b->pt();
196 });
197 }
198
199 for(const auto &pair : muon_decisions){
200 input_muons.push_back(pair.first);
201 }
202 if(input_muons.size()>1){
203 std::sort(input_muons.begin(), input_muons.end(),
204 [](
const auto a,
const auto b){
205 return a->pt() > b->pt();
206 });
207 }
208
209 for(const auto &pair : gam_decisions){
210 input_photons.push_back(pair.first);
211 }
212 if(input_photons.size()>1){
213 std::sort(input_photons.begin(), input_photons.end(),
214 [](
const auto a,
const auto b){
215 return a->pt() > b->pt();
216 });
217 }
218
219 for(const auto &pair : taujet_decisions){
220 input_taus.push_back(pair.first);
221 }
222 if(input_taus.size()>1){
223 std::sort(input_taus.begin(), input_taus.end(),
224 [](
const auto a,
const auto b){
225 return a->pt() > b->pt();
226 });
227 }
228
229 for(const auto &pair : met_decisions){
230 input_mets.push_back(pair.first);
231 }
232
233 float outputScore = this->
getAdScore(input_jets, input_muons, input_electrons, input_photons, input_taus, input_mets);
234
235
237 auto adScoreContainer = std::make_unique< xAOD::TrigCompositeContainer>();
238 auto adScoreContainerAux = std::make_unique< xAOD::TrigCompositeAuxContainer>();
239 adScoreContainer->setStore(adScoreContainerAux.get());
240
242 adScoreContainer->push_back(adScore);
243 adScore->
setDetail(
"adScore", outputScore );
244
245 SG::WriteHandle<xAOD::TrigCompositeContainer> adScoreHandle(
m_adScoreKey, context);
246 ATH_CHECK( adScoreHandle.record( std::move( adScoreContainer ), std::move( adScoreContainerAux ) ) );
247 }
248
249
251 auto monScore = Monitored::Scalar<float>("adScore", -1.0);
253 monScore = outputScore;
254 }
255
257
258 if(!trigPass){
260 }
261
262 return StatusCode::SUCCESS;
263}
#define ATH_CHECK
Evaluate an expression and check for errors.
bool setDetail(const std::string &name, const TYPE &value)
Set an TYPE detail on the object.
xAOD::TrigComposite Decision
const std::string & featureString()
void findLinks(const Decision *start, const std::string &linkName, std::vector< LinkInfo< T > > &links, unsigned int behaviour=TrigDefs::allFeaturesOfType, std::set< const xAOD::TrigComposite * > *fullyExploredFrom=nullptr)
search back the TC links for the object of type T linked to the one of TC (recursively) Populates pro...
static const unsigned int lastFeatureOfType
Run 3 "enum". Only return the final feature along each route through the navigation.
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
Jet_v1 Jet
Definition of the current "jet version".
TrigComposite_v1 TrigComposite
Declare the latest version of the class.
TauJet_v3 TauJet
Definition of the current "tau version".
TrigMissingET_v1 TrigMissingET
Define the most recent version of the TrigMissingET class.
Muon_v1 Muon
Reference the current persistent version:
Photon_v1 Photon
Definition of the current "egamma version".
Electron_v1 Electron
Definition of the current "egamma version".
ElementLink< T > link
Link to the feature.