ECALProperties

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
#ifndef ECALProperties_H
#define ECALProperties_H

#include "FastSimulation/CalorimeterProperties/interface/CalorimeterProperties.h"

/** 
 * Functions to return atomic properties of the material
 * A_eff and Z_eff are computed as the A-weighted sums 
 * of the A's and the Z's of Pb, W and O
 *
 * \author Patrick Janot
 * \date: 25-Jan-2004
 */

class ECALProperties : public CalorimeterProperties {
public:
  ECALProperties() : scaleEnergy_(0.0212) {}

  ~ECALProperties() override {}

  /// Effective A: 170.87 for Standard ECAL
  inline double theAeff() const override { return Aeff_; }

  /// Effective Z: 68.36 for Standard ECAL
  inline double theZeff() const override { return Zeff_; }

  /// Density in g/cm3: 8.280 for Standard ECAL
  inline double rho() const override { return rho_; }

  /// Radiation length in cm
  //  inline double radLenIncm()  const { return radiationLengthIncm(); }: 0.89 for Standard ECAL
  inline double radLenIncm() const override { return radLenIncm_; }

  /// Radiation length in cm but static
  // This is needed in Calorimetry/CrystalSegment. Patrick, if you don't like it, give
  // me an other solution to access the ECALProperties efficiently.
  // static inline double radiationLengthIncm() { return 0.89; }

  /// Radiation length in g/cm^2: 7.37  for Standard ECAL
  inline double radLenIngcm2() const override { return radLenIngcm2_; }

  /// Moliere Radius in cm : 2.190 for Standard ECAL
  inline double moliereRadius() const override { return moliereRadius_; }

  /// Critical energy in GeV (2.66E-3*(x0*Z/A)^1.1): 8.74E-3 for Standard ECAL
  inline double criticalEnergy() const override { return criticalEnergy_; }

  ///Interaction length in cm: 18.5 for Standard ECAL
  inline double interactionLength() const override { return interactionLength_; }

  ///Sampling fraction Fs of the calorimeter. 0 for homogeneous one
  inline double theFs() const { return Fs_; }

  /// ehat = e/mip of the calorimeter. 0 for homogeneous one
  inline double ehat() const { return ehat_; }

  /// a rough estimate of ECAL resolution sigma/E = resE/sqrt(E)
  inline double resE() const { return resE_; }

  /// the width of the active layer in the case of the homogeneous detector
  inline double da() const { return da_; }

  /// the width of the passive layer in the case of the homogeneous detector
  inline double dp() const { return dp_; }

  /// a rough estimate of ECAL resolution sigma/E = resE/sqrt(E)
  inline bool isHom() const { return bHom_; }

  ///Photostatistics (photons/GeV) in the homegeneous material
  virtual double photoStatistics() const = 0;

  ///Light Collection efficiency
  virtual double lightCollectionEfficiency() const = 0;

  ///Light Collection uniformity
  virtual double lightCollectionUniformity() const = 0;

protected:
  double lightColl_;
  double lightCollUnif_;
  double photoStatistics_;
  double thickness_;
  double interactionLength_;

  double Aeff_;
  double Zeff_;
  double rho_;
  double radLenIncm_;
  double radLenIngcm2_;
  double moliereRadius_;

  double criticalEnergy_;

  double Fs_;
  double ehat_;
  double resE_;

  double da_;
  double dp_;

  bool bHom_;

  //Es=sqrt(4*Pi/alphaEM)*me*c^2=0.0212 GeV used for Moliere Radius calculation
  const double scaleEnergy_;
};

#endif