26d0d82d476366255bae1bbebefed85d1b80006d
[u/mrichter/AliRoot.git] / TRD / AliTRDv2.h
1 #ifndef TRDv2_H
2 #define TRDv2_H
3 ////////////////////////////////////////////////////////
4 //  Manager and hits classes for set:TRD version 2    //
5 ////////////////////////////////////////////////////////
6  
7 #include "AliTRD.h"
8
9 class AliTRDv2 : public AliTRD {
10
11 public:
12   AliTRDv2() {}
13   AliTRDv2(const char *name, const char *title);
14   virtual      ~AliTRDv2() {}
15   virtual void  CreateGeometry();
16   virtual void  CreateMaterials();
17   virtual Int_t IsVersion() const {return 2;}
18   virtual void  StepManager();
19   virtual void  Init();
20   virtual void  DrawModule();
21
22 protected:
23   Int_t        fIdSenO1;    // Sensitive volume identifier for outer chambers
24   Int_t        fIdSenO2;    // Sensitive volume identifier for outer chambers
25   Int_t        fIdSenO3;    // Sensitive volume identifier for outer chambers
26   Int_t        fIdSenO4;    // Sensitive volume identifier for outer chambers
27   Int_t        fIdSenO5;    // Sensitive volume identifier for outer chambers
28   Int_t        fIdSenO6;    // Sensitive volume identifier for outer chambers
29   Int_t        fIdSenI1;    // Sensitive volume identifier for inner chambers
30   Int_t        fIdSenI2;    // Sensitive volume identifier for inner chambers
31   Int_t        fIdSenI3;    // Sensitive volume identifier for inner chambers
32   Int_t        fIdSenI4;    // Sensitive volume identifier for inner chambers
33   Int_t        fIdSenI5;    // Sensitive volume identifier for inner chambers
34   Int_t        fIdSenI6;    // Sensitive volume identifier for inner chambers
35             
36 private:
37   // Inline functions for AliTRDv2
38   
39   inline Float_t Eloss(Float_t rndm)
40     {
41       //
42       // Calculates the energy loss 
43       // 1/E^2. distribution for the fluctuations
44       //
45       // Exponent of the distribution for the energy loss 
46       // 2.0 is the apropriate value for Argon, 2.2 would be for Neon,
47       // and how about Xenon? We take the Argon value for the time being.
48       const Float_t kEexp = 2.0;
49       // First ionization potential for the gas mixture (90% Xe + 10% CO2)
50       // taken from: Ionization Measurements in High Energy Physics, Springer
51       const Float_t kPoti = 12.3E-9;
52       // Maximum energy (10 keV);
53       const Float_t kEend = 10.0E-6;
54       
55       Float_t ex   = 1. - kEexp;
56       Float_t xpot = TMath::Power(kPoti,ex);
57       Float_t xend = TMath::Power(kEend,ex);
58       Float_t elos = (1. - rndm)*xpot + rndm*xend;
59       
60       return(TMath::Power(elos,(1./ex)) - kPoti);
61       
62     }
63   
64   inline Float_t BetheBloch(Float_t xx) 
65     {
66       //
67       // Parametrization of the Bethe-Bloch-curve
68       // The parametrization is the same as for the TPC and is taken from
69       // Lehrhaus.
70       // The parameters have been adjusted to Xe-data found in:
71       // Allison & Cobb, Ann. Rev. Nucl. Sci. (1980), 30, 253
72       //
73       const Float_t kP1 = 0.76176E-1;
74       const Float_t kP2 = 10.632;
75       const Float_t kP3 = 3.17983E-6;
76       const Float_t kP4 = 1.8631;
77       const Float_t kP5 = 1.9479;
78       
79       Float_t yy = xx / TMath::Sqrt(1. + xx*xx);
80       Float_t aa = TMath::Power(yy,kP4);
81       Float_t bb = TMath::Power((1./xx),kP5);
82       bb = TMath::Log(kP3 + bb);
83       
84       return((kP2 - aa - bb)*kP1 / aa);
85       
86     }
87   
88   ClassDef(AliTRDv2,1)     // Transition Radiation Detector version 2
89 };
90
91 #endif