//-- Authors: Evgeny Karpechev (INR) and Alla Maevskaia (INR)
// Latest changes by Christian Holm Christensen <cholm@nbi.dk>
/* $Id$ */
+/** @file AliFMDReconstructor.h
+ @author Christian Holm Christensen <cholm@nbi.dk>
+ @date Mon Mar 27 12:47:09 2006
+ @brief FMD reconstruction
+*/
//____________________________________________________________________
// Header guards in the header files speeds up the compilation
# include <AliReconstructor.h>
#endif
+#include "AliLog.h"
+
//____________________________________________________________________
class TTree;
class TClonesArray;
class AliFMDDigit;
class AliRawReader;
-class AliRunLoader;
-class AliESD;
+class AliESDEvent;
class AliESDFMD;
+class TH1;
+
/** @defgroup FMD_rec Reconstruction */
//____________________________________________________________________
-/** This is a class that reconstructs AliFMDRecPoint objects from of
- Digits. This class reads either digits from a TClonesArray or raw
- data from a DDL file (or similar), and applies calibrations to get
+/** @brief This is a class that reconstructs AliFMDRecPoint objects from of
+ Digits.
+ This class reads either digits from a TClonesArray or raw data
+ from a DDL file (or similar), and applies calibrations to get
psuedo-inclusive multiplicities per strip.
+
@ingroup FMD_rec
*/
class AliFMDReconstructor: public AliReconstructor
manager, and finds the local to global transformations from the
geometry. The calibration parameter manager is also
initialized (meaning that the calibration parameters is read
- from CDB). Next, we try to get some information about the run
- from the run loader passed.
- @param runLoader Run loader to use to load and store data.
+ from CDB).
*/
- virtual void Init(AliRunLoader* runLoader);
+ virtual void Init();
/** Flag that we can convert raw data into digits.
@return always @c true */
virtual Bool_t HasDigitConversion() const { return kTRUE; }
@param reader Raw reader.
@param digitsTree Tree to store read digits in. */
virtual void ConvertDigits(AliRawReader* reader, TTree* digitsTree) const;
- /** Flag that we can do one-event reconstruction.
- @return always @c true */
- virtual Bool_t HasLocalReconstruction() const { return kTRUE; }
/** Reconstruct one event from the digits passed in @a digitsTree.
The member function creates AliFMDRecPoint objects and stores
them on the output tree @a clusterTree. An FMD ESD object is
@param digitsTree Tree holding the digits of this event
@param clusterTree Tree to store AliFMDRecPoint objects in. */
virtual void Reconstruct(TTree* digitsTree, TTree* clusterTree) const;
+ /** Not used */
+ virtual void Reconstruct(AliRawReader *, TTree*) const;
/** Put in the ESD data, the FMD ESD data. The object created by
the Reconstruct member function is copied to the ESD object.
@param digitsTree Tree of digits for this event - not used
@param esd ESD object to store data in.
*/
virtual void FillESD(TTree* digitsTree, TTree* clusterTree,
- AliESD* esd) const;
+ AliESDEvent* esd) const;
+ /** Forwards to above member function */
+ virtual void FillESD(AliRawReader*, TTree* clusterTree,
+ AliESDEvent* esd) const;
/** Not used */
- virtual void SetESD(AliESD* esd) { fESD = esd; }
-
-private:
+ virtual void SetESD(AliESDEvent* esd) { fESD = esd; }
+ /** Set the noise factor
+ @param f Factor to use */
+ virtual void SetNoiseFactor(Float_t f=3) { fNoiseFactor = f; }
+ /** Set whether we should do angle correction or nor
+ @param use If true, do angle correction */
+ virtual void SetAngleCorrect(Bool_t use=kTRUE) { fAngleCorrect = use; }
+ /** Set whether we want to do diagnostics. If this is enabled, a
+ file named @c FMD.Diag.root will be made. It contains a set of
+ histograms for each event, filed in separate directories in the
+ file. The histograms are
+ @verbatim
+ diagStep1 Read ADC vs. Noise surpressed ADC
+ diagStep2 Noise surpressed ADC vs. calculated Energy dep.
+ diagStep3 Energy deposition vs. angle corrected Energy dep.
+ diagStep4 Energy deposition vs. calculated multiplicity
+ diagAll Read ADC vs. calculated multiplicity
+ @endverbatim
+ @param use If true, make the diagnostics file */
+ void SetDiagnose(Bool_t use=kTRUE) { fDiagnostics = use; }
+protected:
/** Copy CTOR
@param other Object to copy from. */
AliFMDReconstructor(const AliFMDReconstructor& other);
@param other Object to assign from
@return reference to this object */
AliFMDReconstructor& operator=(const AliFMDReconstructor& other);
- /** Hide base classes unused function */
- void Reconstruct(AliRawReader*, TTree*) const;
- /** Hide base classes unused function */
- void Reconstruct(AliRunLoader*) const;
- /** Hide base classes unused function */
- void Reconstruct(AliRunLoader*, AliRawReader*) const;
- /** Hide base classes unused function */
- void FillESD(AliRawReader*, TTree*, AliESD*) const;
- /** Hide base classes unused function */
- void FillESD(AliRunLoader*, AliESD*) const;
- /** Hide base classes unused function */
- void FillESD(AliRunLoader*, AliRawReader*, AliESD*) const;
-
-protected:
+ /** Try to get the vertex from either ESD or generator header. Sets
+ @c fCurrentVertex to the found Z posistion of the vertex (if
+ found), and sets the flag @c fVertexType accordingly */
+ virtual void GetVertex() const;
/** Process AliFMDDigit objects in @a digits. For each digit, find
the psuedo-rapidity @f$ \eta@f$, azimuthal angle @f$ \varphi@f$,
energy deposited @f$ E@f$, and psuedo-inclusive multiplicity @f$
virtual void PhysicalCoordinates(AliFMDDigit* digit, Float_t& eta,
Float_t& phi) const;
+ enum Vertex_t {
+ kNoVertex, // Got no vertex
+ kGenVertex, // Got generator vertex
+ kESDVertex // Got ESD vertex
+ };
mutable TClonesArray* fMult; // Cache of RecPoints
mutable Int_t fNMult; // Number of entries in fMult
mutable TTree* fTreeR; // Output tree
mutable Float_t fCurrentVertex; // Z-coordinate of primary vertex
mutable AliESDFMD* fESDObj; // ESD output object
- AliESD* fESD;
-
- ClassDef(AliFMDReconstructor, 0) // class for the FMD reconstruction
+ Float_t fNoiseFactor; // Factor of noise to check
+ Bool_t fAngleCorrect; // Whether to angle correct
+ mutable Vertex_t fVertexType; // What kind of vertex we got
+ AliESDEvent* fESD; // ESD object(?)
+ Bool_t fDiagnostics; // Wheter to do diagnostics
+ TH1* fDiagStep1; // Diagnostics histogram
+ TH1* fDiagStep2; // Diagnostics histogram
+ TH1* fDiagStep3; // Diagnostics histogram
+ TH1* fDiagStep4; // Diagnostics histogram
+ TH1* fDiagAll; // Diagnostics histogram
+private:
+
+ ClassDef(AliFMDReconstructor, 3) // class for the FMD reconstruction
};
#endif
//____________________________________________________________________