15 #include "GaudiKernel/ThreadLocalContext.h"
23 m_histSvc (
"THistSvc/THistSvc",
name),
33 ATH_CHECK(m_inputContainerLeptonKey.initialize());
34 ATH_CHECK(m_inputContainerTrackKey.initialize());
35 ATH_CHECK(m_inputContainerTrackJetKey.initialize());
36 ATH_CHECK(m_inputContainerPrimaryVerticesKey.initialize());
45 m_decorHandleKeys.clear();
46 for(
const std::string &
label: m_toolRNN->getOutputLabels()) {
47 const std::string
key = m_decorationPrefixRNN +
label;
51 m_decorNameMap.try_emplace (
label, m_decorHandleKeys.size());
54 ATH_CHECK(m_decorHandleKeys.initialize());
56 ATH_MSG_DEBUG(
"inputContainerMuon=\"" << m_inputContainerLeptonKey <<
"\"");
61 m_accessQuality = std::make_unique<SG::AuxElement::ConstAccessor<unsigned char> >(
"quality");
65 ATH_MSG_DEBUG(
"DecoratePromptLeptonRNN initialized successfully.");
67 return StatusCode::SUCCESS;
79 const EventContext& ctx = Gaudi::Hive::currentContext();
97 std::vector<decoratorFloatH_t> decors;
98 decors.reserve (m_decorHandleKeys.size());
100 decors.emplace_back (
k, ctx);
110 primaryVertex = vertex;
128 if(bestmatchedGSFElTrack) {
133 trackLep = findMuonTrack(muon);
136 ATH_MSG_WARNING(
"execute - failed to find electron or muon: should never happen!");
142 const xAOD::Jet *trackJet = findClosestTrackJet(trackLep, *h_trackJets);
144 if(!trackLep || !trackJet) {
145 compDummy(*lepton, decors);
152 std::vector<Prompt::VarHolder > select_tracks;
156 if(!prepTrackObject(lepton_obj, *trackLep, *trackLep, *trackJet, *primaryVertex, *event_handle)) {
163 select_tracks.push_back(lepton_obj);
168 ATH_MSG_WARNING(
"Prompt::DecoratePromptLeptonRNN::execute - skip null track pointer - should never happen");
174 if(!prepTrackObject(track_obj, *track, *trackLep, *trackJet, *primaryVertex, *event_handle)) {
178 if(passTrack(track_obj)) {
179 select_tracks.push_back(track_obj);
181 ATH_MSG_DEBUG(
"Prompt::DecoratePromptLeptonRNN::execute - passed track pT= " << track->pt());
193 compScore(*lepton, select_tracks, decors);
195 ATH_MSG_DEBUG(
"DecoratePromptLeptonRNN::CompScore - " << std::endl
196 <<
"lepton pT= " << lepton->pt()
197 <<
", number of tracks: " << select_tracks.size());
200 return StatusCode::SUCCESS;
214 ATH_MSG_INFO(
"DecoratePromptLeptonRNN - processed " << m_countEvent <<
" events.");
217 return StatusCode::SUCCESS;
230 const unsigned char quality = (*m_accessQuality)(*muon);
251 double currTrackJetDR = -1.0;
257 const double dr = particle->p4().DeltaR(
jet->p4());
259 if(currTrackJetDR < 0.0 ||
dr < currTrackJetDR) {
265 if(trackJet && currTrackJetDR < m_maxLepTrackJetDR) {
317 if(track.pt() > 0.0 && trackJet.
pt() > 0.0) {
318 PtFrac = track.pt() / trackJet.
pt();
328 double d0_significance = -99.;
331 if(track.definingParametersCovMatrixVec().size() > 0 && track.definingParametersCovMatrixVec().at(0) > 0.0) {
333 event.beamPosSigmaX(),
334 event.beamPosSigmaY(),
335 event.beamPosSigmaXY());
338 const double deltaZ0 = track.z0() + track.vz() - priVtx.
z();
359 if(
p.getVar(
Def::Pt) < m_minTrackpT)
return false;
361 if(std::fabs(
p.getVar(
Def::Z0Sin)) > m_maxTrackZ0Sin)
return false;
376 const std::vector<Prompt::VarHolder> &tracks,
377 std::vector<decoratorFloatH_t>& decors)
382 ATH_MSG_DEBUG(
"compScore - number of tracks: " << tracks.size());
394 const std::map<std::string, double>
results = m_toolRNN->computeRNNOutput(tracks);
396 for(
const std::pair<const std::string, double>&
v:
results) {
401 ATH_MSG_DEBUG(
"DecoratePromptLeptonRNN compScore - " <<
v.first <<
" = " <<
v.second );
403 auto dit = m_decorNameMap.find (
v.first);
405 if(dit != m_decorNameMap.end()) {
406 decors.at(dit->second)(particle) =
v.second;
415 if(hit == m_hists.end()) {
418 StatusCode hist_status = makeHist(
h,
v.first, 100, 0.0, 1.0);
419 if (hist_status != StatusCode::SUCCESS){
420 ATH_MSG_WARNING(
"DecoratePromptLeptonRNN compScore - failed to make hist");
423 hit = m_hists.insert(std::map<std::string, TH1*>::value_type(
v.first,
h)).first;
427 hit->second->Fill(
v.second);
437 std::vector<decoratorFloatH_t>& decors)
const
442 for (
auto&
d : decors) {
457 if(m_outputStream.empty() ||
key.empty()) {
458 return StatusCode::SUCCESS;
462 const std::string hist_key =
"/"+m_outputStream+
"/"+
hname;
467 return m_histSvc->regHist(hist_key,
h);