Go to the documentation of this file.00001 #ifndef PFCLUSTERCALIBRATION_H_
00002 #define PFCLUSTERCALIBRATION_H_
00003
00004 #include "RecoParticleFlow/PFClusterTools/interface/DetectorElementType.h"
00005 #include "DataFormats/ParticleFlowReco/interface/Calibratable.h"
00006 #include "DataFormats/ParticleFlowReco/interface/CalibrationResultWrapper.h"
00007
00008
00009 #include <vector>
00010 #include <string>
00011 #include <map>
00012 #include <ostream>
00013
00014 class TF1;
00015 class TTree;
00016
00017 namespace pftools {
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 class PFClusterCalibration {
00037 public:
00038
00039
00040 PFClusterCalibration();
00041
00042
00043
00044 virtual ~PFClusterCalibration();
00045
00046
00047 double getCalibratedEcalEnergy(const double& ecalE, const double& hcalE,
00048 const double& eta, const double& phi) const;
00049
00050
00051 double getCalibratedHcalEnergy(const double& ecalE, const double& hcalE,
00052 const double& eta, const double& phi) const;
00053
00054
00055
00056
00057
00058
00059
00060
00061 double getCalibratedEnergy(const double& ecalE, const double& hcalE,
00062 const double& eta, const double& phi) const;
00063
00064 void getCalibratedEnergyEmbedAInHcal(double& ecalE,
00065 double& hcalE, const double& eta, const double& phi) const;
00066
00067
00068 void calibrate(Calibratable& c);
00069
00070
00071 void getCalibrationResultWrapper(const Calibratable& c,
00072 CalibrationResultWrapper& crw);
00073
00074
00075 void calibrateTree(TTree* tree);
00076
00077
00078
00079 void setCorrections(const double& lowEP0, const double& lowEP1,
00080 const double& globalP0, const double& globalP1);
00081
00082
00083 void setAllowNegativeEnergy(const bool& allowIt) {
00084 allowNegativeEnergy_ = allowIt;
00085 }
00086
00087
00088
00089 void setDoCorrection(const int& doCorrection) {
00090 doCorrection_ = doCorrection;
00091 }
00092
00093 void setDoEtaCorrection(const int doEtaCorrection) {
00094 doEtaCorrection_ = doEtaCorrection;
00095 }
00096
00097
00098 void setEcalHcalEnergyCuts(const double& ecalCut, const double& hcalCut) {
00099
00100 ecalOnlyDiv_ = ecalCut;
00101 hcalOnlyDiv_ = hcalCut;
00102 }
00103
00104
00105 void setBarrelBoundary(const double& eta) {
00106 barrelEndcapEtaDiv_ = eta;
00107 }
00108
00109 void setMaxEToCorrect(double maxE) {
00110 maxEToCorrect_ = maxE;
00111 }
00112
00113
00114 void setEvolutionParameters(const std::string& sector,
00115 std::vector<double> params);
00116
00117 void setEtaCorrectionParameters(std::vector<double> params);
00118
00119
00120
00121
00122
00123 std::vector<std::string>* getKnownSectorNames() {
00124 return &names_;
00125 }
00126
00127
00128
00129 friend std::ostream& pftools::operator<<(std::ostream& s, const PFClusterCalibration& cc);
00130
00131 private:
00132
00133 void init();
00134
00135
00136 double barrelEndcapEtaDiv_;
00137
00138
00139 double ecalOnlyDiv_;
00140 double hcalOnlyDiv_;
00141
00142 int doCorrection_;
00143 int allowNegativeEnergy_;
00144 int doEtaCorrection_;
00145 double maxEToCorrect_;
00146
00147 double correctionLowLimit_;
00148 double globalP0_;
00149 double globalP1_;
00150 double lowEP0_;
00151 double lowEP1_;
00152
00153
00154 TF1* correction_;
00155
00156 TF1* etaCorrection_;
00157
00158 std::map<std::string, TF1> namesAndFunctions_;
00159 std::vector<std::string> names_;
00160
00161 };
00162 }
00163
00164 #endif