running local for SP and LYZEP and new histograms for QC
[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 ////////////////////////////////////////////////////////////////////////////
9 //                                                                        //
10 //  Produces digits from the hits information                             //
11 //                                                                        //
12 ////////////////////////////////////////////////////////////////////////////
13
14 #include "AliDigitizer.h"
15
16 class TFile;
17 class TF1;
18
19 class AliRunDigitizer;
20 class AliRunLoader;
21
22 class AliTRD;
23 class AliTRDdigitsManager;
24 class AliTRDgeometry;
25 class AliTRDarraySignal;
26 class AliTRDarrayADC;
27
28 class AliTRDdigitizer : public AliDigitizer {
29
30  public:
31
32   AliTRDdigitizer();
33   AliTRDdigitizer(const Text_t *name, const Text_t *title);
34   AliTRDdigitizer(AliRunDigitizer *manager, const Text_t *name, const Text_t *title);
35   AliTRDdigitizer(AliRunDigitizer *manager);
36   AliTRDdigitizer(const AliTRDdigitizer &d);
37   virtual             ~AliTRDdigitizer();
38   AliTRDdigitizer     &operator=(const AliTRDdigitizer &d);
39
40   virtual void         Copy(TObject &d) const;
41           Bool_t       InitDetector();
42           void         InitOutput(Int_t iEvent);
43   virtual void         Exec(Option_t *option = 0);  
44
45   virtual Bool_t       Open(const Char_t *file, Int_t nEvent = 0);
46   virtual Bool_t       Open(AliRunLoader *runLoader, Int_t nEvent = 0);
47   virtual Bool_t       MakeBranch(TTree *tree) const;
48   virtual Bool_t       WriteDigits() const;
49
50   virtual void         AddSDigitsManager(AliTRDdigitsManager *manager);
51   virtual void         DeleteSDigitsManager();
52
53   virtual Bool_t       MakeDigits();
54
55           Bool_t       SortHits(Float_t **hits, Int_t *nhit);
56           Bool_t       ConvertHits(Int_t det, Float_t *hits, Int_t nhit, AliTRDarraySignal *signals);
57           Bool_t       ConvertSignals(Int_t det, AliTRDarraySignal *signals);
58
59           Bool_t       SDigits2Digits();
60           Bool_t       MergeSDigits();
61           Bool_t       ConvertSDigits();
62
63           Bool_t       Signal2ADC(Int_t det, AliTRDarraySignal *signals);
64           Bool_t       Signal2SDigits(Int_t det, AliTRDarraySignal *signals);
65           Bool_t       CopyDictionary(Int_t det);
66           void         CompressOutputArrays(Int_t det);
67
68           void         SetCompress(Int_t c = 1)             { fCompress        = c;   }
69           void         SetSDigits(Int_t v = 1)              { fSDigits         = v;   }
70           void         SetEvent(Int_t v = 0)                { fEvent           = v;   }
71           void         SetManager(AliTRDdigitsManager *man) { fDigitsManager   = man; }
72           void         SetGeometry(AliTRDgeometry *geo)     { fGeo             = geo; }
73           void         SetMergeSignalOnly(Bool_t m = kTRUE) { fMergeSignalOnly = m;   }
74
75   AliTRDdigitsManager *Digits() const                       { return fDigitsManager;  }
76
77           Bool_t       GetCompress() const                  { return fCompress;       }
78           Bool_t       GetSDigits() const                   { return fSDigits;        }
79           Float_t      GetDiffusionT(Float_t vdrift);
80           Float_t      GetDiffusionL(Float_t vdrift);
81           Float_t      GetLorentzFactor(Float_t vdrift);
82
83           Double_t     TimeStruct(Float_t vdrift, Double_t time, Double_t z);
84           Int_t        Diffusion(Float_t vdrift, Double_t absdriftlength
85                                , Double_t &lRow, Double_t &lCol, Double_t &lTime);
86           Int_t        ExB(Float_t vdrift, Double_t driftlength, Double_t &lRow);
87           void         ZS(AliTRDarrayADC *digits);
88
89  protected:
90
91   virtual Bool_t       Init();
92           void         SampleTimeStruct(Float_t vdrift);
93           void         RecalcDiffusion(Float_t vdrift);
94
95   AliRunLoader        *fRunLoader;          //! Local pointer
96   AliTRDdigitsManager *fDigitsManager;      //! Manager for the output digits
97   AliTRDdigitsManager *fSDigitsManager;     //! Manager for the summed input s-digits
98   TList               *fSDigitsManagerList; //! List of managers of input s-digits
99   AliTRD              *fTRD;                //! TRD detector class
100   AliTRDgeometry      *fGeo;                //! TRD geometry
101
102           Int_t        fEvent;              //! Event number
103           Int_t       *fMasks;              //! Masks for the merging
104           Bool_t       fCompress;           //  Switch to keep only compressed data in memory
105           Bool_t       fSDigits;            //  Switch for the summable digits
106           Bool_t       fMergeSignalOnly;    //  Merge only detectors that contain a signal
107
108           Float_t      fDiffLastVdrift;     //  The structures are valid for fLastVdrift (caching)
109           Float_t      fDiffusionT;         //  Transverse drift coefficient
110           Float_t      fDiffusionL;         //  Longitudinal drift coefficient
111           Float_t      fOmegaTau;           //  Tangens of the Lorentz angle
112           Float_t      fLorentzFactor;      //  Factor due to Lorentz force
113
114           Float_t      fTimeLastVdrift;     //  The structures are valid for fLastVdrift (caching)
115           Float_t     *fTimeStruct1;        //! Time Structure of Drift Cells
116           Float_t     *fTimeStruct2;        //! Time Structure of Drift Cells
117           Float_t      fVDlo;               //  Lower drift velocity, for interpolation
118           Float_t      fVDhi;               //  Higher drift velocity, for interpolation
119
120   ClassDef(AliTRDdigitizer,18)              //  Produces TRD-Digits
121
122 };
123 #endif