Fixes for reading zero-suppressed data. These should be propagated to
[u/mrichter/AliRoot.git] / FMD / AliFMDReconstructor.h
CommitLineData
8f1cfb0c 1#ifndef ALIFMDRECONSTRUCTOR_H
2#define ALIFMDRECONSTRUCTOR_H
4347b38f 3//
4// Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
5// reserved.
6//
121a60bd 7// See cxx source for full Copyright notice
4347b38f 8//
121a60bd 9// AliFMDReconstructor.h
4347b38f 10// Task Class for making TreeR for FMD
11//
121a60bd 12//-- Authors: Evgeny Karpechev (INR) and Alla Maevskaia (INR)
4347b38f 13// Latest changes by Christian Holm Christensen <cholm@nbi.dk>
121a60bd 14/* $Id$ */
c2fc1258 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
19*/
8f1cfb0c 20
42403906 21//____________________________________________________________________
0d0e6995 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>
26#endif
d76c31f4 27#include "AliLog.h"
28
4347b38f 29//____________________________________________________________________
1a1fdef7 30class TTree;
4347b38f 31class TClonesArray;
4347b38f 32class AliFMDDigit;
33class AliRawReader;
af885e0f 34class AliESDEvent;
8f6ee336 35class AliESDFMD;
9684be2f 36class TH1;
37
e802be3e 38
9f662337 39/** @defgroup FMD_rec Reconstruction */
4347b38f 40//____________________________________________________________________
c2fc1258 41/** @brief This is a class that reconstructs AliFMDRecPoint objects from of
42 Digits.
43 This class reads either digits from a TClonesArray or raw data
44 from a DDL file (or similar), and applies calibrations to get
9f662337 45 psuedo-inclusive multiplicities per strip.
c2fc1258 46
9f662337 47 @ingroup FMD_rec
48 */
121a60bd 49class AliFMDReconstructor: public AliReconstructor
50{
4347b38f 51public:
9f662337 52 /** CTOR */
4347b38f 53 AliFMDReconstructor();
9f662337 54 /** DTOR */
56b1929b 55 virtual ~AliFMDReconstructor();
4347b38f 56
9f662337 57 /** Initialize the reconstructor. Here, we initialize the geometry
58 manager, and finds the local to global transformations from the
59 geometry. The calibration parameter manager is also
60 initialized (meaning that the calibration parameters is read
f011bd38 61 from CDB).
9f662337 62 */
d76c31f4 63 virtual void Init();
9f662337 64 /** Flag that we can convert raw data into digits.
65 @return always @c true */
1a1fdef7 66 virtual Bool_t HasDigitConversion() const { return kTRUE; }
9f662337 67 /** Convert raw data read from the AliRawReader @a reader into
68 digits. This is done using AliFMDRawReader and
69 AliFMDAltroReader. The digits are put in the passed TTree @a
70 digitsTree.
71 @param reader Raw reader.
72 @param digitsTree Tree to store read digits in. */
1a1fdef7 73 virtual void ConvertDigits(AliRawReader* reader, TTree* digitsTree) const;
9f662337 74 /** Reconstruct one event from the digits passed in @a digitsTree.
75 The member function creates AliFMDRecPoint objects and stores
76 them on the output tree @a clusterTree. An FMD ESD object is
77 created in parallel.
78 @todo Make sure we get a vertex.
79 @param digitsTree Tree holding the digits of this event
80 @param clusterTree Tree to store AliFMDRecPoint objects in. */
1a1fdef7 81 virtual void Reconstruct(TTree* digitsTree, TTree* clusterTree) const;
ddaa8027 82 /** Not used */
83 virtual void Reconstruct(AliRawReader *, TTree*) const;
9f662337 84 /** Put in the ESD data, the FMD ESD data. The object created by
85 the Reconstruct member function is copied to the ESD object.
86 @param digitsTree Tree of digits for this event - not used
87 @param clusterTree Tree of reconstructed points for this event
88 - not used.
89 @param esd ESD object to store data in.
90 */
1a1fdef7 91 virtual void FillESD(TTree* digitsTree, TTree* clusterTree,
af885e0f 92 AliESDEvent* esd) const;
ddaa8027 93 /** Forwards to above member function */
94 virtual void FillESD(AliRawReader*, TTree* clusterTree,
95 AliESDEvent* esd) const;
9f662337 96 /** Not used */
af885e0f 97 virtual void SetESD(AliESDEvent* esd) { fESD = esd; }
a9579262 98 /** Set the noise factor
99 @param f Factor to use */
100 virtual void SetNoiseFactor(Float_t f=3) { fNoiseFactor = f; }
101 /** Set whether we should do angle correction or nor
102 @param use If true, do angle correction */
103 virtual void SetAngleCorrect(Bool_t use=kTRUE) { fAngleCorrect = use; }
9684be2f 104 /** Set whether we want to do diagnostics. If this is enabled, a
105 file named @c FMD.Diag.root will be made. It contains a set of
106 histograms for each event, filed in separate directories in the
107 file. The histograms are
108 @verbatim
109 diagStep1 Read ADC vs. Noise surpressed ADC
110 diagStep2 Noise surpressed ADC vs. calculated Energy dep.
111 diagStep3 Energy deposition vs. angle corrected Energy dep.
112 diagStep4 Energy deposition vs. calculated multiplicity
113 diagAll Read ADC vs. calculated multiplicity
114 @endverbatim
115 @param use If true, make the diagnostics file */
116 void SetDiagnose(Bool_t use=kTRUE) { fDiagnostics = use; }
4347b38f 117protected:
0e73cae6 118 /** Copy CTOR
119 @param other Object to copy from. */
120 AliFMDReconstructor(const AliFMDReconstructor& other);
121 /** Assignment operator
122 @param other Object to assign from
123 @return reference to this object */
124 AliFMDReconstructor& operator=(const AliFMDReconstructor& other);
9684be2f 125 /** Try to get the vertex from either ESD or generator header. Sets
126 @c fCurrentVertex to the found Z posistion of the vertex (if
127 found), and sets the flag @c fVertexType accordingly */
128 virtual void GetVertex() const;
9f662337 129 /** Process AliFMDDigit objects in @a digits. For each digit, find
130 the psuedo-rapidity @f$ \eta@f$, azimuthal angle @f$ \varphi@f$,
131 energy deposited @f$ E@f$, and psuedo-inclusive multiplicity @f$
132 M@f$.
133 @param digits Array of digits. */
e802be3e 134 virtual void ProcessDigits(TClonesArray* digits) const;
9f662337 135 /** Substract pedestals from raw ADC in @a digit
136 @param digit Digit data
137 @return Pedestal subtracted ADC count. */
4347b38f 138 virtual UShort_t SubtractPedestal(AliFMDDigit* digit) const;
9f662337 139 /** Converts number of ADC counts to energy deposited. This is
140 done by
141 @f[
142 E_i = A_i g_i
143 @f]
144 where @f$ A_i@f$ is the pedestal subtracted ADC counts, and @f$
145 g_i@f$ is the gain for the @f$ i^{\mbox{th}}@f$ strip.
146 @param digit Raw data
147 @param eta Psuedo-rapidity of digit.
148 @param count Pedestal subtracted ADC counts
149 @return Energy deposited @f$ E_i@f$ */
8f6ee336 150 virtual Float_t Adc2Energy(AliFMDDigit* digit, Float_t eta,
151 UShort_t count) const;
9f662337 152 /** Converts an energy signal to number of particles. In this
153 implementation, it's done by
154 @f[
155 M_i = E_i / E_{\mbox{MIP}}
156 @f]
157 where @f$ E_i@f$ is the energy deposited, and @f$
158 E_{\mbox{MIP}}@f$ is the average energy deposited by a minimum
159 ionizing particle
160 @param digit Raw data
161 @param edep Energy deposited @f$ E_i@f$
162 @return Psuedo-inclusive multiplicity @f$ M@f$ */
8f6ee336 163 virtual Float_t Energy2Multiplicity(AliFMDDigit* digit, Float_t edep) const;
9f662337 164 /** Calculate the physical coordinates psuedo-rapidity @f$ \eta@f$,
165 azimuthal angle @f$ \varphi@f$ of the strip corresponding to
166 the digit @a digit. This is done by using the information
167 obtained, and previously cached by AliFMDGeometry, from the
168 TGeoManager.
169 @param digit Digit.
170 @param eta On return, psuedo-rapidity @f$ \eta@f$
171 @param phi On return, azimuthal angle @f$ \varphi@f$ */
8f6ee336 172 virtual void PhysicalCoordinates(AliFMDDigit* digit, Float_t& eta,
173 Float_t& phi) const;
42403906 174
9684be2f 175 enum Vertex_t {
176 kNoVertex, // Got no vertex
177 kGenVertex, // Got generator vertex
178 kESDVertex // Got ESD vertex
179 };
8f6ee336 180 mutable TClonesArray* fMult; // Cache of RecPoints
181 mutable Int_t fNMult; // Number of entries in fMult
182 mutable TTree* fTreeR; // Output tree
e802be3e 183 mutable Float_t fCurrentVertex; // Z-coordinate of primary vertex
8f6ee336 184 mutable AliESDFMD* fESDObj; // ESD output object
9684be2f 185 Float_t fNoiseFactor; // Factor of noise to check
186 Bool_t fAngleCorrect; // Whether to angle correct
187 mutable Vertex_t fVertexType; // What kind of vertex we got
af885e0f 188 AliESDEvent* fESD; // ESD object(?)
9684be2f 189 Bool_t fDiagnostics; // Wheter to do diagnostics
190 TH1* fDiagStep1; // Diagnostics histogram
191 TH1* fDiagStep2; // Diagnostics histogram
192 TH1* fDiagStep3; // Diagnostics histogram
193 TH1* fDiagStep4; // Diagnostics histogram
194 TH1* fDiagAll; // Diagnostics histogram
5cf05dbb 195 mutable Bool_t fZS[3]; // Zero-suppredded?
196 mutable UShort_t fZSFactor[3]; // Noise factor for Zero-suppression
02a27b50 197private:
d76c31f4 198
199 ClassDef(AliFMDReconstructor, 3) // class for the FMD reconstruction
121a60bd 200};
201#endif
4347b38f 202//____________________________________________________________________
203//
0d0e6995 204// Local Variables:
205// mode: C++
206// End:
207//
4347b38f 208// EOF
209//