13 #include "CLHEP/Vector/LorentzVector.h" 26 const std::vector<double>&
e1e9Cut,
28 const std::vector<double>&
eSeLCut,
32 m_intercept2DCut(intercept2DCut),
33 m_intercept2DSlope(intercept2DSlope),
34 m_e1e9Cuthi(e1e9Cut[1]),
35 m_eCOREe9Cuthi(eCOREe9Cut[1]),
36 m_eSeLCuthi(eSeLCut[1]),
37 m_e1e9Cutlo(e1e9Cut[0]),
38 m_eCOREe9Cutlo(eCOREe9Cut[0]),
39 m_eSeLCutlo(eSeLCut[0]),
46 double corEta = original.
eta();
49 double lowC = 0.00911;
51 double logSlope = 0.0146;
52 double logIntercept = -0.00988;
53 double sgn = (original.
eta() > 0) ? (1.0) : (-1.0);
56 else if ((logel > 1.25) && (logel <= 2))
57 corEta += (logIntercept + logSlope * logel) * sgn;
69 double corPhi = original.
phi();
79 double corEnergy = original.
energy();
82 double energyCorrect = 0.7397;
83 corEnergy = corEnergy / energyCorrect;
87 double etabounds[30] = {
88 2.846, 2.957, 3.132, 3.307, 3.482, 3.657, 3.833, 4.006, 4.184, 4.357, 4.532, 4.709, 4.882, 5.184};
89 for (
int kk = 0;
kk <= 12;
kk++) {
90 if ((fabs(corEta) < etabounds[
kk + 1]) && (fabs(corEta) > etabounds[
kk])) {
91 ieta = (corEta > 0) ? (kk + 29) : (-kk - 29);
100 double corPx = corEnergy *
cos(corPhi) / cosh(corEta);
101 double corPy = corEnergy *
sin(corPhi) / cosh(corEta);
102 double corPz = corEnergy * tanh(corEta);
115 for (
unsigned int i = 0;
i < SuperClusters->size(); ++
i) {
124 double pz = supClus.
energy() * tanh(supClus.
eta());
136 bool isAcceptable =
true;
137 isAcceptable = isAcceptable && (e9e25 >
m_e9e25Cut);
139 isAcceptable = isAcceptable && ((e1e9 < m_e1e9Cuthi) && (e1e9 >
m_e1e9Cutlo));
144 theCand.setSuperCluster(theClusRef);
145 RecoECand.push_back(theCand);
const double m_intercept2DCut
const reco::HFValueStruct m_hfvv
const double m_eCOREe9Cuthi
Sin< T >::type sin(const T &t)
const_iterator find(const key_type &k) const
find element with specified reference key
double PUIntercept(int ieta) const
void produce(const edm::Handle< reco::SuperClusterCollection > &SuperClusters, const reco::HFEMClusterShapeAssociationCollection &AssocShapes, reco::RecoEcalCandidateCollection &RecoECand, int nvtx) const
double eta() const
pseudorapidity of cluster centroid
double EnCor(int ieta) const
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
reco::RecoEcalCandidate correctEPosition(const reco::SuperCluster &original, const reco::HFEMClusterShape &shape, int nvtx) const
Cos< T >::type cos(const T &t)
double energy() const
cluster energy
double PUSlope(int ieta) const
XYZPointD XYZPoint
point in space with cartesian internal representation
double eSeLCorrected(double es, double el, double pc, double px, double py)
const double m_intercept2DSlope
std::vector< RecoEcalCandidate > RecoEcalCandidateCollection
collectin of RecoEcalCandidate objects
const double m_eCOREe9Cutlo
double phi() const
azimuthal angle of cluster centroid
HFRecoEcalCandidateAlgo(bool correct, double e9e25Cut, double intercept2DCut, double intercept2DSlope, const std::vector< double > &e1e9Cut, const std::vector< double > &eCOREe9Cut, const std::vector< double > &eSeLCut, const reco::HFValueStruct hfvv)