Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 13:26:35

0001 #ifndef HCALProperties_H
0002 #define HCALProperties_H
0003 
0004 #include "FastSimulation/CalorimeterProperties/interface/CalorimeterProperties.h"
0005 #include <vector>
0006 
0007 /** 
0008  * Functions to return atomic properties of the material
0009  * A_eff and Z_eff are computed as the A-weighted sums 
0010  * of the A's and the Z's of Cu and Zn (brass) - For now
0011  * assume it is all Copper, and it'll be good enough.
0012  *
0013  * \author Patrick Janot
0014  * \date: 25-Jan-2004
0015  */
0016 
0017 namespace edm {
0018   class ParameterSet;
0019 }
0020 
0021 class HCALProperties : public CalorimeterProperties {
0022 public:
0023   HCALProperties(const edm::ParameterSet& fastDet);
0024 
0025   ~HCALProperties() override {}
0026 
0027   /// Effective A
0028   inline double theAeff() const override { return HCALAeff_; }
0029 
0030   /// Effective Z
0031   inline double theZeff() const override { return HCALZeff_; }
0032 
0033   /// Density in g/cm3
0034   inline double rho() const override { return HCALrho_; }
0035 
0036   /// Radiation length in cm
0037   inline double radLenIncm() const override { return radiationLengthIncm(); }
0038 
0039   /// Radiation length in cm but static
0040   // This is needed in Calorimetry/CrystalSegment.
0041   // Patrick, if you don't like it, give me another solution
0042   // to access the ECALProperties efficiently.
0043   inline double radiationLengthIncm() const { return HCALradiationLengthIncm_; }
0044 
0045   /// Radiation length in g/cm^2
0046   inline double radLenIngcm2() const override { return HCALradLenIngcm2_; }
0047 
0048   /// Moliere Radius in cm (=7 A/Z in g/cm^2)
0049   inline double moliereRadius() const override { return HCALmoliereRadius_; }
0050   //inline double moliereRadius()  const { return 2.4; }
0051 
0052   /// Critical energy in GeV (2.66E-3*(x0*Z/A)^1.1)
0053   inline double criticalEnergy() const override { return HCALcriticalEnergy_; }
0054 
0055   ///Interaction length in cm
0056   inline double interactionLength() const override { return HCALinteractionLength_; }
0057 
0058   ///h/pi Warning ! This is a ad-hoc parameter. It has been tuned to get a good agreement on 1TeV electrons
0059   ///It might have nothing to do with reality
0060   inline double hOverPi() const { return hOPi; }
0061 
0062   /// Spot fraction wrt ECAL
0063   inline double spotFraction() const { return spotFrac; }
0064 
0065   double getHcalDepth(double) const;
0066 
0067   int eta2ieta(double eta) const;
0068 
0069 private:
0070   double hOPi;
0071   double spotFrac;
0072 
0073 protected:
0074   double HCALAeff_;
0075   double HCALZeff_;
0076   double HCALrho_;
0077   double HCALradiationLengthIncm_;
0078   double HCALradLenIngcm2_;
0079   double HCALmoliereRadius_;
0080   double HCALcriticalEnergy_;
0081   double HCALinteractionLength_;
0082   std::vector<double> etatow_;        // HCAL towers eta edges
0083   std::vector<double> hcalDepthLam_;  // HCAL depth for each tower ieta
0084 };
0085 
0086 #endif