Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:27:21

0001 #ifndef RecoParticleFlow_PFClusterProducer_CaloRecHitResolutionProvider_h
0002 #define RecoParticleFlow_PFClusterProducer_CaloRecHitResolutionProvider_h
0003 
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 
0006 #include <cmath>
0007 
0008 class CaloRecHitResolutionProvider {
0009 public:
0010   CaloRecHitResolutionProvider(const edm::ParameterSet& iConfig) {
0011     noiseTerm_ = iConfig.getParameter<double>("noiseTerm");
0012     constantTerm2_ = std::pow(iConfig.getParameter<double>("constantTerm"), 2);
0013     noiseTermLowE_ = iConfig.getParameter<double>("noiseTermLowE");
0014     corrTermLowE_ = iConfig.getParameter<double>("corrTermLowE");
0015     constantTermLowE2_ = std::pow(iConfig.getParameter<double>("constantTermLowE"), 2);
0016     threshLowE_ = iConfig.getParameter<double>("threshLowE");
0017     threshHighE_ = iConfig.getParameter<double>("threshHighE");
0018 
0019     resHighE2_ = std::pow((noiseTerm_ / threshHighE_), 2) + constantTerm2_;
0020   }
0021 
0022   double timeResolution2(double energy) {
0023     double res2 = 10000.;
0024 
0025     if (energy <= 0.)
0026       return res2;
0027     else if (energy < threshLowE_) {
0028       if (corrTermLowE_ > 0.) {  // different parametrisation
0029         const double res = noiseTermLowE_ / energy + corrTermLowE_ / (energy * energy);
0030         res2 = res * res;
0031       } else {
0032         const double noiseDivE = noiseTermLowE_ / energy;
0033         res2 = noiseDivE * noiseDivE + constantTermLowE2_;
0034       }
0035     } else if (energy < threshHighE_) {
0036       const double noiseDivE = noiseTerm_ / energy;
0037       res2 = noiseDivE * noiseDivE + constantTerm2_;
0038     } else  // if (energy >=threshHighE_)
0039       res2 = resHighE2_;
0040 
0041     if (res2 > 10000.)
0042       return 10000.;
0043     return res2;
0044   }
0045 
0046 private:
0047   double noiseTerm_;      // Noise term
0048   double constantTerm2_;  // Constant term
0049 
0050   double noiseTermLowE_;      // Noise term for low E
0051   double constantTermLowE2_;  // Constant term for low E
0052   double corrTermLowE_;       // 2nd term for low E, different parametrisation
0053 
0054   double threshLowE_;   // different parametrisation below
0055   double threshHighE_;  // resolution constant above
0056 
0057   double resHighE2_;  // precompute res at high E
0058 };
0059 
0060 #endif