CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
ClusterShapeAlgo Class Reference

#include <ClusterShapeAlgo.h>

Public Member Functions

reco::ClusterShape Calculate (const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry, const CaloSubdetectorTopology *topology)
 
 ClusterShapeAlgo (const edm::ParameterSet &par)
 
 ClusterShapeAlgo ()
 

Private Types

enum  { Eta, Phi }
 

Private Member Functions

double absZernikeMoment (const reco::BasicCluster &passedCluster, int n, int m, double R0=6.6)
 
double calc_AbsZernikeMoment (const reco::BasicCluster &passedCluster, int n, int m, double R0)
 
void Calculate_2ndEnergy (const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits)
 
void Calculate_BarrelBasketEnergyFraction (const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits, const int EtaPhi, const CaloSubdetectorGeometry *geometry)
 
void Calculate_ComplexZernikeMoments (const reco::BasicCluster &passedCluster)
 
void Calculate_Covariances (const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry)
 
void Calculate_e2x2 ()
 
void Calculate_e2x5Bottom ()
 
void Calculate_e2x5Left ()
 
void Calculate_e2x5Right ()
 
void Calculate_e2x5Top ()
 
void Calculate_e3x2 ()
 
void Calculate_e3x3 ()
 
void Calculate_e4x4 ()
 
void Calculate_e5x5 ()
 
void Calculate_EnergyDepTopology (const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry, bool logW=true)
 
void Calculate_lat (const reco::BasicCluster &passedCluster)
 
void Calculate_Polynomials (double rho)
 
void Calculate_TopEnergy (const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits)
 
void Create_Map (const EcalRecHitCollection *hits, const CaloSubdetectorTopology *topology)
 
double f00 (double r)
 
double f11 (double r)
 
double f20 (double r)
 
double f22 (double r)
 
double f31 (double r)
 
double f33 (double r)
 
double f40 (double r)
 
double f42 (double r)
 
double f44 (double r)
 
double f51 (double r)
 
double f53 (double r)
 
double f55 (double r)
 
double factorial (int n) const
 
double fast_AbsZernikeMoment (const reco::BasicCluster &passedCluster, int n, int m, double R0)
 

Private Attributes

double A20_
 
double A42_
 
double covEtaEta_
 
double covEtaPhi_
 
double covPhiPhi_
 
double e2nd_
 
DetId e2ndId_
 
double e2x2_
 
int e2x2_Diagonal_X_
 
int e2x2_Diagonal_Y_
 
double e2x5Bottom_
 
double e2x5Left_
 
double e2x5Right_
 
double e2x5Top_
 
double e3x2_
 
double e3x2Ratio_
 
double e3x3_
 
double e4x4_
 
double e5x5_
 
double eMax_
 
DetId eMaxId_
 
std::vector< double > energyBasketFractionEta_
 
std::vector< double > energyBasketFractionPhi_
 
std::vector< EcalClusterEnergyDepositionenergyDistribution_
 
std::pair< DetId, double > energyMap_ [5][5]
 
double etaLat_
 
std::vector< double > fcn_
 
double lat_
 
edm::ParameterSet parameterSet_
 
double phiLat_
 

Detailed Description

calculates and creates a ClusterShape object

Author
Michael A. Balazs, UVa

Definition at line 36 of file ClusterShapeAlgo.h.

Member Enumeration Documentation

anonymous enum
private
Enumerator
Eta 
Phi 

Definition at line 109 of file ClusterShapeAlgo.h.

Constructor & Destructor Documentation

ClusterShapeAlgo::ClusterShapeAlgo ( const edm::ParameterSet par)

Definition at line 19 of file ClusterShapeAlgo.cc.

19  :
20  parameterSet_(par) {}
edm::ParameterSet parameterSet_
ClusterShapeAlgo::ClusterShapeAlgo ( )
inline

Member Function Documentation

double ClusterShapeAlgo::absZernikeMoment ( const reco::BasicCluster passedCluster,
int  n,
int  m,
double  R0 = 6.6 
)
private

Definition at line 498 of file ClusterShapeAlgo.cc.

References calc_AbsZernikeMoment(), and fast_AbsZernikeMoment().

Referenced by Calculate_ComplexZernikeMoments().

499  {
500  // 1. Check if n,m are correctly
501  if ((m>n) || ((n-m)%2 != 0) || (n<0) || (m<0)) return -1;
502 
503  // 2. Check if n,R0 are within validity Range :
504  // n>20 or R0<2.19cm just makes no sense !
505  if ((n>20) || (R0<=2.19)) return -1;
506  if (n<=5) return fast_AbsZernikeMoment(passedCluster,n,m,R0);
507  else return calc_AbsZernikeMoment(passedCluster,n,m,R0);
508 }
double fast_AbsZernikeMoment(const reco::BasicCluster &passedCluster, int n, int m, double R0)
double calc_AbsZernikeMoment(const reco::BasicCluster &passedCluster, int n, int m, double R0)
double ClusterShapeAlgo::calc_AbsZernikeMoment ( const reco::BasicCluster passedCluster,
int  n,
int  m,
double  R0 
)
private

Definition at line 559 of file ClusterShapeAlgo.cc.

References funct::cos(), MillePedeFileConverter_cfg::e, energyDistribution_, factorial(), mps_fire::i, funct::m, phi, funct::pow(), alignCSCRings::r, pfBoostedDoubleSVAK8TagInfos_cfi::R0, mps_fire::result, alignCSCRings::s, funct::sin(), and mathSSE::sqrt().

Referenced by absZernikeMoment().

560  {
561  double r,ph,e,Re=0,Im=0,f_nm,result;
562  double TotalEnergy = passedCluster.energy();
563  int clusterSize=energyDistribution_.size();
564  if(clusterSize<3) return 0.0;
565 
566  for (int i=0; i<clusterSize; i++)
567  {
568  r = energyDistribution_[i].r / R0;
569  if (r<1) {
570  ph = (energyDistribution_[i]).phi;
571  e = energyDistribution_[i].deposited_energy;
572  f_nm=0;
573  for (int s=0; s<=(n-m)/2; s++) {
574  if (s%2==0)
575  {
576  f_nm = f_nm + factorial(n-s)*pow(r,(double) (n-2*s))/(factorial(s)*factorial((n+m)/2-s)*factorial((n-m)/2-s));
577  }else {
578  f_nm = f_nm - factorial(n-s)*pow(r,(double) (n-2*s))/(factorial(s)*factorial((n+m)/2-s)*factorial((n-m)/2-s));
579  }
580  }
581  Re = Re + e/TotalEnergy * f_nm * cos( (double) m*ph);
582  Im = Im - e/TotalEnergy * f_nm * sin( (double) m*ph);
583  }
584  }
585  result = sqrt(Re*Re+Im*Im);
586 
587  return result;
588 }
std::vector< EcalClusterEnergyDeposition > energyDistribution_
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
double factorial(int n) const
T sqrt(T t)
Definition: SSEVec.h:18
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
reco::ClusterShape ClusterShapeAlgo::Calculate ( const reco::BasicCluster passedCluster,
const EcalRecHitCollection hits,
const CaloSubdetectorGeometry geometry,
const CaloSubdetectorTopology topology 
)

Definition at line 22 of file ClusterShapeAlgo.cc.

References A20_, A42_, Calculate_2ndEnergy(), Calculate_BarrelBasketEnergyFraction(), Calculate_ComplexZernikeMoments(), Calculate_Covariances(), Calculate_e2x2(), Calculate_e2x5Bottom(), Calculate_e2x5Left(), Calculate_e2x5Right(), Calculate_e2x5Top(), Calculate_e3x2(), Calculate_e3x3(), Calculate_e4x4(), Calculate_e5x5(), Calculate_EnergyDepTopology(), Calculate_lat(), Calculate_TopEnergy(), covEtaEta_, covEtaPhi_, covPhiPhi_, Create_Map(), e2nd_, e2ndId_, e2x2_, e2x5Bottom_, e2x5Left_, e2x5Right_, e2x5Top_, e3x2_, e3x2Ratio_, e3x3_, e4x4_, e5x5_, eMax_, eMaxId_, energyBasketFractionEta_, energyBasketFractionPhi_, Eta, etaLat_, lat_, Phi, and phiLat_.

Referenced by CosmicClusterProducer::clusterizeECALPart(), IslandClusterProducer::clusterizeECALPart(), and Pi0FixedMassWindowCalibration::duringLoop().

26 {
27  Calculate_TopEnergy(passedCluster,hits);
28  Calculate_2ndEnergy(passedCluster,hits);
29  Create_Map(hits,topology);
39  Calculate_Covariances(passedCluster,hits,geometry);
40  Calculate_BarrelBasketEnergyFraction(passedCluster,hits, Eta, geometry);
41  Calculate_BarrelBasketEnergyFraction(passedCluster,hits, Phi, geometry);
42  Calculate_EnergyDepTopology (passedCluster,hits,geometry,true) ;
43  Calculate_lat(passedCluster);
44  Calculate_ComplexZernikeMoments(passedCluster);
45 
51 }
void Create_Map(const EcalRecHitCollection *hits, const CaloSubdetectorTopology *topology)
void Calculate_BarrelBasketEnergyFraction(const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits, const int EtaPhi, const CaloSubdetectorGeometry *geometry)
void Calculate_Covariances(const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry)
void Calculate_EnergyDepTopology(const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry, bool logW=true)
void Calculate_TopEnergy(const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits)
std::vector< double > energyBasketFractionPhi_
void Calculate_ComplexZernikeMoments(const reco::BasicCluster &passedCluster)
void Calculate_lat(const reco::BasicCluster &passedCluster)
std::vector< double > energyBasketFractionEta_
void Calculate_2ndEnergy(const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits)
void ClusterShapeAlgo::Calculate_2ndEnergy ( const reco::BasicCluster passedCluster,
const EcalRecHitCollection hits 
)
private

Definition at line 81 of file ClusterShapeAlgo.cc.

References e2nd_, e2ndId_, eMaxId_, edm::SortedCollection< T, SORT >::end(), EcalRecHit::energy(), edm::SortedCollection< T, SORT >::find(), and EcalRecHit::id().

Referenced by Calculate().

82 {
83  double e2nd=0;
84  DetId e2ndId(0);
85 
86  const std::vector< std::pair<DetId, float> >& clusterDetIds = passedCluster.hitsAndFractions();
87 
88  EcalRecHit testEcalRecHit;
89 
90  for(auto const& posCurrent : clusterDetIds)
91  {
92  if (( posCurrent.first != DetId(0)) && (hits->find( posCurrent.first ) != hits->end()))
93  {
94  EcalRecHitCollection::const_iterator itt = hits->find( posCurrent.first );
95  testEcalRecHit = *itt;
96 
97  if(testEcalRecHit.energy() * posCurrent.second > e2nd && testEcalRecHit.id() != eMaxId_)
98  {
99  e2nd = testEcalRecHit.energy() * posCurrent.second;
100  e2ndId = testEcalRecHit.id();
101  }
102  }
103  }
104 
105  e2nd_ = e2nd;
106  e2ndId_ = e2ndId;
107 }
std::vector< EcalRecHit >::const_iterator const_iterator
float energy() const
Definition: EcalRecHit.h:68
const_iterator end() const
Definition: DetId.h:18
DetId id() const
get the id
Definition: EcalRecHit.h:77
iterator find(key_type k)
void ClusterShapeAlgo::Calculate_BarrelBasketEnergyFraction ( const reco::BasicCluster passedCluster,
const EcalRecHitCollection hits,
const int  EtaPhi,
const CaloSubdetectorGeometry geometry 
)
private

Definition at line 382 of file ClusterShapeAlgo.cc.

References funct::abs(), EcalBarrel, energyBasketFractionEta_, energyBasketFractionPhi_, Eta, edm::SortedCollection< T, SORT >::find(), plotBeamSpotDB::first, geometry, EcalBarrelGeometry::getBasketSizeInPhi(), EcalBarrelGeometry::getEtaBaskets(), mps_fire::i, EBDetId::ieta(), EBDetId::iphi(), EBDetId::MAX_IPHI, EBDetId::MIN_IPHI, and Phi.

Referenced by Calculate().

386 {
387  if( (hits==nullptr) || ( ((*hits)[0]).id().subdetId() != EcalBarrel ) ) {
388  //std::cout << "No basket correction if no hits or for endacap!" << std::endl;
389  return;
390  }
391 
392  std::map<int,double> indexedBasketEnergy;
393  const std::vector< std::pair<DetId, float> >& clusterDetIds = passedCluster.hitsAndFractions();
394  const EcalBarrelGeometry* subDetGeometry = dynamic_cast<const EcalBarrelGeometry*>(geometry);
395 
396  for(auto const& posCurrent : clusterDetIds)
397  {
398  int basketIndex = 999;
399 
400  if(EtaPhi == Eta) {
401  int unsignedIEta = abs(EBDetId( posCurrent.first ).ieta());
402  std::vector<int> etaBasketSize = subDetGeometry->getEtaBaskets();
403 
404  for(unsigned int i = 0; i < etaBasketSize.size(); i++) {
405  unsignedIEta -= etaBasketSize[i];
406  if(unsignedIEta - 1 < 0)
407  {
408  basketIndex = i;
409  break;
410  }
411  }
412  basketIndex = (basketIndex+1)*(EBDetId( posCurrent.first ).ieta() > 0 ? 1 : -1);
413 
414  } else if(EtaPhi == Phi) {
415  int halfNumBasketInPhi = (EBDetId::MAX_IPHI - EBDetId::MIN_IPHI + 1)/subDetGeometry->getBasketSizeInPhi()/2;
416 
417  basketIndex = (EBDetId( posCurrent.first ).iphi() - 1)/subDetGeometry->getBasketSizeInPhi()
418  - (EBDetId( (clusterDetIds[0]).first ).iphi() - 1)/subDetGeometry->getBasketSizeInPhi();
419 
420  if(basketIndex >= halfNumBasketInPhi) basketIndex -= 2*halfNumBasketInPhi;
421  else if(basketIndex < -1*halfNumBasketInPhi) basketIndex += 2*halfNumBasketInPhi;
422 
423  } else throw(std::runtime_error("\n\nOh No! Calculate_BarrelBasketEnergyFraction called on invalid index.\n\n"));
424 
425  indexedBasketEnergy[basketIndex] += (hits->find( posCurrent.first ))->energy();
426  }
427 
428  std::vector<double> energyFraction;
429  for(std::map<int,double>::iterator posCurrent = indexedBasketEnergy.begin(); posCurrent != indexedBasketEnergy.end(); posCurrent++)
430  {
431  energyFraction.push_back(indexedBasketEnergy[posCurrent->first]/passedCluster.energy());
432  }
433 
434  switch(EtaPhi)
435  {
436  case Eta: energyBasketFractionEta_ = energyFraction; break;
437  case Phi: energyBasketFractionPhi_ = energyFraction; break;
438  }
439 
440 }
static const int MIN_IPHI
Definition: EBDetId.h:135
int iphi() const
get the crystal iphi
Definition: EBDetId.h:51
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int ieta() const
get the crystal ieta
Definition: EBDetId.h:49
static const int MAX_IPHI
Definition: EBDetId.h:137
std::vector< double > energyBasketFractionPhi_
const std::vector< int > & getEtaBaskets() const
int getBasketSizeInPhi() const
ESHandle< TrackerGeometry > geometry
iterator find(key_type k)
std::vector< double > energyBasketFractionEta_
void ClusterShapeAlgo::Calculate_ComplexZernikeMoments ( const reco::BasicCluster passedCluster)
private

Definition at line 491 of file ClusterShapeAlgo.cc.

References A20_, A42_, and absZernikeMoment().

Referenced by Calculate().

491  {
492  // Calculate only the moments which go into the default cluster shape
493  // (moments with m>=2 are the only sensitive to azimuthal shape)
494  A20_ = absZernikeMoment(passedCluster,2,0);
495  A42_ = absZernikeMoment(passedCluster,4,2);
496 }
double absZernikeMoment(const reco::BasicCluster &passedCluster, int n, int m, double R0=6.6)
void ClusterShapeAlgo::Calculate_Covariances ( const reco::BasicCluster passedCluster,
const EcalRecHitCollection hits,
const CaloSubdetectorGeometry geometry 
)
private

Definition at line 310 of file ClusterShapeAlgo.cc.

References covEtaEta_, covEtaPhi_, covPhiPhi_, pfDeepCMVADiscriminatorsJetTags_cfi::denominator, particleFlow_cfi::dEta, particleFlow_cfi::dPhi, e5x5_, energyMap_, PV3DBase< T, PVType, FrameType >::eta(), CaloSubdetectorGeometry::getGeometry(), edm::ParameterSet::getParameter(), mps_fire::i, cmsBatch::log, SiStripPI::max, parameterSet_, PV3DBase< T, PVType, FrameType >::phi(), Geom::pi(), position, edm::second(), Geom::twoPi(), w, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by Calculate().

312 {
313  if (e5x5_ > 0.)
314  {
315  double w0_ = parameterSet_.getParameter<double>("W0");
316 
317 
318  // first find energy-weighted mean position - doing it when filling the energy map might save time
319  math::XYZVector meanPosition(0.0, 0.0, 0.0);
320  for (int i = 0; i < 5; ++i)
321  {
322  for (int j = 0; j < 5; ++j)
323  {
324  DetId id = energyMap_[i][j].first;
325  if (id != DetId(0))
326  {
327  GlobalPoint positionGP = geometry->getGeometry(id)->getPosition();
328  math::XYZVector position(positionGP.x(),positionGP.y(),positionGP.z());
329  meanPosition = meanPosition + energyMap_[i][j].second * position;
330  }
331  }
332  }
333 
334  meanPosition /= e5x5_;
335 
336  // now we can calculate the covariances
337  double numeratorEtaEta = 0;
338  double numeratorEtaPhi = 0;
339  double numeratorPhiPhi = 0;
340  double denominator = 0;
341 
342  for (int i = 0; i < 5; ++i)
343  {
344  for (int j = 0; j < 5; ++j)
345  {
346  DetId id = energyMap_[i][j].first;
347  if (id != DetId(0))
348  {
349  GlobalPoint position = geometry->getGeometry(id)->getPosition();
350 
351  double dPhi = position.phi() - meanPosition.phi();
352  if (dPhi > + Geom::pi()) { dPhi = Geom::twoPi() - dPhi; }
353  if (dPhi < - Geom::pi()) { dPhi = Geom::twoPi() + dPhi; }
354 
355  double dEta = position.eta() - meanPosition.eta();
356  double w = 0.;
357  if ( energyMap_[i][j].second > 0.)
358  w = std::max(0.0, w0_ + log( energyMap_[i][j].second / e5x5_));
359 
360  denominator += w;
361  numeratorEtaEta += w * dEta * dEta;
362  numeratorEtaPhi += w * dEta * dPhi;
363  numeratorPhiPhi += w * dPhi * dPhi;
364  }
365  }
366  }
367 
368  covEtaEta_ = numeratorEtaEta / denominator;
369  covEtaPhi_ = numeratorEtaPhi / denominator;
370  covPhiPhi_ = numeratorPhiPhi / denominator;
371  }
372  else
373  {
374  // Warn the user if there was no energy in the cells and return zeroes.
375  // std::cout << "\ClusterShapeAlgo::Calculate_Covariances: no energy in supplied cells.\n";
376  covEtaEta_ = 0;
377  covEtaPhi_ = 0;
378  covPhiPhi_ = 0;
379  }
380 }
T getParameter(std::string const &) const
const double w
Definition: UKUtility.cc:23
edm::ParameterSet parameterSet_
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
T y() const
Definition: PV3DBase.h:63
std::pair< DetId, double > energyMap_[5][5]
U second(std::pair< T, U > const &p)
T z() const
Definition: PV3DBase.h:64
Definition: DetId.h:18
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
T eta() const
Definition: PV3DBase.h:76
static int position[264][3]
Definition: ReadPGInfo.cc:509
constexpr double pi()
Definition: Pi.h:31
constexpr double twoPi()
Definition: Pi.h:32
T x() const
Definition: PV3DBase.h:62
void ClusterShapeAlgo::Calculate_e2x2 ( )
private

Definition at line 131 of file ClusterShapeAlgo.cc.

References TCMET_cfi::corner, e2x2_, e2x2_Diagonal_X_, e2x2_Diagonal_Y_, and energyMap_.

Referenced by Calculate().

132 {
133  double e2x2Max = 0;
134  double e2x2Test = 0;
135 
136  int deltaX=0, deltaY=0;
137 
138  for(int corner = 0; corner < 4; corner++)
139  {
140  switch(corner)
141  {
142  case 0: deltaX = -1; deltaY = -1; break;
143  case 1: deltaX = -1; deltaY = 1; break;
144  case 2: deltaX = 1; deltaY = -1; break;
145  case 3: deltaX = 1; deltaY = 1; break;
146  }
147 
148  e2x2Test = energyMap_[2][2].second;
149  e2x2Test += energyMap_[2+deltaY][2].second;
150  e2x2Test += energyMap_[2][2+deltaX].second;
151  e2x2Test += energyMap_[2+deltaY][2+deltaX].second;
152 
153  if(e2x2Test > e2x2Max)
154  {
155  e2x2Max = e2x2Test;
156  e2x2_Diagonal_X_ = 2+deltaX;
157  e2x2_Diagonal_Y_ = 2+deltaY;
158  }
159  }
160 
161  e2x2_ = e2x2Max;
162 
163 }
std::pair< DetId, double > energyMap_[5][5]
void ClusterShapeAlgo::Calculate_e2x5Bottom ( )
private

Definition at line 286 of file ClusterShapeAlgo.cc.

References e2x5Bottom_, energyMap_, and mps_fire::i.

Referenced by Calculate().

287 {
288 double e2x5B=0.0;
289  for(int i = 0; i <= 4; i++){
290  for(int j = 0; j <= 4; j++){
291 
292  if(i>2){e2x5B +=energyMap_[i][j].second;}
293  }
294  }
295  e2x5Bottom_=e2x5B;
296 }
std::pair< DetId, double > energyMap_[5][5]
void ClusterShapeAlgo::Calculate_e2x5Left ( )
private

Definition at line 275 of file ClusterShapeAlgo.cc.

References e2x5Left_, energyMap_, and mps_fire::i.

Referenced by Calculate().

276 {
277 double e2x5L=0.0;
278  for(int i = 0; i <= 4; i++){
279  for(int j = 0; j <= 4; j++){
280  if(j<2){e2x5L +=energyMap_[i][j].second;}
281  }
282  }
283  e2x5Left_=e2x5L;
284 }
std::pair< DetId, double > energyMap_[5][5]
void ClusterShapeAlgo::Calculate_e2x5Right ( )
private

Definition at line 264 of file ClusterShapeAlgo.cc.

References e2x5Right_, energyMap_, and mps_fire::i.

Referenced by Calculate().

265 {
266 double e2x5R=0.0;
267  for(int i = 0; i <= 4; i++){
268  for(int j = 0; j <= 4; j++){
269  if(j>2){e2x5R +=energyMap_[i][j].second;}
270  }
271  }
272  e2x5Right_=e2x5R;
273 }
std::pair< DetId, double > energyMap_[5][5]
void ClusterShapeAlgo::Calculate_e2x5Top ( )
private

Definition at line 298 of file ClusterShapeAlgo.cc.

References e2x5Top_, energyMap_, and mps_fire::i.

Referenced by Calculate().

299 {
300 double e2x5T=0.0;
301  for(int i = 0; i <= 4; i++){
302  for(int j = 0; j <= 4; j++){
303 
304  if(i<2){e2x5T +=energyMap_[i][j].second;}
305  }
306  }
307  e2x5Top_=e2x5T;
308 }
std::pair< DetId, double > energyMap_[5][5]
void ClusterShapeAlgo::Calculate_e3x2 ( )
private

Definition at line 165 of file ClusterShapeAlgo.cc.

References e3x2_, e3x2Ratio_, energyMap_, edm::second(), and Validation_hcalonly_cfi::sign.

Referenced by Calculate().

166 {
167  double e3x2 = 0.0;
168  double e3x2Ratio = 0.0, e3x2RatioNumerator = 0.0, e3x2RatioDenominator = 0.0;
169 
170  int e2ndX = 2, e2ndY = 2;
171  int deltaY = 0, deltaX = 0;
172 
173  double nextEnergy = -999;
174  int nextEneryDirection = -1;
175 
176  for(int cardinalDirection = 0; cardinalDirection < 4; cardinalDirection++)
177  {
178  switch(cardinalDirection)
179  {
180  case 0: deltaX = -1; deltaY = 0; break;
181  case 1: deltaX = 1; deltaY = 0; break;
182  case 2: deltaX = 0; deltaY = -1; break;
183  case 3: deltaX = 0; deltaY = 1; break;
184  }
185 
186  if(energyMap_[2+deltaY][2+deltaX].second >= nextEnergy)
187  {
188  nextEnergy = energyMap_[2+deltaY][2+deltaX].second;
189  nextEneryDirection = cardinalDirection;
190 
191  e2ndX = 2+deltaX;
192  e2ndY = 2+deltaY;
193  }
194  }
195 
196  switch(nextEneryDirection)
197  {
198  case 0: ;
199  case 1: deltaX = 0; deltaY = 1; break;
200  case 2: ;
201  case 3: deltaX = 1; deltaY = 0; break;
202  }
203 
204  for(int sign = -1; sign <= 1; sign++)
205  e3x2 += (energyMap_[2+deltaY*sign][2+deltaX*sign].second + energyMap_[e2ndY+deltaY*sign][e2ndX+deltaX*sign].second);
206 
207  e3x2RatioNumerator = energyMap_[e2ndY+deltaY][e2ndX+deltaX].second + energyMap_[e2ndY-deltaY][e2ndX-deltaX].second;
208  e3x2RatioDenominator = 0.5 + energyMap_[2+deltaY][2+deltaX].second + energyMap_[2-deltaY][2-deltaX].second;
209  e3x2Ratio = e3x2RatioNumerator / e3x2RatioDenominator;
210 
211  e3x2_ = e3x2;
212  e3x2Ratio_ = e3x2Ratio;
213 }
std::pair< DetId, double > energyMap_[5][5]
U second(std::pair< T, U > const &p)
void ClusterShapeAlgo::Calculate_e3x3 ( )
private

Definition at line 215 of file ClusterShapeAlgo.cc.

References e3x3_, energyMap_, mps_fire::i, and edm::second().

Referenced by Calculate().

216 {
217  double e3x3=0;
218 
219  for(int i = 1; i <= 3; i++)
220  for(int j = 1; j <= 3; j++)
221  e3x3 += energyMap_[j][i].second;
222 
223  e3x3_ = e3x3;
224 
225 }
std::pair< DetId, double > energyMap_[5][5]
U second(std::pair< T, U > const &p)
void ClusterShapeAlgo::Calculate_e4x4 ( )
private

Definition at line 227 of file ClusterShapeAlgo.cc.

References e2x2_Diagonal_X_, e2x2_Diagonal_Y_, e4x4_, energyMap_, mps_fire::i, and edm::second().

Referenced by Calculate().

228 {
229  double e4x4=0;
230 
231  int startX=-1, startY=-1;
232 
233  switch(e2x2_Diagonal_X_)
234  {
235  case 1: startX = 0; break;
236  case 3: startX = 1; break;
237  }
238 
239  switch(e2x2_Diagonal_Y_)
240  {
241  case 1: startY = 0; break;
242  case 3: startY = 1; break;
243  }
244 
245  for(int i = startX; i <= startX+3; i++)
246  for(int j = startY; j <= startY+3; j++)
247  e4x4 += energyMap_[j][i].second;
248 
249  e4x4_ = e4x4;
250 }
std::pair< DetId, double > energyMap_[5][5]
U second(std::pair< T, U > const &p)
void ClusterShapeAlgo::Calculate_e5x5 ( )
private

Definition at line 252 of file ClusterShapeAlgo.cc.

References e5x5_, energyMap_, mps_fire::i, and edm::second().

Referenced by Calculate().

253 {
254  double e5x5=0;
255 
256  for(int i = 0; i <= 4; i++)
257  for(int j = 0; j <= 4; j++)
258  e5x5 += energyMap_[j][i].second;
259 
260  e5x5_ = e5x5;
261 
262 }
std::pair< DetId, double > energyMap_[5][5]
U second(std::pair< T, U > const &p)
void ClusterShapeAlgo::Calculate_EnergyDepTopology ( const reco::BasicCluster passedCluster,
const EcalRecHitCollection hits,
const CaloSubdetectorGeometry geometry,
bool  logW = true 
)
private

Definition at line 590 of file ClusterShapeAlgo.cc.

References EcalClusterEnergyDeposition::deposited_energy, diffTreeTool::diff, edm::SortedCollection< T, SORT >::end(), EcalRecHit::energy(), energyDistribution_, edm::SortedCollection< T, SORT >::find(), CaloSubdetectorGeometry::getGeometry(), edm::ParameterSet::getParameter(), cmsBatch::log, LogDebug, M_PI, SiStripPI::max, parameterSet_, EcalClusterEnergyDeposition::phi, EcalClusterEnergyDeposition::r, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by Calculate().

593  {
594  // resets the energy distribution
595  energyDistribution_.clear();
596 
597  // init a map of the energy deposition centered on the
598  // cluster centroid. This is for momenta calculation only.
599  CLHEP::Hep3Vector clVect(passedCluster.position().x(),
600  passedCluster.position().y(),
601  passedCluster.position().z());
602  CLHEP::Hep3Vector clDir(clVect);
603  clDir*=1.0/clDir.mag();
604  // in the transverse plane, axis perpendicular to clusterDir
605  CLHEP::Hep3Vector theta_axis(clDir.y(),-clDir.x(),0.0);
606  theta_axis *= 1.0/theta_axis.mag();
607  CLHEP::Hep3Vector phi_axis = theta_axis.cross(clDir);
608 
609  const std::vector< std::pair<DetId, float> >& clusterDetIds = passedCluster.hitsAndFractions();
610 
612  EcalRecHit testEcalRecHit;
613  // loop over crystals
614  for(auto const& posCurrent : clusterDetIds) {
615  EcalRecHitCollection::const_iterator itt = hits->find( posCurrent.first );
616  testEcalRecHit=*itt;
617 
618  if(( posCurrent.first != DetId(0)) && (hits->find( posCurrent.first ) != hits->end())) {
619  clEdep.deposited_energy = testEcalRecHit.energy();
620 
621  // if logarithmic weight is requested, apply cut on minimum energy of the recHit
622  if(logW) {
623  double w0_ = parameterSet_.getParameter<double>("W0");
624 
625  if ( clEdep.deposited_energy == 0 ) {
626  LogDebug("ClusterShapeAlgo") << "Crystal has zero energy; skipping... ";
627  continue;
628  }
629  double weight = std::max(0.0, w0_ + log(fabs(clEdep.deposited_energy)/passedCluster.energy()) );
630  if(weight==0) {
631  LogDebug("ClusterShapeAlgo") << "Crystal has insufficient energy: E = "
632  << clEdep.deposited_energy << " GeV; skipping... ";
633  continue;
634  }
635  else LogDebug("ClusterShapeAlgo") << "===> got crystal. Energy = " << clEdep.deposited_energy << " GeV. ";
636  }
637  DetId id_ = posCurrent.first;
638  auto this_cell = geometry->getGeometry(id_);
639  const GlobalPoint& cellPos = this_cell->getPosition();
640  CLHEP::Hep3Vector gblPos (cellPos.x(),cellPos.y(),cellPos.z()); //surface position?
641  // Evaluate the distance from the cluster centroid
642  CLHEP::Hep3Vector diff = gblPos - clVect;
643  // Important: for the moment calculation, only the "lateral distance" is important
644  // "lateral distance" r_i = distance of the digi position from the axis Origin-Cluster Center
645  // ---> subtract the projection on clDir
646  CLHEP::Hep3Vector DigiVect = diff - diff.dot(clDir)*clDir;
647  clEdep.r = DigiVect.mag();
648  LogDebug("ClusterShapeAlgo") << "E = " << clEdep.deposited_energy
649  << "\tdiff = " << diff.mag()
650  << "\tr = " << clEdep.r;
651  clEdep.phi = DigiVect.angle(theta_axis);
652  if(DigiVect.dot(phi_axis)<0) clEdep.phi = 2*M_PI - clEdep.phi;
653  energyDistribution_.push_back(clEdep);
654  }
655  }
656 }
#define LogDebug(id)
T getParameter(std::string const &) const
std::vector< EcalClusterEnergyDeposition > energyDistribution_
edm::ParameterSet parameterSet_
std::vector< EcalRecHit >::const_iterator const_iterator
T y() const
Definition: PV3DBase.h:63
Definition: weight.py:1
T z() const
Definition: PV3DBase.h:64
float energy() const
Definition: EcalRecHit.h:68
#define M_PI
const_iterator end() const
Definition: DetId.h:18
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
iterator find(key_type k)
T x() const
Definition: PV3DBase.h:62
void ClusterShapeAlgo::Calculate_lat ( const reco::BasicCluster passedCluster)
private

Definition at line 442 of file ClusterShapeAlgo.cc.

References funct::cos(), energyDistribution_, etaLat_, mps_fire::i, lat_, gen::n, phi, phiLat_, alignCSCRings::r, funct::sin(), and tmp.

Referenced by Calculate().

442  {
443 
444  double r,redmoment=0;
445  double phiRedmoment = 0 ;
446  double etaRedmoment = 0 ;
447  int n,n1,n2,tmp;
448  int clusterSize=energyDistribution_.size();
449  if (clusterSize<3) {
450  etaLat_ = 0.0 ;
451  lat_ = 0.0;
452  return;
453  }
454 
455  n1=0; n2=1;
456  if (energyDistribution_[1].deposited_energy >
457  energyDistribution_[0].deposited_energy)
458  {
459  tmp=n2; n2=n1; n1=tmp;
460  }
461  for (int i=2; i<clusterSize; i++) {
462  n=i;
463  if (energyDistribution_[i].deposited_energy >
464  energyDistribution_[n1].deposited_energy)
465  {
466  tmp = n2;
467  n2 = n1; n1 = i; n=tmp;
468  } else {
469  if (energyDistribution_[i].deposited_energy >
470  energyDistribution_[n2].deposited_energy)
471  {
472  tmp=n2; n2=i; n=tmp;
473  }
474  }
475 
476  r = energyDistribution_[n].r;
477  redmoment += r*r* energyDistribution_[n].deposited_energy;
478  double rphi = r * cos (energyDistribution_[n].phi) ;
479  phiRedmoment += rphi * rphi * energyDistribution_[n].deposited_energy;
480  double reta = r * sin (energyDistribution_[n].phi) ;
481  etaRedmoment += reta * reta * energyDistribution_[n].deposited_energy;
482  }
483  double e1 = energyDistribution_[n1].deposited_energy;
484  double e2 = energyDistribution_[n2].deposited_energy;
485 
486  lat_ = redmoment/(redmoment+2.19*2.19*(e1+e2));
487  phiLat_ = phiRedmoment/(phiRedmoment+2.19*2.19*(e1+e2));
488  etaLat_ = etaRedmoment/(etaRedmoment+2.19*2.19*(e1+e2));
489 }
std::vector< EcalClusterEnergyDeposition > energyDistribution_
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
void ClusterShapeAlgo::Calculate_Polynomials ( double  rho)
private

Definition at line 658 of file ClusterShapeAlgo.cc.

References f00(), f11(), f20(), f22(), f31(), f33(), f40(), f42(), f44(), f51(), f53(), f55(), and fcn_.

Referenced by fast_AbsZernikeMoment().

658  {
659  fcn_.push_back(f00(rho));
660  fcn_.push_back(f11(rho));
661  fcn_.push_back(f20(rho));
662  fcn_.push_back(f31(rho));
663  fcn_.push_back(f22(rho));
664  fcn_.push_back(f33(rho));
665  fcn_.push_back(f40(rho));
666  fcn_.push_back(f51(rho));
667  fcn_.push_back(f42(rho));
668  fcn_.push_back(f53(rho));
669  fcn_.push_back(f44(rho));
670  fcn_.push_back(f55(rho));
671 }
double f20(double r)
std::vector< double > fcn_
double f00(double r)
double f44(double r)
double f31(double r)
double f55(double r)
double f42(double r)
double f40(double r)
double f33(double r)
double f11(double r)
double f51(double r)
double f22(double r)
double f53(double r)
void ClusterShapeAlgo::Calculate_TopEnergy ( const reco::BasicCluster passedCluster,
const EcalRecHitCollection hits 
)
private

Definition at line 53 of file ClusterShapeAlgo.cc.

References photonPostprocessing_cfi::eMax, eMax_, eMaxId_, edm::SortedCollection< T, SORT >::end(), EcalRecHit::energy(), edm::SortedCollection< T, SORT >::find(), and EcalRecHit::id().

Referenced by Calculate().

54 {
55  double eMax=0;
56  DetId eMaxId(0);
57 
58  const std::vector< std::pair<DetId, float> >& clusterDetIds = passedCluster.hitsAndFractions();
59 
60  EcalRecHit testEcalRecHit;
61 
62  for(auto const& posCurrent : clusterDetIds)
63  {
64  if ((posCurrent.first != DetId(0)) && (hits->find(posCurrent.first) != hits->end()))
65  {
66  EcalRecHitCollection::const_iterator itt = hits->find(posCurrent.first);
67  testEcalRecHit = *itt;
68 
69  if(testEcalRecHit.energy() * posCurrent.second > eMax)
70  {
71  eMax = testEcalRecHit.energy() * posCurrent.second;
72  eMaxId = testEcalRecHit.id();
73  }
74  }
75  }
76 
77  eMax_ = eMax;
78  eMaxId_ = eMaxId;
79 }
std::vector< EcalRecHit >::const_iterator const_iterator
float energy() const
Definition: EcalRecHit.h:68
const_iterator end() const
Definition: DetId.h:18
DetId id() const
get the id
Definition: EcalRecHit.h:77
iterator find(key_type k)
void ClusterShapeAlgo::Create_Map ( const EcalRecHitCollection hits,
const CaloSubdetectorTopology topology 
)
private

Definition at line 109 of file ClusterShapeAlgo.cc.

References eMaxId_, edm::SortedCollection< T, SORT >::end(), EcalRecHit::energy(), energyMap_, edm::SortedCollection< T, SORT >::find(), CaloNavigator< T, TOPO >::home(), EcalRecHit::id(), CaloNavigator< T, TOPO >::offsetBy(), ecaldqm::topology(), x, and y.

Referenced by Calculate().

110 {
111  EcalRecHit tempEcalRecHit;
113 
114  for(int x = 0; x < 5; x++)
115  for(int y = 0; y < 5; y++)
116  {
117  posCurrent.home();
118  posCurrent.offsetBy(-2+x,-2+y);
119 
120  if((*posCurrent != DetId(0)) && (hits->find(*posCurrent) != hits->end()))
121  {
122  EcalRecHitCollection::const_iterator itt = hits->find(*posCurrent);
123  tempEcalRecHit = *itt;
124  energyMap_[y][x] = std::make_pair(tempEcalRecHit.id(),tempEcalRecHit.energy());
125  }
126  else
127  energyMap_[y][x] = std::make_pair(DetId(0), 0);
128  }
129 }
CaloTopology const * topology(0)
std::vector< EcalRecHit >::const_iterator const_iterator
std::pair< DetId, double > energyMap_[5][5]
T offsetBy(int deltaX, int deltaY) const
Free movement of arbitray steps.
Definition: CaloNavigator.h:80
float energy() const
Definition: EcalRecHit.h:68
const_iterator end() const
void home() const
move the navigator back to the starting point
Definition: DetId.h:18
DetId id() const
get the id
Definition: EcalRecHit.h:77
iterator find(key_type k)
double ClusterShapeAlgo::f00 ( double  r)
private

Definition at line 510 of file ClusterShapeAlgo.cc.

Referenced by Calculate_Polynomials().

510 { return 1; }
double ClusterShapeAlgo::f11 ( double  r)
private

Definition at line 512 of file ClusterShapeAlgo.cc.

References alignCSCRings::r.

Referenced by Calculate_Polynomials().

512 { return r; }
double ClusterShapeAlgo::f20 ( double  r)
private

Definition at line 514 of file ClusterShapeAlgo.cc.

Referenced by Calculate_Polynomials().

514 { return 2.0*r*r-1.0; }
double ClusterShapeAlgo::f22 ( double  r)
private

Definition at line 516 of file ClusterShapeAlgo.cc.

References alignCSCRings::r.

Referenced by Calculate_Polynomials().

516 { return r*r; }
double ClusterShapeAlgo::f31 ( double  r)
private

Definition at line 518 of file ClusterShapeAlgo.cc.

References alignCSCRings::r.

Referenced by Calculate_Polynomials().

518 { return 3.0*r*r*r - 2.0*r; }
double ClusterShapeAlgo::f33 ( double  r)
private

Definition at line 520 of file ClusterShapeAlgo.cc.

References alignCSCRings::r.

Referenced by Calculate_Polynomials().

520 { return r*r*r; }
double ClusterShapeAlgo::f40 ( double  r)
private

Definition at line 522 of file ClusterShapeAlgo.cc.

Referenced by Calculate_Polynomials().

522 { return 6.0*r*r*r*r-6.0*r*r+1.0; }
double ClusterShapeAlgo::f42 ( double  r)
private

Definition at line 524 of file ClusterShapeAlgo.cc.

References alignCSCRings::r.

Referenced by Calculate_Polynomials().

524 { return 4.0*r*r*r*r-3.0*r*r; }
double ClusterShapeAlgo::f44 ( double  r)
private

Definition at line 526 of file ClusterShapeAlgo.cc.

References alignCSCRings::r.

Referenced by Calculate_Polynomials().

526 { return r*r*r*r; }
double ClusterShapeAlgo::f51 ( double  r)
private

Definition at line 528 of file ClusterShapeAlgo.cc.

References funct::pow(), and alignCSCRings::r.

Referenced by Calculate_Polynomials().

528 { return 10.0*pow(r,5)-12.0*pow(r,3)+3.0*r; }
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
double ClusterShapeAlgo::f53 ( double  r)
private

Definition at line 530 of file ClusterShapeAlgo.cc.

References funct::pow().

Referenced by Calculate_Polynomials().

530 { return 5.0*pow(r,5) - 4.0*pow(r,3); }
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
double ClusterShapeAlgo::f55 ( double  r)
private

Definition at line 532 of file ClusterShapeAlgo.cc.

References funct::pow().

Referenced by Calculate_Polynomials().

532 { return pow(r,5); }
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
double ClusterShapeAlgo::factorial ( int  n) const
private

Definition at line 673 of file ClusterShapeAlgo.cc.

References mps_fire::i, and gen::n.

Referenced by calc_AbsZernikeMoment().

673  {
674  double res=1.0;
675  for(int i=2; i<=n; i++) res*=(double) i;
676  return res;
677 }
Definition: Electron.h:6
double ClusterShapeAlgo::fast_AbsZernikeMoment ( const reco::BasicCluster passedCluster,
int  n,
int  m,
double  R0 
)
private

Definition at line 534 of file ClusterShapeAlgo.cc.

References Calculate_Polynomials(), funct::cos(), MillePedeFileConverter_cfg::e, energyDistribution_, fcn_, mps_fire::i, phi, alignCSCRings::r, pfBoostedDoubleSVAK8TagInfos_cfi::R0, mps_fire::result, funct::sin(), and mathSSE::sqrt().

Referenced by absZernikeMoment().

535  {
536  double r,ph,e,Re=0,Im=0,result;
537  double TotalEnergy = passedCluster.energy();
538  int index = (n/2)*(n/2)+(n/2)+m;
539  int clusterSize=energyDistribution_.size();
540  if(clusterSize<3) return 0.0;
541 
542  for (int i=0; i<clusterSize; i++)
543  {
544  r = energyDistribution_[i].r / R0;
545  if (r<1) {
546  fcn_.clear();
548  ph = (energyDistribution_[i]).phi;
549  e = energyDistribution_[i].deposited_energy;
550  Re = Re + e/TotalEnergy * fcn_[index] * cos( (double) m * ph);
551  Im = Im - e/TotalEnergy * fcn_[index] * sin( (double) m * ph);
552  }
553  }
554  result = sqrt(Re*Re+Im*Im);
555 
556  return result;
557 }
std::vector< double > fcn_
std::vector< EcalClusterEnergyDeposition > energyDistribution_
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
T sqrt(T t)
Definition: SSEVec.h:18
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
void Calculate_Polynomials(double rho)

Member Data Documentation

double ClusterShapeAlgo::A20_
private

Definition at line 102 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_ComplexZernikeMoments().

double ClusterShapeAlgo::A42_
private

Definition at line 102 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_ComplexZernikeMoments().

double ClusterShapeAlgo::covEtaEta_
private

Definition at line 95 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_Covariances().

double ClusterShapeAlgo::covEtaPhi_
private

Definition at line 95 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_Covariances().

double ClusterShapeAlgo::covPhiPhi_
private

Definition at line 95 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_Covariances().

double ClusterShapeAlgo::e2nd_
private

Definition at line 96 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_2ndEnergy().

DetId ClusterShapeAlgo::e2ndId_
private

Definition at line 105 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_2ndEnergy().

double ClusterShapeAlgo::e2x2_
private

Definition at line 96 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_e2x2().

int ClusterShapeAlgo::e2x2_Diagonal_X_
private

Definition at line 93 of file ClusterShapeAlgo.h.

Referenced by Calculate_e2x2(), and Calculate_e4x4().

int ClusterShapeAlgo::e2x2_Diagonal_Y_
private

Definition at line 93 of file ClusterShapeAlgo.h.

Referenced by Calculate_e2x2(), and Calculate_e4x4().

double ClusterShapeAlgo::e2x5Bottom_
private

Definition at line 97 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_e2x5Bottom().

double ClusterShapeAlgo::e2x5Left_
private

Definition at line 97 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_e2x5Left().

double ClusterShapeAlgo::e2x5Right_
private

Definition at line 97 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_e2x5Right().

double ClusterShapeAlgo::e2x5Top_
private

Definition at line 97 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_e2x5Top().

double ClusterShapeAlgo::e3x2_
private

Definition at line 96 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_e3x2().

double ClusterShapeAlgo::e3x2Ratio_
private

Definition at line 98 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_e3x2().

double ClusterShapeAlgo::e3x3_
private

Definition at line 96 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_e3x3().

double ClusterShapeAlgo::e4x4_
private

Definition at line 96 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_e4x4().

double ClusterShapeAlgo::e5x5_
private

Definition at line 96 of file ClusterShapeAlgo.h.

Referenced by Calculate(), Calculate_Covariances(), and Calculate_e5x5().

double ClusterShapeAlgo::eMax_
private

Definition at line 96 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_TopEnergy().

DetId ClusterShapeAlgo::eMaxId_
private
std::vector<double> ClusterShapeAlgo::energyBasketFractionEta_
private

Definition at line 103 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_BarrelBasketEnergyFraction().

std::vector<double> ClusterShapeAlgo::energyBasketFractionPhi_
private

Definition at line 104 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_BarrelBasketEnergyFraction().

std::vector<EcalClusterEnergyDeposition> ClusterShapeAlgo::energyDistribution_
private
std::pair<DetId, double> ClusterShapeAlgo::energyMap_[5][5]
private
double ClusterShapeAlgo::etaLat_
private

Definition at line 100 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_lat().

std::vector<double> ClusterShapeAlgo::fcn_
private

Definition at line 107 of file ClusterShapeAlgo.h.

Referenced by Calculate_Polynomials(), and fast_AbsZernikeMoment().

double ClusterShapeAlgo::lat_
private

Definition at line 99 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_lat().

edm::ParameterSet ClusterShapeAlgo::parameterSet_
private

Definition at line 90 of file ClusterShapeAlgo.h.

Referenced by Calculate_Covariances(), and Calculate_EnergyDepTopology().

double ClusterShapeAlgo::phiLat_
private

Definition at line 101 of file ClusterShapeAlgo.h.

Referenced by Calculate(), and Calculate_lat().