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>
28 //____________________________________________________________________
37 /** @defgroup FMD_rec Reconstruction */
38 //____________________________________________________________________
39 /** @brief This is a class that reconstructs AliFMDRecPoint objects from of
41 This class reads either digits from a TClonesArray or raw data
42 from a DDL file (or similar), and applies calibrations to get
43 psuedo-inclusive multiplicities per strip.
47 class AliFMDReconstructor: public AliReconstructor
51 AliFMDReconstructor();
53 virtual ~AliFMDReconstructor();
55 /** Initialize the reconstructor. Here, we initialize the geometry
56 manager, and finds the local to global transformations from the
57 geometry. The calibration parameter manager is also
58 initialized (meaning that the calibration parameters is read
59 from CDB). Next, we try to get some information about the run
60 from the run loader passed.
61 @param runLoader Run loader to use to load and store data.
63 virtual void Init(AliRunLoader* runLoader);
64 /** Flag that we can convert raw data into digits.
65 @return always @c true */
66 virtual Bool_t HasDigitConversion() const { return kTRUE; }
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
71 @param reader Raw reader.
72 @param digitsTree Tree to store read digits in. */
73 virtual void ConvertDigits(AliRawReader* reader, TTree* digitsTree) const;
74 /** Flag that we can do one-event reconstruction.
75 @return always @c true */
76 virtual Bool_t HasLocalReconstruction() const { return kTRUE; }
77 /** Reconstruct one event from the digits passed in @a digitsTree.
78 The member function creates AliFMDRecPoint objects and stores
79 them on the output tree @a clusterTree. An FMD ESD object is
81 @todo Make sure we get a vertex.
82 @param digitsTree Tree holding the digits of this event
83 @param clusterTree Tree to store AliFMDRecPoint objects in. */
84 virtual void Reconstruct(TTree* digitsTree, TTree* clusterTree) const;
85 /** Put in the ESD data, the FMD ESD data. The object created by
86 the Reconstruct member function is copied to the ESD object.
87 @param digitsTree Tree of digits for this event - not used
88 @param clusterTree Tree of reconstructed points for this event
90 @param esd ESD object to store data in.
92 virtual void FillESD(TTree* digitsTree, TTree* clusterTree,
95 virtual void SetESD(AliESD* esd) { fESD = esd; }
98 /** Hide base classes unused function */
99 void Reconstruct(AliRawReader*, TTree*) const;
100 /** Hide base classes unused function */
101 void Reconstruct(AliRunLoader*) const;
102 /** Hide base classes unused function */
103 void Reconstruct(AliRunLoader*, AliRawReader*) const;
104 /** Hide base classes unused function */
105 void FillESD(AliRawReader*, TTree*, AliESD*) const;
106 /** Hide base classes unused function */
107 void FillESD(AliRunLoader*, AliESD*) const;
108 /** Hide base classes unused function */
109 void FillESD(AliRunLoader*, AliRawReader*, AliESD*) const;
113 @param other Object to copy from. */
114 AliFMDReconstructor(const AliFMDReconstructor& other);
115 /** Assignment operator
116 @param other Object to assign from
117 @return reference to this object */
118 AliFMDReconstructor& operator=(const AliFMDReconstructor& other);
119 /** Process AliFMDDigit objects in @a digits. For each digit, find
120 the psuedo-rapidity @f$ \eta@f$, azimuthal angle @f$ \varphi@f$,
121 energy deposited @f$ E@f$, and psuedo-inclusive multiplicity @f$
123 @param digits Array of digits. */
124 virtual void ProcessDigits(TClonesArray* digits) const;
125 /** Substract pedestals from raw ADC in @a digit
126 @param digit Digit data
127 @return Pedestal subtracted ADC count. */
128 virtual UShort_t SubtractPedestal(AliFMDDigit* digit) const;
129 /** Converts number of ADC counts to energy deposited. This is
134 where @f$ A_i@f$ is the pedestal subtracted ADC counts, and @f$
135 g_i@f$ is the gain for the @f$ i^{\mbox{th}}@f$ strip.
136 @param digit Raw data
137 @param eta Psuedo-rapidity of digit.
138 @param count Pedestal subtracted ADC counts
139 @return Energy deposited @f$ E_i@f$ */
140 virtual Float_t Adc2Energy(AliFMDDigit* digit, Float_t eta,
141 UShort_t count) const;
142 /** Converts an energy signal to number of particles. In this
143 implementation, it's done by
145 M_i = E_i / E_{\mbox{MIP}}
147 where @f$ E_i@f$ is the energy deposited, and @f$
148 E_{\mbox{MIP}}@f$ is the average energy deposited by a minimum
150 @param digit Raw data
151 @param edep Energy deposited @f$ E_i@f$
152 @return Psuedo-inclusive multiplicity @f$ M@f$ */
153 virtual Float_t Energy2Multiplicity(AliFMDDigit* digit, Float_t edep) const;
154 /** Calculate the physical coordinates psuedo-rapidity @f$ \eta@f$,
155 azimuthal angle @f$ \varphi@f$ of the strip corresponding to
156 the digit @a digit. This is done by using the information
157 obtained, and previously cached by AliFMDGeometry, from the
160 @param eta On return, psuedo-rapidity @f$ \eta@f$
161 @param phi On return, azimuthal angle @f$ \varphi@f$ */
162 virtual void PhysicalCoordinates(AliFMDDigit* digit, Float_t& eta,
165 mutable TClonesArray* fMult; // Cache of RecPoints
166 mutable Int_t fNMult; // Number of entries in fMult
167 mutable TTree* fTreeR; // Output tree
168 mutable Float_t fCurrentVertex; // Z-coordinate of primary vertex
169 mutable AliESDFMD* fESDObj; // ESD output object
172 ClassDef(AliFMDReconstructor, 0) // class for the FMD reconstruction
175 //____________________________________________________________________