13 #include "CLHEP/Vector/LorentzVector.h"
23 const std::vector<double>& e1e9Cut,
24 const std::vector<double>& eCOREe9Cut,
25 const std::vector<double>& eSeLCut,
31 m_intercept2DCut(intercept2DCut),
32 m_intercept2DSlope(intercept2DSlope),
33 m_e1e9Cuthi(e1e9Cut[1]),
34 m_eCOREe9Cuthi(eCOREe9Cut[1]),
35 m_eSeLCuthi(eSeLCut[1]),
36 m_e1e9Cutlo(e1e9Cut[0]),
37 m_eCOREe9Cutlo(eCOREe9Cut[0]),
38 m_eSeLCutlo(eSeLCut[0]),
46 double corEta=original.
eta();
51 double logSlope = 0.0146;
52 double logIntercept=-0.00988;
53 double sgn=(original.
eta()>0)?(1.0):(-1.0);
54 if(logel<=1.25)corEta+=(lowC)*sgn;
55 else if((logel>1.25)&&(logel<=2))corEta+=(logIntercept+logSlope*logel)*sgn;
56 else if(logel>2)corEta+=hiC*
sgn;
65 double corPhi=original.
phi();
75 double corEnergy= original.
energy();
78 double energyCorrect=0.7397;
79 corEnergy= corEnergy/energyCorrect;
83 double etabounds[30]={
84 2.846,2.957,3.132,3.307,3.482,
85 3.657,3.833,4.006,4.184,4.357,
86 4.532,4.709,4.882,5.184};
87 for (
int kk=0;
kk<=12;
kk++){
88 if((fabs(corEta) < etabounds[
kk+1])&&(fabs(corEta) > etabounds[
kk])){
89 ieta = (corEta > 0)?(kk+29):(-kk-29);
96 double corPx=corEnergy*
cos(corPhi)/cosh(corEta);
97 double corPy=corEnergy*
sin(corPhi)/cosh(corEta);
98 double corPz=corEnergy*tanh(corEta);
116 for (
unsigned int i=0;
i < SuperClusters->size(); ++
i) {
125 double pz=supClus.
energy()*tanh(supClus.
eta());
139 bool isAcceptable=
true;
140 isAcceptable=isAcceptable && (e9e25>
m_e9e25Cut);
142 isAcceptable=isAcceptable && ((e1e9< m_e1e9Cuthi)&&(e1e9>
m_e1e9Cutlo));
149 theCand.setSuperCluster(theClusRef);
150 RecoECand.push_back(theCand);
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
double eta() const
pseudorapidity of cluster centroid
double EnCor(int ieta) const
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
double m_intercept2DSlope
Cos< T >::type cos(const T &t)
double energy() const
cluster energy
double PUSlope(int ieta) const
void produce(const edm::Handle< reco::SuperClusterCollection > &SuperClusters, const reco::HFEMClusterShapeAssociationCollection &AssocShapes, reco::RecoEcalCandidateCollection &RecoECand, int nvtx)
reco::HFValueStruct m_hfvv
XYZPointD XYZPoint
point in space with cartesian internal representation
double eSeLCorrected(double es, double el, double pc, double px, double py)
reco::RecoEcalCandidate correctEPosition(const reco::SuperCluster &original, const reco::HFEMClusterShape &shape, int nvtx)
std::vector< RecoEcalCandidate > RecoEcalCandidateCollection
collectin of RecoEcalCandidate objects
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)