File indexing completed on 2024-06-22 02:24:05
0001 #ifndef PFProducer_PFCandConnector_H_
0002 #define PFProducer_PFCandConnector_H_
0003
0004 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
0005 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
0006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0009
0010
0011
0012
0013
0014
0015 class PFCandConnector {
0016 public:
0017 PFCandConnector() {
0018 bCorrect_ = false;
0019 bCalibPrimary_ = false;
0020
0021 fConst_.push_back(1), fConst_.push_back(0);
0022 fNorm_.push_back(0), fNorm_.push_back(0);
0023 fExp_.push_back(0);
0024
0025 dptRel_PrimaryTrack_ = 0.;
0026 dptRel_MergedTrack_ = 0.;
0027 ptErrorSecondary_ = 0.;
0028 }
0029
0030 void setParameters(const edm::ParameterSet& iCfgCandConnector) {
0031
0032 const auto& bCorrect = iCfgCandConnector.getParameter<bool>("bCorrect");
0033
0034 const auto& bCalibPrimary = iCfgCandConnector.getParameter<bool>("bCalibPrimary");
0035 const auto& dptRel_PrimaryTrack = iCfgCandConnector.getParameter<double>("dptRel_PrimaryTrack");
0036 const auto& dptRel_MergedTrack = iCfgCandConnector.getParameter<double>("dptRel_MergedTrack");
0037 const auto& ptErrorSecondary = iCfgCandConnector.getParameter<double>("ptErrorSecondary");
0038 const auto& nuclCalibFactors = iCfgCandConnector.getParameter<std::vector<double> >("nuclCalibFactors");
0039
0040 setParameters(bCorrect, bCalibPrimary, dptRel_PrimaryTrack, dptRel_MergedTrack, ptErrorSecondary, nuclCalibFactors);
0041 }
0042
0043 void setParameters(bool bCorrect,
0044 bool bCalibPrimary,
0045 double dptRel_PrimaryTrack,
0046 double dptRel_MergedTrack,
0047 double ptErrorSecondary,
0048 const std::vector<double>& nuclCalibFactors);
0049
0050 static void fillPSetDescription(edm::ParameterSetDescription& iDesc);
0051
0052 reco::PFCandidateCollection connect(reco::PFCandidateCollection& pfCand) const;
0053
0054 private:
0055
0056 void analyseNuclearWPrim(reco::PFCandidateCollection&, std::vector<bool>&, unsigned int) const;
0057
0058
0059 void analyseNuclearWSec(reco::PFCandidateCollection&, std::vector<bool>&, unsigned int) const;
0060
0061 bool isPrimaryNucl(const reco::PFCandidate& pf) const;
0062
0063 bool isSecondaryNucl(const reco::PFCandidate& pf) const;
0064
0065
0066 double rescaleFactor(const double pt, const double cFrac) const;
0067
0068
0069 bool bCorrect_;
0070
0071
0072 bool bCalibPrimary_;
0073 std::vector<double> fConst_;
0074 std::vector<double> fNorm_;
0075 std::vector<double> fExp_;
0076
0077
0078 double dptRel_PrimaryTrack_;
0079 double dptRel_MergedTrack_;
0080 double ptErrorSecondary_;
0081
0082
0083 static const double pion_mass2;
0084 static const reco::PFCandidate::Flags fT_TO_DISP_;
0085 static const reco::PFCandidate::Flags fT_FROM_DISP_;
0086 };
0087
0088 #endif