Line data Source code
1 : #ifndef ALIESDFMD_H
2 : #define ALIESDFMD_H
3 : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
4 : * reserved.
5 : *
6 : * See cxx source for full Copyright notice
7 : */
8 : //___________________________________________________________________
9 : //
10 : // AliESDFMD is the Event Summary Data entry for the FMD. It contains
11 : // a rough estimate of the charged particle multiplicity in each strip
12 : // of the FMD. It also contains the psuedo-rapidity of each strip.
13 : // This is important, as it varies from event to event, due to a
14 : // finite interaction point probability distribution.
15 : //
16 : #ifndef ROOT_TObject
17 : # include <TObject.h>
18 : #endif
19 : #ifndef ALIFMDFLOATMAP_H
20 : # include "AliFMDFloatMap.h"
21 : #endif
22 :
23 : //___________________________________________________________________
24 : /** @class AliESDFMD
25 : @brief Event Summary Data for the Forward Multiplicity Detector.
26 : @ingroup FMD_data
27 : This stores the psuedo-multiplicity and -rapidiy for each strip of
28 : the FMD.
29 : */
30 : class AliESDFMD : public TObject
31 : {
32 : public:
33 : /**
34 : * Base class of looping over the FMD ESD object
35 : *
36 : * A simple example could be
37 : *
38 : * @code
39 : * struct ESDFMDPrinter : AliESDFMD::ForOne
40 : * {
41 : * Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t,
42 : * Float_t m, Float_t e)
43 : * {
44 : * Printf("FMD%d%c[%2d,%3d]=%7.4f @ %7.4f", d, r, s, t, m, e);
45 : * return kTRUE;
46 : * }
47 : * };
48 : * @endcode
49 : */
50 0 : class ForOne
51 : {
52 : public:
53 : /**
54 : * Destructor
55 : */
56 0 : virtual ~ForOne() {}
57 : /**
58 : * Functional operator called for each entry
59 : *
60 : * @param d Detector number
61 : * @param r Ring identifier
62 : * @param s Sector number
63 : * @param t Strip number
64 : * @param m 'Bare' multiplicity of this strip
65 : * @param e Pseudo-rapidity of this strip
66 : *
67 : * @return @c kTRUE in case of success, @c kFALSE in case of failure.
68 : * If the method returns @c kFALSE, the loop stops.
69 : */
70 : virtual bool operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t,
71 : Float_t m, Float_t e) = 0;
72 : };
73 : enum {
74 : kNeedNoiseFix = (1 << 14)
75 : };
76 : /**
77 : * Default constructor
78 : */
79 : AliESDFMD();
80 : /**
81 : * Copy constructor
82 : *
83 : * @param other Object to construct from
84 : */
85 : AliESDFMD(const AliESDFMD& other);
86 : /**
87 : * Assignment operator
88 : *
89 : * @param other Object to assign from
90 : *
91 : * @return reference to this object
92 : */
93 : AliESDFMD& operator=(const AliESDFMD& other);
94 : /**
95 : * Destructor - does nothing
96 : */
97 72 : virtual ~AliESDFMD() {}
98 : /**
99 : * Copy the content of this object to @a obj which must have been
100 : * preallocated
101 : *
102 : * @param obj Object to copy to
103 : */
104 : virtual void Copy(TObject &obj) const;
105 :
106 : /**
107 : * Reset the object
108 : */
109 : void Clear(Option_t *option="");
110 : /**
111 : * Get the pseudo-multiplicity of
112 : * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
113 : * sector\rangle\langle strip\rangle}@f$
114 : *
115 : * @param detector Detector number (1-3)
116 : * @param ring Ring identifier ('I' or 'O')
117 : * @param sector Sector number (0-511, or 0-255)
118 : * @param strip Strip number (0-19, or 0-39)
119 : *
120 : * @return Psuedo multiplicity
121 : */
122 : Float_t Multiplicity(UShort_t detector, Char_t ring,
123 : UShort_t sector, UShort_t strip) const;
124 : /**
125 : * Get the pseudo-rapidity of
126 : * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
127 : * sector\rangle\langle strip\rangle}@f$
128 : *
129 : * @param detector Detector number (1-3)
130 : * @param ring Ring identifier ('I' or 'O')
131 : * @param sector Sector number (0-511, or 0-255)
132 : * @param strip Strip number (0-19, or 0-39)
133 : *
134 : * @return Psuedo rapidity
135 : */
136 : Float_t Eta(UShort_t detector, Char_t ring,
137 : UShort_t sector, UShort_t strip) const;
138 : /**
139 : * Get the azimuthal angle of
140 : * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
141 : * sector\rangle\langle strip\rangle}@f$
142 : *
143 : * @param detector Detector number (1-3)
144 : * @param ring Ring identifier ('I' or 'O')
145 : * @param sector Sector number (0-511, or 0-255)
146 : * @param strip Strip number (0-19, or 0-39)
147 : *
148 : * @return Azimuthal angle
149 : */
150 : Float_t Phi(UShort_t detector, Char_t ring,
151 : UShort_t sector, UShort_t strip) const;
152 : /**
153 : * Get the polar angle (in degrees) from beam line of
154 : * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
155 : * sector\rangle\langle strip\rangle}@f$
156 : *
157 : * @param detector Detector number (1-3)
158 : * @param ring Ring identifier ('I' or 'O')
159 : * @param sector Sector number (0-511, or 0-255)
160 : * @param strip Strip number (0-19, or 0-39)
161 : *
162 : * @return Polar angle
163 : */
164 : Float_t Theta(UShort_t detector, Char_t ring,
165 : UShort_t sector, UShort_t strip) const;
166 : /**
167 : * Get the radial distance (in cm) from beam line of
168 : * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
169 : * sector\rangle\langle strip\rangle}@f$
170 : *
171 : * @param detector Detector number (1-3)
172 : * @param ring Ring identifier ('I' or 'O')
173 : * @param sector Sector number (0-511, or 0-255)
174 : * @param strip Strip number (0-19, or 0-39)
175 : *
176 : * @return Radial distance
177 : */
178 : Float_t R(UShort_t detector, Char_t ring,
179 : UShort_t sector, UShort_t strip) const;
180 : /**
181 : * Set the pseudo-multiplicity of
182 : * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
183 : * sector\rangle\langle strip\rangle}@f$
184 : *
185 : * @param detector Detector number (1-3)
186 : * @param ring Ring identifier ('I' or 'O')
187 : * @param sector Sector number (0-511, or 0-255)
188 : * @param strip Strip number (0-19, or 0-39)
189 : * @param mult Psuedo multiplicity
190 : */
191 : void SetMultiplicity(UShort_t detector, Char_t ring,
192 : UShort_t sector, UShort_t strip,
193 : Float_t mult);
194 : /**
195 : * Set the pseudo-rapidity of
196 : * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
197 : * sector\rangle\langle strip\rangle}@f$
198 : *
199 : * @param detector Detector number (1-3)
200 : * @param ring Ring identifier ('I' or 'O')
201 : * @param sector Sector number (0-511, or 0-255)
202 : * @param strip Strip number (0-19, or 0-39)
203 : * @param eta Psuedo rapidity
204 : */
205 : void SetEta(UShort_t detector, Char_t ring,
206 : UShort_t sector, UShort_t strip,
207 : Float_t eta);
208 : /**
209 : * @param f the factor for noise suppression
210 : */
211 28 : void SetNoiseFactor(Float_t f) { fNoiseFactor = f; }
212 : /**
213 : * @param done Whether we've done angle correction or not
214 : */
215 14 : void SetAngleCorrected(Bool_t done) { fAngleCorrected = done; }
216 : /**
217 : * @return Whether we've done angle correction or not
218 : */
219 32768 : Bool_t IsAngleCorrected() const { return fAngleCorrected; }
220 : /**
221 : * @return the factor for noise suppression
222 : */
223 0 : Float_t GetNoiseFactor() const { return fNoiseFactor; }
224 : /**
225 : * @return maximum number of detectors
226 : */
227 0 : UShort_t MaxDetectors() const { return fMultiplicity.MaxDetectors(); }
228 : /**
229 : * @return maximum number of rings
230 : */
231 0 : UShort_t MaxRings() const { return fMultiplicity.MaxRings(); }
232 : /**
233 : * @return maximum number of sectors
234 : */
235 0 : UShort_t MaxSectors() const { return fMultiplicity.MaxSectors(); }
236 : /**
237 : * @return Maximum number of strips
238 : */
239 0 : UShort_t MaxStrips() const { return fMultiplicity.MaxStrips(); }
240 : /**
241 : * Print this object to standard out.
242 : *
243 : * @param option Options
244 : */
245 : void Print(Option_t* option="") const;
246 : /**
247 : * Check if we need the @c UShort_t fix
248 : *
249 : * @param file File this object was read from
250 : */
251 : void CheckNeedUShort(TFile* file);
252 : /**
253 : * Check if we need the noise fix
254 : *
255 : * @return true if class version of read object is 3 or smaller
256 : */
257 0 : Bool_t NeedNoiseFix() const { return TestBit(kNeedNoiseFix); }
258 : /**
259 : * Call the function operator of the passed object @a algo for each
260 : * entry in this object
261 : *
262 : * @param algo Algorithm
263 : *
264 : * @return @c kTRUE on success, @c kFALSE if the passed object
265 : * failed at any entry. It will return immediately on error.
266 : */
267 : Bool_t ForEach(ForOne& algo) const;
268 : enum {
269 : /** Value used for undefined multiplicity */
270 : kInvalidMult = 1024
271 : };
272 : enum {
273 : /** Value used for undefined pseudo rapidity */
274 : kInvalidEta = 1024
275 : };
276 : /**
277 : * @return constant reference to multiplicity map
278 : */
279 0 : const AliFMDFloatMap& MultiplicityMap() const { return fMultiplicity; }
280 : /**
281 : * @return constant reference to pseudo-rapidity map
282 : */
283 0 : const AliFMDFloatMap& EtaMap() const { return fEta; }
284 : protected:
285 : AliFMDFloatMap fMultiplicity; // Psuedo multplicity per strip
286 : AliFMDFloatMap fEta; // Psuedo-rapidity per strip
287 : Float_t fNoiseFactor; // Factor used for noise suppresion
288 : Bool_t fAngleCorrected; // Whether we've done angle correction
289 1216 : ClassDef(AliESDFMD,4) // ESD info from FMD
290 : };
291 : #endif
292 : //____________________________________________________________________
293 : //
294 : // Local Variables:
295 : // mode: C++
296 : // End:
297 : //
298 : // EOF
299 : //
|