Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-05-05 02:48:01

0001 #include "RecoBTag/FeatureTools/interface/ChargedCandidateConverter.h"
0002 
0003 namespace btagbtvdeep {
0004 
0005   void packedCandidateToFeatures(const pat::PackedCandidate* c_pf,
0006                                  const pat::Jet& jet,
0007                                  const TrackInfoBuilder& track_info,
0008                                  const bool isWeightedJet,
0009                                  const float drminpfcandsv,
0010                                  const float jetR,
0011                                  const float puppiw,
0012                                  ChargedCandidateFeatures& c_pf_features,
0013                                  const bool flip,
0014                                  const float distminpfcandsv) {
0015     commonCandidateToFeatures(
0016         c_pf, jet, track_info, isWeightedJet, drminpfcandsv, jetR, puppiw, c_pf_features, flip, distminpfcandsv);
0017 
0018     c_pf_features.vtx_ass = c_pf->pvAssociationQuality();
0019 
0020     c_pf_features.puppiw = puppiw;
0021 
0022     // if PackedCandidate does not have TrackDetails this gives an Exception
0023     // because unpackCovariance might be called for pseudoTrack/bestTrack
0024     if (c_pf->hasTrackDetails()) {
0025       const auto& pseudo_track = c_pf->pseudoTrack();
0026       c_pf_features.chi2 = catch_infs_and_bound(pseudo_track.normalizedChi2(), 300, -1, 300);
0027       // this returns the quality enum not a mask.
0028       c_pf_features.quality = pseudo_track.qualityMask();
0029     } else {
0030       // default negative chi2 and loose track if notTrackDetails
0031       c_pf_features.chi2 = catch_infs_and_bound(-1, 300, -1, 300);
0032       c_pf_features.quality = (1 << reco::TrackBase::loose);
0033     }
0034 
0035     c_pf_features.dxy = catch_infs(c_pf->dxy());
0036     c_pf_features.dz = catch_infs(c_pf->dz());
0037     c_pf_features.dxysig = c_pf->bestTrack() ? catch_infs(c_pf->dxy() / c_pf->dxyError()) : 0;
0038     c_pf_features.dzsig = c_pf->bestTrack() ? catch_infs(c_pf->dz() / c_pf->dzError()) : 0;
0039   }
0040 
0041   void recoCandidateToFeatures(const reco::PFCandidate* c_pf,
0042                                const reco::Jet& jet,
0043                                const TrackInfoBuilder& track_info,
0044                                const bool isWeightedJet,
0045                                const float drminpfcandsv,
0046                                const float jetR,
0047                                const float puppiw,
0048                                const int pv_ass_quality,
0049                                const reco::VertexRef& pv,
0050                                ChargedCandidateFeatures& c_pf_features,
0051                                const bool flip,
0052                                const float distminpfcandsv) {
0053     commonCandidateToFeatures(
0054         c_pf, jet, track_info, isWeightedJet, drminpfcandsv, jetR, puppiw, c_pf_features, flip, distminpfcandsv);
0055 
0056     c_pf_features.vtx_ass = vtx_ass_from_pfcand(*c_pf, pv_ass_quality, pv);
0057     c_pf_features.puppiw = puppiw;
0058 
0059     const auto& pseudo_track = (c_pf->bestTrack()) ? *c_pf->bestTrack() : reco::Track();
0060     c_pf_features.chi2 = catch_infs_and_bound(std::floor(pseudo_track.normalizedChi2()), 300, -1, 300);
0061     c_pf_features.quality = quality_from_pfcand(*c_pf);
0062 
0063     // To be implemented if FatJet tag becomes RECO compatible
0064     // const auto *trk =
0065     // float dz =
0066     // float dxy =
0067 
0068     // c_pf_features.dxy =
0069     // c_pf_features.dz =
0070     // c_pf_features.dxysig =
0071     // c_pf_features.dzsig =
0072   }
0073 
0074 }  // namespace btagbtvdeep