Back to home page

Project CMSSW displayed by LXR

 
 

    


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 // \author : M. Gouzevitch
0011 // \date : May 2010
0012 
0013 /// Based on a class from : V. Roberfroid, February 2008
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     /// Flag to apply the correction procedure for nuclear interactions
0032     const auto& bCorrect = iCfgCandConnector.getParameter<bool>("bCorrect");
0033     /// Flag to calibrate the reconstructed nuclear interactions with primary or merged tracks
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   /// Analyse nuclear interactions where a primary or merged track is present
0056   void analyseNuclearWPrim(reco::PFCandidateCollection&, std::vector<bool>&, unsigned int) const;
0057 
0058   /// Analyse nuclear interactions where a secondary track is present
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   /// Return a calibration factor for a reconstructed nuclear interaction
0066   double rescaleFactor(const double pt, const double cFrac) const;
0067 
0068   /// Parameters
0069   bool bCorrect_;
0070 
0071   /// Calibration parameters for the reconstructed nuclear interactions
0072   bool bCalibPrimary_;
0073   std::vector<double> fConst_;
0074   std::vector<double> fNorm_;
0075   std::vector<double> fExp_;
0076 
0077   // Maximal accepatble uncertainty on primary tracks to usem them as MC truth for calibration
0078   double dptRel_PrimaryTrack_;
0079   double dptRel_MergedTrack_;
0080   double ptErrorSecondary_;
0081 
0082   /// Useful constants
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