File indexing completed on 2024-04-06 12:26:37
0001 #include "RecoLuminosity/LumiProducer/interface/LumiCorrector.h"
0002
0003
0004
0005
0006 LumiCorrector::LumiCorrector() {
0007 Occ1Norm_ = 6.36e3;
0008 Occ2Norm_ = 7.97e3;
0009 ETNorm_ = 1.59e3;
0010 PUNorm_ = 6.37e3;
0011 Alpha1_ = 0.063;
0012 Alpha2_ = -0.0037;
0013
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_; }