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
|
#ifndef HCALProperties_H
#define HCALProperties_H
#include "FastSimulation/CalorimeterProperties/interface/CalorimeterProperties.h"
#include <vector>
/**
* 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 Cu and Zn (brass) - For now
* assume it is all Copper, and it'll be good enough.
*
* \author Patrick Janot
* \date: 25-Jan-2004
*/
namespace edm {
class ParameterSet;
}
class HCALProperties : public CalorimeterProperties {
public:
HCALProperties(const edm::ParameterSet& fastDet);
~HCALProperties() override {}
/// Effective A
inline double theAeff() const override { return HCALAeff_; }
/// Effective Z
inline double theZeff() const override { return HCALZeff_; }
/// Density in g/cm3
inline double rho() const override { return HCALrho_; }
/// Radiation length in cm
inline double radLenIncm() const override { return radiationLengthIncm(); }
/// Radiation length in cm but static
// This is needed in Calorimetry/CrystalSegment.
// Patrick, if you don't like it, give me another solution
// to access the ECALProperties efficiently.
inline double radiationLengthIncm() const { return HCALradiationLengthIncm_; }
/// Radiation length in g/cm^2
inline double radLenIngcm2() const override { return HCALradLenIngcm2_; }
/// Moliere Radius in cm (=7 A/Z in g/cm^2)
inline double moliereRadius() const override { return HCALmoliereRadius_; }
//inline double moliereRadius() const { return 2.4; }
/// Critical energy in GeV (2.66E-3*(x0*Z/A)^1.1)
inline double criticalEnergy() const override { return HCALcriticalEnergy_; }
///Interaction length in cm
inline double interactionLength() const override { return HCALinteractionLength_; }
///h/pi Warning ! This is a ad-hoc parameter. It has been tuned to get a good agreement on 1TeV electrons
///It might have nothing to do with reality
inline double hOverPi() const { return hOPi; }
/// Spot fraction wrt ECAL
inline double spotFraction() const { return spotFrac; }
double getHcalDepth(double) const;
int eta2ieta(double eta) const;
private:
double hOPi;
double spotFrac;
protected:
double HCALAeff_;
double HCALZeff_;
double HCALrho_;
double HCALradiationLengthIncm_;
double HCALradLenIngcm2_;
double HCALmoliereRadius_;
double HCALcriticalEnergy_;
double HCALinteractionLength_;
std::vector<double> etatow_; // HCAL towers eta edges
std::vector<double> hcalDepthLam_; // HCAL depth for each tower ieta
};
#endif
|