]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDdigitizer.h
Important bugfix. Missing reset of the equipment header data. It was causing a wrong...
[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         SetSDigits(Int_t v = 1)              { fSDigits         = v;   };
53   virtual void         SetSDigitsScale(Float_t s)           { fSDigitsScale    = s;   };
54   virtual void         SetEvent(Int_t v = 0)                { fEvent           = v;   };
55   virtual void         SetManager(AliTRDdigitsManager *man) { fDigitsManager   = man; };
56   virtual void         SetGeometry(AliTRDgeometry *geo)     { fGeo             = geo; };
57   virtual void         SetMergeSignalOnly(Bool_t m = kTRUE) { fMergeSignalOnly = m;   };
58
59   AliTRDdigitsManager *Digits()                       const { return fDigitsManager; };
60
61   Bool_t               GetCompress()                  const { return fCompress;      };
62   Bool_t               GetSDigits()                   const { return fSDigits;       };
63   Float_t              GetSDigitsScale()              const { return fSDigitsScale;  };
64
65   virtual Double_t     TimeStruct(Float_t vdrift, Double_t time, Double_t z);
66
67           Float_t      GetDiffusionT(Float_t vdrift);
68           Float_t      GetDiffusionL(Float_t vdrift);
69   virtual Int_t        Diffusion(Float_t vdrift, Double_t driftlength, Double_t *xyz);
70
71           Float_t      GetLorentzFactor(Float_t vdrift);
72   virtual Int_t        ExB(Float_t vdrift, Double_t driftlength, Double_t *xyz);  
73   
74  protected:
75
76   AliRunLoader        *fRunLoader;          //! Local pointer
77   AliTRDdigitsManager *fDigitsManager;      //! Manager for the output digits
78   AliTRDdigitsManager *fSDigitsManager;     //! Manager for the summed input s-digits
79   TList               *fSDigitsManagerList; //! List of managers of input s-digits
80   AliTRD              *fTRD;                //! TRD detector class
81   AliTRDgeometry      *fGeo;                //! TRD geometry
82   Int_t                fEvent;              //! Event number
83   Int_t               *fMasks;              //! Masks for the merging
84   Bool_t               fCompress;           //  Switch to keep only compressed data in memory
85   Bool_t               fSDigits;            //  Switch for the summable digits
86   Float_t              fSDigitsScale;       //  Scale factor for the summable digits 
87   Bool_t               fMergeSignalOnly;    //  Merge only detectors that contain a signal
88
89           void         SampleTimeStruct(Float_t vdrift);
90           void         RecalcDiffusion(Float_t vdrift);
91   
92   struct
93   {
94     Float_t fLastVdrift;                                      //! The structures are valid for fLastVdrift (caching)
95     Float_t fDiffusionT;                                      //! Transverse drift coefficient
96     Float_t fDiffusionL;                                      //! Longitudinal drift coefficient
97     Float_t              fOmegaTau;                           //! Tangens of the Lorentz angle
98     Float_t              fLorentzFactor;                      //! Factor due to Lorentz force
99   } fDiffusionInfo;                                           //! Do not write the structures
100     
101   struct 
102   {
103     Float_t fLastVdrift;                                      //! The structures are valid for fLastVdrift (caching)
104     Float_t             *fTimeStruct1;                        //! Time Structure of Drift Cells
105     Float_t             *fTimeStruct2;                        //! Time Structure of Drift Cells
106     Float_t              fVDlo;                               //! Lower drift velocity, for interpolation
107     Float_t              fVDhi;                               //! Higher drift velocity, for interpolation
108   } fTimeStructInfo;                                          //! Do not write the structures
109   
110  private:
111     
112   virtual Bool_t       Init();
113
114   ClassDef(AliTRDdigitizer,12)               //  Produces TRD-Digits
115
116 };
117
118 #endif