File indexing completed on 2024-04-06 12:27:26
0001 #include "RecoParticleFlow/PFClusterTools/interface/PFEnergyCalibrationHF.h"
0002 #include <TMath.h>
0003 #include <cmath>
0004 #include <vector>
0005 #include <TF1.h>
0006
0007 using namespace std;
0008 using namespace edm;
0009
0010 PFEnergyCalibrationHF::PFEnergyCalibrationHF() {
0011 calibHF_use_ = false;
0012 calibHF_eta_step_.push_back(0.00);
0013 calibHF_eta_step_.push_back(2.90);
0014 calibHF_eta_step_.push_back(3.00);
0015 calibHF_eta_step_.push_back(3.20);
0016 calibHF_eta_step_.push_back(4.20);
0017 calibHF_eta_step_.push_back(4.40);
0018 calibHF_eta_step_.push_back(4.60);
0019 calibHF_eta_step_.push_back(4.80);
0020 calibHF_eta_step_.push_back(5.20);
0021 calibHF_eta_step_.push_back(5.40);
0022 for (unsigned int i = 0; i < calibHF_eta_step_.size(); ++i) {
0023 calibHF_a_EMonly_.push_back(1.00);
0024 calibHF_b_HADonly_.push_back(1.00);
0025 calibHF_a_EMHAD_.push_back(1.00);
0026 calibHF_b_EMHAD_.push_back(1.00);
0027 }
0028 }
0029
0030 PFEnergyCalibrationHF::PFEnergyCalibrationHF(bool calibHF_use,
0031 const std::vector<double>& calibHF_eta_step,
0032 const std::vector<double>& calibHF_a_EMonly,
0033 const std::vector<double>& calibHF_b_HADonly,
0034 const std::vector<double>& calibHF_a_EMHAD,
0035 const std::vector<double>& calibHF_b_EMHAD) {
0036 calibHF_use_ = calibHF_use;
0037 calibHF_eta_step_ = calibHF_eta_step;
0038 calibHF_a_EMonly_ = calibHF_a_EMonly;
0039 calibHF_b_HADonly_ = calibHF_b_HADonly;
0040 calibHF_a_EMHAD_ = calibHF_a_EMHAD;
0041 calibHF_b_EMHAD_ = calibHF_b_EMHAD;
0042 }
0043
0044 PFEnergyCalibrationHF::~PFEnergyCalibrationHF() {
0045
0046 }
0047
0048 double PFEnergyCalibrationHF::energyEm(double uncalibratedEnergyECAL, double eta, double phi) {
0049 double calibrated = 0.0;
0050
0051 int ietabin = 0;
0052 for (unsigned int i = 0; i < calibHF_eta_step_.size(); ++i) {
0053 if ((fabs(eta)) >= calibHF_eta_step_[i]) {
0054 ietabin = i;
0055 }
0056 }
0057 calibrated = uncalibratedEnergyECAL * calibHF_a_EMonly_[ietabin];
0058 return calibrated;
0059
0060
0061 }
0062
0063 double PFEnergyCalibrationHF::energyHad(double uncalibratedEnergyHCAL, double eta, double phi) {
0064 double calibrated = 0.0;
0065
0066 int ietabin = 0;
0067 for (unsigned int i = 0; i < calibHF_eta_step_.size(); ++i) {
0068 if ((fabs(eta)) >= calibHF_eta_step_[i]) {
0069 ietabin = i;
0070 }
0071 }
0072 calibrated = uncalibratedEnergyHCAL * calibHF_b_HADonly_[ietabin];
0073 return calibrated;
0074 }
0075
0076 double PFEnergyCalibrationHF::energyEmHad(double uncalibratedEnergyECAL,
0077 double uncalibratedEnergyHCAL,
0078 double eta,
0079 double phi) {
0080 double calibrated = 0.0;
0081
0082 int ietabin = 0;
0083 for (unsigned int i = 0; i < calibHF_eta_step_.size(); ++i) {
0084 if ((fabs(eta)) >= calibHF_eta_step_[i]) {
0085 ietabin = i;
0086 }
0087 }
0088 calibrated = uncalibratedEnergyECAL * calibHF_a_EMHAD_[ietabin] + uncalibratedEnergyHCAL * calibHF_b_EMHAD_[ietabin];
0089 return calibrated;
0090 }
0091
0092 std::ostream& operator<<(std::ostream& out, const PFEnergyCalibrationHF& calib) {
0093 if (!out)
0094 return out;
0095 out << "PFEnergyCalibrationHF -- " << endl;
0096 int ii = 0;
0097 for (std::vector<double>::const_iterator iteta = (calib.getcalibHF_eta_step()).begin();
0098 iteta != (calib.getcalibHF_eta_step()).end();
0099 ++iteta) {
0100
0101 out << " i " << ii << ",";
0102 out << "use " << calib.getcalibHF_use() << ",";
0103 out << "currenteta " << calib.getcalibHF_eta_step()[ii] << ",";
0104 out << "calibHF_a_EMonly_ " << calib.getcalibHF_a_EMonly()[ii] << ",";
0105 out << "calibHF_b_HADonly_ " << calib.getcalibHF_b_HADonly()[ii] << ",";
0106 out << "calibHF_a_EMHAD_ " << calib.getcalibHF_a_EMHAD()[ii] << ",";
0107 out << "calibHF_b_EMHAD_ " << calib.getcalibHF_b_EMHAD()[ii] << ",";
0108 out << endl;
0109 ii++;
0110 }
0111
0112 return out;
0113 }