41 m_saltModel = std::make_shared<FlavorTagInference::SaltModel>(fullPathToOnnxFile);
44 m_saltModel_endcap = std::make_shared<FlavorTagInference::SaltModel>(fullPathToOnnxFile_endcap);
50 std::map<std::string, FlavorTagInference::Inputs> gnn_input;
53 std::vector<int64_t> elec_feat_dim = {1,
static_cast<int64_t
>(elec_feat.size())};
55 gnn_input.insert({
"jet_features", elec_info});
60 gnn_input.insert({
"track_features", track_info});
62 auto [out_f, out_vc, out_vf] =
m_saltModel->runInference(gnn_input);
64 std::vector<std::string> output_names;
65 for (
auto& singlefloat : out_f){
67 std::string outname =
m_electronsKey.key()+
"." +
m_TaggerName +
"_" + (singlefloat.first.find(
"elxpromp") != std::string::npos ?
"PLITel_pelxpromp" :
"PLITel_pnpxall" );
69 output_names.push_back(outname);
76 m_saltModel = std::make_shared<FlavorTagInference::SaltModel>(fullPathToOnnxFile);
82 std::map<std::string, FlavorTagInference::Inputs> gnn_input;
85 std::vector<int64_t> muon_feat_dim = {1,
static_cast<int64_t
>(muon_feat.size())};
87 gnn_input.insert({
"jet_features", muon_info});
92 gnn_input.insert({
"track_features", track_info});
94 auto [out_f, out_vc, out_vf] =
m_saltModel->runInference(gnn_input);
96 std::vector<std::string> output_names;
97 for (
auto& singlefloat : out_f){
99 std::string outname =
m_muonsKey.key()+
"." +
m_TaggerName +
"_" + (singlefloat.first.find(
"muxpromp") != std::string::npos ?
"TPLTmu_pmuxpromp" :
"TPLTmu_pnpxall" );
101 output_names.push_back(outname);
108 return StatusCode::FAILURE;
111 ATH_MSG_INFO(
"DecoratePLIT " << name() <<
" initialization done." );
113 return StatusCode::SUCCESS;
128 dec_trk_dr_lepton(*track) = -999.0;
129 dec_trk_dr_leptontrack(*track) = -999.0;
130 dec_trk_electron_track(*track) =
static_cast<char>(
false);
131 dec_trk_muon_track(*track) =
static_cast<char>(
false);
137 std::vector<SG::WriteDecorHandle<xAOD::ElectronContainer, float>> dec_el_plit_output;
139 dec_el_plit_output.emplace_back(wdhk, ctx);
143 if (!
predictElec(dec_trk_dr_lepton, dec_trk_dr_leptontrack, dec_trk_electron_track, dec_trk_muon_track,
144 *elec, *tracks, *caloclusters, dec_el_plit_output, ctx)) {
145 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to predict electron");
146 return StatusCode::FAILURE;
152 std::vector<SG::WriteDecorHandle<xAOD::MuonContainer, float>> dec_mu_plit_output;
154 dec_mu_plit_output.emplace_back(wdhk, ctx);
158 if (!
predictMuon(dec_trk_dr_lepton, dec_trk_dr_leptontrack, dec_trk_electron_track, dec_trk_muon_track,
159 *muon, *tracks, dec_mu_plit_output, ctx)) {
160 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to predict muon");
161 return StatusCode::FAILURE;
166 return StatusCode::SUCCESS;
196 return StatusCode::SUCCESS;
208 const EventContext& ctx)
const {
224 std::map<std::string, FlavorTagInference::Inputs> gnn_input;
227 float muon_pt = muon.pt();
228 float muon_eta = muon.eta();
229 float muon_phi = muon.phi();
231 float muon_ptvarcone30TTVARel = acc_ptvarcone30TTVA(muon) / muon_pt;
232 float muon_topoetcone30Rel = acc_topoetcone30(muon) / muon_pt;
234 float muon_caloClusterERel = -99;
237 float energyloss = 0;
238 if (!muon.parameter(energyloss,xAOD::Muon::EnergyLoss)) {
239 ATH_MSG_WARNING(
"DecoratePLIT::execute - failed to retrieve energy loss");
240 return StatusCode::FAILURE;
242 float calE = cluster->
calE();
246 if (std::abs(energyloss) != 0)
247 muon_caloClusterERel = calE / energyloss;
251 std::vector<float> muon_feat = {
255 muon_ptvarcone30TTVARel,
256 muon_topoetcone30Rel,
257 muon_caloClusterERel};
258 std::vector<int64_t> muon_feat_dim = {1,
static_cast<int64_t
>(muon_feat.size())};
262 gnn_input.insert({
"jet_features", muon_info});
266 std::vector<const xAOD::IParticle *> parts;
268 if(!
fillParticles(dec_trk_dr_lepton, dec_trk_dr_leptontrack, dec_trk_electron_track, dec_trk_muon_track,
269 parts, muon, muonTrack, tracks, ctx)) {
270 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to fill particles");
271 return StatusCode::FAILURE;
275 std::vector<float> track_feat;
276 track_feat.reserve(parts.size() *
static_cast<int64_t
>(muon_feat.size()));
283 float deta_lepton = track->p4().Eta() - muon.eta();
285 float dphi_lepton = track->p4().DeltaPhi(muon.p4());
287 float qoverp = track->qOverP();
289 float d0 = acc_d0(*track);
291 float z0SinTheta = acc_z0SinTheta(*track);
293 float d0Uncertainty = acc_d0Uncertainty(*track);
295 float z0SinThetaUncertainty = acc_z0SinThetaUncertainty(*track);
297 float d0_significance = -99;
298 if (abs(d0Uncertainty) > 0) d0_significance = d0 / d0Uncertainty;
300 float z0SinTheta_significance = -99;
301 if (std::abs(z0SinThetaUncertainty) > 0) z0SinTheta_significance = z0SinTheta / z0SinThetaUncertainty;
303 uint8_t pix_hits = 0;
305 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfPixelHits");
306 return StatusCode::FAILURE;
309 uint8_t pix_innermosthits = 0;
311 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfInnermostPixelLayerHits");
312 return StatusCode::FAILURE;
315 uint8_t pix_nextinnermosthits = 0;
317 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfNextToInnermostPixelLayerHits");
318 return StatusCode::FAILURE;
321 uint8_t pix_innermostsharedhits = 0;
323 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfInnermostPixelLayerSharedHits");
324 return StatusCode::FAILURE;
327 uint8_t pix_innermostsplithits = 0;
329 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfInnermostPixelLayerSplitHits");
330 return StatusCode::FAILURE;
333 uint8_t pix_shared = 0;
335 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfPixelSharedHits");
336 return StatusCode::FAILURE;
339 uint8_t pix_split = 0;
341 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfPixelSplitHits");
342 return StatusCode::FAILURE;
345 uint8_t sct_hits = 0;
347 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfSCTHits");
348 return StatusCode::FAILURE;
351 uint8_t sct_shared = 0;
353 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfSCTSharedHits");
354 return StatusCode::FAILURE;
357 char muon_track = acc_muon_track(*track);
359 track_feat.push_back(deta_lepton);
360 track_feat.push_back(dphi_lepton);
361 track_feat.push_back(qoverp);
362 track_feat.push_back(d0);
363 track_feat.push_back(z0SinTheta);
366 track_feat.push_back(d0_significance);
367 track_feat.push_back(z0SinTheta_significance);
368 track_feat.push_back(pix_hits);
369 track_feat.push_back(pix_innermosthits);
370 track_feat.push_back(pix_nextinnermosthits);
371 track_feat.push_back(pix_innermostsharedhits);
372 track_feat.push_back(pix_innermostsplithits);
373 track_feat.push_back(pix_shared);
374 track_feat.push_back(pix_split);
375 track_feat.push_back(sct_hits);
376 track_feat.push_back(sct_shared);
377 track_feat.push_back(muon_track);
381 int num_cnsts = parts.size();
385 gnn_input.insert({
"track_features", track_info});
387 if (
msgLvl(MSG::VERBOSE)) {
389 for (
auto& inp : gnn_input){
391 for (
auto & dim: inp.second.second) {
395 for (
auto & con: inp.second.first) {
403 auto [out_f, out_vc, out_vf] =
m_saltModel->runInference(gnn_input);
404 if (
msgLvl(MSG::VERBOSE)) {
408 for (
auto& singlefloat : out_f){
412 for (
auto& vecchar : out_vc){
414 for (
auto& cc : vecchar.second){
419 for (
auto& vecfloat : out_vf){
421 for (
auto& ff : vecfloat.second){
427 auto it_dec_mu_plit_output = dec_mu_plit_output.begin();
428 for (
auto& singlefloat : out_f){
429 ATH_MSG_DEBUG(
"DecoratePLIT::execute - Muon output: " + singlefloat.first +
" = " + std::to_string(singlefloat.second));
430 (*it_dec_mu_plit_output)(muon) = singlefloat.second;
431 ++it_dec_mu_plit_output;
434 return StatusCode::SUCCESS;
446 const EventContext& ctx)
const {
449 std::map<std::string, FlavorTagInference::Inputs> gnn_input;
465 float elec_pt = electron.pt();
466 float elec_eta = electron.eta();
467 float elec_phi = electron.phi();
468 float elec_ptvarcone30Rel = acc_ptvarcone30(electron) / elec_pt;
469 float elec_topoetcone30Rel = acc_topoetcone30(electron) / elec_pt;
472 float elec_caloClusterSumEtRel = 0.0;
473 float sumCoreEt_large = 0.0;
474 if (electron.caloCluster()) {
475 float elec_calEta = electron.caloCluster()->eta();
476 float elec_calPhi = electron.caloCluster()->phi();
479 float deta = elec_calEta - cluster->eta();
480 float dphi = TVector2::Phi_mpi_pi(elec_calPhi - cluster->phi());
481 float dr = std::sqrt(deta*deta + dphi*dphi);
484 sumCoreEt_large += cluster->pt();
488 elec_caloClusterSumEtRel = sumCoreEt_large / elec_pt;
493 if (bestmatchedGSFElTrack) {
506 std::vector<float> electron_feat = {
511 elec_topoetcone30Rel,
512 elec_caloClusterSumEtRel};
513 std::vector<int64_t> electron_feat_dim = {1,
static_cast<int64_t
>(electron_feat.size())};
517 gnn_input.insert({
"jet_features", electron_info});
520 std::vector<const xAOD::IParticle *> parts;
521 if (!
fillParticles(dec_trk_dr_lepton, dec_trk_dr_leptontrack, dec_trk_electron_track, dec_trk_muon_track,
522 parts, electron, electronTrack, tracks, ctx)) {
523 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to fill particles");
524 return StatusCode::FAILURE;
528 std::vector<float> track_feat;
529 track_feat.reserve(parts.size() *
static_cast<int64_t
>(electron_feat.size()));
541 float deta_lepton = track->p4().Eta() - electron.eta();
543 float dphi_lepton = track->p4().DeltaPhi(electron.p4());
545 float qoverp = track->qOverP();
547 float d0 = acc_d0(*track);
549 float z0SinTheta = acc_z0SinTheta(*track);
551 float d0Uncertainty = acc_d0Uncertainty(*track);
552 float d0_significance = -99;
553 if (std::abs(d0Uncertainty) > 0) d0_significance = d0 / d0Uncertainty;
555 float z0SinThetaUncertainty = acc_z0SinThetaUncertainty(*track);
556 float z0SinTheta_significance = -99;
557 if (std::abs(z0SinThetaUncertainty) > 0) z0SinTheta_significance = z0SinTheta / z0SinThetaUncertainty;
559 uint8_t pix_innermosthits = 0;
561 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfInnermostPixelLayerHits");
562 return StatusCode::FAILURE;
565 uint8_t pix_nextinnermosthits = 0;
567 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfNextToInnermostPixelLayerHits");
568 return StatusCode::FAILURE;
571 uint8_t pix_innermostsharedhits = 0;
573 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfInnermostPixelLayerSharedHits");
574 return StatusCode::FAILURE;
577 uint8_t pix_innermostsplithits = 0;
579 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfInnermostPixelLayerSplitHits");
580 return StatusCode::FAILURE;
583 uint8_t pix_hits = 0;
585 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfPixelHits");
586 return StatusCode::FAILURE;
589 uint8_t pix_shared = 0;
591 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfPixelSharedHits");
592 return StatusCode::FAILURE;
595 uint8_t pix_split = 0;
597 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfPixelSplitHits");
598 return StatusCode::FAILURE;
601 uint8_t sct_hits = 0;
603 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfSCTHits");
604 return StatusCode::FAILURE;
607 uint8_t sct_shared = 0;
609 ATH_MSG_ERROR(
"DecoratePLIT::execute - failed to retrieve xAOD::numberOfSCTSharedHits");
610 return StatusCode::FAILURE;
613 char electron_track = acc_electron_track(*track);
617 track_feat.push_back(deta_lepton);
618 track_feat.push_back(dphi_lepton);
619 track_feat.push_back(qoverp);
620 track_feat.push_back(d0);
621 track_feat.push_back(z0SinTheta);
622 track_feat.push_back(d0_significance);
623 track_feat.push_back(z0SinTheta_significance);
624 track_feat.push_back(pix_innermosthits);
625 track_feat.push_back(pix_nextinnermosthits);
626 track_feat.push_back(pix_innermostsharedhits);
627 track_feat.push_back(pix_innermostsplithits);
628 track_feat.push_back(pix_hits);
629 track_feat.push_back(pix_shared);
630 track_feat.push_back(pix_split);
631 track_feat.push_back(sct_hits);
632 track_feat.push_back(sct_shared);
633 track_feat.push_back(electron_track);
637 int num_cnsts = parts.size();
641 gnn_input.insert({
"track_features", track_info});
643 if (
msgLvl(MSG::VERBOSE)) {
645 for (
auto& inp : gnn_input){
647 for (
auto & dim: inp.second.second) {
651 for (
auto & con: inp.second.first) {
660 auto [out_f, out_vc, out_vf] = (std::abs(elec_eta) < 1.37) ?
m_saltModel->runInference(gnn_input) :
m_saltModel_endcap->runInference(gnn_input);
661 if (
msgLvl(MSG::VERBOSE)) {
665 for (
auto& singlefloat : out_f){
669 for (
auto& vecchar : out_vc){
671 for (
auto& cc : vecchar.second){
676 for (
auto& vecfloat : out_vf){
678 for (
auto& ff : vecfloat.second){
684 auto it_dec_el_plit_output = dec_el_plit_output.begin();
685 for (
auto& singlefloat : out_f){
686 ATH_MSG_DEBUG(
"DecoratePLIT::execute - Electron output: " + singlefloat.first +
" = " + std::to_string(singlefloat.second));
687 (*it_dec_el_plit_output)(electron) = singlefloat.second;
688 ++it_dec_el_plit_output;
691 return StatusCode::SUCCESS;
697 constexpr float pt_minimum = 500;
698 constexpr float abs_eta_maximum = 2.5;
699 constexpr float d0_maximum = 3.5;
700 constexpr float z0_maximum= 5.0;
701 constexpr unsigned char si_hits_minimum = 8;
702 constexpr unsigned char si_shared_maximum = 1;
703 constexpr unsigned char si_holes_maximum = 2;
704 constexpr unsigned char pix_holes_maximum = 1;
711 uint8_t pix_shared = 0;
713 ATH_MSG_ERROR(
"DecoratePLIT::passed_r22tracking_cuts - failed to retrieve xAOD::numberOfPixelSharedHits");
716 uint8_t sct_shared = 0;
718 ATH_MSG_ERROR(
"DecoratePLIT::passed_r22tracking_cuts - failed to retrieve xAOD::numberOfSCTSharedHits");
721 uint8_t pix_hits = 0;
723 ATH_MSG_ERROR(
"DecoratePLIT::passed_r22tracking_cuts - failed to retrieve xAOD::numberOfPixelHits");
726 uint8_t sct_hits = 0;
728 ATH_MSG_ERROR(
"DecoratePLIT::passed_r22tracking_cuts - failed to retrieve xAOD::numberOfSCTHits");
731 uint8_t pix_dead = 0;
733 ATH_MSG_ERROR(
"DecoratePLIT::passed_r22tracking_cuts - failed to retrieve xAOD::numberOfPixelDeadSensors");
736 uint8_t sct_dead = 0;
738 ATH_MSG_ERROR(
"DecoratePLIT::passed_r22tracking_cuts - failed to retrieve xAOD::numberOfSCTDeadSensors");
741 uint8_t pix_holes = 0;
743 ATH_MSG_ERROR(
"DecoratePLIT::passed_r22tracking_cuts - failed to retrieve xAOD::numberOfPixelHoles");
746 uint8_t sct_holes = 0;
748 ATH_MSG_ERROR(
"DecoratePLIT::passed_r22tracking_cuts - failed to retrieve xAOD::numberOfSCTHoles");
752 if (std::abs(tp.
eta()) > abs_eta_maximum)
754 double n_module_shared = (pix_shared + sct_shared / 2);
755 if (n_module_shared > si_shared_maximum)
757 if (tp.
pt() <= pt_minimum)
759 if (std::isfinite(d0_maximum) &&
760 std::abs(acc_d0(tp)) >= d0_maximum)
762 if (std::isfinite(z0_maximum) &&
763 std::abs(acc_z0SinTheta(tp)) >= z0_maximum)
765 if (pix_hits + pix_dead + sct_hits + sct_dead < si_hits_minimum)
767 if ((pix_holes + sct_holes) > si_holes_maximum)
769 if (pix_holes > pix_holes_maximum)
779 std::vector<const xAOD::IParticle *> &parts,
783 const EventContext& ctx)
const
789 std::set<const xAOD::TrackParticle*> tracksUsedForElectron;
790 std::set<const xAOD::TrackParticle*> tracksUsedForMuon;
791 if (
const auto* elec =
dynamic_cast<const xAOD::Electron*
>(&lepton)) {
793 }
else if (
const auto* muon =
dynamic_cast<const xAOD::Muon*
>(&lepton)) {
794 if (muon->muonType() == xAOD::Muon::Combined && muon->inDetTrackParticleLink().isValid()) {
795 tracksUsedForMuon.insert(*(muon->inDetTrackParticleLink()));
802 ATH_MSG_ERROR(
"DecoratePLIT::fillParticles - null track pointer");
809 float dr_lepton = (lepton.
p4().Pt() > 0.) ? track->p4().DeltaR(lepton.
p4()) : -99;
814 bool isUsedForElectron = tracksUsedForElectron.count(track);
815 bool isUsedForMuon = tracksUsedForMuon.count(track);
817 if (!
decorateTrack(dec_trk_dr_lepton, dec_trk_dr_leptontrack, dec_trk_electron_track, dec_trk_muon_track,
818 *track, dr_lepton, isUsedForElectron, isUsedForMuon, trackLep)) {
819 ATH_MSG_ERROR(
"DecoratePLIT::fillParticles - failed to decorate track");
820 return StatusCode::FAILURE;
823 parts.push_back(track);
828 return a->p4().DeltaR(lepton_p4) < b->p4().DeltaR(lepton_p4);
830 std::sort(parts.begin(), parts.end(), SORT_TRACKLEP);
832 return StatusCode::SUCCESS;
842 bool isUsedForElectron,
847 dec_trk_dr_lepton(track) = dr_lepton;
848 dec_trk_electron_track(track) =
static_cast<char>(isUsedForElectron);
849 dec_trk_muon_track(track) =
static_cast<char>(isUsedForMuon);
851 float dr_leptontrack = -99;
853 if (trackLep->
pt() > 0.) {
854 dr_leptontrack = track.p4().DeltaR(trackLep->
p4());
857 dec_trk_dr_leptontrack(track) = dr_leptontrack;
859 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
DataVector adapter that acts like it holds const pointers.
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
bool msgLvl(const MSG::Level lvl) const
An algorithm that can be simultaneously executed in multiple threads.
int m_num_lepton_features
SG::ReadHandleKey< xAOD::JetContainer > m_trackjetsKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_dec_trk_dr_leptontrack
StatusCode initializeAccessors()
SG::ReadDecorHandleKey< xAOD::ElectronContainer > m_acc_el_ptvarcone30
Gaudi::Property< std::string > m_leptonsName
StatusCode decorateTrack(SG::WriteDecorHandle< xAOD::TrackParticleContainer, float > &dec_trk_dr_lepton, SG::WriteDecorHandle< xAOD::TrackParticleContainer, float > &dec_trk_dr_leptontrack, SG::WriteDecorHandle< xAOD::TrackParticleContainer, char > &dec_trk_electron_track, SG::WriteDecorHandle< xAOD::TrackParticleContainer, char > &dec_trk_muon_track, const xAOD::TrackParticle &track, float dr_lepton, bool isUsedForElectron, bool isUsedForMuon, const xAOD::TrackParticle *trackLep) const
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_acc_trk_d0
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_caloclustersKey
std::shared_ptr< const FlavorTagInference::SaltModel > m_saltModel_endcap
SG::WriteDecorHandleKeyArray< xAOD::ElectronContainer > m_dec_el_plit_output
Gaudi::Property< float > m_lepCalErelConeSize
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_tracksKey
bool passed_r22tracking_cuts(const xAOD::TrackParticle &tp, const EventContext &ctx) const
SG::ReadDecorHandleKey< xAOD::MuonContainer > m_acc_mu_topoetcone30
SG::ReadDecorHandleKey< xAOD::MuonContainer > m_acc_mu_ptvarcone30TTVA
SG::ReadDecorHandleKey< xAOD::ElectronContainer > m_acc_el_topoetcone30
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_dec_trk_muon_track
Gaudi::Property< std::string > m_configPath
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_acc_trk_z0SinThetaUncertainty
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_acc_trk_d0Uncertainty
std::shared_ptr< const FlavorTagInference::SaltModel > m_saltModel
Gaudi::Property< float > m_maxLepTrackdR
StatusCode predictElec(SG::WriteDecorHandle< xAOD::TrackParticleContainer, float > &dec_trk_dr_lepton, SG::WriteDecorHandle< xAOD::TrackParticleContainer, float > &dec_trk_dr_leptontrack, SG::WriteDecorHandle< xAOD::TrackParticleContainer, char > &dec_trk_electron_track, SG::WriteDecorHandle< xAOD::TrackParticleContainer, char > &dec_trk_muon_track, const xAOD::Electron &electron, const xAOD::TrackParticleContainer &tracks, const xAOD::CaloClusterContainer &caloclusters, std::vector< SG::WriteDecorHandle< xAOD::ElectronContainer, float > > &dec_el_plit_output, const EventContext &ctx) const
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_dec_trk_dr_lepton
SG::WriteDecorHandleKeyArray< xAOD::MuonContainer > m_dec_mu_plit_output
DecoratePLIT(const std::string &name, ISvcLocator *pSvcLocator)
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_acc_trk_z0SinTheta
StatusCode fillParticles(SG::WriteDecorHandle< xAOD::TrackParticleContainer, float > &dec_trk_dr_lepton, SG::WriteDecorHandle< xAOD::TrackParticleContainer, float > &dec_trk_dr_leptontrack, SG::WriteDecorHandle< xAOD::TrackParticleContainer, char > &dec_trk_electron_track, SG::WriteDecorHandle< xAOD::TrackParticleContainer, char > &dec_trk_muon_track, std::vector< const xAOD::IParticle * > &parts, const xAOD::IParticle &lepton, const xAOD::TrackParticle *trackLep, const xAOD::TrackParticleContainer &trackContainer, const EventContext &ctx) const
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_acc_trk_dr_lepton
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_acc_trk_electron_track
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_dec_trk_electron_track
SG::ReadHandleKey< xAOD::ElectronContainer > m_electronsKey
StatusCode predictMuon(SG::WriteDecorHandle< xAOD::TrackParticleContainer, float > &dec_trk_dr_lepton, SG::WriteDecorHandle< xAOD::TrackParticleContainer, float > &dec_trk_dr_leptontrack, SG::WriteDecorHandle< xAOD::TrackParticleContainer, char > &dec_trk_electron_track, SG::WriteDecorHandle< xAOD::TrackParticleContainer, char > &dec_trk_muon_track, const xAOD::Muon &muon, const xAOD::TrackParticleContainer &tracks, std::vector< SG::WriteDecorHandle< xAOD::MuonContainer, float > > &dec_mu_plit_output, const EventContext &ctx) const
Gaudi::Property< std::string > m_TaggerName
Gaudi::Property< std::string > m_configFileVersion_endcap
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_acc_trk_dr_leptontrack
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_acc_trk_muon_track
virtual StatusCode execute(const EventContext &) const override
virtual StatusCode initialize() override
SG::ReadHandleKey< xAOD::MuonContainer > m_muonsKey
Gaudi::Property< std::string > m_configFileVersion
Handle class for reading a decoration on an object.
Handle class for adding a decoration to an object.
flt_t calE() const
Geet Energy in signal state CALIBRATED.
Class providing the definition of the 4-vector interface.
virtual FourMom_t p4() const =0
The full 4-momentum of the particle.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
std::pair< std::vector< float >, std::vector< int64_t > > Inputs
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
std::set< const xAOD::TrackParticle * > getTrackParticles(const xAOD::Egamma *eg, bool useBremAssoc=true, bool allParticles=true)
Return a list of all or only the best TrackParticle associated to the object.
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...
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
Muon_v1 Muon
Reference the current persistent version:
CaloClusterContainer_v1 CaloClusterContainer
Define the latest version of the calorimeter cluster container.
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
@ numberOfPixelSplitHits
number of Pixel all-layer hits split by cluster splitting [unit8_t].
@ numberOfInnermostPixelLayerSharedHits
number of Pixel 0th layer barrel hits shared by several tracks.
@ numberOfNextToInnermostPixelLayerHits
these are the hits in the 1st pixel barrel layer
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
@ numberOfInnermostPixelLayerSplitHits
number of Pixel 0th layer barrel hits split by cluster splitting
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
@ 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].
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
@ numberOfSCTHoles
number of SCT holes [unit8_t].
Electron_v1 Electron
Definition of the current "egamma version".