Update TRD code from C.Blume
[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 <TF1.h> 
8 #include "AliTRD.h"
9
10 // Energy spectrum of the delta-rays 
11 Double_t Ermilova(Double_t *x, Double_t *par);
12
13 class AliTRDv2 : public AliTRD {
14
15 public:
16   AliTRDv2() {}
17   AliTRDv2(const char *name, const char *title);
18   virtual        ~AliTRDv2();
19   virtual void    CreateGeometry();
20   virtual void    CreateMaterials();
21   virtual Int_t   IsVersion() const {return 2;}
22   virtual void    MakeBranch(Option_t* option);
23   virtual void    StepManager();
24   virtual void    SetSensPlane(Int_t iplane = 0);
25   virtual void    SetSensChamber(Int_t ichamber = 0);
26   virtual void    SetSensSector(Int_t isector = 0);
27   virtual void    Init();
28   virtual void    Hits2Digits(); 
29
30   virtual void    SetRowPadSize(Float_t size)         { fRowPadSize   = size;     };
31   virtual void    SetColPadSize(Float_t size)         { fColPadSize   = size;     };
32   virtual void    SetTimeBinSize(Float_t size)        { fTimeBinSize  = size;     };
33
34   virtual void    SetGasGain(Float_t gasgain)         { fGasGain      = gasgain;  };
35   virtual void    SetNoise(Float_t noise)             { fNoise        = noise;    };
36   virtual void    SetChipGain(Float_t chipgain)       { fChipGain     = chipgain; };
37   virtual void    SetADCoutRange(Float_t range)       { fADCoutRange  = range;    };
38   virtual void    SetADCinRange(Float_t range)        { fADCinRange   = range;    };
39   virtual void    SetADCthreshold(Int_t thresh)       { fADCthreshold = thresh;   };
40   virtual void    SetDiffusionT(Float_t diff)         { fDiffusionT   = diff;     };
41   virtual void    SetDiffusionL(Float_t diff)         { fDiffusionL   = diff;     };
42
43   virtual Float_t GetRowPadSize()                     { return fRowPadSize;   };
44   virtual Float_t GetColPadSize()                     { return fColPadSize;   };
45   virtual Float_t GetTimeBinSize()                    { return fTimeBinSize;  };
46
47   virtual Float_t GetGasGain()                        { return fGasGain;      };
48   virtual Float_t GetNoise()                          { return fNoise;        };
49   virtual Float_t GetChipGain()                       { return fChipGain;     };
50   virtual Float_t GetADCoutRange()                    { return fADCoutRange;  };
51   virtual Float_t GetADCinRange()                     { return fADCinRange;   };
52   virtual Int_t   GetADCthreshold()                   { return fADCthreshold; };
53   virtual Float_t GetDiffusionT()                     { return fDiffusionT;   };
54   virtual Float_t GetDiffusionL()                     { return fDiffusionL;   };
55
56   virtual Int_t   GetRowMax(Int_t iplan, Int_t icham) { return fRowMax[iplan-1][icham-1]; };
57   virtual Int_t   GetColMax(Int_t iplan)              { return fColMax[iplan-1];          };
58   virtual Int_t   GetTimeMax()                        { return fTimeMax;                  };
59
60 protected:
61   Int_t        fIdSens;                 // Sensitive volume identifier
62
63   Int_t        fIdSpace1;               // Spaceframe volume identifier
64   Int_t        fIdSpace2;               // 
65   Int_t        fIdSpace3;               // 
66
67   Int_t        fIdChamber1;             // Driftchamber volume identifier
68   Int_t        fIdChamber2;             // 
69   Int_t        fIdChamber3;             // 
70
71   Int_t        fSensSelect;             // Switch to select only parts of the detector
72   Int_t        fSensPlane;              // Sensitive detector plane
73   Int_t        fSensChamber;            // Sensitive detector chamber
74   Int_t        fSensSector;             // Sensitive detector sector
75
76   Int_t        fRowMax[kNplan][kNcham]; // Number of pad-rows
77   Int_t        fColMax[kNplan];         // Number of pad-columns
78   Int_t        fTimeMax;                // Number of time buckets
79
80   Float_t      fRowPadSize;             // Pad size in z-direction
81   Float_t      fColPadSize;             // Pad size in rphi-direction
82   Float_t      fTimeBinSize;            // Size of the time buckets
83
84   Float_t      fGasGain;                // Gas gain
85   Float_t      fNoise;                  // Electronics noise
86   Float_t      fChipGain;               // Electronics gain
87   Float_t      fADCoutRange;            // ADC output range (number of channels)
88   Float_t      fADCinRange;             // ADC input range (input charge)
89   Int_t        fADCthreshold;           // ADC threshold in ADC channel
90   Float_t      fDiffusionT;             // Diffusion in transverse direction
91   Float_t      fDiffusionL;             // Diffusion in logitudinal direction
92
93 private:
94   virtual Double_t BetheBloch(Double_t bg);
95   virtual void     Diffusion(Float_t driftlength, Float_t *xyz);
96   virtual Float_t  PadResponse(Float_t x);
97
98   TF1         *fDeltaE;                 // Energy distribution of the delta-electrons
99    
100   ClassDef(AliTRDv2,1)                  // Transition Radiation Detector version 2 (slow simulator)
101
102 };
103
104 #endif