File indexing completed on 2023-03-17 11:17:01
0001 #ifndef RecoBTag_FeatureTools_ChargedCandidateConverter_h
0002 #define RecoBTag_FeatureTools_ChargedCandidateConverter_h
0003
0004 #include "RecoBTag/FeatureTools/interface/deep_helpers.h"
0005 #include "RecoBTag/FeatureTools/interface/TrackInfoBuilder.h"
0006 #include "DataFormats/BTauReco/interface/ChargedCandidateFeatures.h"
0007
0008 #include "DataFormats/PatCandidates/interface/PackedCandidate.h"
0009 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
0010 #include "DataFormats/PatCandidates/interface/Jet.h"
0011
0012 namespace btagbtvdeep {
0013
0014 template <typename CandidateType>
0015 void commonCandidateToFeatures(const CandidateType* c_pf,
0016 const reco::Jet& jet,
0017 const TrackInfoBuilder& track_info,
0018 const float& drminpfcandsv,
0019 const float& jetR,
0020 ChargedCandidateFeatures& c_pf_features,
0021 const bool flip = false) {
0022 float trackSip2dVal = track_info.getTrackSip2dVal();
0023 float trackSip2dSig = track_info.getTrackSip2dSig();
0024 float trackSip3dVal = track_info.getTrackSip3dVal();
0025 float trackSip3dSig = track_info.getTrackSip3dSig();
0026 if (flip == true) {
0027 trackSip2dVal = -trackSip2dVal;
0028 trackSip2dSig = -trackSip2dSig;
0029 trackSip3dSig = -trackSip3dSig;
0030 trackSip3dVal = -trackSip3dVal;
0031 }
0032
0033 c_pf_features.deltaR = reco::deltaR(*c_pf, jet);
0034 c_pf_features.ptrel = catch_infs_and_bound(c_pf->pt() / jet.pt(), 0, -1, 0, -1);
0035 c_pf_features.ptrel_noclip = c_pf->pt() / jet.pt();
0036 c_pf_features.erel = c_pf->energy() / jet.energy();
0037 const float etasign = jet.eta() > 0 ? 1 : -1;
0038 c_pf_features.etarel = etasign * (c_pf->eta() - jet.eta());
0039
0040 c_pf_features.btagPf_trackEtaRel = catch_infs_and_bound(track_info.getTrackEtaRel(), 0, -5, 15);
0041 c_pf_features.btagPf_trackPtRel = catch_infs_and_bound(track_info.getTrackPtRel(), 0, -1, 4);
0042 c_pf_features.btagPf_trackPPar = catch_infs_and_bound(track_info.getTrackPPar(), 0, -1e5, 1e5);
0043 c_pf_features.btagPf_trackDeltaR = catch_infs_and_bound(track_info.getTrackDeltaR(), 0, -5, 5);
0044 c_pf_features.btagPf_trackPtRatio = catch_infs_and_bound(track_info.getTrackPtRatio(), 0, -1, 10);
0045 c_pf_features.btagPf_trackPParRatio = catch_infs_and_bound(track_info.getTrackPParRatio(), 0, -10, 100);
0046 c_pf_features.btagPf_trackSip3dVal = catch_infs_and_bound(trackSip3dVal, 0, -1, 1e5);
0047 c_pf_features.btagPf_trackSip3dSig = catch_infs_and_bound(trackSip3dSig, 0, -1, 4e4);
0048 c_pf_features.btagPf_trackSip2dVal = catch_infs_and_bound(trackSip2dVal, 0, -1, 70);
0049 c_pf_features.btagPf_trackSip2dSig = catch_infs_and_bound(trackSip2dSig, 0, -1, 4e4);
0050 c_pf_features.btagPf_trackJetDistVal = catch_infs_and_bound(track_info.getTrackJetDistVal(), 0, -20, 1);
0051
0052 c_pf_features.drminsv = catch_infs_and_bound(drminpfcandsv, 0, -1. * jetR, 0, -1. * jetR);
0053
0054 std::pair<float, float> drSubjetFeatures = getDRSubjetFeatures(jet, c_pf);
0055 c_pf_features.drsubjet1 = drSubjetFeatures.first;
0056 c_pf_features.drsubjet2 = drSubjetFeatures.second;
0057 }
0058
0059 void packedCandidateToFeatures(const pat::PackedCandidate* c_pf,
0060 const pat::Jet& jet,
0061 const TrackInfoBuilder& track_info,
0062 const float drminpfcandsv,
0063 const float jetR,
0064 ChargedCandidateFeatures& c_pf_features,
0065 const bool flip = false);
0066
0067 void recoCandidateToFeatures(const reco::PFCandidate* c_pf,
0068 const reco::Jet& jet,
0069 const TrackInfoBuilder& track_info,
0070 const float drminpfcandsv,
0071 const float jetR,
0072 const float puppiw,
0073 const int pv_ass_quality,
0074 const reco::VertexRef& pv,
0075 ChargedCandidateFeatures& c_pf_features,
0076 const bool flip = false);
0077
0078 }
0079
0080 #endif