Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:26:37

0001 #include "RecoLuminosity/LumiProducer/interface/LumiCorrector.h"
0002 /**
0003 these are corrections including unit conversion /mb to /ub 
0004 if unit is already /ub, use e-03
0005 **/
0006 LumiCorrector::LumiCorrector() {
0007   Occ1Norm_ = 6.36e3;  // For 2.76TeV 1.34e3, for HI 2.214e6
0008   Occ2Norm_ = 7.97e3;
0009   ETNorm_ = 1.59e3;
0010   PUNorm_ = 6.37e3;
0011   Alpha1_ = 0.063;
0012   Alpha2_ = -0.0037;
0013   // map doesn't provide any initialization -> do brute force // For HI Afterglow=1.
0014   AfterglowMap_[213] = 0.992;
0015   AfterglowMap_[321] = 0.990;
0016   AfterglowMap_[423] = 0.988;
0017   AfterglowMap_[597] = 0.985;
0018   AfterglowMap_[700] = 0.984;
0019   AfterglowMap_[873] = 0.981;
0020   AfterglowMap_[1041] = 0.979;
0021   AfterglowMap_[1179] = 0.977;
0022   AfterglowMap_[1317] = 0.975;
0023 }
0024 
0025 void LumiCorrector::setNormForAlgo(const std::string& algo, float value) {
0026   if (algo == "OCC1") {
0027     Occ1Norm_ = value;
0028     return;
0029   }
0030   if (algo == "OCC2") {
0031     Occ2Norm_ = value;
0032     return;
0033   }
0034   if (algo == "ET") {
0035     ETNorm_ = value;
0036     return;
0037   }
0038   if (algo == "PU") {
0039     PUNorm_ = value;
0040     return;
0041   }
0042 }
0043 void LumiCorrector::setCoefficient(const std::string& name, float value) {
0044   if (name == "ALPHA1") {
0045     Alpha1_ = value;
0046     return;
0047   }
0048   if (name == "ALPHA2") {
0049     Alpha2_ = value;
0050     return;
0051   }
0052 }
0053 float LumiCorrector::getNormForAlgo(const std::string& algo) const {
0054   if (algo == "OCC1") {
0055     return Occ1Norm_;
0056   }
0057   if (algo == "OCC2") {
0058     return Occ2Norm_;
0059   }
0060   if (algo == "ET") {
0061     return ETNorm_;
0062   }
0063   if (algo == "PU") {
0064     return PUNorm_;
0065   }
0066   return 1.0;
0067 }
0068 float LumiCorrector::getCoefficient(const std::string& name) const {
0069   if (name == "ALPHA1") {
0070     return Alpha1_;
0071   }
0072   if (name == "ALPHA2") {
0073     return Alpha2_;
0074   }
0075   return 0.0;
0076 }
0077 float LumiCorrector::AfterglowFactor(int nBXs) {
0078   float Afterglow = 1.;
0079   for (std::map<int, float>::iterator it = AfterglowMap_.begin(); it != AfterglowMap_.end(); ++it) {
0080     if (nBXs >= it->first) {
0081       Afterglow = it->second;
0082     }
0083   }
0084   return Afterglow;
0085 }
0086 
0087 float LumiCorrector::TotalNormOcc1(float TotLumi_noNorm, int nBXs) {
0088   float AvgLumi = (nBXs > 0) ? PUNorm_ * TotLumi_noNorm / nBXs : 0.;
0089   return Occ1Norm_ * AfterglowFactor(nBXs) / (1 + Alpha1_ * AvgLumi + Alpha2_ * AvgLumi * AvgLumi);
0090 }
0091 float LumiCorrector::TotalNormOcc2(float TotLumi_noNorm, int nBXs) { return Occ2Norm_; }
0092 float LumiCorrector::TotalNormET(float TotLumi_noNorm, int nBXs) { return ETNorm_; }