]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDdigitizer.h
Added a commented out version with new digitizers.
[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 class AliTRDparameter;
20
21 ///////////////////////////////////////////////////////
22 //  Produces digits from the hits information        //
23 ///////////////////////////////////////////////////////
24
25 class AliTRDdigitizer : public AliDigitizer {
26
27  public:
28
29   AliTRDdigitizer();
30   AliTRDdigitizer(const Text_t* name, const Text_t* title);
31   AliTRDdigitizer(AliRunDigitizer *manager, const Text_t* name, const Text_t* title);
32   AliTRDdigitizer(AliRunDigitizer *manager);
33   AliTRDdigitizer(const AliTRDdigitizer &d);
34   virtual ~AliTRDdigitizer();
35   AliTRDdigitizer &operator=(const AliTRDdigitizer &d);
36
37   virtual void         Copy(TObject &d) const;
38   virtual Bool_t       InitDetector();
39   virtual void         Exec(Option_t* option = 0);  
40   virtual Bool_t       Open(const Char_t *file, Int_t nEvent = 0);
41   virtual Bool_t       MakeBranch(TTree* tree) const;
42   virtual Bool_t       MakeDigits();
43   virtual void         AddSDigitsManager(AliTRDdigitsManager *manager);
44   virtual void         DeleteSDigitsManager();
45   virtual Bool_t       ConvertSDigits();
46   virtual Bool_t       MergeSDigits();
47   virtual Bool_t       SDigits2Digits();
48   virtual Bool_t       WriteDigits() const;
49
50           void         InitOutput(Int_t iEvent);
51  
52   virtual void         SetCompress(Int_t c = 1)             { fCompress        = c;   };
53   virtual void         SetDebug(Int_t v = 1)                { fDebug           = v;   };
54   virtual void         SetSDigits(Int_t v = 1)              { fSDigits         = v;   };
55   virtual void         SetSDigitsScale(Float_t s)           { fSDigitsScale    = s;   };
56   virtual void         SetEvent(Int_t v = 0)                { fEvent           = v;   };
57   virtual void         SetManager(AliTRDdigitsManager *man) { fDigitsManager   = man; };   
58   virtual void         SetGeometry(AliTRDgeometry *geo)     { fGeo             = geo; };
59   virtual void         SetParameter(AliTRDparameter *par)   { fPar             = par; };
60   virtual void         SetMergeSignalOnly(Bool_t m = kTRUE) { fMergeSignalOnly = m;   };
61   virtual void         SetSimple(Int_t v = 1)               { fSimpleSim       = v;
62                                                               fSimpleDet       = 12;
63                                                               fCompress        = kFALSE; };
64
65   AliTRDdigitsManager *Digits()                       const { return fDigitsManager; };
66
67   Bool_t       GetCompress()                  const { return fCompress;      };
68   Bool_t       GetSDigits()                   const { return fSDigits;       };
69   Float_t      GetSDigitsScale()              const { return fSDigitsScale;  };
70   AliTRDparameter     *GetParameter()                 const { return fPar;           };
71   Bool_t       GetSimple()                    const { return fSimpleSim;     };
72
73   virtual Double_t TimeStruct(Float_t vdrift, Double_t time, Double_t z);  
74
75   Float_t GetDiffusionT(Float_t vdrift);
76   Float_t GetDiffusionL(Float_t vdrift);
77   virtual Int_t Diffusion(Float_t vdrift, Double_t driftlength, Double_t *xyz);
78
79   Float_t GetLorentzFactor(Float_t vdrift);
80   virtual Int_t ExB(Float_t vdrift, Double_t driftlength, Double_t *xyz);  
81   
82   protected:
83
84   //TFile               *fInputFile;          //! ALIROOT-file
85   AliRunLoader        *fRunLoader;          //! Local pointer
86   AliTRDdigitsManager *fDigitsManager;      //! Manager for the output digits
87   AliTRDdigitsManager *fSDigitsManager;     //! Manager for the summed input s-digits
88   TList               *fSDigitsManagerList; //! List of managers of input s-digits
89   AliTRD              *fTRD;                //! TRD detector class
90   AliTRDgeometry      *fGeo;                //! TRD geometry
91   AliTRDparameter     *fPar;          //  TRD common parameter object
92   Int_t                fEvent;              //! Event number
93   Int_t               *fMasks;              //! Masks for the merging
94   Bool_t               fCompress;           //  Switch to keep only compressed data in memory
95   Int_t                fDebug;              //  Sets the debug level
96   Bool_t               fSDigits;            //  Switch for the summable digits
97   Float_t              fSDigitsScale;       //  Scale factor for the summable digits 
98   Bool_t               fMergeSignalOnly;    //  Merge only detectors that contain a signal
99   Bool_t               fSimpleSim;          //  Switch for the simplified simulation
100   Int_t                fSimpleDet;          //  Detecttor number used in the simplified simulation
101  
102   void SampleTimeStruct(Float_t vdrift);
103   void RecalcDiffusion(Float_t vdrift);
104   
105   struct
106   {
107     Float_t fLastVdrift;                                      //  the structures are valid for fLastVdrift (caching)
108     Float_t fDiffusionT;
109     Float_t fDiffusionL;
110     Float_t              fOmegaTau;                           //  Tangens of the Lorentz angle
111     Float_t              fLorentzFactor;                      //  Factor due to Lorentz force
112   } fDiffusionInfo;
113     
114   struct 
115   {
116     Float_t fLastVdrift;                                      //  the structures are valid for fLastVdrift (caching)
117     Float_t             *fTimeStruct1;                        //! Time Structure of Drift Cells
118     Float_t             *fTimeStruct2;                        //! Time Structure of Drift Cells
119     Float_t              fVDlo;                               //  Lower drift velocity, for interpolation
120     Float_t              fVDhi;                               //  Higher drift velocity, for interpolation
121   } fTimeStructInfo;
122   
123   private:
124     
125   virtual Bool_t Init();
126     
127   virtual void         DeConvExp(Double_t *source, Double_t *target, Int_t n, Int_t nexp);
128   virtual Bool_t       CheckDetector(Int_t plane, Int_t chamber, Int_t sector);
129
130   ClassDef(AliTRDdigitizer,8)               //  Produces TRD-Digits
131
132 };
133
134 #endif