File indexing completed on 2024-04-06 12:24:25
0001 #ifndef RecoBTag_FeatureTools_NeutralCandidateConverter_h
0002 #define RecoBTag_FeatureTools_NeutralCandidateConverter_h
0003
0004 #include "RecoBTag/FeatureTools/interface/deep_helpers.h"
0005 #include "DataFormats/BTauReco/interface/NeutralCandidateFeatures.h"
0006
0007 #include "DataFormats/PatCandidates/interface/PackedCandidate.h"
0008 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
0009 #include "DataFormats/JetReco/interface/Jet.h"
0010 #include "DataFormats/PatCandidates/interface/Jet.h"
0011
0012 namespace btagbtvdeep {
0013
0014 void packedCandidateToFeatures(const pat::PackedCandidate* n_pf,
0015 const pat::Jet& jet,
0016 const bool isWeightedJet,
0017 const float drminpfcandsv,
0018 const float jetR,
0019 const float puppiw,
0020 NeutralCandidateFeatures& n_pf_features);
0021
0022 void recoCandidateToFeatures(const reco::PFCandidate* n_pf,
0023 const reco::Jet& jet,
0024 const bool isWeightedJet,
0025 const float drminpfcandsv,
0026 const float jetR,
0027 const float puppiw,
0028 NeutralCandidateFeatures& n_pf_features);
0029
0030 template <typename CandidateType>
0031 static void commonCandidateToFeatures(const CandidateType* n_pf,
0032 const reco::Jet& jet,
0033 const bool& isWeightedJet,
0034 const float& drminpfcandsv,
0035 const float& jetR,
0036 const float& puppiw,
0037 NeutralCandidateFeatures& n_pf_features) {
0038 std::pair<float, float> drSubjetFeatures = getDRSubjetFeatures(jet, n_pf);
0039 n_pf_features.drsubjet1 = drSubjetFeatures.first;
0040 n_pf_features.drsubjet2 = drSubjetFeatures.second;
0041
0042 float constituentWeight = 1.;
0043 if (isWeightedJet)
0044 constituentWeight = puppiw;
0045
0046
0047 n_pf_features.ptrel = catch_infs_and_bound((n_pf->pt() * constituentWeight) / jet.pt(), 0, -1, 0, -1);
0048 n_pf_features.ptrel_noclip = (n_pf->pt() * constituentWeight) / jet.pt();
0049 n_pf_features.erel = (n_pf->energy() * constituentWeight) / jet.energy();
0050
0051 n_pf_features.deltaR = catch_infs_and_bound(reco::deltaR(*n_pf, jet), 0, -0.6, 0, -0.6);
0052 n_pf_features.deltaR_noclip = reco::deltaR(*n_pf, jet);
0053
0054 n_pf_features.isGamma = 0;
0055 if (std::abs(n_pf->pdgId()) == 22)
0056 n_pf_features.isGamma = 1;
0057
0058 n_pf_features.drminsv = catch_infs_and_bound(drminpfcandsv, 0, -1. * jetR, 0, -1. * jetR);
0059
0060 n_pf_features.etarel = catch_infs_and_bound(std::fabs(n_pf->eta() - jet.eta()), 0, -2, 0, -0.5);
0061 n_pf_features.phirel = catch_infs_and_bound(std::fabs(reco::deltaPhi(n_pf->phi(), jet.phi())), 0, -2, 0, -0.5);
0062 n_pf_features.pt = n_pf->pt();
0063 n_pf_features.eta = n_pf->eta();
0064 n_pf_features.phi = n_pf->phi();
0065 n_pf_features.e = n_pf->energy();
0066 n_pf_features.px = n_pf->px();
0067 n_pf_features.py = n_pf->py();
0068 n_pf_features.pz = n_pf->pz();
0069 }
0070
0071 }
0072
0073 #endif