CMS 3D CMS Logo

HGCalShowerShape.h
Go to the documentation of this file.
1 #ifndef __L1Trigger_L1THGCal_HGCalShowerShape_h__
2 #define __L1Trigger_L1THGCal_HGCalShowerShape_h__
3 #include <vector>
4 #include <functional>
5 #include <cmath>
11 
13 
14  public:
16 
18 
20 
22 
23  int firstLayer(const l1t::HGCalMulticluster& c3d) const;
24  int lastLayer(const l1t::HGCalMulticluster& c3d) const;
25  int maxLayer(const l1t::HGCalMulticluster& c3d) const;
26  int showerLength(const l1t::HGCalMulticluster& c3d) const {return lastLayer(c3d)-firstLayer(c3d)+1; }//in number of layers
27  // Maximum number of consecutive layers in the cluster
28  int coreShowerLength(const l1t::HGCalMulticluster& c3d, const HGCalTriggerGeometryBase& triggerGeometry) const;
29 
30  float eMax(const l1t::HGCalMulticluster& c3d) const;
31 
32  float sigmaZZ(const l1t::HGCalMulticluster& c3d) const;
33 
34  float sigmaEtaEtaTot(const l1t::HGCalMulticluster& c3d) const;
35  float sigmaEtaEtaTot(const l1t::HGCalCluster& c2d) const;
36  float sigmaEtaEtaMax(const l1t::HGCalMulticluster& c3d) const;
37 
38  float sigmaPhiPhiTot(const l1t::HGCalMulticluster& c3d) const;
39  float sigmaPhiPhiTot(const l1t::HGCalCluster& c2d) const;
40  float sigmaPhiPhiMax(const l1t::HGCalMulticluster& c3d) const;
41 
42  float sigmaRRTot(const l1t::HGCalMulticluster& c3d) const;
43  float sigmaRRTot(const l1t::HGCalCluster& c2d) const;
44  float sigmaRRMax(const l1t::HGCalMulticluster& c3d) const;
45  float sigmaRRMean(const l1t::HGCalMulticluster& c3d, float radius=5.) const;
46 
47  private:
48 
49  float meanX(const std::vector<pair<float,float> >& energy_X_tc) const;
50  // Compute energy-weighted RMS of any variable X in the cluster
51  // Delta(a,b) functor as template argument. Default is (a-b)
52  template<typename Delta=std::minus<float>> float sigmaXX(
53  const std::vector<pair<float,float> >& energy_X_tc,
54  const float X_cluster) const {
55 
56  Delta delta;
57  float Etot = 0;
58  float deltaX2_sum = 0;
59  for(const auto& energy_X : energy_X_tc){
60  deltaX2_sum += energy_X.first * pow(delta(energy_X.second, X_cluster),2);
61  Etot += energy_X.first;
62  }
63  float X_MSE = 0;
64  if (Etot>0) X_MSE=deltaX2_sum/Etot;
65  float X_RMS=sqrt(X_MSE);
66  return X_RMS;
67  }
68  // Special case of delta for phi
69  template <class T> struct DeltaPhi {
70  T operator() (const T& x, const T& y) const {return deltaPhi(x,y);}
71  };
72  float sigmaPhiPhi(
73  const std::vector<pair<float,float> >& energy_phi_tc,
74  const float phi_cluster) const {
75  return sigmaXX<DeltaPhi<float>>(energy_phi_tc,phi_cluster);
76  }
77 
79 
80 };
81 
82 
83 #endif
84 
float sigmaRRMax(const l1t::HGCalMulticluster &c3d) const
dbl * delta
Definition: mlp_gen.cc:36
T operator()(const T &x, const T &y) const
void eventSetup(const edm::EventSetup &es)
void eventSetup(const edm::EventSetup &)
int coreShowerLength(const l1t::HGCalMulticluster &c3d, const HGCalTriggerGeometryBase &triggerGeometry) const
float sigmaRRTot(const l1t::HGCalMulticluster &c3d) const
HGCalTriggerTools triggerTools_
float sigmaPhiPhiTot(const l1t::HGCalMulticluster &c3d) const
int firstLayer(const l1t::HGCalMulticluster &c3d) const
float sigmaPhiPhi(const std::vector< pair< float, float > > &energy_phi_tc, const float phi_cluster) const
float meanX(const std::vector< pair< float, float > > &energy_X_tc) const
int lastLayer(const l1t::HGCalMulticluster &c3d) const
float sigmaXX(const std::vector< pair< float, float > > &energy_X_tc, const float X_cluster) const
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
float sigmaRRMean(const l1t::HGCalMulticluster &c3d, float radius=5.) const
T sqrt(T t)
Definition: SSEVec.h:18
float sigmaEtaEtaMax(const l1t::HGCalMulticluster &c3d) const
math::XYZTLorentzVector LorentzVector
int showerLength(const l1t::HGCalMulticluster &c3d) const
float sigmaZZ(const l1t::HGCalMulticluster &c3d) const
float sigmaPhiPhiMax(const l1t::HGCalMulticluster &c3d) const
int maxLayer(const l1t::HGCalMulticluster &c3d) const
long double T
float eMax(const l1t::HGCalMulticluster &c3d) const
float sigmaEtaEtaTot(const l1t::HGCalMulticluster &c3d) const
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40