]> git.uio.no Git - u/mrichter/AliRoot.git/blob - FMD/AliFMDDigitizer.h
Additional cast
[u/mrichter/AliRoot.git] / FMD / AliFMDDigitizer.h
1 // -*- mode: c++ -*-
2 #ifndef ALIFMDDIGITIZER_H
3 #define ALIFMDDIGITIZER_H
4 /* Copyright(c) 1998-2000, ALICE Experiment at CERN, All rights
5  * reserved. 
6  *
7  * See cxx source for full Copyright notice                               
8  */
9 #ifndef ALIDIGITIZER_H
10 # include <AliDigitizer.h>
11 #endif
12 #ifndef ALIRUNDIGITIZER_H
13 # include <AliRunDigitizer.h>
14 #endif
15 #ifndef ALIFMDMAP_H
16 # include <AliFMDMap.h>
17 #endif
18 #ifndef __UTILITY__
19 # include <utility>
20 #endif
21 // #ifndef ROOT_TArrayF
22 // # include <TArrayF.h>
23 // #endif
24
25 //====================================================================
26 class TClonesArray;
27 class AliFMD;
28 class AliLoader;
29 class AliRunLoader;
30
31 typedef AliFMDMap<std::pair<Float_t, UShort_t> > AliFMDEdepMap;
32
33 //====================================================================
34 class AliFMDBaseDigitizer : public AliDigitizer 
35 {
36 public:
37   AliFMDBaseDigitizer();
38   AliFMDBaseDigitizer(AliRunDigitizer * manager);
39   AliFMDBaseDigitizer(const Char_t* name, const Char_t* title);
40   virtual ~AliFMDBaseDigitizer();
41    
42   // Do the main work
43   virtual Bool_t Init();
44
45   // Extra member functions 
46   void     SetVA1MipRange(UShort_t r=20) { fVA1MipRange = r; }
47   void     SetAltroChannelSize(UShort_t s=1024) { fAltroChannelSize = s;}
48   void     SetSampleRate(UShort_t r=1) { fSampleRate = (r>2 ? 2 : r); }
49   void     SetShapingTime(Float_t t=10) { fShapingTime = t;  }
50   
51   UShort_t GetVA1MipRange()      const { return fVA1MipRange; }
52   UShort_t GetAltroChannelSize() const { return fAltroChannelSize; }
53   UShort_t GetSampleRate()       const { return fSampleRate; }
54   Float_t  GetShapingTime()      const { return fShapingTime; }
55 protected:
56   virtual void     SumContributions(AliFMD* fmd);
57   virtual void     DigitizeHits(AliFMD* fmd) const;
58   virtual void     ConvertToCount(Float_t   edep, 
59                                   Float_t   siThickness, 
60                                   Float_t   siDensity, 
61                                   TArrayI&  counts) const;
62   virtual UShort_t MakePedestal() const { return 0; }
63   virtual Float_t  ShapeIntegral(Float_t u, Float_t v) const;
64   virtual void     AddNoise(TArrayI&) const {}
65   virtual void     AddDigit(AliFMD*  /* fmd      */,
66                             UShort_t /* detector */, 
67                             Char_t   /* ring     */,
68                             UShort_t /* sector   */, 
69                             UShort_t /* strip    */, 
70                             Float_t  /* edep     */, 
71                             UShort_t /* count1   */, 
72                             Short_t  /* count2   */, 
73                             Short_t  /* count3   */) const {}
74
75   AliRunLoader* fRunLoader;
76   AliFMDEdepMap fEdep;             // Cache of Energy from hits 
77   UShort_t      fVA1MipRange;      // How many MIPs the pre-amp can do    
78   UShort_t      fAltroChannelSize; // Largest # to store in 1 ADC chan.
79   UShort_t      fSampleRate;       // Times the ALTRO samples pre-amp.
80   Float_t       fShapingTime;      // Shaping profile parameter
81   
82   enum { 
83     kMaxDetectors = 3, 
84     kMaxRings     = 2, 
85     kMaxSectors   = 20, 
86     kMaxStrips    = 512
87   };
88   ClassDef(AliFMDBaseDigitizer,0) // Base class for FMD digitizers
89 };
90
91 //====================================================================
92 class AliFMDDigitizer : public AliFMDBaseDigitizer 
93 {
94 public:
95   AliFMDDigitizer();
96   AliFMDDigitizer(AliRunDigitizer * manager);
97   virtual ~AliFMDDigitizer() {}
98   virtual void  Exec(Option_t* option=0);
99   
100    
101   // Extra member functions 
102   void     SetPedestal(Float_t mean=10, Float_t width=.5);
103   void     GetPedestal(Float_t& mean,   Float_t& width) const;
104 protected:
105   virtual void     AddDigit(AliFMD*  fmd,
106                             UShort_t detector, 
107                             Char_t   ring,
108                             UShort_t sector, 
109                             UShort_t strip, 
110                             Float_t  edep, 
111                             UShort_t count1, 
112                             Short_t  count2, 
113                             Short_t  count3) const;
114   virtual UShort_t MakePedestal() const;
115   virtual void     CheckDigit(Float_t         edep, 
116                               UShort_t        nhits,
117                               const TArrayI&  counts);
118   Float_t       fPedestal;         // Mean of pedestal 
119   Float_t       fPedestalWidth;    // Width of pedestal 
120   ClassDef(AliFMDDigitizer,0) // Make Digits from Hits
121 };
122 //____________________________________________________________________
123 inline void 
124 AliFMDDigitizer::SetPedestal(Float_t mean, Float_t width) 
125 {
126   fPedestal      = mean;
127   fPedestalWidth = width;
128 }
129
130 //____________________________________________________________________
131 inline void 
132 AliFMDDigitizer::GetPedestal(Float_t& mean, Float_t& width)  const
133 {
134   mean  = fPedestal;
135   width = fPedestalWidth;
136 }
137
138
139 //====================================================================
140 class AliFMDSDigitizer : public AliFMDBaseDigitizer 
141 {
142 public:
143   AliFMDSDigitizer();
144   AliFMDSDigitizer(const Char_t* headerFile, const Char_t* sdigFile="");
145   virtual ~AliFMDSDigitizer();
146   virtual void  Exec(Option_t* option=0);
147 protected:
148   virtual void     AddDigit(AliFMD*  fmd,
149                             UShort_t detector, 
150                             Char_t   ring,
151                             UShort_t sector, 
152                             UShort_t strip, 
153                             Float_t  edep, 
154                             UShort_t count1, 
155                             Short_t  count2, 
156                             Short_t  count3) const;
157   ClassDef(AliFMDSDigitizer,0) // Make Summable Digits from Hits
158 };
159
160
161
162 #endif
163 //____________________________________________________________________
164 //
165 // EOF
166 //
167