63 ATH_MSG_DEBUG(
"DecoratePromptLeptonRNN initialized successfully.");
65 return StatusCode::SUCCESS;
92 ATH_MSG_DEBUG(
"Size of LeptonContainer: " << h_leptons->size());
94 std::vector<decoratorFloatH_t> decors;
97 decors.emplace_back (k, ctx);
107 primaryVertex = vertex;
125 if(bestmatchedGSFElTrack) {
133 ATH_MSG_WARNING(
"execute - failed to find electron or muon: should never happen!");
141 if(!trackLep || !trackJet) {
149 std::vector<Prompt::VarHolder > select_tracks;
153 if(!
prepTrackObject(lepton_obj, *trackLep, *trackLep, *trackJet, *primaryVertex, *event_handle)) {
160 select_tracks.push_back(lepton_obj);
165 ATH_MSG_WARNING(
"Prompt::DecoratePromptLeptonRNN::execute - skip null track pointer - should never happen");
171 if(!
prepTrackObject(track_obj, *track, *trackLep, *trackJet, *primaryVertex, *event_handle)) {
176 select_tracks.push_back(track_obj);
178 ATH_MSG_DEBUG(
"Prompt::DecoratePromptLeptonRNN::execute - passed track pT= " << track->pt());
190 compScore(*lepton, select_tracks, decors);
192 ATH_MSG_DEBUG(
"DecoratePromptLeptonRNN::CompScore - " << std::endl
193 <<
"lepton pT= " << lepton->pt()
194 <<
", number of tracks: " << select_tracks.size());
197 return StatusCode::SUCCESS;
214 return StatusCode::SUCCESS;
222 ATH_MSG_DEBUG(
"muon pT=" << muon->pt() <<
" quality=" << muon->quality());
224 return muon->muonType() == xAOD::Muon::MuonType::Combined ?
225 muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle) :
nullptr;
240 double currTrackJetDR = -1.0;
246 const double dr = particle->p4().DeltaR(
jet->p4());
248 if(currTrackJetDR < 0.0 || dr < currTrackJetDR) {
274 uint8_t numberOfPixelHits = 0;
275 uint8_t numberOfSCTHits = 0;
276 uint8_t numberOfPixelHoles = 0;
277 uint8_t numberOfSCTHoles = 0;
278 uint8_t numberOfPixelSharedHits = 0;
279 uint8_t numberOfSCTSharedHits = 0;
288 const uint8_t NSiHits = numberOfPixelHits + numberOfSCTHits;
289 const uint8_t NSiHoles = numberOfPixelHoles + numberOfSCTHoles;
290 const float NSiShHits = float(numberOfPixelSharedHits) + float(numberOfSCTSharedHits)/2.0;
304 double PtFrac = -99.;
306 if(track.pt() > 0.0 && trackJet.
pt() > 0.0) {
307 PtFrac = track.pt() / trackJet.
pt();
317 double d0_significance = -99.;
320 if(track.definingParametersCovMatrixVec().size() > 0 && track.definingParametersCovMatrixVec().at(0) > 0.0) {
322 event.beamPosSigmaX(),
323 event.beamPosSigmaY(),
324 event.beamPosSigmaXY());
327 const double deltaZ0 = track.z0() + track.vz() - priVtx.
z();
328 Z0Sin = deltaZ0*std::sin(track.theta());
365 const std::vector<Prompt::VarHolder> &tracks,
366 std::vector<decoratorFloatH_t>& decors)
371 ATH_MSG_DEBUG(
"compScore - number of tracks: " << tracks.size());
383 const std::map<std::string, double> results =
m_toolRNN->computeRNNOutput(tracks);
385 for(
const std::pair<const std::string, double>& v: results) {
390 ATH_MSG_DEBUG(
"DecoratePromptLeptonRNN compScore - " << v.first <<
" = " << v.second );
395 decors.at(dit->second)(particle) = v.second;
398 ATH_MSG_WARNING(
"CompScore - unknown output label=\"" << v.first <<
"\"");
402 std::map<std::string, TH1*>::iterator hit =
m_hists.find(v.first);
407 StatusCode hist_status =
makeHist(
h, v.first, 100, 0.0, 1.0);
408 if (hist_status != StatusCode::SUCCESS){
409 ATH_MSG_WARNING(
"DecoratePromptLeptonRNN compScore - failed to make hist");
412 hit =
m_hists.insert(std::map<std::string, TH1*>::value_type(v.first,
h)).first;
416 hit->second->Fill(v.second);
426 std::vector<decoratorFloatH_t>& decors)
const
431 for (
auto& d : decors) {
447 return StatusCode::SUCCESS;
450 const std::string hname = name() +
"_" + key;
453 h =
new TH1D(hname.c_str(), hname.c_str(), nbin,
xmin,
xmax);
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
Some common helper functions used by decoration handles.
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Header file for AthHistogramAlgorithm.
ServiceHandle< ITHistSvc > m_histSvc
virtual StatusCode finalize() override
SG::ReadHandleKey< xAOD::JetContainer > m_inputContainerTrackJetKey
Gaudi::Property< double > m_maxTrackEta
const xAOD::TrackParticle * findMuonTrack(const xAOD::Muon *muon)
bool compDummy(const xAOD::IParticle &particle, std::vector< decoratorFloatH_t > &decors) const
Gaudi::Property< unsigned > m_minTrackSiHits
std::map< std::string, TH1 * > m_hists
DecoratePromptLeptonRNN(const std::string &name, ISvcLocator *pSvcLocator)
Gaudi::Property< unsigned > m_maxTrackSiHoles
Gaudi::Property< bool > m_debug
StatusCode makeHist(TH1 *&h, const std::string &key, int nbin, double xmin, double xmax)
ToolHandle< IRNNTool > m_toolRNN
std::unordered_map< std::string, size_t > m_decorNameMap
Gaudi::Property< bool > m_printTime
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
Gaudi::Property< double > m_maxTrackLeptonDR
const xAOD::Jet * findClosestTrackJet(const xAOD::TrackParticle *particle, const xAOD::JetContainer &trackJets)
SG::ReadHandleKey< xAOD::IParticleContainer > m_inputContainerLeptonKey
Gaudi::Property< double > m_maxLepTrackJetDR
bool passTrack(Prompt::VarHolder &p)
Gaudi::Property< double > m_maxTrackZ0Sin
virtual StatusCode initialize() override
SG::WriteDecorHandleKeyArray< xAOD::IParticleContainer > m_decorHandleKeys
SG::ReadHandleKey< xAOD::VertexContainer > m_inputContainerPrimaryVerticesKey
Gaudi::Property< std::string > m_decorationPrefixRNN
Gaudi::Property< std::string > m_outputStream
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_inputContainerTrackKey
bool compScore(const xAOD::IParticle &particle, const std::vector< Prompt::VarHolder > &tracks, std::vector< decoratorFloatH_t > &decors)
Gaudi::Property< double > m_maxTrackSharedSiHits
Gaudi::Property< unsigned > m_maxTrackPixHoles
SG::ReadHandleKey< xAOD::EventInfo > m_eventHandleKey
Gaudi::Property< double > m_minTrackLeptonDR
bool prepTrackObject(Prompt::VarHolder &p, const xAOD::TrackParticle &track, const xAOD::TrackParticle &lepton, const xAOD::Jet &trackJet, const xAOD::Vertex &priVtx, const xAOD::EventInfo event)
Gaudi::Property< double > m_minTrackpT
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
const xAOD::TrackParticle * trackParticle(size_t index=0) const
Pointer to the xAOD::TrackParticle/s that match the electron candidate.
Class providing the definition of the 4-vector interface.
virtual FourMom_t p4() const
The full 4-momentum of the particle.
virtual double pt() const
The transverse momentum ( ) of the particle.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
float z() const
Returns the z position.
std::string label(const std::string &format, int i)
std::string PrintResetStopWatch(TStopwatch &watch)
std::string makeContDecorKey(const std::string &cont, const std::string &decor)
Make a StoreGate key from container and decoration name.
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
const xAOD::TrackParticle * getOriginalTrackParticleFromGSF(const xAOD::TrackParticle *trkPar)
Helper function for getting the "Original" Track Particle (i.e before GSF) via the GSF Track Particle...
double d0significance(const xAOD::TrackParticle *tp, double d0_uncert_beam_spot_2)
Jet_v1 Jet
Definition of the current "jet version".
EventInfo_v1 EventInfo
Definition of the latest event info version.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
Muon_v1 Muon
Reference the current persistent version:
JetContainer_v1 JetContainer
Definition of the current "jet container version".
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].
@ numberOfSCTHoles
number of SCT holes [unit8_t].
Electron_v1 Electron
Definition of the current "egamma version".