]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDdigitizer.h
e12738423e8c877424fe1fb9e6cce4c84b68ad57
[u/mrichter/AliRoot.git] / TRD / AliTRDdigitizer.h
1 #ifndef ALITRDDIGITIZER_H
2 #define ALITRDDIGITIZER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 #include "AliDigitizer.h"
9
10 class TFile;
11 class TF1;
12
13 class AliRunDigitizer;
14 class AliRunLoader;
15
16 class AliTRD;
17 class AliTRDdigitsManager;
18 class AliTRDgeometry;
19
20 ///////////////////////////////////////////////////////
21 //  Produces digits from the hits information        //
22 ///////////////////////////////////////////////////////
23
24 class AliTRDdigitizer : public AliDigitizer {
25
26  public:
27
28   AliTRDdigitizer();
29   AliTRDdigitizer(const Text_t* name, const Text_t* title);
30   AliTRDdigitizer(AliRunDigitizer *manager, const Text_t* name, const Text_t* title);
31   AliTRDdigitizer(AliRunDigitizer *manager);
32   AliTRDdigitizer(const AliTRDdigitizer &d);
33   virtual ~AliTRDdigitizer();
34   AliTRDdigitizer &operator=(const AliTRDdigitizer &d);
35
36   virtual void         Copy(TObject &d) const;
37   virtual Bool_t       InitDetector();
38   virtual void         Exec(Option_t* option = 0);  
39   virtual Bool_t       Open(const Char_t *file, Int_t nEvent = 0);
40   virtual Bool_t       MakeBranch(TTree* tree) const;
41   virtual Bool_t       MakeDigits();
42   virtual void         AddSDigitsManager(AliTRDdigitsManager *manager);
43   virtual void         DeleteSDigitsManager();
44   virtual Bool_t       ConvertSDigits();
45   virtual Bool_t       MergeSDigits();
46   virtual Bool_t       SDigits2Digits();
47   virtual Bool_t       WriteDigits() const;
48
49           void         InitOutput(Int_t iEvent);
50  
51   virtual void         SetCompress(Int_t c = 1)             { fCompress        = c;   };
52   virtual void         SetDebug(Int_t v = 1)                { fDebug           = v;   };
53   virtual void         SetSDigits(Int_t v = 1)              { fSDigits         = v;   };
54   virtual void         SetSDigitsScale(Float_t s)           { fSDigitsScale    = s;   };
55   virtual void         SetEvent(Int_t v = 0)                { fEvent           = v;   };
56   virtual void         SetManager(AliTRDdigitsManager *man) { fDigitsManager   = man; };
57   virtual void         SetGeometry(AliTRDgeometry *geo)     { fGeo             = geo; };
58   virtual void         SetMergeSignalOnly(Bool_t m = kTRUE) { fMergeSignalOnly = m;   };
59
60   AliTRDdigitsManager *Digits()                       const { return fDigitsManager; };
61
62   Bool_t               GetCompress()                  const { return fCompress;      };
63   Bool_t               GetSDigits()                   const { return fSDigits;       };
64   Float_t              GetSDigitsScale()              const { return fSDigitsScale;  };
65
66   virtual Double_t     TimeStruct(Float_t vdrift, Double_t time, Double_t z);
67
68           Float_t      GetDiffusionT(Float_t vdrift);
69           Float_t      GetDiffusionL(Float_t vdrift);
70   virtual Int_t        Diffusion(Float_t vdrift, Double_t driftlength, Double_t *xyz);
71
72           Float_t      GetLorentzFactor(Float_t vdrift);
73   virtual Int_t        ExB(Float_t vdrift, Double_t driftlength, Double_t *xyz);  
74   
75  protected:
76
77   AliRunLoader        *fRunLoader;          //! Local pointer
78   AliTRDdigitsManager *fDigitsManager;      //! Manager for the output digits
79   AliTRDdigitsManager *fSDigitsManager;     //! Manager for the summed input s-digits
80   TList               *fSDigitsManagerList; //! List of managers of input s-digits
81   AliTRD              *fTRD;                //! TRD detector class
82   AliTRDgeometry      *fGeo;                //! TRD geometry
83   Int_t                fEvent;              //! Event number
84   Int_t               *fMasks;              //! Masks for the merging
85   Bool_t               fCompress;           //  Switch to keep only compressed data in memory
86   Int_t                fDebug;              //  Sets the debug level
87   Bool_t               fSDigits;            //  Switch for the summable digits
88   Float_t              fSDigitsScale;       //  Scale factor for the summable digits 
89   Bool_t               fMergeSignalOnly;    //  Merge only detectors that contain a signal
90   Bool_t               fFixedGeometry;      //  Switch for the fixed geometry, i.e. without alignment
91
92           void         SampleTimeStruct(Float_t vdrift);
93           void         RecalcDiffusion(Float_t vdrift);
94   
95   struct
96   {
97     Float_t fLastVdrift;                                      //! The structures are valid for fLastVdrift (caching)
98     Float_t fDiffusionT;                                      //! Transverse drift coefficient
99     Float_t fDiffusionL;                                      //! Longitudinal drift coefficient
100     Float_t              fOmegaTau;                           //! Tangens of the Lorentz angle
101     Float_t              fLorentzFactor;                      //! Factor due to Lorentz force
102   } fDiffusionInfo;                                           //! Do not write the structures
103     
104   struct 
105   {
106     Float_t fLastVdrift;                                      //! The structures are valid for fLastVdrift (caching)
107     Float_t             *fTimeStruct1;                        //! Time Structure of Drift Cells
108     Float_t             *fTimeStruct2;                        //! Time Structure of Drift Cells
109     Float_t              fVDlo;                               //! Lower drift velocity, for interpolation
110     Float_t              fVDhi;                               //! Higher drift velocity, for interpolation
111   } fTimeStructInfo;                                          //! Do not write the structures
112   
113  private:
114     
115   virtual Bool_t       Init();
116     
117   virtual Bool_t       CheckDetector(Int_t plane, Int_t chamber, Int_t sector);
118
119   ClassDef(AliTRDdigitizer,11)               //  Produces TRD-Digits
120
121 };
122
123 #endif