1 #ifndef ALIFMDRECONSTRUCTOR_H
2 #define ALIFMDRECONSTRUCTOR_H
4 // Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
7 // See cxx source for full Copyright notice
9 // AliFMDReconstructor.h
10 // Task Class for making TreeR for FMD
12 //-- Authors: Evgeny Karpechev (INR) and Alla Maevskaia (INR)
13 // Latest changes by Christian Holm Christensen <cholm@nbi.dk>
15 /** @file AliFMDReconstructor.h
16 @author Christian Holm Christensen <cholm@nbi.dk>
17 @date Mon Mar 27 12:47:09 2006
18 @brief FMD reconstruction
21 //____________________________________________________________________
22 // Header guards in the header files speeds up the compilation
23 // considerably. Please leave them in.
24 #ifndef ALIRECONSTRUCTOR_H
25 # include <AliReconstructor.h>
29 //____________________________________________________________________
39 /** @defgroup FMD_rec Reconstruction */
40 //____________________________________________________________________
42 * @brief This is a class that reconstructs AliFMDRecPoint objects
45 * This class reads either digits from a TClonesArray or raw data
46 * from a DDL file (or similar), and applies calibrations to get
47 * psuedo-inclusive multiplicities per strip.
51 class AliFMDReconstructor: public AliReconstructor
57 AliFMDReconstructor();
61 virtual ~AliFMDReconstructor();
64 * Initialize the reconstructor. Here, we initialize the geometry
65 * manager, and finds the local to global transformations from the
66 * geometry. The calibration parameter manager is also
67 * initialized (meaning that the calibration parameters is read
72 * Flag that we can convert raw data into digits.
74 * @return always @c true
76 virtual Bool_t HasDigitConversion() const { return kTRUE; }
78 * Convert raw data read from the AliRawReader @a reader into
79 * digits. This is done using AliFMDRawReader and
80 * AliFMDAltroReader. The digits are put in the passed TTree @a
83 * @param reader Raw reader.
84 * @param digitsTree Tree to store read digits in.
86 virtual void ConvertDigits(AliRawReader* reader, TTree* digitsTree) const;
88 * Reconstruct one event from the digits passed in @a digitsTree.
89 * The member function creates AliFMDRecPoint objects and stores
90 * them on the output tree @a clusterTree. An FMD ESD object is
91 * created in parallel.
93 * @param digitsTree Tree holding the digits of this event
94 * @param clusterTree Tree to store AliFMDRecPoint objects in.
96 virtual void Reconstruct(TTree* digitsTree, TTree* clusterTree) const;
99 * @todo Implement this, such that we'll reconstruct directly from
100 * the read ADC values rather than going via an intermedant
101 * TClonesArray of AliFMDDigits
103 virtual void Reconstruct(AliRawReader *, TTree*) const;
105 * Put in the ESD data, the FMD ESD data. The object created by
106 * the Reconstruct member function is copied to the ESD object.
108 * @param digitsTree Tree of digits for this event - not used
109 * @param clusterTree Tree of reconstructed points for this event -
111 * @param esd ESD object to store data in.
113 virtual void FillESD(TTree* digitsTree, TTree* clusterTree,
114 AliESDEvent* esd) const;
116 * Forwards to above member function
118 virtual void FillESD(AliRawReader*, TTree* clusterTree,
119 AliESDEvent* esd) const;
123 virtual void SetESD(AliESDEvent* esd) { fESD = esd; }
125 * Set the noise factor
127 * @param f Factor to use
129 virtual void SetNoiseFactor(Float_t f=3) { fNoiseFactor = f; }
131 * Set whether we should do angle correction or nor
133 * @param use If true, do angle correction
135 virtual void SetAngleCorrect(Bool_t use=kTRUE) { fAngleCorrect = use; }
137 * Set whether we want to do diagnostics. If this is enabled, a
138 * file named @c FMD.Diag.root will be made. It contains a set of
139 * histograms for each event, filed in separate directories in the
140 * file. The histograms are
142 * diagStep1 Read ADC vs. Noise surpressed ADC
143 * diagStep2 Noise surpressed ADC vs. calculated Energy dep.
144 * diagStep3 Energy deposition vs. angle corrected Energy dep.
145 * diagStep4 Energy deposition vs. calculated multiplicity
146 * diagAll Read ADC vs. calculated multiplicity
149 * @param use If true, make the diagnostics file
151 void SetDiagnose(Bool_t use=kTRUE) { fDiagnostics = use; }
156 * @param other Object to copy from.
158 AliFMDReconstructor(const AliFMDReconstructor& other);
160 * Assignment operator
162 * @param other Object to assign from
164 * @return reference to this object
166 AliFMDReconstructor& operator=(const AliFMDReconstructor& other);
168 * Try to get the vertex from either ESD or generator header. Sets
169 * @c fCurrentVertex to the found Z posistion of the vertex (if
170 * found), and sets the flag @c fVertexType accordingly
172 virtual void GetVertex() const;
174 * Process AliFMDDigit objects in @a digits. For each digit, find
175 * the psuedo-rapidity @f$ \eta@f$, azimuthal angle @f$ \varphi@f$,
176 * energy deposited @f$ E@f$, and psuedo-inclusive multiplicity @f$
179 * @param digits Array of digits.
181 virtual void ProcessDigits(TClonesArray* digits) const;
183 * Process a single digit
185 * @param digit Digiti to process
187 virtual void ProcessDigit(AliFMDDigit* digit) const;
189 * Process the signal from a single strip.
191 * @param det Detector number
192 * @param rng Ring identifier
193 * @param sec Sector number
194 * @param str Strip number
195 * @param adc Number of ADC counts for this strip
197 virtual void ProcessSignal(UShort_t det,
203 * Substract pedestals from raw ADC in @a digit
205 * @param det Detector number
206 * @param rng Ring identifier
207 * @param sec Sector number
208 * @param str Strip number
209 * @param adc Number of ADC counts
211 * @return Pedestal subtracted ADC count.
213 virtual UShort_t SubtractPedestal(UShort_t det,
219 * Converts number of ADC counts to energy deposited. This is
224 * where @f$ A_i@f$ is the pedestal subtracted ADC counts, and @f$
225 * g_i@f$ is the gain for the @f$ i^{\mbox{th}}@f$ strip.
227 * @param det Detector number
228 * @param rng Ring identifier
229 * @param sec Sector number
230 * @param str Strip number
231 * @param eta Psuedo-rapidity of digit.
232 * @param count Pedestal subtracted ADC counts
234 * @return Energy deposited @f$ E_i@f$
236 virtual Float_t Adc2Energy(UShort_t det,
241 UShort_t count) const;
243 * Converts an energy signal to number of particles. In this
244 * implementation, it's done by
246 * M_i = E_i / E_{\mbox{MIP}}
248 * where @f$ E_i@f$ is the energy deposited, and
249 * @f$ E_{\mbox{MIP}}@f$ is the average energy deposited by a
250 * minimum ionizing particle
252 * @param det Detector number
253 * @param rng Ring identifier
254 * @param sec Sector number
255 * @param str Strip number
256 * @param eta On return, psuedo-rapidity @f$ \eta@f$
257 * @param phi On return, azimuthal angle @f$ \varphi@f$
258 * @param edep Energy deposited @f$ E_i@f$
260 * @return Psuedo-inclusive multiplicity @f$ M@f$
262 virtual Float_t Energy2Multiplicity(UShort_t det,
268 * Calculate the physical coordinates psuedo-rapidity @f$ \eta@f$,
269 * azimuthal angle @f$ \varphi@f$ of the strip corresponding to
270 * the digit @a digit. This is done by using the information
271 * obtained, and previously cached by AliFMDGeometry, from the
274 * @param det Detector number
275 * @param rng Ring identifier
276 * @param sec Sector number
277 * @param str Strip number
278 * @param eta On return, psuedo-rapidity @f$ \eta@f$
279 * @param phi On return, azimuthal angle @f$ \varphi@f$
281 virtual void PhysicalCoordinates(UShort_t det,
289 kNoVertex, // Got no vertex
290 kGenVertex, // Got generator vertex
291 kESDVertex // Got ESD vertex
293 mutable TClonesArray* fMult; // Cache of RecPoints
294 mutable Int_t fNMult; // Number of entries in fMult
295 mutable TTree* fTreeR; // Output tree
296 mutable Float_t fCurrentVertex; // Z-coordinate of primary vertex
297 mutable AliESDFMD* fESDObj; // ESD output object
298 Float_t fNoiseFactor; // Factor of noise to check
299 Bool_t fAngleCorrect; // Whether to angle correct
300 mutable Vertex_t fVertexType; // What kind of vertex we got
301 AliESDEvent* fESD; // ESD object(?)
302 Bool_t fDiagnostics; // Wheter to do diagnostics
303 TH1* fDiagStep1; // Diagnostics histogram
304 TH1* fDiagStep2; // Diagnostics histogram
305 TH1* fDiagStep3; // Diagnostics histogram
306 TH1* fDiagStep4; // Diagnostics histogram
307 TH1* fDiagAll; // Diagnostics histogram
308 mutable Bool_t fZS[3]; // Zero-suppredded?
309 mutable UShort_t fZSFactor[3]; // Noise factor for Zero-suppression
312 ClassDef(AliFMDReconstructor, 3) // class for the FMD reconstruction
315 //____________________________________________________________________